diff --git a/openpower/package/petitboot/petitboot-01-autotools-Add-autopoint-generated-files.patch b/openpower/package/petitboot/petitboot-01-autotools-Add-autopoint-generated-files.patch
deleted file mode 100644
index 5c2c0c0..0000000
--- a/openpower/package/petitboot/petitboot-01-autotools-Add-autopoint-generated-files.patch
+++ /dev/null
@@ -1,6764 +0,0 @@
-From c99b7d366a5e11414befbe653af3bc4b642aede8 Mon Sep 17 00:00:00 2001
-From: Jeremy Kerr <jk@ozlabs.org>
-Date: Fri, 12 Dec 2014 09:35:40 +0800
-Subject: [PATCH] autotools: Add autopoint-generated files
-
-Since buildroot doesn't give us an autopoint, we're unable to regenerate
-these files. Add the autopoint artefacts required to do an autoreconf
-without autopoint.
-
-Generated with:
-
-  touch .stamp
-  autopoint
-  find . -type f -newer stamp | xargs git add
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
----
- ABOUT-NLS              | 1282 ++++++++++++++++++++++++++++++++++++++++++++++++
- config.rpath           |  672 +++++++++++++++++++++++++
- m4/codeset.m4          |   21 +
- m4/fcntl-o.m4          |   81 +++
- m4/gettext.m4          |  383 +++++++++++++++
- m4/glibc2.m4           |   30 ++
- m4/glibc21.m4          |   30 ++
- m4/iconv.m4            |  214 ++++++++
- m4/intdiv0.m4          |   84 ++++
- m4/intl.m4             |  294 +++++++++++
- m4/intldir.m4          |   19 +
- m4/intlmacosx.m4       |   51 ++
- m4/intmax.m4           |   33 ++
- m4/inttypes-pri.m4     |   36 ++
- m4/inttypes_h.m4       |   26 +
- m4/lcmessage.m4        |   31 ++
- m4/lib-ld.m4           |  110 +++++
- m4/lib-link.m4         |  774 +++++++++++++++++++++++++++++
- m4/lib-prefix.m4       |  224 +++++++++
- m4/lock.m4             |   37 ++
- m4/longlong.m4         |  106 ++++
- m4/nls.m4              |   32 ++
- m4/po.m4               |  449 +++++++++++++++++
- m4/printf-posix.m4     |   45 ++
- m4/progtest.m4         |   92 ++++
- m4/size_max.m4         |   75 +++
- m4/stdint_h.m4         |   26 +
- m4/threadlib.m4        |  347 +++++++++++++
- m4/uintmax_t.m4        |   30 ++
- m4/visibility.m4       |   74 +++
- m4/wchar_t.m4          |   20 +
- m4/wint_t.m4           |   28 ++
- m4/xsize.m4            |   13 +
- po/Makefile.in.in      |  444 +++++++++++++++++
- po/Makevars.template   |   41 ++
- po/Rules-quot          |   47 ++
- po/boldquot.sed        |   10 +
- po/en@boldquot.header  |   25 +
- po/en@quot.header      |   22 +
- po/insert-header.sin   |   23 +
- po/quot.sed            |    6 +
- po/remove-potcdate.sin |   19 +
- 42 files changed, 6406 insertions(+)
- create mode 100644 ABOUT-NLS
- create mode 100755 config.rpath
- create mode 100644 m4/codeset.m4
- create mode 100644 m4/fcntl-o.m4
- create mode 100644 m4/gettext.m4
- create mode 100644 m4/glibc2.m4
- create mode 100644 m4/glibc21.m4
- create mode 100644 m4/iconv.m4
- create mode 100644 m4/intdiv0.m4
- create mode 100644 m4/intl.m4
- create mode 100644 m4/intldir.m4
- create mode 100644 m4/intlmacosx.m4
- create mode 100644 m4/intmax.m4
- create mode 100644 m4/inttypes-pri.m4
- create mode 100644 m4/inttypes_h.m4
- create mode 100644 m4/lcmessage.m4
- create mode 100644 m4/lib-ld.m4
- create mode 100644 m4/lib-link.m4
- create mode 100644 m4/lib-prefix.m4
- create mode 100644 m4/lock.m4
- create mode 100644 m4/longlong.m4
- create mode 100644 m4/nls.m4
- create mode 100644 m4/po.m4
- create mode 100644 m4/printf-posix.m4
- create mode 100644 m4/progtest.m4
- create mode 100644 m4/size_max.m4
- create mode 100644 m4/stdint_h.m4
- create mode 100644 m4/threadlib.m4
- create mode 100644 m4/uintmax_t.m4
- create mode 100644 m4/visibility.m4
- create mode 100644 m4/wchar_t.m4
- create mode 100644 m4/wint_t.m4
- create mode 100644 m4/xsize.m4
- create mode 100644 po/Makefile.in.in
- create mode 100644 po/Makevars.template
- create mode 100644 po/Rules-quot
- create mode 100644 po/boldquot.sed
- create mode 100644 po/en@boldquot.header
- create mode 100644 po/en@quot.header
- create mode 100644 po/insert-header.sin
- create mode 100644 po/quot.sed
- create mode 100644 po/remove-potcdate.sin
-
-diff --git a/ABOUT-NLS b/ABOUT-NLS
-new file mode 100644
-index 0000000..b1de1b6
---- /dev/null
-+++ b/ABOUT-NLS
-@@ -0,0 +1,1282 @@
-+1 Notes on the Free Translation Project
-+***************************************
-+
-+Free software is going international!  The Free Translation Project is
-+a way to get maintainers of free software, translators, and users all
-+together, so that free software will gradually become able to speak many
-+languages.  A few packages already provide translations for their
-+messages.
-+
-+   If you found this `ABOUT-NLS' file inside a distribution, you may
-+assume that the distributed package does use GNU `gettext' internally,
-+itself available at your nearest GNU archive site.  But you do _not_
-+need to install GNU `gettext' prior to configuring, installing or using
-+this package with messages translated.
-+
-+   Installers will find here some useful hints.  These notes also
-+explain how users should proceed for getting the programs to use the
-+available translations.  They tell how people wanting to contribute and
-+work on translations can contact the appropriate team.
-+
-+1.1 INSTALL Matters
-+===================
-+
-+Some packages are "localizable" when properly installed; the programs
-+they contain can be made to speak your own native language.  Most such
-+packages use GNU `gettext'.  Other packages have their own ways to
-+internationalization, predating GNU `gettext'.
-+
-+   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.  Installers may use special
-+options at configuration time for changing the default behaviour.  The
-+command:
-+
-+     ./configure --disable-nls
-+
-+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' 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
-+translations have been forbidden at `configure' time by using the
-+`--disable-nls' switch, all available translations are installed
-+together with the package.  However, the environment variable `LINGUAS'
-+may be set, prior to configuration, to limit the installed set.
-+`LINGUAS' should then contain a space separated list of two-letter
-+codes, stating which languages are allowed.
-+
-+1.2 Using This Package
-+======================
-+
-+As a user, if your language has been installed for this package, you
-+only have to set the `LANG' environment variable to the appropriate
-+`LL_CC' combination.  If you happen to have the `LC_ALL' or some other
-+`LC_xxx' environment variables set, you should unset them before
-+setting `LANG', otherwise the setting of `LANG' will not have the
-+desired effect.  Here `LL' is an ISO 639 two-letter language code, and
-+`CC' is an ISO 3166 two-letter country code.  For example, let's
-+suppose that you speak German and live in Germany.  At the shell
-+prompt, merely execute `setenv LANG de_DE' (in `csh'),
-+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
-+This can be done from your `.login' or `.profile' file, once and for
-+all.
-+
-+   You might think that the country code specification is redundant.
-+But in fact, some languages have dialects in different countries.  For
-+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
-+country code serves to distinguish the dialects.
-+
-+   The locale naming convention of `LL_CC', with `LL' denoting the
-+language and `CC' denoting the country, is the one use on systems based
-+on GNU libc.  On other systems, some variations of this scheme are
-+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
-+locales supported by your system for your language by running the
-+command `locale -a | grep '^LL''.
-+
-+   Not all programs have translations for all languages.  By default, an
-+English message is shown in place of a nonexistent translation.  If you
-+understand other languages, you can set up a priority list of languages.
-+This is done through a different environment variable, called
-+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
-+for the purpose of message handling, but you still need to have `LANG'
-+set to the primary language; this is required by other parts of the
-+system libraries.  For example, some Swedish users who would rather
-+read translations in German than English for when Swedish is not
-+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
-+
-+   Special advice for Norwegian users: The language code for Norwegian
-+bokma*l changed from `no' to `nb' recently (in 2003).  During the
-+transition period, while some message catalogs for this language are
-+installed under `nb' and some older ones under `no', it's recommended
-+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
-+older translations are used.
-+
-+   In the `LANGUAGE' environment variable, but not in the `LANG'
-+environment variable, `LL_CC' combinations can be abbreviated as `LL'
-+to denote the language's main dialect.  For example, `de' is equivalent
-+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
-+(Portuguese as spoken in Portugal) in this context.
-+
-+1.3 Translating Teams
-+=====================
-+
-+For the Free Translation Project to be a success, we need interested
-+people who like their own language and write it well, and who are also
-+able to synergize with other translators speaking the same language.
-+Each translation team has its own mailing list.  The up-to-date list of
-+teams can be found at the Free Translation Project's homepage,
-+`http://translationproject.org/', in the "Teams" area.
-+
-+   If you'd like to volunteer to _work_ at translating messages, you
-+should become a member of the translating team for your own language.
-+The subscribing address is _not_ the same as the list itself, it has
-+`-request' appended.  For example, speakers of Swedish can send a
-+message to `sv-request@li.org', having this message body:
-+
-+     subscribe
-+
-+   Keep in mind that team members are expected to participate
-+_actively_ in translations, or at solving translational difficulties,
-+rather than merely lurking around.  If your team does not exist yet and
-+you want to start one, or if you are unsure about what to do or how to
-+get started, please write to `coordinator@translationproject.org' to
-+reach the coordinator for all translator teams.
-+
-+   The English team is special.  It works at improving and uniformizing
-+the terminology in use.  Proven linguistic skills are praised more than
-+programming skills, here.
-+
-+1.4 Available Packages
-+======================
-+
-+Languages are not equally supported in all packages.  The following
-+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 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
-+
-+                          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             |        []  []                    [] []    []    |
-+     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   | []  [] []  []                    [] []          |
-+                        +-------------------------------------------------+
-+                          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
-+
-+                          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
-+                        +-----------------------------------------------+
-+     a2ps               |                               []              |
-+     aegis              |                                               |
-+     ant-phone          |                                               |
-+     anubis             |                               []    []        |
-+     aspell             |                         []                    |
-+     bash               |                                               |
-+     bfd                |                                               |
-+     bibshelf           |                []             []              |
-+     binutils           |                                               |
-+     bison              |                               []              |
-+     bison-runtime      |       []    [] []             []    []        |
-+     bluez-pin          |    [] []    [] []             []              |
-+     bombono-dvd        |                                               |
-+     buzztard           |                                               |
-+     cflow              |                                               |
-+     clisp              |                                               |
-+     coreutils          |          []                                   |
-+     cpio               |                                               |
-+     cppi               |                                               |
-+     cpplib             |                                               |
-+     cryptsetup         |                                               |
-+     dfarc              |                   []                          |
-+     dialog             |    []       [] []             []    []        |
-+     dico               |                                               |
-+     diffutils          |                []             []              |
-+     dink               |                                               |
-+     doodle             |                                               |
-+     e2fsprogs          |                                               |
-+     enscript           |                                               |
-+     exif               |                []                             |
-+     fetchmail          |                                               |
-+     findutils          |                                               |
-+     flex               |                                               |
-+     freedink           |                                     []        |
-+     gas                |                                               |
-+     gawk               |                                               |
-+     gcal               |                                               |
-+     gcc                |                                               |
-+     gettext-examples   |       []       []             [] []           |
-+     gettext-runtime    | []                                            |
-+     gettext-tools      | []                                            |
-+     gip                |                []             []              |
-+     gjay               |                                               |
-+     gliv               |                                               |
-+     glunarclock        |                []                             |
-+     gnubiff            |                                               |
-+     gnucash            | ()          ()                      ()     () |
-+     gnuedu             |                                               |
-+     gnulib             |                                               |
-+     gnunet             |                                               |
-+     gnunet-gtk         |                                               |
-+     gnutls             |                               []              |
-+     gold               |                                               |
-+     gpe-aerial         |                []                             |
-+     gpe-beam           |                []                             |
-+     gpe-bluetooth      |                []                []           |
-+     gpe-calendar       |                []                             |
-+     gpe-clock          | []    []       []             [] []           |
-+     gpe-conf           | []             []                             |
-+     gpe-contacts       | []             []                             |
-+     gpe-edit           |                []                             |
-+     gpe-filemanager    | []             []                             |
-+     gpe-go             | []             []                []           |
-+     gpe-login          |                []                             |
-+     gpe-ownerinfo      |                []             []              |
-+     gpe-package        | []             []                             |
-+     gpe-sketchbook     | []             []                             |
-+     gpe-su             | []    []       []             [] [] []        |
-+     gpe-taskmanager    | [] [] []       []             [] []           |
-+     gpe-timesheet      |                []             []              |
-+     gpe-today          |       []       []             [] []           |
-+     gpe-todo           |                []                   []        |
-+     gphoto2            |                                               |
-+     gprof              |                               []              |
-+     gpsdrive           |                                               |
-+     gramadoir          |                                               |
-+     grep               |                                               |
-+     grub               |                                               |
-+     gsasl              |                                               |
-+     gss                |                                               |
-+     gst-plugins-bad    |             [] []                [] []        |
-+     gst-plugins-base   |             [] []                             |
-+     gst-plugins-good   |                []                []           |
-+     gst-plugins-ugly   |             [] []             [] [] []        |
-+     gstreamer          |                                               |
-+     gtick              |                                               |
-+     gtkam              |                                     []        |
-+     gtkorphan          |                []                      []     |
-+     gtkspell           |       []    [] []       []    []    [] []     |
-+     gutenprint         |                                               |
-+     hello              | []             []             []              |
-+     help2man           |                                               |
-+     hylafax            |                                               |
-+     idutils            |                                               |
-+     indent             |                                               |
-+     iso_15924          |             [] []                             |
-+     iso_3166           | [] []       () [] [] []    []       []        |
-+     iso_3166_2         |                                               |
-+     iso_4217           |             []                      []        |
-+     iso_639            |                      []    []                 |
-+     iso_639_3          |                            []                 |
-+     jwhois             |                []                             |
-+     kbd                |                                               |
-+     keytouch           |                []                             |
-+     keytouch-editor    |                []                             |
-+     keytouch-keyboa... |                []                             |
-+     klavaro            |                                     []        |
-+     latrine            |                []                             |
-+     ld                 |                                               |
-+     leafpad            | []          [] []                             |
-+     libc               | []                                            |
-+     libexif            |                                               |
-+     libextractor       |                                               |
-+     libgnutls          |                               []              |
-+     libgpewidget       |                []             []              |
-+     libgpg-error       |                                               |
-+     libgphoto2         |                                               |
-+     libgphoto2_port    |                                               |
-+     libgsasl           |                                               |
-+     libiconv           |                                               |
-+     libidn             |                                               |
-+     lifelines          |                                               |
-+     liferea            |                                               |
-+     lilypond           |                                               |
-+     linkdr             |                                               |
-+     lordsawar          |                                               |
-+     lprng              |                                               |
-+     lynx               |                                               |
-+     m4                 |                                               |
-+     mailfromd          |                                               |
-+     mailutils          |                                               |
-+     make               | []                                            |
-+     man-db             |                                               |
-+     man-db-manpages    |                                               |
-+     minicom            |                                     []        |
-+     mkisofs            |                                               |
-+     myserver           |                                               |
-+     nano               |                               []    []        |
-+     opcodes            |                                               |
-+     parted             |                                               |
-+     pies               |                                               |
-+     popt               | []             []                   []        |
-+     psmisc             |                                               |
-+     pspp               |                                               |
-+     pwdutils           |                                               |
-+     radius             |                                               |
-+     recode             |                                               |
-+     rosegarden         |                                               |
-+     rpm                |                                               |
-+     rush               |                                               |
-+     sarg               |                                               |
-+     screem             |                                               |
-+     scrollkeeper       |                                     []     [] |
-+     sed                |                                               |
-+     sharutils          |                                               |
-+     shishi             |                                               |
-+     skencil            |                                               |
-+     solfege            |                                     []        |
-+     solfege-manual     |                                               |
-+     soundtracker       |                                               |
-+     sp                 |                                               |
-+     sysstat            |                []                             |
-+     tar                |       []                                      |
-+     texinfo            |                                     []        |
-+     tin                |                                               |
-+     unicode-han-tra... |                                               |
-+     unicode-transla... |                                               |
-+     util-linux-ng      |                                               |
-+     vice               |                                               |
-+     vmm                |                                               |
-+     vorbis-tools       |                                               |
-+     wastesedge         |                                               |
-+     wdiff              |                                               |
-+     wget               |             []                                |
-+     wyslij-po          |                                               |
-+     xchat              | []             [] []                          |
-+     xdg-user-dirs      | [] []       [] [] []       []       [] []     |
-+     xkeyboard-config   | []    []    []                                |
-+                        +-----------------------------------------------+
-+                          ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
-+                          20  5 10  1 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
-+                        +---------------------------------------------------+
-+     a2ps               | []           []     []  []   [] []       []    [] |
-+     aegis              | []                      []      []                |
-+     ant-phone          |                         []   []                   |
-+     anubis             | []           []                 []                |
-+     aspell             | []                           [] []    [] []       |
-+     bash               | []                                    []          |
-+     bfd                |                                 []                |
-+     bibshelf           | []  []                                            |
-+     binutils           |                                 []    []          |
-+     bison              | []           []                 []                |
-+     bison-runtime      | []           []     []  []   [] []       []       |
-+     bluez-pin          | []           []         []   [] []    [] []    [] |
-+     bombono-dvd        |     []                          ()                |
-+     buzztard           | []  []                                            |
-+     cflow              |              []                                   |
-+     clisp              | []                              []                |
-+     coreutils          | []           []     []  []      []       []       |
-+     cpio               | []           []                 []                |
-+     cppi               |              []                                   |
-+     cpplib             | []                                                |
-+     cryptsetup         | []                                                |
-+     dfarc              |              []                                   |
-+     dialog             | []           []         []      []                |
-+     dico               |              []                                   |
-+     diffutils          | []           []         []   [] []             [] |
-+     dink               | ()                                                |
-+     doodle             | []                                          []    |
-+     e2fsprogs          | []           []                                   |
-+     enscript           | []                      []   [] []       []       |
-+     exif               | []           []              [] ()    []          |
-+     fetchmail          | []           []                 []          []    |
-+     findutils          | []           []     []          []       []       |
-+     flex               | []           []         []   [] []                |
-+     freedink           | []           []                                   |
-+     gas                |                                                   |
-+     gawk               | []           []         []   []                   |
-+     gcal               |                                                   |
-+     gcc                |                                                [] |
-+     gettext-examples   | []           []     []       [] []    [] []    [] |
-+     gettext-runtime    | []  []       []     []       [] []    [] []    [] |
-+     gettext-tools      |              []              [] []    [] []    [] |
-+     gip                | []           []                 []    []       [] |
-+     gjay               |                                                   |
-+     gliv               | []           []         []   [] []    []          |
-+     glunarclock        | []                      []   []       []       [] |
-+     gnubiff            | []                           ()                   |
-+     gnucash            | []           ()         ()      ()                |
-+     gnuedu             | []                                                |
-+     gnulib             | []           []                 []       []       |
-+     gnunet             |                                                   |
-+     gnunet-gtk         |                                                   |
-+     gnutls             | []           []                                   |
-+     gold               |                                                   |
-+     gpe-aerial         | []                  []  []   [] []       []    [] |
-+     gpe-beam           | []                  []  []   [] []       []    [] |
-+     gpe-bluetooth      | []                      []                        |
-+     gpe-calendar       |                         []      []       []    [] |
-+     gpe-clock          | []                  []  []   [] []    [] []    [] |
-+     gpe-conf           | []                  []  []   [] []    [] []       |
-+     gpe-contacts       |                         []   [] []       []    [] |
-+     gpe-edit           | []           []                          []       |
-+     gpe-filemanager    | []                              []       []       |
-+     gpe-go             | []           []         []   [] []    [] []    [] |
-+     gpe-login          | []                      []                        |
-+     gpe-ownerinfo      | []                  []  []   [] []    [] []    [] |
-+     gpe-package        | []                                       []       |
-+     gpe-sketchbook     | []                  []  []   [] []       []    [] |
-+     gpe-su             | []                  []  []   [] []    [] []    [] |
-+     gpe-taskmanager    | []                  []  []   [] []    [] []    [] |
-+     gpe-timesheet      | []                  []  []   [] []    [] []    [] |
-+     gpe-today          | []                  []  []   [] []    [] []    [] |
-+     gpe-todo           | []                      []      []       []    [] |
-+     gphoto2            | []        [] []         []   [] []    []       [] |
-+     gprof              | []                      []   []                   |
-+     gpsdrive           | []                              []                |
-+     gramadoir          | []                                    []          |
-+     grep               | []           []                 []    []          |
-+     grub               | []           []                 []                |
-+     gsasl              | []           []                       []       [] |
-+     gss                |              []              []       []          |
-+     gst-plugins-bad    | []           []         []      []    []    []    |
-+     gst-plugins-base   | []           []         []      []    []          |
-+     gst-plugins-good   | []           []         []      []    []          |
-+     gst-plugins-ugly   | []           []         []      []    [] []       |
-+     gstreamer          | []           []         []      []    []          |
-+     gtick              | []                              []    []          |
-+     gtkam              | []        [] []         []      []    []          |
-+     gtkorphan          | []                                                |
-+     gtkspell           | []           []     []  []   [] []    [] [] [] [] |
-+     gutenprint         | []                              []                |
-+     hello              | []           []                       [] []       |
-+     help2man           |              []                 []                |
-+     hylafax            | []                                                |
-+     idutils            | []           []         []   [] []                |
-+     indent             | []           []         []   [] []    []       [] |
-+     iso_15924          | []           []                 []       []       |
-+     iso_3166           | []  [] [] [] []     ()  []   [] [] [] [] [] [] [] |
-+     iso_3166_2         | []           []                          []       |
-+     iso_4217           | []  []       []     []          [] []    []    [] |
-+     iso_639            | []     [] [] []                 [] [] [] []    [] |
-+     iso_639_3          |        [] []                                      |
-+     jwhois             | []           []         []   []                   |
-+     kbd                | []           []              []                   |
-+     keytouch           | []           []                       []          |
-+     keytouch-editor    | []           []                       []          |
-+     keytouch-keyboa... | []           []                       []          |
-+     klavaro            | []                      []                        |
-+     latrine            |              []                 []                |
-+     ld                 |                                                   |
-+     leafpad            | []  []       []     []  []      []    [] []    [] |
-+     libc               | []           []                 []    []          |
-+     libexif            | []           []         ()            []          |
-+     libextractor       |                                                   |
-+     libgnutls          | []           []                                   |
-+     libgpewidget       | []           []                          []       |
-+     libgpg-error       |              []              []                   |
-+     libgphoto2         | []           []                                   |
-+     libgphoto2_port    | []           []         []      []    []          |
-+     libgsasl           | []           []              []       []       [] |
-+     libiconv           | []           []                       [] []    [] |
-+     libidn             | []           []                                   |
-+     lifelines          | []           []                                   |
-+     liferea            | []           []     []  []   [] ()    ()    []    |
-+     lilypond           | []                                                |
-+     linkdr             | []                  []          []                |
-+     lordsawar          |                                                   |
-+     lprng              |              []                                   |
-+     lynx               | []                      []      []                |
-+     m4                 | []           []         []   [] []                |
-+     mailfromd          |              []                                   |
-+     mailutils          |              []                                   |
-+     make               | []           []         []      []                |
-+     man-db             | []           []                 []                |
-+     man-db-manpages    | []           []                 []                |
-+     minicom            |              []         []   [] []                |
-+     mkisofs            | []           []                 []                |
-+     myserver           |                                                   |
-+     nano               | []           []         []      []                |
-+     opcodes            | []                           []                   |
-+     parted             | []           []                 []    []          |
-+     pies               |              []                                   |
-+     popt               | []           []     []          []                |
-+     psmisc             | []           []                 []                |
-+     pspp               | []                      []                        |
-+     pwdutils           |              []                                   |
-+     radius             | []           []                 []                |
-+     recode             | []           []     []  []   [] []    [] []       |
-+     rosegarden         |              ()                 ()                |
-+     rpm                | []           []     []                            |
-+     rush               | []           []                                   |
-+     sarg               |                                                   |
-+     screem             |                                                   |
-+     scrollkeeper       | []  []       []              [] []    []    [] [] |
-+     sed                | []           []     []  []   [] []    [] []    [] |
-+     sharutils          | []           []                 []             [] |
-+     shishi             |              []                                   |
-+     skencil            |                     []  []                        |
-+     solfege            | []           []         []      []                |
-+     solfege-manual     | []           []         []                        |
-+     soundtracker       |                                       []          |
-+     sp                 |                                                   |
-+     sysstat            | []           []         []      []                |
-+     tar                | []           []                 []       []       |
-+     texinfo            | []           []              [] []                |
-+     tin                |                                 []                |
-+     unicode-han-tra... |                                                   |
-+     unicode-transla... |                                                   |
-+     util-linux-ng      | []           []         []      []       []       |
-+     vice               | []                                                |
-+     vmm                | []                                                |
-+     vorbis-tools       | []           []                                   |
-+     wastesedge         | []                                                |
-+     wdiff              | []           []                                   |
-+     wget               | []           []     []  []      []    [] []       |
-+     wyslij-po          | []  []       []                                   |
-+     xchat              | []        [] []     []          []    [] [] [] [] |
-+     xdg-user-dirs      | []  [] [] [] []  [] []  []   [] []    [] [] [] [] |
-+     xkeyboard-config   | []           []                 []                |
-+                        +---------------------------------------------------+
-+                          nl  nn or pa pl  ps pt pt_BR ro ru rw sk sl sq sr
-+                          135 10  4  7 105  1 29  62   47 91  3 54 46  9 37
-+
-+                          sv  sw ta te tg th tr uk vi  wa zh_CN zh_HK zh_TW
-+                        +---------------------------------------------------+
-+     a2ps               | []              [] [] [] []                       | 27
-+     aegis              |                          []                       |  9
-+     ant-phone          | []                 []    []      []               |  9
-+     anubis             | []                 [] [] []                       | 15
-+     aspell             |                       [] []  []                   | 20
-+     bash               | []                    [] []                       | 12
-+     bfd                |                          []                       |  6
-+     bibshelf           | []                       []      []               | 16
-+     binutils           |                       [] []                       |  8
-+     bison              | []                       []                       | 12
-+     bison-runtime      | []              []    [] []      []          []   | 29
-+     bluez-pin          | []              [] [] [] []  []  []          []   | 37
-+     bombono-dvd        |                          []                       |  4
-+     buzztard           |                          []                       |  7
-+     cflow              |                       [] []      []               |  9
-+     clisp              |                                                   | 10
-+     coreutils          | []                    [] []      []               | 22
-+     cpio               | []                 [] [] []      []          []   | 13
-+     cppi               |                       [] []                       |  5
-+     cpplib             | []                 [] [] []      []          []   | 14
-+     cryptsetup         | []                       []                       |  7
-+     dfarc              |                          []                       |  9
-+     dialog             | []  []          []       []  []  []          []   | 30
-+     dico               |                       []                          |  2
-+     diffutils          | []                 [] [] []      []          []   | 30
-+     dink               |                                                   |  4
-+     doodle             | []                       []                       |  7
-+     e2fsprogs          | []                 []    []                       | 11
-+     enscript           | []                 [] [] []                       | 17
-+     exif               | []                       []      []               | 16
-+     fetchmail          |                    []    []      []               | 17
-+     findutils          | []                 [] [] []      []               | 20
-+     flex               | []                 []    []                  []   | 15
-+     freedink           |                          []                       | 10
-+     gas                |                    []                             |  4
-+     gawk               | []                 []    []      []               | 18
-+     gcal               | []                 []                             |  5
-+     gcc                | []                 []            []               |  7
-+     gettext-examples   | []                 [] [] []      []    []    []   | 34
-+     gettext-runtime    | []                 [] [] []      []    []    []   | 29
-+     gettext-tools      | []                 [] [] []      []          []   | 22
-+     gip                | []                       []      []          []   | 22
-+     gjay               |                          []                       |  3
-+     gliv               | []                 []    []                       | 14
-+     glunarclock        | []                       []  []  []          []   | 19
-+     gnubiff            | []                       []                       |  4
-+     gnucash            |                    () [] ()      []          ()   | 10
-+     gnuedu             |                          []                  []   |  7
-+     gnulib             | []                    [] []      []               | 16
-+     gnunet             |                          []                       |  1
-+     gnunet-gtk         | []                 []    []                       |  5
-+     gnutls             | []                       []      []               | 10
-+     gold               |                          []                       |  4
-+     gpe-aerial         | []                       []      []               | 18
-+     gpe-beam           | []                       []      []               | 19
-+     gpe-bluetooth      | []                       []      []               | 13
-+     gpe-calendar       | []                       []  []  []               | 12
-+     gpe-clock          | []                 []    []  []  []               | 28
-+     gpe-conf           | []                       []  []  []               | 20
-+     gpe-contacts       | []                       []      []               | 17
-+     gpe-edit           | []                       []      []               | 12
-+     gpe-filemanager    | []                       []  []  []               | 16
-+     gpe-go             | []                 []    []  []  []               | 25
-+     gpe-login          | []                       []      []               | 11
-+     gpe-ownerinfo      | []                 []    []      []          []   | 25
-+     gpe-package        | []                       []      []               | 13
-+     gpe-sketchbook     | []                       []      []               | 20
-+     gpe-su             | []                 []    []  []  []               | 30
-+     gpe-taskmanager    | []                 []    []  []  []               | 29
-+     gpe-timesheet      | []                 []    []      []          []   | 25
-+     gpe-today          | []                 []    []  []  []          []   | 30
-+     gpe-todo           | []                       []  []  []               | 17
-+     gphoto2            | []                    [] []      []          []   | 24
-+     gprof              | []                 []    []                       | 15
-+     gpsdrive           | []                       []      []               | 11
-+     gramadoir          | []                       []      []               | 11
-+     grep               |                 []       []      []               | 10
-+     grub               | []                       []      []               | 14
-+     gsasl              | []                       []      []          []   | 14
-+     gss                | []                       []      []               | 11
-+     gst-plugins-bad    | []                 []    []      []               | 26
-+     gst-plugins-base   | []                 [] [] []      []               | 24
-+     gst-plugins-good   | []                 []    []      []               | 24
-+     gst-plugins-ugly   | []                 [] [] []      []               | 29
-+     gstreamer          | []                    [] []      []               | 22
-+     gtick              |                       [] []      []               | 13
-+     gtkam              | []                       []      []               | 20
-+     gtkorphan          | []                       []      []               | 14
-+     gtkspell           | []              [] [] [] []  []  []    []    []   | 45
-+     gutenprint         | []                                                | 10
-+     hello              | []              [] []    []      []          []   | 21
-+     help2man           | []                       []                       |  7
-+     hylafax            |                          []                       |  5
-+     idutils            | []                 []    []      []               | 17
-+     indent             | []                 [] [] []      []          []   | 30
-+     iso_15924          |                 ()    [] ()      []          []   | 16
-+     iso_3166           | []        []    () [] [] ()  []  []    []    ()   | 53
-+     iso_3166_2         |                 ()    [] ()      []               |  9
-+     iso_4217           | []              () [] [] ()      []    []         | 26
-+     iso_639            | []     [] []    ()    [] ()  []  []    []    []   | 38
-+     iso_639_3          |        []                ()                       |  8
-+     jwhois             | []                 []    []      []          []   | 16
-+     kbd                | []                 [] [] []      []               | 15
-+     keytouch           | []                       []      []               | 16
-+     keytouch-editor    | []                       []      []               | 14
-+     keytouch-keyboa... | []                       []      []               | 14
-+     klavaro            |                          []                       | 11
-+     latrine            |                    []    []      []               | 10
-+     ld                 | []                 []    []                  []   | 11
-+     leafpad            | []                 [] [] []      []          []   | 33
-+     libc               | []                 []    []      []          []   | 21
-+     libexif            |                          []      ()               |  7
-+     libextractor       |                          []                       |  1
-+     libgnutls          | []                       []      []               |  9
-+     libgpewidget       | []                       []      []               | 14
-+     libgpg-error       | []                       []      []               |  9
-+     libgphoto2         |                       [] []                       |  8
-+     libgphoto2_port    | []                    [] []                  []   | 14
-+     libgsasl           | []                       []      []               | 13
-+     libiconv           | []                       []  []  []               | 21
-+     libidn             | ()                       []      []               | 11
-+     lifelines          | []                                                |  4
-+     liferea            | []                 []            []               | 21
-+     lilypond           |                          []                       |  7
-+     linkdr             | []                 []    []      []          []   | 17
-+     lordsawar          |                                                   |  1
-+     lprng              |                          []                       |  3
-+     lynx               | []                 [] [] []                       | 17
-+     m4                 | []                       []      []          []   | 19
-+     mailfromd          |                       [] []                       |  3
-+     mailutils          |                          []                       |  5
-+     make               | []                 []    []      []               | 21
-+     man-db             | []                       []      []               |  8
-+     man-db-manpages    |                                                   |  4
-+     minicom            | []                       []                       | 16
-+     mkisofs            |                          []      []               |  9
-+     myserver           |                                                   |  0
-+     nano               | []                       []      []          []   | 21
-+     opcodes            | []                 []    []                       | 11
-+     parted             | []                 [] [] []                  []   | 15
-+     pies               |                       [] []                       |  3
-+     popt               | []              [] []    []      []          []   | 27
-+     psmisc             | []                       []                       | 11
-+     pspp               |                                                   |  4
-+     pwdutils           | []                       []                       |  6
-+     radius             |                       [] []                       |  9
-+     recode             | []                 []    []      []               | 28
-+     rosegarden         | ()                                                |  0
-+     rpm                | []                       []                  []   | 11
-+     rush               |                       [] []                       |  4
-+     sarg               |                                                   |  1
-+     screem             |                          []                       |  3
-+     scrollkeeper       | []                 [] [] []                  []   | 27
-+     sed                | []                 []    []      []          []   | 30
-+     sharutils          | []                 []    []      []          []   | 22
-+     shishi             |                          []                       |  3
-+     skencil            | []                       []                       |  7
-+     solfege            | []                 []    []      []               | 16
-+     solfege-manual     |                    []                             |  8
-+     soundtracker       | []                 []    []                       |  9
-+     sp                 |                    []                             |  3
-+     sysstat            |                          []      []               | 15
-+     tar                | []                 [] [] []      []          []   | 23
-+     texinfo            | []                 [] [] []      []               | 17
-+     tin                |                                                   |  4
-+     unicode-han-tra... |                                                   |  0
-+     unicode-transla... |                                                   |  2
-+     util-linux-ng      | []                 [] [] []                       | 20
-+     vice               | ()                 ()                             |  1
-+     vmm                |                          []                       |  4
-+     vorbis-tools       |                          []                       |  6
-+     wastesedge         |                                                   |  2
-+     wdiff              | []                       []                       |  7
-+     wget               | []                 []    []      []          []   | 26
-+     wyslij-po          |                       [] []                       |  8
-+     xchat              | []              []    [] []      []          []   | 36
-+     xdg-user-dirs      | []     [] []    [] [] [] []      []    []    []   | 63
-+     xkeyboard-config   | []                    [] []                       | 22
-+                        +---------------------------------------------------+
-+       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
-+used for implementing regional variants of languages, or language
-+dialects.
-+
-+   For a PO file in the matrix above to be effective, the package to
-+which it applies should also have been internationalized and
-+distributed as such by its maintainer.  There might be an observable
-+lag between the mere existence a PO file and its wide availability in a
-+distribution.
-+
-+   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.5 Using `gettext' in new packages
-+===================================
-+
-+If you are writing a freely available program and want to
-+internationalize it you are welcome to use GNU `gettext' in your
-+package.  Of course you have to respect the GNU Library General Public
-+License which covers the use of the GNU `gettext' library.  This means
-+in particular that even non-free programs can use `libintl' as a shared
-+library, whereas only free software can use `libintl' as a static
-+library or use modified versions of `libintl'.
-+
-+   Once the sources are changed appropriately and the setup can handle
-+the use of `gettext' the only thing missing are the translations.  The
-+Free Translation Project is also available for packages which are not
-+developed inside the GNU project.  Therefore the information given above
-+applies also for every other Free Software Project.  Contact
-+`coordinator@translationproject.org' to make the `.pot' files available
-+to the translation teams.
-+
-diff --git a/config.rpath b/config.rpath
-new file mode 100755
-index 0000000..17298f2
---- /dev/null
-+++ b/config.rpath
-@@ -0,0 +1,672 @@
-+#! /bin/sh
-+# Output a system dependent set of variables, describing how to set the
-+# run time search path of shared libraries in an executable.
-+#
-+#   Copyright 1996-2010 Free Software Foundation, Inc.
-+#   Taken from GNU libtool, 2001
-+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-+#
-+#   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 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 variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-+# should be set by the caller.
-+#
-+# The set of defined variables is at the end of this script.
-+
-+# Known limitations:
-+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-+#   than 256 bytes, otherwise the compiler driver will dump core. The only
-+#   known workaround is to choose shorter directory names for the build
-+#   directory and/or the installation directory.
-+
-+# All known linkers require a `.a' archive for static linking (except MSVC,
-+# which needs '.lib').
-+libext=a
-+shrext=.so
-+
-+host="$1"
-+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-+
-+# Code taken from libtool.m4's _LT_CC_BASENAME.
-+
-+for cc_temp in $CC""; do
-+  case $cc_temp in
-+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-+    \-*) ;;
-+    *) break;;
-+  esac
-+done
-+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
-+
-+# Code taken from libtool.m4's _LT_COMPILER_PIC.
-+
-+wl=
-+if test "$GCC" = yes; then
-+  wl='-Wl,'
-+else
-+  case "$host_os" in
-+    aix*)
-+      wl='-Wl,'
-+      ;;
-+    darwin*)
-+      case $cc_basename in
-+        xlc*)
-+          wl='-Wl,'
-+          ;;
-+      esac
-+      ;;
-+    mingw* | cygwin* | pw32* | os2* | cegcc*)
-+      ;;
-+    hpux9* | hpux10* | hpux11*)
-+      wl='-Wl,'
-+      ;;
-+    irix5* | irix6* | nonstopux*)
-+      wl='-Wl,'
-+      ;;
-+    newsos6)
-+      ;;
-+    linux* | k*bsd*-gnu)
-+      case $cc_basename in
-+        ecc*)
-+          wl='-Wl,'
-+          ;;
-+        icc* | ifort*)
-+          wl='-Wl,'
-+          ;;
-+        lf95*)
-+          wl='-Wl,'
-+          ;;
-+        pgcc | pgf77 | pgf90)
-+          wl='-Wl,'
-+          ;;
-+        ccc*)
-+          wl='-Wl,'
-+          ;;
-+        como)
-+          wl='-lopt='
-+          ;;
-+        *)
-+          case `$CC -V 2>&1 | sed 5q` in
-+            *Sun\ C*)
-+              wl='-Wl,'
-+              ;;
-+          esac
-+          ;;
-+      esac
-+      ;;
-+    osf3* | osf4* | osf5*)
-+      wl='-Wl,'
-+      ;;
-+    rdos*)
-+      ;;
-+    solaris*)
-+      wl='-Wl,'
-+      ;;
-+    sunos4*)
-+      wl='-Qoption ld '
-+      ;;
-+    sysv4 | sysv4.2uw2* | sysv4.3*)
-+      wl='-Wl,'
-+      ;;
-+    sysv4*MP*)
-+      ;;
-+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-+      wl='-Wl,'
-+      ;;
-+    unicos*)
-+      wl='-Wl,'
-+      ;;
-+    uts4*)
-+      ;;
-+  esac
-+fi
-+
-+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
-+
-+hardcode_libdir_flag_spec=
-+hardcode_libdir_separator=
-+hardcode_direct=no
-+hardcode_minus_L=no
-+
-+case "$host_os" in
-+  cygwin* | mingw* | pw32* | cegcc*)
-+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-+    # When not using gcc, we currently assume that we are using
-+    # Microsoft Visual C++.
-+    if test "$GCC" != yes; then
-+      with_gnu_ld=no
-+    fi
-+    ;;
-+  interix*)
-+    # we just hope/assume this is gcc and not c89 (= MSVC++)
-+    with_gnu_ld=yes
-+    ;;
-+  openbsd*)
-+    with_gnu_ld=no
-+    ;;
-+esac
-+
-+ld_shlibs=yes
-+if test "$with_gnu_ld" = yes; then
-+  # Set some defaults for GNU ld with shared library support. These
-+  # are reset later if shared libraries are not supported. Putting them
-+  # here allows them to be overridden if necessary.
-+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
-+  # option of GNU ld is called -rpath, not --rpath.
-+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+  case "$host_os" in
-+    aix[3-9]*)
-+      # On AIX/PPC, the GNU linker is very broken
-+      if test "$host_cpu" != ia64; then
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    amigaos*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      hardcode_minus_L=yes
-+      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-+      # that the semantics of dynamic libraries on AmigaOS, at least up
-+      # to version 4, is to share data among multiple programs linked
-+      # with the same dynamic library.  Since this doesn't match the
-+      # behavior of shared libraries on other platforms, we cannot use
-+      # them.
-+      ld_shlibs=no
-+      ;;
-+    beos*)
-+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+        :
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    cygwin* | mingw* | pw32* | cegcc*)
-+      # hardcode_libdir_flag_spec is actually meaningless, as there is
-+      # no search path for DLLs.
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-+        :
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    interix[3-9]*)
-+      hardcode_direct=no
-+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+      ;;
-+    gnu* | linux* | k*bsd*-gnu)
-+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+        :
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    netbsd*)
-+      ;;
-+    solaris*)
-+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-+        ld_shlibs=no
-+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+        :
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-+      case `$LD -v 2>&1` in
-+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-+          ld_shlibs=no
-+          ;;
-+        *)
-+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-+          else
-+            ld_shlibs=no
-+          fi
-+          ;;
-+      esac
-+      ;;
-+    sunos4*)
-+      hardcode_direct=yes
-+      ;;
-+    *)
-+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-+        :
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+  esac
-+  if test "$ld_shlibs" = no; then
-+    hardcode_libdir_flag_spec=
-+  fi
-+else
-+  case "$host_os" in
-+    aix3*)
-+      # Note: this linker hardcodes the directories in LIBPATH if there
-+      # are no directories specified by -L.
-+      hardcode_minus_L=yes
-+      if test "$GCC" = yes; then
-+        # Neither direct hardcoding nor static linking is supported with a
-+        # broken collect2.
-+        hardcode_direct=unsupported
-+      fi
-+      ;;
-+    aix[4-9]*)
-+      if test "$host_cpu" = ia64; then
-+        # On IA64, the linker does run time linking by default, so we don't
-+        # have to do anything special.
-+        aix_use_runtimelinking=no
-+      else
-+        aix_use_runtimelinking=no
-+        # Test if we are trying to use run time linking or normal
-+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-+        # need to do runtime linking.
-+        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-+          for ld_flag in $LDFLAGS; do
-+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-+              aix_use_runtimelinking=yes
-+              break
-+            fi
-+          done
-+          ;;
-+        esac
-+      fi
-+      hardcode_direct=yes
-+      hardcode_libdir_separator=':'
-+      if test "$GCC" = yes; then
-+        case $host_os in aix4.[012]|aix4.[012].*)
-+          collect2name=`${CC} -print-prog-name=collect2`
-+          if test -f "$collect2name" && \
-+            strings "$collect2name" | grep resolve_lib_name >/dev/null
-+          then
-+            # We have reworked collect2
-+            :
-+          else
-+            # We have old collect2
-+            hardcode_direct=unsupported
-+            hardcode_minus_L=yes
-+            hardcode_libdir_flag_spec='-L$libdir'
-+            hardcode_libdir_separator=
-+          fi
-+          ;;
-+        esac
-+      fi
-+      # Begin _LT_AC_SYS_LIBPATH_AIX.
-+      echo 'int main () { return 0; }' > conftest.c
-+      ${CC} ${LDFLAGS} conftest.c -o conftest
-+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-+}'`
-+      if test -z "$aix_libpath"; then
-+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-+}'`
-+      fi
-+      if test -z "$aix_libpath"; then
-+        aix_libpath="/usr/lib:/lib"
-+      fi
-+      rm -f conftest.c conftest
-+      # End _LT_AC_SYS_LIBPATH_AIX.
-+      if test "$aix_use_runtimelinking" = yes; then
-+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-+      else
-+        if test "$host_cpu" = ia64; then
-+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-+        else
-+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-+        fi
-+      fi
-+      ;;
-+    amigaos*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      hardcode_minus_L=yes
-+      # see comment about different semantics on the GNU ld section
-+      ld_shlibs=no
-+      ;;
-+    bsdi[45]*)
-+      ;;
-+    cygwin* | mingw* | pw32* | cegcc*)
-+      # When not using gcc, we currently assume that we are using
-+      # Microsoft Visual C++.
-+      # hardcode_libdir_flag_spec is actually meaningless, as there is
-+      # no search path for DLLs.
-+      hardcode_libdir_flag_spec=' '
-+      libext=lib
-+      ;;
-+    darwin* | rhapsody*)
-+      hardcode_direct=no
-+      if test "$GCC" = yes ; then
-+        :
-+      else
-+        case $cc_basename in
-+          xlc*)
-+            ;;
-+          *)
-+            ld_shlibs=no
-+            ;;
-+        esac
-+      fi
-+      ;;
-+    dgux*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      ;;
-+    freebsd1*)
-+      ld_shlibs=no
-+      ;;
-+    freebsd2.2*)
-+      hardcode_libdir_flag_spec='-R$libdir'
-+      hardcode_direct=yes
-+      ;;
-+    freebsd2*)
-+      hardcode_direct=yes
-+      hardcode_minus_L=yes
-+      ;;
-+    freebsd* | dragonfly*)
-+      hardcode_libdir_flag_spec='-R$libdir'
-+      hardcode_direct=yes
-+      ;;
-+    hpux9*)
-+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+      hardcode_libdir_separator=:
-+      hardcode_direct=yes
-+      # hardcode_minus_L: Not really in the search PATH,
-+      # but as the default location of the library.
-+      hardcode_minus_L=yes
-+      ;;
-+    hpux10*)
-+      if test "$with_gnu_ld" = no; then
-+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+        hardcode_libdir_separator=:
-+        hardcode_direct=yes
-+        # hardcode_minus_L: Not really in the search PATH,
-+        # but as the default location of the library.
-+        hardcode_minus_L=yes
-+      fi
-+      ;;
-+    hpux11*)
-+      if test "$with_gnu_ld" = no; then
-+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-+        hardcode_libdir_separator=:
-+        case $host_cpu in
-+          hppa*64*|ia64*)
-+            hardcode_direct=no
-+            ;;
-+          *)
-+            hardcode_direct=yes
-+            # hardcode_minus_L: Not really in the search PATH,
-+            # but as the default location of the library.
-+            hardcode_minus_L=yes
-+            ;;
-+        esac
-+      fi
-+      ;;
-+    irix5* | irix6* | nonstopux*)
-+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+      hardcode_libdir_separator=:
-+      ;;
-+    netbsd*)
-+      hardcode_libdir_flag_spec='-R$libdir'
-+      hardcode_direct=yes
-+      ;;
-+    newsos6)
-+      hardcode_direct=yes
-+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+      hardcode_libdir_separator=:
-+      ;;
-+    openbsd*)
-+      if test -f /usr/libexec/ld.so; then
-+        hardcode_direct=yes
-+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+        else
-+          case "$host_os" in
-+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-+              hardcode_libdir_flag_spec='-R$libdir'
-+              ;;
-+            *)
-+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-+              ;;
-+          esac
-+        fi
-+      else
-+        ld_shlibs=no
-+      fi
-+      ;;
-+    os2*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      hardcode_minus_L=yes
-+      ;;
-+    osf3*)
-+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+      hardcode_libdir_separator=:
-+      ;;
-+    osf4* | osf5*)
-+      if test "$GCC" = yes; then
-+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-+      else
-+        # Both cc and cxx compiler support -rpath directly
-+        hardcode_libdir_flag_spec='-rpath $libdir'
-+      fi
-+      hardcode_libdir_separator=:
-+      ;;
-+    solaris*)
-+      hardcode_libdir_flag_spec='-R$libdir'
-+      ;;
-+    sunos4*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      hardcode_direct=yes
-+      hardcode_minus_L=yes
-+      ;;
-+    sysv4)
-+      case $host_vendor in
-+        sni)
-+          hardcode_direct=yes # is this really true???
-+          ;;
-+        siemens)
-+          hardcode_direct=no
-+          ;;
-+        motorola)
-+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-+          ;;
-+      esac
-+      ;;
-+    sysv4.3*)
-+      ;;
-+    sysv4*MP*)
-+      if test -d /usr/nec; then
-+        ld_shlibs=yes
-+      fi
-+      ;;
-+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-+      ;;
-+    sysv5* | sco3.2v5* | sco5v6*)
-+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-+      hardcode_libdir_separator=':'
-+      ;;
-+    uts4*)
-+      hardcode_libdir_flag_spec='-L$libdir'
-+      ;;
-+    *)
-+      ld_shlibs=no
-+      ;;
-+  esac
-+fi
-+
-+# Check dynamic linker characteristics
-+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
-+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
-+# only about the one the linker finds when passed -lNAME. This is the last
-+# element of library_names_spec in libtool.m4, or possibly two of them if the
-+# linker has special search rules.
-+library_names_spec=      # the last element of library_names_spec in libtool.m4
-+libname_spec='lib$name'
-+case "$host_os" in
-+  aix3*)
-+    library_names_spec='$libname.a'
-+    ;;
-+  aix[4-9]*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  amigaos*)
-+    library_names_spec='$libname.a'
-+    ;;
-+  beos*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  bsdi[45]*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  cygwin* | mingw* | pw32* | cegcc*)
-+    shrext=.dll
-+    library_names_spec='$libname.dll.a $libname.lib'
-+    ;;
-+  darwin* | rhapsody*)
-+    shrext=.dylib
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  dgux*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  freebsd1*)
-+    ;;
-+  freebsd* | dragonfly*)
-+    case "$host_os" in
-+      freebsd[123]*)
-+        library_names_spec='$libname$shrext$versuffix' ;;
-+      *)
-+        library_names_spec='$libname$shrext' ;;
-+    esac
-+    ;;
-+  gnu*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  hpux9* | hpux10* | hpux11*)
-+    case $host_cpu in
-+      ia64*)
-+        shrext=.so
-+        ;;
-+      hppa*64*)
-+        shrext=.sl
-+        ;;
-+      *)
-+        shrext=.sl
-+        ;;
-+    esac
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  interix[3-9]*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  irix5* | irix6* | nonstopux*)
-+    library_names_spec='$libname$shrext'
-+    case "$host_os" in
-+      irix5* | nonstopux*)
-+        libsuff= shlibsuff=
-+        ;;
-+      *)
-+        case $LD in
-+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
-+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
-+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
-+          *) libsuff= shlibsuff= ;;
-+        esac
-+        ;;
-+    esac
-+    ;;
-+  linux*oldld* | linux*aout* | linux*coff*)
-+    ;;
-+  linux* | k*bsd*-gnu)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  knetbsd*-gnu)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  netbsd*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  newsos6)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  nto-qnx*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  openbsd*)
-+    library_names_spec='$libname$shrext$versuffix'
-+    ;;
-+  os2*)
-+    libname_spec='$name'
-+    shrext=.dll
-+    library_names_spec='$libname.a'
-+    ;;
-+  osf3* | osf4* | osf5*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  rdos*)
-+    ;;
-+  solaris*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  sunos4*)
-+    library_names_spec='$libname$shrext$versuffix'
-+    ;;
-+  sysv4 | sysv4.3*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  sysv4*MP*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+  uts4*)
-+    library_names_spec='$libname$shrext'
-+    ;;
-+esac
-+
-+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-+
-+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-+
-+# How to pass a linker flag through the compiler.
-+wl="$escaped_wl"
-+
-+# Static library suffix (normally "a").
-+libext="$libext"
-+
-+# Shared library suffix (normally "so").
-+shlibext="$shlibext"
-+
-+# Format of library name prefix.
-+libname_spec="$escaped_libname_spec"
-+
-+# Library names that the linker finds when passed -lNAME.
-+library_names_spec="$escaped_library_names_spec"
-+
-+# Flag to hardcode \$libdir into a binary during linking.
-+# This must work even if \$libdir does not exist.
-+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-+
-+# Whether we need a single -rpath flag with a separated argument.
-+hardcode_libdir_separator="$hardcode_libdir_separator"
-+
-+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_direct="$hardcode_direct"
-+
-+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-+# resulting binary.
-+hardcode_minus_L="$hardcode_minus_L"
-+
-+EOF
-diff --git a/m4/codeset.m4 b/m4/codeset.m4
-new file mode 100644
-index 0000000..a53c042
---- /dev/null
-+++ b/m4/codeset.m4
-@@ -0,0 +1,21 @@
-+# codeset.m4 serial 4 (gettext-0.18)
-+dnl Copyright (C) 2000-2002, 2006, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([AM_LANGINFO_CODESET],
-+[
-+  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
-+    [AC_TRY_LINK([#include <langinfo.h>],
-+      [char* cs = nl_langinfo(CODESET); return !cs;],
-+      [am_cv_langinfo_codeset=yes],
-+      [am_cv_langinfo_codeset=no])
-+    ])
-+  if test $am_cv_langinfo_codeset = yes; then
-+    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
-+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-+  fi
-+])
-diff --git a/m4/fcntl-o.m4 b/m4/fcntl-o.m4
-new file mode 100644
-index 0000000..d416a61
---- /dev/null
-+++ b/m4/fcntl-o.m4
-@@ -0,0 +1,81 @@
-+# fcntl-o.m4 serial 1
-+dnl Copyright (C) 2006, 2009-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl Written by Paul Eggert.
-+
-+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
-+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
-+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
-+AC_DEFUN([gl_FCNTL_O_FLAGS],
-+[
-+  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
-+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-+  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
-+    [AC_RUN_IFELSE(
-+       [AC_LANG_PROGRAM(
-+          [[#include <sys/types.h>
-+           #include <sys/stat.h>
-+           #include <unistd.h>
-+           #include <fcntl.h>
-+           #ifndef O_NOATIME
-+            #define O_NOATIME 0
-+           #endif
-+           #ifndef O_NOFOLLOW
-+            #define O_NOFOLLOW 0
-+           #endif
-+           static int const constants[] =
-+            {
-+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-+            };
-+          ]],
-+          [[
-+            int status = !constants;
-+            {
-+              static char const sym[] = "conftest.sym";
-+              if (symlink (".", sym) != 0
-+                  || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
-+                status |= 32;
-+              unlink (sym);
-+            }
-+            {
-+              static char const file[] = "confdefs.h";
-+              int fd = open (file, O_RDONLY | O_NOATIME);
-+              char c;
-+              struct stat st0, st1;
-+              if (fd < 0
-+                  || fstat (fd, &st0) != 0
-+                  || sleep (1) != 0
-+                  || read (fd, &c, 1) != 1
-+                  || close (fd) != 0
-+                  || stat (file, &st1) != 0
-+                  || st0.st_atime != st1.st_atime)
-+                status |= 64;
-+            }
-+            return status;]])],
-+       [gl_cv_header_working_fcntl_h=yes],
-+       [case $? in #(
-+        32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-+        96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-+         *) gl_cv_header_working_fcntl_h='no';;
-+        esac],
-+       [gl_cv_header_working_fcntl_h=cross-compiling])])
-+
-+  case $gl_cv_header_working_fcntl_h in #(
-+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-+  *) ac_val=1;;
-+  esac
-+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
-+    [Define to 1 if O_NOATIME works.])
-+
-+  case $gl_cv_header_working_fcntl_h in #(
-+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-+  *) ac_val=1;;
-+  esac
-+  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
-+    [Define to 1 if O_NOFOLLOW works.])
-+])
-diff --git a/m4/gettext.m4 b/m4/gettext.m4
-new file mode 100644
-index 0000000..f84e6a5
---- /dev/null
-+++ b/m4/gettext.m4
-@@ -0,0 +1,383 @@
-+# gettext.m4 serial 63 (gettext-0.18)
-+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
-+
-+dnl Macro to add for using GNU gettext.
-+
-+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-+dnl    default (if it is not specified or empty) is 'no-libtool'.
-+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
-+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
-+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
-+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-+dnl    $(top_builddir)/intl/libintl.a will be created.
-+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-+dnl    implementations (in libc or libintl) without the ngettext() function
-+dnl    will be ignored.  If NEEDSYMBOL is specified and is
-+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
-+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-+dnl INTLDIR is used to find the intl libraries.  If empty,
-+dnl    the value `$(top_builddir)/intl/' is used.
-+dnl
-+dnl The result of the configuration is one of three cases:
-+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-+dnl    and used.
-+dnl    Catalog format: GNU --> install in $(datadir)
-+dnl    Catalog extension: .mo after installation, .gmo in source tree
-+dnl 2) GNU gettext has been found in the system's C library.
-+dnl    Catalog format: GNU --> install in $(datadir)
-+dnl    Catalog extension: .mo after installation, .gmo in source tree
-+dnl 3) No internationalization, always use English msgid.
-+dnl    Catalog format: none
-+dnl    Catalog extension: none
-+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-+dnl The use of .gmo is historical (it was needed to avoid overwriting the
-+dnl GNU format catalogs when building on a platform with an X/Open gettext),
-+dnl but we keep it in order not to force irrelevant filename changes on the
-+dnl maintainers.
-+dnl
-+AC_DEFUN([AM_GNU_GETTEXT],
-+[
-+  dnl Argument checking.
-+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
-+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-+])])])])])
-+  ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
-+    [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
-+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
-+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-+])])])])
-+  define([gt_included_intl],
-+    ifelse([$1], [external],
-+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
-+      [yes]))
-+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
-+  gt_NEEDS_INIT
-+  AM_GNU_GETTEXT_NEED([$2])
-+
-+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
-+  ifelse(gt_included_intl, yes, [
-+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
-+  ])
-+
-+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
-+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+  AC_REQUIRE([AC_LIB_RPATH])
-+
-+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
-+  dnl Ideally we would do this search only after the
-+  dnl      if test "$USE_NLS" = "yes"; then
-+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
-+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
-+  dnl the configure script would need to contain the same shell code
-+  dnl again, outside any 'if'. There are two solutions:
-+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
-+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
-+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
-+  dnl documented, we avoid it.
-+  ifelse(gt_included_intl, yes, , [
-+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-+  ])
-+
-+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
-+  gt_INTL_MACOSX
-+
-+  dnl Set USE_NLS.
-+  AC_REQUIRE([AM_NLS])
-+
-+  ifelse(gt_included_intl, yes, [
-+    BUILD_INCLUDED_LIBINTL=no
-+    USE_INCLUDED_LIBINTL=no
-+  ])
-+  LIBINTL=
-+  LTLIBINTL=
-+  POSUB=
-+
-+  dnl Add a version number to the cache macros.
-+  case " $gt_needs " in
-+    *" need-formatstring-macros "*) gt_api_version=3 ;;
-+    *" need-ngettext "*) gt_api_version=2 ;;
-+    *) gt_api_version=1 ;;
-+  esac
-+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
-+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
-+
-+  dnl If we use NLS figure out what method
-+  if test "$USE_NLS" = "yes"; then
-+    gt_use_preinstalled_gnugettext=no
-+    ifelse(gt_included_intl, yes, [
-+      AC_MSG_CHECKING([whether included gettext is requested])
-+      AC_ARG_WITH([included-gettext],
-+        [  --with-included-gettext use the GNU gettext library included here],
-+        nls_cv_force_use_gnu_gettext=$withval,
-+        nls_cv_force_use_gnu_gettext=no)
-+      AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
-+
-+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-+    ])
-+        dnl User does not insist on using GNU NLS library.  Figure out what
-+        dnl to use.  If GNU gettext is available we use this.  Else we have
-+        dnl to fall back to GNU NLS library.
-+
-+        if test $gt_api_version -ge 3; then
-+          gt_revision_test_code='
-+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-+#endif
-+changequote(,)dnl
-+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-+changequote([,])dnl
-+'
-+        else
-+          gt_revision_test_code=
-+        fi
-+        if test $gt_api_version -ge 2; then
-+          gt_expression_test_code=' + * ngettext ("", "", 0)'
-+        else
-+          gt_expression_test_code=
-+        fi
-+
-+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
-+         [AC_TRY_LINK([#include <libintl.h>
-+$gt_revision_test_code
-+extern int _nl_msg_cat_cntr;
-+extern int *_nl_domain_bindings;],
-+            [bindtextdomain ("", "");
-+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
-+            [eval "$gt_func_gnugettext_libc=yes"],
-+            [eval "$gt_func_gnugettext_libc=no"])])
-+
-+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
-+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
-+          ifelse(gt_included_intl, yes, , [
-+            AM_ICONV_LINK
-+          ])
-+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
-+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
-+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
-+          dnl even if libiconv doesn't exist.
-+          AC_LIB_LINKFLAGS_BODY([intl])
-+          AC_CACHE_CHECK([for GNU gettext in libintl],
-+            [$gt_func_gnugettext_libintl],
-+           [gt_save_CPPFLAGS="$CPPFLAGS"
-+            CPPFLAGS="$CPPFLAGS $INCINTL"
-+            gt_save_LIBS="$LIBS"
-+            LIBS="$LIBS $LIBINTL"
-+            dnl Now see whether libintl exists and does not depend on libiconv.
-+            AC_TRY_LINK([#include <libintl.h>
-+$gt_revision_test_code
-+extern int _nl_msg_cat_cntr;
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+const char *_nl_expand_alias (const char *);],
-+              [bindtextdomain ("", "");
-+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
-+              [eval "$gt_func_gnugettext_libintl=yes"],
-+              [eval "$gt_func_gnugettext_libintl=no"])
-+            dnl Now see whether libintl exists and depends on libiconv.
-+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
-+              LIBS="$LIBS $LIBICONV"
-+              AC_TRY_LINK([#include <libintl.h>
-+$gt_revision_test_code
-+extern int _nl_msg_cat_cntr;
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+const char *_nl_expand_alias (const char *);],
-+                [bindtextdomain ("", "");
-+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
-+               [LIBINTL="$LIBINTL $LIBICONV"
-+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-+                eval "$gt_func_gnugettext_libintl=yes"
-+               ])
-+            fi
-+            CPPFLAGS="$gt_save_CPPFLAGS"
-+            LIBS="$gt_save_LIBS"])
-+        fi
-+
-+        dnl If an already present or preinstalled GNU gettext() is found,
-+        dnl use it.  But if this macro is used in GNU gettext, and GNU
-+        dnl gettext is already preinstalled in libintl, we update this
-+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
-+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
-+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
-+                && test "$PACKAGE" != gettext-runtime \
-+                && test "$PACKAGE" != gettext-tools; }; then
-+          gt_use_preinstalled_gnugettext=yes
-+        else
-+          dnl Reset the values set by searching for libintl.
-+          LIBINTL=
-+          LTLIBINTL=
-+          INCINTL=
-+        fi
-+
-+    ifelse(gt_included_intl, yes, [
-+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
-+          dnl GNU gettext is not found in the C library.
-+          dnl Fall back on included GNU gettext library.
-+          nls_cv_use_gnu_gettext=yes
-+        fi
-+      fi
-+
-+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
-+        dnl Mark actions used to generate GNU NLS library.
-+        BUILD_INCLUDED_LIBINTL=yes
-+        USE_INCLUDED_LIBINTL=yes
-+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
-+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
-+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
-+      fi
-+
-+      CATOBJEXT=
-+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
-+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
-+        dnl Mark actions to use GNU gettext tools.
-+        CATOBJEXT=.gmo
-+      fi
-+    ])
-+
-+    if test -n "$INTL_MACOSX_LIBS"; then
-+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
-+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
-+        dnl Some extra flags are needed during linking.
-+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
-+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
-+      fi
-+    fi
-+
-+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
-+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
-+      AC_DEFINE([ENABLE_NLS], [1],
-+        [Define to 1 if translation of program messages to the user's native language
-+   is requested.])
-+    else
-+      USE_NLS=no
-+    fi
-+  fi
-+
-+  AC_MSG_CHECKING([whether to use NLS])
-+  AC_MSG_RESULT([$USE_NLS])
-+  if test "$USE_NLS" = "yes"; then
-+    AC_MSG_CHECKING([where the gettext function comes from])
-+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
-+        gt_source="external libintl"
-+      else
-+        gt_source="libc"
-+      fi
-+    else
-+      gt_source="included intl directory"
-+    fi
-+    AC_MSG_RESULT([$gt_source])
-+  fi
-+
-+  if test "$USE_NLS" = "yes"; then
-+
-+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
-+        AC_MSG_CHECKING([how to link with libintl])
-+        AC_MSG_RESULT([$LIBINTL])
-+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
-+      fi
-+
-+      dnl For backward compatibility. Some packages may be using this.
-+      AC_DEFINE([HAVE_GETTEXT], [1],
-+       [Define if the GNU gettext() function is already present or preinstalled.])
-+      AC_DEFINE([HAVE_DCGETTEXT], [1],
-+       [Define if the GNU dcgettext() function is already present or preinstalled.])
-+    fi
-+
-+    dnl We need to process the po/ directory.
-+    POSUB=po
-+  fi
-+
-+  ifelse(gt_included_intl, yes, [
-+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
-+    dnl to 'yes' because some of the testsuite requires it.
-+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
-+      BUILD_INCLUDED_LIBINTL=yes
-+    fi
-+
-+    dnl Make all variables we use known to autoconf.
-+    AC_SUBST([BUILD_INCLUDED_LIBINTL])
-+    AC_SUBST([USE_INCLUDED_LIBINTL])
-+    AC_SUBST([CATOBJEXT])
-+
-+    dnl For backward compatibility. Some configure.ins may be using this.
-+    nls_cv_header_intl=
-+    nls_cv_header_libgt=
-+
-+    dnl For backward compatibility. Some Makefiles may be using this.
-+    DATADIRNAME=share
-+    AC_SUBST([DATADIRNAME])
-+
-+    dnl For backward compatibility. Some Makefiles may be using this.
-+    INSTOBJEXT=.mo
-+    AC_SUBST([INSTOBJEXT])
-+
-+    dnl For backward compatibility. Some Makefiles may be using this.
-+    GENCAT=gencat
-+    AC_SUBST([GENCAT])
-+
-+    dnl For backward compatibility. Some Makefiles may be using this.
-+    INTLOBJS=
-+    if test "$USE_INCLUDED_LIBINTL" = yes; then
-+      INTLOBJS="\$(GETTOBJS)"
-+    fi
-+    AC_SUBST([INTLOBJS])
-+
-+    dnl Enable libtool support if the surrounding package wishes it.
-+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
-+    AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
-+  ])
-+
-+  dnl For backward compatibility. Some Makefiles may be using this.
-+  INTLLIBS="$LIBINTL"
-+  AC_SUBST([INTLLIBS])
-+
-+  dnl Make all documented variables known to autoconf.
-+  AC_SUBST([LIBINTL])
-+  AC_SUBST([LTLIBINTL])
-+  AC_SUBST([POSUB])
-+])
-+
-+
-+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
-+m4_define([gt_NEEDS_INIT],
-+[
-+  m4_divert_text([DEFAULTS], [gt_needs=])
-+  m4_define([gt_NEEDS_INIT], [])
-+])
-+
-+
-+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
-+AC_DEFUN([AM_GNU_GETTEXT_NEED],
-+[
-+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
-+])
-+
-+
-+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
-diff --git a/m4/glibc2.m4 b/m4/glibc2.m4
-new file mode 100644
-index 0000000..f148c12
---- /dev/null
-+++ b/m4/glibc2.m4
-@@ -0,0 +1,30 @@
-+# glibc2.m4 serial 2
-+dnl Copyright (C) 2000-2002, 2004, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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.0 or newer.
-+# From Bruno Haible.
-+
-+AC_DEFUN([gt_GLIBC2],
-+  [
-+    AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer],
-+      [ac_cv_gnu_library_2],
-+      [AC_EGREP_CPP([Lucky GNU user],
-+        [
-+#include <features.h>
-+#ifdef __GNU_LIBRARY__
-+ #if (__GLIBC__ >= 2)
-+  Lucky GNU user
-+ #endif
-+#endif
-+        ],
-+        [ac_cv_gnu_library_2=yes],
-+        [ac_cv_gnu_library_2=no])
-+      ]
-+    )
-+    AC_SUBST([GLIBC2])
-+    GLIBC2="$ac_cv_gnu_library_2"
-+  ]
-+)
-diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
-new file mode 100644
-index 0000000..68ada9d
---- /dev/null
-+++ b/m4/glibc21.m4
-@@ -0,0 +1,30 @@
-+# glibc21.m4 serial 4
-+dnl Copyright (C) 2000-2002, 2004, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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.
-+# From Bruno Haible.
-+
-+AC_DEFUN([gl_GLIBC21],
-+  [
-+    AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer],
-+      [ac_cv_gnu_library_2_1],
-+      [AC_EGREP_CPP([Lucky GNU user],
-+        [
-+#include <features.h>
-+#ifdef __GNU_LIBRARY__
-+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-+  Lucky GNU user
-+ #endif
-+#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/iconv.m4 b/m4/iconv.m4
-new file mode 100644
-index 0000000..e2041b9
---- /dev/null
-+++ b/m4/iconv.m4
-@@ -0,0 +1,214 @@
-+# iconv.m4 serial 11 (gettext-0.18.1)
-+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-+[
-+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
-+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+  AC_REQUIRE([AC_LIB_RPATH])
-+
-+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
-+  dnl accordingly.
-+  AC_LIB_LINKFLAGS_BODY([iconv])
-+])
-+
-+AC_DEFUN([AM_ICONV_LINK],
-+[
-+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
-+  dnl those with the standalone portable GNU libiconv installed).
-+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-+
-+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
-+  dnl accordingly.
-+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-+
-+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
-+  dnl because if the user has installed libiconv and not disabled its use
-+  dnl via --without-libiconv-prefix, he wants to use it. The first
-+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
-+  am_save_CPPFLAGS="$CPPFLAGS"
-+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-+
-+  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
-+    am_cv_func_iconv="no, consider installing GNU libiconv"
-+    am_cv_lib_iconv=no
-+    AC_TRY_LINK([#include <stdlib.h>
-+#include <iconv.h>],
-+      [iconv_t cd = iconv_open("","");
-+       iconv(cd,NULL,NULL,NULL,NULL);
-+       iconv_close(cd);],
-+      [am_cv_func_iconv=yes])
-+    if test "$am_cv_func_iconv" != yes; then
-+      am_save_LIBS="$LIBS"
-+      LIBS="$LIBS $LIBICONV"
-+      AC_TRY_LINK([#include <stdlib.h>
-+#include <iconv.h>],
-+        [iconv_t cd = iconv_open("","");
-+         iconv(cd,NULL,NULL,NULL,NULL);
-+         iconv_close(cd);],
-+        [am_cv_lib_iconv=yes]
-+        [am_cv_func_iconv=yes])
-+      LIBS="$am_save_LIBS"
-+    fi
-+  ])
-+  if test "$am_cv_func_iconv" = yes; then
-+    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
-+      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
-+      am_save_LIBS="$LIBS"
-+      if test $am_cv_lib_iconv = yes; then
-+        LIBS="$LIBS $LIBICONV"
-+      fi
-+      AC_TRY_RUN([
-+#include <iconv.h>
-+#include <string.h>
-+int main ()
-+{
-+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
-+     returns.  */
-+  {
-+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
-+    if (cd_utf8_to_88591 != (iconv_t)(-1))
-+      {
-+        static const char input[] = "\342\202\254"; /* EURO SIGN */
-+        char buf[10];
-+        const char *inptr = input;
-+        size_t inbytesleft = strlen (input);
-+        char *outptr = buf;
-+        size_t outbytesleft = sizeof (buf);
-+        size_t res = iconv (cd_utf8_to_88591,
-+                            (char **) &inptr, &inbytesleft,
-+                            &outptr, &outbytesleft);
-+        if (res == 0)
-+          return 1;
-+      }
-+  }
-+  /* Test against Solaris 10 bug: Failures are not distinguishable from
-+     successful returns.  */
-+  {
-+    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
-+    if (cd_ascii_to_88591 != (iconv_t)(-1))
-+      {
-+        static const char input[] = "\263";
-+        char buf[10];
-+        const char *inptr = input;
-+        size_t inbytesleft = strlen (input);
-+        char *outptr = buf;
-+        size_t outbytesleft = sizeof (buf);
-+        size_t res = iconv (cd_ascii_to_88591,
-+                            (char **) &inptr, &inbytesleft,
-+                            &outptr, &outbytesleft);
-+        if (res == 0)
-+          return 1;
-+      }
-+  }
-+#if 0 /* This bug could be worked around by the caller.  */
-+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
-+  {
-+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
-+    if (cd_88591_to_utf8 != (iconv_t)(-1))
-+      {
-+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
-+        char buf[50];
-+        const char *inptr = input;
-+        size_t inbytesleft = strlen (input);
-+        char *outptr = buf;
-+        size_t outbytesleft = sizeof (buf);
-+        size_t res = iconv (cd_88591_to_utf8,
-+                            (char **) &inptr, &inbytesleft,
-+                            &outptr, &outbytesleft);
-+        if ((int)res > 0)
-+          return 1;
-+      }
-+  }
-+#endif
-+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
-+     provided.  */
-+  if (/* Try standardized names.  */
-+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
-+      /* Try IRIX, OSF/1 names.  */
-+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
-+      /* Try AIX names.  */
-+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
-+      /* Try HP-UX names.  */
-+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
-+    return 1;
-+  return 0;
-+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
-+        [case "$host_os" in
-+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
-+           *)            am_cv_func_iconv_works="guessing yes" ;;
-+         esac])
-+      LIBS="$am_save_LIBS"
-+    ])
-+    case "$am_cv_func_iconv_works" in
-+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
-+      *)   am_func_iconv=yes ;;
-+    esac
-+  else
-+    am_func_iconv=no am_cv_lib_iconv=no
-+  fi
-+  if test "$am_func_iconv" = yes; then
-+    AC_DEFINE([HAVE_ICONV], [1],
-+      [Define if you have the iconv() function and it works.])
-+  fi
-+  if test "$am_cv_lib_iconv" = yes; then
-+    AC_MSG_CHECKING([how to link with libiconv])
-+    AC_MSG_RESULT([$LIBICONV])
-+  else
-+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
-+    dnl either.
-+    CPPFLAGS="$am_save_CPPFLAGS"
-+    LIBICONV=
-+    LTLIBICONV=
-+  fi
-+  AC_SUBST([LIBICONV])
-+  AC_SUBST([LTLIBICONV])
-+])
-+
-+dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
-+dnl avoid warnings like
-+dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
-+dnl This is tricky because of the way 'aclocal' is implemented:
-+dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
-+dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
-+dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
-+dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
-+dnl   warnings.
-+m4_define([gl_iconv_AC_DEFUN],
-+  m4_version_prereq([2.64],
-+    [[AC_DEFUN_ONCE(
-+        [$1], [$2])]],
-+    [[AC_DEFUN(
-+        [$1], [$2])]]))
-+gl_iconv_AC_DEFUN([AM_ICONV],
-+[
-+  AM_ICONV_LINK
-+  if test "$am_cv_func_iconv" = yes; then
-+    AC_MSG_CHECKING([for iconv declaration])
-+    AC_CACHE_VAL([am_cv_proto_iconv], [
-+      AC_TRY_COMPILE([
-+#include <stdlib.h>
-+#include <iconv.h>
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+#if defined(__STDC__) || defined(__cplusplus)
-+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-+#else
-+size_t iconv();
-+#endif
-+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
-+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
-+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-+    AC_MSG_RESULT([
-+         $am_cv_proto_iconv])
-+    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
-+      [Define as const if the declaration of iconv() needs const.])
-+  fi
-+])
-diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
-new file mode 100644
-index 0000000..289c4df
---- /dev/null
-+++ b/m4/intdiv0.m4
-@@ -0,0 +1,84 @@
-+# intdiv0.m4 serial 3 (gettext-0.18)
-+dnl Copyright (C) 2002, 2007-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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([gt_INTDIV0],
-+[
-+  AC_REQUIRE([AC_PROG_CC])dnl
-+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+
-+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
-+    gt_cv_int_divbyzero_sigfpe,
-+    [
-+      gt_cv_int_divbyzero_sigfpe=
-+changequote(,)dnl
-+      case "$host_os" in
-+        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
-+          # On MacOS X 10.2 or newer, just assume the same as when cross-
-+          # compiling. If we were to perform the real test, 1 Crash Report
-+          # dialog window would pop up.
-+          case "$host_cpu" in
-+            i[34567]86 | x86_64)
-+              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
-+          esac
-+          ;;
-+      esac
-+changequote([,])dnl
-+      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
-+        AC_TRY_RUN([
-+#include <stdlib.h>
-+#include <signal.h>
-+
-+static void
-+sigfpe_handler (int sig)
-+{
-+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
-+  exit (sig != SIGFPE);
-+}
-+
-+int x = 1;
-+int y = 0;
-+int z;
-+int nan;
-+
-+int main ()
-+{
-+  signal (SIGFPE, sigfpe_handler);
-+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
-+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
-+  signal (SIGTRAP, sigfpe_handler);
-+#endif
-+/* Linux/SPARC yields signal SIGILL.  */
-+#if defined (__sparc__) && defined (__linux__)
-+  signal (SIGILL, sigfpe_handler);
-+#endif
-+
-+  z = x / y;
-+  nan = y / y;
-+  exit (1);
-+}
-+], [gt_cv_int_divbyzero_sigfpe=yes], [gt_cv_int_divbyzero_sigfpe=no],
-+          [
-+            # Guess based on the CPU.
-+changequote(,)dnl
-+            case "$host_cpu" in
-+              alpha* | i[34567]86 | x86_64 | m68k | s390*)
-+                gt_cv_int_divbyzero_sigfpe="guessing yes";;
-+              *)
-+                gt_cv_int_divbyzero_sigfpe="guessing no";;
-+            esac
-+changequote([,])dnl
-+          ])
-+      fi
-+    ])
-+  case "$gt_cv_int_divbyzero_sigfpe" in
-+    *yes) value=1;;
-+    *) value=0;;
-+  esac
-+  AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value],
-+    [Define if integer division by zero raises signal SIGFPE.])
-+])
-diff --git a/m4/intl.m4 b/m4/intl.m4
-new file mode 100644
-index 0000000..335b23c
---- /dev/null
-+++ b/m4/intl.m4
-@@ -0,0 +1,294 @@
-+# intl.m4 serial 17 (gettext-0.18)
-+dnl Copyright (C) 1995-2009 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2009.
-+
-+AC_PREREQ([2.52])
-+
-+dnl Checks for all prerequisites of the intl subdirectory,
-+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-+dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-+AC_DEFUN([AM_INTL_SUBDIR],
-+[
-+  AC_REQUIRE([AC_PROG_INSTALL])dnl
-+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
-+  AC_REQUIRE([AC_PROG_CC])dnl
-+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+  AC_REQUIRE([gt_GLIBC2])dnl
-+  AC_REQUIRE([AC_PROG_RANLIB])dnl
-+  AC_REQUIRE([gl_VISIBILITY])dnl
-+  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
-+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
-+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
-+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
-+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-+  AC_REQUIRE([gt_TYPE_INTMAX_T])
-+  AC_REQUIRE([gt_PRINTF_POSIX])
-+  AC_REQUIRE([gl_GLIBC21])dnl
-+  AC_REQUIRE([gl_XSIZE])dnl
-+  AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl
-+  AC_REQUIRE([gt_INTL_MACOSX])dnl
-+
-+  dnl Support for automake's --enable-silent-rules.
-+  case "$enable_silent_rules" in
-+    yes) INTL_DEFAULT_VERBOSITY=0;;
-+    no)  INTL_DEFAULT_VERBOSITY=1;;
-+    *)   INTL_DEFAULT_VERBOSITY=1;;
-+  esac
-+  AC_SUBST([INTL_DEFAULT_VERBOSITY])
-+
-+  AC_CHECK_TYPE([ptrdiff_t], ,
-+    [AC_DEFINE([ptrdiff_t], [long],
-+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
-+    ])
-+  AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
-+  AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \
-+    snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
-+
-+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
-+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
-+  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
-+  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
-+
-+  dnl Use the *_unlocked functions only if they are declared.
-+  dnl (because some of them were defined without being declared in Solaris
-+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
-+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
-+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
-+  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
-+
-+  case $gt_cv_func_printf_posix in
-+    *yes) HAVE_POSIX_PRINTF=1 ;;
-+    *) HAVE_POSIX_PRINTF=0 ;;
-+  esac
-+  AC_SUBST([HAVE_POSIX_PRINTF])
-+  if test "$ac_cv_func_asprintf" = yes; then
-+    HAVE_ASPRINTF=1
-+  else
-+    HAVE_ASPRINTF=0
-+  fi
-+  AC_SUBST([HAVE_ASPRINTF])
-+  if test "$ac_cv_func_snprintf" = yes; then
-+    HAVE_SNPRINTF=1
-+  else
-+    HAVE_SNPRINTF=0
-+  fi
-+  AC_SUBST([HAVE_SNPRINTF])
-+  if test "$ac_cv_func_newlocale" = yes; then
-+    HAVE_NEWLOCALE=1
-+  else
-+    HAVE_NEWLOCALE=0
-+  fi
-+  AC_SUBST([HAVE_NEWLOCALE])
-+  if test "$ac_cv_func_wprintf" = yes; then
-+    HAVE_WPRINTF=1
-+  else
-+    HAVE_WPRINTF=0
-+  fi
-+  AC_SUBST([HAVE_WPRINTF])
-+
-+  AM_LANGINFO_CODESET
-+  gt_LC_MESSAGES
-+
-+  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
-+  dnl 1. when we install a shared library, we must arrange to export
-+  dnl    auxiliary pointer variables for every exported variable,
-+  dnl 2. when we install a shared library and a static library simultaneously,
-+  dnl    the include file specifies __declspec(dllimport) and therefore we
-+  dnl    must arrange to define the auxiliary pointer variables for the
-+  dnl    exported variables _also_ in the static library.
-+  if test "$enable_shared" = yes; then
-+    case "$host_os" in
-+      mingw* | cygwin*) is_woe32dll=yes ;;
-+      *) is_woe32dll=no ;;
-+    esac
-+  else
-+    is_woe32dll=no
-+  fi
-+  WOE32DLL=$is_woe32dll
-+  AC_SUBST([WOE32DLL])
-+
-+  dnl On mingw and Cygwin, we can activate special Makefile rules which add
-+  dnl version information to the shared libraries and executables.
-+  case "$host_os" in
-+    mingw* | cygwin*) is_woe32=yes ;;
-+    *) is_woe32=no ;;
-+  esac
-+  WOE32=$is_woe32
-+  AC_SUBST([WOE32])
-+  if test $WOE32 = yes; then
-+    dnl Check for a program that compiles Windows resource files.
-+    AC_CHECK_TOOL([WINDRES], [windres])
-+  fi
-+
-+  dnl Determine whether when creating a library, "-lc" should be passed to
-+  dnl libtool or not. On many platforms, it is required for the libtool option
-+  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
-+  dnl in the *.la files - makes it impossible to create multithreaded programs,
-+  dnl because libtool also reorders the -lc to come before the -pthread, and
-+  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
-+  case "$host_os" in
-+    hpux*) LTLIBC="" ;;
-+    *)     LTLIBC="-lc" ;;
-+  esac
-+  AC_SUBST([LTLIBC])
-+
-+  dnl Rename some macros and functions used for locking.
-+  AH_BOTTOM([
-+#define __libc_lock_t                   gl_lock_t
-+#define __libc_lock_define              gl_lock_define
-+#define __libc_lock_define_initialized  gl_lock_define_initialized
-+#define __libc_lock_init                gl_lock_init
-+#define __libc_lock_lock                gl_lock_lock
-+#define __libc_lock_unlock              gl_lock_unlock
-+#define __libc_lock_recursive_t                   gl_recursive_lock_t
-+#define __libc_lock_define_recursive              gl_recursive_lock_define
-+#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
-+#define __libc_lock_init_recursive                gl_recursive_lock_init
-+#define __libc_lock_lock_recursive                gl_recursive_lock_lock
-+#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
-+#define glthread_in_use  libintl_thread_in_use
-+#define glthread_lock_init_func     libintl_lock_init_func
-+#define glthread_lock_lock_func     libintl_lock_lock_func
-+#define glthread_lock_unlock_func   libintl_lock_unlock_func
-+#define glthread_lock_destroy_func  libintl_lock_destroy_func
-+#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
-+#define glthread_rwlock_init_func              libintl_rwlock_init_func
-+#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
-+#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
-+#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
-+#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
-+#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
-+#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
-+#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
-+#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
-+#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
-+#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
-+#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
-+#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
-+#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
-+#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
-+#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
-+#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
-+#define glthread_once_func            libintl_once_func
-+#define glthread_once_singlethreaded  libintl_once_singlethreaded
-+#define glthread_once_multithreaded   libintl_once_multithreaded
-+])
-+])
-+
-+
-+dnl Checks for the core files of the intl subdirectory:
-+dnl   dcigettext.c
-+dnl   eval-plural.h
-+dnl   explodename.c
-+dnl   finddomain.c
-+dnl   gettextP.h
-+dnl   gmo.h
-+dnl   hash-string.h hash-string.c
-+dnl   l10nflist.c
-+dnl   libgnuintl.h.in (except the *printf stuff)
-+dnl   loadinfo.h
-+dnl   loadmsgcat.c
-+dnl   localealias.c
-+dnl   log.c
-+dnl   plural-exp.h plural-exp.c
-+dnl   plural.y
-+dnl Used by libglocale.
-+AC_DEFUN([gt_INTL_SUBDIR_CORE],
-+[
-+  AC_REQUIRE([AC_C_INLINE])dnl
-+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-+  AC_REQUIRE([AC_FUNC_MMAP])dnl
-+  AC_REQUIRE([gt_INTDIV0])dnl
-+  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
-+  AC_REQUIRE([gt_INTTYPES_PRI])dnl
-+  AC_REQUIRE([gl_LOCK])dnl
-+
-+  AC_TRY_LINK(
-+    [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
-+    [],
-+    [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
-+       [Define to 1 if the compiler understands __builtin_expect.])])
-+
-+  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
-+  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
-+    stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
-+    argz_stringify argz_next __fsetlocking])
-+
-+  dnl Use the *_unlocked functions only if they are declared.
-+  dnl (because some of them were defined without being declared in Solaris
-+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
-+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
-+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
-+  gt_CHECK_DECL([feof_unlocked], [#include <stdio.h>])
-+  gt_CHECK_DECL([fgets_unlocked], [#include <stdio.h>])
-+
-+  AM_ICONV
-+
-+  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
-+  dnl because plural.y uses bison specific features. It requires at least
-+  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
-+  dnl compile.
-+  dnl bison is only needed for the maintainer (who touches plural.y). But in
-+  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
-+  dnl the rule in general Makefile. Now, some people carelessly touch the
-+  dnl files or have a broken "make" program, hence the plural.c rule will
-+  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
-+  dnl present or too old.
-+  AC_CHECK_PROGS([INTLBISON], [bison])
-+  if test -z "$INTLBISON"; then
-+    ac_verc_fail=yes
-+  else
-+    dnl Found it, now check the version.
-+    AC_MSG_CHECKING([version of bison])
-+changequote(<<,>>)dnl
-+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
-+    case $ac_prog_version in
-+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-+      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-+changequote([,])dnl
-+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
-+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-+    esac
-+    AC_MSG_RESULT([$ac_prog_version])
-+  fi
-+  if test $ac_verc_fail = yes; then
-+    INTLBISON=:
-+  fi
-+])
-+
-+
-+dnl gt_CHECK_DECL(FUNC, INCLUDES)
-+dnl Check whether a function is declared.
-+AC_DEFUN([gt_CHECK_DECL],
-+[
-+  AC_CACHE_CHECK([whether $1 is declared], [ac_cv_have_decl_$1],
-+    [AC_TRY_COMPILE([$2], [
-+#ifndef $1
-+  char *p = (char *) $1;
-+#endif
-+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
-+  if test $ac_cv_have_decl_$1 = yes; then
-+    gt_value=1
-+  else
-+    gt_value=0
-+  fi
-+  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
-+    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
-+])
-diff --git a/m4/intldir.m4 b/m4/intldir.m4
-new file mode 100644
-index 0000000..ebae76d
---- /dev/null
-+++ b/m4/intldir.m4
-@@ -0,0 +1,19 @@
-+# intldir.m4 serial 2 (gettext-0.18)
-+dnl Copyright (C) 2006, 2009-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+AC_PREREQ([2.52])
-+
-+dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory.
-+AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], [])
-diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
-new file mode 100644
-index 0000000..dd91025
---- /dev/null
-+++ b/m4/intlmacosx.m4
-@@ -0,0 +1,51 @@
-+# intlmacosx.m4 serial 3 (gettext-0.18)
-+dnl Copyright (C) 2004-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Checks for special options needed on MacOS X.
-+dnl Defines INTL_MACOSX_LIBS.
-+AC_DEFUN([gt_INTL_MACOSX],
-+[
-+  dnl Check for API introduced in MacOS X 10.2.
-+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
-+    [gt_cv_func_CFPreferencesCopyAppValue],
-+    [gt_save_LIBS="$LIBS"
-+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
-+       [CFPreferencesCopyAppValue(NULL, NULL)],
-+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
-+       [gt_cv_func_CFPreferencesCopyAppValue=no])
-+     LIBS="$gt_save_LIBS"])
-+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
-+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
-+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
-+  fi
-+  dnl Check for API introduced in MacOS X 10.3.
-+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent],
-+    [gt_save_LIBS="$LIBS"
-+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
-+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
-+       [gt_cv_func_CFLocaleCopyCurrent=yes],
-+       [gt_cv_func_CFLocaleCopyCurrent=no])
-+     LIBS="$gt_save_LIBS"])
-+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1],
-+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
-+  fi
-+  INTL_MACOSX_LIBS=
-+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
-+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
-+  fi
-+  AC_SUBST([INTL_MACOSX_LIBS])
-+])
-diff --git a/m4/intmax.m4 b/m4/intmax.m4
-new file mode 100644
-index 0000000..74aaaf5
---- /dev/null
-+++ b/m4/intmax.m4
-@@ -0,0 +1,33 @@
-+# intmax.m4 serial 5 (gettext-0.18)
-+dnl Copyright (C) 2002-2005, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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 the system has the 'intmax_t' type, but don't attempt to
-+dnl find a replacement if it is lacking.
-+
-+AC_DEFUN([gt_TYPE_INTMAX_T],
-+[
-+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-+  AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
-+    [AC_TRY_COMPILE([
-+#include <stddef.h>
-+#include <stdlib.h>
-+#if HAVE_STDINT_H_WITH_UINTMAX
-+#include <stdint.h>
-+#endif
-+#if HAVE_INTTYPES_H_WITH_UINTMAX
-+#include <inttypes.h>
-+#endif
-+],     [intmax_t x = -1;
-+        return !x;],
-+       [gt_cv_c_intmax_t=yes],
-+       [gt_cv_c_intmax_t=no])])
-+  if test $gt_cv_c_intmax_t = yes; then
-+    AC_DEFINE([HAVE_INTMAX_T], [1],
-+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
-+  fi
-+])
-diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
-new file mode 100644
-index 0000000..718a4f4
---- /dev/null
-+++ b/m4/inttypes-pri.m4
-@@ -0,0 +1,36 @@
-+# inttypes-pri.m4 serial 6 (gettext-0.18)
-+dnl Copyright (C) 1997-2002, 2006, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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.52])
-+
-+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-+# macros to non-string values.  This is the case on AIX 4.3.3.
-+
-+AC_DEFUN([gt_INTTYPES_PRI],
-+[
-+  AC_CHECK_HEADERS([inttypes.h])
-+  if test $ac_cv_header_inttypes_h = yes; then
-+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
-+      [gt_cv_inttypes_pri_broken],
-+      [
-+        AC_TRY_COMPILE([#include <inttypes.h>
-+#ifdef PRId32
-+char *p = PRId32;
-+#endif
-+], [], [gt_cv_inttypes_pri_broken=no], [gt_cv_inttypes_pri_broken=yes])
-+      ])
-+  fi
-+  if test "$gt_cv_inttypes_pri_broken" = yes; then
-+    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
-+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
-+    PRI_MACROS_BROKEN=1
-+  else
-+    PRI_MACROS_BROKEN=0
-+  fi
-+  AC_SUBST([PRI_MACROS_BROKEN])
-+])
-diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
-new file mode 100644
-index 0000000..782d77e
---- /dev/null
-+++ b/m4/inttypes_h.m4
-@@ -0,0 +1,26 @@
-+# inttypes_h.m4 serial 9
-+dnl Copyright (C) 1997-2004, 2006, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-+# doesn't clash with <sys/types.h>, and declares uintmax_t.
-+
-+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
-+[
-+  AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
-+  [AC_TRY_COMPILE(
-+    [#include <sys/types.h>
-+#include <inttypes.h>],
-+    [uintmax_t i = (uintmax_t) -1; return !i;],
-+    [gl_cv_header_inttypes_h=yes],
-+    [gl_cv_header_inttypes_h=no])])
-+  if test $gl_cv_header_inttypes_h = yes; then
-+    AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
-+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
-+       and declares uintmax_t. ])
-+  fi
-+])
-diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
-new file mode 100644
-index 0000000..1a70543
---- /dev/null
-+++ b/m4/lcmessage.m4
-@@ -0,0 +1,31 @@
-+# lcmessage.m4 serial 6 (gettext-0.18)
-+dnl Copyright (C) 1995-2002, 2004-2005, 2008-2010 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
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995.
-+
-+# Check whether LC_MESSAGES is available in <locale.h>.
-+
-+AC_DEFUN([gt_LC_MESSAGES],
-+[
-+  AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES],
-+    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-+       [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])])
-+  if test $gt_cv_val_LC_MESSAGES = yes; then
-+    AC_DEFINE([HAVE_LC_MESSAGES], [1],
-+      [Define if your <locale.h> file defines LC_MESSAGES.])
-+  fi
-+])
-diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
-new file mode 100644
-index 0000000..ebb3052
---- /dev/null
-+++ b/m4/lib-ld.m4
-@@ -0,0 +1,110 @@
-+# lib-ld.m4 serial 4 (gettext-0.18)
-+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl Subroutines of libtool.m4,
-+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-+dnl with libtool.m4.
-+
-+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-+AC_DEFUN([AC_LIB_PROG_LD_GNU],
-+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
-+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-+case `$LD -v 2>&1 </dev/null` in
-+*GNU* | *'with BFD'*)
-+  acl_cv_prog_gnu_ld=yes ;;
-+*)
-+  acl_cv_prog_gnu_ld=no ;;
-+esac])
-+with_gnu_ld=$acl_cv_prog_gnu_ld
-+])
-+
-+dnl From libtool-1.4. Sets the variable LD.
-+AC_DEFUN([AC_LIB_PROG_LD],
-+[AC_ARG_WITH([gnu-ld],
-+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
-+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-+AC_REQUIRE([AC_PROG_CC])dnl
-+AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+# Prepare PATH_SEPARATOR.
-+# The user is always right.
-+if test "${PATH_SEPARATOR+set}" != set; then
-+  echo "#! /bin/sh" >conf$$.sh
-+  echo  "exit 0"   >>conf$$.sh
-+  chmod +x conf$$.sh
-+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+    PATH_SEPARATOR=';'
-+  else
-+    PATH_SEPARATOR=:
-+  fi
-+  rm -f conf$$.sh
-+fi
-+ac_prog=ld
-+if test "$GCC" = yes; then
-+  # Check if gcc -print-prog-name=ld gives a path.
-+  AC_MSG_CHECKING([for ld used by GCC])
-+  case $host in
-+  *-*-mingw*)
-+    # gcc leaves a trailing carriage return which upsets mingw
-+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-+  *)
-+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-+  esac
-+  case $ac_prog in
-+    # Accept absolute paths.
-+    [[\\/]* | [A-Za-z]:[\\/]*)]
-+      [re_direlt='/[^/][^/]*/\.\./']
-+      # Canonicalize the path of ld
-+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-+        ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-+      done
-+      test -z "$LD" && LD="$ac_prog"
-+      ;;
-+  "")
-+    # If it fails, then pretend we aren't using GCC.
-+    ac_prog=ld
-+    ;;
-+  *)
-+    # If it is relative, then search for the first ld in PATH.
-+    with_gnu_ld=unknown
-+    ;;
-+  esac
-+elif test "$with_gnu_ld" = yes; then
-+  AC_MSG_CHECKING([for GNU ld])
-+else
-+  AC_MSG_CHECKING([for non-GNU ld])
-+fi
-+AC_CACHE_VAL([acl_cv_path_LD],
-+[if test -z "$LD"; then
-+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-+  for ac_dir in $PATH; do
-+    test -z "$ac_dir" && ac_dir=.
-+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-+      acl_cv_path_LD="$ac_dir/$ac_prog"
-+      # Check to see if the program is GNU ld.  I'd rather use --version,
-+      # but apparently some GNU ld's only accept -v.
-+      # Break only if it was the GNU/non-GNU ld that we prefer.
-+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
-+      *GNU* | *'with BFD'*)
-+        test "$with_gnu_ld" != no && break ;;
-+      *)
-+        test "$with_gnu_ld" != yes && break ;;
-+      esac
-+    fi
-+  done
-+  IFS="$ac_save_ifs"
-+else
-+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
-+fi])
-+LD="$acl_cv_path_LD"
-+if test -n "$LD"; then
-+  AC_MSG_RESULT([$LD])
-+else
-+  AC_MSG_RESULT([no])
-+fi
-+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-+AC_LIB_PROG_LD_GNU
-+])
-diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
-new file mode 100644
-index 0000000..c73bd8e
---- /dev/null
-+++ b/m4/lib-link.m4
-@@ -0,0 +1,774 @@
-+# lib-link.m4 serial 21 (gettext-0.18)
-+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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])
-+
-+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-+dnl the libraries corresponding to explicit and implicit dependencies.
-+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-+dnl augments the CPPFLAGS variable.
-+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
-+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-+AC_DEFUN([AC_LIB_LINKFLAGS],
-+[
-+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+  AC_REQUIRE([AC_LIB_RPATH])
-+  pushdef([Name],[translit([$1],[./-], [___])])
-+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
-+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
-+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
-+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
-+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
-+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
-+  ])
-+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
-+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
-+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
-+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
-+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-+  AC_SUBST([LIB]NAME)
-+  AC_SUBST([LTLIB]NAME)
-+  AC_SUBST([LIB]NAME[_PREFIX])
-+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
-+  dnl results of this search when this library appears as a dependency.
-+  HAVE_LIB[]NAME=yes
-+  popdef([NAME])
-+  popdef([Name])
-+])
-+
-+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
-+dnl searches for libname and the libraries corresponding to explicit and
-+dnl implicit dependencies, together with the specified include files and
-+dnl the ability to compile and link the specified testcode. The missing-message
-+dnl defaults to 'no' and may contain additional hints for the user.
-+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
-+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
-+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-+[
-+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+  AC_REQUIRE([AC_LIB_RPATH])
-+  pushdef([Name],[translit([$1],[./-], [___])])
-+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+
-+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
-+  dnl accordingly.
-+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
-+
-+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
-+  dnl because if the user has installed lib[]Name and not disabled its use
-+  dnl via --without-lib[]Name-prefix, he wants to use it.
-+  ac_save_CPPFLAGS="$CPPFLAGS"
-+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-+
-+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
-+    ac_save_LIBS="$LIBS"
-+    dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
-+    dnl because these -l options might require -L options that are present in
-+    dnl LIBS. -l options benefit only from the -L options listed before it.
-+    dnl Otherwise, add it to the front of LIBS, because it may be a static
-+    dnl library that depends on another static library that is present in LIBS.
-+    dnl Static libraries benefit only from the static libraries listed after
-+    dnl it.
-+    case " $LIB[]NAME" in
-+      *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
-+      *)       LIBS="$LIB[]NAME $LIBS" ;;
-+    esac
-+    AC_TRY_LINK([$3], [$4],
-+      [ac_cv_lib[]Name=yes],
-+      [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
-+    LIBS="$ac_save_LIBS"
-+  ])
-+  if test "$ac_cv_lib[]Name" = yes; then
-+    HAVE_LIB[]NAME=yes
-+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
-+    AC_MSG_CHECKING([how to link with lib[]$1])
-+    AC_MSG_RESULT([$LIB[]NAME])
-+  else
-+    HAVE_LIB[]NAME=no
-+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
-+    dnl $INC[]NAME either.
-+    CPPFLAGS="$ac_save_CPPFLAGS"
-+    LIB[]NAME=
-+    LTLIB[]NAME=
-+    LIB[]NAME[]_PREFIX=
-+  fi
-+  AC_SUBST([HAVE_LIB]NAME)
-+  AC_SUBST([LIB]NAME)
-+  AC_SUBST([LTLIB]NAME)
-+  AC_SUBST([LIB]NAME[_PREFIX])
-+  popdef([NAME])
-+  popdef([Name])
-+])
-+
-+dnl Determine the platform dependent parameters needed to use rpath:
-+dnl   acl_libext,
-+dnl   acl_shlibext,
-+dnl   acl_hardcode_libdir_flag_spec,
-+dnl   acl_hardcode_libdir_separator,
-+dnl   acl_hardcode_direct,
-+dnl   acl_hardcode_minus_L.
-+AC_DEFUN([AC_LIB_RPATH],
-+[
-+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
-+  m4_ifdef([AC_REQUIRE_AUX_FILE], [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
-+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
-+  AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
-+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-+    . ./conftest.sh
-+    rm -f ./conftest.sh
-+    acl_cv_rpath=done
-+  ])
-+  wl="$acl_cv_wl"
-+  acl_libext="$acl_cv_libext"
-+  acl_shlibext="$acl_cv_shlibext"
-+  acl_libname_spec="$acl_cv_libname_spec"
-+  acl_library_names_spec="$acl_cv_library_names_spec"
-+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-+  acl_hardcode_direct="$acl_cv_hardcode_direct"
-+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
-+  dnl Determine whether the user wants rpath handling at all.
-+  AC_ARG_ENABLE([rpath],
-+    [  --disable-rpath         do not hardcode runtime library paths],
-+    :, enable_rpath=yes)
-+])
-+
-+dnl AC_LIB_FROMPACKAGE(name, package)
-+dnl declares that libname comes from the given package. The configure file
-+dnl will then not have a --with-libname-prefix option but a
-+dnl --with-package-prefix option. Several libraries can come from the same
-+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
-+dnl macro call that searches for libname.
-+AC_DEFUN([AC_LIB_FROMPACKAGE],
-+[
-+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+  define([acl_frompackage_]NAME, [$2])
-+  popdef([NAME])
-+  pushdef([PACK],[$2])
-+  pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
-+                                  [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+  define([acl_libsinpackage_]PACKUP,
-+    m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
-+  popdef([PACKUP])
-+  popdef([PACK])
-+])
-+
-+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-+dnl the libraries corresponding to explicit and implicit dependencies.
-+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
-+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
-+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-+[
-+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-+  pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+                                [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+  pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
-+  pushdef([PACKUP],[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],[translit(PACK,[.],[_])],PACK)])
-+  dnl By default, look in $includedir and $libdir.
-+  use_additional=yes
-+  AC_LIB_WITH_FINAL_PREFIX([
-+    eval additional_includedir=\"$includedir\"
-+    eval additional_libdir=\"$libdir\"
-+  ])
-+  AC_ARG_WITH(P_A_C_K[-prefix],
-+[[  --with-]]P_A_C_K[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
-+  --without-]]P_A_C_K[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
-+[
-+    if test "X$withval" = "Xno"; then
-+      use_additional=no
-+    else
-+      if test "X$withval" = "X"; then
-+        AC_LIB_WITH_FINAL_PREFIX([
-+          eval additional_includedir=\"$includedir\"
-+          eval additional_libdir=\"$libdir\"
-+        ])
-+      else
-+        additional_includedir="$withval/include"
-+        additional_libdir="$withval/$acl_libdirstem"
-+        if test "$acl_libdirstem2" != "$acl_libdirstem" \
-+           && ! test -d "$withval/$acl_libdirstem"; then
-+          additional_libdir="$withval/$acl_libdirstem2"
-+        fi
-+      fi
-+    fi
-+])
-+  dnl Search the library and its dependencies in $additional_libdir and
-+  dnl $LDFLAGS. Using breadth-first-seach.
-+  LIB[]NAME=
-+  LTLIB[]NAME=
-+  INC[]NAME=
-+  LIB[]NAME[]_PREFIX=
-+  dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
-+  dnl computed. So it has to be reset here.
-+  HAVE_LIB[]NAME=
-+  rpathdirs=
-+  ltrpathdirs=
-+  names_already_handled=
-+  names_next_round='$1 $2'
-+  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"
-+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
-+        dnl or AC_LIB_HAVE_LINKFLAGS call.
-+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-+        eval value=\"\$HAVE_LIB$uppername\"
-+        if test -n "$value"; then
-+          if test "$value" = yes; then
-+            eval value=\"\$LIB$uppername\"
-+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
-+            eval value=\"\$LTLIB$uppername\"
-+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
-+          else
-+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
-+            dnl that this library doesn't exist. So just drop it.
-+            :
-+          fi
-+        else
-+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
-+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
-+          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"
-+            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//'`
-+                  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
-+                  ;;
-+              esac
-+              if test "X$found_dir" != "X"; then
-+                break
-+              fi
-+            done
-+          fi
-+          if test "X$found_dir" != "X"; then
-+            dnl Found the library.
-+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
-+            if test "X$found_so" != "X"; then
-+              dnl Linking with a shared library. We attempt to hardcode its
-+              dnl directory into the executable's runpath, unless it's the
-+              dnl standard /usr/lib.
-+              if test "$enable_rpath" = no \
-+                 || test "X$found_dir" = "X/usr/$acl_libdirstem" \
-+                 || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
-+                dnl No hardcoding is needed.
-+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+              else
-+                dnl Use an explicit option to hardcode DIR into the resulting
-+                dnl binary.
-+                dnl Potentially add DIR to ltrpathdirs.
-+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-+                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
-+                dnl The hardcoding into $LIBNAME is system dependent.
-+                if test "$acl_hardcode_direct" = yes; then
-+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
-+                  dnl resulting binary.
-+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+                else
-+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
-+                    dnl Use an explicit option to hardcode DIR into the resulting
-+                    dnl binary.
-+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+                    dnl Potentially add DIR to rpathdirs.
-+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
-+                    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
-+                    dnl Rely on "-L$found_dir".
-+                    dnl But don't add it if it's already contained in the LDFLAGS
-+                    dnl or the already constructed $LIBNAME
-+                    haveit=
-+                    for x in $LDFLAGS $LIB[]NAME; do
-+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+                      if test "X$x" = "X-L$found_dir"; then
-+                        haveit=yes
-+                        break
-+                      fi
-+                    done
-+                    if test -z "$haveit"; then
-+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
-+                    fi
-+                    if test "$acl_hardcode_minus_L" != no; then
-+                      dnl FIXME: Not sure whether we should use
-+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-+                      dnl here.
-+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+                    else
-+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
-+                      dnl here, because this doesn't fit in flags passed to the
-+                      dnl compiler. So give up. No hardcoding. This affects only
-+                      dnl very old systems.
-+                      dnl FIXME: Not sure whether we should use
-+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-+                      dnl here.
-+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-+                    fi
-+                  fi
-+                fi
-+              fi
-+            else
-+              if test "X$found_a" != "X"; then
-+                dnl Linking with a static library.
-+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
-+              else
-+                dnl We shouldn't come here, but anyway it's good to have a
-+                dnl fallback.
-+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
-+              fi
-+            fi
-+            dnl Assume the include files are nearby.
-+            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" = '$1'; then
-+                  LIB[]NAME[]_PREFIX="$basedir"
-+                fi
-+                additional_includedir="$basedir/include"
-+                ;;
-+              */$acl_libdirstem2 | */$acl_libdirstem2/)
-+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
-+                if test "$name" = '$1'; then
-+                  LIB[]NAME[]_PREFIX="$basedir"
-+                fi
-+                additional_includedir="$basedir/include"
-+                ;;
-+            esac
-+            if test "X$additional_includedir" != "X"; then
-+              dnl Potentially add $additional_includedir to $INCNAME.
-+              dnl But don't add it
-+              dnl   1. if it's the standard /usr/include,
-+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
-+              dnl   3. if it's already present in $CPPFLAGS or the already
-+              dnl      constructed $INCNAME,
-+              dnl   4. if it doesn't exist as a directory.
-+              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 $INC[]NAME; do
-+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+                    if test "X$x" = "X-I$additional_includedir"; then
-+                      haveit=yes
-+                      break
-+                    fi
-+                  done
-+                  if test -z "$haveit"; then
-+                    if test -d "$additional_includedir"; then
-+                      dnl Really add $additional_includedir to $INCNAME.
-+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
-+                    fi
-+                  fi
-+                fi
-+              fi
-+            fi
-+            dnl Look for dependencies.
-+            if test -n "$found_la"; then
-+              dnl Read the .la file. It defines the variables
-+              dnl dlname, library_names, old_library, dependency_libs, current,
-+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
-+              save_libdir="$libdir"
-+              case "$found_la" in
-+                */* | *\\*) . "$found_la" ;;
-+                *) . "./$found_la" ;;
-+              esac
-+              libdir="$save_libdir"
-+              dnl We use only dependency_libs.
-+              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.
-+                    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
-+                      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 $LIB[]NAME; do
-+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+                          if test "X$x" = "X-L$additional_libdir"; then
-+                            haveit=yes
-+                            break
-+                          fi
-+                        done
-+                        if test -z "$haveit"; then
-+                          if test -d "$additional_libdir"; then
-+                            dnl Really add $additional_libdir to $LIBNAME.
-+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_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
-+                            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"
-+                          fi
-+                        fi
-+                      fi
-+                    fi
-+                    ;;
-+                  -R*)
-+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
-+                    if test "$enable_rpath" != no; then
-+                      dnl Potentially add DIR to rpathdirs.
-+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
-+                      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
-+                      dnl Potentially add DIR to ltrpathdirs.
-+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-+                      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*)
-+                    dnl Handle this in the next round.
-+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-+                    ;;
-+                  *.la)
-+                    dnl Handle this in the next round. Throw away the .la's
-+                    dnl directory; it is already contained in a preceding -L
-+                    dnl option.
-+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-+                    ;;
-+                  *)
-+                    dnl Most likely an immediate library name.
-+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
-+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
-+                    ;;
-+                esac
-+              done
-+            fi
-+          else
-+            dnl Didn't find the library; assume it is in the system directories
-+            dnl known to the linker and runtime loader. (All the system
-+            dnl directories known to the linker should also be known to the
-+            dnl runtime loader, otherwise the system is severely misconfigured.)
-+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
-+          fi
-+        fi
-+      fi
-+    done
-+  done
-+  if test "X$rpathdirs" != "X"; then
-+    if test -n "$acl_hardcode_libdir_separator"; then
-+      dnl Weird platform: only the last -rpath option counts, the user must
-+      dnl pass all path elements in one option. We can arrange that for a
-+      dnl single library, but not when more than one $LIBNAMEs are used.
-+      alldirs=
-+      for found_dir in $rpathdirs; do
-+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
-+      done
-+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
-+      acl_save_libdir="$libdir"
-+      libdir="$alldirs"
-+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
-+      libdir="$acl_save_libdir"
-+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-+    else
-+      dnl The -rpath options are cumulative.
-+      for found_dir in $rpathdirs; do
-+        acl_save_libdir="$libdir"
-+        libdir="$found_dir"
-+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
-+        libdir="$acl_save_libdir"
-+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-+      done
-+    fi
-+  fi
-+  if test "X$ltrpathdirs" != "X"; then
-+    dnl When using libtool, the option that works for both libraries and
-+    dnl executables is -R. The -R options are cumulative.
-+    for found_dir in $ltrpathdirs; do
-+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
-+    done
-+  fi
-+  popdef([P_A_C_K])
-+  popdef([PACKLIBS])
-+  popdef([PACKUP])
-+  popdef([PACK])
-+  popdef([NAME])
-+])
-+
-+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-+dnl unless already present in VAR.
-+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-+dnl contains two or three consecutive elements that belong together.
-+AC_DEFUN([AC_LIB_APPENDTOVAR],
-+[
-+  for element in [$2]; do
-+    haveit=
-+    for x in $[$1]; do
-+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+      if test "X$x" = "X$element"; then
-+        haveit=yes
-+        break
-+      fi
-+    done
-+    if test -z "$haveit"; then
-+      [$1]="${[$1]}${[$1]:+ }$element"
-+    fi
-+  done
-+])
-+
-+dnl For those cases where a variable contains several -L and -l options
-+dnl referring to unknown libraries and directories, this macro determines the
-+dnl necessary additional linker options for the runtime path.
-+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
-+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
-+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
-+dnl otherwise linking without libtool is assumed.
-+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
-+[
-+  AC_REQUIRE([AC_LIB_RPATH])
-+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-+  $1=
-+  if test "$enable_rpath" != no; then
-+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
-+      dnl Use an explicit option to hardcode directories into the resulting
-+      dnl binary.
-+      rpathdirs=
-+      next=
-+      for opt in $2; do
-+        if test -n "$next"; then
-+          dir="$next"
-+          dnl No need to hardcode the standard /usr/lib.
-+          if test "X$dir" != "X/usr/$acl_libdirstem" \
-+             && test "X$dir" != "X/usr/$acl_libdirstem2"; then
-+            rpathdirs="$rpathdirs $dir"
-+          fi
-+          next=
-+        else
-+          case $opt in
-+            -L) next=yes ;;
-+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
-+                 dnl No need to hardcode the standard /usr/lib.
-+                 if test "X$dir" != "X/usr/$acl_libdirstem" \
-+                    && test "X$dir" != "X/usr/$acl_libdirstem2"; then
-+                   rpathdirs="$rpathdirs $dir"
-+                 fi
-+                 next= ;;
-+            *) next= ;;
-+          esac
-+        fi
-+      done
-+      if test "X$rpathdirs" != "X"; then
-+        if test -n ""$3""; then
-+          dnl libtool is used for linking. Use -R options.
-+          for dir in $rpathdirs; do
-+            $1="${$1}${$1:+ }-R$dir"
-+          done
-+        else
-+          dnl The linker is used for linking directly.
-+          if test -n "$acl_hardcode_libdir_separator"; then
-+            dnl Weird platform: only the last -rpath option counts, the user
-+            dnl must pass all path elements in one option.
-+            alldirs=
-+            for dir in $rpathdirs; do
-+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
-+            done
-+            acl_save_libdir="$libdir"
-+            libdir="$alldirs"
-+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
-+            libdir="$acl_save_libdir"
-+            $1="$flag"
-+          else
-+            dnl The -rpath options are cumulative.
-+            for dir in $rpathdirs; do
-+              acl_save_libdir="$libdir"
-+              libdir="$dir"
-+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
-+              libdir="$acl_save_libdir"
-+              $1="${$1}${$1:+ }$flag"
-+            done
-+          fi
-+        fi
-+      fi
-+    fi
-+  fi
-+  AC_SUBST([$1])
-+])
-diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
-new file mode 100644
-index 0000000..1601cea
---- /dev/null
-+++ b/m4/lib-prefix.m4
-@@ -0,0 +1,224 @@
-+# lib-prefix.m4 serial 7 (gettext-0.18)
-+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-+dnl require excessive bracketing.
-+ifdef([AC_HELP_STRING],
-+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-+
-+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-+dnl to access previously installed libraries. The basic assumption is that
-+dnl a user will want packages to use other packages he previously installed
-+dnl with the same --prefix option.
-+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-+dnl libraries, but is otherwise very convenient.
-+AC_DEFUN([AC_LIB_PREFIX],
-+[
-+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
-+  AC_REQUIRE([AC_PROG_CC])
-+  AC_REQUIRE([AC_CANONICAL_HOST])
-+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
-+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+  dnl By default, look in $includedir and $libdir.
-+  use_additional=yes
-+  AC_LIB_WITH_FINAL_PREFIX([
-+    eval additional_includedir=\"$includedir\"
-+    eval additional_libdir=\"$libdir\"
-+  ])
-+  AC_LIB_ARG_WITH([lib-prefix],
-+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
-+  --without-lib-prefix    don't search for libraries in includedir and libdir],
-+[
-+    if test "X$withval" = "Xno"; then
-+      use_additional=no
-+    else
-+      if test "X$withval" = "X"; then
-+        AC_LIB_WITH_FINAL_PREFIX([
-+          eval additional_includedir=\"$includedir\"
-+          eval additional_libdir=\"$libdir\"
-+        ])
-+      else
-+        additional_includedir="$withval/include"
-+        additional_libdir="$withval/$acl_libdirstem"
-+      fi
-+    fi
-+])
-+  if test $use_additional = yes; then
-+    dnl Potentially add $additional_includedir to $CPPFLAGS.
-+    dnl But don't add it
-+    dnl   1. if it's the standard /usr/include,
-+    dnl   2. if it's already present in $CPPFLAGS,
-+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
-+    dnl   4. if it doesn't exist as a directory.
-+    if test "X$additional_includedir" != "X/usr/include"; then
-+      haveit=
-+      for x in $CPPFLAGS; do
-+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+        if test "X$x" = "X-I$additional_includedir"; then
-+          haveit=yes
-+          break
-+        fi
-+      done
-+      if test -z "$haveit"; then
-+        if test "X$additional_includedir" = "X/usr/local/include"; then
-+          if test -n "$GCC"; then
-+            case $host_os in
-+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
-+            esac
-+          fi
-+        fi
-+        if test -z "$haveit"; then
-+          if test -d "$additional_includedir"; then
-+            dnl Really add $additional_includedir to $CPPFLAGS.
-+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
-+          fi
-+        fi
-+      fi
-+    fi
-+    dnl Potentially add $additional_libdir to $LDFLAGS.
-+    dnl But don't add it
-+    dnl   1. if it's the standard /usr/lib,
-+    dnl   2. if it's already present in $LDFLAGS,
-+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
-+    dnl   4. if it doesn't exist as a directory.
-+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
-+      haveit=
-+      for x in $LDFLAGS; do
-+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+        if test "X$x" = "X-L$additional_libdir"; then
-+          haveit=yes
-+          break
-+        fi
-+      done
-+      if test -z "$haveit"; then
-+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
-+          if test -n "$GCC"; then
-+            case $host_os in
-+              linux*) haveit=yes;;
-+            esac
-+          fi
-+        fi
-+        if test -z "$haveit"; then
-+          if test -d "$additional_libdir"; then
-+            dnl Really add $additional_libdir to $LDFLAGS.
-+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
-+          fi
-+        fi
-+      fi
-+    fi
-+  fi
-+])
-+
-+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-+dnl acl_final_exec_prefix, containing the values to which $prefix and
-+dnl $exec_prefix will expand at the end of the configure script.
-+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-+[
-+  dnl Unfortunately, prefix and exec_prefix get only finally determined
-+  dnl at the end of configure.
-+  if test "X$prefix" = "XNONE"; then
-+    acl_final_prefix="$ac_default_prefix"
-+  else
-+    acl_final_prefix="$prefix"
-+  fi
-+  if test "X$exec_prefix" = "XNONE"; then
-+    acl_final_exec_prefix='${prefix}'
-+  else
-+    acl_final_exec_prefix="$exec_prefix"
-+  fi
-+  acl_save_prefix="$prefix"
-+  prefix="$acl_final_prefix"
-+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-+  prefix="$acl_save_prefix"
-+])
-+
-+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-+dnl variables prefix and exec_prefix bound to the values they will have
-+dnl at the end of the configure script.
-+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-+[
-+  acl_save_prefix="$prefix"
-+  prefix="$acl_final_prefix"
-+  acl_save_exec_prefix="$exec_prefix"
-+  exec_prefix="$acl_final_exec_prefix"
-+  $1
-+  exec_prefix="$acl_save_exec_prefix"
-+  prefix="$acl_save_prefix"
-+])
-+
-+dnl AC_LIB_PREPARE_MULTILIB creates
-+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
-+dnl   "lib" or "lib64" or "lib/64",
-+dnl - a variable acl_libdirstem2, as a secondary possible value for
-+dnl   acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
-+dnl   "lib/amd64".
-+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
-+[
-+  dnl There is no formal standard regarding lib and lib64.
-+  dnl On glibc systems, the current practice is that on a system supporting
-+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
-+  dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
-+  dnl the compiler's default mode by looking at the compiler's library search
-+  dnl path. If at least one of its elements ends in /lib64 or points to a
-+  dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
-+  dnl Otherwise we use the default, namely "lib".
-+  dnl On Solaris systems, the current practice is that on a system supporting
-+  dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
-+  dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
-+  dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
-+  AC_REQUIRE([AC_CANONICAL_HOST])
-+  acl_libdirstem=lib
-+  acl_libdirstem2=
-+  case "$host_os" in
-+    solaris*)
-+      dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
-+      dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
-+      dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
-+      dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
-+      dnl symlink is missing, so we set acl_libdirstem2 too.
-+      AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
-+        [AC_EGREP_CPP([sixtyfour bits], [
-+#ifdef _LP64
-+sixtyfour bits
-+#endif
-+           ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
-+        ])
-+      if test $gl_cv_solaris_64bit = yes; then
-+        acl_libdirstem=lib/64
-+        case "$host_cpu" in
-+          sparc*)        acl_libdirstem2=lib/sparcv9 ;;
-+          i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
-+        esac
-+      fi
-+      ;;
-+    *)
-+      searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
-+      if test -n "$searchpath"; then
-+        acl_save_IFS="${IFS= 	}"; IFS=":"
-+        for searchdir in $searchpath; do
-+          if test -d "$searchdir"; then
-+            case "$searchdir" in
-+              */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
-+              */../ | */.. )
-+                # Better ignore directories of this form. They are misleading.
-+                ;;
-+              *) searchdir=`cd "$searchdir" && pwd`
-+                 case "$searchdir" in
-+                   */lib64 ) acl_libdirstem=lib64 ;;
-+                 esac ;;
-+            esac
-+          fi
-+        done
-+        IFS="$acl_save_IFS"
-+      fi
-+      ;;
-+  esac
-+  test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
-+])
-diff --git a/m4/lock.m4 b/m4/lock.m4
-new file mode 100644
-index 0000000..9da8465
---- /dev/null
-+++ b/m4/lock.m4
-@@ -0,0 +1,37 @@
-+# lock.m4 serial 10 (gettext-0.18)
-+dnl Copyright (C) 2005-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([gl_LOCK],
-+[
-+  AC_REQUIRE([gl_THREADLIB])
-+  if test "$gl_threads_api" = posix; then
-+    # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the
-+    # pthread_rwlock_* functions.
-+    AC_CHECK_TYPE([pthread_rwlock_t],
-+      [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
-+         [Define if the POSIX multithreading library has read/write locks.])],
-+      [],
-+      [#include <pthread.h>])
-+    # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
-+    AC_TRY_COMPILE([#include <pthread.h>],
-+      [#if __FreeBSD__ == 4
-+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
-+#else
-+int x = (int)PTHREAD_MUTEX_RECURSIVE;
-+return !x;
-+#endif],
-+      [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
-+         [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
-+  fi
-+  gl_PREREQ_LOCK
-+])
-+
-+# Prerequisites of lib/lock.c.
-+AC_DEFUN([gl_PREREQ_LOCK], [
-+  AC_REQUIRE([AC_C_INLINE])
-+])
-diff --git a/m4/longlong.m4 b/m4/longlong.m4
-new file mode 100644
-index 0000000..cca3c1a
---- /dev/null
-+++ b/m4/longlong.m4
-@@ -0,0 +1,106 @@
-+# longlong.m4 serial 14
-+dnl Copyright (C) 1999-2007, 2009-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_LONG_LONG_INT if 'long long int' works.
-+# This fixes a bug in Autoconf 2.61, but can be removed once we
-+# assume 2.62 everywhere.
-+
-+# Note: If the type 'long long int' exists but is only 32 bits large
-+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-+# defined. In this case you can treat 'long long int' like 'long int'.
-+
-+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-+[
-+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-+    [AC_LINK_IFELSE(
-+       [_AC_TYPE_LONG_LONG_SNIPPET],
-+       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-+        dnl If cross compiling, assume the bug isn't important, since
-+        dnl nobody cross compiles for this platform as far as we know.
-+        AC_RUN_IFELSE(
-+          [AC_LANG_PROGRAM(
-+             [[@%:@include <limits.h>
-+               @%:@ifndef LLONG_MAX
-+               @%:@ define HALF \
-+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-+               @%:@ define LLONG_MAX (HALF - 1 + HALF)
-+               @%:@endif]],
-+             [[long long int n = 1;
-+               int i;
-+               for (i = 0; ; i++)
-+                 {
-+                   long long int m = n << i;
-+                   if (m >> i != n)
-+                     return 1;
-+                   if (LLONG_MAX / 2 < m)
-+                     break;
-+                 }
-+               return 0;]])],
-+          [ac_cv_type_long_long_int=yes],
-+          [ac_cv_type_long_long_int=no],
-+          [ac_cv_type_long_long_int=yes])],
-+       [ac_cv_type_long_long_int=no])])
-+  if test $ac_cv_type_long_long_int = yes; then
-+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
-+      [Define to 1 if the system has the type `long long int'.])
-+  fi
-+])
-+
-+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-+# This fixes a bug in Autoconf 2.61, but can be removed once we
-+# assume 2.62 everywhere.
-+
-+# Note: If the type 'unsigned long long int' exists but is only 32 bits
-+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-+# will not be defined. In this case you can treat 'unsigned long long int'
-+# like 'unsigned long int'.
-+
-+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-+[
-+  AC_CACHE_CHECK([for unsigned long long int],
-+    [ac_cv_type_unsigned_long_long_int],
-+    [AC_LINK_IFELSE(
-+       [_AC_TYPE_LONG_LONG_SNIPPET],
-+       [ac_cv_type_unsigned_long_long_int=yes],
-+       [ac_cv_type_unsigned_long_long_int=no])])
-+  if test $ac_cv_type_unsigned_long_long_int = yes; then
-+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
-+      [Define to 1 if the system has the type `unsigned long long int'.])
-+  fi
-+])
-+
-+# Expands to a C program that can be used to test for simultaneous support
-+# of 'long long' and 'unsigned long long'. We don't want to say that
-+# 'long long' is available if 'unsigned long long' is not, or vice versa,
-+# because too many programs rely on the symmetry between signed and unsigned
-+# integer types (excluding 'bool').
-+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-+[
-+  AC_LANG_PROGRAM(
-+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
-+         implementations with broken preprocessors.  Perhaps this can
-+         be revisited in 2012.  In the meantime, code should not expect
-+         #if to work with literals wider than 32 bits.  */
-+      /* Test literals.  */
-+      long long int ll = 9223372036854775807ll;
-+      long long int nll = -9223372036854775807LL;
-+      unsigned long long int ull = 18446744073709551615ULL;
-+      /* Test constant expressions.   */
-+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-+                     ? 1 : -1)];
-+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-+                     ? 1 : -1)];
-+      int i = 63;]],
-+    [[/* Test availability of runtime routines for shift and division.  */
-+      long long int llmax = 9223372036854775807ll;
-+      unsigned long long int ullmax = 18446744073709551615ull;
-+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-+              | (llmax / ll) | (llmax % ll)
-+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-+              | (ullmax / ull) | (ullmax % ull));]])
-+])
-diff --git a/m4/nls.m4 b/m4/nls.m4
-new file mode 100644
-index 0000000..003704c
---- /dev/null
-+++ b/m4/nls.m4
-@@ -0,0 +1,32 @@
-+# nls.m4 serial 5 (gettext-0.18)
-+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 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
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-+
-+AC_PREREQ([2.50])
-+
-+AC_DEFUN([AM_NLS],
-+[
-+  AC_MSG_CHECKING([whether NLS is requested])
-+  dnl Default is enabled NLS
-+  AC_ARG_ENABLE([nls],
-+    [  --disable-nls           do not use Native Language Support],
-+    USE_NLS=$enableval, USE_NLS=yes)
-+  AC_MSG_RESULT([$USE_NLS])
-+  AC_SUBST([USE_NLS])
-+])
-diff --git a/m4/po.m4 b/m4/po.m4
-new file mode 100644
-index 0000000..47f36a4
---- /dev/null
-+++ b/m4/po.m4
-@@ -0,0 +1,449 @@
-+# po.m4 serial 17 (gettext-0.18)
-+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
-+
-+AC_PREREQ([2.50])
-+
-+dnl Checks for all prerequisites of the po subdirectory.
-+AC_DEFUN([AM_PO_SUBDIRS],
-+[
-+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-+  AC_REQUIRE([AC_PROG_INSTALL])dnl
-+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
-+  AC_REQUIRE([AM_NLS])dnl
-+
-+  dnl Release version of the gettext macros. This is used to ensure that
-+  dnl the gettext macros and po/Makefile.in.in are in sync.
-+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
-+
-+  dnl Perform the following tests also if --disable-nls has been given,
-+  dnl because they are needed for "make dist" to work.
-+
-+  dnl Search for GNU msgfmt in the PATH.
-+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
-+  dnl The second test excludes FreeBSD msgfmt.
-+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
-+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-+    :)
-+  AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
-+
-+  dnl Test whether it is GNU msgfmt >= 0.15.
-+changequote(,)dnl
-+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
-+    *) MSGFMT_015=$MSGFMT ;;
-+  esac
-+changequote([,])dnl
-+  AC_SUBST([MSGFMT_015])
-+changequote(,)dnl
-+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
-+    *) GMSGFMT_015=$GMSGFMT ;;
-+  esac
-+changequote([,])dnl
-+  AC_SUBST([GMSGFMT_015])
-+
-+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
-+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
-+  dnl The second test excludes FreeBSD xgettext.
-+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
-+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-+    :)
-+  dnl Remove leftover from FreeBSD xgettext call.
-+  rm -f messages.po
-+
-+  dnl Test whether it is GNU xgettext >= 0.15.
-+changequote(,)dnl
-+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
-+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
-+    *) XGETTEXT_015=$XGETTEXT ;;
-+  esac
-+changequote([,])dnl
-+  AC_SUBST([XGETTEXT_015])
-+
-+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
-+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
-+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
-+
-+  dnl Installation directories.
-+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
-+  dnl have to define it here, so that it can be used in po/Makefile.
-+  test -n "$localedir" || localedir='${datadir}/locale'
-+  AC_SUBST([localedir])
-+
-+  dnl Support for AM_XGETTEXT_OPTION.
-+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
-+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
-+
-+  AC_CONFIG_COMMANDS([po-directories], [[
-+    for ac_file in $CONFIG_FILES; do
-+      # Support "outfile[:infile[:infile...]]"
-+      case "$ac_file" in
-+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-+      esac
-+      # PO directories have a Makefile.in generated from Makefile.in.in.
-+      case "$ac_file" in */Makefile.in)
-+        # Adjust a relative srcdir.
-+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-+        # In autoconf-2.13 it is called $ac_given_srcdir.
-+        # In autoconf-2.50 it is called $srcdir.
-+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-+        case "$ac_given_srcdir" in
-+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-+          /*) top_srcdir="$ac_given_srcdir" ;;
-+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
-+        esac
-+        # Treat a directory as a PO directory if and only if it has a
-+        # POTFILES.in file. This allows packages to have multiple PO
-+        # directories under different names or in different locations.
-+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
-+          rm -f "$ac_dir/POTFILES"
-+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
-+          POMAKEFILEDEPS="POTFILES.in"
-+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
-+          # on $ac_dir but don't depend on user-specified configuration
-+          # parameters.
-+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-+            # The LINGUAS file contains the set of available languages.
-+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
-+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-+            fi
-+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
-+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
-+          else
-+            # The set of available languages was given in configure.in.
-+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
-+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
-+          fi
-+          # Compute POFILES
-+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
-+          # Compute UPDATEPOFILES
-+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
-+          # Compute DUMMYPOFILES
-+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
-+          # Compute GMOFILES
-+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
-+          case "$ac_given_srcdir" in
-+            .) srcdirpre= ;;
-+            *) srcdirpre='$(srcdir)/' ;;
-+          esac
-+          POFILES=
-+          UPDATEPOFILES=
-+          DUMMYPOFILES=
-+          GMOFILES=
-+          for lang in $ALL_LINGUAS; do
-+            POFILES="$POFILES $srcdirpre$lang.po"
-+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-+          done
-+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
-+          # environment variable.
-+          INST_LINGUAS=
-+          if test -n "$ALL_LINGUAS"; then
-+            for presentlang in $ALL_LINGUAS; do
-+              useit=no
-+              if test "%UNSET%" != "$LINGUAS"; then
-+                desiredlanguages="$LINGUAS"
-+              else
-+                desiredlanguages="$ALL_LINGUAS"
-+              fi
-+              for desiredlang in $desiredlanguages; do
-+                # Use the presentlang catalog if desiredlang is
-+                #   a. equal to presentlang, or
-+                #   b. a variant of presentlang (because in this case,
-+                #      presentlang can be used as a fallback for messages
-+                #      which are not translated in the desiredlang catalog).
-+                case "$desiredlang" in
-+                  "$presentlang"*) useit=yes;;
-+                esac
-+              done
-+              if test $useit = yes; then
-+                INST_LINGUAS="$INST_LINGUAS $presentlang"
-+              fi
-+            done
-+          fi
-+          CATALOGS=
-+          if test -n "$INST_LINGUAS"; then
-+            for lang in $INST_LINGUAS; do
-+              CATALOGS="$CATALOGS $lang.gmo"
-+            done
-+          fi
-+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
-+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
-+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
-+            if test -f "$f"; then
-+              case "$f" in
-+                *.orig | *.bak | *~) ;;
-+                *) cat "$f" >> "$ac_dir/Makefile" ;;
-+              esac
-+            fi
-+          done
-+        fi
-+        ;;
-+      esac
-+    done]],
-+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
-+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
-+    # from automake < 1.5.
-+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
-+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
-+    LINGUAS="${LINGUAS-%UNSET%}"
-+   ])
-+])
-+
-+dnl Postprocesses a Makefile in a directory containing PO files.
-+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
-+[
-+  # When this code is run, in config.status, two variables have already been
-+  # set:
-+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
-+  # - LINGUAS is the value of the environment variable LINGUAS at configure
-+  #   time.
-+
-+changequote(,)dnl
-+  # Adjust a relative srcdir.
-+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-+  # In autoconf-2.13 it is called $ac_given_srcdir.
-+  # In autoconf-2.50 it is called $srcdir.
-+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-+  case "$ac_given_srcdir" in
-+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-+    /*) top_srcdir="$ac_given_srcdir" ;;
-+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
-+  esac
-+
-+  # Find a way to echo strings without interpreting backslash.
-+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
-+    gt_echo='echo'
-+  else
-+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
-+      gt_echo='printf %s\n'
-+    else
-+      echo_func () {
-+        cat <<EOT
-+$*
-+EOT
-+      }
-+      gt_echo='echo_func'
-+    fi
-+  fi
-+
-+  # A sed script that extracts the value of VARIABLE from a Makefile.
-+  sed_x_variable='
-+# Test if the hold space is empty.
-+x
-+s/P/P/
-+x
-+ta
-+# Yes it was empty. Look if we have the expected variable definition.
-+/^[	 ]*VARIABLE[	 ]*=/{
-+  # Seen the first line of the variable definition.
-+  s/^[	 ]*VARIABLE[	 ]*=//
-+  ba
-+}
-+bd
-+:a
-+# Here we are processing a line from the variable definition.
-+# Remove comment, more precisely replace it with a space.
-+s/#.*$/ /
-+# See if the line ends in a backslash.
-+tb
-+:b
-+s/\\$//
-+# Print the line, without the trailing backslash.
-+p
-+tc
-+# There was no trailing backslash. The end of the variable definition is
-+# reached. Clear the hold space.
-+s/^.*$//
-+x
-+bd
-+:c
-+# A trailing backslash means that the variable definition continues in the
-+# next line. Put a nonempty string into the hold space to indicate this.
-+s/^.*$/P/
-+x
-+:d
-+'
-+changequote([,])dnl
-+
-+  # Set POTFILES to the value of the Makefile variable POTFILES.
-+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
-+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
-+  # Compute POTFILES_DEPS as
-+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
-+  POTFILES_DEPS=
-+  for file in $POTFILES; do
-+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
-+  done
-+  POMAKEFILEDEPS=""
-+
-+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
-+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-+  fi
-+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-+    # The LINGUAS file contains the set of available languages.
-+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
-+  else
-+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
-+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
-+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
-+  fi
-+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
-+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-+  # Compute POFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
-+  # Compute UPDATEPOFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
-+  # Compute DUMMYPOFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
-+  # Compute GMOFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
-+  # Compute PROPERTIESFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
-+  # Compute CLASSFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
-+  # Compute QMFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
-+  # Compute MSGFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
-+  # Compute RESOURCESDLLFILES
-+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
-+  case "$ac_given_srcdir" in
-+    .) srcdirpre= ;;
-+    *) srcdirpre='$(srcdir)/' ;;
-+  esac
-+  POFILES=
-+  UPDATEPOFILES=
-+  DUMMYPOFILES=
-+  GMOFILES=
-+  PROPERTIESFILES=
-+  CLASSFILES=
-+  QMFILES=
-+  MSGFILES=
-+  RESOURCESDLLFILES=
-+  for lang in $ALL_LINGUAS; do
-+    POFILES="$POFILES $srcdirpre$lang.po"
-+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
-+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
-+    QMFILES="$QMFILES $srcdirpre$lang.qm"
-+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
-+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
-+  done
-+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
-+  # environment variable.
-+  INST_LINGUAS=
-+  if test -n "$ALL_LINGUAS"; then
-+    for presentlang in $ALL_LINGUAS; do
-+      useit=no
-+      if test "%UNSET%" != "$LINGUAS"; then
-+        desiredlanguages="$LINGUAS"
-+      else
-+        desiredlanguages="$ALL_LINGUAS"
-+      fi
-+      for desiredlang in $desiredlanguages; do
-+        # Use the presentlang catalog if desiredlang is
-+        #   a. equal to presentlang, or
-+        #   b. a variant of presentlang (because in this case,
-+        #      presentlang can be used as a fallback for messages
-+        #      which are not translated in the desiredlang catalog).
-+        case "$desiredlang" in
-+          "$presentlang"*) useit=yes;;
-+        esac
-+      done
-+      if test $useit = yes; then
-+        INST_LINGUAS="$INST_LINGUAS $presentlang"
-+      fi
-+    done
-+  fi
-+  CATALOGS=
-+  JAVACATALOGS=
-+  QTCATALOGS=
-+  TCLCATALOGS=
-+  CSHARPCATALOGS=
-+  if test -n "$INST_LINGUAS"; then
-+    for lang in $INST_LINGUAS; do
-+      CATALOGS="$CATALOGS $lang.gmo"
-+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
-+      QTCATALOGS="$QTCATALOGS $lang.qm"
-+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
-+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
-+    done
-+  fi
-+
-+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
-+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
-+    # Add dependencies that cannot be formulated as a simple suffix rule.
-+    for lang in $ALL_LINGUAS; do
-+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
-+      cat >> "$ac_file.tmp" <<EOF
-+$frobbedlang.msg: $lang.po
-+	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
-+	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-+EOF
-+    done
-+  fi
-+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
-+    # Add dependencies that cannot be formulated as a simple suffix rule.
-+    for lang in $ALL_LINGUAS; do
-+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
-+      cat >> "$ac_file.tmp" <<EOF
-+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
-+	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
-+	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
-+EOF
-+    done
-+  fi
-+  if test -n "$POMAKEFILEDEPS"; then
-+    cat >> "$ac_file.tmp" <<EOF
-+Makefile: $POMAKEFILEDEPS
-+EOF
-+  fi
-+  mv "$ac_file.tmp" "$ac_file"
-+])
-+
-+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
-+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
-+[
-+  XGETTEXT_EXTRA_OPTIONS=
-+])
-+
-+dnl Registers an option to be passed to xgettext in the po subdirectory.
-+AC_DEFUN([AM_XGETTEXT_OPTION],
-+[
-+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
-+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
-+])
-diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4
-new file mode 100644
-index 0000000..1eacf95
---- /dev/null
-+++ b/m4/printf-posix.m4
-@@ -0,0 +1,45 @@
-+# printf-posix.m4 serial 5 (gettext-0.18)
-+dnl Copyright (C) 2003, 2007, 2009-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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 the printf() function supports POSIX/XSI format strings with
-+dnl positions.
-+
-+AC_DEFUN([gt_PRINTF_POSIX],
-+[
-+  AC_REQUIRE([AC_PROG_CC])
-+  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
-+    gt_cv_func_printf_posix,
-+    [
-+      AC_TRY_RUN([
-+#include <stdio.h>
-+#include <string.h>
-+/* The string "%2$d %1$d", with dollar characters protected from the shell's
-+   dollar expansion (possibly an autoconf bug).  */
-+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
-+static char buf[100];
-+int main ()
-+{
-+  sprintf (buf, format, 33, 55);
-+  return (strcmp (buf, "55 33") != 0);
-+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
-+      [
-+        AC_EGREP_CPP([notposix], [
-+#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
-+  notposix
-+#endif
-+          ],
-+          [gt_cv_func_printf_posix="guessing no"],
-+          [gt_cv_func_printf_posix="guessing yes"])
-+      ])
-+    ])
-+  case $gt_cv_func_printf_posix in
-+    *yes)
-+      AC_DEFINE([HAVE_POSIX_PRINTF], [1],
-+        [Define if your printf() function supports format strings with positions.])
-+      ;;
-+  esac
-+])
-diff --git a/m4/progtest.m4 b/m4/progtest.m4
-new file mode 100644
-index 0000000..2d804ac
---- /dev/null
-+++ b/m4/progtest.m4
-@@ -0,0 +1,92 @@
-+# progtest.m4 serial 6 (gettext-0.18)
-+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
-+
-+AC_PREREQ([2.50])
-+
-+# Search path for a program which passes the given test.
-+
-+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-+[
-+# Prepare PATH_SEPARATOR.
-+# The user is always right.
-+if test "${PATH_SEPARATOR+set}" != set; then
-+  echo "#! /bin/sh" >conf$$.sh
-+  echo  "exit 0"   >>conf$$.sh
-+  chmod +x conf$$.sh
-+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-+    PATH_SEPARATOR=';'
-+  else
-+    PATH_SEPARATOR=:
-+  fi
-+  rm -f conf$$.sh
-+fi
-+
-+# Find out how to test for executable files. Don't use a zero-byte file,
-+# as systems may use methods other than mode bits to determine executability.
-+cat >conf$$.file <<_ASEOF
-+#! /bin/sh
-+exit 0
-+_ASEOF
-+chmod +x conf$$.file
-+if test -x conf$$.file >/dev/null 2>&1; then
-+  ac_executable_p="test -x"
-+else
-+  ac_executable_p="test -f"
-+fi
-+rm -f conf$$.file
-+
-+# Extract the first word of "$2", so it can be a program name with args.
-+set dummy $2; ac_word=[$]2
-+AC_MSG_CHECKING([for $ac_word])
-+AC_CACHE_VAL([ac_cv_path_$1],
-+[case "[$]$1" in
-+  [[\\/]]* | ?:[[\\/]]*)
-+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
-+    ;;
-+  *)
-+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
-+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
-+      IFS="$ac_save_IFS"
-+      test -z "$ac_dir" && ac_dir=.
-+      for ac_exec_ext in '' $ac_executable_extensions; do
-+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
-+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
-+          if [$3]; then
-+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
-+            break 2
-+          fi
-+        fi
-+      done
-+    done
-+    IFS="$ac_save_IFS"
-+dnl If no 4th arg is given, leave the cache variable unset,
-+dnl so AC_PATH_PROGS will keep looking.
-+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-+])dnl
-+    ;;
-+esac])dnl
-+$1="$ac_cv_path_$1"
-+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
-+  AC_MSG_RESULT([$][$1])
-+else
-+  AC_MSG_RESULT([no])
-+fi
-+AC_SUBST([$1])dnl
-+])
-diff --git a/m4/size_max.m4 b/m4/size_max.m4
-new file mode 100644
-index 0000000..ce992db
---- /dev/null
-+++ b/m4/size_max.m4
-@@ -0,0 +1,75 @@
-+# size_max.m4 serial 9
-+dnl Copyright (C) 2003, 2005-2006, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([gl_SIZE_MAX],
-+[
-+  AC_CHECK_HEADERS([stdint.h])
-+  dnl First test whether the system already has SIZE_MAX.
-+  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
-+    gl_cv_size_max=
-+    AC_EGREP_CPP([Found it], [
-+#include <limits.h>
-+#if HAVE_STDINT_H
-+#include <stdint.h>
-+#endif
-+#ifdef SIZE_MAX
-+Found it
-+#endif
-+], [gl_cv_size_max=yes])
-+    if test -z "$gl_cv_size_max"; then
-+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
-+      dnl than the type 'unsigned long'. Try hard to find a definition that can
-+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
-+      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
-+        [#include <stddef.h>
-+#include <limits.h>], [size_t_bits_minus_1=])
-+      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
-+        [#include <stddef.h>], [fits_in_uint=])
-+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
-+        if test $fits_in_uint = 1; then
-+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
-+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
-+          AC_TRY_COMPILE([#include <stddef.h>
-+            extern size_t foo;
-+            extern unsigned long foo;
-+            ], [], [fits_in_uint=0])
-+        fi
-+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
-+        dnl works only with 'long' integers in the host environment, while we
-+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
-+        if test $fits_in_uint = 1; then
-+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
-+        else
-+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
-+        fi
-+      else
-+        dnl Shouldn't happen, but who knows...
-+        gl_cv_size_max='((size_t)~(size_t)0)'
-+      fi
-+    fi
-+  ])
-+  if test "$gl_cv_size_max" != yes; then
-+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
-+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
-+  fi
-+  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
-+  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
-+  dnl #define by AC_DEFINE_UNQUOTED.
-+  AH_VERBATIM([SIZE_MAX],
-+[/* Define as the maximum value of type 'size_t', if the system doesn't define
-+   it. */
-+#ifndef SIZE_MAX
-+# undef SIZE_MAX
-+#endif])
-+])
-+
-+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
-+dnl Remove this when we can assume autoconf >= 2.61.
-+m4_ifdef([AC_COMPUTE_INT], [], [
-+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
-+])
-diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
-new file mode 100644
-index 0000000..b8e3c6c
---- /dev/null
-+++ b/m4/stdint_h.m4
-@@ -0,0 +1,26 @@
-+# stdint_h.m4 serial 8
-+dnl Copyright (C) 1997-2004, 2006, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-+# doesn't clash with <sys/types.h>, and declares uintmax_t.
-+
-+AC_DEFUN([gl_AC_HEADER_STDINT_H],
-+[
-+  AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
-+  [AC_TRY_COMPILE(
-+    [#include <sys/types.h>
-+#include <stdint.h>],
-+    [uintmax_t i = (uintmax_t) -1; return !i;],
-+    [gl_cv_header_stdint_h=yes],
-+    [gl_cv_header_stdint_h=no])])
-+  if test $gl_cv_header_stdint_h = yes; then
-+    AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
-+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
-+       and declares uintmax_t. ])
-+  fi
-+])
-diff --git a/m4/threadlib.m4 b/m4/threadlib.m4
-new file mode 100644
-index 0000000..05cc4ff
---- /dev/null
-+++ b/m4/threadlib.m4
-@@ -0,0 +1,347 @@
-+# threadlib.m4 serial 5 (gettext-0.18)
-+dnl Copyright (C) 2005-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+
-+dnl gl_THREADLIB
-+dnl ------------
-+dnl Tests for a multithreading library to be used.
-+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
-+dnl USE_PTH_THREADS, USE_WIN32_THREADS
-+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
-+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
-+dnl libtool).
-+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
-+dnl programs that really need multithread functionality. The difference
-+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
-+dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
-+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
-+dnl multithread-safe programs.
-+
-+AC_DEFUN([gl_THREADLIB_EARLY],
-+[
-+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
-+])
-+
-+dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
-+
-+AC_DEFUN([gl_THREADLIB_EARLY_BODY],
-+[
-+  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
-+  dnl influences the result of the autoconf tests that test for *_unlocked
-+  dnl declarations, on AIX 5 at least. Therefore it must come early.
-+  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
-+  AC_BEFORE([$0], [gl_ARGP])dnl
-+
-+  AC_REQUIRE([AC_CANONICAL_HOST])
-+  dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
-+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
-+  dnl AC_GNU_SOURCE.
-+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
-+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
-+    [AC_REQUIRE([AC_GNU_SOURCE])])
-+  dnl Check for multithreading.
-+  m4_divert_text([DEFAULTS], [gl_use_threads_default=])
-+  AC_ARG_ENABLE([threads],
-+AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API])
-+AC_HELP_STRING([--disable-threads], [build without multithread safety]),
-+    [gl_use_threads=$enableval],
-+    [if test -n "$gl_use_threads_default"; then
-+       gl_use_threads="$gl_use_threads_default"
-+     else
-+changequote(,)dnl
-+       case "$host_os" in
-+         dnl Disable multithreading by default on OSF/1, because it interferes
-+         dnl with fork()/exec(): When msgexec is linked with -lpthread, its
-+         dnl child process gets an endless segmentation fault inside execvp().
-+         dnl Disable multithreading by default on Cygwin 1.5.x, because it has
-+         dnl bugs that lead to endless loops or crashes. See
-+         dnl <http://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
-+         osf*) gl_use_threads=no ;;
-+         cygwin*)
-+               case `uname -r` in
-+                 1.[0-5].*) gl_use_threads=no ;;
-+                 *)         gl_use_threads=yes ;;
-+               esac
-+               ;;
-+         *)    gl_use_threads=yes ;;
-+       esac
-+changequote([,])dnl
-+     fi
-+    ])
-+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-+    # For using <pthread.h>:
-+    case "$host_os" in
-+      osf*)
-+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
-+        # groks <pthread.h>. cc also understands the flag -pthread, but
-+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
-+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
-+        # causes the AC_TRY_LINK test below to succeed unexpectedly,
-+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
-+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
-+        ;;
-+    esac
-+    # Some systems optimize for single-threaded programs by default, and
-+    # need special flags to disable these optimizations. For example, the
-+    # definition of 'errno' in <errno.h>.
-+    case "$host_os" in
-+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
-+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
-+    esac
-+  fi
-+])
-+
-+dnl The guts of gl_THREADLIB. Needs to be expanded only once.
-+
-+AC_DEFUN([gl_THREADLIB_BODY],
-+[
-+  AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
-+  gl_threads_api=none
-+  LIBTHREAD=
-+  LTLIBTHREAD=
-+  LIBMULTITHREAD=
-+  LTLIBMULTITHREAD=
-+  if test "$gl_use_threads" != no; then
-+    dnl Check whether the compiler and linker support weak declarations.
-+    AC_CACHE_CHECK([whether imported symbols can be declared weak],
-+      [gl_cv_have_weak],
-+      [gl_cv_have_weak=no
-+       dnl First, test whether the compiler accepts it syntactically.
-+       AC_TRY_LINK([extern void xyzzy ();
-+#pragma weak xyzzy], [xyzzy();], [gl_cv_have_weak=maybe])
-+       if test $gl_cv_have_weak = maybe; then
-+         dnl Second, test whether it actually works. On Cygwin 1.7.2, with
-+         dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
-+         AC_TRY_RUN([
-+#include <stdio.h>
-+#pragma weak fputs
-+int main ()
-+{
-+  return (fputs == NULL);
-+}], [gl_cv_have_weak=yes], [gl_cv_have_weak=no],
-+           [dnl When cross-compiling, assume that only ELF platforms support
-+            dnl weak symbols.
-+            AC_EGREP_CPP([Extensible Linking Format],
-+              [#ifdef __ELF__
-+               Extensible Linking Format
-+               #endif
-+              ],
-+              [gl_cv_have_weak="guessing yes"],
-+              [gl_cv_have_weak="guessing no"])
-+           ])
-+       fi
-+      ])
-+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
-+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
-+      # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
-+      AC_CHECK_HEADER([pthread.h],
-+        [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
-+      if test "$gl_have_pthread_h" = yes; then
-+        # Other possible tests:
-+        #   -lpthreads (FSU threads, PCthreads)
-+        #   -lgthreads
-+        gl_have_pthread=
-+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
-+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
-+        # the second one only in libpthread, and lock.c needs it.
-+        AC_TRY_LINK([#include <pthread.h>],
-+          [pthread_mutex_lock((pthread_mutex_t*)0);
-+           pthread_mutexattr_init((pthread_mutexattr_t*)0);],
-+          [gl_have_pthread=yes])
-+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
-+        # since it is defined as a macro on OSF/1.)
-+        if test -n "$gl_have_pthread"; then
-+          # The program links fine without libpthread. But it may actually
-+          # need to link with libpthread in order to create multiple threads.
-+          AC_CHECK_LIB([pthread], [pthread_kill],
-+            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
-+             # On Solaris and HP-UX, most pthread functions exist also in libc.
-+             # Therefore pthread_in_use() needs to actually try to create a
-+             # thread: pthread_create from libc will fail, whereas
-+             # pthread_create will actually create a thread.
-+             case "$host_os" in
-+               solaris* | hpux*)
-+                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
-+                   [Define if the pthread_in_use() detection is hard.])
-+             esac
-+            ])
-+        else
-+          # Some library is needed. Try libpthread and libc_r.
-+          AC_CHECK_LIB([pthread], [pthread_kill],
-+            [gl_have_pthread=yes
-+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
-+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
-+          if test -z "$gl_have_pthread"; then
-+            # For FreeBSD 4.
-+            AC_CHECK_LIB([c_r], [pthread_kill],
-+              [gl_have_pthread=yes
-+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
-+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
-+          fi
-+        fi
-+        if test -n "$gl_have_pthread"; then
-+          gl_threads_api=posix
-+          AC_DEFINE([USE_POSIX_THREADS], [1],
-+            [Define if the POSIX multithreading library can be used.])
-+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
-+            if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-+              AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
-+                [Define if references to the POSIX multithreading library should be made weak.])
-+              LIBTHREAD=
-+              LTLIBTHREAD=
-+            fi
-+          fi
-+        fi
-+      fi
-+    fi
-+    if test -z "$gl_have_pthread"; then
-+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
-+        gl_have_solaristhread=
-+        gl_save_LIBS="$LIBS"
-+        LIBS="$LIBS -lthread"
-+        AC_TRY_LINK([#include <thread.h>
-+#include <synch.h>],
-+          [thr_self();],
-+          [gl_have_solaristhread=yes])
-+        LIBS="$gl_save_LIBS"
-+        if test -n "$gl_have_solaristhread"; then
-+          gl_threads_api=solaris
-+          LIBTHREAD=-lthread
-+          LTLIBTHREAD=-lthread
-+          LIBMULTITHREAD="$LIBTHREAD"
-+          LTLIBMULTITHREAD="$LTLIBTHREAD"
-+          AC_DEFINE([USE_SOLARIS_THREADS], [1],
-+            [Define if the old Solaris multithreading library can be used.])
-+          if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
-+            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1],
-+              [Define if references to the old Solaris multithreading library should be made weak.])
-+            LIBTHREAD=
-+            LTLIBTHREAD=
-+          fi
-+        fi
-+      fi
-+    fi
-+    if test "$gl_use_threads" = pth; then
-+      gl_save_CPPFLAGS="$CPPFLAGS"
-+      AC_LIB_LINKFLAGS([pth])
-+      gl_have_pth=
-+      gl_save_LIBS="$LIBS"
-+      LIBS="$LIBS -lpth"
-+      AC_TRY_LINK([#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_use_threads" = yes || test "$gl_use_threads" = win32; then
-+        if { case "$host_os" in
-+               mingw*) true;;
-+               *) false;;
-+             esac
-+           }; then
-+          gl_threads_api=win32
-+          AC_DEFINE([USE_WIN32_THREADS], [1],
-+            [Define if the Win32 multithreading API can be used.])
-+        fi
-+      fi
-+    fi
-+  fi
-+  AC_MSG_CHECKING([for multithread API to use])
-+  AC_MSG_RESULT([$gl_threads_api])
-+  AC_SUBST([LIBTHREAD])
-+  AC_SUBST([LTLIBTHREAD])
-+  AC_SUBST([LIBMULTITHREAD])
-+  AC_SUBST([LTLIBMULTITHREAD])
-+])
-+
-+AC_DEFUN([gl_THREADLIB],
-+[
-+  AC_REQUIRE([gl_THREADLIB_EARLY])
-+  AC_REQUIRE([gl_THREADLIB_BODY])
-+])
-+
-+
-+dnl gl_DISABLE_THREADS
-+dnl ------------------
-+dnl Sets the gl_THREADLIB default so that threads are not used by default.
-+dnl The user can still override it at installation time, by using the
-+dnl configure option '--enable-threads'.
-+
-+AC_DEFUN([gl_DISABLE_THREADS], [
-+  m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
-+])
-+
-+
-+dnl Survey of platforms:
-+dnl
-+dnl Platform          Available   Compiler    Supports   test-lock
-+dnl                   flavours    option      weak       result
-+dnl ---------------   ---------   ---------   --------   ---------
-+dnl Linux 2.4/glibc   posix       -lpthread       Y      OK
-+dnl
-+dnl GNU Hurd/glibc    posix
-+dnl
-+dnl FreeBSD 5.3       posix       -lc_r           Y
-+dnl                   posix       -lkse ?         Y
-+dnl                   posix       -lpthread ?     Y
-+dnl                   posix       -lthr           Y
-+dnl
-+dnl FreeBSD 5.2       posix       -lc_r           Y
-+dnl                   posix       -lkse           Y
-+dnl                   posix       -lthr           Y
-+dnl
-+dnl FreeBSD 4.0,4.10  posix       -lc_r           Y      OK
-+dnl
-+dnl NetBSD 1.6        --
-+dnl
-+dnl OpenBSD 3.4       posix       -lpthread       Y      OK
-+dnl
-+dnl MacOS X 10.[123]  posix       -lpthread       Y      OK
-+dnl
-+dnl Solaris 7,8,9     posix       -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
-+dnl                   solaris     -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
-+dnl
-+dnl HP-UX 11          posix       -lpthread       N (cc) OK
-+dnl                                               Y (gcc)
-+dnl
-+dnl IRIX 6.5          posix       -lpthread       Y      0.5
-+dnl
-+dnl AIX 4.3,5.1       posix       -lpthread       N      AIX 4: 0.5; AIX 5: OK
-+dnl
-+dnl OSF/1 4.0,5.1     posix       -pthread (cc)   N      OK
-+dnl                               -lpthread (gcc) Y
-+dnl
-+dnl Cygwin            posix       -lpthread       Y      OK
-+dnl
-+dnl Any of the above  pth         -lpth                  0.0
-+dnl
-+dnl Mingw             win32                       N      OK
-+dnl
-+dnl BeOS 5            --
-+dnl
-+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
-+dnl turned off:
-+dnl   OK if all three tests terminate OK,
-+dnl   0.5 if the first test terminates OK but the second one loops endlessly,
-+dnl   0.0 if the first test already loops endlessly.
-diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
-new file mode 100644
-index 0000000..03b51bc
---- /dev/null
-+++ b/m4/uintmax_t.m4
-@@ -0,0 +1,30 @@
-+# uintmax_t.m4 serial 12
-+dnl Copyright (C) 1997-2004, 2007-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Paul Eggert.
-+
-+AC_PREREQ([2.13])
-+
-+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-+# if it is not already defined in <stdint.h> or <inttypes.h>.
-+
-+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
-+[
-+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
-+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
-+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
-+    AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-+    test $ac_cv_type_unsigned_long_long_int = yes \
-+      && ac_type='unsigned long long' \
-+      || ac_type='unsigned long'
-+    AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
-+      [Define to unsigned long or unsigned long long
-+       if <stdint.h> and <inttypes.h> don't define.])
-+  else
-+    AC_DEFINE([HAVE_UINTMAX_T], [1],
-+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
-+  fi
-+])
-diff --git a/m4/visibility.m4 b/m4/visibility.m4
-new file mode 100644
-index 0000000..077c476
---- /dev/null
-+++ b/m4/visibility.m4
-@@ -0,0 +1,74 @@
-+# visibility.m4 serial 3 (gettext-0.18)
-+dnl Copyright (C) 2005, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free 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 Tests whether the compiler supports the command-line option
-+dnl -fvisibility=hidden and the function and variable attributes
-+dnl __attribute__((__visibility__("hidden"))) and
-+dnl __attribute__((__visibility__("default"))).
-+dnl Does *not* test for __visibility__("protected") - which has tricky
-+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
-+dnl MacOS X.
-+dnl Does *not* test for __visibility__("internal") - which has processor
-+dnl dependent semantics.
-+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
-+dnl "really only recommended for legacy code".
-+dnl Set the variable CFLAG_VISIBILITY.
-+dnl Defines and sets the variable HAVE_VISIBILITY.
-+
-+AC_DEFUN([gl_VISIBILITY],
-+[
-+  AC_REQUIRE([AC_PROG_CC])
-+  CFLAG_VISIBILITY=
-+  HAVE_VISIBILITY=0
-+  if test -n "$GCC"; then
-+    dnl First, check whether -Werror can be added to the command line, or
-+    dnl whether it leads to an error because of some other option that the
-+    dnl user has put into $CC $CFLAGS $CPPFLAGS.
-+    AC_MSG_CHECKING([whether the -Werror option is usable])
-+    AC_CACHE_VAL([gl_cv_cc_vis_werror], [
-+      gl_save_CFLAGS="$CFLAGS"
-+      CFLAGS="$CFLAGS -Werror"
-+      AC_TRY_COMPILE([], [],
-+        [gl_cv_cc_vis_werror=yes],
-+        [gl_cv_cc_vis_werror=no])
-+      CFLAGS="$gl_save_CFLAGS"])
-+    AC_MSG_RESULT([$gl_cv_cc_vis_werror])
-+    dnl Now check whether visibility declarations are supported.
-+    AC_MSG_CHECKING([for simple visibility declarations])
-+    AC_CACHE_VAL([gl_cv_cc_visibility], [
-+      gl_save_CFLAGS="$CFLAGS"
-+      CFLAGS="$CFLAGS -fvisibility=hidden"
-+      dnl We use the option -Werror and a function dummyfunc, because on some
-+      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
-+      dnl "visibility attribute not supported in this configuration; ignored"
-+      dnl at the first function definition in every compilation unit, and we
-+      dnl don't want to use the option in this case.
-+      if test $gl_cv_cc_vis_werror = yes; then
-+        CFLAGS="$CFLAGS -Werror"
-+      fi
-+      AC_TRY_COMPILE(
-+        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
-+         extern __attribute__((__visibility__("default"))) int exportedvar;
-+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
-+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);
-+         void dummyfunc (void) {}],
-+        [],
-+        [gl_cv_cc_visibility=yes],
-+        [gl_cv_cc_visibility=no])
-+      CFLAGS="$gl_save_CFLAGS"])
-+    AC_MSG_RESULT([$gl_cv_cc_visibility])
-+    if test $gl_cv_cc_visibility = yes; then
-+      CFLAG_VISIBILITY="-fvisibility=hidden"
-+      HAVE_VISIBILITY=1
-+    fi
-+  fi
-+  AC_SUBST([CFLAG_VISIBILITY])
-+  AC_SUBST([HAVE_VISIBILITY])
-+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
-+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
-+])
-diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
-new file mode 100644
-index 0000000..ed804e6
---- /dev/null
-+++ b/m4/wchar_t.m4
-@@ -0,0 +1,20 @@
-+# wchar_t.m4 serial 3 (gettext-0.18)
-+dnl Copyright (C) 2002-2003, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+dnl Test whether <stddef.h> has the 'wchar_t' type.
-+dnl Prerequisite: AC_PROG_CC
-+
-+AC_DEFUN([gt_TYPE_WCHAR_T],
-+[
-+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
-+    [AC_TRY_COMPILE([#include <stddef.h>
-+       wchar_t foo = (wchar_t)'\0';], ,
-+       [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])])
-+  if test $gt_cv_c_wchar_t = yes; then
-+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
-+  fi
-+])
-diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
-new file mode 100644
-index 0000000..a6c7d15
---- /dev/null
-+++ b/m4/wint_t.m4
-@@ -0,0 +1,28 @@
-+# wint_t.m4 serial 4 (gettext-0.18)
-+dnl Copyright (C) 2003, 2007-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+dnl From Bruno Haible.
-+dnl Test whether <wchar.h> has the 'wint_t' type.
-+dnl Prerequisite: AC_PROG_CC
-+
-+AC_DEFUN([gt_TYPE_WINT_T],
-+[
-+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
-+    [AC_TRY_COMPILE([
-+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-+   <wchar.h>.
-+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-+   before <wchar.h>.  */
-+#include <stddef.h>
-+#include <stdio.h>
-+#include <time.h>
-+#include <wchar.h>
-+       wint_t foo = (wchar_t)'\0';], ,
-+       [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])])
-+  if test $gt_cv_c_wint_t = yes; then
-+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
-+  fi
-+])
-diff --git a/m4/xsize.m4 b/m4/xsize.m4
-new file mode 100644
-index 0000000..b653693
---- /dev/null
-+++ b/m4/xsize.m4
-@@ -0,0 +1,13 @@
-+# xsize.m4 serial 4
-+dnl Copyright (C) 2003-2004, 2008-2010 Free Software Foundation, Inc.
-+dnl This file is free software; the Free Software Foundation
-+dnl gives unlimited permission to copy and/or distribute it,
-+dnl with or without modifications, as long as this notice is preserved.
-+
-+AC_DEFUN([gl_XSIZE],
-+[
-+  dnl Prerequisites of lib/xsize.h.
-+  AC_REQUIRE([gl_SIZE_MAX])
-+  AC_REQUIRE([AC_C_INLINE])
-+  AC_CHECK_HEADERS([stdint.h])
-+])
-diff --git a/po/Makefile.in.in b/po/Makefile.in.in
-new file mode 100644
-index 0000000..83d8838
---- /dev/null
-+++ b/po/Makefile.in.in
-@@ -0,0 +1,444 @@
-+# Makefile for PO directory in any package using GNU gettext.
-+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
-+#
-+# This file can be copied and used freely without restrictions.  It can
-+# be used in projects which are not available under the GNU General Public
-+# License but which still want to provide support for the GNU gettext
-+# functionality.
-+# Please note that the actual code of GNU gettext is covered by the GNU
-+# General Public License and is *not* in the public domain.
-+#
-+# Origin: gettext-0.18
-+GETTEXT_MACRO_VERSION = 0.18
-+
-+PACKAGE = @PACKAGE@
-+VERSION = @VERSION@
-+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-+
-+SHELL = /bin/sh
-+@SET_MAKE@
-+
-+srcdir = @srcdir@
-+top_srcdir = @top_srcdir@
-+VPATH = @srcdir@
-+
-+prefix = @prefix@
-+exec_prefix = @exec_prefix@
-+datarootdir = @datarootdir@
-+datadir = @datadir@
-+localedir = @localedir@
-+gettextsrcdir = $(datadir)/gettext/po
-+
-+INSTALL = @INSTALL@
-+INSTALL_DATA = @INSTALL_DATA@
-+
-+# We use $(mkdir_p).
-+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
-+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
-+# @install_sh@ does not start with $(SHELL), so we add it.
-+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
-+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
-+# versions, $(mkinstalldirs) and $(install_sh) are unused.
-+mkinstalldirs = $(SHELL) @install_sh@ -d
-+install_sh = $(SHELL) @install_sh@
-+MKDIR_P = @MKDIR_P@
-+mkdir_p = @mkdir_p@
-+
-+GMSGFMT_ = @GMSGFMT@
-+GMSGFMT_no = @GMSGFMT@
-+GMSGFMT_yes = @GMSGFMT_015@
-+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
-+MSGFMT_ = @MSGFMT@
-+MSGFMT_no = @MSGFMT@
-+MSGFMT_yes = @MSGFMT_015@
-+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
-+XGETTEXT_ = @XGETTEXT@
-+XGETTEXT_no = @XGETTEXT@
-+XGETTEXT_yes = @XGETTEXT_015@
-+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
-+MSGMERGE = msgmerge
-+MSGMERGE_UPDATE = @MSGMERGE@ --update
-+MSGINIT = msginit
-+MSGCONV = msgconv
-+MSGFILTER = msgfilter
-+
-+POFILES = @POFILES@
-+GMOFILES = @GMOFILES@
-+UPDATEPOFILES = @UPDATEPOFILES@
-+DUMMYPOFILES = @DUMMYPOFILES@
-+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
-+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
-+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
-+$(POFILES) $(GMOFILES) \
-+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
-+
-+POTFILES = \
-+
-+CATALOGS = @CATALOGS@
-+
-+# Makevars gets inserted here. (Don't remove this line!)
-+
-+.SUFFIXES:
-+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
-+
-+.po.mo:
-+	@echo "$(MSGFMT) -c -o $@ $<"; \
-+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
-+
-+.po.gmo:
-+	@lang=`echo $* | sed -e 's,.*/,,'`; \
-+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
-+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
-+
-+.sin.sed:
-+	sed -e '/^#/d' $< > t-$@
-+	mv t-$@ $@
-+
-+
-+all: check-macro-version 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
-+	test ! -f $(srcdir)/$(DOMAIN).pot || \
-+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
-+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
-+	  echo "touch stamp-po" && \
-+	  echo timestamp > stamp-poT && \
-+	  mv stamp-poT stamp-po; \
-+	}
-+
-+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
-+# otherwise packages like GCC can not be built if only parts of the source
-+# have been downloaded.
-+
-+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
-+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
-+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
-+	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
-+	  package_gnu='GNU '; \
-+	else \
-+	  package_gnu=''; \
-+	fi; \
-+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
-+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
-+	else \
-+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
-+	fi; \
-+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
-+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
-+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
-+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
-+	      --files-from=$(srcdir)/POTFILES.in \
-+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
-+	      --msgid-bugs-address="$$msgid_bugs_address" \
-+	    ;; \
-+	  *) \
-+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
-+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
-+	      --files-from=$(srcdir)/POTFILES.in \
-+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
-+	      --package-name="$${package_gnu}@PACKAGE@" \
-+	      --package-version='@VERSION@' \
-+	      --msgid-bugs-address="$$msgid_bugs_address" \
-+	    ;; \
-+	esac
-+	test ! -f $(DOMAIN).po || { \
-+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
-+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
-+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
-+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
-+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
-+	    else \
-+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
-+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
-+	    fi; \
-+	  else \
-+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
-+	  fi; \
-+	}
-+
-+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
-+# every "make" invocation, only create it when it is missing.
-+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
-+$(srcdir)/$(DOMAIN).pot:
-+	$(MAKE) $(DOMAIN).pot-update
-+
-+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
-+# Note that a PO file is not touched if it doesn't need to be changed.
-+$(POFILES): $(srcdir)/$(DOMAIN).pot
-+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
-+	if test -f "$(srcdir)/$${lang}.po"; then \
-+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
-+	  cd $(srcdir) \
-+	    && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
-+	           '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
-+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
-+	           *) \
-+	             $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
-+	         esac; \
-+	       }; \
-+	else \
-+	  $(MAKE) $${lang}.po-create; \
-+	fi
-+
-+
-+install: install-exec install-data
-+install-exec:
-+install-data: install-data-@USE_NLS@
-+	if test "$(PACKAGE)" = "gettext-tools"; then \
-+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
-+	  for file in $(DISTFILES.common) Makevars.template; do \
-+	    $(INSTALL_DATA) $(srcdir)/$$file \
-+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
-+	  done; \
-+	  for file in Makevars; do \
-+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
-+	  done; \
-+	else \
-+	  : ; \
-+	fi
-+install-data-no: all
-+install-data-yes: all
-+	@catalogs='$(CATALOGS)'; \
-+	for cat in $$catalogs; do \
-+	  cat=`basename $$cat`; \
-+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
-+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
-+	  $(mkdir_p) $(DESTDIR)$$dir; \
-+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
-+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
-+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
-+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
-+	    if test -n "$$lc"; then \
-+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
-+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
-+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
-+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
-+	         for file in *; do \
-+	           if test -f $$file; then \
-+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
-+	           fi; \
-+	         done); \
-+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
-+	      else \
-+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
-+	          :; \
-+	        else \
-+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	        fi; \
-+	      fi; \
-+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
-+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
-+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
-+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
-+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
-+	    fi; \
-+	  done; \
-+	done
-+
-+install-strip: install
-+
-+installdirs: installdirs-exec installdirs-data
-+installdirs-exec:
-+installdirs-data: installdirs-data-@USE_NLS@
-+	if test "$(PACKAGE)" = "gettext-tools"; then \
-+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
-+	else \
-+	  : ; \
-+	fi
-+installdirs-data-no:
-+installdirs-data-yes:
-+	@catalogs='$(CATALOGS)'; \
-+	for cat in $$catalogs; do \
-+	  cat=`basename $$cat`; \
-+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
-+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
-+	  $(mkdir_p) $(DESTDIR)$$dir; \
-+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
-+	    if test -n "$$lc"; then \
-+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
-+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
-+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
-+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
-+	         for file in *; do \
-+	           if test -f $$file; then \
-+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
-+	           fi; \
-+	         done); \
-+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
-+	      else \
-+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
-+	          :; \
-+	        else \
-+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
-+	        fi; \
-+	      fi; \
-+	    fi; \
-+	  done; \
-+	done
-+
-+# Define this as empty until I found a useful application.
-+installcheck:
-+
-+uninstall: uninstall-exec uninstall-data
-+uninstall-exec:
-+uninstall-data: uninstall-data-@USE_NLS@
-+	if test "$(PACKAGE)" = "gettext-tools"; then \
-+	  for file in $(DISTFILES.common) Makevars.template; do \
-+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
-+	  done; \
-+	else \
-+	  : ; \
-+	fi
-+uninstall-data-no:
-+uninstall-data-yes:
-+	catalogs='$(CATALOGS)'; \
-+	for cat in $$catalogs; do \
-+	  cat=`basename $$cat`; \
-+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
-+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
-+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
-+	  done; \
-+	done
-+
-+check: all
-+
-+info dvi ps pdf html tags TAGS ctags CTAGS ID:
-+
-+mostlyclean:
-+	rm -f remove-potcdate.sed
-+	rm -f stamp-poT
-+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
-+	rm -fr *.o
-+
-+clean: mostlyclean
-+
-+distclean: clean
-+	rm -f Makefile Makefile.in POTFILES *.mo
-+
-+maintainer-clean: distclean
-+	@echo "This command is intended for maintainers to use;"
-+	@echo "it deletes files that may require special tools to rebuild."
-+	rm -f stamp-po $(GMOFILES)
-+
-+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-+dist distdir:
-+	$(MAKE) update-po
-+	@$(MAKE) dist2
-+# This is a separate target because 'update-po' must be executed before.
-+dist2: stamp-po $(DISTFILES)
-+	dists="$(DISTFILES)"; \
-+	if test "$(PACKAGE)" = "gettext-tools"; then \
-+	  dists="$$dists Makevars.template"; \
-+	fi; \
-+	if test -f $(srcdir)/$(DOMAIN).pot; then \
-+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
-+	fi; \
-+	if test -f $(srcdir)/ChangeLog; then \
-+	  dists="$$dists ChangeLog"; \
-+	fi; \
-+	for i in 0 1 2 3 4 5 6 7 8 9; do \
-+	  if test -f $(srcdir)/ChangeLog.$$i; then \
-+	    dists="$$dists ChangeLog.$$i"; \
-+	  fi; \
-+	done; \
-+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
-+	for file in $$dists; do \
-+	  if test -f $$file; then \
-+	    cp -p $$file $(distdir) || exit 1; \
-+	  else \
-+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
-+	  fi; \
-+	done
-+
-+update-po: Makefile
-+	$(MAKE) $(DOMAIN).pot-update
-+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
-+	$(MAKE) update-gmo
-+
-+# General rule for creating PO files.
-+
-+.nop.po-create:
-+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
-+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
-+	exit 1
-+
-+# General rule for updating PO files.
-+
-+.nop.po-update:
-+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
-+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
-+	tmpdir=`pwd`; \
-+	echo "$$lang:"; \
-+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
-+	echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
-+	cd $(srcdir); \
-+	if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
-+	       '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
-+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
-+	       *) \
-+	         $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
-+	     esac; \
-+	   }; then \
-+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
-+	    rm -f $$tmpdir/$$lang.new.po; \
-+	  else \
-+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
-+	      :; \
-+	    else \
-+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
-+	      exit 1; \
-+	    fi; \
-+	  fi; \
-+	else \
-+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
-+	  rm -f $$tmpdir/$$lang.new.po; \
-+	fi
-+
-+$(DUMMYPOFILES):
-+
-+update-gmo: Makefile $(GMOFILES)
-+	@:
-+
-+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
-+# because execution permission bits may not work on the current file system.
-+# Use @SHELL@, which is the shell determined by autoconf for the use by its
-+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
-+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
-+	cd $(top_builddir) \
-+	  && @SHELL@ ./config.status $(subdir)/$@.in po-directories
-+
-+force:
-+
-+# Tell versions [3.59,3.63) of GNU make not to export all variables.
-+# Otherwise a system limit (for SysV at least) may be exceeded.
-+.NOEXPORT:
-diff --git a/po/Makevars.template b/po/Makevars.template
-new file mode 100644
-index 0000000..32692ab
---- /dev/null
-+++ b/po/Makevars.template
-@@ -0,0 +1,41 @@
-+# Makefile variables for PO directory in any package using GNU gettext.
-+
-+# Usually the message domain is the same as the package name.
-+DOMAIN = $(PACKAGE)
-+
-+# These two variables depend on the location of this directory.
-+subdir = po
-+top_builddir = ..
-+
-+# These options get passed to xgettext.
-+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
-+
-+# This is the copyright holder that gets inserted into the header of the
-+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
-+# package.  (Note that the msgstr strings, extracted from the package's
-+# sources, belong to the copyright holder of the package.)  Translators are
-+# expected to transfer the copyright for their translations to this person
-+# or entity, or to disclaim their copyright.  The empty string stands for
-+# the public domain; in this case the translators are expected to disclaim
-+# their copyright.
-+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
-+
-+# This is the email address or URL to which the translators shall report
-+# bugs in the untranslated strings:
-+# - Strings which are not entire sentences, see the maintainer guidelines
-+#   in the GNU gettext documentation, section 'Preparing Strings'.
-+# - Strings which use unclear terms or require additional context to be
-+#   understood.
-+# - Strings which make invalid assumptions about notation of date, time or
-+#   money.
-+# - Pluralisation problems.
-+# - Incorrect English spelling.
-+# - Incorrect formatting.
-+# It can be your email address, or a mailing list address where translators
-+# can write to without being subscribed, or the URL of a web page through
-+# which the translators can contact you.
-+MSGID_BUGS_ADDRESS =
-+
-+# This is the list of locale categories, beyond LC_MESSAGES, for which the
-+# message catalogs shall be used.  It is usually empty.
-+EXTRA_LOCALE_CATEGORIES =
-diff --git a/po/Rules-quot b/po/Rules-quot
-new file mode 100644
-index 0000000..af52487
---- /dev/null
-+++ b/po/Rules-quot
-@@ -0,0 +1,47 @@
-+# Special Makefile rules for English message catalogs with quotation marks.
-+
-+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
-+
-+.SUFFIXES: .insert-header .po-update-en
-+
-+en@quot.po-create:
-+	$(MAKE) en@quot.po-update
-+en@boldquot.po-create:
-+	$(MAKE) en@boldquot.po-update
-+
-+en@quot.po-update: en@quot.po-update-en
-+en@boldquot.po-update: en@boldquot.po-update-en
-+
-+.insert-header.po-update-en:
-+	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
-+	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
-+	tmpdir=`pwd`; \
-+	echo "$$lang:"; \
-+	ll=`echo $$lang | sed -e 's/@.*//'`; \
-+	LC_ALL=C; export LC_ALL; \
-+	cd $(srcdir); \
-+	if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
-+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
-+	    rm -f $$tmpdir/$$lang.new.po; \
-+	  else \
-+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
-+	      :; \
-+	    else \
-+	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
-+	      exit 1; \
-+	    fi; \
-+	  fi; \
-+	else \
-+	  echo "creation of $$lang.po failed!" 1>&2; \
-+	  rm -f $$tmpdir/$$lang.new.po; \
-+	fi
-+
-+en@quot.insert-header: insert-header.sin
-+	sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
-+
-+en@boldquot.insert-header: insert-header.sin
-+	sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
-+
-+mostlyclean: mostlyclean-quot
-+mostlyclean-quot:
-+	rm -f *.insert-header
-diff --git a/po/boldquot.sed b/po/boldquot.sed
-new file mode 100644
-index 0000000..4b937aa
---- /dev/null
-+++ b/po/boldquot.sed
-@@ -0,0 +1,10 @@
-+s/"\([^"]*\)"/“\1”/g
-+s/`\([^`']*\)'/‘\1’/g
-+s/ '\([^`']*\)' / ‘\1’ /g
-+s/ '\([^`']*\)'$/ ‘\1’/g
-+s/^'\([^`']*\)' /‘\1’ /g
-+s/“”/""/g
-+s/“/“[1m/g
-+s/”/[0m”/g
-+s/‘/‘[1m/g
-+s/’/[0m’/g
-diff --git a/po/en@boldquot.header b/po/en@boldquot.header
-new file mode 100644
-index 0000000..fedb6a0
---- /dev/null
-+++ b/po/en@boldquot.header
-@@ -0,0 +1,25 @@
-+# All this catalog "translates" are quotation characters.
-+# The msgids must be ASCII and therefore cannot contain real quotation
-+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
-+# and double quote (0x22). These substitutes look strange; see
-+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
-+#
-+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
-+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
-+# It also translates pairs of apostrophe (0x27) to
-+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
-+# and pairs of quotation mark (0x22) to
-+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
-+#
-+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
-+# When output to an ISO-8859-1 terminal, the single quotation marks are
-+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
-+# grave/acute accent (by libiconv), and the double quotation marks are
-+# transliterated to 0x22.
-+# When output to an ASCII terminal, the single quotation marks are
-+# transliterated to apostrophes, and the double quotation marks are
-+# transliterated to 0x22.
-+#
-+# This catalog furthermore displays the text between the quotation marks in
-+# bold face, assuming the VT100/XTerm escape sequences.
-+#
-diff --git a/po/en@quot.header b/po/en@quot.header
-new file mode 100644
-index 0000000..a9647fc
---- /dev/null
-+++ b/po/en@quot.header
-@@ -0,0 +1,22 @@
-+# All this catalog "translates" are quotation characters.
-+# The msgids must be ASCII and therefore cannot contain real quotation
-+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
-+# and double quote (0x22). These substitutes look strange; see
-+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
-+#
-+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
-+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
-+# It also translates pairs of apostrophe (0x27) to
-+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
-+# and pairs of quotation mark (0x22) to
-+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
-+#
-+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
-+# When output to an ISO-8859-1 terminal, the single quotation marks are
-+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
-+# grave/acute accent (by libiconv), and the double quotation marks are
-+# transliterated to 0x22.
-+# When output to an ASCII terminal, the single quotation marks are
-+# transliterated to apostrophes, and the double quotation marks are
-+# transliterated to 0x22.
-+#
-diff --git a/po/insert-header.sin b/po/insert-header.sin
-new file mode 100644
-index 0000000..b26de01
---- /dev/null
-+++ b/po/insert-header.sin
-@@ -0,0 +1,23 @@
-+# Sed script that inserts the file called HEADER before the header entry.
-+#
-+# At each occurrence of a line starting with "msgid ", we execute the following
-+# commands. At the first occurrence, insert the file. At the following
-+# occurrences, do nothing. The distinction between the first and the following
-+# occurrences is achieved by looking at the hold space.
-+/^msgid /{
-+x
-+# Test if the hold space is empty.
-+s/m/m/
-+ta
-+# Yes it was empty. First occurrence. Read the file.
-+r HEADER
-+# Output the file's contents by reading the next line. But don't lose the
-+# current line while doing this.
-+g
-+N
-+bb
-+:a
-+# The hold space was nonempty. Following occurrences. Do nothing.
-+x
-+:b
-+}
-diff --git a/po/quot.sed b/po/quot.sed
-new file mode 100644
-index 0000000..0122c46
---- /dev/null
-+++ b/po/quot.sed
-@@ -0,0 +1,6 @@
-+s/"\([^"]*\)"/“\1”/g
-+s/`\([^`']*\)'/‘\1’/g
-+s/ '\([^`']*\)' / ‘\1’ /g
-+s/ '\([^`']*\)'$/ ‘\1’/g
-+s/^'\([^`']*\)' /‘\1’ /g
-+s/“”/""/g
-diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
-new file mode 100644
-index 0000000..2436c49
---- /dev/null
-+++ b/po/remove-potcdate.sin
-@@ -0,0 +1,19 @@
-+# Sed script that remove the POT-Creation-Date line in the header entry
-+# from a POT file.
-+#
-+# The distinction between the first and the following occurrences of the
-+# pattern is achieved by looking at the hold space.
-+/^"POT-Creation-Date: .*"$/{
-+x
-+# Test if the hold space is empty.
-+s/P/P/
-+ta
-+# Yes it was empty. First occurrence. Remove the line.
-+g
-+d
-+bb
-+:a
-+# The hold space was nonempty. Following occurrences. Do nothing.
-+x
-+:b
-+}
--- 
-1.9.1
-
diff --git a/openpower/package/petitboot/petitboot.hash b/openpower/package/petitboot/petitboot.hash
new file mode 100644
index 0000000..f640952
--- /dev/null
+++ b/openpower/package/petitboot/petitboot.hash
@@ -0,0 +1 @@
+sha256 d54c760c6b71cdafc8458bd8315415862b19241316ac48a15480ea3313e713a4  petitboot-1.8.0.tar.gz
diff --git a/openpower/package/petitboot/petitboot.mk b/openpower/package/petitboot/petitboot.mk
index 38db0e4..db6eced 100644
--- a/openpower/package/petitboot/petitboot.mk
+++ b/openpower/package/petitboot/petitboot.mk
@@ -4,23 +4,19 @@
 #
 ################################################################################
 
-PETITBOOT_VERSION = v1.7.1
-PETITBOOT_SITE ?= $(call github,open-power,petitboot,$(PETITBOOT_VERSION))
+PETITBOOT_VERSION = 1.8.0
+PETITBOOT_SOURCE = petitboot-$(PETITBOOT_VERSION).tar.gz
+PETITBOOT_SITE ?= https://github.com/open-power/petitboot/releases/download/v$(PETITBOOT_VERSION)
 PETITBOOT_DEPENDENCIES = ncurses udev host-bison host-flex lvm2
 PETITBOOT_LICENSE = GPLv2
 PETITBOOT_LICENSE_FILES = COPYING
 
-PETITBOOT_AUTORECONF = YES
-PETITBOOT_AUTORECONF_OPTS = -i
-PETITBOOT_GETTEXTIZE = YES
 PETITBOOT_CONF_OPTS += --with-ncurses --without-twin-x11 --without-twin-fbdev \
 	      --localstatedir=/var \
 	      HOST_PROG_KEXEC=/usr/sbin/kexec \
 	      HOST_PROG_SHUTDOWN=/usr/libexec/petitboot/bb-kexec-reboot \
 	      $(if $(BR2_PACKAGE_BUSYBOX),--with-tftp=busybox --enable-busybox)
 
-PETITBOOT_AUTORECONF_ENV += PETITBOOT_VERSION=`cat $(PETITBOOT_VERSION_FILE) | cut -d '-' -f 2-`
-
 ifdef PETITBOOT_DEBUG
 PETITBOOT_CONF_OPTS += --enable-debug
 endif
@@ -36,8 +32,6 @@
 PETITBOOT_CONF_OPTS += --with-ncursesw MENU_LIB=-lmenuw FORM_LIB=-lformw
 endif
 
-PETITBOOT_PRE_CONFIGURE_HOOKS += PETITBOOT_PRE_CONFIGURE_BOOTSTRAP
-
 define PETITBOOT_POST_INSTALL
 	$(INSTALL) -D -m 0755 $(@D)/utils/bb-kexec-reboot \
 		$(TARGET_DIR)/usr/libexec/petitboot
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0001-Increase-default-watchdog-timeout-to-300-seconds.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0001-Increase-default-watchdog-timeout-to-300-seconds.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0001-Increase-default-watchdog-timeout-to-300-seconds.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0001-Increase-default-watchdog-timeout-to-300-seconds.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0002-Fix-POS-and-SPD-VPD_REC_NUM.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0002-Fix-POS-and-SPD-VPD_REC_NUM.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0002-Fix-POS-and-SPD-VPD_REC_NUM.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0002-Fix-POS-and-SPD-VPD_REC_NUM.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0003-Add-present-bits-info-based-on-pos.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0003-Add-present-bits-info-based-on-pos.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0003-Add-present-bits-info-based-on-pos.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0003-Add-present-bits-info-based-on-pos.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0004-Force-print-MCS-grouping-info-to-console.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0004-Force-print-MCS-grouping-info-to-console.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0004-Force-print-MCS-grouping-info-to-console.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0004-Force-print-MCS-grouping-info-to-console.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0005-Fill-empty-sensor-id-to-reserved-id-0xFF.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0005-Fill-empty-sensor-id-to-reserved-id-0xFF.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0005-Fill-empty-sensor-id-to-reserved-id-0xFF.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0005-Fill-empty-sensor-id-to-reserved-id-0xFF.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0006-Delay-for-Centaure-1.2V-ready-on-128-DIMM-system.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0006-Delay-for-Centaure-1.2V-ready-on-128-DIMM-system.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0006-Delay-for-Centaure-1.2V-ready-on-128-DIMM-system.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0006-Delay-for-Centaure-1.2V-ready-on-128-DIMM-system.patch
diff --git a/openpower/patches/vesnin-patches/hostboot/hostboot-0007-Set-IBM-instead-of-AMI-for-eSEL.patch b/openpower/patches/vesnin-patches/hostboot-p8/hostboot-0007-Set-IBM-instead-of-AMI-for-eSEL.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/hostboot/hostboot-0007-Set-IBM-instead-of-AMI-for-eSEL.patch
rename to openpower/patches/vesnin-patches/hostboot-p8/hostboot-0007-Set-IBM-instead-of-AMI-for-eSEL.patch
diff --git a/openpower/patches/vesnin-patches/occ/occ-0001-Add-DIMM-temperature-sensors.patch b/openpower/patches/vesnin-patches/occ-p8/occ-0001-Add-DIMM-temperature-sensors.patch
similarity index 100%
rename from openpower/patches/vesnin-patches/occ/occ-0001-Add-DIMM-temperature-sensors.patch
rename to openpower/patches/vesnin-patches/occ-p8/occ-0001-Add-DIMM-temperature-sensors.patch
