summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2012-04-25 03:06:27 +0000
committer <>2015-01-30 17:22:32 +0000
commit55d1d2c339bc5f935f6d8d702e98b7bd5d968e9d (patch)
tree50ef475ac4188cd7eb705e81ca6c2b8f4e0a7d6c
downloadautoconf-tarball-55d1d2c339bc5f935f6d8d702e98b7bd5d968e9d.tar.gz
Imported from /home/lorry/working-area/delta_autoconf-tarball/autoconf-2.69.tar.xz.HEADautoconf-2.69master
-rw-r--r--.prev-version1
-rw-r--r--.tarball-version1
-rw-r--r--.version1
-rw-r--r--AUTHORS127
-rw-r--r--BUGS37
-rw-r--r--COPYING339
-rw-r--r--COPYING.EXCEPTION43
-rw-r--r--COPYINGv3674
-rw-r--r--ChangeLog562
-rw-r--r--ChangeLog.0362
-rw-r--r--ChangeLog.11939
-rw-r--r--ChangeLog.212868
-rw-r--r--ChangeLog.323224
-rw-r--r--GNUmakefile127
-rw-r--r--INSTALL370
-rw-r--r--Makefile.am132
-rw-r--r--Makefile.in853
-rw-r--r--NEWS2114
-rw-r--r--README65
-rw-r--r--THANKS464
-rw-r--r--TODO601
-rw-r--r--aclocal.m4691
-rw-r--r--bin/Makefile.am103
-rw-r--r--bin/Makefile.in662
-rw-r--r--bin/autoconf.as191
-rw-r--r--bin/autoheader.in303
-rw-r--r--bin/autom4te.in1074
-rw-r--r--bin/autoreconf.in717
-rw-r--r--bin/autoscan.in678
-rw-r--r--bin/autoupdate.in1063
-rw-r--r--bin/ifnames.in153
-rwxr-xr-xbuild-aux/announce-gen542
-rwxr-xr-xbuild-aux/config.guess1530
-rwxr-xr-xbuild-aux/config.sub1779
-rwxr-xr-xbuild-aux/elisp-comp93
-rwxr-xr-xbuild-aux/gendocs.sh385
-rwxr-xr-xbuild-aux/git-version-gen220
-rwxr-xr-xbuild-aux/gitlog-to-changelog385
-rwxr-xr-xbuild-aux/gnupload416
-rwxr-xr-xbuild-aux/install-sh527
-rwxr-xr-xbuild-aux/mdate-sh224
-rwxr-xr-xbuild-aux/missing330
-rw-r--r--build-aux/texinfo.tex10011
-rw-r--r--cfg.mk141
-rwxr-xr-xconfigure4390
-rw-r--r--configure.ac241
-rw-r--r--doc/Makefile.am33
-rw-r--r--doc/Makefile.in665
-rw-r--r--doc/autoconf.info25690
-rw-r--r--doc/autoconf.texi26667
-rw-r--r--doc/fdl.texi505
-rw-r--r--doc/gendocs_template89
-rw-r--r--doc/gnu-oids.texi55
-rw-r--r--doc/install.texi437
-rw-r--r--doc/make-stds.texi1159
-rw-r--r--doc/stamp-vti4
-rw-r--r--doc/standards.info5780
-rw-r--r--doc/standards.texi4256
-rw-r--r--doc/version.texi4
-rw-r--r--lib/Autom4te/C4che.pm242
-rw-r--r--lib/Autom4te/ChannelDefs.pm390
-rw-r--r--lib/Autom4te/Channels.pm836
-rw-r--r--lib/Autom4te/Configure_ac.pm127
-rw-r--r--lib/Autom4te/FileUtils.pm452
-rw-r--r--lib/Autom4te/General.pm426
-rw-r--r--lib/Autom4te/Getopt.pm115
-rw-r--r--lib/Autom4te/Makefile.am37
-rw-r--r--lib/Autom4te/Makefile.in454
-rw-r--r--lib/Autom4te/Request.pm114
-rw-r--r--lib/Autom4te/XFile.pm319
-rw-r--r--lib/Makefile.am44
-rw-r--r--lib/Makefile.in622
-rw-r--r--lib/autoconf/Makefile.am54
-rw-r--r--lib/autoconf/Makefile.in606
-rw-r--r--lib/autoconf/autoconf.m4105
-rw-r--r--lib/autoconf/autoheader.m478
-rw-r--r--lib/autoconf/autoscan.m450
-rw-r--r--lib/autoconf/autotest.m477
-rw-r--r--lib/autoconf/autoupdate.m4108
-rw-r--r--lib/autoconf/c.m42031
-rw-r--r--lib/autoconf/erlang.m4320
-rw-r--r--lib/autoconf/fortran.m41862
-rw-r--r--lib/autoconf/functions.m42030
-rw-r--r--lib/autoconf/general.m43081
-rw-r--r--lib/autoconf/go.m4177
-rw-r--r--lib/autoconf/headers.m4895
-rw-r--r--lib/autoconf/lang.m4721
-rw-r--r--lib/autoconf/libs.m4478
-rw-r--r--lib/autoconf/oldnames.m492
-rw-r--r--lib/autoconf/programs.m4902
-rw-r--r--lib/autoconf/specific.m4481
-rw-r--r--lib/autoconf/status.m41782
-rw-r--r--lib/autoconf/types.m41077
-rw-r--r--lib/autom4te.in165
-rw-r--r--lib/autoscan/Makefile.am40
-rw-r--r--lib/autoscan/Makefile.in524
-rw-r--r--lib/autoscan/autoscan.pre16
-rw-r--r--lib/autotest/Makefile.am46
-rw-r--r--lib/autotest/Makefile.in599
-rw-r--r--lib/autotest/autotest.m426
-rw-r--r--lib/autotest/general.m42215
-rw-r--r--lib/autotest/specific.m474
-rw-r--r--lib/emacs/Makefile.am3
-rw-r--r--lib/emacs/Makefile.in420
-rw-r--r--lib/emacs/autoconf-mode.el100
-rw-r--r--lib/emacs/autotest-mode.el101
-rw-r--r--lib/freeze.mk132
-rw-r--r--lib/m4sugar/Makefile.am75
-rw-r--r--lib/m4sugar/Makefile.in622
-rw-r--r--lib/m4sugar/foreach.m4362
-rw-r--r--lib/m4sugar/m4sh.m42168
-rw-r--r--lib/m4sugar/m4sugar.m43301
-rw-r--r--m4/autobuild.m439
-rw-r--r--m4/m4.m482
-rw-r--r--m4/make-case.m429
-rw-r--r--maint.mk1541
-rw-r--r--man/Makefile.am68
-rw-r--r--man/Makefile.in478
-rw-r--r--man/autoconf.1113
-rw-r--r--man/autoconf.x2
-rw-r--r--man/autoheader.1108
-rw-r--r--man/autoheader.x2
-rw-r--r--man/autom4te.1192
-rw-r--r--man/autom4te.x2
-rw-r--r--man/autoreconf.1133
-rw-r--r--man/autoreconf.x2
-rw-r--r--man/autoscan.170
-rw-r--r--man/autoscan.x2
-rw-r--r--man/autoupdate.172
-rw-r--r--man/autoupdate.x2
-rw-r--r--man/common.x11
-rw-r--r--man/config.guess.162
-rw-r--r--man/config.guess.x24
-rw-r--r--man/config.sub.143
-rw-r--r--man/config.sub.x4
-rw-r--r--man/ifnames.157
-rw-r--r--man/ifnames.x2
-rw-r--r--tests/Makefile.am227
-rw-r--r--tests/Makefile.in643
-rw-r--r--tests/acautoheader.at0
-rw-r--r--tests/acautoupdate.at0
-rw-r--r--tests/acc.at34
-rw-r--r--tests/acfortran.at32
-rw-r--r--tests/acfunctions.at43
-rw-r--r--tests/acgeneral.at34
-rw-r--r--tests/acgo.at15
-rw-r--r--tests/acheaders.at26
-rw-r--r--tests/aclang.at16
-rw-r--r--tests/aclibs.at15
-rw-r--r--tests/acprograms.at27
-rw-r--r--tests/acspecific.at28
-rw-r--r--tests/acstatus.at15
-rw-r--r--tests/actypes.at42
-rw-r--r--tests/atlocal.in48
-rw-r--r--tests/autoscan.at47
-rw-r--r--tests/autotest.at1955
-rw-r--r--tests/base.at710
-rw-r--r--tests/c.at418
-rw-r--r--tests/compile.at465
-rw-r--r--tests/erlang.at134
-rw-r--r--tests/foreign.at140
-rw-r--r--tests/fortran.at1164
-rw-r--r--tests/go.at33
-rw-r--r--tests/local.at527
-rw-r--r--tests/m4sh.at1957
-rw-r--r--tests/m4sugar.at2140
-rwxr-xr-xtests/mktests.sh236
-rw-r--r--tests/mktests.stamp0
-rw-r--r--tests/semantics.at746
-rw-r--r--tests/statesave.m443
-rw-r--r--tests/suite.at79
-rw-r--r--tests/tools.at1337
-rw-r--r--tests/torture.at1835
-rw-r--r--tests/wrapper.as41
174 files changed, 187663 insertions, 0 deletions
diff --git a/.prev-version b/.prev-version
new file mode 100644
index 0000000..292b239
--- /dev/null
+++ b/.prev-version
@@ -0,0 +1 @@
+2.68b
diff --git a/.tarball-version b/.tarball-version
new file mode 100644
index 0000000..5e1b8b0
--- /dev/null
+++ b/.tarball-version
@@ -0,0 +1 @@
+2.69
diff --git a/.version b/.version
new file mode 100644
index 0000000..292b239
--- /dev/null
+++ b/.version
@@ -0,0 +1 @@
+2.68b
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..79e939a
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,127 @@
+Authors of GNU Autoconf.
+
+Autoconf was originally written by David MacKenzie, with help from
+François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, Roland
+McGrath, Noah Friedman, david d zuhn, and many others.
+
+Ben Elliston next took over the maintenance, facing a huge Autoconf
+backlog that had been piling up since the departure of David. Other
+maintainers have included Akim Demaille, Jim Meyering, Alexandre
+Oliva, and Tom Tromey, with plenty of contributions from Lars J. Aas,
+Mo DeJong, Steven G. Johnson, Matthew D. Langston, Pavel Roskin.
+
+Today, the primary maintainers are Paul Eggert and Eric Blake, with
+help from Ralf Wildenhues, Stepan Kasal, and Benoit Sigoure. Many
+other people have contributed, as listed in the THANKS file.
+
+The following contributors have warranted legal paper exchanges with
+the Free Software Foundation for their contributions to GNU Autoconf.
+This list results from searching for AUTOCONF in the file
+/gd/gnuorg/copyright.list on the fencepost.gnu.org machine.
+
+David J. MacKenzie djm@gnu.org 1991-07-09
+James L. Avera ? 1993-10-04
+Roland McGrath roland@gnu.org 1994-06-24
+Noah Friedman friedman@gnu.org 1994-07-15
+Francois Pinard pinard@iro.umontreal.ca 1997-02-02
+Thomas E. Dickey dickey@clark.net 1998-01-11
+Matthew D. Langston langston@slac.stanford.edu 1998-09-29
+Mark Elbrecht snowball3@usa.net 1999-01-11
+Akim Demaille akim@gnu.org 1999-02-02
+Pavel Roskin pavel_roskin@geocities.com 1999-02-24
+Alexandre Oliva oliva@dcc.unicamp.br 1999-03-26
+Thomas Tanner tanner@ffii.org 1999-06-23
+Gary V. Vaughan gary@gnu.org 2000-01-10
+Joseph Samuel Myers jsm28@cam.ac.uk 2000-03-13
+Lars J. Aas larsa@sim.no 2000-07-07
+Morten Eriksen mortene@sim.no 2000-07-07
+Martin Wilck martin@tropos.de 2000-07-12
+Paul Eggert eggert@twinsun.com 2000-10-13
+Alexandre Duret-Lutz duret_g@epita.fr 2001-02-12
+Tim Van Holder tim.van.holder@pandora.be 2001-02-13
+Christian Marquardt marq@gfz-potsdam.de 2001-02-19
+Derek R. Price dprice@collab.net 2001-03-12
+Markus Kuhn Markus.Kuhn@cl.cam.ac.uk 2001-07-07
+Erik Lindahl erik@theophys.kth.se 2001-08-22
+Hans-Peter Nilsson hp@bitrange.com 2001-10-24
+Paul Wagland paul@wagland.net 2001-10-30
+Paolo Bonzini bonzini@gnu.org 2001-11-08
+Nishio Futoshi fut_nis@d3.dion.ne.jp 2002-01-23
+Federico G. Schwindt fgsch@openbsd.org 2002-05-21
+Mark D. Roth roth@feep.net 2002-05-28
+Greg McGary greg@mcgary.org 2002-06-05
+Charles Stephen Wilson cwilson@ece.gatech.edu 2002-07-25
+Robert Bernstein rocky@panix.com 2002-08-20
+Assar Westerlund assar@kth.se 2002-09-13
+Scott Bambrough sbambrough@storm.ca 2002-09-24
+Richard Dawe rich@phekda.freeserve.co.uk 2003-01-23
+Andreas Buening andreas.buening@nexgo.de 2003-02-18
+Raja R. Harinath harinath@acm.org 2003-02-25
+Ilya Zakharevich ilya@Math.Berkeley.EDU 2003-03-11
+Kaveh Ghazi ghazi@caip.rutgers.edu 2003-03-15
+Felix Lee felix.1@canids.net 2003-03-31
+Nathanael Nerode neroden@twcny.rr.com 2003-04-04
+Gavin Puche user42@zip.com.au 2003-04-10
+Steven Glenn Johnson stevenj@alum.mit.edu 2003-07-26
+Bernardo Innocenti bernie@codewiz.org 2003-07-31
+Albert Marsden Chin-A-Young china@thewrittenword.com 2003-08-02
+Ralf Corsepius corsepiu@faw.uni-ulm.de 2003-09-03
+Scott Remnant scott@netsplit.com 2003-10-04
+Daniel Jacobowitz dan@debian.org 2003-10-17
+Kevin Fleming kpfleming@backtobasicsmgmt.com 2003-11-17
+John David Anglin dave.anglin@nrc-cnrc.gc.ca 2004-01-21
+Eric Sunshine sunshine@sunshineco.com 2004-01-25
+Ralf Wildenhues Ralf.Wildenhues@gmx.de 2004-02-12
+Noah Jeffrey Misch noah@cs.caltech.edu 2004-07-05
+Thorsten Glaser tg@66h.42h.de 2004-10-11
+Peter O'Gorman peter@pogma.com 2004-11-14
+Toshio Ernie Kuratomi toshio@tiki-lounge.com 2004-11-17
+Roger Leigh rleigh@whinlatter.ukfsn.org 2004-12-09
+Ian Lance Taylor ian@airs.com 2004-12-22
+Daniel Manthey dan_manthey@partech.com 2005-02-14
+Gregorio Guidi greg_g@gentoo.org 2005-03-03
+Bruno Haible bruno@clisp.org 2005-06-12
+Toby Oliver Hilary White tow21@cam.ac.uk 2005-10-18
+Eric Benjamin Blake ebb9@byu.net 2006-01-18
+Romain Lenglet romain.lenglet@laposte.net 2006-02-10
+Markus Duft markus.duft@salomon.at 2006-08-03
+Robert Schiele rschiele@gmail.com 2006-09-12
+Joel Edward Denny jdenny@clemson.edu 2006-09-15
+Helge Deller deller@gmx.de 2007-02-01
+Benoit Sigoure tsuna@lrde.epita.fr 2007-04-20
+Bob Proulx bob@proulx.com 2007-06-25
+Bruce Korb bkorb@gnu.org 2008-05-06
+Benjamin Pfaff blp@gnu.org 2008-09-29
+Peter Breitenlohner peb@mppmu.mpg.de 2009-08-18
+Stefano Lattarini stefano.lattarini@gmail.com 2009-10-01
+Reuben Thomas rrt@sc3d.org 2010-03-10
+Peter Rosin peda@lysator.liu.se 2010-07-21
+John W. Eaton jwe@gnu.org 2010-11-05
+Christopher Hulbert cchgroupmail@gmail.com 2010-11-09
+Tim Rice tim@multitalents.net 2011-01-24
+KO Myun-Hun komh78@gmail.com 2011-04-05
+Christian Roessel christian.roessel@gmx.de 2011-08-26
+Nicolai Stange nicolai.stange@zmaw.de 2011-10-13
+
+========================================================================
+
+Local Variables:
+mode: text
+coding: utf-8
+End:
+
+Copyright (C) 1996, 2000-2001, 2005, 2007-2012 Free Software Foundation,
+Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/BUGS b/BUGS
new file mode 100644
index 0000000..175bed8
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,37 @@
+-*- outline -*-
+
+This file lists the bugs you must be aware of. Be sure to check this
+file before using Autoconf, and especially git versions of Autoconf.
+
+ Copyright (C) 2000-2002, 2006-2012 Free Software Foundation,
+ Inc.
+
+ Copying and distribution of this file, with or without
+ modification, are permitted in any medium without royalty provided
+ the copyright notice and this notice are preserved. This file is
+ offered as-is, without warranty of any kind.
+
+Autoconf must not be used in production if there are ``Serious'' bugs,
+and use with caution an Autoconf with ``Important bugs''.
+
+* Status
+
+ /*------------------------------------.
+ | New features need further testing. |
+ `------------------------------------*/
+
+* Now that configure depends on shell functions, it is possible that
+ configure scripts may fail to run on old platforms that lack a shell
+ with proper function support.
+
+* Autotest parallel testsuite support is still a work in progress.
+ There are known issues in job handling under dash and some ksh
+ variants, where a parallel testsuite can hang or cause a 100%
+ processor load. In the current release, the overall autoconf
+ testsuite only exercises parallel autotest under bash and zsh, or if
+ you have defined TEST_PARALLEL_AUTOTEST in the environment.
+ Meanwhile, Cygwin has known problems with named fifos that cause
+ failures when attempting parallel tests in an autotest suite. It is
+ possible that other difficulties will be encountered, whether with
+ shell or platform limitations; help is appreciated in improving
+ parallel testsuite support.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..d511905
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/COPYING.EXCEPTION b/COPYING.EXCEPTION
new file mode 100644
index 0000000..4695835
--- /dev/null
+++ b/COPYING.EXCEPTION
@@ -0,0 +1,43 @@
+ AUTOCONF CONFIGURE SCRIPT EXCEPTION
+ Version 3.0, 18 August 2009
+
+ Copyright (C) 2009 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+This Exception is an additional permission under section 7 of the GNU
+General Public License, version 3 ("GPLv3"). It applies to a given
+file that bears a notice placed by the copyright holder of the file
+stating that the file is governed by GPLv3 along with this Exception.
+
+The purpose of this Exception is to allow distribution of Autoconf's
+typical output under terms of the recipient's choice (including
+proprietary).
+
+0. Definitions
+
+"Covered Code" is the source or object code of a version of Autoconf
+that is a covered work under this License.
+
+"Normally Copied Code" for a version of Autoconf means all parts of
+its Covered Code which that version can copy from its code (i.e., not
+from its input file) into its minimally verbose, non-debugging and
+non-tracing output.
+
+"Ineligible Code" is Covered Code that is not Normally Copied Code.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate output of Autoconf, even if such
+propagation would otherwise violate the terms of GPLv3. However, if
+by modifying Autoconf you cause any Ineligible Code of the version you
+received to become Normally Copied Code of your modified version, then
+you void this Exception for the resulting covered work. If you convey
+that resulting covered work, you must remove this Exception in accordance
+with the second paragraph of Section 7 of GPLv3.
+
+2. No Weakening of Autoconf Copyleft.
+
+The availability of this Exception does not imply any general presumption
+that third-party software is unaffected by the copyleft requirements of
+the license of Autoconf.
diff --git a/COPYINGv3 b/COPYINGv3
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYINGv3
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..3fed19c
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,562 @@
+2012-04-24 Eric Blake <eblake@redhat.com>
+
+ Release Version 2.69.
+ * NEWS: Mention the release.
+
+2012-04-24 Eric Blake <eblake@redhat.com>
+
+ maint: drop bz2 tarball
+ At 2.68b, I asked whether anyone would miss .gz and .bz2 formats.
+ Consensus was overwhelming that .gz still holds a place in people's
+ hearts, in spite of .xz compressing to smaller files, but no one
+ was able to make a convincing argument for .bz2.
+
+ * configure.ac (AM_INIT_AUTOMAKE): Drop bzip2; xz wins hands down.
+
+2012-04-24 Eric Blake <eblake@redhat.com>
+
+ maint: resync files from upstream
+ The files in lib/Autom4te/ are intentionally not synced at this
+ point, since this recent Automake patch:
+ https://lists.gnu.org/archive/html/automake-patches/2012-03/msg00111.html
+
+ was buggy regarding '-' as stdout, and also exposes some latent
+ bugs in autoconf where we use raw 'open' instead of XFile::open.
+
+ * build-aux/announce-gen: Resync via 'make fetch'.
+ * build-aux/config.sub: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/move-if-change: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/standards.texi: Likewise.
+ * maint.mk: Likewise.
+
+2012-04-24 Eric Blake <eblake@redhat.com>
+
+ doc: fix bad @xref uses
+ Upstream gnulib maint.mk improvements caught a few issues we
+ should fix, as well as a few issues in files we copy from
+ other sources that we will just ignore here.
+
+ * doc/autoconf.texi (Generic Programs, Special Shell Variables)
+ (Limitations of Builtins): Use references correctly.
+ * cfg.mk
+ (exclude_file_name_regexp--sc_prohibit_undesirable_word_seq)
+ (exclude_file_name_regexp--sc_useless_cpp_parens): Add exemptions.
+
+2012-04-24 Bruno Haible <bruno@clisp.org>
+
+ AC_INIT: remove a transitional warning
+ On bi-arch systems (such as x86 / x86_64) it is often necessary to pass
+ the --host option together with an appropriate value for CC. But this
+ triggers a warning:
+
+ $ ./configure --host=i686-pc-linux-gnu CC="gcc -m32 -march=i586"
+ configure: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used
+ ..
+
+ This warning was introduced on 2000-06-30, in commit
+ <http://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=cb2e761b8e1181f97e8e09d85526bd22078433db>
+ with the remark "Re-enable the old behavior of --host and --build."
+
+ This warning was meant to warn users about a changed semantics of
+ --build and --host. This change is now 12 years in the past; users
+ have had enough time to learn it. I therefore suggest to remove the
+ warning.
+
+ I've done lots of cross and bi-arch compilations in the last 10 years,
+ all with --host and without --build, and have never observed a problem
+ with it, except for the warning. Simply relying on config.guess is sufficient.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Don't warn if --host
+ given without --build.
+
+2012-04-24 Bruno Haible <bruno@clisp.org>
+
+ doc: fix incorrect and incomplete doc about cross-compilation mode
+ * doc/autoconf.texi (Runtime): Mention the effect of the cross-
+ compilation mode on AC_RUN_IFELSE.
+ (Specifying Target Triplets): Fix description of --host's effects.
+ (Hosts and Cross-Compilation): Remove incorrect statement about
+ --host's effects.
+
+2012-04-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ doc: document --build and cross-compilation better
+ * doc/autoconf.texi (Specifying Target Triplets): Mention that
+ specifying a build-type that differs from host-type enables
+ cross-compilation. Problem reported by Bruno Haible in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2012-04/msg00009.html
+
+2012-04-11 Jim Meyering <meyering@redhat.com>
+
+ maint: avoid "make syntax-check" failure
+ * cfg.mk (old_NEWS_hash): Update to reflect typo fix in old news.
+
+2012-03-28 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics fix imprecise comment in Autom4te::General
+ * lib/Autom4te/General.pm: This file is *not* used by Automake;
+ adjust comments accordingly.
+
+2012-03-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: fix port of AT_CHECK_ENV to hosts with flaky grep
+ * tests/local.at (AT_CHECK_ENV): Don't copy the buggy grep's
+ diagnostics to stderr, as that causes AT_CHECK to fail. They can
+ be found in the stderr-* files if this is needed for debugging.
+
+2012-03-07 Eric Blake <eblake@redhat.com>
+
+ docs: document set -n pitfalls
+ * doc/autoconf.texi (Limitations of Builtins) <set>: Document
+ issues with set -n.
+
+2012-03-07 Eric Blake <eblake@redhat.com>
+
+ build: require perl 5.6
+ This reduces the implicit requirement from 5.6.2 back to 5.6,
+ while raising the explicit requirement to match the actual code.
+
+ * configure.ac (PERL): Fail up front if perl is too old.
+ * NEWS: Document this.
+ * README: Likewise.
+ * README-hacking: Likewise.
+ * lib/Autom4te/ChannelDefs.pm: Bump requirement.
+ * lib/Autom4te/General.pm: Relax requirement.
+
+2012-03-07 Eric Blake <eblake@redhat.com>
+
+ tests: ignore ksh -n warnings
+ Recent ksh is noisy:
+
+ $ ksh -nc '``'; echo $?
+ ksh: warning: line 1: `...` obsolete, use $(...)
+ 0
+
+ * tests/local.at (AT_CHECK_SHELL_SYNTAX): Ignore noisy ksh on.
+ Reported by Martin Zaun.
+
+2012-03-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ tests: port AT_CHECK_ENV to hosts with flaky grep
+ * tests/local.at (AT_CHECK_ENV): Don't assume that if one grep
+ fails, the other will too. It could be that 'grep' is flaky,
+ and fails somewhat at random. This would explain the problems
+ reported for autoconf-2.68b on FreeBSD and MacOS X, for example:
+ <http://lists.gnu.org/archive/html/bug-autoconf/2012-03/msg00032.html>
+ <http://lists.gnu.org/archive/html/bug-autoconf/2012-03/msg00035.html>
+ <http://lists.gnu.org/archive/html/bug-autoconf/2012-03/msg00036.html>
+ <http://lists.gnu.org/archive/html/bug-autoconf/2012-03/msg00044.html>
+
+2012-03-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: resync files from upstream
+ Since the perl version required in Automake::Getopt has been
+ recently lowered from 5.6.2 to 5.6.0, this change has the nice
+ effect of making autoconf compatible again with all perls in
+ the 5.6.x release series.
+
+ * maint.mk: Resync via 'make fetch'.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/Getopt.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+2012-03-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: drop syncing with Automake::Struct
+ The module Automake::Struct has been removed in automake master
+ branch (with yesterday's commit v1.11-2055-g74a7f49 "maint: drop
+ 'Automake::Struct' module"): since Automake now requires Perl 5.6,
+ that module has become obsolete, being basically just a backport
+ of Perl 5.6's 'Class::Struct' to Perl 5.5. With this change, we
+ follow suite in Autoconf, which syncs some of its internal modules
+ with Automake.
+
+ * lib/Autom4te/Struct.pm: Delete.
+ * lib/Autom4te/Makefile.am (dist_perllib_DATA): Don't list it
+ anymore.
+ * cfg.mk: Don't sync it with the Automake repository anymore.
+ * lib/Autom4te/Request.pm: Use 'Class::Struct' instead of
+ 'Autom4te::Struct'.
+
+2012-03-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ doc: mention PATH bug with "ksh foo"
+ * doc/autoconf.texi (Invoking the Shell): Mention ksh PATH bug.
+
+2012-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure due to Solaris XPG4 sh bug
+ On Solaris 10, the /usr/xpg4/bin/sh shell seems unable to execute
+ a shell script named 'script':
+
+ $ touch script
+ $ /bin/sh script; echo status: $? # As expected.
+ status: 0
+ $ /usr/xpg4/bin/sh script; echo status: $? # Weirdness follows.
+ /usr/xpg4/bin/sh: script: cannot execute
+ status: 1
+
+ This was causing a spurious testsuite failure for users which have
+ /usr/xpg4/bin in $PATH before /bin and /usr/bin. Fix that.
+
+ * tests/m4sh.at (Configure re-execs self with CONFIG_SHELL): Rename
+ the m4sh-produced script to 'script2', to avoid the just-described
+ issue.
+
+2012-03-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: fix spurious failure when CONFIG_SITE is set
+ * tests/m4sh.at (Configure re-execs self with CONFIG_SHELL): Export
+ $CONFIG_SITE to "/dev/null", to avoid spurious diffs in expected
+ stdout/stderr.
+
+2012-03-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ fortran: clean up core files after AC_FC_CHECK_BOUNDS
+ * lib/autoconf/fortran.m4 (AC_FC_CHECK_BOUNDS): Clean up core
+ files, too. Needed for Sun Fortran 95 8.2 2005/10/13 on Solaris 8.
+
+ tests: port AS_TR_SH and AS_TR_CPP test to Solaris 8 wc
+ * tests/m4sh.at (AS@&t@_TR_SH and AS@&t@_TR_CPP): Do not assume
+ that "wc -l" outputs only digits; on Solaris 8 it also outputs
+ blanks and POSIX allows this.
+
+ tests: fix "#/bin/sh" typo
+ * tests/m4sh.at (AS@&t@_EXECUTABLE): "#!/bin/sh", not "#/bin/sh".
+ Typo reported by Tim Rice in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2012-03/msg00009.html
+
+ tests: port AS_EXECUTABLE_P test to Solaris 8 /bin/sh
+ * tests/m4sh.at (AS@&t@_EXECUTABLE): Treat any nonzero exit
+ status as failure. This is needed for Solaris 8 /bin/sh,
+ where executing a nonexecutable file causes the shell
+ to say the file had exit status 1.
+
+2012-03-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: don't infloop when re-executing with $CONFIG_SHELL
+ It turns out our guard against infinite recursion wasn't good
+ enough when shells without $LINENO support were involved, since
+ the creation-and-sourcing of configure.lineno broke the guard's
+ expectations. Reports by Tim Rice and Paul Eggert.
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Export '_as_can_reexec'
+ to "no" before sourcing the just-created configure.lineno.
+
+2012-03-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ maint: spelling fixes
+
+2012-03-01 Eric Blake <eblake@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+2012-03-01 Eric Blake <eblake@redhat.com>
+
+ Release Version 2.68b.
+ It's been more than a year since 2.68; time for a beta release
+ to shake out any last minute bugs, before a release of 2.69
+ in the near future.
+
+ * NEWS: Mention the release.
+ * HACKING: Update some instructions.
+
+2012-03-01 Eric Blake <eblake@redhat.com>
+
+ maint: resync files from upstream
+ * GNUmakefile: Resync via 'make fetch'.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/update-copyright: Likewise.
+ * doc/standards.texi: Likewise.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/Getopt.pm: Likewise.
+ * lib/Autom4te/Struct.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+ * maint.mk: Likewise.
+
+2012-02-25 Eric Blake <eblake@redhat.com>
+
+ tests: add test for AS_EXECUTABLE_P
+ Now that this is public, we should regression test it.
+
+ * tests/m4sh.at (AS@&t@_EXECUTABLE): New test.
+
+2012-02-24 Eric Blake <eblake@redhat.com>
+
+ m4sh: make AS_EXECUTABLE_P public
+ In the process of making it public, factor it into a reusable
+ function. This makes constructs like AC_CHECK_PROGRAM smaller,
+ as well as making libtool's naughty use of $as_executable_p safer.
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Add a shell function.
+ (AS_EXECUTABLE_P): Forward to shell function.
+ * doc/autoconf.texi (Common Shell Constructs): Document it.
+ * NEWS: Mention this.
+
+2012-02-24 Eric Blake <eblake@redhat.com>
+
+ m4sh: require that 'test -x' works
+ 4.3BSD is no longer a reasonable portability target; and we are
+ pretty sure that these days we can find at least one shell on any
+ platform that supports 'test -x'. Drop a horribly unsafe use of
+ eval as a result. :)
+
+ Libtool still uses $as_executable_p without so much as calling
+ either AS_TEST_X or AS_EXECUTABLE_P; even though the latter has
+ existed, although undocumented, since at least 2.59; furthermore,
+ libtool uses it in a context where filtering out directories
+ would have been desirable. Shame on them.
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_X_WORKS): New probe.
+ (AS_SHELL_SANITIZE, AS_INIT): Use it in shell searching.
+ (AS_TEST_X, AS_EXECUTABLE_P): Simplify.
+
+2012-02-24 Eric Blake <eblake@redhat.com>
+
+ doc: mention more pitfalls of file mode tests
+ 4.3BSD is museum-ware now, so we can assume that test -x exists;
+ however, we still can't assume that it always does what we want.
+
+ * doc/autoconf.texi (Limitations of Builtins) <test (files)>:
+ Treat 'test -x' as mostly portable, but mention problems with
+ root user, ACLs, and TOCTTOU races.
+
+2012-02-16 Eric Blake <eblake@redhat.com>
+
+ docs: tweak 'rm -f' limitations
+ Based on http://debbugs.gnu.org/10819 and
+ http://austingroupbugs.net/view.php?id=542
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <rm>: More
+ details on 'rm -f' without files.
+
+2012-02-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ maint: replace FSF snail-mail addresses with URLs
+ * tests/erlang.at, tests/go.at, tests/statesave.m4:
+ Replace FSF snail mail addresses with URLs, as per GNU coding
+ standards, and for consistency with other tests.
+
+2012-01-28 Jim Meyering <meyering@redhat.com>
+
+ maint: avoid "make syntax-check" failure
+ * Makefile.am ($(srcdir)/INSTALL): Remove spurious space-before-TAB.
+
+2012-01-23 Eric Blake <eblake@redhat.com>
+
+ tests: fix test regression due to additional output
+ This test has been failing since commit 5285ea8c (sadly, since
+ last July; thankfully, unreleased).
+
+ * tests/m4sugar.at (m4@&t@_require: nested): Fix test.
+
+2012-01-23 Eric Blake <eblake@redhat.com>
+
+ INSTALL: convert to '' quoting, drop blank line at end
+ This is allowed by recent GNU Coding Standards changes, and
+ mirrors recent gnulib changes:
+ https://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00267.html
+ https://lists.gnu.org/archive/html/bug-gnulib/2012-01/msg00298.html
+
+ I've confirmed that after these changes, the INSTALL generated and
+ installed by autoconf matches the INSTALL.ISO in gnulib.
+
+ * Makefile.am ($(srcdir)/INSTALL): Match gnulib INSTALL.ISO.
+
+2012-01-23 Jim Meyering <meyering@redhat.com>
+
+ maint: convert .x-sc_* into exclude_file_name_regexp--sc_* exemptions
+ Many of the .x-sc_* exemptions were no long necessary. Remove those
+ files and instead, provide exemptions via variable definitions in
+ cfg.mk to address the few remaining exceptions.
+ * .x-sc_prohibit_atoi_atof: Remove file.
+ * .x-sc_space_tab: Likewise.
+ * .x-sc_sun_os_names: Likewise.
+ * .x-sc_trailing_blank: Likewise.
+ * .x-sc_two_space_separator_in_usage: Likewise.
+ * .x-sc_useless_cpp_parens: Likewise.
+ * cfg.mk: Add minimal exemptions.
+ * cfg.mk: Add minimal exemptions.
+ * doc/standards.texi (Standard C): Address the sole useless-cpp-parens
+ violation in this file:
+ -#if defined (__STDC__) || defined (WINDOWSNT)
+ +#if defined __STDC__ || defined WINDOWSNT
+ With that, the only remaining offender is config.guess, whose name
+ is now listed in cfg.mk.
+ Suggested by Eric Blake.
+
+2012-01-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ doc: work around mingw-w64 alloca problem with example
+ * doc/autoconf.texi (Particular Functions): In example code for
+ alloca, do not re-#define alloca. This works around a mingw-w64
+ problem reported by Vincent Torri in
+ <http://lists.gnu.org/archive/html/autoconf/2012-01/msg00018.html>.
+
+2012-01-21 Jim Meyering <meyering@redhat.com>
+
+ maint: fix or disable failing syntax-check rules
+ * cfg.mk (local-checks-to-skip): List failing tests, so we skip
+ them, for now.
+ (old_NEWS_hash): Update.
+ * doc/autoconf.texi: Per suggestion from Eric Blake, obfuscate
+ the first word of "Filesystem Hierarchy Standard" as File@/system
+ so it continues to render as one word, yet doesn't trigger the
+ syntax-check prohibition.
+
+ maint: also sync maint.mk and useless-if-before-free from gnulib
+ * cfg.mk (gnulib-update): Add them to the list.
+ * maint.mk: Update from gnulib.
+ * build-aux/gitlog-to-changelog: Likewise.
+ * build-aux/useless-if-before-free: New file, from gnulib.
+ * doc/gnu-oids.texi: Update.
+
+ maint.mk: update from gnulib
+ * maint.mk: Update.
+
+ maint: placate syntax-check rules: exempt some false positives
+ * cfg.mk: Exempt maint.mk from the "undesirable word seq" check.
+ Exempt maint.mk and autoconf.texi from the test_minus_ao check.
+
+ maint: tweak to avoid triggering space-tab-prohibiting syntax-check
+ * tests/m4sh.at (nargs): Use TAB-SP, not SP-TAB in abusive file name,
+ to avoid triggering the space-tab-prohibiting syntax-check.
+
+ maint: remove empty lines at EOF
+ * man/autoconf.x: Remove empty line at EOF.
+ * man/autoheader.x: Likewise.
+ * man/autoscan.x: Likewise.
+ * man/autoupdate.x: Likewise.
+ * man/ifnames.x: Likewise.
+ * tests/compile.at: Likewise.
+ * doc/fdl.texi: Likewise.
+
+ doc: fix grammar/doubled-word errors
+ * doc/autoconf.texi: Remove/fix doubled-word errors.
+ Also, s/can not/cannot/.
+ * lib/m4sugar/m4sh.m4: Reword "if IF" comment to avoid triggering
+ the doubled-word warning.
+
+2012-01-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: sync files from gnulib
+ * GNUmakefile: Sync from gnulib.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/move-if-change: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/update-copyright: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/gendocs_template: Likewise.
+ * doc/standards.texi: Likewise.
+ * m4/autobuild.m4: Likewise.
+
+2012-01-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: make position of gnulib checkout configurable
+ Some gnulib-related tools (most prominently, the gnulib-provided
+ 'bootstrap' script) allow the user to define the position of his
+ gnulib's repository checkout through the use of the 'GNULIB_SRCDIR'
+ environment variable. We should do the same, for consistency and
+ to easily support slightly unusual layouts in developers' source
+ trees.
+
+ * cfg.mk (gnulib_dir): Define to "$GNULIB_SRCDIR" if that's set,
+ and to default value of "'$(abs_srcdir)'/../gnulib" otherwise.
+ Update comments.
+
+2012-01-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ getopt: sync from Automake repository
+ * lib/Autom4te/Getopt.am: The master copy of this file has
+ been moved to the Automake repository (see Automake commit
+ 'v1.11-662-g52246cc' 2012-01-18, "cmdline parsing: move into
+ a dedicated perl module"). So we now we sync it from there,
+ by listing it ...
+ * cfg.mk (autom4te_files): ... in this variable.
+
+2012-01-20 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ build: fix automake error due to missing ChangeLog
+ Apparently, Automake does not accept the '$(srcdir)/ChangeLog'
+ target in Makefile.am as a declaration that ChangeLog is
+ automatically generated (and thus does not need to exist at
+ automake time). One has to use a *literal* 'ChangeLog' target.
+
+ Problem introduced in commit v2.68-118-g6ed5195 of 2012-01-17,
+ "maint: generate ChangeLog from git log".
+
+ * Makefile.ma ($(srcdir)/ChangeLog): Renamed ...
+ (ChangeLog): ... to this.
+
+2012-01-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ getopt: new Autom4te::Getopt module
+ * lib/Autom4te/General.pm (getopt): Move the guts of its
+ implementation ...
+ * lib/Autom4te/Getopt.pm (parse_options): .. into this function
+ in the new Autom4te::Getopt module. This will make it simpler
+ for the implementation to be shared with other projects (right
+ now, Automake).
+ * lib/Automake/Makefile.am (dist_perllib_DATA): Add the new
+ module.
+
+2012-01-17 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid spurious failure for each gnu-fortran-using test
+ The tests compare pre- and post-run lists of envvars, which must
+ be the same, modulo a list of known, filtered-out exceptions.
+ However, when running fortran-checking tests with GNU fortran, each
+ would fail due to the post-run addition of the GFC symbol added in
+ v2.68-97-gbd962ac.
+ * tests/local.at (AT_CHECK_ENV): Add GFC to the list of symbols
+ that we ignore in pre-/post-run environment diffs.
+
+2012-01-17 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ maint: generate ChangeLog from git log
+ Following the practice set by various other GNU projects, we start
+ to automatically generate the ChangeLog file from the git commit
+ messages. This will avoid duplication (as the ChangeLog entries
+ were always inserted both in the git commit message and in the
+ version-controlled ChangeLog file), and potential problems with
+ spurious merge conflicts (which, although greatly mitigated by
+ Bruno Haible's `git-merge-changelog' helper program, have never
+ been completely solved).
+
+ * ChangeLog: Moved ...
+ * ChangeLog.3: ... to this.
+ * build-aux/gitlog-to-changelog: New script, synced from gnulib.
+ * cfg.mk (gnulib-update): Also sync gitlog-to-changelog.
+ * Makefile.am (gen-ChangeLog): New .PHONY rule, generate the
+ ChangeLog for distribution.
+ (dist-hook): Depend on it.
+ ($(srcdir)/ChangeLog): New dummy rule, to pacify automake "gnu"
+ strictness. Creates a dummy ChangeLog, that will be overridden
+ by the proper one at distribution time.
+ (gen_start_date): New variable, the date starting from which the
+ git log entries are to be copied in the generated ChangeLog.
+ (EXTRA_DIST): Add ChangeLog.3 and gitlog-to-changelog.
+ * configure.ac (AC_CONFIG_SRCDIR): Use 'lib/autoconf/autoconf.m4'
+ instead of 'ChangeLog' as the sentinel file.
+ * .gitignore: Add ChangeLog.
+
+2012-01-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ cosmetics: fix some typos in ChangeLog
diff --git a/ChangeLog.0 b/ChangeLog.0
new file mode 100644
index 0000000..b46523f
--- /dev/null
+++ b/ChangeLog.0
@@ -0,0 +1,362 @@
+Mon Jul 20 01:08:01 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_ALLOCA): Don't try -lucb -- it's too often broken.
+
+Sat Jul 18 13:40:46 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MAJOR_HEADER): Add missing "$".
+
+ * acspecific.m4 (AC_ALLOCA): Put -lc before -lucb.
+
+Fri Jul 17 00:00:07 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.sh: Print the lines of the input file where
+ unresolved macros occur. From Francois Pinard.
+
+ * acspecific.m4 (AC_PROG_INSTALL), acgeneral.m4
+ (AC_PROGRAM_CHECK): Use test -f instead of -s.
+
+ * autoconf.sh: grep for undefined macros in output.
+
+Tue Jul 14 01:19:26 1992 David J. MacKenzie (djm@apple-gunkies.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): Search PATH manually to
+ avoid "command not found" messages on /dev/tty. Remove "args
+ for check" argument.
+ (AC_INIT): Don't define checkfor; no longer needed.
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_RANLIB, AC_PROG_YACC,
+ AC_PROG_LEX): Don't pass "args for check" argument.
+
+ * acgeneral.m4 (AC_PROGRAMS_CHECK): New macro.
+ * acspecific.m4 (AC_PROG_AWK): Use it. Check for mawk, gawk,
+ nawk, and awk.
+ (AC_PROG_YACC): Check for byacc if bison isn't found.
+
+ * acspecific.m4 (AC_PROG_CC): Renamed from AC_PROG_GCC.
+ (AC_PROG_YACC): Renamed from AC_PROG_BISON.
+ (AC_PROG_AWK): Renamed from AC_PROG_GAWK.
+ (AC_PROG_LEX): Renamed from AC_PROG_FLEX.
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Redirect stderr to /dev/null
+ both inside and outside the subshell to try to prevent core
+ dumped messages. Who knows, it might even help.
+
+Thu Jul 9 21:37:45 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for DGUX before SVR4.
+
+Fri Jul 3 01:01:50 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_REMOTE_TAPE): Renamed from AC_MTIO.
+ Define HAVE_SYS_MTIO_H instead of NO_MTIO.
+ (AC_LONG_FILE_NAMES): Renamed from AC_LONG_FILENAMES.
+ (AC_RSH): Define HAVE_NETDB_H instead of USE_REXEC.
+ Above mostly from Richard Stallman.
+
+ * acgeneral.m4 (AC_MISSING_FUNCS): Macro removed.
+ * acspecific.m4 (AC_VPRINTF, AC_WAIT3, AC_UTIME_NULL,
+ AC_TIMEZONE, AC_ST_BLOCKS, AC_ST_BLKSIZE): Change from
+ FOO_MISSING to HAVE_FOO.
+ (AC_WAIT3): Renamed from AC_WAIT3_RUSAGE.
+ (AC_TIMEZONE): Require AC_STRUCT_TM.
+ (AC_STRUCT_TM): Provide itself.
+
+ * acgeneral.m4 (AC_OUTPUT): Add --recheck option to config.status.
+
+ * acspecific.m4 (AC_ST_RDEV, AC_CONST): New macros.
+
+ * acgeneral.m4 (AC_DEFINE): Don't consider an empty value arg to
+ be an omitted arg.
+
+Thu Jul 2 16:05:05 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): New macro.
+
+ * autoconf.sh: Only reject an arg that's not a known option if it
+ is an option.
+
+Tue Jun 30 16:08:04 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_INIT, AC_OUTPUT): Eliminate vpsub.
+
+Thu Jun 25 12:42:10 1992 David J. MacKenzie (djm@apple-gunkies.gnu.ai.mit.edu)
+
+ * autoconf.sh: Add --version option.
+ * acgeneral.m4: Support it.
+
+Wed Jun 24 14:04:13 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_TIMEZONE): Do the checks unconditionally,
+ not only if strftime.o is in LIBOBJS.
+
+ * acspecific.m4 (AC_DIR_HEADER): Don't assume sys/dir.h exists.
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): Don't include the program
+ name in the value-if-found. From Rich Murphey.
+ * acspecific.m4 (AC_PROG_{GCC,RANLIB,GAWK,BISON,FLEX}): Change
+ callers.
+
+ * acgeneral.m4 (AC_OUTPUT): Mention the args given to
+ configure in a comment in config.status.
+
+Fri Jun 19 13:18:12 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_FUNC_CHECK): Use the third arg when it's
+ non-null, not when it's null. From Ian Lance Taylor.
+
+Thu Jun 18 12:10:27 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_BEFORE): Print message in next-error format.
+ From Franc,ois Pinard.
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): If args-for-use is empty,
+ don't put a space after the program name.
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): Move AC_REQUIREs from
+ AC_PROG_FLEX to here, where they belong.
+
+ * acspecific.m4 (AC_MEMORY_H): Look for memchr instead of memcpy.
+ From Karl Berry.
+
+Wed Jun 17 09:56:59 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_BEFORE): New macro.
+ * acspecific.m4 (AC_PROG_GCC, AC_DIR_HEADER, AC_AIX,
+ AC_MINIX, AC_ISC_POSIX): Use it.
+
+Tue Jun 16 14:46:29 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * autoconf.sh: Remove incomplete output file if interrupted.
+
+ * acgeneral.m4 (AC_INIT): Avoid running an extra subshell for pwd.
+ From Franc,ois Pinard.
+
+Mon Jun 15 21:27:49 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Take another arg for
+ cross-compiling.
+ * acspecific.m4 (AC_CROSS_CHECK): New program.
+
+ * acgeneral.m4 (AC_REQUIRE, AC_PROVIDE): New macros.
+ (AC_HEADER_EGREP, AC_PROGRAM_EGREP, AC_TEST_CPP): Use them.
+ * acspecific.m4 (AC_PROG_GCC, AC_GCC_TRADITIONAL, AC_PROG_CPP,
+ AC_PROG_FLEX, AC_INLINE): Ditto.
+
+Sat Jun 13 17:54:24 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MEMORY_H): echo what it's doing.
+
+Thu Jun 11 14:18:35 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O, AC_INLINE,
+ AC_SETVBUF_REVERSED): New macros.
+ (AC_ALLOCA): Define HAVE_ALLOCA_H if appropriate.
+
+ * acgeneral.m4 (AC_INIT): Do pwd in the srcdir, not current dir.
+ Scan through "$@" (implicitly) instead of $*.
+ (AC_HEADER_EGREP, AC_PROGRAM_EGREP, AC_COMPILE_CHECK,
+ AC_TEST_PROGRAM, AC_TEST_CPP): Supply a `:' if `true' argument
+ is empty.
+ * acgeneral.m4, acspecific.m4: Omit `:' in callers.
+
+Wed Jun 10 12:03:11 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HEADER_EGREP, AC_PROGRAM_EGREP, AC_HEADER_CHECK,
+ AC_COMPILE_CHECK, AC_TEST_PROGRAM, AC_TEST_CPP, AC_FUNC_CHECK):
+ Make the last argument (program to run if test fails) optional.
+ (AC_HAVE_FUNCS, AC_HAVE_HEADERS): Don't pass optional last args.
+ * acspecific.m4 (most macros): Likewise.
+
+Mon Jun 8 16:27:10 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_VFORK): Get rid of backquotes.
+
+ * acgeneral.m4 (AC_OUTPUT): Exit with 0 status when
+ --no-create was given.
+ Only write to the AC_CONFIG_NAME file if it doesn't exist or is
+ different from what we'd write. From Ian Lance Taylor.
+
+Thu Jun 4 14:46:22 1992 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_UNISTD_H, AC_UID_T, AC_SIZE_T, AC_PID_T,
+ AC_ST_BLKSIZE, AC_STRUCT_TM): Quote the whole macro body.
+
+ * acgeneral.m4 (AC_OUTPUT): Look for config header.in in
+ top_srcdir, not srcdir. From Garrett Wollman.
+
+ * acgeneral.m4 (AC_OUTPUT): Don't add make .NOEXPORT rule to
+ output files.
+
+ * acgeneral.m4, acspecific.m4: Rename AC_PROG_CHECK to
+ AC_PROGRAM_CHECK, AC_PROG_EGREP to AC_PROGRAM_EGREP,
+ AC_TEST_PROG to AC_TEST_PROGRAM.
+
+Wed Jun 3 14:00:07 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_INIT, AC_OUTPUT): Add --no-create option.
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Check the C compiler exit
+ status instead of trying to run the test program.
+
+ * acspecific.m4 (AC_RESTARTABLE_SYSCALLS): Use AC_TEST_PROG
+ instead of doing it by hand.
+
+ * acspecific.m4 (AC_PROG_GCC, AC_AIX, AC_XENIX_DIR,
+ AC_SCO_INTL, AC_DYNIX_SEQ): Use AC_PROG_EGREP instead of
+ AC_TEST_PROG.
+
+ * acgeneral.m4 (AC_TEST_PROG): Renamed from AC_TEST_PROGRAM.
+
+ * acgeneral.m4 (AC_INIT): Don't relativize `.'.
+ (AC_OUTPUT): Substitute the subdirectory path, not the top
+ path, for srcdir, unless the top path is `.'.
+
+ * acgeneral.m4 (AC_OUTPUT): Special-case substituting DEFS.
+ From Ian Lance Taylor.
+
+ * acspecific.m4 (AC_GCC_TRADITIONAL): Use CPP instead of
+ compiling a test program.
+
+ * acgeneral.m4 (AC_TEST_CPP): Pass DEFS to CPP.
+ (AC_HEADER_EGREP): Don't echo anything.
+ (AC_PROG_EGREP): New macro.
+
+Tue Jun 2 14:07:27 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_CONFIG_HEADER): Renamed from AC_HEADER_FILE.
+ Rename AC_HEADER_NAME TO AC_CONFIG_NAME.
+ (AC_SUBST): Add the arg variable to a diversion for config.status.
+ (AC_OUTPUT): Write the code to create output files into config.status,
+ then run that. Always use `awk'; checking for nawk in a subshell
+ doesn't seem to work on 4.3BSD.
+
+ * acgeneral.m4 (AC_HEADER_EGREP): Pass DEFS to CPP.
+
+ * acspecific.m4 (AC_SIZE_T): Define size_t as int, not long.
+ From Ian Lance Taylor.
+
+ * acspecific.m4 (AC_STDC_HEADERS): Also check for stdarg.h.
+ From Garrett Wollman.
+
+Wed May 20 00:34:03 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Use nawk if available.
+
+ * acgeneral.m4 (AC_INIT): Make srcdir=`.' absolute.
+
+ * acspecific.m4 (AC_DIR_HEADER): Include sys/types.h before
+ dir header in closedir test.
+
+ * acgeneral.m4, acspecific.m4: AC_LIBTHING_CHECK renamed to
+ AC_COMPILE_CHECK.
+
+ * acspecific.m4 (AC_AIX, AC_XENIX_DIR, AC_SCO_INTL, AC_DYNIX_SEQ):
+ Use the C preprocessor instead of just looking for files.
+
+Mon May 18 20:51:50 1992 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (WORDS_BIGENDIAN): Fix exit expression.
+ (AC_DECLARE_YYTEXT): Eval $CPP.
+ (AC_DIR_HEADER): Compile the test program; don't just
+ preprocess it. Above all from Karl Berry.
+
+Fri May 15 00:57:01 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_AIX): Don't define _BSD, to avoid getting
+ union wait.
+
+ * acgeneral.m4 (AC_HEADER_EGREP): New macro, replacing AC_IDENT*.
+ * acspecific.m4 (AC_MEMORY_H, AC_RETSIGTYPE, AC_{UID,SIZE,PID}_T):
+ Use it.
+
+ * acgeneral.m4 (AC_TEST_CPP): New macro.
+ (AC_IDENT_{PRESENT,MISSING}): Macros deleted.
+ (AC_HEADER_CHECK): Use AC_TEST_CPP, replaces AC_HEADER_{PRESENT,
+ MISSING}.
+ (AC_LIBTHING_CHECK): Replace AC_LIBTHING_{PRESENT,MISSING}.
+ (AC_FUNC_CHECK): Replace AC_FUNC_PRESENT.
+ (AC_INIT): Don't set INCLUDEDIR.
+ * acspecific.m4 (AC_DIR_HEADER): Use AC_TEST_CPP.
+ * All other macros: Don't refer to INCLUDEDIR; use
+ AC_HEADER_CHECK instead.
+
+ * acspecific.m4 (AC_PROG_CPP): Don't evaluate $CC until called.
+ Try $CC -E before /lib/cpp.
+
+Thu May 14 23:15:02 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Remove each file before creating it.
+
+Sat May 9 14:52:57 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_WAIT3_RUSAGE): New macro.
+
+ * acgeneral.m4 (AC_INIT, AC_OUTPUT): Use AC_SUBST instead of a
+ special mechanism to substitute for srcdir.
+
+ * acgeneral.m4 (AC_OUTPUT): Substitute for exec_prefix if it
+ was given, even if not substituting for prefix.
+
+ * acgeneral.m4 (AC_INIT, AC_OUTPUT): Remove @VPATH@
+ substitution; use @srcdir@ instead.
+
+Sun May 3 01:21:47 1992 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_NOTICE): New macro taken from AC_INIT, to avoid
+ m4 coredump. From Karl Berry.
+
+ * acgeneral.m4 (AC_OUTPUT): Look for header-file.in in $srcdir,
+ not current dir.
+
+ * acgeneral.m4 (AC_IDENT_{MISSING,PRESENT}): Make them agree
+ with the documentation -- the third arg is a shell command,
+ not an identifier to define.
+ * acspecific.m4 (AC_DIR_HEADER): Change the caller.
+
+Mon Apr 27 09:15:15 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4: Use AC_TEST_PROGRAM wherever $compile was
+ being used directly.
+
+ * acgeneral.m4 (AC_HAVE_HEADERS, AC_HAVE_FUNCS,
+ AC_FUNC_PRESENT, AC_TEST_PROGRAM): New macros from Ian Lance Taylor.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Screen out /usr/sbin/install.
+ (AC_CHAR_UNSIGNED): Don't define __CHAR_UNSIGNED__ if it's
+ predefined.
+
+Fri Apr 24 10:08:21 1992 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Make the arg a list of files instead of
+ directories.
+
+ * acspecific.m4 (AC_ALLOCA): Check whether the alternate libraries
+ actually contain alloca. From Ian Lance Taylor.
+
+ * acspecific.m4 (AC_PROG_CPP): New macro.
+
+ * acgeneral.m4 (AC_OUTPUT): Allow newly defined values to be more
+ than one word for AC_HEADER_FILE. From Karl Berry.
+
+ * acgeneral.m4 (AC_OUTPUT): Don't substitute DEFS if AC_HEADER_FILE.
+ (AC_LIBTHING{PRESENT,MISSING}): Run conftest in subshell.
+ From Ian Lance Taylor.
+
+
+ -----
+
+ Copyright (C) 1992 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
diff --git a/ChangeLog.1 b/ChangeLog.1
new file mode 100644
index 0000000..a28662b
--- /dev/null
+++ b/ChangeLog.1
@@ -0,0 +1,1939 @@
+Thu May 12 15:55:40 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.11.
+
+ * autoconf.texi: Document filename restriction on CPP.
+
+Thu May 12 10:11:20 1994 David J. MacKenzie (djm@hill.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Treat "./Makefile" like "Makefile".
+ From Karl Berry.
+
+Tue May 10 00:08:19 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Set prefix and exec_prefix if they
+ weren't set already.
+
+Sat May 7 20:06:59 1994 Noah Friedman (friedman@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): If using install.sh, add `-c'
+ to INSTALL.
+
+Sat May 7 15:36:22 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): If configuring in the source tree,
+ don't end top_srcdir with "/.".
+ * acspecific.m4 (AC_SET_MAKE): Remove temp file.
+ From John Interrante <interran@uluru.stanford.edu>.
+
+Fri May 6 15:26:48 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4 (AC_SIZEOF_TYPE): Fatal error if test program fails.
+
+Fri May 6 12:52:19 1994 David J. MacKenzie (djm@gamera.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Run "./config.status", not "config.status".
+ From Kevin Gallagher <kgallagh@spd.dsccc.com>.
+
+Fri May 6 00:45:29 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4 (AC_WAIT3): Sleep in the parent to avoid rm
+ problems on fast machines. From david d zuhn.
+
+Thu May 5 12:51:32 1994 David J. MacKenzie (djm@gamera.eng.umd.edu)
+
+ * Version 1.10.
+
+ * Makefile.in (install): Don't install INSTALL.
+ (installcheck, install-info): New targets.
+
+Mon May 2 16:31:33 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * autoconf.sh, autoheader.sh: If M4 is an absolute file name that
+ no longer exists, use M4=m4.
+
+Mon May 2 13:06:06 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * acspecific.m4 (AC_HAVE_POUNDBANG): Quote # in message.
+ From schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).
+
+ * autoconf.texi: Document config.h.bot. Fix typo in AC_HAVE_POUNDBANG.
+
+ * acspecific.m4 (AC_PROG_CXX): Look for "cxx" (DEC C++ compiler) too.
+
+ * autoheader.sh: Fix tr string for Solaris tr.
+ Add config.h.bot if present.
+ From richard@sol.kbsi.com (Richard Henderson).
+
+Fri Apr 29 12:53:53 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Use install.sh from srcdir
+ or srcdir/.. or srcdir/../.. and never default to cp.
+
+Thu Apr 28 12:01:01 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * acconfig.h: Add HAVE_MMAP entry.
+ * acspecific.m4 (AC_MMAP): If NBPC is not defined, use PAGESIZE.
+ From "Kaveh R. Ghazi" <ghazi@eden.rutgers.edu>.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): For each file being created,
+ munge a copy of conftest.sed rather than the original.
+ From brook@trillium.botany.utexas.edu (Brook Milligan).
+
+Tue Apr 26 00:27:21 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_LANG_C, AC_LANG_CPLUSPLUS): Remove CFLAGS and
+ CXXFLAGS from ac_cpp.
+
+Thu Apr 21 19:43:20 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.9.
+
+ * autoconf.texi: Document special AC_FIND_XTRA ordering
+ dependencies.
+
+ * acspecific.m4 (AC_FIND_XTRA): Reorder AC_REQUIREs.
+
+ * acspecific.m4 (AC_FIND_X): AC_REQUIRE_CPP.
+
+ * acspecific.m4 (AC_PROG_LEX): Say what we set LEXLIB to.
+
+Wed Apr 20 13:17:05 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Allow . in hostnames. Use string
+ comparison on them.
+ (AC_HAVE_LIBRARY): namespace cleanup.
+
+ * autoconf.texi: Describe changes to AC_FIND_X, AC_FIND_XTRA, and
+ AC_YYTEXT_POINTER.
+
+ * acconfig.h: Replace DECLARE_YYTEXT with YYTEXT_POINTER.
+
+ * acgeneral.m4 (AC_PARSEARGS): --gas and --x set with_gas and
+ with_x to yes, not 1.
+
+ * acspecific.m4 (AC_YYTEXT_POINTER): New macro, replacing
+ AC_DECLARE_YYTEXT.
+ (AC_FIND_X): Assume no X if --without-x was given.
+ (AC_FIND_XTRA): Quotes AC_REQUIRE args. Run uname in a subshell in
+ case it's missing. Put -l options in X_EXTRA_LIBS. Print values
+ of the variables we set if verbose.
+
+Tue Apr 19 14:14:25 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Note GNU m4 1.0 bugs.
+
+ * acspecific.m4 (AC_FIND_X_XMKMF): Set variables correctly.
+
+ * autoconf.texi: Don't @setchapternewpage odd by default. Mention
+ autoheader AC_SIZEOF_TYPE symbol generation.
+
+ * acgeneral.m4 (AC_SIZEOF_TYPE): Fix typo.
+
+ * Makefile.in (install): Don't install aclocal.m4.
+
+ * autoheader.sh: Generate entries for AC_SIZEOF_TYPE
+ automatically.
+
+Mon Apr 18 22:14:59 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_SIZEOF_TYPE): Remove second arg, and generate a
+ symbol name automatically.
+
+ * autoconf.texi: Document new AC_SIZEOF_TYPE usage.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Only filter out "install"
+ containing "dspmsg".
+ (AC_FIND_X_XMKMF): Fix variable names to not conflict with grep -v.
+
+ * autoconf.texi: Various small fixes.
+
+ * INSTALL: Say configure takes "awhile".
+
+Sat Apr 16 15:05:31 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4: Call AC_LANG_C in AC_PREPARE, not AC_INIT.
+
+Fri Apr 15 07:00:37 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.8.
+
+ * acgeneral.m4: Rename ac_configure_args back to configure_args,
+ since some people have been using it.
+
+Thu Apr 14 14:45:29 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Note that AC_ENABLE and AC_WITH arguments
+ shouldn't contain blanks, for now.
+
+Wed Apr 13 17:26:36 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_SET_MAKE): Use $MAKE if defined, else "make".
+
+ * autoconf.texi: Add missing files to diagram.
+
+ * acgeneral.m4 (AC_TEST_CPP): Propogate comment about Coherent
+ lossage into configures.
+
+Sat Apr 9 17:34:29 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Unknown option is a fatal error.
+
+ * acgeneral.m4: Remove ac_ prefix from some variables set by
+ options, for consistency and backward compatibility.
+
+Fri Apr 8 13:24:29 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_XTRA): Don't test for -lsocket on IRIX.
+ From Karl Berry.
+
+ * acspecific.m4 (AC_FIND_X_XMKMF, AC_FIND_X_DIRECT): Don't
+ override --x-includes and --x-libraries. Check openwin last due
+ to its bugs.
+
+ * acgeneral.m4: Add --x-includes, --x-libraries options. Document
+ them and --build, --host, --target.
+
+ * autoconf.texi: Mention --x-includes and --x-libraries.
+
+ * INSTALL: Mention --x-includes and --x-libraries.
+
+Tue Apr 5 12:46:47 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Document top_srcdir substitution.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Look for install.sh in
+ @top_srcdir@, not $srcdir.
+
+ * acgeneral.m4 (AC_OUTPUT): AC_SUBST top_srcdir. Set it.
+
+Mon Apr 4 20:13:08 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Fix dependencies examples.
+
+ * Makefile.in: Update configuration dependencies.
+
+ * acgeneral.m4: Add back --no-create option. Make config.status
+ --recheck use it.
+
+ * autoheader.sh: Go back to doing move-if-change. (Work around in
+ dependencies by using stamp files.)
+
+Thu Mar 31 11:34:50 1994 David J. MacKenzie (djm@hill.gnu.ai.mit.edu)
+
+ * Makefile.in (autoconf, autoheader, configure): Write to $@.tmp
+ instead of to $@ directly so that after a disk full error, the
+ targets to not exist. Otherwise, a subsequent make could install
+ a corrupt (but not executable) script. From Jim Meyering.
+
+Thu Mar 31 08:22:29 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Re-document --with argument.
+
+ * acgeneral.m4 (AC_PARSEARGS): --with can take an argument again.
+
+Wed Mar 30 20:01:57 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Document --disable- options.
+
+ * acgeneral.m4 (AC_PARSEARGS): Add --disable-FEATURE.
+
+ * INSTALL: Mention --enable- options.
+
+Mon Mar 28 17:43:22 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Make multiple non-option args a
+ fatal error.
+
+ * acspecific.m4: Change all occurrences of $(MAKE_VAR) to
+ ${MAKE_VAR}.
+
+ * autoconf.texi (Command Line): New node. Move some descriptions
+ here from General Feature Tests. Describe --without- options.
+
+ * acgeneral.m4 (AC_PARSEARGS): Rewrite again, using ideas from the
+ GNU libc configure.in. All options that take an argument set
+ shell variables.
+ (AC_COMPILE_CHECK): Add `return' in `int' function.
+
+ * INSTALL: Fix typo.
+
+Sun Mar 27 00:44:07 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_NOTICE): Don't save original args or initialize
+ options here.
+ (AC_PARSEARGS): Do them here.
+ (AC_PREPARE): Save a copy of original args here, if it hasn't been
+ done yet.
+
+Sat Mar 26 01:32:40 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4: Omit obsolete options from usage message.
+ Quote args to AC_CHECKING that contain m4 variables.
+
+ * INSTALL: Note that env can be used to set env vars.
+
+ * autoconf.texi: Document AC_SET_MAKE.
+ Note that vsprintf and vfprintf come with vprintf.
+ Note that env can be used to set env vars.
+
+ * acspecific.m4 (AC_SET_MAKE): New macro.
+ (AC_PROG_INSTALL): Find scoinst as a good install program.
+
+ * acgeneral.m4: Initialize variables set by options.
+ (AC_HAVE_HEADERS): Require cpp.
+
+ * autoconf.texi: Document AC_ENABLE and @prefix@ and @exec_prefix@
+ substitutions.
+
+ * acgeneral.m4: Recognize all the Cygnus configure options; warn
+ about other arguments. Make default value for --with "yes", not
+ "1". AC_SUBST for prefix and exec_prefix.
+ (AC_ENABLE): New macro.
+
+Thu Mar 24 18:11:00 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * INSTALL: Describe recently added configure options.
+
+ * autoconf.texi: Style cleanups. Mention config.h.top.
+
+ * autoheader.sh: Add ${config_h}.top to the output, if it's
+ present.
+
+Thu Mar 24 13:36:19 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.sh: Remove all temp files when exiting. If m4 fails,
+ produce no output and exit with the m4 exit status.
+
+ * autoconf.texi: Document AC_PREREQ.
+
+ * acgeneral.m4 (AC_PREREQ): New macro, with some helper macros.
+
+Thu Mar 24 01:20:49 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * Makefile.in (acdatadir): New variable based on datadir, giving
+ Autoconf lib files their own subdirectory. Use it instead of
+ datadir.
+
+Wed Mar 23 22:41:54 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * autoconf.texi: Change names of nodes that describe invoking
+ configure and config.status to conform to coding standards.
+ Document --version, --help, --silent/--quiet, --verbose options to
+ configure and config.status.
+
+ * acgeneral.m4 (AC_PARSEARGS): Add --help and --version to
+ configure. Simplify getting option arguments. Complain about
+ impossible host arguments.
+ (AC_OUTPUT): Add --help and --version to config.status.
+
+Wed Mar 23 00:16:28 1994 Roland McGrath (roland@mole.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_CHECKING): Do nothing if $ac_silent is set.
+ (AC_PARSEARGS): Grok -q/--quiet/--silent and set $ac_silent.
+
+Tue Mar 22 18:28:30 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi: Document AC_SIZEOF_TYPE.
+
+ * acspecific.m4 (AC_INT_16_BITS, AC_LONG_64_BITS): Mark obsolete
+ with advice to use AC_SIZEOF_TYPE instead.
+
+ * acgeneral.m4 (AC_SIZEOF_TYPE): New macro.
+
+Tue Mar 22 08:44:40 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * autoconf.texi: Describe AC_CHECKING et al.
+
+ * acspecific.m4: Use AC_CHECKING et al. where appropriate.
+
+ * acgeneral.m4 (AC_CHECKING, AC_VERBOSE, AC_ERROR, AC_WARN): New
+ macros. Use them where appropriate.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS): Fix quoting of ac_cpp.
+
+ * acspecific.m4 (AC_PROG_CPP): Don't add $CFLAGS to CPP.
+ (AC_PROG_CXXCPP): Don't add $CXXFLAGS to CXXCPP.
+
+ * acgeneral.m4 (AC_OUTPUT): Don't remove VPATH lines containing
+ colons. From Jim Meyering (meyering@comco.com).
+ (AC_LANG_C): Add CFLAGS to ac_cpp.
+ (AC_LANG_CPLUSPLUS): Add CXXFLAGS to ac_cpp.
+
+Sat Mar 19 16:38:03 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_LANG_RESTORE): Only emit shell code to change
+ the current language if it actually changed.
+
+ * autoconf.texi: Add info dir entry. Describe new C++ macros and
+ AC_MMAP.
+ (Language Choice): New section.
+ Add another example of dependencies.
+
+ * acspecific.m4 (AC_PROG_CXX, AC_PROG_CXXCPP, AC_REQUIRE_CPP): New
+ macros based on work by zoo@aggregate.com (david d zuhn).
+ (AC_DECLARE_YYTEXT): Use AC_REQUIRE_CPP. Warn that it's broken.
+ (AC_STDC_HEADERS): Use AC_REQUIRE_CPP.
+ (AC_MMAP): New macro from Mike Haertel and Jim Avera.
+
+ * acgeneral.m4 (AC_PARSEARGS): Check for missing arguments to
+ options. Recognize --target. Save the original args before
+ modifying them.
+ (AC_INIT): Call AC_LANG_C.
+ (AC_PREPARE): Don't save the original args here (too late).
+ (AC_LANG_C, AC_LANG_CPLUSPLUS, AC_LANG_SAVE, AC_LANG_RESTORE):
+ New macros based on work by zoo@aggregate.com (david d zuhn).
+ (AC_HEADER_EGREP, AC_PROGRAM_EGREP, AC_COMPILE_CHECK,
+ AC_TEST_PROGRAM, AC_TEST_CPP): Use AC_REQUIRE_CPP and ac_ext and
+ ac_cpp.
+
+ * autoheader.sh: Update the file even if it is unchanged, to avoid
+ foiling a Makefile rule that makes it from configure.in. If you
+ let the rule for making config.status from configure create
+ config.h from config.h.in, then an unnecessary update here will
+ not cause unneeded recompilation. Recompilation should only
+ happen if config.h is updated, which won't occur if config.h.in
+ had the same contents, even if its timestamp changed. (Ick.)
+
+ * Makefile.in (Makefile): Don't depend on config.status, to avoid
+ running config.status too many times.
+
+Fri Mar 18 00:43:21 1994 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * autoconf.texi: Document AC_FIND_XTRA.
+
+ * acgeneral.m4 (AC_OUTPUT): Remove VPATH lines if srcdir=., to
+ work around Sun make bug. From Karl Berry.
+
+ Rename internal use shell variables to start with "ac_".
+
+ Trap signal 2 (SIGINT), not signal 3 (SIGQUIT), which means stop
+ without cleaning up. From eggert@twinsun.com (Paul Eggert).
+
+ * acspecific.m4 (AC_FIND_XTRA): New macro from Karl Berry
+ (karl@cs.umb.edu).
+ (AC_FIND_X, AC_ISC_POSIX): Provide self.
+
+ (AC_DECLARE_YYTEXT): Move AC_SUBST. Don't quote value of
+ DECLARE_YYTEXT. From Karl Berry.
+
+ (AC_PROG_CPP): Include $CFLAGS in CPP.
+
+ Rename internal use shell variables to start with "ac_".
+
+ * autoconf.sh, autoheader.sh: Trap signal 2 (SIGINT), not signal 3
+ (SIGQUIT), which means stop without cleaning up. From
+ eggert@twinsun.com (Paul Eggert).
+
+ * autoconf.texi: Mention shell variable prefixes.
+
+ * autoconf.texi: Work around RCS substitution in AC_REVISION
+ example.
+
+Wed Mar 16 19:55:17 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * acgeneral.m4 (compile): Include $LDFLAGS.
+
+Thu Mar 10 01:27:20 1994 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Don't absolutize relative paths.
+ (AC_OUTPUT): For relative paths, prepend to $srcdir as many
+ "../" as the number of subdirectories deep the file being created is.
+
+Tue Feb 15 16:02:19 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Reject /sbin/install.
+
+Sun Feb 13 21:15:45 1994 Noah Friedman (friedman@prep.ai.mit.edu)
+
+ * autoconf.texi (Setting Variables, Sample configure.in): Replace
+ references to AC_UNISTD_H with AC_HAVE_HEADERS(unistd.h).
+
+Thu Feb 10 21:39:43 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_SYS_SIGLIST_DECLARED): New macro.
+
+Sat Feb 5 13:35:52 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for -lkvm separately after
+ -lutil check.
+
+Fri Feb 4 17:17:11 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Move creation of conftest.sed
+ outside of `for' loop. We need only do this once for all the
+ output files.
+
+Fri Jan 21 16:35:00 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL_INSTALL_SH): New macro for
+ INSTALL value to use install.sh.
+ (AC_PROG_INSTALL): Use it.
+
+Thu Jan 6 16:22:25 1994 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE): Use AC_QUOTE_SQUOTE instead of
+ AC_DEFINE_QUOTE on AC_VAL. From Bruno Haible
+ <haible@ma2s2.mathematik.uni-karlsruhe.de>.
+ * acgeneral.m4 (AC_DEFINE_UNQUOTED): pushdef/popdef
+ AC_QUOTE_SQUOTE instead of AC_DEFINE_QUOTE.
+
+Wed Dec 22 03:51:53 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE): in verbose strings, put
+ AC_DEFINE_QUOTE exprs in double quotes to avoid shell wildcard
+ expansion.
+
+ * acgeneral.m4 (AC_PROGRAM_PATH, AC_PROGRAMS_PATH): New macros.
+ * autoconf.texi (General Tests): Document them.
+
+ * configure.in: Use AC_PROGRAMS_PATH to find m4, not AC_PROGRAMS_CHECK.
+ Put `m4' in the list of progs-to-check, since we want the absolute
+ pathname for that too if we can get it.
+
+Fri Dec 17 13:44:24 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_ALLOCA): define HAVE_ALLOCA if alloca is
+ present in system libraries.
+
+Tue Dec 14 14:53:55 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Remove $ac_clean_files in traps.
+
+ * acspecific.m4 (AC_STDC_HEADERS): Check that free appears in stdlib.h.
+
+Fri Dec 10 06:35:25 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Don't look for install in `.'.
+
+Wed Dec 8 12:10:59 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_XMKMF): Redirect stderr to /dev/null in
+ eval'd make pipeline.
+
+ * acgeneral.m4 (AC_QUOTE_SED): Quote ! as well.
+
+Mon Dec 6 23:41:05 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_CPP): Try 'cc -E -traditional-cpp' for NeXT.
+
+Thu Dec 2 02:25:39 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): use rm -r to remove conftest* both in
+ exit traps and at start of script.
+
+Wed Dec 1 03:22:21 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_DIRECT): Search for includes and libs
+ in more places.
+
+Sun Nov 28 21:57:31 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_NOTICE): Replace "this program" with "this
+ configure script" to disambiguate between configure and the
+ program it is distributed with (which can have different terms).
+
+Tue Nov 23 19:41:53 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_DIRECT): Use the shell variable
+ `x_direct_test_include' to choose the include file to search for.
+
+Sat Nov 20 17:58:09 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_DIRECT): Search for R6 includes & libs
+ in various places. Look for /usr/athena/include & /usr/athena/lib.
+ Make AC_HAVE_LIBRARY check for the library specified by the shell
+ variable `x_direct_test_library', rather than hardcoding Xt (to
+ which the shell variable now defaults).
+
+Thu Nov 18 18:17:21 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Use ! instead of @ as the
+ sed substitution separator.
+
+ * install.sh: New file.
+ * Makefile.in (DISTFILES): Add it.
+ * acspecific.m4 (AC_PROG_INSTALL): Use it as the default
+ instead of cp, if it's there.
+
+Sat Nov 13 12:24:57 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Extend that last change to also
+ happen for .C, .cc, and .m (objc) files.
+
+Wed Nov 10 09:26:35 1993 Noah Friedman (friedman@gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): When substituting .c or .h files, put
+ autoconf-added comments in '/* ... */'.
+
+Mon Nov 8 16:22:48 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_NOTICE): Put autoconf version number in configure.
+
+Fri Nov 5 23:31:28 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_XMKMF): properly quote `acfindx' rule.
+
+Fri Oct 29 21:46:57 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (HAVE_LONG_DOUBLE): Add code to detect Stardent
+ Vistra lossage. From Kaveh R. Ghazi (ghazi@noc.rutgers.edu).
+
+Tue Oct 26 15:24:33 1993 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * Version 1.7.
+
+Tue Oct 19 23:49:50 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Don't remove conftest* before
+ running $2 or $3 or $4; just once at the end.
+
+Mon Oct 18 01:38:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Echo a newline into confdefs.h so it
+ is never empty.
+
+Fri Oct 15 18:49:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Added test of trivial use for broken
+ Ultrix-32 V3.1 Rev 9 vcc.
+
+Fri Oct 15 15:44:39 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OBSOLETE): New macro.
+ * acspecific.m4 (AC_UNISTD_H, AC_USG, AC_MEMORY_H): Call it.
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): Try to create files in
+ ${prefix}/lib and ${exec_prefix}/lib instead of ${prefix} and
+ ${exec_prefix}; they are more likely to be writable.
+
+ * Makefile.in (clean): Remove *.ma and *.mas, the macro index files.
+
+Tue Oct 12 16:02:52 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_RETSIGTYPE): AC_PROVIDE self.
+
+Mon Oct 11 19:09:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (editsh): Obfuscate @M4@ and @datadir@ references so
+ configure doesn't edit them.
+
+Sun Oct 10 14:01:35 1993 Jim Meyering (meyering@comco.com)
+
+ * autoconf.sh (--help): Exit successfully.
+
+Sat Oct 9 08:29:15 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * Version 1.6.
+
+ * acconfig.h (inline): New entry.
+
+ * acspecific.m4 (AC_DIR_HEADER_CHECK): Don't call opendir, in
+ case the needed libraries (e.g., -ldir on Xenix) aren't in
+ LIBS yet. From Jim Meyering (meyering@comco.com).
+
+ * acspecific.m4 (AC_PROG_LEX): Fix typo.
+
+ * acgeneral.m4 (AC_HEADER_EGREP, AC_PROGRAM_EGREP,
+ AC_COMPILE_CHECK, AC_TEST_PROGRAM, AC_TEST_CPP): Remove any
+ temporary files before doing the actions, in case they're
+ nested tests. From gray@antaire.com (Gray Watson).
+
+ * configure.in: Check for GNU m4 under several names.
+ * Makefile.in: Use that value.
+ From Franc,ois Pinard.
+
+ * acspecific.m4 (AC_STRUCT_TM): Use a member of struct tm, to
+ make sure the compiler complains if it's not defined.
+ From Bruno Haible (haible@ma2s2.mathematik.uni-karlsruhe.de).
+
+ * acspecific.m4 (AC_FIND_X_XMKMF): If libX11.a isn't in
+ USRLIBDIR, check in LIBDIR. Filter out any make verbose messages.
+
+Tue Oct 05 19:21:29 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_LONG_DOUBLE): Announce that this feature is being
+ checked even if the test is simply whether $CC is gcc.
+
+Tue Oct 5 14:23:28 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh: Produce HAVE_LIBfoo for AC_HAVE_LIBRARY.
+
+Sun Oct 3 15:41:36 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Write assignment for `extrasub'; in sed
+ cmds, write "$extrasub" so configure.in can set it to do sed frobs.
+ Take second arg and write it to config.status before `exit 0'.
+
+ * acspecific.m4 (AC_CONST): Say `checking for lack of working
+ const'. That is precisely accurate.
+
+Wed Sep 22 15:47:50 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4: If not using GNU m4, abort.
+
+ * acgeneral.m4 (AC_PREPARE): Lose if we're not in the srcdir,
+ not if we're in it. But disable the check for now.
+
+Mon Sep 20 15:32:30 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Check for $srcdir being configured,
+ diagnose and lose.
+
+ * acgeneral.m4 (AC_QUOTE_SED): Quote @ and %.
+
+ * acgeneral.m4 (AC_OUTPUT): Say "$file is unchanged" when it is.
+
+Sat Sep 18 14:32:04 1993 Ian Lance Taylor (ian@airs.com)
+
+ * acgeneral.m4: Substitute for CONFIG_FILES and CONFIG_HEADERS
+ before using them, in case they have multiple values.
+
+Fri Sep 17 14:40:20 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_WAIT3): wait3 works if ru_stime is
+ nonzero, too.
+
+Thu Sep 16 15:39:53 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X_XMKMF): Code moved from AC_FIND_X.
+ (AC_FIND_X_DIRECT): New function, derived from code by Karl
+ Berry and Rob Savoye.
+ (AC_FIND_X): Call them.
+
+Wed Sep 15 19:06:46 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Remove confdefs* on exit with trap 0.
+ (AC_OUTPUT): Don't bother removing it.
+
+ * acgeneral.m4: Remove --no-create option; not useful.
+
+Mon Sep 13 21:54:46 1993 Paul Eggert (eggert@twinsun.com)
+
+ * autoheader.sh: Rename the temporary output to the real
+ output if their contents differ, not if their contents are identical.
+ This fixes bug introduced in Aug 30 change.
+
+Mon Sep 13 16:50:30 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Run config.status with
+ CONFIG_SHELL if defined. Same for configure run from config.status.
+ Rename gen_files to CONFIG_FILES and gen_config to CONFIG_HEADERS.
+
+ * acgeneral.m4 (AC_PREPARE): Remove confdefs* in trap.
+
+Fri Sep 10 00:29:20 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): Test /var/tmp as well.
+ In loop, skip past nonexistent dirs.
+
+ * acspecific.m4 (AC_CONST): Say "working", not "broken". We are
+ checking for a working const as opposed to a broken or absent
+ const, not for a broken const as opposed to a working one.
+
+Thu Sep 9 09:25:49 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4, acconfig.h (AC_LONG_64_BITS): New macro.
+
+Wed Sep 1 18:54:12 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): Use && instead of test -a.
+
+Tue Aug 31 19:21:35 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Support generating multiple
+ .h files. From gray@antaire.com (Gray Watson).
+
+ * acspecific.m4 (AC_ALLOCA): If using alloca.o, define C_ALLOCA.
+
+ * acgeneral.m4 (compile, AC_HEADER_EGREP, AC_PROGRAM_EGREP,
+ AC_COMPILE_CHECK, AC_TEST_PROGRAM, AC_TEST_CPP): Remove $DEFS
+ from cc and cpp command lines; include "confdefs.h" in test
+ files.
+ (AC_DEFINE): Append a #define to confdefs.h.
+ Reduce duplicated code by introducing a temp variable, AC_VAL.
+
+Mon Aug 30 17:36:54 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh: Don't write output if it is the same as output file.
+
+Wed Aug 25 14:14:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_VFORK): Check for SunOS 5.2 bug with ignoring
+ signal in parent before vfork. From eggert.
+
+Fri Aug 20 10:14:42 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Support giving values to --with
+ options. Go back to using sed for invalid test, but without
+ using '*' in the regex.
+
+Thu Aug 19 14:53:29 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): eval the args.
+
+ * acgeneral.m4 (AC_PARSEARGS): Use case instead of sed and
+ test to detect invalid package names. Remove =value from
+ --with options until we support it.
+
+Wed Aug 11 18:52:41 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X): Don't set x_includes if it's
+ /usr/include or x_libraries if it's /lib or /usr/lib.
+
+Wed Aug 11 13:00:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): If we cannot write $dir, echo
+ a warning msg and continue the loop to skip that directory.
+
+ * acgeneral.m4 (AC_REVISION): Also eat double quotes.
+
+Thu Aug 5 14:55:59 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acconfig.h: Add TIME_WITH_SYS_TIME.
+
+Mon Aug 2 14:55:16 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): \-escape "s in rhs of
+ AC_DEFINE_UNQUOTED.
+ Remove gratuitous second arg to AC_SUBST.
+
+Sun Aug 1 19:13:08 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Define HAVE_GETLOADAVG if we find
+ one and don't use our own getloadavg.c.
+ * acconfig.h: Add HAVE_GETLOADAVG.
+
+Sat Jul 31 17:28:48 1993 Karl Berry (karl@cs.umb.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Report results under -v.
+
+Fri Jul 30 18:08:30 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (syms, headers, funcs, libs): Run values through
+ sort|uniq to remove duplicates.
+
+Wed Jul 28 00:02:34 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * Makefile.in (config.status): Run config.status --recheck,
+ not configure.
+ (install): Remove refs to install-info until it's released,
+ because people are getting confused.
+
+ * acgeneral.m4 (AC_OUTPUT): For config.status --recheck, echo
+ the configure command line that we run.
+
+ * acspecific.m4 (AC_PROG_FLEX): Use AC_HAVE_LIBRARY.
+
+Mon Jul 26 19:11:01 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check that both -lutil and -lkvm
+ exist before choosing them in hopes they will define getloadavg.
+
+ * autoheader.sh (frob): Put $2 and $3 in the expansion of
+ AC_HAVE_LIBRARY, so AC_DEFINE there is noticed.
+
+Mon Jul 26 14:21:33 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (INT_16_BITS): Check the obvious way, so it
+ doesn't pick up machines with 64 bit longs.
+
+Mon Jul 26 14:01:38 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for -lelf with
+ AC_HAVE_LIBRARY instead of checking for <elf.h> with AC_HEADER_CHECK.
+
+Mon Jul 26 13:58:39 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_SCO_INTL, AC_IRIX_SUN, AC_DYNIX_SEQ): Use
+ AC_HAVE_LIBRARY.
+
+Mon Jul 26 13:55:17 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (eval frob): Restore hairy sed use; we need it to
+ handle multi-line macro invocations.
+
+Mon Jul 26 00:50:43 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FIND_X): Quote the Imakefile.
+
+Sun Jul 25 08:17:11 1993 Jim Meyering (meyering@comco.com)
+
+ * acconfig.h (CRAY_STACKSEG_END): New #undef.
+
+Thu Jul 22 20:26:12 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * Version 1.5.
+
+ * acspecific.m4 (AC_FIND_X): Let make substitute any variables
+ in INCROOT and USRLIBDIR, instead of using sed.
+ From wojo@veritas.com (Jack Woychowski).
+
+ * acgeneral.m4 (AC_DEFINE): When printing value verbosely, use
+ double quotes and AC_DEFINE_QUOTE, like we do when assigning
+ the value, so shell variables get expanded the same way.
+
+ * acgeneral.m4 (AC_REVISION): New macro.
+ From wollman@uvm-gen.EMBA.UVM.EDU (Garrett Wollman).
+
+ * acgeneral.m4 (AC_DEFINE): Add newline before open brace.
+
+Thu Jul 22 17:07:15 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STAT_MACROS_BROKEN): New macro.
+ * acconfig.h (STAT_MACROS_BROKEN): New #undef.
+
+Wed Jul 21 15:44:32 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): Use AC_DEFINE_UNQUOTED so
+ shell var is replaced in rhs.
+
+Wed Jul 21 13:31:38 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acconfig.h (size_t, mode_t, off_t): Added.
+ * acspecific.m4 (AC_OFF_T): New macro.
+
+Tue Jul 20 15:39:44 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * autoheader.sh: Put header-file.in in comment at top.
+
+ * acconfig.h (NDIR): Added.
+
+Mon Jul 19 22:10:49 1993 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (info, dvi): New targets.
+
+Sun Jul 18 22:36:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (frob): Use `#' as the first line of each definition.
+ (eval frob): Totally simplify sed use to just handle "^@@@.*@@@$".
+
+Wed Jul 14 22:44:25 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acconfig.h: Restore blank lines between paragraphs.
+
+ * autoheader.sh (libs): New variable and frob to set it from
+ AC_HAVE_LIBRARY uses. Produce #undef HAVE_* for each $libs.
+
+Tue Jul 13 19:03:46 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acconfig.h: Sort the entries, like the comment says.
+
+ * acspecific.m4 (AC_GETLOADAVG): Only check for the AIX library
+ once, looking in both local and system dirs.
+ Consolidate SVR4 and Solaris cases.
+
+Mon Jul 12 20:33:36 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): If we find sys/dg_sys_info.h, do
+ AC_HAVE_LIBRARY on -ldgc.
+
+Sun Jul 11 00:43:51 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): BSD library is -lutil, not
+ -lutils, and requires -lkvm too.
+ Check for local AIX library using AC_HAVE_LIBRARY, not
+ AC_COMPILE_CHECK.
+ Un-nest some conditionals. Stop checking once we've
+ found a way to get getloadavg.
+
+Thu Jul 8 20:21:28 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * Makefile.in: Remove rules for making *.conf; make
+ Autoconf's configure script semi-normally.
+
+Wed Jul 7 14:37:35 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * autoheader.sh (--help): Print help message to stdout and exit 0.
+ (--version): Exit after printing version number.
+ * autoconf.sh (--version): Exit after printing version number.
+
+ * acspecific.m4 (AC_LONG_DOUBLE): Make sure that long double
+ isn't smaller than double, as in Ultrix 4.[23] cc.
+
+ * acgeneral.m4 (AC_REPLACE_FUNCS): Include ctype.h in the test
+ program to get stubs.
+
+ * acspecific.m4 (AC_FIND_X): New macro.
+
+Tue Jul 6 19:15:17 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Try ls -L first, in case
+ /dev/kmem is a symlink (as on Solaris).
+
+Wed Jun 30 22:08:22 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Remove spurious `then'.
+
+Fri Jun 25 23:16:42 1993 Paul Eggert (eggert@twinsun.com)
+
+ * acspecific.m4 (AC_CONST): Replace `p = <const char** expr>'
+ with `ccp = <const char** expr>'; the former wasn't ANSI C, and
+ was causing working compilers to be rejected.
+
+Fri Jun 25 13:26:34 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): Redirect rm's stderr to
+ /dev/null.
+
+Thu Jun 24 15:58:04 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.sh, autoheader.sh, acgeneral.m4 (AC_PREPARE): Undo
+ change of Jun 16 1993. Only set `LANG' and `LC_ALL' to "C" if
+ already set.
+
+Sat Jun 19 00:01:51 1993 Jim Meyering (meyering@comco.com)
+
+ * acgeneral.m4: Undefine m4's `format' builtin.
+ * acspecific.m4 (AC_HAVE_POUNDBANG): Make conftest executable,
+ but not necessarily writable by group or other.
+
+Thu Jun 17 21:10:33 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_CPP): Put double quotes around ${CC-cc},
+ not single quotes.
+ If --verbose option given, say what CPP is being set to.
+
+Wed Jun 16 17:50:00 1993 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_CPP): Make sure that `cc -E` doesn't
+ run the program through the C compiler too. Bob Olson
+ <olson@mcs.anl.gov> says it does on the NeXT.
+
+Wed Jun 16 16:17:05 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.sh, autoheader.sh, acgeneral.m4 (AC_PREPARE): Always set
+ `LANG' and `LC_ALL' environment variables to `C'.
+
+Fri Jun 11 14:29:31 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Test that cc works at all,
+ and only test it for -c -o if it does.
+
+Tue Jun 8 01:47:22 1993 Paul Eggert (eggert@twinsun.com)
+
+ * acgeneral.m4 (AC_OUTPUT): The line
+ DEFS="`echo \"$DEFS\" | sed 's%[&\\\]%\\\&%g'`"
+ doesn't work in some shells, which don't allow nesting
+ \"\" inside `` inside "", and which don't unescape \\\& in the
+ expected (?) way. Also, some versions of echo interpret
+ backslashes inside $DEFS. Put $DEFS into a temporary file
+ to avoid these portability minefields.
+
+Mon Jun 7 20:11:50 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): In setting KMEM_GROUP, use new sed
+ magic from friedman which should win with both meanings of ls -lg.
+
+Mon Jun 7 06:48:49 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (dist): Change gzipped tar file extension to `.gz'.
+ Use explicit --gzip option to tar to make sure tar uses the right
+ compression program (or else exits from failure to understand the
+ option).
+
+ * acgeneral.m4 (AC_OUTPUT): Don't split sed expr for exec_prefix
+ across two lines, since not all versions of sed understand that.
+
+ * acspecific.m4 (AC_HAVE_POUNDBANG): Complete rewrite which doesn't
+ depend on csh.
+
+Tue Jun 1 03:06:28 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.4.1 (not announced to the general public, but
+ a snapshot was put on the June '93 GNU CDROM).
+
+ * Makefile.in (dist): If ln fails (e.g. because of cross-device
+ links), mention on stdout that file is being copied.
+
+ * acgeneral.m4 (AC_PREPARE): Use `[$]*' in assignment to
+ configure_args to get shell positional args, rather than m4 args to
+ AC_PREPARE.
+ (AC_OUTPUT): Use `configure_args' in config.status
+ when invoked with --recheck, rather than $*.
+
+Mon May 31 13:12:56 1993 Paul Eggert (eggert@twinsun.com)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): rm $dir/conftest*,
+ not conftest*.
+
+Mon May 31 04:18:18 1993 Roland McGrath (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Quote libname in define.
+
+Sun May 30 19:52:24 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_SETVBUF_REVERSED): Pass (char *) main to
+ setvbuf instead of zero.
+
+Thu May 27 20:30:53 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREPARE): Save $* in shell var `configure_args'.
+ (AC_OUTPUT): Use $configure_args in place of $*.
+
+Wed May 26 16:19:51 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.texi (AC_PROG_INSTALL): Doc fix.
+ (Automatic Remaking): Put code fragment in @example ... @end example.
+
+Mon May 24 15:46:47 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (frob): Redefine AC_CONFIG_HEADER to set shell
+ variable `config_h'.
+ (config_h): New variable, initialize to "config.h" before frobbing.
+ (final output): Write ${config_h}.in.
+
+Sat May 22 17:45:19 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.4 released.
+
+Thu May 20 20:25:45 1993 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_IDENTITY): New function.
+ (AC_DEFINE_UNQUOTED): Use it to fix this; due to a
+ misunderstanding of m4, this was using its first argument as
+ the definition.
+
+Thu May 20 09:21:55 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_ALLOCA) [find_stack_direction]: Return the
+ value from the recursive call. If it worked before, it was by luck.
+ From Bruno Haible <haible@ma2s2.mathematik.uni-karlsruhe.de>.
+
+Tue May 18 23:40:21 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STDC_HEADERS): Require AC_PROG_CPP.
+
+Mon May 17 18:01:09 1993 Karl Berry (karl@hal.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Use variables gen_files and
+ gen_config in the loop that generates the output (Make)files,
+ instead of hardwiring the filenames.
+
+Sat May 15 17:23:19 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * autoconf.sh: Accept `-' to mean read stdin as input.
+ * autoheader.sh: Likewise.
+
+Fri May 14 12:41:02 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoheader.sh, acspecific.m4 (AC_PREPARE): If `LANG' environment
+ variable is set, reset its value to `C'. This is so `tr [...]'
+ works more portably.
+
+Thu May 13 22:56:20 1993 Paul Eggert (eggert@twinsun.com)
+
+ * acspecific.m4 (VOID_CLOSEDIR): Test closedir instead of assuming
+ that it works. E.g. dynix closedir yields garbage, but has no
+ prototype. Presumably Xenix closedir had the same problem, so
+ stop special-casing it.
+
+Wed May 12 20:25:36 1993 Jim Meyering (meyering@comco.com)
+
+ * acconfig.h: Add HAVE_LONG_DOUBLE.
+
+Wed May 12 15:07:36 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE_UNQUOTED): New macro.
+
+ * acgeneral.m4 (AC_FUNC_CHECK): Include ctype.h instead of stdio.h.
+ We want it only to define __stub_* in glibc. Using stdio.h lost
+ when it contained a conflicting prototype for $1; ctype.h has fewer
+ prototypes.
+
+ * acconfig.h: Add GETGROUPS_T.
+
+ * acspecific.m4 (AC_PROG_RANLIB): Use : instead of @: for no-op.
+ Some braindead make does bizarre magical things with @ in variables.
+
+Mon May 10 14:24:27 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_HAVE_POUNDBANG): New feature.
+
+ * acgeneral.m4 (AC_OUTPUT): Add more backslashes to character class
+ in DEFS filter (sigh).
+
+Sun May 9 14:04:31 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE_QUOTE): No AC_QUOTE_SED (was innermost).
+ (AC_HEADER_EGREP, AC_PROGRAM_EGREP, AC_TEST_CPP): Put a \ before
+ $DEFS in string to be evalled.
+ (AC_OUTPUT): Run DEFS through a sed filter that quotes things in it
+ from sed (woo woo!) before writing it into config.status.
+
+ * acspecific.m4 (AC_ALLOCA): Use AC_PROGRAM_EGREP to test for [CRAY
+ && !CRAY2], instead of AC_TEST_PROGRAM. No need to run a program
+ for this.
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): Extract the first word of $2
+ when looking for it in PATH, so it can be a program name with args.
+ Omit default assignment if $4 is empty.
+ Only write verbose msg if $1 was set nonempty.
+ * acspecific.m4 (AC_PROG_YACC): Pass 'bison -y' (quoted like that)
+ in list to AC_PROGRAMS_CHECK. Don't test for bison later to add -y
+ flag.
+
+Sat May 8 00:23:58 1993 Jim Meyering (meyering@comco.com)
+
+ * acgeneral.m4 (AC_REPLACE_FUNCS): Add a trailing newline in
+ code for AC_COMPILE_CHECK. Otherwise it got spurious failures.
+
+ * acspecific.m4 (TIME_WITH_SYS_TIME): New macro.
+
+ * Makefile.in (dist): Depend on Makefile. Use gzip instead
+ of compress. Link files individually instead of en masse;
+ if a link fails, use `cp -f' on the losing file.
+
+ * acspecific.m4 (AC_ALLOCA): Define CRAY_STACKSEG_END (the
+ name of a function used in alloca.c) for CRAY-1, CRAY X-MP,
+ and CRAY Y-MP.
+
+Fri May 7 15:56:26 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for mach/mach.h, but don't
+ disable nlist checks if found.
+
+Fri May 7 04:59:25 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Don't look for `install' in
+ /usr/ucb.
+
+Thu May 6 20:41:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_FUNC_CHECK): The test program should choke on
+ #ifdef __stub___$1 as well.
+ (AC_REPLACE_FUNCS): Make the test program choke on stubs.
+
+Wed May 5 20:43:13 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoconf.sh ($infile existence check): Fixed test for
+ nonemptiness of $print_version to not always be true.
+
+Wed May 5 17:22:42 1993 David J. MacKenzie (djm@wookumz.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREFIX, AC_PROGRAM_CHECK), acspecific.m4
+ (AC_PROG_INSTALL): If IFS wasn't set initially, give it a
+ normal default value. Happens on LynxOS (x86), says
+ Pete Klammer <PKLAMMER@cudnvr.denver.colorado.edu>.
+
+Wed May 5 13:22:52 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4: Undefine the `shift' builtin.
+
+ * acspecific.m4 (AC_PROG_YACC): Use AC_PROGRAMS_CHECK to check for
+ both bison and yacc, instead of two AC_PROGRAM_CHECK uses.
+
+ * autoheader.sh ($# -eq 0): Set var $tmpout to name of temp file,
+ send stdout there instead of config.h.in.
+ (just before exit): If $# -eq 0, then move $tmpout to config.h.in
+ if $status -eq 0, or remove $tmpout otherwise.
+
+ * acspecific.m4 (AC_STRCOLL): Rewritten to use a test program that
+ verifies that `strcoll' does vaguely reasonable ordering.
+
+Tue May 4 19:59:00 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_LONG_DOUBLE): Don't explicitely echo
+ `checking for long double'.
+
+Mon May 3 22:04:35 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_GETGROUPS_T): New macro.
+
+Sat May 1 22:37:55 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_LONG_DOUBLE): New macro.
+
+Wed Apr 28 15:52:42 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK): Write msg under --verbose.
+
+Thu Apr 22 18:24:40 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_FUNC_CHECK): Remove spurious `#endif' line at end.
+
+ * acgeneral.m4 (AC_WITH): Fix reversed args to patsubst.
+ Test $with_FOO, not $FOO.
+
+Wed Apr 21 18:14:19 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_QUOTE_TOKEN): New macro.
+ (AC_DEFINE_QUOTE): Use it.
+
+Tue Apr 20 18:02:46 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): Guess name of lex output file
+ and do AC_SUBST of `LEX_OUTPUT_ROOT'.
+ Add `dnl' after calling some autoconf macros.
+
+Mon Apr 19 15:46:24 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Do each compile a second time
+ after testing for the existence of the output. Some compilers
+ refuse to overwrite an existing .o file with -o, though they will
+ create one.
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): Changed lex input to two lines
+ of "%%", not just one.
+
+Sat Apr 17 17:26:12 1993 Jim Meyering (meyering@comco.com)
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Don't print `checking for ...'
+ message if first argument is empty.
+
+Sat Apr 17 01:18:41 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PID_T): provide self.
+ (AC_VFORK): Require AC_PID_T.
+
+Fri Apr 16 11:57:35 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PROGRAMS_CHECK): Take optional third arg; if
+ given, use it as the default value.
+
+Thu Apr 15 16:43:45 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_REPLACE_FUNCS): Print a message under --verbose.
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Use m4's patsubst and translit
+ instead of running sed and tr at runtime.
+
+ * acconfig.h: Add STACK_DIRECTION.
+
+Wed Apr 14 17:08:47 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_ALLOCA): If we chose alloca.c, run a test
+ program to define STACK_DIRECTION.
+
+Mon Apr 5 19:02:52 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_LONG_FILE_NAMES): Put test inside a for loop on
+ several directories: . /tmp $prefix $exec_prefix. Define
+ HAVE_LONG_FILE_NAMES iff long names win in all those directories.
+
+Sun Apr 4 18:38:23 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (%.info): Removed pattern rule.
+ (autoconf.info, standards.info): New rules.
+
+ * autoconf.sh (version_only): New variable, set nonempty for
+ `autoconf --version' with no input file.
+ (output writing): No output if $version_only is set.
+
+Wed Mar 31 17:33:57 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_CONST): Uncomment and fix second AIX test.
+
+Wed Mar 31 16:58:12 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Rewrite first AIX XL C 1.02.0.0 test.
+ Comment out bogosity in second AIX test.
+
+Wed Mar 31 12:45:59 1993 Jim Meyering (meyering@comco.com)
+
+ * acgeneral.m4 (AC_DEFINE): Put single quotes around definition
+ that is echoed with --verbose. AC_DEFINE(MVDIR, "$(libdir)/mvdir")
+ was generating losing code.
+
+Mon Mar 29 15:44:24 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STDC_HEADERS): Add a missing pair of [quotes].
+
+Mon Mar 29 14:54:00 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_DECLARE_YYTEXT): Change sed regexp so it won't
+ match other identifiers beginning with `yytext'.
+
+Sat Mar 27 00:11:16 1993 Paul Eggert (eggert@twinsun.com)
+
+ * acspecific.m4 (AC_CONST): Detect broken AIX XL C 1.2.0.0 compiler.
+
+Thu Mar 25 19:54:50 1993 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Remove single quotes from the C
+ program; they produce shell syntax errors.
+
+ * acgeneral.m4 (AC_DEFINE): Add a newline after "}" to prevent
+ commands following on the same line of configure.in from
+ generating shell syntax errors.
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Use explicit return types
+ to avoid warnings.
+ (AC_TEST_CPP): Add parens to force redirection order.
+ (AC_OUTPUT): Allow hostname to return bogus exit status.
+ From Jean-loup Gailly <jloup@chorus.fr>.
+
+Mon Mar 22 16:53:01 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoconf.sh: Use $M4, not m4 explicitly.
+ (M4): If unset in env, initialize to @m4@.
+ * autoheader.sh: Likewise.
+ * Makefile.in (M4): Define new variable.
+ (autoconf.conf, %.conf): Use it.
+ (editsh): New variable: sed command to replace @datadir@; also
+ replace @M4@ with $(M4).
+ (autoconf, autoheader): Use $(editsh) instead of explicit sed command.
+
+Mon Mar 22 13:08:10 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_CONST): IBM's /bin/cc under AIX-3.2 on an rs6000
+ rejects attempts to modify *any* member of a struct that has a
+ member declared like `const int *ap[2]'.
+
+Wed Mar 17 18:08:30 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoconf.sh, autoheader.sh (MACRODIR): Variable renamed to
+ AC_MACRODIR. Don't initialize it at runtime if it is already set
+ in the environment.
+ (MACROFILES): Don't set until after options are processed.
+ (print_version): New temp variable.
+
+ * autoconf.sh, autoheader.sh: Rewrote argument parsing.
+ Added `-m', `--macrodir', `-h', `--help', and `--' options.
+ Updated usage string.
+
+ * autoconf.texi: Documented --macrodir option and its effects for
+ both scripts.
+
+Tue Mar 16 09:10:48 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_CONST): Sun's SC1.0 ANSI compiler (acc) won't
+ increment a `const int *' pointer declared through a typedef.
+
+Mon Mar 15 16:08:42 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Grok `--verbose' flag; set verbose=yes.
+ (AC_DEFINE): Only echo "defining $1" if $verbose is set.
+
+Sun Mar 14 18:19:21 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Choose `installbsd' if we find
+ it, in preference to `install'.
+
+ * acspecific.m4 (AC_CONST): Add a check for `const int *foo' not
+ allowing modification of FOO (not *FOO).
+
+Fri Mar 12 15:27:53 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Remove conftest.sh before
+ creating it.
+
+Thu Mar 11 12:57:53 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE): Surround defn with { and }.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Split up $SEDDEFS into smaller
+ chunks, since some shells can't handle large here documents.
+ We write several commands in config.status to create conftest.sed
+ in pieces.
+
+Mon Mar 8 14:40:53 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_WITH): Don't echo anything.
+ Use the m4 patsubst fn instead of a run-time sed invocation to
+ massage $1.
+
+ * acspecific.m4 (AC_DIR_HEADER_CHECK): #include <sys/types.h>
+ before the header we are testing.
+
+ * acgeneral.m4 (AC_DEFINE): If $2 is empty, echo "defining $1 to be
+ empty", rather than "defining $1 to be ".
+
+ * acspecific.m4 (AC_DIR_HEADER_CHECK): New; subr of AC_DIR_HEADER.
+ (AC_DIR_HEADER): Use it to test for each possible header file.
+
+Tue Mar 2 01:06:25 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
+
+ * autoheader.sh: Don't use /p1/,/p2/ construct with sed---it's not
+ portable. Handle broken AIX sed that strips \n from hold space
+ when it shouldn't. From Jun Hamano <junio@twinsun.com>.
+
+Tue Mar 02 00:08:39 1993 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_CONST): Fix typo that caused spurious lossage
+ with /bin/cc from Irix-4. From Karl Berry.
+
+Fri Feb 26 17:14:58 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Add bizarre case that loses on SCO 3.2v4.
+
+Mon Feb 22 13:02:27 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_QUOTE_HERE, AC_QUOTE_SED): Change the quote
+ chars to { and } instead of nothing. Then use {} (empty quotes) to
+ separate the patsubst forms from the following dnl. Otherwise the
+ result of patsubst is pasted together with dnl and the result is
+ seen as a single token.
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Print msg saying what we are
+ doing before we do it.
+
+ * acgeneral.m4 (AC_PREFIX): Print out the choice made.
+ (AC_DEFINE): Print out the definition being done.
+
+ * acgeneral.m4 (AC_DEFINE_QUOTE): Add dnl at end of line.
+
+ * acspecific.m4 (AC_GETLOADAVG): Do changequote around listing of
+ /dev/kmem and sed frobbing which needs to use [ and ].
+
+Sun Feb 21 13:57:55 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh: Use brackets in tr range args.
+
+ * acspecific.m4 (AC_SETVBUF_REVERSED): Make the test fail if
+ setvbuf returns nonzero.
+
+ * acspecific.m4 (AC_GETLOADAVG): If we need to install setgid,
+ figure out what group owns /dev/kmem, and set KMEM_GROUP to that.
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Test plain `cc' after testing
+ $CC. We want to make sure both compilers grok -c -o.
+
+Thu Feb 18 18:05:14 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_QUOTE_{DQUOTE,SQUOTE,HERE,SED}): New macros.
+ (AC_DEFINE_{QUOTE,SEDQUOTE}): New macros; subrs of AC_DEFINE.
+ (AC_DEFINE): Use them to quote $2.
+
+Wed Feb 17 14:49:14 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_TIMEZONE): Fixed quoting in tzname check.
+ changequote inside quotes lost.
+
+Mon Feb 8 14:22:11 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acconfig.h (_ALL_SOURCE): Use #ifndef; AIX compiler way too dumb.
+
+Sun Jan 31 16:39:46 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_TIMEZONE): Put newlines before `#include ...'
+ in $defs value.
+
+Thu Jan 28 18:06:53 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acconfig.h (_ALL_SOURCE): Use "!defined (_ALL_SOURCE) ||
+ _ALL_SOURCE == 0" rather than "!_ALL_SOURCE", which bombs on the
+ AIX compiler.
+
+Mon Jan 25 12:09:43 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acconfig.h (HAVE_UNION_WAIT, SYS_SIGLIST_DECLARED): New #undef's.
+
+ * acconfig.h (_ALL_SOURCE): Surround with #if !_ALL_SOURCE.
+
+Fri Jan 22 15:08:33 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): If /usr/local/lib/libgetloadavg.a
+ exists, add -L/usr/local/lib to LDFLAGS.
+
+Fri Jan 22 12:49:11 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Only comment out the #undef NAME
+ part of the line, to avoid causing errors from existing comments.
+
+Thu Jan 21 14:50:20 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Use $libname in "checking for"
+ message, not $1, to avoid "checking for -l-lfoo".
+
+ * acgeneral.m4 (AC_PREPARE): In compile defn, include $CFLAGS.
+
+ * acgeneral.m4 (AC_OUTPUT): Broke AC_CONFIG_NAME writing out into:
+ (AC_OUTPUT_HEADER): New macro broken out of AC_OUTPUT.
+ Add to conftest.sed a new sed command to turn #undef's into comments.
+
+ * acgeneral.m4 (AC_OUTPUT): Use new shell variable, $maxsedlines,
+ for max number of lines to feed to one sed invocation.
+ Lower this limit to 20; UTekV 3.2e can't cope with 40.
+
+Tue Jan 19 13:21:02 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * Version 1.3.
+
+Fri Jan 15 16:28:18 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_CONFIG_HEADER, AC_HEADER_EGREP,
+ AC_TEST_PROGRAM): Make DEFS always contain -D commands,
+ not C code.
+
+Thu Jan 14 17:05:17 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for -lkvm; don't assume it.
+
+Thu Jan 14 16:46:41 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (selecting $syms from $TEMPLATES): Use sed to
+ replace lines containing only blanks with empty lines.
+
+Thu Jan 14 15:15:31 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_MODE_T): New macro.
+
+ * acgeneral.m4 (AC_OUTPUT): Check for grep -c returning
+ nothing (AIX 3.1) as well as returning 0.
+
+Wed Jan 13 16:05:59 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_FUNC_CHECK): Add missing #endif.
+
+ * acgeneral.m4 (AC_OUTPUT): Use sed, not basename.
+ From Francois Pinard.
+
+Wed Jan 13 15:49:18 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Set exec_prefix to ${prefix}, not
+ $(prefix); it now works in both makefiles and shell scripts.
+
+Wed Jan 13 15:29:04 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * autoheader.sh: If input is empty, don't print all of
+ acconfig.h. From Francois Pinard.
+
+ * acgeneral.m4 (AC_OUTPUT): Have config.status check all of its
+ args for validity.
+
+Tue Jan 12 11:11:45 1993 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Preserve whitespace around = in prefix
+ and exec_prefix assignments.
+
+ * acspecific.m4 (AC_GETLOADAVG): Values for getloadavg_missing were
+ reversed.
+
+Fri Jan 8 18:45:59 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Make config.status not complain with
+ usage msg when given no args.
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Say "checking for -lfoo", not
+ just "checking for foo".
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Remove excess quoting around $2
+ and $3.
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for getloadavg library, both
+ a normally installed one, and one in /usr/local/lib.
+ After figuring out params for getloadavg.c, figure out whether it
+ defined LDAV_PRIVILEGED, and if so, set NEED_SETGID to true, and
+ define GETLOADAVG_PRIVILEGED.
+ * acconfig.h: Added GETLOADAVG_PRIVILEGED.
+
+Fri Jan 8 16:16:35 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE, AC_OUTPUT): Restore the third sed string.
+
+ * acgeneral.m4 (AC_FUNC_CHECK): Use __stub_funcname.
+
+ * autoheader.sh: Use Autoconf version number.
+
+ * acgeneral.m4 (AC_OUTPUT): Diagnose usage errors for
+ config.status. Use grep -c to count nonempty lines instead of
+ test -s.
+
+ * acspecific.m4 (AC_GETLOADAVG): Use AC_HAVE_LIBRARY.
+
+Wed Jan 6 19:54:47 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * autoheader.sh (coverage check): Use $TEMPLATES in error msg, not
+ hard-wired "config.h".
+
+Wed Jan 6 18:24:41 1993 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): If AC_CONFIG_NAME, change
+ @DEFS@ to -DHAVE_CONFIG_H in Makefiles etc. Idea from Roland McGrath.
+
+ * acgeneral.m4 (AC_FUNC_CHECK): If __STUB_funcname is defined,
+ assume the function isn't present.
+
+ * acgeneral.m4 (AC_OUTPUT): Make no args to AC_OUTPUT work
+ again. From Ian Lance Taylor.
+
+ * acspecific.m4 (AC_CONST): Fix quoting problem.
+
+ * acconfig.h [const]: New addition.
+
+Thu Dec 31 17:56:18 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): New macro from Noah Friedman.
+
+ * acconfig.h: Renamed from config.h.
+
+ * autoheader.sh: Renamed from autohead.sh.
+ Support a local acconfig.h.
+ Use \\012 instead of \\n for tr for portability.
+
+Thu Dec 31 12:30:34 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * config.h: Added #undef vfork.
+
+Tue Dec 29 14:26:43 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Use cat rather than echo to
+ create conftest.c, to avoid " problems.
+
+Fri Dec 25 15:07:06 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Don't define HAVE_CONST.
+
+ * acgeneral.m4 (AC_OUTPUT, AC_DEFINE): Combine the two sed
+ commands for #undef lines.
+ * acgeneral.m4 (AC_PROGRAM_EGREP, AC_TEST_PROGRAM,
+ AC_TEST_CPP, AC_OUTPUT), acspecific.m4 (AC_PROG_CC): Put >
+ before << when using both, to avoid HP-UX sh bug.
+
+Wed Dec 23 20:47:53 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Use if, not &&, for --with.
+ From Jan Brittenson.
+
+Mon Dec 21 17:13:57 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Use sed instead of head and tail.
+ Trap to remove the temp files.
+
+ * acgeneral.m4 (AC_OUTPUT): Quote DEFS assignment.
+ From Ian Lance Taylor.
+
+Mon Dec 21 14:27:44 1992 Jim Meyering (meyering@comco.com)
+
+ * acspecific.m4 (AC_STDC_HEADERS): Make sure ctype.h macros
+ are ANSI. Nest tests so we don't need shell temporary variable.
+
+Sun Dec 20 18:12:33 1992 Roland McGrath (roland@albert.gnu.ai.mit.edu)
+
+ * Makefile.in (%.h: %.in): New rule using autohead.
+ (all): Do autohead.
+ (install): Install autohead and config.h.
+ (autohead): New rule.
+ (DISTFILES): Added autohead.sh.
+ * autohead: New script.
+
+Fri Dec 18 00:21:23 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HAVE_FUNCS, AC_HAVE_HEADERS): Change method
+ of tr quoting to keep old shells happy. From Ian Lance Taylor.
+
+ * acgeneral.m4 (AC_DEFINE): Add to SEDDEFS.
+ (AC_OUTPUT): Use sed instead of awk.
+ From Ian Lance Taylor.
+
+Mon Dec 14 14:33:29 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STDC_HEADERS): Check for string.h
+ declaring memchr.
+
+ * acgeneral.m4 (AC_NOTICE): Fix comment.
+
+Fri Dec 11 17:59:23 1992 David J. MacKenzie (djm@kropotkin.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_ALLOCA): Don't use libPW; it causes too
+ much trouble.
+
+Wed Dec 9 14:04:30 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * config.h: Added HAVE_SYS_WAIT, HAVE_WAITPID, SVR4, UMAX,
+ [ugp]id_t, UMAX4_3, DGUX.
+
+Thu Dec 3 13:37:17 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Ignore AFS install.
+ From James Clark, jjc@jclark.com.
+
+Tue Nov 24 07:47:45 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_LEX, AC_DECLARE_YYTEXT, AC_VFORK, AC_WAIT3,
+ AC_INT_16_BITS, AC_WORDS_BIGENDIAN, AC_ARG_ARRAY): End with a newline.
+
+ * acspecific.m4 (AC_DIR_HEADER): If ndir.h exists and the other
+ choices don't, define NDIR.
+
+Sat Nov 21 00:14:51 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_RETSIGTYPE): Instead of grepping for the signal
+ declaration, try redeclaring it and see if we get an error.
+ Always define RETSIGTYPE, not just if it's int.
+ From Ian Lance Taylor.
+
+Fri Nov 20 17:06:09 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE): Only put -D option in quotes if it
+ actually contains blanks.
+
+Thu Nov 19 17:18:40 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): Set a shell var for --with-*.
+ (AC_WITH): New macro.
+
+ * acspecific.m4 (AC_CONST): If const works, define HAVE_CONST.
+
+ * acspecific.m4 (AC_ALLOCA): Don't use libPW on HP-UX.
+
+Wed Nov 18 17:36:08 1992 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_DEFINE): When writing a -D with a value,
+ surround it with 's so the value can contain spaces.
+
+Thu Nov 12 22:49:35 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_CC): Don't add -O to CC if GNU C.
+ (-O2, or nothing, might be more appropriate.)
+
+Sun Nov 8 23:33:23 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * acspecific.m4 (AC_GETLOADAVG): Check for dwarf.h for general
+ svr4, then elf.h for Solaris 2, which needs additional libraries.
+
+Thu Nov 12 22:18:54 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS): --exec_prefix -> --exec-prefix.
+
+Tue Nov 10 16:15:10 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4: undef m4 `include' builtin.
+
+ * acspecific.m4 (AC_STDC_HEADERS): Don't test for limits.h
+ due to Ultrix conflict with float.h.
+
+Thu Oct 29 16:16:11 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PARSEARGS, AC_PREPARE): New macros, broken out
+ parts of AC_INIT.
+ (AC_INIT): Use them.
+
+Thu Oct 22 20:48:12 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_INSTALL): Comment out arg to `:'.
+ AIX doesn't like it.
+
+Wed Oct 14 12:41:02 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * Version 1.2.
+
+ * acspecific.m4 (AC_INSTALL): Avoid the AIX install script.
+
+ * acspecific.m4 (AC_RESTARTABLE_SYSCALLS): Wait for child if
+ sys calls are not restarted, to avoid leaving the child still
+ running. From Ian Lance Taylor.
+
+Tue Oct 13 15:43:56 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_CONST): Add more tests for brokenness.
+ From Jim Meyering.
+
+ * acgeneral.m4: Use % instead of ? to avoid shell variable expansion.
+
+Fri Oct 2 06:55:05 1992 David J. MacKenzie (djm@goldman.gnu.ai.mit.edu)
+
+ * acgeneral.m4: Use ? instead of , to separate parts of sed arg.
+
+Mon Sep 14 12:33:41 1992 David J. MacKenzie (djm@apple-gunkies.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STDC_HEADERS): Also check for float.h.
+
+ * acspecific.m4 (AC_TIMEZONE): Protect [] from being quotes.
+
+Thu Sep 10 17:12:10 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Include the hostname in config.status.
+
+ * acgeneral.m4 (AC_OUTPUT): Use a separate flag in the awk
+ script instead of checking for non-empty values, so things
+ like defining const as empty work. From
+ Steve Emmerson <steve@unidata.ucar.edu>.
+
+Fri Aug 28 18:51:13 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_INIT): If there's no path on $0, use '.'.
+
+Thu Aug 27 16:15:14 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * config.h: New file.
+
+ * acgeneral.m4 (AC_INIT): Look for source files in the
+ directory containing `configure', if not given explicitly.
+
+ * acspecific.m4 (AC_TIMEZONE): Adjust tzname decl for RS6000.
+
+ * acspecific.m4 (AC_GETLOADAVG): Don't use double quotes in
+ the test program.
+
+Thu Aug 27 15:26:49 1992 Roland McGrath (roland@wookumz.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): Don't check nlist.h if we found
+ one of specific things.
+
+Mon Aug 24 16:22:45 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.1.
+
+ * acspecific.m4 (AC_TIMEZONE): Include time.h. Don't
+ declare tzname if it's a macro. From Jim Meyering.
+
+Fri Aug 21 14:12:35 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_ALLOCA): Check whether the alloca defined by
+ alloca.h works when given a non-constant argument.
+
+ * acspecific.m4 (AC_GETLOADAVG): Define NLIST_STRUCT and
+ NLIST_NAME_UNION if appropriate.
+
+ * acgeneral.m4 (AC_OUTPUT): If no args are given, omit the loop to
+ produce output files.
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Add a call to exit to try to
+ suppress core dumped message. From Ian Lance Taylor.
+
+ * acgeneral.m4 (AC_PREFIX): Only print the message if prefix
+ hasn't been set. From James Clark.
+
+ * acspecific.m4 (AC_SIZE_T, AC_UID_T, AC_PID_T,
+ AC_RETSIGTYPE): Print a message saying what it's checking for.
+ (AC_SIZE_T): Define size_t to be unsigned, not int, for
+ ANSI-friendliness.
+
+ * acspecific.m4 (AC_GETLOADAVG): Just check for elf.h, not
+ dwarf.h too.
+
+ * autoconf.sh: Exit with status 1 if there are unresolved macros.
+ Isolate the pattern to make adding other prefixes easy.
+ Look for aclocal.m4 in . as well as MACRODIR.
+
+Tue Aug 18 16:35:46 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STRCOLL): New macro.
+
+Tue Aug 18 15:22:45 1992 Roland McGrath (roland@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_GETLOADAVG): elf.h implies SVR4.
+
+Mon Jul 27 14:20:32 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Check for cross-compiling
+ was missing "test -n". From Ian Lance Taylor.
+
+Sun Jul 26 16:25:19 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_SUBST): Support multiple substitutions in a
+ line.
+
+Mon Jul 20 01:08:01 1992 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Version 1.0.
+
+
+ -----
+
+ Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
diff --git a/ChangeLog.2 b/ChangeLog.2
new file mode 100644
index 0000000..30571bf
--- /dev/null
+++ b/ChangeLog.2
@@ -0,0 +1,12868 @@
+2001-05-21 Akim Demaille <akim@epita.fr>
+
+ Version 2.50.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at: s/undefined macro/possibly undefined macro/.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SEARCH_LIBS): Unobfuscate.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh: s/undefined macro/possibly undefined macro/.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Programs): Explain the
+ `AC_PROG_LEX invoked multiple times' message.
+ Reported by Rainer Orth as PR Autoconf/177.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh: Fix file names used in error messages.
+ Reported by Rainer Orth as PR Autoconf/178.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (AC_PROG_CPP via CC): Invoke AC_PROG_CC instead
+ if using `cc'.
+
+2001-05-19 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (GNU Fortran 77): Don't AS_EXIT when using
+ AT_CHECK_MACRO since it skips tests embedded in configure.ac.
+ Remove files which might have been created when invoking the
+ compiler.
+ Reported by Nicolas Joly.
+
+2001-05-14 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Shellology): Document a quirk in
+ here-document handling on OpenBSD.
+
+2001-05-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_PREPROC_WORKS_IFELSE): No longer use the
+ `maybe' strategy: first try cpp's exit status, then its stderr.
+ (AC_PROG_CPP, AC_PROG_CXXCPP): Adjust.
+ * tests/compile.at (AC_PROG_CPP via CC): Simplify mycc.
+ Remove unrelated code.
+
+2001-05-10 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (AC_PROG_CPP via CC): New.
+ From Daniel Carroll.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ If AC_PROG_CC is invoked but not AC_PROG_CPP, then CPPFLAGS is not
+ AC_SUBST'ed.
+ Reported by Ralf Corsepius.
+
+ * aclang.m4 (_AC_ARG_VAR_CPPFLAGS, _AC_ARG_VAR_LDFLAGS): New.
+ (AC_PROG_CC, AC_PROG_CPP, AC_PROG_CXX, AC_PROG_CXXCPP)
+ (AC_PROG_F77): Use them.
+
+2001-04-27 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_PREPROC_WORKS): Rename and extend as...
+ (_AC_PROG_PREPROC_WORKS_IFELSE): this.
+ Adjust to admit
+ (AC_PROG_CPP, AC_PROG_CXXCPP): Use it.
+ Reported by Daniel Carroll.
+
+2001-04-26 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Use two backslashes
+ before double quotes in the copyright notice, since the native
+ OpenBSD shell removes single backslashes in here-documents with
+ unquoted delimiters.
+
+2001-04-25 Nicolas Joly <njoly@pasteur.fr>
+
+ * acgeneral.m4 (_AC_RUN_IFELSE): Clean `core' files.
+
+2001-04-24 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi (The GNU build system): Add this chapter
+ introducing Autoconf+Automake+Libtool, and fix references in the
+ introduction.
+
+2001-04-24 Akim Demaille <akim@epita.fr>
+
+ On HP-UX 10 `ranlib --version' creates `./--version'.
+ Reported by Bob Proulx and Jim Meyering.
+
+ * acgeneral.m4 (AC_CHECK_PROG, AC_PATH_PROG): Do not invoke the
+ program with --version.
+
+2001-04-22 Jim Meyering <meyering@lucent.com>
+
+ * acfunctions.m4 (AC_FUNC_MEMCMP): Remove `int main () {' and the
+ trailing `}', since AC_LANG_PROGRAM provides them.
+
+2001-04-20 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.49f.
+
+2001-04-20 Akim Demaille <akim@epita.fr>
+
+ Version 2.49e.
+
+2001-04-20 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Libtool): Ignore configure's stderr.
+
+2001-04-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * acgeneral.m4 (AC_OUTPUT): Close the descriptor before running
+ config.status so config.log is properly created on MS-DOS.
+
+2001-04-20 Nicolas Joly <njoly@pasteur.fr>
+
+ * tests/atspecific.m4 (AT_CHECK_AUTOUPDATE): Be robust to missing
+ or broken autoupdate.
+ * tests/tools.at: Likewise.
+ * tests/Makefile.am (CLEANFILES): Also clean Libtool files.
+
+2001-04-18 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * acgeneral.m4 (_AC_INIT_SRCDIR): Handle
+ backslashes (DOS paths) for $ac_confdir and $srcdir.
+
+2001-04-17 Akim Demaille <akim@epita.fr>
+
+ Don't mess with FDs.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS_FDS): Remove, replace with
+ inline setting up of AS_MESSAGE_FD.
+ (AS_MESSAGE_LOG_FD): Do not define, so that AS_MESSAGE does not
+ output in it before...
+ (_AC_INIT_CONFIG_LOG): here, which is run after the handling of
+ options.
+
+2001-04-18 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Replace documentation for obsolete
+ AC_LIBOBJ_DECL with clearer documentation for AC_LIBSOURCE
+ and AC_LIBSOURCES, improving the AC_LIBOBJ docs as well.
+
+2001-04-17 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Fixes for punctuation and grammar.. Replace
+ "..." with "@dots{}" except when "..." is in literal code.
+
+2001-04-17 Nicolas Joly <njoly@pasteur.fr>
+
+ * acgeneral.m4 (_AC_LINK_IFELSE): Be sure to remove temporary
+ `conftest.$ac_objext', as some compilers may forget it.
+
+2001-04-16 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_INIT_VERSION): Use AC_PACKAGE_NAME and
+ AC_PACKAGE_VERSION only if they are defined.
+ (_AC_OUTPUT_CONFIG_STATUS): Likewise.
+
+2001-04-15 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Alter response on
+ `config.status --version' to be more compliant with the GNU Coding
+ Standards.
+
+2001-04-13 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Still more minor modifications for clarity,
+ felicity, and grammar.
+
+2001-04-11 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi (AC_F77_WRAPPERS): Mention C++ as well as C.
+ In the example, don't #ifdef F77_FUNC before using it, as that
+ would push any errors to link-time rather than compile-time; note
+ that the user can test this to invoke alternative behavior.
+
+2001-04-11 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (Task script): Be sure that `forbidden.rx' and
+ `allowed.rx' exist when AWK loads then.
+ Reported by Rainer Orth.
+
+2001-04-11 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: A few more minor modifications for clarity,
+ grammar, and formatting.
+
+2001-04-10 Lars J. Aas <larsa@sim.no>
+
+ * Makefile.am: AC_SUBST fixes for PACKAGE_NAME, VERSION, PACKAGE...
+ * configure.in: Moved here.
+ Suggested by Akim Demaille and Raja R Harinath.
+
+2001-04-10 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Re-enable logging to
+ `config.log' from `config.status', but delay logging till after
+ command line option processing.
+
+2001-04-10 Lars J. Aas <larsa@sim.no>
+
+ * autoupdate.in (print_usage): print "\ at end of line does not
+ work as expected, so change block to here-doc instead.
+ (print_version): Same.
+
+2001-04-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Replace all tab characters with (8) spaces,
+ lest the formatting of example code, etcetera, be messed up.
+
+2001-04-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Rephrase various parts for clarity, felicity,
+ and/or grammar.
+
+2001-04-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Clean up cache documentation: Document
+ --config-cache/-C option, and recommend instead of --cache-file.
+ Indent example AC_CACHE_VAL macros for clarity. Add new
+ "Cache Checkpointing" section for AC_CACHE_SAVE (and
+ AC_CACHE_LOAD), so that the "Cache Files" section focuses solely
+ on features visible to end-users (e.g. to better fit the cross
+ references). Various minor rewordings for clarity, felicity,
+ and/or grammar.
+
+2001-04-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Revert to "configure.in" in the history, since
+ "configure.ac" wasn't used in the past, and in any case it is
+ probably a good idea to preserve this section verbatim.
+
+2001-04-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * AUTHORS: Fix grammar.
+
+2001-04-09 Lars J. Aas <larsa@sim.no>
+
+ * Makefile.am: Manual addition of @PACKAGE@ substitution variable
+ needed by dist rules. Added explanatory comment.
+ Problem reported and comment suggested by Raja R Harinath.
+
+2001-04-06 Lars J. Aas <larsa@sim.no>
+
+ * Makefile.am: Manual addition of @VERSION@ substitution variable
+ as a temporary Automake fix. Reported by Raja R Harinath.
+
+2001-04-04 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral (_AC_INIT_CONFIG_LOG): New macro for setting up the
+ config.log file.
+ (_AC_INIT_DEFAULTS_FDS): Log to /dev/null instead of config.log.
+ (AC_INIT): Invoke _AC_INIT_CONFIG_LOG after _AC_INIT_VERSION.
+
+2001-04-04 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Produce better version
+ information for config.log header.
+ (_AC_INIT_VERSION): Produce better version information for
+ `configure --version'.
+
+2001-03-30 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Use "invalid" instead of "illegal," as
+ suggested by the GNU coding standards.
+
+2001-03-30 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4sh.m4 (AS_BASENAME): New.
+ (AS_SHELL_SANITIZE): Set `$as_me'.
+ * acgeneral.m4: Don't set as_me; AS_SHELL_SANITIZE now does this.
+ * tests/atgeneral.m4: Likewise.
+ (AT_INIT): Use $PATH_SEPARATOR for walking the path.
+ * autoconf.sh: Be DOS-friendly when setting as_me and M4.
+ Add quotes to support spaces in $tmp.
+ Work around problem in DJGPP port of awk by using a temporary file.
+ * autoheader.sh: Be DOS-friendly when setting as_me.
+ * autoreconf.sh: Be DOS-friendly when setting as_me, dir and
+ template_dir.
+
+2001-03-27 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (AC_INIT_VERSION): Improved version information string
+ for `configure --version'.
+
+2001-03-27 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh (config_h): Be robust to new lines when extracting
+ the first argument of AC_CONFIG_HEADERS.
+ Reported by Lars J. Aas.
+
+2001-03-27 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi: Minor tweaks.
+
+2001-03-27 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * Makefile.am, configure.in: autoupdate is a Perl script.
+
+2001-03-20 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about
+ `touch'.
+ From Jim Meyering, Volker Borchert, and Peter Eisentraut.
+
+2001-03-20 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Libtool): Don't skip 1.3.5.
+ Invoke AC_CANONICAL_SYSTEM ---for some reason AC_CANONICAL_HOST is
+ not enough for 1.3.5.
+ From Lars J. Aas.
+
+2001-03-20 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4: s/Testing suite/Test suite/g.
+ From Jim.
+ (AT_INIT): Adjust the error message on invalid options.
+ * tests/foreign.at (Libtool): Skip Libtool 1.3 too.
+
+2001-03-20 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi: A couple of grammatical tweaks.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.49e.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ Version 2.49d.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (AWK portability): Don't rely on `empty'.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Fix the at_diff test.
+ Reported by Nicolas Joly.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_PREPROC_IFELSE): Redirect stdout out of the
+ _AC_EVAL_STDERR invocation to avoid `illegal io' on Ultrix.
+ Reported by Harlan Stenn, and fixed by Jim Meyering.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Don't hard code
+ `/bin/sh', use $SHELL.
+ From Paul Eggert.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_STRERROR_R): Update to
+ fileutils-4.0.42's.
+
+2001-03-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Don't always create `empty', rather
+ do it only when diffing `/dev/null' is not supported.
+ And use `at-devnull' instead of `empty'.
+
+2001-03-13 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl, autoupdate.in: Use `use' instead of `require' to
+ require some version of Perl, so that the test is performed at
+ compile time, not run time.
+ Suggested by Nicolas Joly.
+
+2001-03-13 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/aclocal.m4: Fix some typos. Also ignore $PATH_SEPARATOR.
+ * tests/atconfig.in: Set PATH_SEPARATOR to the proper
+ path separator. Set SHELL here...
+ * tests/atgeneral.m4: ... instead of here. Use $PATH_SEPARATOR
+ when setting AUTOTEST_PATH. Don't default tests to "all" before
+ deciding whether the help text is needed.
+ * tests/semantics.at: Use the correct path separator.
+
+2001-03-13 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi: Expand section on DOS issues.
+ Add link to the `doschk' package. Fix minor typo.
+ Clean up white spaces.
+
+2001-03-13 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_PROG_F77_C_O): define F77_NO_MINUS_C_MINUS_O
+ when test fails, not when it succeeds(!).
+
+2001-03-13 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (AWK portability): Use AT_CHECK to check for GNU
+ AWK so that there is always a AT_CHECK between
+ AT_SETUP/AT_CLEANUP.
+ Reported by Nicolas Joly.
+
+2001-03-13 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at: Be sure to remove configure.ac~.
+
+2001-03-13 Raja R Harinath <harinath@cs.umn.edu>
+
+ * autoupdate.in (File::Basename): Use package.
+ (%ac_macros, %au_macros): Save only base filenames.
+
+2001-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT): In the AU_DEFUN definition, don't try
+ to issue an obsolete message, it can't work for macros being
+ defined both with AC_DEFUN and AU_DEFUN.
+ Hence do it in the AC_DEFUN definition.
+
+2001-03-06 Pavel Roskin <proski@gnu.org>
+
+ * tests/base.at (AC_TRY_*): Escape `^' - it's a pipe command
+ separator on Tru64 v5.1.
+ Reported by Nicolas Joly.
+
+2001-03-05 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Register at-setup-line and
+ at-check-line for removal.
+ Check for the presence of at-check-line only when $at_test was
+ really a test.
+ Reported by Pavel.
+
+2001-03-04 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_INIT): s/am_me/as_me/. Quote AT_CHECK
+ in the error message.
+
+2001-03-02 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Quote `$$*' correctly.
+
+2001-02-28 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Warn when at-check-line is
+ missing.
+ * tests/tools.at (Syntax of the scripts): Use AT_CHECK to test
+ /bin/sh -n. Exit 77 on failure.
+ Reported by Harlan Stenn.
+
+2001-02-28 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_FS_SEPARATORS): Use `.;.' instead
+ of `.;`pwd`': if pwd is c:/foo, we might walk through `.:c'
+ (fails), and then `/foo' which might succeed, resulting in
+ believing `;' is the right path separator.
+
+2001-02-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AH_VERBATIM, AH_TEMPLATE): New, use AS_ESCAPE, not
+ _AS_QUOTE.
+ (_AH_VERBATIM_OLD, _AH_TEMPLATE_OLD): New, used for bugward
+ compatibility in...
+ (AC_DEFINE, AC_DEFINE_UNQUOTED): here.
+
+2001-02-26 Pavel Roskin <proski@gnu.org>
+
+ * autoupdate.in (&mktmpdir): Strip the newline from the output
+ of mktemp.
+
+2001-02-26 Pavel Roskin <proski@gnu.org>
+
+ * man/Makefile.am: autoupdate.1 now depends on autoupdate.in.
+
+2001-02-25 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * autoupdate.in: Support DOS paths. Initialize $tmp to
+ avoid warnings. Default $autoconf to 'autoconf'.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.in (&END): Try to preserve the exit status.
+ Use backquotes where more readable.
+ Internal details should be dumped when $debug, not when $verbose.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.in (&mktmpdir): New.
+ (&END): Remove $tmp.
+ (&parse_args): Handle -d and -l.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Remove conf$$* on exit.
+ * m4sh.m4 (_AS_LN_S_PREPARE, _AS_BROKEN_TEST_PREPARE):
+ s/conftest/conf$$/ to avoid race conditions.
+ From Lars J. Aas.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PROG_INSTALL): Use ac_path_separator.
+ Restore the IFS earlier.
+ Suggested by Tim Van Holder.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * m4sh.m4 (_AS_TEST_PREPARE): Rename as...
+ (_AS_BROKEN_TEST_PREPARE): this.
+ (_AS_TEST_PREPARE): New dummy but working version of this macro.
+ * acspecific.m4 (AC_PROG_INSTALL): Use AS_EXECUTABLE_P.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.in (&parse_args): Support `-'.
+
+2001-02-25 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.in: Less Bournisms, more Wallisms.
+
+2001-02-23 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_FS_SEPARATORS): Fix typo: s/;/:/
+ * acgeneral.m4 (_AC_INIT_PREPARE_FS_SEPARATORS): Revert that change.
+ There was no typo.
+
+2001-02-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Typos and formatting changes.
+
+2001-02-21 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Use `AS_EXIT(0)' instead
+ of `exit 0' when exiting config.status.
+
+2001-02-21 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi: Add new node discussing issues related to
+ file systems (DOS, specifically). Document DJGPP's bash's special
+ handling of $PATH_SEPARATOR.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.in: New. Replaces autoupdate.sh.
+
+2001-02-21 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl (&find_configure_ac): New.
+
+2001-02-20 Paul Martinolich <martinol@datasync.com>
+
+ * autoscan.pl (check_configure_ac): Pretty missing macro warnings
+ output.
+
+2001-02-19 Paul Eggert <eggert@twinsun.com>
+
+ * aclang.m4 (AC_C_INLINE): Define "inline" to empty if the
+ compiler doesn't support 'static inline'. This is needed for
+ Encore Umax-3.0.9.16b.
+
+2001-02-19 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_COMPILER_WORKS): Rename as...
+ (_AC_COMPILER_EXEEXT_WORKS): this. Use the `a.out' or `a.exe'
+ left by _AC_COMPILER_EXEEXT_DEFAULT to check if the compiler works.
+ (_AC_COMPILER_EXEEXT_CROSS): Extract from the above macro.
+ (_AC_COMPILER_EXEEXT): Use them.
+ Adjust all the compiler looking macros to check for EXEEXT
+ *first*, then OBJEXT.
+ Set ac_exeext yourself.
+ (_AC_COMPILER_EXEEXT_O): Don't.
+
+2001-02-07 Pavel Roskin <proski@gnu.org>
+
+ * tests/atspecific.m4 (AT_CONFIGURE_AC): Double quote constant
+ part of the second argument to AT_DATA.
+ * tests/compile.at (AC_PROG_CPP with warnings): Fix underquoting
+ in a call to _AT_CHECK_AC_MACRO.
+ (AC_PROG_CPP without warnings): Likewise.
+
+2001-02-11 Jim Meyering <meyering@lucent.com>
+
+ Ensure that even `autoscan --version' fails when e.g.,
+ writing to a full disk.
+ * autoscan.pl (END): New function.
+
+ * autoscan.pl: Misc. clean-up:
+ Move declarations of variables into the scope where they're used.
+ Use `qw'. Don't use `$_'.
+
+2001-02-06 Paul Eggert <eggert@twinsun.com>
+
+ * acspecific.m4 (AC_SYS_LARGEFILE_TEST_INCLUDES): Don't reject
+ C++ compilers that are masquerading as C compilers, and that
+ incorrectly reject large integers.
+
+2001-02-07 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_OUTPUT): Remove $(srcdir), ${srcdir} and
+ @srcdir@ from VPATH if srcdir is "." and replace blank VPATH
+ lines with empty lines to preserve line numbers.
+ Original version by Derek Price.
+
+2001-02-07 Derek Price <derek.price@openavenue.com>
+
+ * acgeneral.m4 (_AC_LIBOBJ): Call AC_LIBSOURCE with '.c' extension
+ appended to function name.
+
+2001-02-06 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_RUN_LOG, _AC_RUN_LOG_STDERR, AC_RUN_LOG): New.
+ (_AC_EVAL_STDERR, _AC_EVAL): Use them.
+ (_AC_INIT_PREPARE_FS_SEPARATORS): Use AC_RUN_LOG.
+
+2001-02-05 Derek Price <derek.price@openavenue.com>
+
+ * autoheader.sh: Only set config_h for the first call to
+ AC_CONFIG_HEADERS.
+
+2001-02-05 Jim Meyering <meyering@lucent.com>
+
+ * acspecific.m4 (AC_SYS_LARGEFILE): Add ULL suffix to the
+ integer constants.
+
+2001-02-05 Akim Demaille <akim@epita.fr>
+
+ acfunctions.m4 was still using the old AC_LIBOBJ_DECL.
+ Reported by Derek R. Price.
+
+ * tests/semantics.at (AC_REPLACE_FUNCS): New test.
+ * acfunctions.m4 (AC_REPLACE_FUNCS, _AC_LIBOBJ_ALLOCA): Use
+ AC_LIBSOURCES.
+
+2001-02-03 Pavel Roskin <proski@gnu.org>
+
+ * tests/base.at (AC_TRY_COMMAND): Add a colon between "then" and
+ "else". Separate commands inside AC_TRY_COMMAND with semicolons.
+ From Nicolas Joly.
+
+2001-02-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_LOG_COMPLETE): Removed, dead code.
+
+2001-02-03 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_ERROR_AT_LINE, AC_FUNC_OBSTACK): Use
+ AC_LIBSOURCES.
+
+2001-02-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LIBOBJ_DECL): Remove.
+ (AC_LIBSOURCES, AC_LIBSOURCE): New.
+
+2001-02-02 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at (AC_TRY_COMMAND): Fix the test.
+ From Nicolas Joly.
+
+ The following patch went into Autoconf between the two previous
+ entries:
+
+ * acgeneral.m4 (AC_TRY_COMMAND): Use the old code, using a tmp
+ variable, to recover multiline robustness.
+ Reported by Tim Van Holder.
+ * tests/base.at (AC_TRY_COMMAND): New.
+
+2001-02-02 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_COMPUTE_INT_COMPILE): Rename all occurences
+ of ac_try to ac_mid to avoid a name clash.
+
+2001-02-02 Pavel Roskin <proski@gnu.org>
+
+ * autoscan.pl (scan_c_file): When in verbose mode, don't print
+ out hashes common for the whole package. Do it in scan_files()
+ instead.
+ (scan_makefile): Likewise.
+ (scan_sh_file): Likewise.
+ Thanks to Jim Meyering for improved implementation.
+
+2001-02-01 Pavel Roskin <proski@gnu.org>
+
+ * autoreconf.sh: Fix the case when the verbose output was not
+ redirected to stderr as everywhere else.
+
+2001-01-30 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * acgeneral.m4 (_AC_OUTPUT_SUBDIRS): Remove configure.ac
+ from check for ac_sub_configure.
+
+2001-01-30 Akim Demaille <akim@epita.fr>
+
+ The recent addition of `exit's prototype in confdefs.h causes
+ AC_OUTPUT_MAKE_DEFS to include junky -D switches.
+ Reported by Wolfgang Mueller.
+
+ * tests/torture.at (#define header templates): Include trash in
+ confdefs.h.
+ * tests/atgeneral.at (AT_INIT): Don't expect `find' to support
+ -maxdepth, hence don't use -follow either.
+ Reported by Nicolas Joly.
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS) <confdef2opt.sed>: In the
+ `quote' section, `p'rint the result.
+ If neither `#define' pattern match, just call `d' to start a new
+ cycle.
+ Invoke this sed program with -n.
+
+2001-01-30 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at: New test.
+ * tests/atspecific.at (AT_CHECK): When given 77 as expected exit
+ status, don't include the `skip' mechanism.
+
+2001-01-30 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at (AC_CACHE_CHECK): Typo and clean up.
+ Check only --quiet.
+
+2001-01-30 Paul Eggert <eggert@twinsun.com>
+
+ * autoheader.sh: Don't pass a string to 'echo' that might
+ possibly contain backslashes.
+
+2001-01-29 Pavel Roskin <proski@gnu.org>
+
+ Don't use filenames that can be reduced to "conftest" on DOS.
+
+ * acfunctions.m4 (AC_FUNC_MMAP): Use conftest.mmap, not
+ conftestmmap.
+ (AC_FUNC_UTIME_NULL): Use conftest.data, not conftestdata.
+ * acspecific.m4 (AC_PROG_MAKE_SET): Use conftest.make, not
+ conftestmake.
+ (_AC_PATH_X_XMKMF): Use conftest.dir, not conftestdir.
+ * acgeneral.m4 (AC_ARG_PROGRAM): Use conftest.sed, not
+ conftestsed.
+ * m4/sanity.m4: Use conftest.file, not conftestfile.
+ * doc/autoconf.texi (Guidelines for Test Programs): Suggest
+ using conftest.data, not conftestdata.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4: Don't redirect builtins' stderr as Ultrix
+ hates this: use a subshell.
+
+2001-01-29 Assar Westerlund <assar@sics.se>
+
+ * m4sh.m4 (_AS_TEST_PREPARE): Discard output when testing `test
+ -x' and `test -f' to avoid confusing users with error messages.
+ (AS_MKDIR_P): Invert order of separators in IFS to avoid problem
+ with some shells adding backslash between fields and parsing the
+ result for escapes.
+ * doc/autoconf.texi (Special Shell Variables): Document IFS.
+
+2001-01-29 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_PROG_F77): Improve documentation of the compilers
+ that are tried, add a few new ones (cft77, af77, epcf90, xlf95, g95),
+ and put pgf90 in the right place (before the F95 compilers).
+
+2001-01-29 Jim Meyering <meyering@lucent.com>
+
+ * autoscan.pl: Do scan `configure.ac' when you claim it.
+ From Raja R Harinath.
+ (@kinds): Use `qw', rather than lots of quotes and commas.
+ (%generic_macro): Use single quotes around literals.
+ ($configure_scan): Define global, and use it instead of the literal.
+ Use `warn' in place of `printf STDERR'.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: `Formatting++' changes: prototypes all the
+ functions, no longer use `&' to call functions as it disables
+ prototype checking, topological sort so that functions are defined
+ before being used, and put an Autoconf like nice comment to
+ describe the functions.
+ (output): Accept a CONFIGURE_SCAN parameter, and open CONF.
+
+2001-01-29 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SITE_LOAD): Let config.log know what you load.
+
+2001-01-27 Akim Demaille <akim@epita.fr>
+
+ Follow Tim Van Holder's suggestions for a uniform handling of
+ symlinks.
+
+ * m4sh.m4: Stay in `as_', not `ac_'.
+ (_AS_LN_S_PREPARE): Eve out from...
+ * acspecific.m4 (AC_PROG_LN_S): here. Adjust.
+ * m4sh.m4 (AS_LN_S): New.
+ (AS_SHELL_PREPARE): Call _AS_LN_S_PREPARE.
+
+2001-01-26 Assar Westerlund <assar@sics.se>
+
+ * autoreconf.sh (find): Fix precedence.
+ (aclocal): Same as below for autoheader.
+
+2001-01-26 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (autoheader): Run it when there is no template, as
+ there is no risk to override a handwritten template.
+ From Assar Westerlund.
+
+2001-01-26 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: dnl AC_ARG_VAR's newline.
+ (AC_PROG_CC, AC_PROG_F77, AC_PROG_CXX): AC_ARG_VAR(LDFLAGS).
+ * acgeneral.m4 (AC_CHECK_LIB): Don't do it.
+
+2001-01-26 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: Handle DOS issues: directory separator, single
+ dot in file names, and one actual bug: when set -e, running
+ (false; true) will of course fail, use (false || true).
+ From Tim Van Holder.
+
+2001-01-26 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/Makefile.am (testsuite): Use testsuite.tmp, not
+ testsuite-tmp as temporary file.
+
+2001-01-25 Assar Westerlund <assar@sics.se>
+
+ * autoreconf.sh: Also find configure.in.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.49d.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ Version 2.49c.
+
+2001-01-24 Jim Meyering <meyering@lucent.com>
+
+ * autoscan.pl (output): Detect/report a close failure.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ Preserve INSTALL too.
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Use ac_INSTALL for internal
+ computations, and therefore use INSTALL where ac_given_INSTALL
+ was used.
+ (_AC_OUTPUT_SUBDIRS): There is no point in computing INSTALL in
+ here. It's not even used.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ While preserved in configure, srcdir is trashed in config.status.
+ Reported by Ralf Corsepius.
+
+ * tests/aclocal.m4 (AC_STATE_SAVE): It is ok to modify
+ CONFIG_STATUS, DEFS, prefix and exec_prefix.
+ It is OK to produce config.* files.
+ * tests/atspecific.m4 (AT_CONFIGURE_AC): Save the env *after*
+ AC_OUTPUT to check that it doesn't break anything by itself.
+ * tests/torture.m4 (srcdir): New test, from Ralf Corsepius.
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Use ac_top_srcdir and ac_srcdir
+ to preserve srcdir and top_srcdir.
+ Remove any use of `ac_given_srcdir' as `$srcdir' being preserved
+ is usable.
+
+2001-01-24 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ configure -q did not work since 2000-11-03.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS_FDS): Don't check for $silent,
+ tie AS_MESSAGE_FD to stdout unconditionally.
+ (_AC_INIT_PARSE_ARGS): If $silent redirect AS_MESSAGE_FD to
+ /dev/null.
+ * tests/base.at (AC_CACHE_CHECK): New test.
+
+2001-01-24 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4sh.m4 (AS_EXECUTABLE_P, _AS_TEST_PREPARE): New macros.
+ (AS_SANITIZE_SHELL): Call _AS_TEST_PREPARE.
+ * acgeneral.m4 (AC_CHECK_PROG, AC_PATH_PROG): Use AS_EXECUTABLE_P
+ instead of test -f.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl (generic_macro): s/AC_CHECK_FUNCTIONS/AC_CHECK_FUNCS/.
+ * acfunctions: Just like the previous patch.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl (@kinds, %generic_macro): New.
+ (&init_tables): Use them.
+ * acheaders: Run `autoconf -t AC_CHECK_HEADERS:'$1'' on the fileutils,
+ and include all these headers in here.
+ Don't specify `AC_CHECK_HEADERS' as it's the default.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Just like the previous patch, but for
+ AC_CHECK_FUNCS, AC_CHECK_TYPES, and AC_CHECK_MEMBERS.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl (print_unique): Push all the macro invocation
+ locations.
+ (output_headers): For headers that need to be checked, push either
+ the specialized macro, or the generic macro call.
+ (check_configure_ac): Handle AC_CHECK_HEADERS.
+
+2001-01-24 Raja R Harinath <harinath@cs.umn.edu>
+
+ Some non-srcdir build fixes.
+ * configure.in (BUGS): Look for file in $srcdir.
+ * tests/Makefile.am (MACRO_FILES): Use '..', not '$(top_srcdir)'.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ Don't AC_SUBST too much, as it makes Automake include those
+ variables in Makefiles, and drives autoscan to require unneeded
+ programs.
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Don't AC_SUBST CFLAGS,
+ CPPFLAGS, CXXFLAGS and LDFLAGS.
+ (AC_ARG_VAR): AC_SUBST the var.
+ Document it only once, even if there are several different docs.
+ * aclang.m4 (AC_PROG_CPP): Declare CPP and CPPFLAGS to AC_ARG_VAR.
+ (AC_PROG_CXXCPP): Declare CXXCPP and CPPFLAGS.
+
+2001-01-24 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_expand_once): Accept a witness.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_EXPAND_ONCE): Remove, use m4_expand_once.
+ (AC_DIVERT_ONCE): Move to...
+ * m4sugar.m4 (m4_expand_once): here.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_SET): Turn off optimizations.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * configure.in: If this is a beta, dump the core of BUGS.
+ * tests/base.at (AC_REQUIRE & AC_LANG): New test, currently failing.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Don't use `defined' to check whether an array is
+ defined.
+ Don't use parens with `defined'.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Be sure to quote hashes to
+ avoid M4 thinking it's comments.
+
+2001-01-23 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * aclang.m4 (_AC_COMPILER_EXEEXT_O): Use
+ AS_IF([AC_TRY_EVAL(ac_link)]) instead of AC_LINK_IFELSE to
+ avoid depending on ac_exeext before it's found.
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Check for the
+ executable extension BEFORE checking whether the compiler
+ works, as that test depends on a correct ac_exeext.
+
+2001-01-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE) <trap>: Typo.
+
+2001-01-22 Pavel Roskin <proski@gnu.org>
+
+ * autoscan.pl: Use "use strict". Declare all global variables
+ or make them private. Make all local variables private.
+ (find_autoconf): New, moved some code from the top level.
+ Use %ENV outside quotes to eliminate a warning.
+
+2001-01-22 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * acspecific.m4 (AC_PROG_LN_S): Detect DJGPP < 2.04, which only
+ supports 'ln -s' for executables.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl ($dir, $autoconf): New.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl ($headers, $functions, $identifiers, $libraries):
+ Also register locations of their requirement instead of a simple
+ counter.
+ (&check_configure_ac): Close TRACES.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Formatting changes.
+ Check `configure.ac' or `configure.in' if present.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl (&wanted): Don't register `Makefile' when
+ `Makefile.in' is present.
+ Factor the simplification of $name.
+ (&scan_makefile, &scan_sh_file): Instead of counting the number of
+ occurrences where a program/makevar is wanted, register file:line.
+ Adjust the verbose output.
+ (&check_configure_ac): Report the location where the macro is required.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Instead of undefined globals, set them to empty
+ values.
+ (%needed_macros): New.
+ (&check_configure_ac): New. Call it.
+ (&output_libraries): Eve out from &output_programs.
+ (&print_unique): For the time being register in %needed_macros
+ only argument less macros.
+
+2001-01-22 Lars J. Aas <larsa@sim.no>
+
+ * aclang.m4 (_AC_PROG_CXX_EXIT_DECLARATION): First try no declaration,
+ then '#include <stdlib.h>', before trying the explicit declarations.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_COMPILE_IFELSE): Wrap the test -s in
+ AC_TRY_COMMAND to improve config.log.
+ (_AC_INIT_DEFAULTS): Don't define ac_exeext and ac_objext to
+ highlight failures.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Work around a currently
+ impossible to describe bug of SunOS 4.1.3 which causes a shell
+ crash when using `VAR=${VAR="$default"}'.
+ Reported and diagnosed by Kevin Ryde.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_GETGROUPS): Typo :(.
+
+2001-01-22 Lars J. Aas <larsa@sim.no>
+
+ * aclang.m4 (_AC_COMPILER_EXEEXT_DEFAULT, _AC_COMPILER_EXEEXT_O):
+ Export ac_cv_exeext so ltconfig believes the value is cached and
+ skips its own faulty test.
+
+2001-01-22 Jim Meyering <meyering@lucent.com>
+
+ * actypes.m4 (AC_TYPE_GETGROUPS): Double quote the test program
+ body.
+
+2001-01-22 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * aclang.m4 (AC_LANG_INT_SAVE, AC_LANG_INT_SAVE(C)): Use
+ conftest.val, not conftestval.
+ * acgeneral.m4 (_AC_COMPUTE_INT_RUN, _AC_COMPUTE_INT):
+ Likewise.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ Create actypes.m4.
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF, _AC_CHECK_TYPE_NEW)
+ (AC_CHECK_TYPES, _AC_CHECK_TYPE_OLD)
+ (_AC_CHECK_TYPE_REPLACEMENT_TYPE_P, _AC_CHECK_TYPE_MAYBE_TYPE_P)
+ (AC_CHECK_TYPE, AC_CHECK_MEMBER, AC_CHECK_MEMBERS): Move into...
+ * actypes.m4: here.
+ * acgeneral.m4 (AC_TYPE_GETGROUPS, AM_TYPE_PTRDIFF_T)
+ (AC_TYPE_UID_T, AC_TYPE_SIZE_T, AC_TYPE_PID_T, AC_TYPE_OFF_T)
+ (AC_TYPE_MODE_T, AC_INT_16_BITS, AC_LONG_64_BITS, AC_TYPE_SIGNAL)
+ (AC_STRUCT_TM, AC_STRUCT_TIMEZONE, AC_STRUCT_ST_BLKSIZE)
+ (AC_STRUCT_ST_BLOCKS, AC_STRUCT_ST_RDEV): Move into...
+ * actypes.m4: here.
+ Adjust the test suite.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Include a default case for non
+ existing tests.
+ * tests/atspecific.m4 (AT_CONFIGURE_AC, AT_CHECK_ENV)
+ (AT_CHECK_AUTOUPDATE, AT_CHECK_AU_MACRO): New.
+ Spread their use.
+ (AT_CHECK_MACRO): Pass `-W obsolete' to autoconf.
+ * tests/semantics.at (AC_HAVE_FUNCS): Obsolete, don't check.
+ * tests/mktest.sh: Create one test file per Autoconf source
+ file instead of separating syntax/update.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Some about diff and cmp.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * sh.m4 (AS_ESCAPE): New.
+ (_AS_QUOTE_IFELSE): Use it.
+ * tests/atgeneral.m4 (AT_INIT) <SHELL>: Define and use.
+ <--help> Don't display the options help when tests were selected.
+ Document -d.
+ <at_skip_list>: New.
+ <testsuite.log>: Give a banner, include ChangeLog snippets, list
+ the failed and skipped tests.
+ Remove useless $at_traceoff in sub shells, this improves the
+ readability of the traces by removing testsuite's implementation
+ details.
+ (AT_CHECK): Filter out the shell traces from the tested command's
+ stderr.
+ Use AS_ESCAPE.
+ Don't register experr and expout for clean up, as it's hairy and
+ easier to do from...
+ Support STDOUT = stdout, and STDERR = stderr.
+ Force the output of shell traces.
+ (AT_INIT): Here.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT, AC_OUTPUT): Don't take care of completing
+ the log.
+ (_AC_INIT_PREPARE): Do it in the trap 0.
+
+2001-01-22 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Instead of undefined globals, set them to empty
+ values.
+ (%needed_macros): New.
+ (&check_configure_ac): New. Call it.
+ (&output_libraries): Eve out from &output_programs.
+ (&print_unique): For the time being register in %needed_macros
+ only argument less macros.
+
+2001-01-22 Raja R Harinath <harinath@cs.umn.edu>,
+ Tim Van Holder <tim.van.holder@pandora.be>,
+ Jim Meyering <jim@meyering.net>
+
+ * acspecific.m4 (AC_AIX): Fix typo: s/@\$/@%/.
+
+2001-01-19 Akim Demaille <akim@epita.fr>
+
+ Catch only used patterns.
+ Reported by the whole Autoconf community.
+
+ * m4sh.m4 (AS_INIT): New.
+ * acgeneral.m4 (AC_PLAIN_SCRIPT): Use it.
+ Forbid only AC, AU, AH and AM.
+
+2001-01-19 Akim Demaille <akim@epita.fr>
+
+ Optimizing AC_LANG was broken. Test and fix.
+
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77)): Don't
+ use _AC_LANG_ABBREV so that you don't depend upon _AC_LANG.
+ (_AC_LANG_SET): New.
+ (AC_LANG, AC_LANG_PUSH, AC_LANG_POP): Use it.
+ * tests/compile.at: Test AC_LANG, AC_LANG_PUSH & AC_LANG_POP.
+
+2001-01-19 Akim Demaille <akim@epita.fr>
+
+ * sugar.m4 (m4_require): Missing dnl.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PLAIN_SCRIPT): AF_INET, AF_UNIX, AR_FLAGS,
+ AS_FLAGS are OK.
+
+2001-01-18 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4sh.m4 (AS_MKDIR_P): Properly support DOS-style paths.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Autoconf & Libtool): `configure.in', not `.ac'
+ since Libtool does not yet support it.
+ Let the test suite be more verbose about at-path.
+ From Patrick Welche.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_CHECK_DEFINES): Discard
+ STDLIB|INTTYPES|MEMORY|STRING|UNISTD.
+ * tests/semantics.at (AC_CHECK_SIZEOF): Don't check the presence
+ of default headers, as it's machine dependent.
+ Reported by Jim Meyering and Nicolas Joly.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Don't leave macro names in comments.
+ * aclang.m4: Likewise.
+ * configure.in: Likewise.
+ * tests/semantics.at: Likewise.
+ * tests/tools.at: Likewise.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ Medium term goal: AC_ macros can be tested with -W obsolete.
+
+ * acgeneral.m4 (AC_RUN_IFELSE): Accept IF-CROSS-COMPILING.
+ (AC_TRY_RUN): Use it.
+ * acfunctions.m4: Start ousting AC_TRY_RUN and AC_TRY_COMPILE.
+ * acspecific.m4 (AC_AIX, AC_MINIX, AC_ISC_POSIX): AC_BEFORE on
+ AC_COMPILE_IFELSE and AC_RUN_IFELSE.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INCLUDES_DEFAULT): Force the newline to avoid
+ bad surprises.
+ Reported by Jim.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ Require a perfect divert push/pop balance.
+
+ * m4sugar.m4 (m4_divert, m4_divert_push, m4_divert_pop): Keep
+ track of them in m4_divert_stack.
+ (m4_divert_pop): Accept the expected current diversion as
+ argument and m4_fatal if incorrect, or if there is nothing to pop.
+ (globally): Specify the known m4_divert_pop.
+ Preserve symbolic values when possible.
+ * acgeneral.m4: No longer push the first diversion.
+ Specify the known m4_divert_pop.
+ (AC_PLAIN_SCRIPT): When m4_divert_push a diversion, m4_wrap its
+ pop.
+ (AC_INIT): Run AC_PLAIN_SCRIPT first, not last.
+ * tests/m4sh.at (AS_DIRNAME & AS_DIRNAME_SED): Can't use m4_defun
+ without m4_init.
+ * m4sugar.m4: Likewise.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_defn, m4_undefine, m4_popdef): Unlike the
+ builtin, fail on undefined symbols.
+ * tests/torture.at (Torturing config.status): Stop playing nasty
+ tricks with changequote.
+ (AC_DEFUBST): Move here from...
+ * tests/aclocal.m4: there.
+
+2001-01-18 Akim Demaille <akim@epita.fr>
+
+ Various cleanups and consistency checks.
+
+ * m4sugar.m4: Formatting changes.
+ * acgeneral.m4 (AC_DIVERT_PUSH, AC_DIVERT_POP, AC_REQUIRE)
+ (AC_DIAGNOSE, AC_FATAL, AC_MSG_WARN, AC_MSG_NOTICE, AC_MSG_ERROR):
+ Use m4_copy to define them, in order to keep a good $0.
+ (AC_INIT): AC_LANG_PUSH C, not AC_LANG, to initialize the stack.
+ * aclang.m4 (AC_LANG_PUSH): Dont't use m4_defn on undefined macros.
+ (AC_LANG_POP): Admit an argument specifying the language we quit
+ when popping.
+ Adjust Autoconf's AC_LANG_POPs.
+ * tests/tools.at (AWK portability): Don't depend on AC_INIT.
+ (autoconf --trace: user macros): Obviously I
+ meant TRACE1, not AC_TRACE1.
+
+2001-01-17 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_undefine, m4_popdef): Don't tolerate undefined
+ arguments.
+ (_m4_expansion_stack): Rename as...
+ (m4_expansion_stack): this, and change its value: instead of using
+ the pushdef stack to stack each *line* of the stack, each
+ definition contains the whole stack. I.e., to display the whole
+ stack, instead of popdefing and displaying each definition, just
+ display the current definition.
+ (m4_expansion_stack_push, m4_expansion_stack_pop): New.
+ * tests/atspecific.m4 (AT_CHECK_AUTOCONF): Let $2 be the expected
+ exit status.
+ * tests/m4sugar.m4 (m4_require: circular dependencies): New test.
+
+2001-01-17 Pavel Roskin <proski@gnu.org>
+
+ * m4sugar.m4 (m4_normalize): New macro - superposition of
+ m4_flatten and m4_strip.
+ (m4_join): Use m4_normalize.
+ * acgeneral.m4 (AC_FOREACH): Use m4_normalize.
+ (AC_CONFIG_HEADERS): Normalize the first argument.
+ (AC_CONFIG_LINKS): Likewise.
+ (AC_CONFIG_SUBDIRS): Likewise.
+
+2001-01-17 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * acgeneral.m4 (_AC_OUTPUT_SUBDIRS): Quote $ac_sub_srcdir uses.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ Work around the Ultrix limitations on ``multiple redirections''.
+ Reported by Harlan Stenn.
+
+ * acgeneral.m4 (_AC_EVAL_STDERR): New.
+ (_AC_PREPROC_IFELSE): Use it.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_data_files): Fix the computation of PATH.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_LOG_COMPLETE): Eve out from AC_OUTPUT.
+ (_AC_INIT_DEFAULTS, AC_OUTPUT): Use it.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Lots of additions and changes.
+ (File Descriptors): New.
+ (Limitations of Make): New.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * m4sh.m4 (AS_EXIT): Don't rely on exit == exit $?.
+ Reported by Tim Van Holder.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (editpl, editsh): Merge into...
+ (edit).
+ * m4sh.m4 (AS_UNAME): Eved out from...
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): here.
+ (_AC_INIT_PACKAGE): Define AC_PACKAGE_NAME.
+ (_AC_INIT_PARSE_ARGS): AC_SUBST the PACKAGE_ variables.
+ Propagate their use in the executables and the test suite.
+ * tests/atgeneral.m4 (PATH): Include only absolute paths.
+ (AT_INIT): Use AS_UNAME.
+
+2001-01-16 Akim Demaille <akim@epita.fr>
+
+ When default headers are used, check for their presence.
+ Suggested by Jim.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Don't define
+ ac_includes_default, since...
+ (_AC_INCLUDES_DEFAULT_REQUIREMENTS): this new macro does.
+ (AC_INCLUDES_DEFAULT): Require the former when default includes
+ are used.
+ (AC_CHECK_MEMBERS, _AC_CHECK_TYPE_NEW): Don't require
+ AC_HEADERS_STDC, that's a job for stupendous AC_INCLUDES_DEFAULT.
+ * acfunctions.m4 (AC_FUNC_MALLOC): Check for stdlib.h.
+
+2001-01-15 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Normalize sh samples.
+
+2001-01-15 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Simplify the hairy display of the
+ identity of the tests.
+
+2001-01-15 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): When the suite failed, complain
+ before creating the debug scripts.
+ Create a log file.
+ When ignoring a test, display a reassuring `ok' for stressed
+ users, and say `skipped' instead.
+ Simply run `testsuite' with the failed tests instead of running
+ the debug scripts, this avoids having zillions of banners `Testing
+ Blabla 2.13' (another means to avoid these banners is to have the
+ test suite succeed :-).
+
+2001-01-15 Akim Demaille <akim@epita.fr>
+
+ * sh.m4 (AS_BOX, _AS_BOX_LITERAL, _AS_BOX_INDIR): New.
+ * tests/atgeneral.m4: Use it.
+
+2001-01-15 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_VAR_INDIR_IFELSE): Move as...
+ * m4sh.m4 (AS_LITERAL_IF): this.
+ (AS_IFELSE): Rename as...
+ (AS_IF): this.
+
+2001-01-12 Akim Demaille <akim@epita.fr>
+
+ With `expr's that return `0' on failures, the executable suffix is
+ `0'. Test and fix.
+ Reported by Assar Westerlund.
+
+ * Makefile.am (maintainer-check): New target.
+ * tests/Makefile.am (maintainer-check, maintainer-check-posix)
+ (maintainer-check-c++, expr): Likewise.
+ * configure.in (EXPR): Look for it.
+ * tests/atgeneral.m4 (AT_CHECK): Propagate $2's default value.
+ * tests/compile.at (Extensions): New test.
+ * aclang.m4 (_AC_COMPILER_EXEEXT_DEFAULT, _AC_COMPILER_EXEEXT_O):
+ Distinguish files with or without a dot.
+
+2001-01-12 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Last changes for `configure.ac'.
+ (_AC_INIT_HELP, _AC_OUTPUT_SUBDIRS): Take `configure.ac' into
+ account.
+ * autoreconf.sh: Likewise.
+
+2001-01-11 Motoyuki Kasahara <m-kasahr@sra.co.jp>
+
+ * acfunctions.m4 (AC_FUNC_MEMCMP): Missing comma in AC_TRY_RUN
+ invocation.
+
+2001-01-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_CXX_EXIT_DECLARATION): New.
+ (AC_PROG_CC, AC_PROG_CXX): Use it.
+ (AC_PROG_CC_STDC): Be sure to remove tmp files.
+ * tests/compile.at (AC_TRY_LINK_FUNC): Don't use exit to test it,
+ since it produces a prototype which conflicts with the one
+ computed by _AC_PROG_CXX_EXIT_DECLARATION.
+ * tests/semantics.at (AC_CHECK_FUNCS, AC_HAVE_FUNCS): Likewise.
+ (AC_HAVE_FUNCS): Test AC_HAVE_FUNCS!
+
+2001-01-11 Kevin Ryde <user42@zip.com.au>
+
+ * autoconf.texi (Shellology): Fix an @end itemize, and a typo.
+
+2001-01-11 Kelly Anderson <tgcorp@attglobal.net>
+
+ * autoconf.sh (M4): Handle PC drive letters.
+ * autoupdate.sh: Likewise.
+
+2001-01-11 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_PROG_F77): Add pgf90 to the list of compilers to
+ look for, after the other Fortran 90 compilers.
+
+2001-01-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: Use m4_copy to duplicate macros.
+ (AC_LANG_PUSH): In order to have AC_LANG's simplifications
+ effective, be sure to let _AC_LANG be the old language before
+ calling AC_LANG.
+
+2000-12-25 Pavel Roskin <proski@gnu.org>
+
+ * autoreconf.sh: s/localddir/localdir/.
+ Reported by Motoyuki Kasahara.
+
+2000-12-23 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh: Promote `configure.ac' over `configure.in'.
+ * autoreconf.sh: Likewise.
+ * autoheader.sh: Ditto.
+ * autoupdate.sh: Similarly.
+ * doc/autoconf.texi: Adjust.
+ * tests/atspecific.m4: Be sure to remove configure.in.
+ Adjust the test suite to use `configure.ac'.
+
+2000-12-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_EVAL, AC_TRY_EVAL, AC_TRY_COMMAND): Be a
+ single statement, so that one can make pipes with AC_TRYs, just as
+ in 2.13.
+
+2000-12-20 Lars J. Aas <larsa@sim.no>
+
+ * aclang.m4 (_AC_COMPILER_OBJEXT, _AC_COMPILER_EXEEXT_O):
+ Make the order of arguments for ls count by splitting the ls
+ command into a sequence of ls commands.
+
+2000-12-20 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_COMPILER_GNU): Be sure to have `choke me' on
+ the seventh column so that the SGI Fortran compiler really chokes
+ on it.
+ From Ezra Peisach.
+
+2000-12-20 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Autoconf & Libtool): Ignore Libtool version
+ 1.3.[0-5].
+ * tests/compile.at (GNU Fortran 77): Use AS_EXIT.
+
+2000-12-20 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CLEANUP_FILE_IFELSE): Fix the regexp: the
+ pattern ` state* ' was added many times for `*' was improperly
+ escaped.
+ (AT_INIT): Remove the data files before running the tests.
+ Define AT_data_files and output it.
+ (AT_SETUP): Don't.
+ (_m4_divert(TEST)): Remove, now useless.
+
+2000-12-20 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: `dnl' the AC_LANG_PUSH and AC_LANG_POP.
+ (AC_PROG_CXXCPP, AC_PROG_CPP): Set the current language instead of
+ just asserting it, since these macros can be called directly.
+ Reported by Raja R. Harinath.
+
+2000-12-19 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Installation Directory Variables): More info
+ on prefix and exec_prefix.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_COMPILER_OBJEXT): Don't rely on
+ _AC_COMPILE_IFELSE which uses ac_objext in a `test -s'.
+ Reported by Lars J. Aas.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (AC_PROG_CPP without warnings, GNU Fortran 77):
+ Use AC_TRY_COMMAND when running commands, to enrich the logs.
+
+2000-12-19 Akim Demaille <akim@epita.fr>, Mo DeJong <mdejong@cygnus.com>
+
+ * aclang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): New.
+ (_AC_COMPILER_EXEEXT_O): Extracted from...
+ (_AC_COMPILER_EXEEXT): here. Adjust.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK): Make exit status report more
+ visible.
+ * tests/atspecific.m4 (AT_CHECK_AUTOCONF): Support FLAGS, STDOUT
+ and STDERR.
+ (AT_CHECK_CONFIGURE): Support plenty, cleanup defs when needed.
+ Spread their use in the whole suite.
+ Simplify a few AT_CLEANUPs.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK): Accept if-failed and
+ if-not-failed.
+ * tests/atspecific.m4 (AT_CHECK_CONFIGURE): Use it in order to
+ dump config.log when configure failed. Before, the log was
+ reported only on success.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at: New file.
+
+2000-12-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_BANNER, AT_CLEANUP): Formatting changes.
+
+2000-12-18 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am: Add a comment explaining why suffix rules are not
+ used there.
+
+2000-12-15 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: If the "allowed" pattern is not defined set it
+ to "^$".
+ * tests/tools.at (autoconf: forbidden tokens, basic): New test.
+ (autoconf: forbidden tokens): Renamed to ...
+ (autoconf: forbidden tokens, exceptions): ... this.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_CXXCPP, AC_PROG_CPP): Require AC_PROG_CXX/CC.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (GNU Fortran 77): G77 is a `yes'/`' var.
+ Reported by Ezra Peisach.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (GNU Fortran 77): s/g77/G77/.
+ Reported by Ezra Peisach.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * man/Makefile.am (.x.1): Fix to work properly with
+ builddir != srcdir.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77))
+ (AC_PROG_CPP, AC_PROG_CXXCPP, AC_PROG_GCC_TRADITIONAL)
+ (_AC_PROG_CC_G, AC_PROG_CC_C_O, _AC_PROG_CXX_G, AC_PROG_CC_STDC):
+ Don't use `${CC-cc}' since now the AC_REQUIRE machinery guarantees
+ that $CC is defined. And if not, it's a bug which must be
+ observable.
+ * acspecific.m4 (AC_SYS_LARGEFILE): Likewise.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_PREPROC_IFELSE): Use ac_status as set by
+ AC_TRY_EVAL.
+ (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE, _AC_RUN_IFELSE): More alike,
+ using AS_IFELSE, and systematically AC_TRY_COMMAND when testing
+ something (for the logs).
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_PREPROC_WORKS): Use _AC_PREPROC_IFELSE.
+ * acgeneral.m4 (_AC_TRY_CPP): Its last use was that above, so
+ inline it into...
+ (_AC_PREPROC_IFELSE): here.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Forget about `-n'.
+ Adjust so that `./testsuite -h 1 2' explains only tests 1 & 2.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_EVAL): New.
+ (AC_TRY_EVAL, AC_TRY_COMMAND): Use it.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_PREPROC_IFELSE, AC_PREPROC_IFELSE): New.
+ (AC_TRY_CPP): Use AC_PREPROC_IFELSE.
+ (AC_CHECK_MEMBER, AC_CHECK_DECL, _AC_CHECK_TYPE_NEW): Quote
+ properly.
+ * acheaders.m4 (AC_CHECK_HEADER): Quote properly, use
+ AC_PREPROC_IFELSE.
+ * acspecific.m4 (_AC_PATH_X_DIRECT): Use AC_PREPROC_IFELSE.
+
+2000-12-15 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_init): Catch `dnl'.
+
+2000-12-15 Pavel Roskin <proski@gnu.org>
+
+ * m4sh.sh (AS_ERROR): Restore dnl at the end of the macro.
+
+2000-12-14 Pavel Roskin <proski@gnu.org>
+
+ * tests/semantics.at (AC_CHECK_TYPES): There are two tests with
+ this name. Rename the second one to "AC_CHECK_TYPES: backward
+ compatibility"
+ (AC_TRY_LINK_FUNC): Removed. It's now in tests/compile.at.
+ (C keywords): Likewise.
+ (AC_PROG_CPP with warnings): Likewise.
+ (AC_PROG_CPP without warnings): Likewise.
+
+2000-12-14 Akim Demaille <akim@epita.fr>
+
+ Put back AC_CYGWIN etc. under the responsibility of the
+ configure.in maintainer, but discourage its use.
+
+ * acspecific.m4 (_AC_CYGWIN, _AC_MINGW32, _AC_EMXOS2): Rename as...
+ (AC_CYGWIN, AC_MINGW32, AC_EMXOS2): these.
+ AU defined on top of AC_CANONICAL_HOST and $host_os.
+ * tests/mktests.sh (update_exclude_list): Add AC_CYGWIN,
+ AC_MINGW32, and AC_EMXOS2.
+
+2000-12-13 Pavel Roskin <proski@gnu.org>
+
+ * m4sugar.m4 (m4_file_append): Add a newline after _m4eof,
+ otherwise _m4eof is appended to the output on FreeBSD 4.0.
+ * tests/atgeneral.m4 (AT_INIT): Avoid using unbalanced "y"
+ in sed, use "s" instead.
+ * tests/mktests.sh: Don't use \? in sed - it's a GNU extension.
+ Use separate patterns for A[CU]_DEFUN and AC_DEFUN_ONCE.
+
+2000-12-13 Akim Demaille <akim@epita.fr>
+
+ EXEEXT and OBJEXT don't need to know $CYGWIN etc.
+
+ * acspecific.m4 (AC_EXEEXT, AC_OBJEXT, _AC_EXEEXT, _AC_OBJEXT):
+ Move as...
+ * aclang.m4 (AC_EXEEXT, AC_OBJEXT, _AC_COMPILER_EXEEXT)
+ (_AC_COMPILER_OBJEXT): these.
+ (_AC_COMPILER_EXEEXT): Use _AC_LINK_IFELSE.
+ Don't depend upon $CYGWIN and the like.
+ (_AC_COMPILER_OBJEXT): Model after _AC_COMPILER_EXEEXT.
+ Skip more extensions.
+ Use _AC_COMPILE_IFELSE.
+
+2000-12-12 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am: Don't use suffix rules for perl and shell
+ scripts. Use explicit rules instead.
+
+2000-12-12 Pavel Roskin <proski@gnu.org>
+
+ * autoscan.pl (init_tables): Allow spaces on the right hand side
+ in autoscan tables. Die if there are no spaces at all.
+ (scan_c_file): Use \b instead of \W so that keywords match at
+ the beginning and the end of the line.
+ (scan_sh_file): Likewise.
+ (scan_makefile): Likewise. Use \B to match before `-l'.
+ (output): Suggest AC_CONFIG_HEADER if any C/C++ sources are
+ found.
+ * acidentifiers: Update macros for structure members st_blksize
+ and st_rdev.
+
+2000-12-12 Akim Demaille <akim@epita.fr>
+
+ * tests/compile.at (GNU Fortran 77): Be robust to compilers that
+ choke on `--version'.
+
+2000-12-12 Akim Demaille <akim@epita.fr>
+
+ * tests/suite.at: Run `tools.at' first.
+
+2000-12-12 Akim Demaille <akim@epita.fr>
+
+ * tests/aclocal.m4 (AC_STATE_SAVE): Use a more precise regexp to
+ keep envvars.
+
+2000-12-12 Akim Demaille <akim@epita.fr>
+
+ AS_ERROR was not properly saving data in the log file.
+
+ * sh.m4 (AS_WARN, AS_ERROR): Use AS_MESSAGE.
+ (_AS_ECHO): Fix quotation.
+ (AS_MESSAGE): Use `as_me'.
+ * acgeneral.m4: More banners in the log.
+ (_AC_INIT_DEFAULTS): Compute as_me before using it.
+
+2000-12-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (System Services) <AC_PATH_XTRA>: Adjust the
+ documentation about X_DISPLAY_MISSING to the code.
+
+2000-12-07 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): More robust computation of
+ ac_tests_pattern.
+ Reported by Andrej Borsenkow.
+
+2000-12-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_EXEEXT): Skip *.pdb.
+ From Paul Berrevoets.
+
+2000-12-07 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK): Bad typo: assign `exit 1' to
+ at_continue if something failed, not `:'.
+ * tests/semantics.at (AC_PATH_XTRA): New.
+ * acspecific.m4 (_AC_PATH_X): New, extracted form AC_PATH_X.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump version to 2.49c.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ Version 2.49b.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ Stop playing with FDs in Autotest.
+
+ * tests/atgeneral.m4 (AT_INIT): Set up FD 5.
+ (AT_CHECK): Instead of using exec to globally change the FDs of
+ `testsuite', enclose the body of the test into a
+ `(..) >stdout 2>stderr'.
+ In every case, when verbose, display the differences between
+ expected and observed (stdout, stderr, exit status).
+ Let `0' be the default for EXIT-STATUS.
+ Support EXIT-STATUS == `ignore'.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (autoconf: forbidden tokens): Adjust expected
+ result.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * man/config.guess.x: New file.
+ * man/config.sub.x: New file.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * tests/aclocal.m4 (AT_STATE_SAVE): Don't even try to preserve
+ egrep error messages, AT_CHECK will find them.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <awk>: `for' on
+ arrays is nondeterministic across AWK implementations.
+ * tests/tools.at (autoconf: forbidden tokens): Sort the error
+ message to guarantee its uniqueness.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ The SunOS' egrep fails to process properly the `egrep' invocations
+ of the test suite.
+
+ * tests/aclocal.m4 (AC_STATE_SAVE): If egrep fails, remove the
+ output file.
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): Don't check `state-*'
+ if the files are not present.
+
+ * m4sugar.m4 (m4_join): Rename as...
+ (m4_smash): this.
+ * tests/aclocal.m4 (join): Move as...
+ * m4sugar.m4 (m4_flatten): this.
+ * autoconf.sh (trace.m4): Rename m4_smash as m4_flatten.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (task trace): s/m4/$M4/.
+ * autoheader.sh: When loading trace.sh, catch errors and exit with
+ a decent error message.
+ * tests/tools.at: Be sure to test autoconf --trace before
+ autoheader.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK): Fix the m4_ifval invocation.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG): Be `smart': don't issue the sh code if the
+ current language did not change.
+ (AC_LANG_ASSERT): New.
+ (AC_PROG_CPP, AC_PROG_CXXCPP): Assert the language.
+ (_AC_PROG_F77_V, _AC_F77_NAME_MANGLING): Don't require
+ AC_PROG_F77, the code you include does it.
+ (AC_F77_LIBRARY_LDFLAGS): Set the language.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (ifelse): Rename as...
+ (m4_if): this.
+ * autoconf.m4 (ifelse): Restore.
+
+2000-12-06 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_dquote, m4_pattern_forbid, m4_pattern_allow)
+ (m4_cr_letters, m4_cr_LETTERS, m4_cr_Letters, m4_cr_digits)
+ (m4_cr_symbols1, m4_cr_symbols2, m4_re_string, m4_re_word)
+ (m4_init): New macros.
+ (m4_token_allow): Remove.
+ * acgeneral.m4: Don't push BODY into the diversion stack.
+ (AC_PLAIN_SCRIPT): Do it.
+ Call m4_init, define the Autoconf patterns.
+ (AC_INIT): Use AC_PLAIN_SCRIPT.
+ Remove the useless `dnl' (those where the current diversion is
+ KILL).
+ * autoconf.sh (m4_common): Fix quotation.
+ (finalize.awk): Load forbidden.rx and allowed.rx.
+ Split the line into tokens, and check their validity.
+ * tests/tools.at (Forbidden tokens): Adjust.
+
+2000-12-05 Bob Wilson <bwilson@tensilica.com>
+
+ * acspecific.m4 (_AC_OBJEXT, _AC_EXEEXT): Ignore .d files produced
+ by CFLAGS=-MD.
+
+2000-12-05 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_F77): Temporarily set ac_ext to F to run
+ _AC_LANG_COMPILER_GNU.
+ From Steven G. Johnson.
+ * tests/compile.at (GNU Fortran 77): New test.
+
+2000-12-05 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (autoupdate): Strengthen and check autoupdate's
+ idempotency.
+
+2000-12-05 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): s/cp -f/mv -f/.
+
+2000-12-01 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Don't escape
+ backquotes in AC_MSG_ERROR. Fix error message.
+
+2000-12-01 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_INIT): Use ${CONFIG_SHELL-/bin/sh}
+ to run the testsuite from the debug scripts.
+ Suggested by Alexandre Oliva.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Assignments): Don't use $? from an
+ assignment.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * sh.m4 (AS_EXIT): Don't rely on false exiting 1.
+ Actually, always use `(exit $val); exit', don't try to be tricky.
+ * doc/autoconf.texi (Limitations of Builtins) <false>: new.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * sh.m4 (_AS_EXPR_PREPARE): Don't rely on the exit status of a
+ back quote evaluation since the very system for which the test was
+ written does not propagate it. Groumph!
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_EXEEXT): Also remove conftest$ac_exeext.
+ Reported by Pavel.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_EXEEXT, _AC_OBJEXT): Make the two macros more
+ alike: a loop over a sorted list of possible files.
+ Don't cleanup on errors, the trap will do it.
+ Cleanup when there are no errors.
+ (_AC_EXEEXT): Use the empty string instead of `no' as the cached
+ value.
+ Be sure to prefer `.exe' to `' when the two are observable.
+ Suggested by Lars and Earnie.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ When using Cygwin, in spite of all their efforts, it may happen
+ that `confestval' be read in binary mode. The shell then fails to
+ properly strip the \r\n.
+ Reported by Lars J. Aas.
+
+ * aclang.m4 (AC_LANG_INT_SAVE): Don't add any trailing new line,
+ and close the file.
+ Suggested by Peter Eisentraut.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Systemology): New section.
+ Some about QNX 4.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Special Shell Variables): Document RANDOM.
+
+2000-11-30 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about cp
+ and mv, thanks to Ian.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_OBJEXT): Skip *.tds, special case .o and
+ .obj.
+ Suggested by Lars.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix the portability of
+ the default assignment of CONFIG_FILES, CONFIG_HEADERS,
+ CONFIG_LINKS and CONFIG_COMMANDS.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Use the `clear' trick to work
+ around broken seds.
+ (_AC_OUTPUT_HEADERS, _AC_OUTPUT_FILES): Rename the sed labels to
+ match the Autoconf documentation.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Shell Substitutions): More on the variations
+ around ${foo=bar}.
+ (Assignments): Rewrite as a summary of the previous section.
+ * acgeneral.m4 (AC_CACHE_SAVE): Be protected against the Solaris'
+ `${foo='${bar}'}' bug.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_HEADERS, _AC_OUTPUT_FILES): Don't use
+ `... echo "error: \\\`$f'" ...`
+ as it's not portable to BSDI 1.3.
+ Do this instead:
+ `... echo "error: $f" ...`
+ Reported by Daniele Arena.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ QNX 4.2.5's expr always exits 1 when `:' is used with parens.
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <expr>: More
+ information, thanks to Paul Berrevoets, Paul Eggert and David
+ Morgan.
+ * sh.m4 (_AS_EXPR_PREPARE): New.
+ (AS_DIRNAME): Use it.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ sizeof (struct {char a,b; }) is not required to be 2.
+ Reported by Johan Danielsson.
+
+ * tests/semantics.at (AC_CHECK_SIZEOF): Define charchar as an
+ array of 2 chars.
+ Suggested by Alexandre.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ Provide a means to display banners in the test suite.
+
+ * tests/atgeneral.m4 (AT_INIT): Initialize `AT_banner_ordinal'.
+ Execute the epilogue of the tests only if a test was run.
+ Don't build the value of `at_tests_all' with a for loop: expand
+ `AT_TESTS_ALL'.
+ (AT_SETUP): Build `AT_TESTS_ALL'.
+ (AT_BANNER): New.
+ Adjust all the former banners to use it.
+ (AT_CHECK): Don't trace the decoding of `$?'.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_DEFINE, AT_UNDEFINE, AT_SHIFT)
+ (AT_INCLUDE): Remove, use the m4_ macros.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (ifval, ifset, ifdef, ifndef, m4_ifvanl): Rename as...
+ (m4_ifval, m4_ifset, m4_ifdef, m4_ifndef, m4_ifvaln): this.
+ (m4_n): New macro.
+ (m4_ifvaln): Use it.
+ * autoconf.m4 (ifdef): Restore it.
+
+2000-11-29 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_errprint, divnum, errprint, esyscmd): Rename as...
+ (m4_errprintn, m4_divnum, m4_errprint, m4_esyscmd): this.
+ * autoconf.m4: Restore them.
+
+2000-11-28 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Fortran 77 Compiler Characteristics):
+ Don't suggest obsolete AC_LANG_FORTRAN77.
+ (Language Choice): Better preamble.
+
+2000-11-28 Pavel Roskin <proski@gnu.org>
+
+ * doc/install.texi: Minor changes to eliminate TeX warnings.
+ * doc/autoconf.texi: Likewise. Typo fixes.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atconfig.in: Move code into...
+ * tests/atgeneral.m4 (AT_INIT): here.
+ Use AS_SHELL_SANITIZE.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Have the test suite list of the test groups and their references.
+
+ * tests/atgeneral.m4 (_m4_divert(SUITE_PRO)): Remove, replaced
+ by...
+ (_m4_divert(DEFAULT), _m4_divert(OPTIONS), _m4_divert(HELP))
+ (_m4_divert(SETUP)): these.
+ (_m4_divert(SUITE_EPI)): Rename as...
+ (_m4_divert(TAIL)): this.
+ (AT_INIT): Adjust to the new diversions.
+ Insert the magic number.
+ Accept test groups as cli argument.
+ List the test groups.
+ Rename TESTS, test, and tests as at_tests_all, at_test, and
+ at_tests.
+ Have the debug scripts pass options to test suite.
+ Remove their banner.
+ * tests/atspecific.m4: Don't divert to 0.
+ * suite.at: Don't insert the magic number.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_divert, m4_undivert): Support named diversions.
+ * tests/atgeneral.m4 (_m4_divert(SUITE_PRO), _m4_divert(TESTS))
+ (_m4_divert(SUITE_EPI), _m4_divert(TEST)): New diversions.
+ Push the first two diversions.
+ (AT_INIT): Don't.
+ (AT_INIT, AT_SETUP, AT_CLEANUP): Adjust to use the named
+ diversions.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CLEANUP): Factor the computation of
+ at_test_count into...
+ (AT_INIT): here.
+ Use an sh variable, at_data_files, instead of an hard coded list.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CLEAN_FILE_IFELSE, AT_CLEANUP_FILE)
+ (AT_CLEANUP_FILES): New macros.
+ (AT_SETUP, AT_CHECK, AT_CLEANUP): Use them.
+ (AT_CHECK): Fix a use of at_verbose.
+ * tests/atspecific.m4 (AT_CHECK_AUTOCONF, AT_CHECK_AUTOHEADER)
+ (AT_CHECK_CONFIGURE): New macros.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT) <at_verbose>: Be a :/echo variable.
+ <at_silent>: Remove.
+ (AT_CLEANUP): Clean up the diversion use.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Factor part of the prologue of the tests.
+
+ * tests/atgeneral.m4 (AT_SETUP, AT_CLEANUP): No longer handle
+ at_stop_on_error.
+ (AT_INIT): After having checked whether the test failed, break out
+ of the loop if requested (-e).
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_SETUP): Don't build at-check-line, that's
+ AT_CHECK's job.
+ Remove the code depending upon `at_skip_mode': it's unused.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ * tests/atconfig.in: Remove the `snippet' marks, there are no
+ longer used.
+ * tests/atgeneral.m4: Likewise.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Factor the epilogue of the tests.
+
+ * tests/atgeneral.m4 (AT_CLEANUP): Move the reading of at_status
+ into...
+ (AT_INIT): here, at the end of the `case'.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ The debug scripts are only wrapper around testsuite, asking for a
+ specific test.
+
+ * tests/atgeneral.m4 (AC_INIT) <at_debug>: New variable, new
+ option, -d, to disable the creation of the debug scripts (when
+ testsuite was already launched from one).
+ <at_test_count>: Really compute it instead of using the number of
+ the last test run.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Transform Autotest's body into a `for test; case $test'.
+ As a known side effect, currently any code outside
+ AT_SETUP/AT_CLEANUP is discarded.
+
+ * acgeneral.m4 (_m4_divert(KILL)): Move to...
+ * m4sugar.m4: here.
+ * tests/atgeneral.m4 (AT_INIT): Use m4_divert_push/pop instead of
+ m4_divert.
+ Put all the tests inside a for;case.
+ Define TESTS.
+ (AT_SETUP, AT_CLEANUP): Open/close each case.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Move divert and undivert into m4_.
+
+ * m4sugar.m4 (m4_divert, divert, undivert): Rename as...
+ (m4_divert_text, m4_divert, m4_undivert): this.
+ * autoconf.m4 (divert, undivert): Restore them for user macros only.
+
+2000-11-23 Akim Demaille <akim@epita.fr>
+
+ Move Autotest on top of M4sh.
+
+ * tests/atgeneral.m4: Import M4sh.
+ Adjust the differences on the names of the builtins (define etc.).
+ (AT_CASE): Remove, use m4_case.
+ (AT_SETUP): Don't use `AT_group_description', `$1' is OK.
+ * tests/atspecific.m4 (m4_for, m4_foreach): Remove, use those of
+ M4sugar.
+ * tests/m4sugar.at: Strengthen the quotation and adjust to the new
+ macro names.
+ * tests/m4sh.at: Ditto.
+ * tests/torture.at: Ditto.
+ * tests/base.at: Ditto.
+ * m4sh.m4: Import M4sugar.
+ * autoconf.m4: Don't import M4sugar, M4sh does.
+
+2000-11-20 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_RUN_IFELSE): `==' in test is not portable,
+ replace with `='.
+
+2000-11-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Also include `PATH' and
+ `/bin/machine' in the log.
+
+2000-11-17 Akim Demaille <akim@epita.fr>
+
+ Let AC_TRY_RUN be more verbose
+
+ * acgeneral.m4 (_AC_RUN_IFELSE): Instead of canceling the output
+ of the test program, save it into the log.
+ Save the exit status, and report it in the log when non zero.
+ Just use `(./conftest)' instead of `(./conftest; exit)'.
+
+2000-11-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS) <ac_includes_default>: Include
+ sys/stat.h.
+ * acspecific.m4 (AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_BLOCKS)
+ (AC_STRUCT_ST_RDEV): Simplify.
+ * acfunctions.m4 (AC_FUNC_MMAP): Include sys/stat.h unconditionally.
+ * doc/autoconf.texi (Default Includes): Adjust.
+ (Particular Structures) <AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV>:
+ Adjust.
+
+2000-11-16 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <expr>:
+ expr 'a' : '\(b\)'.
+ From Paul Eggert.
+
+2000-11-16 Akim Demaille <akim@epita.fr>
+
+ Reorder the test suite so that low level features are tested
+ before high level ones.
+
+ * tests/semantics.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ (missing templates): Move to...
+ * tests/torture.at: here.
+ Reorder the file so that the torture test is last.
+ * tests/semantics.at (AC_TRY_LINK_FUNC, AC_PROG_CPP with warnings)
+ (AC_PROG_CPP without warnings): Move to...
+ * tests/compile.at: here, new file.
+ * tests/suite.at: Run `torture' and then `compile' before
+ `semantics'.
+
+2000-11-16 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_SYS_LARGEFILE): _AC_SYS_LARGEFILE_SOURCE no
+ longer exist.
+
+2000-11-16 Akim Demaille <akim@epita.fr>
+
+ POSIX doesn't require s/[^/]// to work.
+ From Paul Eggert and Johan Danielsson.
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>:
+ Reorganize. Document this issue.
+ * autoupdate.sh (dir): Use `,' as separator instead of `/'
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Ditto.
+
+2000-11-16 Paul Eggert <eggert@twinsun.com>
+
+ * m4/largefile.m4 (_AC_SYS_LARGEFILE_SOURCE): Remove, replaced by...
+ (_AC_SYS_LARGEFILE_TEST_INCLUDES): this.
+ (AC_SYS_LARGEFILE_MACRO_VALUE): Use AC_LANG_PROGRAM instead of
+ _AC_SYS_LARGEFILE_SOURCE, i.e., don't pass
+ _AC_SYS_LARGEFILE_TEST_INCLUDES by default: this isn't desirable
+ when checking for fseeko.
+ (AC_SYS_LARGEFILE): Pass AC_SYS_LARGEFILE_TEST_INCLUDES to
+ _AC_SYS_LARGEFILE_MACRO_VALUE, since it no longer does this for us.
+
+2000-11-16 Akim Demaille <akim@epita.fr>
+
+ Provide a means for escaping the forbidden patterns test.
+
+ * tests/tools.at (Forbidden tokens): Test m4_token_allow.
+ * m4sugar.m4 (m4_file_append, m4_token_allow): New macros.
+ * autoconf.sh (task script): Pass `tmp' and `verbose' to
+ finalize.awk.
+ (finalize.awk::check_patterns): Eve out from the body.
+ (finalize.awk): Read `$tmp/tokens_allowed', and don't complain for
+ these exceptions.
+
+2000-11-14 Paul Eggert <eggert@twinsun.com>
+
+ * acspecific.m4 (AC_SYS_LARGEFILE): Don't worry about
+ whether fseeko and ftello are properly declared.
+ * acfunctions.m4 (AC_FUNC_FSEEKO): New macro, which worries about
+ fseeko (and presumably ftello). Do not set _XOPEN_SOURCE; that
+ causes too many problems in practice.
+ * acfunctions (fteelo, fseeko): Trigger AC_FUNC_FSEEKO.
+ * doc/autoconf.texi: Adjust.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): Comment `true'.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * BUGS: New file.
+ Be sure to read this file if you're using a non released Autoconf.
+ * tests/tools.at (Syntax of the scripts): The non built tools are
+ in `$top_srcdir', not `..'.
+ (autoconf --trace): When using `-i' we need the src tree, not the
+ build tree.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ A single m4_require is enough.
+
+ * m4sugar.m4 (_m4_require): $2 defaults to $1.
+ Rename as...
+ (m4_require): this.
+ * acgeneral.m4 (_AC_REQUIRE): Remove, use m4_require if you want
+ to get into the gory details.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS_ENVIRONMENT): Rename as...
+ * m4sh.m4 (AS_SHELL_SANITIZE): this.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): Don't neutralize
+ autoconf's warnings.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ Set AC_LANG_PREPROC_REQUIRE which replaces AC_REQUIRE_CPP.
+ The main difference is that the former requires AC_LANG_COMPILER.
+
+ * aclang (AC_LANG_PREPROC, AC_LANG_PREPROC(C), AC_LANG_PREPROC(C++))
+ (AC_LANG_PREPROC(Fortran 77), AC_LANG_PREPROC_REQUIRE): New
+ macros. Issue a warning when looking for the Fortran 77
+ preprocessor instead of an error.
+ (AC_LANG_COMPILER): Check that it is run before the corresponding
+ AC_LANG_PREPROC.
+ (AC_PROG_C
+ (AC_LANG_COMPILER_REQUIRE): Don't call directly
+ AC_LANG_COMPILER(_AC_LANG), rather invoke AC_LANG_COMPILER so that
+ the generic code in AC_LANG_COMPILER is run.
+ (AC_REQUIRE_CPP): Use AC_LANG_PREPROC_REQUIRE.
+ (AC_PROG_CC, AC_PROG_CXX): Don't require being run before the
+ corresponding AC_LANG_PREPROC: AC_LANG_COMPILER does it.
+
+
+ Propagate AC_LANG_PREPROC_REQUIRE.
+
+ * acgeneral.m4 (AC_TRY_CPP, AC_EGREP_CPP): Use it instead of
+ AC_REQUIRE_CPP.
+ * acspecific.m4 (_AC_DECL_YYTEXT, AC_PATH_X): Don't
+ AC_REQUIRE_CPP, inner macro will do it.
+ * aclang.m4 (AC_PROG_GCC_TRADITIONAL, AC_C_STRINGIZE)
+ (AC_C_PROTOTYPES): Likewise.
+ (AC_C_STRINGIZE): Yeeks! The body of AC_CACHE_CHECK was not
+ quoted. Use @%:@ do assist Emacs.
+
+
+ For some reason (don't ask), this revamping revealed that
+ AC_PROG_CC_STDC, because of the `break', does not clean its tmp
+ files.
+
+ * aclang.m4 (AC_PROG_CC_STDC): Extract the creation of conftest.c
+ out of AC_COMPILE_IFELSE.
+ Be sure to clean the tmp files.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (AS_DIRNAME & AS_DIRNAME_SED): Simplify.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_ALLOCA): Don't require AC_PROG_CPP,
+ since (i) you actually need a compiler, (ii) AC_TRY_LINK handles
+ it.
+ * acheaders.m4 (AC_HEADER_STDC): Don't require AC_PROG_CPP,
+ AC_TRY_CPP does it.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ Create acheaders.m4.
+
+ * acgeneral.m4 (AC_CHECK_HEADER, AC_CHECK_HEADERS)
+ (AH_CHECK_HEADERS): Move to...
+ * acheaders.m4: here, a new file.
+ * acspecific.m4 (_AC_CHECK_HEADER_DIRENT, AH_CHECK_HEADERS_DIRENT)
+ (AC_HEADER_DIRENT, AC_HEADER_MAJOR, AC_HEADER_STAT, AC_HEADER_STDC)
+ (AC_HEADER_SYS_WAIT, AC_HEADER_TIME)
+ (_AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H)
+ (_AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL, AC_HEADER_TIOCGWINSZ): Move
+ to...
+ * acheaders.m4: here.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ Move AC_MSG_* into M4sh.
+
+ * acgeneral.m4 (_AC_SH_QUOTE, _AC_SH_QUOTE_IFELSE, _AC_ECHO): Move
+ to...
+ * m4sh.m4 (_AS_QUOTE, _AS_QUOTE_IFELSE, _AS_ECHO): here.
+ (AS_MESSAGE, AS_WARN, AS_ERROR): New.
+ * acgeneral.m4 (AC_MSG_NOTICE, AC_MSG_WARN, AC_MSG_ERROR): Use them.
+ (AC_FD_MSG, AC_FD_LOG): Be AU_ALIAS'es of...
+ (AS_MESSAGE_FD, AS_MESSAGE_LOG_FD): new.
+ Adjust all dependencies.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Spread some AS_EXIT and AC_MSG_ERROR.
+ (AC_OUTPUT): Don't play with trap, use ac_clean_files.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ Use AC_MSG_ERROR in `config.status', but adjust AC_MSG_* to use $0
+ instead of hard coded `configure'.
+
+ * acgeneral.m4 (AC_COPYRIGHT): s/configure.in/__file__/.
+ (_AC_INIT_DEFAULTS_FDS): Append to AC_FD_LOG instead of creating
+ it. No longer insert the configure banner.
+ (_AC_INIT_DEFAULTS): Create config.log with the banner.
+ Define `as_me'.
+ (_AC_INIT_PARSE_ARGS, _AC_INIT_PREPARE, AC_MSG_NOTICE)
+ (AC_MSG_CHECKING, AC_MSG_RESULT, AC_MSG_RESULT_UNQUOTED)
+ (AC_MSG_WARN, AC_MSG_ERROR, AC_MSG_ERROR, AC_TRY_CPP)
+ (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE, _AC_RUN_IFELSE)
+ (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS, _AC_PROG_F77_V_OUTPUT): Use
+ `$as_me' instead of `configure'.
+ (AC_OUTPUT): Get rid of the UCA, and of the empty line when
+ dumping confdefs.h into config.log.
+ (_AC_OUTPUT_CONFIG_STATUS): Use _AC_INIT_DEFAULTS_FDS.
+ Print a banner.
+ Use AC_MSG_ERROR and AC_MSG_NOTICE.
+ * acgeneral.m4 (AC_CACHE_LOAD, _AC_OUTPUT_FILES, _AC_OUTPUT_LINKS)
+ (_AC_OUTPUT_HEADERS): Use AC_MSG_NOTICE.
+ * tests/semantics.at (missing templates): Adjust.
+
+2000-11-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (autoconf Invocation): Explain `-W error'
+ gives back traces.
+
+2000-11-11 Pavel Roskin <proski@gnu.org>
+
+ * acfunctions.m4 (AC_CHECK_FUNCS): Add missing m4 quotes.
+ (AC_FUNC_GETPGRP): Likewise.
+ * acspecific.m4 (AC_AIX): Likewise.
+ * m4/init.m4 (AM_INIT_AUTOMAKE): Likewise.
+ * m4/missing.m4 (AM_MISSING_PROG): Likewise.
+ * m4/sanity.m4 (AM_SANITY_CHECK): Likewise.
+
+2000-11-11 Pavel Roskin <proski@gnu.org>
+
+ * acfunctions.m4: Always quote first argument of AC_MSG_ERROR,
+ AC_MSG_WARN, AC_MSG_CHECKING, AC_MSG_RESULT,
+ AC_MSG_RESULT_UNQUOTED.
+ * acgeneral.m4: Likewise.
+ * aclang.m4: Likewise.
+ * acspecific.m4: Likewise.
+ * configure.in: Likewise.
+ * doc/autoconf.texi: Likewise.
+
+2000-11-10 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Particular Structures): Fix examples for
+ AC_STRUCT_ST_BLKSIZE and AC_STRUCT_ST_RDEV.
+
+2000-11-10 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Don't use
+ uncommon abbreviations.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): Some information
+ about `trap'.
+ Document the FreeBSD bug observed by Pavel.
+
+2000-11-10 Pavel Roskin <proski@gnu.org>
+
+ * autoscan.pl (scan_files): Eliminate a warning if no C files
+ are found.
+ (output): Likewise. Use AC_CONFIG_SRCDIR and AC_CONFIG_FILES
+ instead of old-style arguments for AC_INIT and AC_OUTPUT.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): `&' in sed's rhs
+ is portable.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Shell Substitutions): Some information about
+ Solaris' sh handling of ``foo=${foo='}'}'' collected by Alexandre,
+ reported by David Taylor.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (Negated classes in globbing): New test.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): `for i; do'.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Shellology): Some about /usr/xpg4/bin/sh on
+ Solaris.
+ Sort the entries.
+ Some words about POSIX vs Bourne shell.
+ From Russ Allbery and Robert Lipe.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Shell Substitutions): Split into...
+ (Shell Substitutions, Assignments): these.
+ Move them before `Special Shell Variables'.
+ (Shell Substitutions): Include information on `$()' from Russ
+ Allbery.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ When running
+
+ AC_INIT
+ AC_PROG_CC
+ AC_LANG_COMPILER_REQUIRE
+
+ AC_PROG_CC is expanded twice, because AC_PROG_CC provides
+ `AC_PROG_CC', and not `AC_LANG_COMPILER(C)' as expected by
+ AC_LANG_COMPILER_REQUIRE.
+
+ * aclang.m4 (AC_LANG_COMPILER(C)): Instead of calling AC_PROG_CC,
+ require it.
+ (AC_LANG_COMPILER(C++), AC_LANG_COMPILER(Fortran 77)): Likewise.
+
+2000-11-10 Akim Demaille <akim@epita.fr>
+
+ * m4sh.m4 (AS_MKDIR_P, AS_DIRNAME_SED): Don't shell quote $1.
+ Adjust callers.
+ Reported by Paul Eggert.
+ * tests/m4sh.at: Sort.
+
+2000-11-09 Pavel Roskin <proski@gnu.org>
+
+ * install-sh: Use ":" instead of "true".
+
+2000-11-09 Pavel Roskin <proski@gnu.org>
+
+ * tests/tools.at (Syntax of the scripts): Check "autoreconf"
+ only once. Check "install-sh", "mkinstalldirs" and "missing".
+
+2000-11-09 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_COMPUTE_INT_COMPILE): Use ":" instead of
+ "true".
+ * tests/atgeneral.m4 (AT_INIT): Likewise.
+ * tests/tools.at (Syntax of the scripts): Likewise.
+
+2000-11-09 Pavel Roskin <proski@gnu.org>
+
+ * tests/m4sugar.at (m4_warn): Adjusted to accept stack dump when
+ -Werror is used.
+
+2000-11-08 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (_m4_expansion_stack_dump): Really rename as...
+ (m4_expansion_stack_dump): this.
+
+2000-11-08 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG_PROGRAM(Fortran 77): Complain about $1 having
+ a value.
+ Reported by Paul Martinolich.
+ (_AC_LANG_COMPILER_GNU): Pass the test as the body of
+ AC_LANG_PROGRAM, not the prologue.
+
+2000-11-07 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Temporarily disable recognizing of abbreviated
+ long options - it's hard to maintain them by hand.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Likewise.
+
+2000-11-07 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (ac_cv_prog_gcc, ac_cv_prog_gxx, ac_cv_prog_g77):
+ Be AU_DEFUN'd, not AU_ALIAS'd.
+ Reported by Ralf Corsepius.
+ * tests/mktests.sh (exclude_list): Skip these variables.
+
+2000-11-07 Akim Demaille <akim@epita.fr>
+
+ m4_syscmd was reestablished as `syscd' intead of `syscmd' because
+ instead of `s/^m4_//', m4_copy_unm4 was running `s/[m4_]//'.
+
+ * m4sugar.m4 (m4_copy_unm4): Fix.
+
+2000-11-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECKING): Is not an alias of AC_MSG_NOTICE,
+ hence use AU_DEFUN, not AU_ALIAS.
+
+2000-11-03 Jim Meyering <meyering@lucent.com>
+
+ * acfunctions.m4 (AC_FUNC_FNMATCH): Add a test to detect
+ the d*/*1 vs d/s/1 bug.
+ Add a couple more test cases to catch bugs in glibc 2.1.95.
+ Include fnmatch.h unconditionally
+ Mention the GNU C library.
+ From Paul Eggert.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ AC_CONFIG_AUX_DIR_DEFAULTS overrides AC_CONFIG_AUX_DIR. Ouch.
+ Reported by Paul Martinolich.
+
+ * acgeneral.m4 (AC_PROVIDE): Don't forget to `m4_provide'!!!
+ Tss, novice...
+ * tests/base.at (AC_REQUIRE & AC_PROVIDE): New test.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_location): When using its value, don't use
+ `m4_defn', since m4_location is not a variable, it's a macro which
+ expands to __file__:__line__.
+ * tests/m4sugar.at (m4_warn): New test.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (unexpanded macros): Strengthen.
+ * autoconf.sh (finalize.awk): Use `sub' instead of `index' +
+ `substr'.
+ More comments.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (.m4.m4f): Check that processing produces only
+ comments and empty lines.
+ Check that freezing produced no output.
+ * m4sugar.m4: Commentize what was not.
+ * m4sh.m4: Likewise.
+ * aclang.m4: Formatting changes.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * autoconf.m4 (define): Reestablish only after having read the
+ `ac' files.
+ Adjust all the Autoconf code to use `m4_define', not `define'.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AU_ALIAS): Don't forget to pass the arguments to
+ the new macro...
+ Reported by Ezra Peisach.
+ * tests/semantics.m4 (AC_HAVE_FUNCS): New test.
+ * tests/tools.at (autoupdate): As a benign side effect, updating a
+ macro that takes no argument produces `UPDATED([])', no longer
+ `UPDATED()'. Adjust the test.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * autoconf.m4: Instead of reactivating the macros before reading
+ Autoconf's files, do it afterwards, so that Autoconf promotes the
+ right use, but users still can use the old names.
+ Of course this revealed numerous non updated uses of old macros in
+ Autoconf's files. Adjust them.
+ But for the time being, keep `define' alive for Autoconf.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ AC_REQUIRE and AC_DEFUN_ONCE don't work properly together. This
+ caused strange messages about AC_ARG_PROGRAM.
+ Reported by Jim Meyering.
+
+ * acgeneral.m4 (AC_DEFUN_ONCE): Fix the indirection to
+ m4_defun_once.
+ * m4sugar.m4 (m4_defun_once): Also define
+ `m4_location(MACRO-NAME)'. s/ac_warn/m4_warn/.
+ Use `m4_defn' to read `m4_location'.
+ * tests/base.at (AC_REQUIRE & AC_DEFUN_ONCE): Two new tests.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ Set up config.log earlier so that AC_MSG_ERROR and AC_MSG_WARN can
+ be used early.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Call `_AC_INIT_PREPARE_FDS'.
+ (_AC_INIT_PREPARE): Don't.
+ (_AC_INIT_PREPARE_ENVIRONMENT, _AC_INIT_PREPARE_FDS): Rename as...
+ (_AC_INIT_DEFAULTS_ENVIRONMENT, _AC_INIT_DEFAULTS_FDS): these,
+ since they are called from `_AC_INIT_DEFAULTS', not
+ `_AC_INIT_PREPARE'.
+ (_AC_INIT_DEFAULTS_FDS): Dump `$@' in config.log, not
+ `$ac_configure_args' which is not computed yet.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): TRIPLET can include `_' and
+ `-'.
+ Reported by Andreas Jaeger.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * m4sh.m4 (_AS_UNSET_PREPARE): New macro, eved from
+ _AC_INIT_PREPARE_ENVIRONMENT, and fixed: set `FOO' before trying
+ to unset it: `unset' exits 1 if the variable is not defined.
+ (AS_UNSET): Require it. Use `as_unset' not `ac_unset'.
+ * acgeneral.m4 (_AC_INIT_PREPARE_ENVIRONMENT): Use it.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (builtin, changecom, changequote, decr, dumpdef)
+ (incr, index, indir, len, syscmd, sysval, traceoff, traceon):
+ Rename as...
+ (m4_builtin, m4_changecom, m4_changequote, m4_decr, m4_dumpdef)
+ (m4_incr, m4_index, m4_indir, m4_len, m4_syscmd, m4_sysval)
+ (m4_traceoff, m4_traceon): these.
+ * autoconf.m4 (builtin, changecom, decr, incr, index, indir, len)
+ (syscmd, sysval, traceoff, traceon): Reactivate.
+
+2000-11-03 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_rename_m4, m4_copy_unm4): New macros.
+ Use them.
+ (debugfile, debugmode, m4exit, m4wrap, maketemp, patsubst, regexp)
+ (substr, translit, m4_wrap): Rename as...
+ (m4_debugfile, m4_debugmode, m4_exit, m4_wrap, m4_maketemp)
+ (m4_patsubst, m4_regexp, m4_substr, m4_translit, m4_text_wrap): these.
+ Adjust all dependencies.
+ * acgeneral.m4: Adjust.
+ * tests/m4sugar.at: Adjust.
+ * autoconf.m4 (m4exit, patsubst, regexp, substr, translit):
+ Reestablish them.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ The documentation is not clear about the obsoleteness of
+ `acconfig.h', `config.h.top', and `config.h.bot'.
+ Reported by Aharon Robbins.
+
+ * doc/autoconf.texi (Making configure Scripts)
+ (Automatic Remaking, Defining Symbols, Distributing): Forget about
+ these files.
+ (acconfig.h): Reword.
+ Display the old scheme presenting the dependencies between input
+ and output files.
+ (Changed File Names): Clarify.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about
+ dirname.
+
+2000-11-02 Pavel Roskin <proski@gnu.org>
+
+ * ifnames.sh: Put the opening brace on the same line with
+ patterns. Reported by Paul Martinolich.
+ * tests/tools.at (AWK portability): Check ifnames.
+ (ifnames): New test for ifnames.
+ * THANKS: Updated.
+
+2000-11-02 Pavel Roskin <proski@gnu.org>
+
+ * m4/atconfig.m4 (AT_CONFIG): s/AT_TESTPATH/AUTOTEST_PATH/
+ because AT_TESTPATH looks like a macro.
+ * tests/atconfig.in: Likewise.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (trace.m4): Move all the M4 builtins into `at_'.
+ Catch the failures of the big pipe.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (Tracing M4 builtins): New test.
+ * autoconf.sh (trace_format): Fix its computation.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK): Check stderr first, since if both
+ stdout and stderr fail, differences on the latter are probably
+ more significant than on the former.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (task trace) [debug]: Instead of a long pipe, extend
+ trace.m4.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.sh (m4.txt): Use `dumpdef' and m4 to build it.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (popdef, pushdef): Rename as...
+ (m4_popdef, m4_pushdef): these.
+ Adjust dependencies.
+ * acgeneral.m4: Adjust.
+ * aclang.m4: Likewise.
+ * autoconf.m4 (popdef, pushdef): Reactivate them.
+
+2000-11-02 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_CHECK, AT_CLEANUP): Be more verbose when
+ `-v' is passed.
+
+2000-11-01 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Using trap-safe "exit".
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * tests/base.at: Use AS_EXIT instead of exit in configure.in.
+ * tests/m4sh.at: Likewise.
+ * tests/semantics.at: Likewise.
+
+2000-11-01 Akim Demaille <akim@epita.fr>
+
+ In M4sugar, move `define', `undefine', and `defn' into the `m4_'
+ name space.
+
+ * m4sugar.m4 (m4_define, m4_defn, m4_undefine): New macros.
+ (define, defn, undefine): Undefine.
+ Adjust all uses.
+ * m4sh.m4: Adjust.
+ * autoconf.m4: Reenable these builtins.
+ * m4sugar.m4 (m4_expansion_stack_dump): Use m4_copy.
+
+2000-11-01 Akim Demaille <akim@epita.fr>
+
+ GNU M4 1.4 improperly handle the traces of copies of builtins.
+
+ * autoconf.sh (task trace): When tracing `BUILTIN' also trace
+ `m4_BUILTIN'.
+
+2000-11-01 Akim Demaille <akim@epita.fr>
+
+ Autoupdate should not depend upon foreign macros.
+
+ * autoupdate.sh (ac.m4): Use `_au_define', not `define'.
+ (input.m4): Use `_au_BUILTIN' not `BUILTIN'.
+
+2000-11-01 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_fatal): Dump the expansion stack.
+ * acgeneral.m4 (AC_FATAL): Use m4_fatal.
+
+2000-11-01 Akim Demaille <akim@epita.fr>
+
+ Move the `defun' handling into M4sugar.
+
+ * m4sugar.m4 (_m4_divert(GROW), _m4_expansion_stack_dump)
+ _m4_defun_pro, _m4_defun_epi, m4_defun, $1, m4_defun_once)
+ m4_before, _m4_require, m4_require, m4_expand_once, m4_provide)
+ m4_provide_ifelse): New macros.
+ * acgeneral.m4 (_AC_EXPANSION_STACK_DUMP, _AC_DEFUN_PRO)
+ _AC_DEFUN_EPI): Removed.
+ (AC_DEFUN, AC_DEFUN_ONCE, _AC_REQUIRE, AC_REQUIRE)
+ AC_PROVIDE_IFELSE, AC_FATAL): Reimplement atop M4sugar.
+
+2000-11-01 Raja R Harinath <harinath@cs.umn.edu>
+
+ * tests/tools.at (autoupdating AC_LINK_FILES): Invoke autoconf
+ like in the rest of the tests.
+
+2000-11-01 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Typo: s/m4__warnings/m4_warnings/.
+
+2000-10-31 Pavel Roskin <proski@gnu.org>
+
+ * autoupdate.sh: Check that $sed understands the meaning of "\b"
+ instead of checking "--version".
+
+2000-10-31 Akim Demaille <akim@epita.fr>
+
+ Move the handling of classified warnings into M4sugar.
+
+ * m4sugar.m4 (m4_diagnose): Remove.
+ (m4_warning): New.
+ * acgeneral.m4 (AC_WARNING_IFELSE, _AC_WARNING_IFELSE)
+ (_AC_WARNING_ERROR_IFELSE, __AC_WARNING_ERROR_IFELSE)
+ (_AC_DIAGNOSE, AC_DIAGNOSE): Rename as...
+ * m4sugar.m4 (m4_warning_ifelse, _m4_warning_ifelse)
+ (_m4_warning_error_ifelse, __m4_warning_error_ifelse)
+ (_m4_warn, m4_warn): these.
+ * acgeneral.m4 (AC_DIAGNOSE): Wrapper around `m4_warn'.
+ * autoconf.sh: Define `m4_warnings' instead of `_AC_WARNINGS'.
+
+2000-10-30 Pavel Roskin <proski@gnu.org>
+
+ * acspecific.m4 (AC_PATH_XTRA): Use AC_LANG_PROGRAM() as the
+ argument to AC_LINK_IFELSE.
+
+2000-10-30 Pavel Roskin <proski@gnu.org>
+
+ * m4sh.m4 (AS_EXIT): Use "false" for exit code 1, ":" for 0.
+ * acgeneral.m4 (AC_MSG_ERROR): Don't use m4_default for the
+ second argument - AS_EXIT takes care of it.
+
+2000-10-30 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4: Formatting changes.
+
+2000-10-30 Akim Demaille <akim@epita.fr>
+
+ Move the handling of diversions into M4sugar.
+
+ * acgeneral.m4 (_AC_DIVERT, AC_DIVERT, AC_DIVERT_PUSH)
+ (AC_DIVERT_POP): Move to...
+ * m4sugar.m4 (_m4_divert, m4_divert, m4_divert_push)
+ (m4_divert_pop): here.
+ * acgeneral.m4: Adjust to use only the M4sugar macros.
+ Nevertheless...
+ (AC_DIVERT_PUSH, AC_DIVERT_POP): New wrappers around the M4sugar
+ macros.
+ (_AC_DIVERT(...)): Rename all the diversions names as...
+ (_m4_divert(...)): these.
+
+2000-10-30 Pavel Roskin <proski@gnu.org>
+
+ * m4sh.m4 (AS_EXIT): New macro that exits and makes sure that $?
+ is set correctly within the exit trap.
+ (AS_TMPDIR): Use it.
+ * acgeneral.m4 (AC_MSG_ERROR): Likewise,
+
+2000-10-29 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_CHECK_TOOL): Set VARIABLE also when using the
+ cache. From Jim Meyering.
+ (AC_PATH_TOOL): Likewise.
+
+2000-10-29 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_CHECK): Warn if the expected exit status
+ is different from what we got. Don't preserve exit status other
+ than 77.
+
+2000-10-29 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: When scanning for unexpanded macros match only
+ words beginning with "A?_" and "m4_" or containing "_A?_".
+ Strip the comments before the matching. Don't use character
+ ranges.
+
+2000-10-29 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Don't use a newline before
+ accessing $? - newlines in "trap" reset $? to 0 on FreeBSD 4.0.
+
+2000-10-29 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (AC_MSG_WARN): Now that this macro expands to
+ two stmts, enclose them in `{' ... `}'.
+
+2000-10-28 Pavel Roskin <proski@gnu.org>
+
+ * aclang.m4 (AC_REQUIRE_CPP): Don't default to C++ - call AC_FATAL
+ for unsupported languages.
+
+2000-10-27 Pavel Roskin <proski@gnu.org>
+
+ * acfunctions.m4 (AC_FUNC_MMAP): Remove conftestmmap from the
+ shell, not from the test program.
+
+2000-10-27 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Builtins): Recommend using
+ AC_MSG_ERROR instead of exit.
+ (Autoconf Language): Fix examples.
+
+2000-10-27 Pavel Roskin <proski@gnu.org>
+
+ * tests/suite.at: Move "-*- Autoconf -*-" to the second line.
+
+2000-10-27 Akim Demaille <akim@epita.fr>
+
+ Use AC_MSG_ERROR in the test suite, not just `exit'.
+
+ * tests/README: New file.
+ * tests/semantics.at: Don't just `exit 1' or `exit 77' from
+ configure.in: call AC_MSG_ERROR.
+ * tests/base.m4: Likewise.
+ * tests/m4sh.at: Likewise.
+ * tests/semantics.at (AT_CHECK_PROGS_PREPARE): New macro, eved
+ out of...
+ (AC_CHECK_PROG & AC_PATH_PROG): here.
+ Split into two individual tests...
+ (AC_CHECK_PROG & AC_CHECK_PROGS, AC_PATH_PROG & AC_PATH_PROGS): these.
+
+2000-10-27 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Recognize short options followed by arguments
+ without separators.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise. Recognize abbreviations for
+ "--autoconf-dir" and "--m4dir".
+ * autoupdate.sh: Likewise. Recognize abbreviations for
+ "--autoconf-dir".
+
+2000-10-26 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Don't show obsolete options on "--help". Report
+ obsolete options to stderr. Adjust list of options. Correct
+ processing of options. Process options with values separated by
+ "=" first, so that abbreviations work. Don't accept "=" with
+ short options.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: There is no "--verbose" option.
+ * doc/autoconf.texi: Option "-A" requires an argument.
+ (autoreconf Invocation): Document "--install", "--symlink",
+ "--m4dir" and the options passed to Automake.
+
+2000-10-26 Akim Demaille <akim@epita.fr>
+
+ * shell.m4: Rename as...
+ * m4sh.m4: this.
+ * tests/m4sugar.m4, tests/shell.m4, tests/torture.m4: Rename as...
+ * tests/m4sugar.at, tests/m4sh.at, tests/torture.at: these.
+ * tests/semantics.m4, tests/base.m4, tests/suite.m4: Rename as...
+ * tests/semantics.at, tests/base.at, tests/suite.at: these.
+ * tests/tools.m4, tests/update.m4, tests/syntax.m4: Rename as...
+ * tests/tools.at, tests/update.at, tests/syntax.at: these.
+ * tests/mktests.sh: Adjust the output file names.
+
+2000-10-25 Pavel Roskin <proski@gnu.org>
+
+ * autoupdate.sh: Redirect stdin for sed to /dev/null to avoid
+ hangs with non-GNU versions of sed.
+
+2000-10-25 Akim Demaille <akim@epita.fr>
+
+ Move the Autoconf independent shell macros into the file
+ `shell.m4' and the name space `AS_*'.
+
+ * acgeneral.m4 (AC_SHELL_IFELSE, _AC_SHELL_TMPDIR, AC_SHELL_UNSET)
+ (AC_SHELL_MKDIR_P, AC_SHELL_DIRNAME): Rename and move to...
+ * shell.m4 (AS_IFELSE, AS_TMPDIR, AS_UNSET, AS_MKDIR_P)
+ (AS_DIRNAME): here, a new file.
+ Adjust all dependencies.
+
+ * tests/base.m4 (m4_wrap): Eve out into...
+ * tests/shell.m4: here, new file.
+ * tests/base.m4 (AC_SHELL_MKDIR_P)
+ (AC_SHELL_DIRNAME & AC_SHELL_DIRNAME_SED): Eve out into...
+ * tests/m4sugar.m4 (AS_MKDIR_P, AS_DIRNAME & AS_DIRNAME_SED):
+ here, new file.
+ Adjust the test suite.
+
+2000-10-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_DIRNAME): Split its code into...
+ (AC_SHELL_DIRNAME_EXPR, AC_SHELL_DIRNAME_SED): these new macros.
+ * tests/base.m4 (AC_SHELL_DIRNAME & AC_SHELL_DIRNAME_SED): New
+ test.
+
+2000-10-25 Pavel Roskin <proski@gnu.org>
+
+ * tests/aclocal.m4 (AC_ENV_SAVE): Rename to ...
+ (AC_STATE_SAVE): ... this. Save the list of all files
+ in the current directory.
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): Compare lists of
+ files created by AC_ENV_SAVE. Remove state* before and after
+ the test.
+
+2000-10-25 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am: Add acversion.m4.in to EXTRA_DIST.
+
+2000-10-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_DIRNAME): The sed fall back was producing
+ twice the output for it was not using `-n' and used `p'. Remove
+ the latter.
+
+2000-10-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_FDS): Give some information on
+ the host in config.log.
+
+2000-10-24 Pavel Roskin <proski@gnu.org>
+
+ * tests/mktests.sh: Set locale to C to make sure that syntax.m4
+ and update.m4 are locale-independent.
+
+2000-10-24 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_CACHE_DUMP): Add a missing separator for sed
+ commands.
+
+2000-10-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AT_FILE_DEPENDENCY): Rename as...
+ (AC_FILE_DEPENDENCY_TRACE): this.
+
+2000-10-24 Lars J. Aas <larsa@sim.no>
+
+ * m4sugar.m4: (m4_tolower, m4_toupper): New macros.
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Use m4_toupper().
+ * aclang.m4 (AC_F77_FUNC): Use m4_toupper()/m4_tolower().
+
+2000-10-24 Pavel Roskin <proski@gnu.org>
+
+ * m4sugar.m4 (m4_quote): Comment change.
+
+2000-10-24 Akim Demaille <akim@epita.fr>
+
+ Start avoiding dependence upon character ranges.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Introduce `ac_cr_AZ',
+ `ac_cr_az', `ac_cr_09', `ac_cr_alnum' and `ac_hostname'.
+ Spread their use.
+
+2000-10-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT): Don't play with `trap'.
+ (_AC_INIT_PREPARE): Trap after having created config.log.
+ Also trap on 0.
+ When trapped, report why in config.log.
+ (AC_MSG_WARN, AC_MSG_ERROR): Also output the message in
+ config.log.
+
+2000-10-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Rename as...
+ (AC_SHELL_DIRNAME): this.
+ s/X$1/X[]$1/ so that when $1 is a macro, it's given a chance to be
+ expanded.
+ (AC_PREFIX_PROGRAM): Use AC_SHELL_DIRNAME.
+ Quote properly.
+
+2000-10-24 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (Syntax of the scripts): Specify the path to the
+ tested program, some shells don't honor the PATH with `sh PROG'.
+
+2000-10-23 Akim Demaille <akim@epita.fr>
+
+ Since GNU M4 now comes with its libm4 (binary), to avoid
+ ambiguities let's rename `libm4' (M4 code) as `m4sugar':
+
+ Readability And Greater Understanding Stands 4 M4sugar
+
+ name coined by Lars J. Aas.
+
+ * libm4.m4: Rename as...
+ * m4sugar.m4: this.
+ All dependencies adjusted.
+
+2000-10-23 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh (update_exclude_list, syntax_exclude_list): Add
+ `AC_PREREQ'.
+ * tests/tools.m4: Globally, don't use `../' to invoke the tested
+ tools, since the PATH is properly set, and in most cases it
+ obfuscates the test code.
+ (autoupdating AC_PREREQ): New tests.
+
+2000-10-23 Akim Demaille <akim@epita.fr>
+
+ In order to check that all the CPP symbols which are AC_DEFINE'd
+ are properly templated, autoheader traces
+ AC_DEFINE/AC_DEFINE_UNQUOTED. Only literals can be traced, and
+ actually tracing non literals produces invalid autoheader input.
+ Hence, provide a means to trace calls to
+ AC_DEFINE/AC_DEFINE_UNQUOTED with literals.
+
+ * acgeneral.m4 (AC_DEFINE_TRACE, AC_DEFINE_TRACE_LITERAL): New
+ macros.
+ (AC_DEFINE, AC_DEFINE_UNQUOTED): Use AC_DEFINE_TRACE.
+ * autoheader.sh: Trace AC_DEFINE_TRACE_LITERAL, not
+ AC_DEFINE/AC_DEFINE_UNQUOTED.
+
+2000-10-23 Akim Demaille <akim@epita.fr>
+
+ Let autoupdate change AC_PREREQ to require the current version of
+ Autoconf.
+
+ * acgeneral.m4 (_AC_VERSION_UNLETTER, _AC_VERSION_COMPARE): Move
+ to...
+ * libm4.m4 (m4_version_unletter, m4_version_compare): here.
+ Adjust dependencies.
+ * acgeneral.m4 (AU::AC_PREREQ): New macro.
+ * autoupdate.sh: Fail when `m4 input.m4' fails.
+
+2000-10-21 Pavel Roskin <proski@gnu.org>
+
+ * acfunctions.m4 (AC_FUNC_CHOWN): Remove temporary files on exit.
+ (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Likewise.
+ (AC_FUNC_SELECT_ARGTYPES): Likewise.
+ (AC_FUNC_UTIME_NULL): Likewise.
+ * acgeneral.m4 (_AC_COMPUTE_INT): Likewise.
+ * aclang.m4 (_AC_F77_NAME_MANGLING): Likewise.
+ * acspecific.m4 (_AC_SYS_LARGEFILE_MACRO_VALUE): Likewise.
+
+2000-10-20 Pavel Roskin <proski@gnu.org>
+
+ * tests/tools.m4 (autoupdating AC_LINK FILES): Clean up "src1"
+ and "src2" at the end of the test.
+
+2000-10-19 Pavel Roskin <proski@gnu.org>
+
+ * NEWS: Documented changes in AC_PROG_CPP and AC_TRY_CPP.
+ * doc/autoconf.texi (Compilers and Preprocessors): Likewise.
+ * acgeneral.m4 (AC_TRY_CPP): Comment changes.
+
+2000-10-19 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Shellology): Documented quirks in ash-0.2.
+
+2000-10-18 Pavel Roskin <proski@gnu.org>
+
+ * mdate-sh: Removed, its copy remains in the doc/ directory.
+
+2000-10-18 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TOOLS): Use `$' when reading a variable.
+
+2000-10-18 Morten Eriksen <mortene@sim.no>
+
+ * aclang.m4 (_AC_PROG_CC_G): Use the _AC_COMPILE_IFELSE macro
+ instead of reinventing the wheel. This also takes care of a bug
+ where the "-g" option was accepted if the compiler silently exits
+ with status unequal to 0.
+ (_AC_PROG_CXX_G): Likewise.
+ (AC_PROG_CC): As _AC_PROG_CC_G depends on $ac_objext and
+ $ac_exeext, move the expansion of _AC_OBJEXT and _AC_EXEEXT in
+ front of _AC_PROG_CC_G.
+ (AC_PROG_CXX, AC_PROG_F77): Likewise.
+
+2000-10-18 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (AT_INIT): Avoid foo="`bar`", foo=`bar` is
+ enough.
+ Use grep to check the presence of a string in a stream.
+ * m4/atconfig.m4: Quote.
+
+2000-10-18 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Quote the `sed' fall back.
+
+2000-10-18 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PROG_LN_S): If neither `ln -s' nor `ln' work,
+ fall back to `cp'.
+
+2000-10-17 Morten Eriksen <mortene@sim.no>
+
+ * acgeneral.m4 (AC_CHECK_TOOL): As AC_CHECK_PROG first tests the
+ value of the VARIABLE argument when looking for executables, we
+ need to set it to the correct value from AC_CHECK_TOOL when not
+ just passing on the incoming VARIABLE directly.
+ (AC_CHECK_TOOLS, AC_PATH_TOOL): Likewise.
+
+2000-10-17 Assar Westerlund <assar@sics.se>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Move the
+ _AC_INIT_PREPARE_ENVIRONMENT invocation to...
+ (_AC_INIT_DEFAULTS): here, so that we keep the same known
+ environment for more of the script.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (The GNU build system): Sketch of new a
+ chapter.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ Somehow, the adjustment of `mktests.sh' claimed on 2000-10-17 by
+ myself (`Fix autoupdate...') was not applied.
+
+ * tests/mktests.sh (update_exclude_egrep): Add AC_INIT, AC_OUTPUT,
+ AC_LINK_IFELSE.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_PROG, AC_CHECK_PROGS, AC_PATH_PROG)
+ (AC_PATH_PROGS, AC_PATH_TOOL, AC_CHECK_TOOL, AC_CHECK_TOOLS): Fix
+ the quotation.
+ (AC_PATH_TOOL, AC_CHECK_TOOL, AC_CHECK_TOOLS): Check with the
+ $ac_tool_prefix iff it is not empty.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Programs): Some notes on the
+ portability of Flex.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE)
+ (_AC_RUN_IFELSE): Before compiling, remove the files expected to
+ be produced.
+ (_AC_LINK_IFELSE, _AC_RUN_IFELSE): You don't create object files,
+ so don't remove them.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_FATAL): Use _AC_EXPANSION_STACK_DUMP.
+ (_AC_REQUIRE): Use AC_FATAL.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ Give a means to report where the macros have been defined in error
+ messages.
+
+ * libm4.m4 (m4_location): New macro.
+ (m4_errprint): Rename as...
+ (m4_diagnose): this. Use m4_location.
+ Adjust dependencies.
+ (m4_errprint): New macro, similar to `errprint' but for an
+ additional trailing `\n'.
+ * acgeneral.m4 (AC_DEFUN, AC_DEFUN_ONCE): Define `m4_location($1)'
+ to the current location (i.e., that of the definition of $1).
+ (_AC_DEFUN_PRO, _AC_REQUIRE): Also push the location of the
+ current macro in the stack.
+ (_AC_EXPANSION_STACK_DUMP): Adjust.
+
+2000-10-17 Akim Demaille <akim@epita.fr>
+
+ Fix autoupdate: updating `AC_OUTPUT_COMMANDS' was failing because
+ it includes another AU defined macro.
+
+ * autoupdate.sh (input.m4:_au_defun): New macro.
+ (au.m4): Use it instead of inlining _au_enable/_au_disable
+ invocations in the definition of all these macros.
+ (input.m4:__au_enable, input.m4:__au_disable): New macros.
+ (input.m4:_au_enable, input.m4:_au_disable): Use them.
+ * tests/mktests.sh (update_exclude_list): Add `AC_OUTPUT'.
+ Running it twice in a configure.in is not valid.
+ Add `AC_LINK_FILES' since it requires arguments.
+ * tests/tools.m4 (autoupdating AC_LINK_FILES): New test.
+
+2000-10-17 Raja R Harinath <harinath@cs.umn.edu>
+
+ * Makefile.am (MAINTAINERCLEANFILES): Add acversion.m4.
+ (INSTALL.txt): Put into $(srcdir).
+ (acversion.m4): Build here ...
+ * configure.in (AC_OUTPUT): Not here.
+
+ * tests/Makefile.am (MACRO_FILES): Don't use $(top_srcdir).
+ (syntax.m4): Create in $(srcdir).
+ (update.m4): Likewise.
+ * tests/atspecific.m4 (AT_CHECK_UPDATE): Look for autoconf
+ macros in the top source directory.
+
+2000-10-16 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_COMPILER_GNU): New macro, which unifies...
+ (_AC_PROG_F77_GNU, _AC_PROG_CC_GNU, _AC_PROG_CXX_GNU): Remove.
+ Adjust dependencies.
+ (ac_cv_prog_gcc, ac_cv_prog_gxx, ac_cv_prog_g77): AU_ALIAS'ed.
+
+2000-10-16 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Adjust copyright notice.
+ * acspecific.m4: Likewise.
+ * acoldnames.m4: Likewise.
+ * acversion.m4.in: Likewise.
+ * autoconf.sh: Likewise.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoscan.pl: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Likewise.
+
+2000-10-16 Pavel Roskin <proski@gnu.org>
+
+ * tests/aclocal.m4: Don't consider variables @, '*', '?' and
+ '#' in the output of `set' - they are modified by zsh.
+
+2000-10-14 Pavel Roskin <proski@gnu.org>
+
+ * m4/missing.m4 (AM_MISSING_PROG): Use $SHELL to run "missing".
+ * configure.in: Don't add $SHELL to the path of help2man -
+ it is already added by AM_MISSING_PROG.
+
+2000-10-13 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: If ever it fails, touch the output files
+ ``a` la missing''.
+
+2000-10-13 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LINKER_OPTION): Ahem, err, use `$' when
+ consulting a variable...
+
+2000-10-13 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Typos in comments spotted by Pavel.
+
+2000-10-12 Pavel Roskin <proski@gnu.org>
+
+ * acspecific.m4 (AC_PROG_LEX): Don't assume that lex exists.
+ Don't run _AC_DECL_YYTEXT if it doesn't. Always check libl and
+ libfl regardless of the $LEX value.
+
+2000-10-12 Morten Eriksen <mortene@sim.no>
+
+ * acgeneral.m4 (AC_CONFIG_SUBDIRS): Fixed nasty typo.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: Backslash the quote in the heredocs to help
+ syntax highlighting tools.
+ * tests/atspecific.m4 (AT_CHECK_UPDATE): Give a better AT_SETUP
+ title.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SH_QUOTE): Issue an `obsolete' warning for use
+ of backquotes, instead of a `syntax' warning.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_VAR_IN_INDIR, AC_VAR_IF_SET): Rename as...
+ (AC_VAR_INDIR_IFELSE, AC_VAR_SET_IFELSE): this.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: Remove tmp files.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ Macros used by AC_LANG_COMPILER macros shall not AC_REQUIRE
+ AC_LANG_COMPILER by the way of AC_COMPILE_IFELSE etc.
+
+ * acspecific.m4 (_AC_EXEEXT): Use _AC_LINK_IFELSE, not
+ AC_LINK_IFELSE to avoid AC_REQUIREing AC_PROG_CC which precisely
+ requires _AC_EXEEXT.
+ Don't run _AC_CYGWIN, _AC_MINGW32, _AC_EMXOS2.
+ * aclang.m4 (_AC_PROG_F77_G): Use _AC_COMPILE_IFELSE, not
+ AC_COMPILE_IFELSE.
+ (_AC_LANG_COMPILER_WORKS): Use _AC_LINK_IFELSE, not
+ AC_LINK_IFELSE.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ Diagnose AC_REQUIRE circular dependencies.
+
+ * acgeneral.m4 (_AC_DEFUN_PRO, _AC_DEFUN_EPI): Keep a stack of
+ macro expansions, _AC_EXPANSION_STACK.
+ Use `_AC_EXPANDING(FOO)' to record the fact that `FOO' is being
+ expanded.
+ (_AC_REQUIRE): Diagnose required macros which are already being
+ expanded.
+ Record in _AC_EXPANSION_STACK the AC_REQUIRE calls.
+ (_AC_EXPANSION_STACK_DUMP): New macro.
+
+2000-10-12 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_dumpdefs, _m4_dumpdefs_up, _m4_dumpdefs_down): New
+ macros.
+
+2000-10-11 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_CHECK): Make sure that $? is set to 0
+ if diffs have succeeded.
+
+2000-10-11 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE)
+ (_AC_RUN_IFELSE): New macros which are the former
+ AC_COMPILE_IFELSE etc. without AC_LANG_COMPILER_REQUIRE.
+ (AC_COMPILE_IFELSE, AC_LINK_IFELSE, AC_RUN_IFELSE): Use them.
+
+2000-10-11 Morten Eriksen <mortene@sim.no>
+
+ * acgeneral.m4 (AC_RUN_IFELSE): Add missing executable suffix.
+ * aclang.m4 (_AC_LANG_COMPILER_WORKS): Likewise.
+ * aclang.m4 (AC_PROG_CC_C_O, AC_PROG_F77_C_O): Fix typos where
+ $objext were used instead of $ac_objext.
+
+2000-10-05 Akim Demaille <akim@epita.fr>
+
+ Check that updated scripts are valid scripts.
+
+ * tests/mktests.sh: Generate `syntax.m4' directly.
+ * tests/macros.m4: Remove.
+ Adjust dependencies.
+ * tests/mktests.sh: Generate `update.m4' too.
+ * tests/update.m4: New generated file.
+ Adjust dependencies.
+ * tests/atspecific.m4 (AT_CHECK_UPDATE): New macro.
+
+2000-10-05 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: New file, which replaces the code inlined in
+ Makefile.am.
+ * src/Makefile.am (macros.m4): Use `mktests.sh'.
+ * tests/suite.m4: Reorder from low level to high level.
+
+2000-10-02 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_ABBREV, _AC_LANG_ABBREV(C))
+ (_AC_LANG_ABBREV(C++), _AC_LANG_ABBREV(Fortran 77): New macros.
+ (AC_LANG_(C), AC_LANG_(C++), AC_LANG_(Fortran 77)): Don't define
+ AC_LANG_ABBREV.
+ (_AC_PROG_PREPROC_WORKS): Adjust.
+ * acgeneral.m4 (_AC_TRY_CPP): Likewise.
+
+2000-10-02 Pavel Roskin <proski@gnu.org>
+
+ * acspecific.m4 (AC_PROG_LEX): Use AC_DEFUN_ONCE.
+ (AC_DECL_YYTEXT): Don't use AC_REQUIRE because autoupdate
+ would place it into configure.in but it's not allowed
+ outside AC_DEFUN.
+
+2000-10-02 Pavel Roskin <proski@gnu.org>
+
+ * tests/Makefile.am: Macros defined by AC_DEFUN_ONCE should
+ go to macros.m4 for testing.
+
+2000-09-28 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_SHELL_UNSET): Don't rely on variable
+ assignments changing $?.
+
+2000-09-28 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Fixed exit status.
+ (_AC_OUTPUT_HEADERS): Exit if the header template is missing.
+
+2000-09-28 Pavel Roskin <proski@gnu.org>
+
+ * acfunctions.m4: Formatting fixes.
+ * acgeneral.m4: Likewise.
+ * aclang.m4: Likewise.
+ * acspecific.m4: Likewise.
+ * libm4.m4: Likewise.
+
+2000-09-27 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_CHECK_PROG): Added protection against spaces
+ in $PATH.
+ * acspecific.m4 (AC_PROG_INSTALL): Likewise.
+
+2000-09-27 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_CHECK_LIB): only call AH_CHECK_LIB if
+ ACTION-IF-TRUE is not given.
+ (AH_CHECK_LIB): related comment changes.
+
+2000-09-27 Pavel Roskin <proski@gnu.org>
+
+ * aclang.m4 (_AC_LANG_COMPILER_WORKS): Remove []dnl because it
+ resulted in invalid shell code.
+
+2000-09-27 Lars J. Aas <larsa@sim.no>
+
+ * autoconf.sh: Report full macro name for missing macros.
+
+2000-09-27 J. David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * autoheader.sh: Fix trap (EXIT) status.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * autoconf.sh: Change `exit' to `{ (exit 1); exit; }' after m4 and
+ awk commands to ensure exit state is in a defined state.
+
+2000-09-25 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * tests/semantics.m4 (AC_PROG_CPP with warning): Simplified.
+
+2000-09-25 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Use
+ _AC_INIT_PREPARE_ENVIRONMENT to make the shell running
+ config.status sane and POSIX-compatible.
+
+2000-09-25 Pavel Roskin <proski@gnu.org>
+
+ * autoheader.sh: Don't check status of variable assignments -
+ it's undefined in ash 0.2.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * autoconf.sh: Likewise. Also eliminated command substitution
+ inside variable expansion - ash 0.2 coredumps on it.
+
+2000-09-21 Pavel Roskin <proski@gnu.org>
+
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): Check stderr from
+ autoconf and autoheader. Expected warnings disabled by "-W none"
+ Preceding comment removed as no longer relevant.
+ * tests/semantics.m4 (AC_CHECK_PROG & AC_PATH_PROG): Check
+ stderr from autoconf.
+ (AC_PATH_PROG & AC_PATH_PROGS): Likewise.
+ (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS): Likewise.
+ * tests/tools.m4 (autoheader): Check that autoheader prints
+ a warning for missing templates. Check stderr from autoconf.
+ * tests/torture.m4 (config.status under extreme conditions):
+ Check stderr from autoconf and autoheader.
+ (command line interface): Check stderr from autoconf.
+
+2000-09-21 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix usage info for
+ config.status - file arguments are optional.
+
+2000-09-21 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Ensure that config.status
+ exits if any input file is missing.
+ * tests/semantics.m4 (missing templates): Test it.
+
+2000-09-21 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_SHELL_TMPDIR): Don't check status of variable
+ assignment - it's undefined in ash 0.2.
+
+2000-09-21 Akim Demaille <akim@epita.fr>
+
+ * src/atgeneral.m4 (AC_CHECK): Display stderr including when the
+ test failed because of stdout.
+
+2000-09-21 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4: Formatting changes.
+ (AT_INIT): Let `at_stop_on_error' and `at_verbose' be `:'/`false'
+ variables instead of `'/`1'.
+ `at_check_stds' replaces `at_no_redirs'.
+ Rename `Snippet 3' as `Snippet 4'.
+ Introduce `Snippet 3' for variable initializations.
+ Adjust the dependencies.
+ (AT_CHECK): Don't show diff's result unless verbose.
+
+2000-09-20 Pavel Roskin <proski@gnu.org>
+
+ * tests/Makefile.am: AC_PREFIX_PROGRAM and AC_F77_FUNC excluded
+ from testing because they require an argument.
+ * tests/atspecific.m4: Make sure that configure doesn't write
+ anything to stderr.
+
+2000-09-20 Pavel Roskin <proski@gnu.org>
+
+ * acspecific.m4 (_AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H): Cache
+ variable wasn't always set inside AC_CACHE_CHECK.
+ (_AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL): Likewise.
+ From Nicolas Joly.
+
+2000-09-20 Pavel Roskin <proski@gnu.org>
+
+ * libm4.m4 (m4_ifvanl): Don't output a newline for empty
+ arguments.
+
+2000-09-19 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_TEST_MACRO): Rename as...
+ (AT_CHECK_MACRO): this. All dependencies adjusted.
+
+2000-09-19 Akim Demaille <akim@epita.fr>
+
+ * tests/aclocal.m4.new (AC_ENV_SAVE): Skip POW_LIB, used by
+ AC_FUNC_STRTOD.
+ From Bernard Dautrevaux.
+
+2000-09-19 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_DATA): Use _ATEOF instead of EOF.
+
+2000-09-19 Pavel Roskin <proski@gnu.org>
+
+ * tests/semantics.m4 (AC_PROG_CPP with warnings): Minor
+ simplification.
+
+2000-09-19 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (optarg): More robust expr invocation.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * autoheader.sh: Likewise.
+ Reported by Bernard Dautrevaux.
+
+2000-09-19 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AU_ALIAS): Do not use `defn' since then autoupdate
+ would replace an old macro call with the new macro body instead of
+ the new macro call.
+ * tests/tools.m4 (autoupdate): Test an AU_ALIAS'd macro update.
+
+2000-09-19 Pavel Roskin <proski@gnu.org>
+
+ * tests/atspecific.m4 (_AT_CHECK_AC_MACRO): New macro.
+ (AT_TEST_MACRO): Use it.
+ * tests/semantics.m4 (AC_PROG_CPP with warnings, AC_PROG_CPP
+ without warnings): New tests.
+
+2000-09-18 Ruediger Kuhlmann <autoconf-list@ruediger-kuhlmann.de>
+
+ * acgeneral.m4 (_AC_OUTPUT_SUBDIRS): Check for configure.gnu
+ as well.
+ (_AC_INIT_HELP): Likewise.
+ (NEWS): Note checking for configure.gnu.
+ * doc/autoconf.texi: Document checking for configure.gnu when
+ recursing subdirectories.
+
+2000-09-18 Jim Meyering <meyering@lucent.com>
+
+ * acfunctions.m4 (AC_FUNC_GETLOADAVG): Restore the initial value
+ of LIBS. Otherwise, everyone ends up linking with -lelf for some
+ configurations.
+ Reported by Mike Stone.
+
+2000-09-14 Pavel Roskin <proski@gnu.org>
+
+ * aclang.m4 (AC_PROG_CPP): Use double quotes in the for loop
+ and eliminate ac_tmp_cpp.
+ (AC_PROG_CXXCPP): Use double quotes in the for loop and
+ eliminate ac_tmp_cxxcpp.
+
+2000-09-14 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_TRY_CPP): Don't filter out conftest.$ac_ext
+ from the output - it is only printed by Visual C that gives
+ correct exit status.
+ * aclang.m4 (AC_PROG_CPP): Don't try '${CC-cc} -nologo -E'
+ by the same reason.
+
+2000-09-12 Pavel Roskin <proski@gnu.org>
+
+ * aclocal.m4 (_AC_PROG_CPP_WORKS): Don't use AC_REQUIRE_CPP -
+ it's useless here. Rename to ...
+ (_AC_PROG_PREPROC_WORKS): ... this.
+
+2000-09-12 Ruediger Kuhlmann <autoconf-list@ruediger-kuhlmann.de>
+
+ * acspecific.m4 (AC_PROG_INSTALL): Exclude c:install on AmigaOS.
+
+2000-09-12 Akim Demaille <akim@epita.fr>
+
+ The test suite fails on some hosts because for instance
+ AC_INIT
+ AC_CHECK_FUNC(exit)
+ will not look for a compiler, it will just use `cc'.
+ Macros that need a compiler should require one.
+
+ * acgeneral.m4 (_AC_REQUIRE): New macro, which is actually the
+ previous version of AC_REQUIRE plus the possibility to distinguish
+ the name of the symbol being AC_PROVIDE'd, and the text to expand.
+ (AC_REQUIRE): Reimplement in terms of _AC_REQUIRE.
+ * aclang.m4 (AC_LANG_COMPILER, AC_LANG_COMPILER_REQUIRE)
+ (AC_LANG_COMPILER(C), AC_LANG_COMPILER(C++))
+ (AC_LANG_COMPILER(Fortran 77)):
+ New macros.
+ * acgeneral.m4 (AC_COMPILE_IFELSE, AC_LINK_IFELSE, AC_RUN_IFELSE):
+ Require a compiler.
+ (AC_TRY_RUN): Formatting changes.
+ * acfunctions.m4 (AC_FUNC_SETPGRP): Quote properly. The previous
+ changes revealed the weaknesses of this macro.
+
+2000-09-12 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_TRY_CPP): New macro. It runs the preprocessor
+ and checks whether it produces errors or warnings. Don't put grep
+ output into a variable, use another grep instead.
+ (AC_TRY_CPP): Use _AC_TRY_CPP. Copy conftest.err to config.log
+ if the case of an error.
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77)):
+ define AC_LANG_ABBREV to the short language name.
+ (_AC_PROG_CPP_WORKS): New macro. It checks whether the current
+ preprocessor can be used to check for existence of headers.
+ Most code taken from ...
+ (AC_PROG_CPP): ... here. Use _AC_PROG_CPP_WORKS. Use shell
+ "for" to find working CPP. Use AC_LANG_PUSH(C) and AC_LANG_POP -
+ it's a macro for C only.
+ (AC_PROG_CXXCPP): Rewritten using _AC_PROG_CPP_WORKS.
+
+2000-09-12 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.sh (sed): Look for GNU sed.
+ (usage): Ask for GNU sed.
+
+2000-09-12 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (AC_EGREP_CPP): Use additional quotes instead of
+ changequote.
+
+2000-09-12 Ruediger Kuhlmann <autoconf-list@ruediger-kuhlmann.de>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WIDTH): Add trailing
+ semicolon to final fi.
+
+2000-09-11 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_WARNING_ERROR_IFELSE)
+ (__AC_WARNING_ERROR_IFELSE): New macros for checking whether
+ warnings should be considered errors.
+ (_AC_DIAGNOSE): Use _AC_WARNING_ERROR_IFELSE.
+
+2000-09-11 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Properly report names of unexpanded macros that
+ begin with an underscore.
+
+2000-09-11 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Preset Output Variables): Correctly specify
+ what languages are affected by CPPFLAGS, LDFLAGS and LIBS.
+ Extended description of LDFLAGS and LIBS.
+ (Compilers and Preprocessors, C Compiler Characteristics):
+ Recommend Automake as the source of ansi2knr.
+ (Autoconf Language, Quotation and Nested Macros): English fixes.
+ (Quotation and Nested Macros): Unclear example replaced with
+ an explanation of when m4 expands quotes. Added explanation why
+ unquoted calls are dangerous.
+
+2000-09-08 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi: Always use one space before the opening
+ parenthesis in @defmac.
+
+2000-09-06 Morten Eriksen <mortene@sim.no>
+
+ * acspecific.m4 (_AC_OBJEXT): No longer use AC_COMPILE_IFELSE,
+ which uses $ac_objext hence depends upon _AC_OBJEXT.
+ * aclang.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Call
+ _AC_OBJEXT before _AC_EXEEXT since the latter needs $ac_objext.
+
+2000-09-06 Bernard Dautrevaux <dautrevaux@objectlive.com>
+
+ * acspecific.m4 (_AC_EXEEXT): Set extension to void if linking
+ creates both an unsuffixed file and suffixed ones.
+
+2000-09-06 Peter Eisentraut <peter_e@gmx.net>
+
+ * autoconf.texi: English and typo fixes.
+
+2000-09-05 Pavel Roskin <proski@gnu.org>
+
+ * autoconf.sh: Consider undefined macros as errors.
+ * tests/base.m4 (unexpanded macros): Expect error, not warning.
+
+2000-09-05 Dave Love <fx@gnu.org>
+
+ * aclang.m4 (_AC_PROG_F77_GNU): Run command from standard input so
+ that we can get some standard output.
+
+2000-09-04 Peter Eisentraut <peter_e@gmx.net>
+
+ * autoscan.pl: Repair broken Getopt::Long use.
+
+2000-09-04 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump version to 2.49b.
+ * Makefile.am (bin_SCRIPTS): Depend upon configure.in.
+
+2000-08-11 Akim Demaille <akim@epita.fr>
+
+ Version 2.49a.
+
+2000-08-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_NO_EXECUTABLES): New macro.
+
+2000-08-11 Akim Demaille <akim@epita.fr>
+
+ * tests/base.m4 (AC_SHELL_MKDIR_P): Remove `a' too.
+
+2000-08-11 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump version to 2.49a.
+
+2000-08-11 J. David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * autoconf.sh: Change `exit N' to `(exit N); exit' to provide
+ the correct exit status when an exit trap is taken.
+
+2000-08-11 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AM_FUNC_ERROR_AT_LINE, AM_FUNC_FNMATCH,
+ AM_FUNC_MKTIME, AM_FUNC_OBSTACK, AM_FUNC_STRTOD): Deactivate
+ their AU_ALIAS definition: Automake 1.4 does not quote the name of
+ these macros, hence when Autoconf reads Automake's definition the
+ name is expanded with unpredictable results.
+
+2000-08-09 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (Installing Autoconf extensions files): Remove.
+
+2000-08-09 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (finalize.awk): Don't leave spaces before the user
+ function calls.
+ Reported by John David Anglin.
+ * doc/autoconf.texi (Limitations of Usual Tools): Start the AWK
+ section.
+ * tests/tools.m4 (AWK portability): New test.
+
+2000-08-08 Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am: Substitute @bindir@ in shell scripts, needed by
+ autoheader.
+
+2000-08-07 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (_AC_LIBOBJ_ALLOCA, AC_REPLACE_FUNCS): Simplify
+ ${foo} into $foo.
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++)): Move some internal
+ comments into the header comment.
+ * acgeneral.m4 (AC_TRY_CPP): Likewise.
+
+2000-08-07 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (undefined macros): New test.
+
+2000-08-07 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (finalize.awk): New subtool, eved from the previous
+ literal AWK program that performed the `oline' and quadrigraphs
+ substitution.
+ Fix its `oline' computation which was dead wrong when there are
+ empty lines (i.e., always).
+ Enhance it in order to look for and report unexpanded macro.
+ Don't let it pretend there are bugs in Autoconf (c:, the test
+ suite makes this scenario pretty unlikely as opposed to an actual
+ user bug.
+ Catch `m4_' too.
+ Remove the shell snippet which used to do this.
+
+2000-08-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_MSG_NOTICE): New macro, suggested by Pavel
+ Roskin.
+ (AC_MSG_ERROR): Use it.
+
+2000-08-04 Ruediger Kuhlmann <uck4@rz.uni-karlsruhe.de>
+
+ * acspecific.m4 (AC_PROG_RANLIB): Use AC_CHECK_TOOL.
+ * doc/autoconf.texi (Limitations of Usual Tools): Typos.
+
+2000-08-04 Akim Demaille <akim@epita.fr>
+
+ Solaris' /usr/ucb/expr, and SunOS' /usr/bin/expr fail with the `:'
+ operator when \(\) is used, and matches a string longer than 120
+ characters.
+ Reported by Geoff Keating.
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some words about
+ this.
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Fall back to echo|sed if expr
+ fails.
+ From Paul Eggert.
+
+2000-08-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: (AC_RUN_IFELSE, AC_LINK_IFELSE, AC_COMPILE_IFELSE):
+ Don't create the source file if none is given, and in this case,
+ don't remove it either.
+
+2000-08-04 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_ifvanl): New macro.
+ * acgeneral.m4: Use it.
+
+2000-08-02 Akim Demaille <akim@epita.fr>
+
+ Release Automake from being a substitute to Autoconf.
+
+ * acspecific.m4 (_AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H,
+ _AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL, AC_HEADER_TIOCGWINSZ,
+ AC_SYS_POSIX_TERMIOS): New macros from both Automake and the
+ fileutils.
+
+2000-08-02 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_CC_G, _AC_PROG_CXX_G): Recent changes
+ inverted the results. Fix that.
+
+2000-08-02 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Special Shell Variables): More emphasis on
+ the dangers of character ranges.
+ From Paul Eggert.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh (_ac_warnings): Be robust to LC_COLLATE.
+ `IFS=,; echo ,' will give a comma. Take this into account.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_CC): Also try to find $target_alias-cc.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ AC_VALIDATE_CACHED_SYSTEM_TUPLE no longer works properly since the
+ AC_CANONICAL_* revamping.
+ Reported by Peter Eisentraut.
+ In fact, let's just use the precious variables handling.
+
+ * acgeneral.m4 (AC_VALIDATE_CACHED_SYSTEM_TUPLE): Obsoleted.
+ (_AC_ARG_VAR_PRECIOUS): New macro, eved from...
+ (AC_ARG_VAR): this macro. Adjust.
+ (_AC_INIT_PREPARE): `build_alias', `host_alias', and
+ `target_alias' are precious.
+ * doc/autoconf.texi: Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_ENVIRONMENT): Neutralize also
+ LC_COLLATE and LC_NUMERIC.
+ * autoconf.m4: Don't rely on character ranges with tr.
+ * doc/autoconf.texi (Special Shell Variables): Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (_AC_LIBOBJ_STRTOD, AC_FUNC_STRTOD,
+ AM_FUNC_STRTOD): New macros, from Automake.
+ * acfunctions: Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acidentifiers: Catch ptrdiff_t.
+ * acspecific.m4 (AM_TYPE_PTRDIFF_T): AU define.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Be ready to handle AC_CHECK_TYPES requests.
+ Quote properly the output.
+ Remove useless backslashes.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_ONSTACK): New macro, from
+ Automake.
+ * doc/autoconf.texi (Particular Functions): Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_ERROR_AT_LINE): New macro, from
+ Automake.
+ * doc/autoconf.texi (Particular Functions): Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ Create acfunctions.m4, in charge of the macros related to
+ functions.
+
+ * acgeneral.m4 (AC_CHECK_FUNC, AC_CHECK_FUNCS, AC_REPLACE_FUNCS):
+ Move to...
+ * acfunctions.m4: here, new file.
+ * acspecific.m4 (_AC_LIBOBJ_ALLOCA, AC_FUNC_ALLOCA, AC_FUNC_CHOWN,
+ AC_FUNC_CLOSEDIR_VOID, AC_FUNC_FNMATCH, AC_FUNC_GETGROUPS,
+ _AC_LIBOBJ_GETLOADAVG, AC_FUNC_GETLOADAVG, AC_FUNC_GETMNTENT,
+ AC_FUNC_GETPGRP, AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK,
+ AC_FUNC_MALLOC, AC_FUNC_MEMCMP, AC_FUNC_MKTIME, AC_FUNC_MMAP,
+ AC_FUNC_SELECT_ARGTYPES, AC_FUNC_SETPGRP, _AC_FUNC_STAT,
+ AC_FUNC_STAT, AC_FUNC_LSTAT, AC_FUNC_STRERROR_R, AC_FUNC_STRFTIME,
+ AC_FUNC_VFORK, AC_FUNC_VPRINTF, AC_FUNC_WAIT3, AC_FUNC_UTIME_NULL,
+ AC_FUNC_STRCOLL, AC_FUNC_SETVBUF_REVERSED): Likewise.
+ * Makefile.am: Adjust.
+
+ Move also the old definitions into acfunctions.m4, and adjust the
+ test suite.
+
+ * acgeneral.m4 (AU_ALIAS): New macro.
+ * acoldnames (AC_FUNC_CHECK, AC_HAVE_FUNCS, AC_ALLOCA,
+ AC_GETLOADAVG, AC_MMAP, AC_SETVBUF_REVERSED, AC_STRCOLL,
+ AC_UTIME_NULL, AC_VFORK, AC_VPRINTF, AC_WAIT3, AM_FUNC_FNMATCH,
+ AM_FUNC_MKTIME, fp_FUNC_FNMATCH): Move to...
+ * acfunctions.m4: here, using AU_ALIAS.
+ * acgeneral.m4 (AC_FD_CC, AC_CANONICAL_SYSTEM): Use AU_ALIAS to
+ define them.
+ * acoldnames.m4: Use AU_ALIAS instead of AU_DEFUN.
+ * tests/Makefile.am (MACRO_FILES): Adjust.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Use Getopt::Long;
+ * acidentifiers: Classify, sort.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_CXX_GNU, _AC_PROG_CC_GNU, _AC_PROG_F77_GNU):
+ Use grep instead of egrep, don't redirect stderr.
+
+2000-08-01 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_NOTICE): Adjust so that there are no
+ empty lines in the header comments (should be `#' alone instead).
+ Reported by Didier Verna.
+
+2000-08-01 Greg A. Woods <woods@weird.com>
+
+ * doc/autoconf.texi (Installation Directory Variables):
+ Clarifications and typos.
+
+2000-08-01 Didier Verna <didier@lrde.epita.fr>
+
+ * acgeneral.m4 (AC_REVISION): Put a dot at the end of the line.
+ (_AC_INIT_HELP): Output the bug report address at
+ the end of a `configure --help' output.
+ (_AC_INIT_NOTICE): Ditto, but at the top of `configure'.
+
+2000-07-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_FDS): New macro, pulled out of
+ (_AC_INIT_PREPARE): here, where it is called from.
+ * aclang.m4 (_AC_PROG_CC_G, _AC_PROG_CXX_G): Don't test -z "`foo`".
+
+2000-07-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_DIVERT(INIT_PARSE_ARGS)): Rename as...
+ (_AC_DIVERT(PARSE_ARGS)): this. Adjust dependencies.
+ (AC_ARG_WITH): Remove spurious newline.
+ (AC_ARG_VAR): No longer save precious variables in
+ ac_configure_args, rather snapshot them twice (one kept
+ unmodified, another one to be written to/overwritten by the cache
+ file).
+ (AC_CACHE_SAVE): Let the cache variables named `ac_cv_env_*'
+ be overwritten when loading the cache (i.e., don't use the
+ : ${foo=...} trick).
+ (_AC_ARG_VAR_VALIDATE): Compare the two snapshots of the precious
+ variables.
+ (_AC_INIT_PREPARE): Call it after having loaded the cache file.
+
+2000-07-28 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG_CONFTEST, _AC_PROG_CC_GNU, _AC_PROG_CXX_GNU,
+ _AC_PROG_F77_GNU): Use ac_ext. Use _ACEOF instead of ACEOF.
+
+2000-07-28 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (--warnings): Catch `no-category', not `nocategory'.
+ * autoheader.sh: Likewise.
+ * acgeneral.m4 (_AC_WARNING_IFELSE): Adjust.
+
+2000-07-28 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Installation Directory Variables): New
+ section, Eved off from `Preset Output Variables', i.e., was a
+ small part of it, grew independent, and is its equal (at least).
+ (Coding Style): `$#' padding.
+ * Makefile.am (editsh, editpl): Do what the doc says you do: use
+ @datadir\@ instead of @''datadir''@.
+
+2000-07-28 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_PROG_CC_GNU, _AC_PROG_CXX_GNU,
+ _AC_PROG_F77_GNU): Use ac_ext. Use ACEOF instead of EOF.
+ (AC_LANG_CONFTEST): New macro.
+ (_AC_PROG_CC_G, AC_PROG_CC_C_O, _AC_PROG_CXX_G, AC_PROG_F77_C_O,
+ _AC_PROG_F77_V_OUTPUT): Use it.
+ * acgeneral.m4 (AC_TRY_CPP, AC_EGREP_CPP, AC_COMPILE_IFELSE,
+ AC_LINK_IFELSE, AC_RUN_IFELSE): Likewise.
+
+2000-07-24 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_FUNC): New macro to give the user a clean
+ way of accessing Fortran name-mangling information other than
+ through CPP, and without having to know the different possible
+ name-mangling schemes.
+ * autoconf.texi: Documented AC_F77_FUNC
+
+2000-07-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_CHECK_TYPE_BUILTIN_P): Add `off_t' and
+ `size_t' which are often used too.
+ Fix a bug which prevents recognition of `bool' and `char'.
+ (_AC_CHECK_TYPE_MAYBE_TYPE_P): New macro.
+ (AC_CHECK_TYPE): Use it.
+
+2000-07-19 Peter Eisentraut <peter_e@gmx.net>
+
+ * Makefile.am: Remove INSTALL.txt by maintainer-clean target.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.sh: Typo: s/infile/file/.
+
+2000-07-19 Martin Wilck <martin@tropos.de>
+
+ * aclang.m4 (AC_F77_NAME_MANGLING): Obsolete, becomes
+ _AC_F77_NAME_MANGLING.
+ (_AC_F77_NAME_MANGLING): Use independent checks for the
+ name mangling of symbols with and without underscores.
+ Use algorithm with for loops instead of recursive macro calls.
+ (AC_F77_WRAPPERS): Adapt to changes in _AC_F77_NAME_MANGLING.
+ * doc/autoconf.texi (Fortran 77 Compiler Characteristics):
+ Remove documentation of AC_F77_NAME_MANGLING.
+ Remove documentation of f77_case and f77_underscore.
+ Replace AC_F77_FUNC_WRAPPER with AC_F77_WRAPPERS.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * NEWS: Fresh air.
+ * TODO: Fresh blood.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (autoheader Invocation): Explain the purpose
+ of autoheader.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Various English fixes from Jim.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Compilers and Preprocessors, Obsolete
+ Macros): Don't give boring internal details.
+ (Language Choice): Typo.
+ (Limitations of Builtins): Some about `!', `set', `$@'.
+ (Coding Style): Some about $[@] quotation.
+ Some about cross-compilation.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (dir): When verbose, say what are the tools you
+ will use.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ Warnings related to obsolete constructs should be properly
+ classified.
+
+ * acspecific.m4 (AC_RSH, AC_USG, AC_MEMORY_H, AC_DIR_HEADER,
+ AC_INT_16_BITS, AC_LONG_64_BITS, AC_STRUCT_ST_BLKSIZE,
+ AC_STRUCT_ST_RDEV, AC_HAVE_POUNDBANG, AC_ARG_ARRAY): Use
+ `AC_DIAGNOSE(obsolete, ...)' instead of `AC_WARNING'.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ autoconf -W error does not work.
+
+ * acgeneral.m4 (_AC_DIAGNOSE): use _AC_WARNING_IFELSE,
+ _AC_WARNING_ENABLE is dead.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ Martin Wilck found a Fortran 77 compiler which always exits with
+ success.
+
+ * acgeneral.m4 (AC_COMPILE_IFELSE): Also check that the output
+ file was created and is nonempty.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Introduction): More about CVS, Gnats, the web
+ pages, and the mailing lists.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Prerequisite Macros): Dedocument AC_PROVIDE.
+ (Coding Style): Move some into...
+ (Macro Definitions): here.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ The --help message should have paragraphs starting with a title,
+ the options, and then optionally a small paragraph.
+
+ * acgeneral.m4 (AC_DIVERT_ONCE): New macro.
+ (HELP_VAR_END): New diversion.
+ (AC_ARG_ENABLE, AC_ARG_WITH, AC_ARG_VAR): Use AC_DIVERT_ONCE.
+ (AC_ARG_VAR): Follow the --help style.
+ * acspecific.m4 (AC_PATH_X): Use AC_DIVERT_ONCE.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_CC): Don't require AC_PROG_F77, require
+ AC_PROG_CC instead.
+ From Martin Wilck.
+ (AC_PROG_F77_C_O): Require AC_PROG_F77.
+ Use a cache variable independent of $F77.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh: Accept --symbolic and -s.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ Make it clear that the regular user does not need --macrodir.
+ In fact, rename this option as -A, --autoconf-dir.
+
+ * autoconf.sh: Complain when -m, --macrodir is used.
+ Accept -A, --autoconf-dir.
+ Use $autoconf_dir instead of $AC_MACRODIR.
+ Adjust --help.
+ * autoheader.sh: Likewise.
+ * autoscan.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ Use $optarg.
+ * autoreconf.sh: Likewise.
+ * doc/autoconf.texi: Adjust.
+ * tests: Adjust the test suite.
+
+2000-07-19 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh: Forward --debug to sub tools.
+ Let them share the same tmp dir.
+
+2000-07-18 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_MING32): Rename as AC_MINGW32.
+
+2000-07-18 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Fixed bug where the F77 compiler output was parsed differently
+ when detecting the verbose flag than when scanning for linker
+ options, and as a result the former test failed (under AIX/xlf).
+
+ * aclang.m4 (_AC_PROG_F77_V_OUTPUT): New macro to get the
+ output of linking an F77 program with a given verbose flag,
+ and preprocess it as required to scan for linker flags.
+ (_AC_PROG_F77_V): Use the above macro here...
+ (AC_F77_LIBRARY_LDFLAGS): ...and here, enforcing consistency.
+
+2000-07-17 Martin Wilck <martin@tropos.de>
+
+ * autoupdate.sh (autoconf): s,$updated,$tmp/updated,.
+
+2000-07-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Configuration Actions): Explain the
+ behavior of AC_CONFIG_HEADERS and AC_CONFIG_FILES with respect to
+ absolute and relative filenames, and stdin/stdout.
+ (config.status invocation): Likewise.
+
+2000-07-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Configuration Actions): Explain the
+ behavior of AC_CONFIG_HEADERS and AC_CONFIG_FILES with respect to
+ absolute and relative filenames, and stdin/stdout.
+ (config.status invocation): Likewise.
+
+2000-07-13 Akim Demaille <akim@epita.fr>
+
+ Make it easier to trace what autoreconf does.
+
+ * autoheader.sh: Be more verbose, and always report your name in
+ verbose messages.
+ * autoconf.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ (update.sh): Redirect ls' stderr to /dev/null.
+
+2000-07-13 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS): Properly
+ handle absolute input file names.
+ From Alexandre Oliva.
+
+2000-07-12 Martin Wilck <martin@tropos.de>
+
+ * aclang.m4 (AC_PROG_F77): Delete AC_BEFORE(AC_PROG_CPP) that
+ leads to unnecessary warnings if both C and Fortran are checked.
+ (AC_PROG_F77_C_O): AC_REQUIRE AC_PROG_F77 instead of pretend you
+ need to be AC_BEFORE it.
+
+2000-07-12 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (_ac_warnings): Fix call to tr.
+ Reported by Johan Danielsson.
+
+2000-07-11 Martin Wilck <martin@tropos.de>
+
+ * aclang.m4 (_AC_PROG_F77_V): New macro to determine the flag that
+ causes the compiler to output verbose linking information.
+ (AC_F77_LIBRARY_LDFLAGS): Use _AC_PROG_F77_V instead of
+ simply "-v"
+ (AC_F77_LIBRARY_LDFLAGS): New algorithm to parse flags, uses
+ set/shift shell commands.
+ (AC_F77_LIBRARY_LDFLAGS): Set FLIBS at end, after determining
+ ac_cv_flibs.
+
+2000-07-11 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS) <ac_max_here_lines>: Set to 38
+ instead of 48, to pass the test on RISC/OS 4.52.
+
+2000-07-11 Akim Demaille <akim@epita.fr>
+
+ !*^&$@ sed portability problems... The test on AC_CHECK_TYPES is
+ failing on RISC/OS 4.52 because of the forget-to-reset-the-flag
+ bug in its sed.
+
+ * acgeneral.m4 (_AC_OUTPUT_HEADERS): Work around this bug.
+
+2000-07-11 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_INT_16_BITS, AC_LONG_64_BITS): s/ac_check/ac_cv/.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS): Look for
+ the input files first in $builddir, then $srcdir.
+ Suggested by Lars J. Aas, designed by Alexandre Oliva.
+
+2000-07-10 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS):
+ Accept special filename '-' for stdin and stdout.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ Alexandre's suggestions.
+
+ * autoreconf.sh (update.sh): Use `ls -1dt' instead of `-lt'.
+ Use test instead of sed.
+ <automake>: If automake is used, always run it: it has its own
+ mechanism not to update if unneeded.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_PROG_ECHO): Modernize.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ Stop being ridiculous :*(
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): When using m4 the argument
+ is named `$1' not `$dir'.
+ When using m4 you ought to quote properly.
+ When using m4, you should check that there are not too many shell
+ quotes (inside the macro itself, and where it is called).
+ When you do this, Autoconf, hm, works better.
+
+2000-07-10 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Improve --help documentation of important environment variables.
+
+ * acgeneral.m4 (_AC_INIT_HELP): Direct reader to descriptions
+ of useful variables at the end of the --help.
+ (AC_ARG_VAR): Emphasize use of environment variables to override
+ and/or help the configure script. Ensure that a given variable
+ is only documented once in the --help.
+ (AC_CHECK_LIB): Call AC_ARG_VAR to document and register the
+ LDFLAGS variable, and...
+ (AC_CHECK_HEADER): do the same for the CPPFLAGS variable.
+ * aclang.m4 (AC_PROG_CC): Call AC_ARG_VAR to document and register
+ the CC and CFLAGS variables, and do the same for...
+ (AC_PROG_CXX): CXX and CXXFLAGS, and...
+ (AC_PROG_F77): F77 and FFLAGS.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (wget-update): New target.
+ (WGET): New variable.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Coding Style): Some more constraints :).
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_FUNC_STRERROR_R): Aaaaaaarg! Don't leave the
+ AC_DEFINE inside the AC_CACHE_CHECK.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_FUNC_STAT, AC_FUNC_STAT, AC_FUNC_LSTAT): New
+ macros, from Jim's stat.m4 and lstat.m4 serial 6.
+ * doc/autoconf.texi (Particular Functions): Document
+ * acfunctions: Add them.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ AC_LIBOBJ when used by AC_REPLACE_FUNCS should not complain for
+ variables as argument.
+
+ * acgeneral.m4 (_AC_LIBOBJ): Same as the former AC_LIBOBJ, but
+ takes an additional argument: action to perform when non-literal
+ argument.
+ (AC_LIBOBJ): Use it.
+ (AC_REPLACE_FUNCS): Use _AC_LIBOBJ, not AC_LIBOBJ.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ LANGUAGE should be neutralized too.
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_ENVIRONMENT): Do it.
+ * doc/autoconf.texi (Special Shell Variables): Mention it.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ Set autoconf's default warnings to `syntax'.
+
+ In fact, honor the most recent specification in the concatenation
+ of `syntax',$WARNINGS,<options> in that order.
+ Implement support for `none' and `noCATEGORY' so that the options
+ may override the previous choices.
+ Suggested by Didier Verna.
+
+ * acgeneral.m4 (_AC_WARNING_IFELSE): New macro.
+ (AC_WARNING_IFELSE): Use this macro to implement the new specs.
+ (AC_WARNING): The empty category must not be used, default to
+ `syntax'.
+ * doc/autoconf.texi (autoconf Invocation, Reporting Messages): Adjust.
+ * autoconf.sh: Adjust.
+ Use `optarg' to fetch the arguments of options.
+ Fix a bug in the handling of `--trace='.
+
+ * acgeneral.m4 (AC_CACHE_VAL): Typo: the macro was complaining iff
+ it shouldn't have.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (--install, --symlink): New options.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (dots, aclocal_m4, acconfig_h): Remove.
+ Adjust dependencies.
+ When using $verbose, redirect to stderr.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh: Clarify the difference between the location of
+ `aclocal.m4' and that of the location Autoconf extensions.
+ (-M, --m4dir): New option.
+ (aclocal_flags): Do not use $localdir, but $m4dir.
+ (localdir_opt): Remove, since $autoconf, $autoheader already
+ include `-l $localdir'.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (task install): We no longer use AC_INCLUDE.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acoldnames.m4: Remove the obsolete comments. The technology is
+ now detailed in `autoupdate'.
+ Quote the names being defined.
+ Formatting changes.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_DEFUNCT): Remove.
+ (AC_RSH, AC_UNISTD_H, AC_USG, AC_MEMORY_H, AC_DIR_HEADER,
+ AC_INT_16_BITS, AC_LONG_64_BITS): They're alive!...
+ * doc/autoconf.texi (Obsolete Macros): but not fresh.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (debug): New variable.
+ (tmp): s/ac/ar/.
+ <options handling>: Support --debug.
+ * doc/autoconf.texi: Adjust.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ Fix the bugs recently introduced in autoreconf.
+
+ * autoreconf.sh: Don't run automake when the package is not using
+ it.
+ When checking whether autoheader should be rerun, don't ask
+ config.h to be newer than stamp-h and vice-versa.
+ Remove an unbalanced `fi'.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (run_aclocal): Rename as `uses_aclocal' to avoid
+ the convention clash with autoconf.sh where `run_foo' is the
+ command to run `foo'.
+ (uses_autoheader): New variable.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (update.sh): New sub program.
+ Use it in the whole process.
+ (acconfig_h): New variable.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh <run_aclocal>: Use false/: instead of no/yes.
+ Formatting and factoring changes.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh: You too can have a $tmp dir if you wish.
+ (alflags.sed): New sub sed program.
+ Compute the flags of aclocal from Makefile.am instead of
+ Makefile.in, it is unlikely that aclocal be used but not automake,
+ while it is convenient to be able to run autoreconf even if
+ automake was not run yet.
+ Use `autoconf --trace' to get the list of configuration headers.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PLAIN_SCRIPT): New macro.
+ * tests/base.m4 (m4_wrap, AC_REQUIRE, AC_SHELL_MKDIR_P): Use it.
+ * autoconf.sh: Properly handle the case where `$output' is `-'
+ (i.e., stdout).
+ Handle `-ofile', not just `-o file'.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh: Formatting changes.
+ When verbose, display exactly what you do, not just a synopsis.
+ When using `$verbose' don't use quotes to avoid spurious spaces
+ for empty arguments.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (force): Instead of yes/no, use :/false.
+ Adjust the code.
+ (automake_deps, automake_force): No longer used.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Use an `expr' solution instead
+ of echo|sed.
+ From Paul Eggert.
+ * doc/autoconf.texi (Limitations of Usual Tools): Include the
+ words from Paul about `|' with expr(1).
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: Promote s,,, over s%%%, and `sed prog' over `sed -e
+ prog'.
+ * acgeneral.m4: Likewise.
+ * acspecific.m4: Likewise.
+ * doc/autoconf.texi (Limitations of Usual Tools, Coding Style):
+ Likewise.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh: When using `mktemp -d', be sure that the directory
+ was created.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * AUTHORS: Update.
+ * doc/autoconf.texi: Free Franc,ois Pinard from iftex and ifinfo,
+ use @,c.
+ Don't use `@code{m4}' when you mean M4, just as you shall not say
+ `@code{cc}' when you refer to the C language.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77)): Set
+ ac_gnu_compiler.
+ (_AC_PROG_CC_GNU, _AC_PROG_CXX_GNU, _AC_PROG_F77_GNU): Compute
+ ac_gnu_compiler.
+ * acgeneral.m4 (AC_LINKER_OPTION): Adjust.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Move the code
+ processing the result of AC_PROG_CC_G, AC_PROG_CXX_G, and
+ AC_PROG_F77_G into them.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Multiple Cases, Quotation Rule Of Thumb):
+ Follow the coding style.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Obsoleting Macros): Is not a subsection of
+ `Dependencies Between Macros', but rather a section of `Writing
+ Macros'.
+
+2000-07-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Coding Style): New node.
+
+2000-07-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_MKDIR_P): s/ac_dir/ac_mkdir_dir/ to avoid
+ clashes with the numerous ac_dir loops.
+ Reported by Lars J. Aas.
+
+2000-07-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Return `.', not `' when there
+ is no directory part.
+
+2000-07-07 Franc,ois Pinard <pinard@iro.umontreal.ca>
+
+ * tests/atgeneral.m4 (AT_CHECK): Fix a redirection problem.
+
+2000-07-07 Akim Demaille <akim@epita.fr>
+
+ AC_REVISION must not AC_REQUIRE AC_INIT, it leaves the diversions
+ in a messy state. Don't even try to emulate AC_REQUIRE: just
+ introduce a diversion just for AC_REVISION, and let the magic
+ happen.
+ Fixes Autoconf PR/134, from Raja R Harinath.
+
+ * acgeneral.m4 (_AC_DIVERT(REVISION)): New diversion.
+ (AC_REVISION): Don't require AC_INIT, dump in your diversion.
+ (_AC_INIT): Delete, inline its body in...
+ (AC_INIT): here.
+ (_AC_INIT_NOTICE, _AC_INIT_COPYRIGHT): New macros so that...
+ (AC_INIT): be more uniform.
+ (AC_INIT, AC_REVISION, AC_COPYRIGHT): `define', don't AC_DEFUN.
+
+2000-07-07 Martin Wilck <martin@tropos.de>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Keep -lm, if a Fortran
+ compiler needs it, it is likely to be required when linking C/C++
+ with Fortran.
+ <-YP,*>: Fix the list of arguments to loop on.
+ Don't mess with the user variable name space.
+ <ac_ld_run_path>: Prepend LD_RUN_PATH directories with -R only
+ when running Solaris (without this, link errors occur).
+
+2000-07-06 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Fix quotation.
+
+2000-07-06 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: Formatting and quotations changes.
+
+2000-07-06 Raja R Harinath <harinath@cs.umn.edu>
+
+ * aclang.m4 (AC_LANG_INT_SAVE(C++)): Be a copy of
+ AC_LANG_INT_SAVE(C), not AC_LANG_INT_SAVE_TRY(C).
+ Fixes Autoconf PR/133.
+
+2000-07-06 Mo DeJong <mdejong@cygnus.com>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS, AC_CHECK_TOOLS): Change
+ warning message printed when only --host is given. Fix printing
+ of multiple compiler cache values, use PATH argument.
+ * aclang.m4 (AC_LANG_COMPILER_WORKS): Print the cross compile
+ status, fix problem where two results were printed at once.
+
+2000-07-06 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_TMPDIR): Typo.
+
+2000-07-06 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): Behave properly when the
+ argument has trailing slashes, and when its depth is just one
+ (`/tmp').
+
+2000-07-06 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (_AC_SHELL_DIRNAME): New macro.
+ (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS, _AC_OUTPUT_LINKS):
+ Use _AC_SHELL_DIRNAME.
+
+2000-07-06 Martin Wilck <martin@tropos.de>
+
+ * aclang.m4 (AC_PROG_F77): Add two compilers,
+ lf95 (Lahey/Fujitsu Fortran) and pgf77 (Portland Group Fortran)
+ (_AC_PROG_F77_G): Some Fortran compilers produce stdout/stderr
+ output even if no errors occur - check exit status rather than
+ output.
+
+2000-07-05 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_SHELL_TMPDIR): When using `mktemp -d', be sure
+ that the directory was created: under Ultrix 4.3 it just returns
+ a name, but does not create the directory.
+ Reported by Christian Krackowizer.
+
+2000-07-03 Lars J. Aas <larsa@sim.no>
+
+ * acgeneral.m4 (AC_SHELL_MKDIR_P): New macro.
+ (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS, _AC_OUTPUT_LINKS,
+ AC_PROG_INSTALL): Use AC_SHELL_MKDIR_P.
+ * tests/base.m4 (AC_SHELL_MKDIR_P): Test it.
+
+2000-07-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CACHE_LOAD): Be ready to read the cache even
+ when `.' is not in the PATH.
+ * doc/install.texi (configure Invocation): Adjust.
+
+2000-06-30 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (AC_REQUIRE): Tweak a diagnostic.
+
+2000-06-30 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ Re-enable the old behavior of --host and --build.
+
+ * acgeneral.m4 (build_alias): Set to host_alias if --build is not
+ given but --host is, and enable cross-compile auto-detection. If
+ both are, and are different, enable cross compilation.
+ (AC_CANONICAL_HOST): Adjust help message.
+ (cross_compiling): Enclose in quotes when testing.
+ * aclang.m4 (_AC_LANG_COMPILER_WORKS): If cross_compiling is
+ maybe, set it to yes or no depending on the result of the
+ execution test.
+ * doc/autoconf.texi: Document the change.
+ * doc/install.texi: Likewise.
+
+2000-06-27 Jim Meyering <meyering@lucent.com>
+
+ * acspecific.m4 (_AC_LIBOBJ_GETLOADAVG): Put quotes around use of
+ `$ac_cv_lib_elf_elf_begin', since that variable may not be defined.
+ From Volker Borchert.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Fix various typos.
+ (Limitations of Usual Tools) <sed>: Anchors and groups.
+ (Language Choice): Don't mention cross_compiling here, do it...
+ (Specifying Names) <--host>: here.
+ (Obsoleting Macros): Don't document AC_DEFUNCT, it's going to be
+ removed anyway, obsoleted itself by AU_DEFUN.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CACHE_VAL): Swap the arguments of `regexp'.
+ Reported by Alexandre Oliva.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (automake, aclocal): New variables. Import
+ $AUTOMAKE and $ACLOCAL.
+ Pass --verbose to the tools.
+ Avoid using plenty of variables, just append to existing
+ variables.
+ * doc/autoconf.texi: List options in the order --help, --version,
+ --verbose, --debug, and then specific options.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Various Texinfo adjustments.
+ (Specifying Names): When describing the system triplets, use the
+ same names as the shell variables.
+ (System Type Variables): Delete, merge its content into...
+ (Canonicalizing): here.
+ Clarify the difference between the `foo_target' and `foo'
+ variables.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS, _AC_OUTPUT_CONFIG_STATUS):
+ s/echo | sed/expr/.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CONFIG_LINKS, AC_CONFIG_HEADERS,
+ AC_CONFIG_COMMANDS, AC_CONFIG_FILES): Use a shell variable instead
+ of an m4 variable to store what must be done, so that sh
+ conditionals are honored.
+ (_AC_OUTPUT_LINKS, _AC_OUTPUT_HEADERS,
+ _AC_OUTPUT_COMMANDS, _AC_OUTPUT_FILES): Adjust.
+ * tests/semantics.m4: Test the four AC_CONFIG sisters.
+ * doc/autoconf.texi (Configuration Actions): Promote the use of
+ literals, show it works properly with sh conditionals.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CACHE_VAL): Too many people put AC_DEFINE in
+ the commands-to-set-it part of it. Give them a warning.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Prerequisite Macros): More about AC_REQUIRE.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ Given better names to the diversions.
+
+ * acgeneral.m4 (_AC_DIVERT(NORMAL_2), _AC_DIVERT(NORMAL_3),
+ _AC_DIVERT(NORMAL_4)): Delete, unused.
+ (_AC_DIVERT(NORMAL_1), _AC_DIVERT(NORMAL), AC_DIVERT_DIVERSION):
+ Rename as _AC_DIVERT(PREPARE), _AC_DIVERT(BODY),
+ _AC_DIVERT_DIVERSION.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ The current implementation of AC_REQUIRE fails on
+
+ | AC_DEFUN([TEST1], [REQUIRE([TEST2a])REQUIRE([TEST2b])])
+ | AC_DEFUN([TEST2a], [])
+ | AC_DEFUN([TEST2b], [REQUIRE([TEST3])])
+ | AC_DEFUN([TEST3], [REQUIRE([TEST2a])])
+ |
+ | AC_INIT
+ | TEST1
+
+ because it produces TEST3; TEST2a; TEST2b; TEST1.
+ Fix this bug, implement the solution provided by Axel Thimm,
+ and test AC_REQUIRE.
+
+ * acgeneral.m4: Document this implementation.
+ (_AC_DEFUN_PRO, _AC_DEFUN_EPI, AC_REQUIRE): Be sure that macros
+ are emitted in the same order as they are expanded.
+ (AC_REQUIRE): Forbid being calling out of an AC_DEFUN'd macro (in
+ particular the top level).
+ * tests/base.m4 (AC_REQUIRE): New test.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ A macro which is not defined with AC_DEFUN should not be
+ AC_REQUIRE'd, since it doesn't AC_PROVIDE itself.
+
+ * acgeneral.m4 (AC_REQUIRE): Issue a warning when after expansion,
+ the macro is not AC_PROVIDE'd.
+
+2000-06-26 Akim Demaille <akim@epita.fr>
+
+ Various cleanups.
+
+ * acgeneral.m4 (AC_PRO, AC_EPI): Rename as _AC_DEFUN_PRO and
+ _AC_DEFUN_EPI.
+ Adjust dependencies.
+ (AC_DEFUN): Remove the not-to-be-released specializing mechanism.
+ (AC_SPECIALIZE): Remove for the same reasons.
+ Adjust dependencies.
+ (_AC_INIT_DEFAULTS, _AC_INIT_PARSE_ARGS, _AC_INIT_VERSION,
+ _AC_INIT_PREPARE, _AC_CANONICAL_SPLIT, _AC_CHECK_TYPE_NEW,
+ _AC_CHECK_TYPE_OLD): Define via `define' instead of `AC_DEFUN':
+ they are not related to AC_REQUIRE in any way.
+ * acspecific.m4 (AC_PROG_ECHO, _AC_DECL_YYTEXT, _AC_PATH_X_XMKMF,
+ _AC_PATH_X_DIRECT): Define via `define' instead of `AC_DEFUN'.
+
+2000-06-19 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_TOOL): Use two variables in order to
+ avoid cache variable conflicts between AC_CHECK_PROG invocations.
+ (AC_PATH_TOOL): Fix same bugs as in 6/9/00 fixes to AC_CHECK_TOOL.
+ Pass correct arguments to AC_CHECK_PATH (different from
+ AC_CHECK_PROG). Use AC_CHECK_PATH cache variable, not
+ AC_CHECK_PROG var, and use two variables for two invocations as
+ above. Quote AC_CHECK_* args.
+
+2000-06-16 Akim Demaille <akim@epita.fr>
+
+ The test suite reveals AC_OUTPUT_MAKE_DEFS fails on RISC/OS.
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS) <confdef2opt.sed>: Reset the
+ t flag between each cycle.
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about the t
+ flag in sed.
+
+2000-06-16 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_EXEEXT, AC_OBJEXT): Don't obsolete them, let
+ them be empty, so that Automake still provide support for $(EXEEXT).
+
+2000-06-15 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (option handling): Give a more understandable
+ message when an option is missing its argument.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * autoheader.sh: Likewise.
+
+2000-06-13 Akim Demaille <akim@epita.fr>
+
+ `./config.status -d' is buggy.
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Remove the `shift' in
+ --debug.
+ * doc/autoconf.texi (Limitations of Builtins): Some about shift.
+
+2000-06-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Caching Results): Bigger warning about the
+ extremely frequent action-in-commands bug.
+ Move the documentation of AC_CACHE_SAVE and AC_CACHE_LOAD...
+ (Cache Files): into here.
+
+2000-06-09 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_TOOL): Even if VALUE-IF-NOT-FOUND is not
+ specified, we should still check whether PROG-TO-CHECK-FOR
+ actually works before returning it when the prefixed program is
+ not found. Also, fixed a bug where it failed to pass the PATH
+ argument in the second call to AC_CHECK_PROG.
+
+2000-06-09 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TOOLS): Rewrite.
+
+2000-06-09 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi: Use `@option' for options, not `@samp' nor
+ `@code'.
+ * doc/install.texi: Likewise.
+
+2000-06-09 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Don't require AC_CYGWIN.
+ (AC_F77_NAME_MANGLING): Removed useless comment.
+ (_AC_PROG_F77_GNU): Use `.f' not `.fpp' which is not properly
+ processed by Abysoft's Fortran compiler.
+
+2000-06-09 Steven G. Johnson <stevenj@superjdj.mit.edu>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Fixed bug where
+ compiler output to stdout was not caught and interpreted.
+
+2000-06-09 Akim Demaille <akim@epita.fr>
+
+ `autoconf --trace' dies on filenames with `:'.
+ Reported by Mark Elbrecht.
+
+ * autoconf.sh <trace> (trace2m4.sed): Use `..*' instead of
+ `[^:][^:]*' to catch file names. The rest of regex is probably
+ precise enough to avoid incorrect parsing.
+
+2000-06-09 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_SYS_LARGEFILE_MACRO_VALUE): Always initialize
+ $3 to no.
+
+2000-06-08 Paul Eggert <eggert@twinsun.com>
+
+ Import AC_SYS_LARGEFILE from largefile.m4 serial 12.
+
+ * acspecific.m4 (AC_SYS_LARGEFILE, _AC_SYS_LARGEFILE_MACRO_VALUE,
+ _AC_SYS_LARGEFILE_SOURCE): New.
+ * doc/autoconf.texi (System Services): Document AC_SYS_LARGEFILE.
+
+2000-06-08 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Don't override FLIBS if
+ specified by the user.
+ Fix a bug: use the cached value to set FLIBS.
+
+2000-06-07 Dave Love <fx@gnu.org>
+
+ * aclang.m4 (AC_PROG_F77): Check for f95 and fc too.
+
+2000-06-07 Philippe De Muyter <phdm@macqel.be>
+
+ `foo=1 foo=2 cmd' has an undefined behavior.
+
+ * acgeneral.m4 (_AC_COMPUTE_INT_COMPILE): Do not put two shell
+ variable assignments in one shell command.
+ * doc/autoconf.texi (Shell Substitutions): Document.
+
+2000-06-07 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Fix problem on Cray due to
+ confusion from the link command getting echoed in quotes. In the
+ future, a more general fix for quoted arguments with spaces might
+ be better.
+
+2000-06-07 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): More on `test' and
+ `case'.
+ Some on `if' and `break'.
+
+2000-06-07 Morten Eriksen <mortene@sim.no>
+
+ * acspecific.m4 (_AC_PATH_X_DIRECT): Include `X11/Intrinsic.h'
+ when trying to use `XtMalloc' to actually have a chance of
+ succeeding.
+
+2000-06-07 Akim Demaille <akim@epita.fr>
+
+ Hard (code) X.
+
+ * acspecific.m4 (_AC_PATH_X_DIRECT): Hard code `X11/Intrinsic.h'
+ instead of using `ac_x_direct_test_include', likewise for `Xt' and
+ `ac_x_direct_test_lib', `XtMalloc' and
+ `ac_x_direct_test_function'.
+
+2000-06-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PATH_X): Use AC_DIVERT.
+ Use `no', not `NO' for ac_x_includes and ac_x_libraries.
+ Adjust dependencies.
+ (_AC_PATH_X_DIRECT): Introduce ac_x_header_dirs to factor the list
+ of places where headers and libs might be.
+ (AC_PATH_XTRA): Don't quote the argument of `case'.
+
+2000-06-07 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Put the expansion of
+ AC_LIST_LINKS in an unquoted `here'-document.
+
+2000-06-06 Akim Demaille <akim@epita.fr>
+
+ * tests/aclocal.m4 (AC_ENV_SAVE): Skip `no_x'.
+ From Mark Elbrecht.
+
+2000-06-05 Mo DeJong <mdejong@cygnus.com>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Move the setting
+ of ac_tool_prefix before the call to AC_DIVERT_POP.
+
+2000-06-05 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TOOL_PREFIX): AU define it.
+ Suggested by Mo DeJong.
+
+2000-06-05 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_C_CHAR_UNSIGNED): Use the new compiler-test
+ technology so that we can do the test via compilations only. Also
+ use (char) -1 instead of (char) 255 to check if char is unsigned.
+
+2000-05-28 Jim Meyering <meyering@lucent.com>
+
+ * acspecific.m4 (AC_FUNC_STRERROR_R): Call strerror_r with 2nd arg
+ of type char*, not int. Suggestion from Paul Eggert.
+
+ * doc/autoconf.texi (Particular Functions): Give better description of
+ AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK. From Paul Eggert.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document `ln -s'
+ on DJGPP, based on the comments from Mark Elbrecht.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * autoreconf.sh (autoconf, autoheader): Be more conscientious when
+ looking for the executable.
+ * autoupdate.sh: Likewise.
+ * autoheader.sh: Likewise.
+ Suggested by Alexandre Oliva.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ Thanks to --program-transform-name, `autoconf' might be install as
+ `yo-man-i-am-the-all-mighty-AVt0c0nF-eh-eh'. But when
+ `yo-man-i-am-the-all-mighty-AVt0h3Ad3R-eh-eh' and the other tools
+ want to trace, they might stupidly invoke the program named
+ `autoconf' instead. Pfff, stupid scripts :)
+
+ * Makefile.am (editsh): Transfer the names of the install
+ `autoconf' and `autoheader'.
+ * autoconf.sh: Add a missing period at the end of the comment
+ # Parse command line
+ Make sure to have a ChangeLog much longer than the patch.
+ * autoheader.sh: Use the right `autoconf'.
+ * autoupdate.sh: Likewise.
+ * autoreconf.sh: Likewise, and for `autoheader' too.
+ Simplify the handling of localdir and AC_MACRODIR.
+ * ifnames.sh: Formatting changes.
+
+2000-05-25 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Don't use f2c as a possible Fortran compiler, since by itself it
+ cannot produce object code.
+
+ * aclang.m4 (AC_PROG_F77): Remove f2c from the search list.
+ * doc/autoconf.texi: Excise mentions of f2c in AC_PROG_F77 docs.
+
+2000-05-26 Mark Elbrecht <snowball3@bigfoot.com>
+
+ Currently, AC_PROG_LN_S incorrectly reports yes with DJGPP. This
+ is because the DJGPP `ln' emulates soft links for executables by
+ generating a stub that in turn calls the real program. This
+ feature also works with nonexistent files like in the Unix
+ spec. So `ln -s X conftestdata' will generate `conftestdata.exe'
+ which will attempt to call 'X.exe'. But this feature only works
+ for executables. Fix it.
+
+ * acspecific.m4 (AC_PROG_LN_S): Create a sample file and use it to
+ test `ln -s'.
+
+2000-05-26 Ossama Othman <ossama@ece.uci.edu>
+
+ * aclang.m4 (AC_PROG_CXX): Look for aCC before CC.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_FUNC_STRERROR_R): New, from `strerror_r.m4',
+ serial 2, by Jim Meyering.
+ (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): New, from
+ `lstat-slash.m4', serial 1, by Jim Meyering.
+ * acfunctions: Adjust.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TOOLS): Don't require
+ AC_CHECK_TOOL_PREFIX, it's dead.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Simplify all the
+ case "$switch" in
+ into
+ case $switch in
+ * acspecific.m4: Likewise.
+ * aclang.m4: Likewise.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TOOL_PREFIX): Remove.
+ Adjust dependencies.
+ (_AC_INIT_PARSE_ARGS): Set ac_tool_prefix.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ In `info', it is easier to type `autoconf <TAB>' to reach the list
+ of options, that `Invoking autoc<TAB>'.
+
+ * doc/autoconf.texi: s/Invoking foo/foo Invocation/.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ Merge `Upgrading' and `Obsolete Constructs' together.
+
+ * doc/autoconf.texi (Obsolete Constructs): Move right after
+ `Recreation a Configuration.
+ (Invoking autoupdate): Be a subsection of
+ `Obsolete Constructs'.
+ (Upgrading): Demote from chapter to section.
+ Be a section of `Obsolete Constructs'.
+ Rename as `Autoconf 1'.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ Find a means to extract integers from the compiler.
+ Use this technology to compute `sizeof' even when cross-compiling.
+ Ideas and initial suggestion by Kaveh Ghazi.
+ Binary search by Bruno Haible.
+
+ * aclang.m4 (AC_LANG_BOOL_COMPILE_TRY,
+ AC_LANG_BOOL_COMPILE_TRY(C), AC_LANG_BOOL_COMPILE_TRY(C++),
+ AC_LANG_INT_SAVE, AC_LANG_INT_SAVE(C), AC_LANG_INT_SAVE(C++)): New
+ macros.
+ * acgeneral.m4 (_AC_COMPUTE_INT_COMPILE, _AC_COMPUTE_INT_RUN,
+ _AC_COMPUTE_INT): New.
+ (AC_CHECK_SIZEOF): Use them.
+ Check whether the type exists beforehand.
+ * tests/semantics.m4 (AC_CHECK_SIZEOF): Strengthen.
+
+2000-05-26 Ossama Othman <ossama@ece.uci.edu>
+
+ * aclang.m4 (AC_PROG_CXX): Look for aCC KCC RCC xlC_r xlC.
+ s/c++ g++/g++ c++/.
+ * doc/autoconf.texi (Compilers and Preprocessors): Adjust.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ No library nor special privilege is needed to run `getloadavg'
+ under FreeBSD.
+ Reported by Alec Wolman.
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Check for `getloadavg'
+ without any additional library.
+ Fixes Autoconf/109.
+
+2000-05-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools, Limitations of
+ Builtins): Integrate comments from Paul Eggert and Jim Meyering.
+ Add the sed limitation discovered by Philippe De Muyter.
+ Fix a typo spotted by Pavel Roskin.
+
+2000-05-25 Akim Demaille <akim@epita.fr>
+
+ The test suite needs GNU m4.
+ Reported by Bob Friesenhahn.
+
+ * tests/atconfig.in (M4): Set it.
+ * tests/base.m4: Use it.
+
+2000-05-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Don't use negated character
+ classes with `case'. Use `expr' instead.
+ Suggested by Paul Eggert.
+ * doc/autoconf.texi (Limitations of Builtins): Explain expr, the
+ `x' trick, and negated character classes.
+
+2000-05-24 Didier Verna <didier@lrde.epita.fr>
+
+ * acgeneral.m4 (AC_INIT): Call _AC_PACKAGE before _AC_INIT.
+
+2000-05-24 Ossama Othman <ossama@debian.org>
+
+ * aclang.m4 (AC_LANG(C++)): Change `ac_ext' from from `C' to `cc'
+ to avoid potential ambiguities on case-insensitive shells.
+
+2000-05-24 Mo DeJong <mdejong@cygnus.com>
+
+ Have --host=sun4 automatically look for CC=sun4-cc etc.
+
+ * acgeneral.m4 (AC_CHECK_TOOLS): New.
+ * aclang.m4 (AC_PROG_CXX, AC_PROG_CC, AC_PROG_F77): Use new
+ AC_CHECK_TOOLS macro instead of AC_CHECK_PROGS so that a cross
+ compiler is found by default with --host.
+ * doc/autoconf.texi (Generic Programs, Manual Configuration):
+ Describe new AC_CHECK_TOOLS macro. Fix unclear working about
+ AC_CHECK_PROGS.
+ * tests/Makefile.am (FILTER_MACROS): Adjust.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ The night of the living dead...
+
+ * acspecific.m4 (AC_XENIX_DIR, AC_DYNIX_SEQ, AC_IRIX_SUN,
+ AC_SCO_INTL): Wake up a few zombies.
+ * doc/autoconf.texi: Adjust.
+ * tests/aclocal.m4 (AC_ENV_SAVE): Likewise.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LANG_FUNC_LINK_TRY, AC_LANG_FUNC_LINK_TRY(C),
+ AC_LANG_FUNC_LINK_TRY(C++)): New macros.
+ (AC_CHECK_FUNC): Use it, together with AC_LINK_ELSE.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_FUNC_VFORK): Quote properly.
+ (AC_FUNC_STRFTIME, AC_FUNC_VFORK, AC_FUNC_VPRINTF): Don't use
+ AC_DEFINE, just use the AC_CHECK_*S macro.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_WHICH_A): Replace it with...
+ (AC_SHELL_PATH_WALK): this.
+ (AC_CHECK_PROG, AC_PATH_PROG): Use it.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document `unset'.
+ (Special Shell Variables): Adjust.
+ (Shellology): New section. Introduce bash and zsh.
+ (Special Shell Variables): Some data on NULLCMD.
+ (Quotation Thumb Rule): Rename as
+ (Quotation Rule of Thumb): this.
+ * acgeneral.m4 (AC_SHELL_UNSET): Remove.
+ (AC_SHELL_UNSETENV): Rename as...
+ (AC_SHELL_UNSET): this.
+ (_AC_INIT_PREPARE_ENVIRONMENT): Prepare bash and zsh.
+ Adjust to AC_SHELL_UNSET.
+
+2000-05-24 Akim Demaille <akim@epita.fr>
+
+ The options --build etc. used to set `$build'. *If*
+ AC_CANONICAL_SYSTEM was run, then the value of `$build' given by
+ the user was saved into `$build_alias', and `$build' was
+ normalized using `config.sub'.
+
+ Now, let `--build' set `$build_alias' so that scripts with or
+ without `AC_CANONICAL_BUILD' have the same semantics. This allows
+ to use `AC_CHECK_TOOL' without requiring `config.guess' and
+ `config.sub' (which was bizarre anyway).
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): --build, --host and --target
+ set `build_alias' etc.
+ After the option handling, set host to $host_alias etc. for
+ bugward compatibility.
+ (AC_CANONICALIZE): Mutate into...
+ (_AC_CANONICAL_SPLIT): this, which does not canonicalize, it just
+ computes `$foo_os' etc.
+ (_AC_CANONICAL_THING): Remove, too confusing.
+ (AC_CANONICAL_BUILD): Adjust.
+ Do not assign any value to `build_alias', just compute `build', and
+ `build_{cpy, vendor, os}'.
+ (AC_CANONICAL_HOST, AC_CANONICAL_TARGET): Likewise.
+ (AC_CHECK_TOOL_PREFIX): Fire your rule when `$host_alias' is
+ given, not when `$host != $build'.
+
+ * acgeneral.m4 (sinclude): Fix typo.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): More details on
+ `test -n ='.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ Simplify the interface: users shouldn't need to explicitly check
+ for special environments.
+
+ * acspecific.m4 (AC_EXEEXT, AC_OBJEXT): AU defined to
+ nothing. Replace them by...
+ (_AC_EXEEXT, _AC_OBJEXT): this.
+ * aclang.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Call them.
+ (AC_PROG_CC_G, AC_PROG_CXX_G, AC_PROG_F77_G): Rename as...
+ (_AC_PROG_CC_G, _AC_PROG_CXX_G, _AC_PROG_F77_G): this.
+ Adjust dependencies.
+ * tests/Makefile.am (FILTER_MACROS): Adjust.
+ * doc/autoconf.texi (Compilers and Preprocessors): New section,
+ move the documentation of AC_PROG_CC, AC_PROG_CC_C_O,
+ AC_PROG_CC_STDC, AC_PROG_CPP, AC_PROG_CXX, AC_PROG_CXXCPP,
+ AC_PROG_F77, AC_PROG_F77_C_O, AC_PROG_GCC_TRADITIONAL here.
+ Factor the comment documentation of AC_PROG_CC, AC_PROG_CXX,
+ AC_PROG_F77.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ Modernize AC_EXEEXT and AC_OBJEXT.
+ Now work with other languages than C and C++.
+
+ * acspecific.m4 (AC_EXEEXT, AC_OBJEXT): Use
+ AC_COMPILE_IFELSE/AC_LINK_IFELSE and AC_LANG_PROGRAM instead of
+ ad hoc code.
+ Use `$ac_ext' instead of listing `.c', `.C' etc.
+ Use AC_CACHE_CHECK.
+ * doc/autoconf.texi (System Services): Adjust.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ Simplify the interface: users shouldn't need to explicitly check
+ for special environments.
+
+ * acspecific.m4 (AC_CYGWIN, AC_EMXOS2, AC_MINGW32): AU defined to
+ nothing. Replace them by...
+ (_AC_CYGWIN, _AC_EMXOS2, _AC_MINGW32): these, which are
+ automatically called by...
+ (AC_EXEEXT): this.
+ * doc/autoconf.texi (System Services, Obsolete Macros): Adjust.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ AC_PROG_GNU_M4 should actually be private to the package
+ Autoconf.
+
+ * acspecific.m4 (AC_PROG_GNU_M4): Move to...
+ * m4/m4.m4: here.
+ * m4/Makefile.am (EXTRA_DIST): Adjust.
+ * doc/autoconf.texi (Particular Programs): Adjust.
+
+2000-05-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Exiting from Shell Scripts): Move contents
+ into...
+ (Limitations of Builtins): this new node.
+ Document limitations of `exit', `export' and `case'.
+ Welcome the documentation of `test' from...
+ (Limitations of Usual Tools): here.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ Load the additions *before* running AC_INIT.
+ This is important if you want to redefine AC_INIT or some of its
+ sub macros (eeerk!), or if you want to use user defined macros
+ before AC_INIT.
+ Suggested by Didier Verna.
+
+ * acgeneral.m4 (_AC_INIT): Don't include `acsite.m4' and
+ `aclocal.m4'.
+ * autoconf.sh (run_m4, run_m4f): Do it.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ Reading the ChangeLog revealed that the recent update of
+ AC_FUNC_GETLOADAVG introduced a bug which already happened (see
+ Mon Nov 11 18:02:58 1996 David J MacKenzie).
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use a less tempting name:
+ s/ac_save_LIBS/ac_check_lib_save_LIBS/.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_LIBOBJ_ALLOCA): New macro, extracted from...
+ (AC_FUNC_ALLOCA): here. Adjust.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ Add `configure --config-cache', `-C' as a shortcut for
+ `--cache-file=config.cache'.
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Let `configure' support
+ `--config-cache' and `-C'.
+ Report them in `--help'.
+ Fix the display of missing argument.
+ (_AC_OUTPUT_SUBDIRS): Adjust.
+ * doc/install.texi (Invoking configure): Rename the node as
+ (Running configure scripts): this, the name of the chapter.
+ (Operation Controls): Rename as...
+ (Invoking configure): this.
+ Document the new options.
+ * doc/autoconf.texi (direntry): Huh? What is this `aclocal' doing
+ here? Point to `Invoking configure'.
+ (Cache Files): No need to document the disabling of the cache.
+
+2000-05-22 Mark Elbrecht <snowball3@bigfoot.com>, Eli Zaretskii <eliz@gnu.org>
+
+ More MS-DOS support.
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Fix the computation of
+ `ac_file_inputs' for `$ac_given_srcdir' containing a colon.
+ (AC_CHECK_MEMBERS, AC_PATH_PROG): s/ac_save_ifs/ac_save_IFS/.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_FUNC_CHOWN): New macro, based on Jim
+ Meyering's `chown.m4' serial 4.
+ (AC_FUNC_GETGROUPS): New macro, based on Jim Meyering's
+ `getgroups.m4' serial 3.
+ (AC_FUNC_MEMCMP): Updated, based on Jim Meyering's `memcmp.m4'
+ serial 3.
+ (AC_FUNC_MALLOC): New macro, based on Jim Meyering's
+ `malloc.m4' serial 3.
+ (AC_FUNC_MMAP): Include `stdlib.h' when `STDC_HEADERS'.
+ * acfunctions: Sort.
+ Add `chown' and `malloc', point `getgroups' to `AC_FUNC_GETGROUPS'
+ instead of `AC_TYPE_GETGROUPS'.
+ * doc/autoconf.texi (Particular Functions): Adjust.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Quote the names being m4-defined.
+ * acspecific.m4: Likewise.
+ * aclang.m4: Likewise.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ Factor the AC_PROG_<compiler>_WORKS macros.
+
+ * acgeneral.m4 (_AC_INIT_DEFAULTS): Set `cross_compiling'.
+ (AC_TRY_COMPILER): Remove.
+ * aclang.m4 (AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS,
+ AC_PROG_F77_WORKS): Removed.
+ (_AC_LANG_COMPILER_WORKS): New macro.
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Adjust.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4: Formatting changes.
+
+2000-05-22 Akim Demaille <akim@epita.fr>
+
+ More than one argument to `configure' builds a broken
+ `config.status'. Fix and test.
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Use
+ `$ac_configure_args' directly, not via a tmp variable.
+ * tests/torture.m4 (command line interface): Test with more than
+ one argument.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_MSG_WARN): s/warning/WARNING/.
+ * autoheader.sh: Likewise.
+ From Franc,ois Pinard.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PACKAGE): Rename as _AC_INIT_PACKAGE.
+ (AC_INIT): Dispatch arguments either to _AC_INIT_PACKAGE or
+ to AC_CONFIG_SRCDIR.
+ (AU::AC_INIT): New.
+ * configure.in: Adjust.
+ Use `#', not `dnl'.
+ * doc/autoconf.texi (configure.in Layout): Document the new form
+ of AC_INIT.
+ Document AC_CONFIG_SRCDIR.
+ (Obsolete Macros): Document the old one.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Simplify all the unjustified `[\$]foo' into
+ `\$foo', the quotes are needed only for `\$[1]', `\$[@]' etc.
+ Prefer `$$1' to `[$]$1', `$foo' to `[$]foo', `$[1]' to `[$]1' etc.
+ * aclang.m4: Likewise.
+ * acspecific.m4: Likewise.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_TRY_COMPILER): Fix quotation.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ Fix Autoconf/123.
+
+ * libm4.m4: Rename `symbols' as `m4_symbols'.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_PROG_CC_GNU, AC_PROG_CXX_GNU, AC_PROG_F77_GNU):
+ Rename as:
+ (_AC_PROG_CC_GNU, _AC_PROG_CXX_GNU, _AC_PROG_F77_GNU): these.
+ Compute the value of GCC, GXX and G77 here.
+ Set to `no' (instead of empty) if not the GNU compiler.
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Adjust.
+ * doc/autoconf.texi: Adjust.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ Fix Autoconf/106.
+
+ * aclang.m4 (AC_PROG_F77): Follow strictly the same scheme as
+ AC_PROG_CC to compute the default FFLAGS.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ Either we cross-compile the whole package, or we don't.
+ Using --host enables cross-compilation.
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): `--host' enables cross
+ compilation.
+ (AC_CANONICAL_BUILD): The help string should explicitly mention
+ cross compilation.
+ * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77)): Don't
+ set `cross_compiling'.
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): Run your `WORK' partner
+ only if not cross-compiling.
+ (AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS, AC_PROG_F77_WORKS):
+ If does not work, don't assume an implicit cross-compilation:
+ fail.
+ * doc/autoconf.texi: Adjust.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_UNSETENV, AC_SHELL_UNSET): Add the
+ missing quotes.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Prefer
+ case $foo in
+ *[^-a-zA-Z0-9_]*) AC_ACTION;;
+ esac
+ over
+ if echo "$foo" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1; then
+ AC_ACTION
+ fi
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Testing Values and Files): Delete, move its
+ content into...
+ (Limitations of Usual Tools::test): here.
+ Document more limitations.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_LIBOBJ_GETLOADAVG): New macro, extracted from
+ (AC_FUNC_GETLOADAVG): here.
+ Use it.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SPECIALIZE): Avoid a useless `indir'.
+ (AC_CHECK_MEMBER, AC_CHECK_MEMBERS): Fix to work properly on
+ `struct f.g.h'.
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Use AC_CHECK_HEADERS and
+ AC_CHECK_MEMBERS instead of performing their task by hand.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ Synchronize AC_FUNC_GETLOADAVG with the version of the shellutils
+ 1.16f (serial 4).
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Check for
+ `pstat_getdynamic'.
+ Define `C_GETLOADAVG' if compiling `getloadavg.c'.
+ Check for NLS.
+ Compute `GETLOADAVG_LIBS'.
+ (AC_FUNC_MKTIME): Remove a forgotten `AC_SUBST(LIBOBJS)'.
+
+2000-05-19 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_UNSET, AC_SHELL_UNSETENV): New macro.
+ (_AC_INIT_PREPARE_ENVIRONMENT): Use AC_SHELL_UNSETENV.
+ Set CDPATH. Fixes Autoconf/96.
+
+ * doc/autoconf.texi (Special Shell Variables): New node.
+ Document `status', `CDPATH', `LANG', `LC_ALL', `LC_MESSAGES' and
+ `LC_CTYPE'.
+
+2000-05-12 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (sinclude): Define, some packages (binutils) need
+ it.
+
+2000-05-12 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Invoking config.status): Move the
+ documentation of the envvar CONFIG_(FILES, HEADERS, COMMANDS,
+ LINKS) to
+ (Obsolete config.status Use): here.
+
+2000-05-12 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Exiting from Shell Scripts): New node.
+ (Autoconf Language): Follow the advice in the new node.
+
+2000-05-12 Peter Eisentraut <peter_e@gmx.net>
+
+ * doc/autoconf.texi: Fix typos.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ AC_CONFIG_SUBDIRS needs two lists: one, ac_subdirs_all, which
+ contains all the possible subdirs for `--help=recursive', and
+ another, `subdirs' which can be built dynamically for launching
+ sub configurations.
+
+ * acgeneral.m4 (AC_CONFIG_SUBDIRS): Define `subdirs' dynamically.
+ Define `ac_subdirs_all' statically.
+ Warn if the argument is not a literal.
+ (AC_LIST_SUBDIRS): Rename as...
+ (_AC_LIST_SUBDIRS): this.
+ (_AC_INIT_HELP): Loop over `ac_subdirs_all', not `subdirs'.
+ (_AC_OUTPUT_SUBDIRS): Loop over `subdirs', not `AC_LIST_SUBDIRS'.
+ * doc/autoconf.texi (Subdirectories): Adjust.
+
+ * acgeneral.m4: Replace all the `test ! -d foo && bar' with
+ `test -d foo || bar'.
+
+ * Makefile.am (.m4.m4f): Stop hiding what you're doing.
+ Don't check for GNU m4, let it die.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ The Associated Rewriters are even prouder to present...
+ .
+ |
+ |
+ /-\
+ / \
+ )===( U T O U P D A T E I V
+ // \\
+ =========
+ _//_ _\\_ The ``Eiffel Tower'' Release
+
+ * autoupdate.sh: Complete rewrite. See that file for a detailed
+ explanation. Basically, simulate the name spaces thanks to
+ `autoconf --trace' and auxiliary files.
+ No longer use `autoupdate.m4', remove the dependencies.
+ Synchronize the options and `--help'.
+ * doc/autoconf.texi (Invoking autoupdate): Humanoupdate.
+ * autoupdate.m4: Delete.
+ * tests/Makefile.am (FILTER_MACROS): Add `AC_OUTPUT'.
+ Since `AC_OUTPUT' is now AU_DEFUN'd, it is extracted for testing,
+ while it was not before.
+ * tests/tools.m4 (autoupdate): Re-enable. Adjust the expected
+ output with the right quotation (yeah!).
+ Pass `-m $top_srcdir': autoupdate wants the `.m4' files, not the
+ frozen files.
+ * Makefile.am (nodistpkgdataDATA): Move `acversion.m4' to
+ (distpkgdataDATA): here, so that all the `.m4' files are in the
+ source hierarchy, not split across src and build.
+ * acversion.m4.in: Update to today's standards.
+ * Makefile.am: Adjust.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4: Be robust to multiple inclusion.
+ Have the first `changequote' robust to the current quotation
+ system.
+ Always quote the first argument of `define'.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ The Associated Rewriters are proud to present...
+
+ ^
+ / \ U T O U P D A T E I I I
+ /===\
+ / \ It bells, It whistles...
+
+ * autoupdate.sh: Complete rewrite. See that file for a detailed
+ explanation.
+ * acgeneral.sh: Don't use AU_DEFINE, but AU_DEFUN.
+ (AC_OUTPUT_COMMANDS_CNT): Renamed as...
+ (_AC_OUTPUT_COMMANDS_CNT): this.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ Get rid of the m4 name spaces.
+
+ * libm4.m4 (m4_changequote, m4_define, m4_defn, m4_dnl, m4_indir,
+ m4_popdef, m4_pushdef, m4_undefine, m4_namespace_push,
+ m4_namespace_pop, m4_namespace_register, m4_namespace_define,
+ m4_disable, m4_enable): Removed.
+ All dependencies adjusted.
+ * libm4.m4: Remove all the name space initialization.
+ * acgeneral.m4: Adjust.
+ (AU_DEFINE): Redefine as `AC_DEFUN'.
+ * autoupdate.m4: Adjust.
+ * tests/tools.m4: Temporarily disable the `autoupdate' test.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ Eradicate AC_TRY_COMPILE.
+
+ * aclang.m4 (AC_PROG_CC_STDC, AC_C_BIGENDIAN, AC_C_INLINE,
+ AC_C_CONST, AC_C_VOLATILE, AC_F77_NAME_MANGLING): Use
+ `AC_COMPILE_IFELSE'.
+ * acspecific.m4 (AC_DECL_SYS_SIGLIST, _AC_CHECK_HEADER_DIRENT,
+ AC_HEADER_SYS_WAIT, AC_HEADER_TIME, AC_TYPE_SIGNAL,
+ AC_FUNC_GETLOADAVG, AC_FUNC_SELECT_ARGTYPES, AC_STRUCT_TM,
+ AC_CYGWIN, AC_MINGW32, AC_EMXOS2): Likewise.
+ * tests/semantics.m4 (C keywords): Check that AC_C_CONST,
+ AC_C_VOLATILE, and AC_C_INLINE function properly with GCC.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ Replace AC_LANG_SAVE/AC_LANG_RESTORE with AC_LANG_PUSH/AC_LANG_POP.
+
+ * aclang.m4 (_AC_LANG_CURRENT, AC_LANG_STACK): You two are the same
+ thing, which now we shall name `_AC_LANG'.
+ All users adjusted.
+ (AC_LANG_PUSH, AC_LANG_POP): New macros.
+ (AC_LANG_SAVE, AC_LANG_RESTORE): AU defined.
+ (AC_PROG_CC_WORKS, AC_PROG_CXXCPP, AC_PROG_CXX_WORKS,
+ AC_PROG_F77_WORKS, AC_F77_LIBRARY_LDFLAGS, AC_F77_NAME_MANGLING):
+ Use them.
+ (AC_F77_LIBRARY_LDFLAGS): Move the requirements to its top.
+ * doc/autoconf.texi (Language Choice): Document them.
+ (Old Macros): Welcome AC_LANG_SAVE and AC_LANG_RESTORE.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Less adventurous use of
+ `test'.
+ Fixes Autoconf/108.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Headers): Some more sorting.
+ Use `@multitable'.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (_AC_CHECK_HEADER_DIRENT): Use more modern
+ Autoconf idioms.
+ (_AC_CHECK_HEADERS_DIRENT): Removed, instead...
+ (AC_HEADER_DIRENT): Handle the loop.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ Provide a means to track the dependencies of files created by
+ `configure'.
+
+ * acgeneral.m4 (AT_FILE_DEPENDENCY, _AC_CONFIG_DEPENDENCY,
+ _AC_CONFIG_DEPENDENCIES): New macros.
+ (AC_CONFIG_FILES, AC_CONFIG_HEADERS, AC_CONFIG_LINKS): Use them.
+
+2000-05-11 Akim Demaille <akim@epita.fr>
+
+ Merge AC_DECL_YYTEXT into AC_PROG_LEX.
+
+ * acgeneral.m4 (AC_DECL_YYTEXT): Rename as
+ (_AC_DECL_YYTEXT): this.
+ (AC_PROG_LEX): Use it.
+ (AC_DECL_YYTEXT): New AU macro.
+ * doc/autoconf.texi: Adjust.
+
+2000-05-10 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_F77_NAME_MANGLING): Use AC_COMPILE_IFELSE.
+ Move the requirements to the top of the macro.
+
+2000-05-10 Akim Demaille <akim@epita.fr>
+
+ Update and polish the documentation.
+
+ * doc/autoconf.texi: Use @sc where upper case names were used.
+ Remove a few useless `dnl'.
+ Convert some `dnl' into comments.
+ Promote `$(foo)' in Makefiles, not `${foo}'.
+ Promote `$foo' in shell scripts, not `${foo}'.
+ Promote `foo = bar' in Makefiles, not `foo=bar'.
+ (Language Choice): Document `AC_LANG', move `AC_LANG_C',
+ `AC_LANG_CPLUSPLUS' and `AC_LANG_FORTRAN77' to
+ (Old Macros): here.
+ * doc/install.texi: Fix a typo in the specification of the system
+ quadruples.
+
+2000-05-10 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_foreach): Rewritten so that it does not require
+ lists in between parens.
+ (m4_foreach_quoted): new copy of the previous `m4_foreach' which
+ is still used by `m4_wrap'.
+ * acgeneral.m4 (AC_INCLUDE, AC_INCLUDES): Removed.
+ (AC_FOREACH): Don't use parens with `m4_foreach'.
+ (AC_CHECK_MEMBER, AC_CHECK_DECLS, AC_CHECK_TYPES): Adjust the
+ description.
+ * acspecific.m4 (AC_STRUCT_TIMEZONE, AC_STRUCT_ST_BLKSIZE,
+ AC_STRUCT_ST_BLOCKS, AC_STRUCT_ST_RDEV): Adjust.
+ * autoconf.texi (AC_CHECK_MEMBER, AC_CHECK_DECLS, AC_CHECK_TYPES):
+ Adjust their documentation.
+ (AC_INCLUDE): Undocument.
+ * tests/semantics.m4: Adjust.
+ * tests/actest.m4: Rename as...
+ * tests/aclocal.m4: this.
+ * tests/atspecific.m4: No longer include actest.m4.
+ * tests/torture.m4: Likewise.
+ * tests/Makefile.am: Adjust.
+
+2000-05-10 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Obsolete Macros): Document `AU_DEFUN'.
+ Move the documentation of `AC_OBSOLETE' from here, to...
+ (Old Macros): here.
+ * acspecific.m4 (AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV):
+ AU_DEFUN'd.
+
+2000-05-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LIBOBJ_DECL, AC_LIBOBJ): New macros.
+ (AC_REPLACE_FUNCS): Use AC_LIBOBJ.
+ * acspecific.m4 (AC_FUNC_MKTIME, AC_FUNC_MEMCMP,
+ AC_STRUCT_ST_BLOCKS): Use AC_LIBOBJ.
+ * doc/autoconf.texi : Adjust so that the user is not encouraged to
+ use LIBOBJS directly.
+ (Generic Functions): Document AC_LIBOBJ_DECL and AC_LIBOBJ.
+
+2000-05-09 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (AC_SEARCH_LIBS): Remove double quotes around `no'.
+
+2000-05-09 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES): Don't automatically spit
+ `Generated by...' in Makefiles.
+ Fixes Autoconf/102.
+
+2000-05-09 Akim Demaille <akim@epita.fr>
+
+ Let `config.status' use a private temp dir.
+ Suggested by Jim Meyering.
+
+ * acgeneral.m4 (_AC_SHELL_TMPDIR): New macro.
+ (_AC_OUTPUT_CONFIG_STATUS): Use it.
+ Use more quoted here docs to improve readability.
+ Compute `$me' and use it in the error messages.
+ Define `$configure' and `$configure_args' to avoid continuously
+ mixing the uses of `configure' and `config.status' evaluation in a
+ single line.
+ Define `$SHELL' and use it.
+ Simplify all the unjustified `[\$]foo' into `\$foo', the quotes
+ are needed only for `\$[1]', `\$[@]' etc.
+ Replace all the uses of `ac_cs_root' with files in the tmp dir of
+ `config.status'.
+ Remove a few `rm' covered by the removal of the `$tmp' dir.
+ Let `config.status' support `--debug'.
+ (_AC_INIT_PREPARE): Avoid the leading space in `ac_configure_args'.
+ * doc/autoconf.texi (Invoking config.status): Adjust.
+
+2000-05-05 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Set up traps to remove
+ temporaries upon exit, too, not just upon receipt of signal.
+
+2000-05-05 Akim Demaille <akim@epita.fr>
+
+ AC_CHECK_PROG macro fails if REJECT value is set under Digital
+ Unix 4.0x and 5.0 because `"$@"' expands into an empty parameter
+ (instead of nothing) when there are no positional parameters.
+ From Nicolas Joly.
+
+ * acgeneral.m4 (AC_CHECK_PROG, AC_CHECK_PROGS): Prefer
+ `$$1' to `[$]$1', `$foo' to `[$]foo', `$[1]' to `[$]1', and
+ `${1+"$[@]"}' to `"[$]@"'.
+
+2000-05-04 Akim Demaille <akim@epita.fr>
+
+ AC_PREREQ understands `2.14a' as `2.141'.
+ Reported by Didier Verna.
+
+ * acgeneral.m4 (AC_PREREQ): Don't quote AC_ACVERSION.
+
+2000-05-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AH_TOP, AH_BOTTOM): New macros.
+ (_AH_COUNTER): New variable.
+ * tests/tools.m4 (autoheader): Check their proper functioning.
+
+2000-05-04 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Obsolete Macros): Rename as...
+ (Obsoleting Macros): this.
+ (Old Macros): Rename as...
+ (Obsolete Macros): this.
+ Be a section of...
+ (Obsolete Constructs): New chapter.
+ (Invoking autoheader): Move the `acconfig.h' documentation to...
+ (acconfig.h): here, new section of `Obsolete Constructs'.
+ (Autoheader Macros): Document AH_VERBATIM, AH_TEMPLATE, AH_TOP and
+ AH_BOTTOM.
+
+2000-05-03 Nicolas Joly <njoly@pasteur.fr>
+
+ * autoheader.sh (config_h): Sort the templates.
+ Under NetBSD 1.4.1 /bin/sh `set' command does not return a sorted
+ variables list.
+
+2000-05-03 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (autoheader): Don't pass `-l at_srcdir' to
+ `autoheader', since `acconfig.h' is created in the build dir.
+ There's one empty line less in `config.h.in' than before when
+ using `acconfig.h'.
+
+2000-05-03 Akim Demaille <akim@epita.fr>
+
+ Simplify the handling of `acconfig.h'.
+
+ * autoheader.sh: No longer try to select the needed paragraphs of
+ `acconfig.h', just dump everything into `config.h.in'.
+ Implement support for `--warnings'.
+ Warn the users that these auxiliary files are obsolete when `-W
+ obsolete'.
+ * doc/autoconf.texi (Invoking autoheader): Adjust.
+
+2000-05-03 Akim Demaille <akim@epita.fr>
+
+ Support of acconfig.h was broken. Fix and test.
+ Reported by Jim Meyering.
+
+ * autoheader.sh: Trace AC_DEFINE and AC_DEFINE_UNQUOTED to build
+ the list of $syms which are defined.
+ * tests/tools.m4 (autoheader): New test.
+
+2000-05-03 Akim Demaille <akim@epita.fr>
+
+ Rename the language FORTRAN77 as Fortran 77.
+
+ * aclang.m4 (AC_LANG(FORTRAN77), AC_LANG_SOURCE(FORTRAN77),
+ AC_LANG_PROGRAM(FORTRAN77), AC_LANG_CALL(FORTRAN77)): Rename as...
+ (AC_LANG(Fortran 77), AC_LANG_SOURCE(Fortran 77),
+ AC_LANG_PROGRAM(Fortran 77), AC_LANG_CALL(Fortran 77)): This.
+ (AC_LANG_FORTRAN77): Adjust.
+
+2000-05-03 Akim Demaille <akim@epita.fr>
+
+ Provide a macro to canonicalize a configuration name.
+ Suggested by Ralf Corsepius.
+
+ * acgeneral.m4 (AC_CANONICALIZE): New macro.
+ (_AC_CANONICAL_THING): Use it.
+
+
+ Change the defaults for build, host, and target systems:
+ build defaults to `config.guess`.
+ host defaults to $build.
+ target defaults to $host.
+ Suggested by Mo DeJong, Pavel Roskin, Tom Tromey, Ian Lance
+ Taylor, and many others.
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Set `$build', `$host' and
+ `$target' to nothing instead of NONE.
+ (AC_CANONICAL_SYSTEM): AU_DEFUN'd as `AC_CANONICAL_TARGET'.
+ (_AC_CANONICAL_THING): Use an explicit m4_case to set the defaults
+ depending upon the THING.
+ Implement the default values.
+ (AC_CANONICAL_TARGET): Handle the `AC_ARG_PROGRAM' part
+ `AC_CANONICAL_SYSTEM' used to provide.
+ * doc/autoconf.texi: Adjust.
+
+
+ When receiving an explicit argument, consider this is a default
+ for --build, --host and --target (unless set).
+ Some scripts might still depend on this historical syntax.
+ Suggested by Alexandre Oliva.
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Do that.
+ (_AC_CANONICAL_THING): Drop the support of `$nonopt'.
+
+
+ Documenting --build, --host and --target when configure does not
+ handle them causes confusion.
+ Suggested by Pavel Roskin.
+ Nevertheless configure must not die on such an `unsupported'
+ option: it does happen that people build an entire tree of
+ packages, some of them expecting `--host' etc. some others not.
+ Stressed by Tom Tromey and Ian Lance Taylor.
+
+ * acgeneral.m4 (HELP_CANON): New diversion.
+ (_AC_INIT_PARSE_ARGS): Don't document these options.
+ (AC_CANONICAL_BUILD, AC_CANONICAL_HOST, AC_CANONICAL_TARGET):
+ Document your associated option.
+
+2000-04-28 Akim Demaille <akim@epita.fr>
+
+ Don't double quote in AC_MSG_*.
+
+ * acgeneral.m4 (_AC_SH_QUOTE): Don't double quote. Escape the
+ double quotes too.
+ (_AC_ECHO_UNQUOTED): Don't double quote :).
+ (_AC_ECHO, _AC_ECHO_N): Quote the call to _AC_SH_QUOTE.
+
+ The autoheader chain needs to be adjusted.
+
+ * acgeneral.m4 (AH_VERBATIM): Just pass two arguments to AH_OUTPUT
+ instead of trying to build what `autoheader' needs: let it handle
+ the format by itself.
+ * autoheader.m4: Adjust.
+ s,tmp/config.h,tmp/config.hin.
+
+ The adjustment revealed that `autoconf --trace' is not robust to
+ single quotes in its argument.
+
+ * autoconf.sh: Fix this issue.
+ Rename the escape `$*' as `$%'. Implement `$@'.
+ * doc/autoconf.texi: Adjust.
+
+2000-04-28 Akim Demaille <akim@epita.fr>
+
+ mawk suffers a severe performance loss when using `sub' with a
+ changing value. On the `configure' script of the fileutils:
+ mawk '{ sub (/foo/, foo++) }' -> 14s.
+ mawk '{ if ($0 ~ /foo/) sub (/foo/, foo++) }' -> 0.03s.
+ mawk '{ sub (/foo/, foo) }' -> 0.03s.
+
+ * autoconf.sh (task script, AWK script): Run `sub (__oline__,
+ oline)' only in the lines that match `__oline__'.
+ Suggested by Paul Eggert.
+
+2000-04-28 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (options handling::-W*): Strip two leading chars, not
+ just one.
+
+2000-04-20 Dave Love <fx@gnu.org>
+
+ * acspecific.m4 (AC_FUNC_MKTIME): Use AC_SUBST.
+
+2000-04-12 Akim Demaille <akim@epita.fr>
+
+ Provide a fine grained control over autoconf's warnings.
+
+ * acgeneral.m4 (AC_WARNING_IFELSE, _AC_DIAGNOSE, AC_DIAGNOSE):
+ New macros.
+ (AC_DEFUN_ONCE, AC_OBSOLETE, AC_BEFORE, AU_DEFUN, AC_PREREQ,
+ AC_WARNING, AC_FATAL, AC_TRY_RUN): Use AC_DIAGNOSE.
+ * autoconf.sh: Provide support for `--warnings', `-W'.
+ * doc/autoconf.texi (Invoking autoconf): Adjust.
+ (Reporting Messages): New section.
+
+2000-04-12 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_HELP): Move --srcdir in the first
+ section.
+ Document --help=short and recursive.
+ Split the `Directory' section into `Installation directories' for
+ --prefix and --exec-prefix, and all the others into `Fine tuning
+ of the installation directories'.
+ In the latter, don't repeat `in DIR', the user understands, and it
+ comes out better.
+ Default for --exec-prefix is PREFIX.
+ Reported by Kathryn Hargreaves.
+ Move --host before --build.
+ Fix a test on `$ac_init_help' which was not updated.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ Have `make check' succeed with CC=g++.
+
+ * tests/atspecific.m4 (AT_TEST_MACRO): Don't check `env-after' if
+ the file does not exist, which may happen when a `configure' exits
+ brutally.
+ * tests/semantics.m4 (AC_CHECK_MEMBERS, AC_CHECK_TYPES): ANSI C++
+ forbids members named like their hosting struct, so don't do it.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ * autoscan.pl: Reindent using 2 spaces, not 4.
+ Use `#' to denote Autoconf comments, not `dnl'.
+ Put a few `\' here and there to avoid misfontification and
+ misindentation.
+ Use your base name when reporting errors.
+ (parse_args::usage): Use $0, use the same order as the other
+ executables.
+ (parse_args): Don't dump `--help' on cmd line errors.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PROVIDE_IF): Rename as...
+ (AC_PROVIDE_IFELSE): this. Change all callers.
+ Spread the use of AC_PROVIDE_IFELSE, no macro should know how
+ AC_PROVIDE names its internal variables.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Simplify all the `foo="$bar"' into `foo=$bar'.
+ * acspecific.m4: Likewise.
+ * aclang.m4: Likewise.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ Move obsolete macros' definitions out of the way.
+
+ * doc/autoconf.texi (Old Macro Names): Rename as...
+ (Old Macros): this. Change the @table enumeration into a list of
+ @defmac.
+ (AC_CHECKING, AC_CHECK_TYPE, AC_COMPILE_CHECK, AC_C_CROSS,
+ AC_DYNIX_SEQ, AC_HAVE_LIBRARY, AC_IRIX_SUN, AC_LINK_FILES,
+ AC_OUTPUT, AC_OUTPUT_COMMANDS, AC_SCO_INTL, AC_VERBOSE,
+ AC_XENIX_DIR): Move their descriptions into here.
+ Kill a few TeX warnings.
+
+2000-04-11 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_MSG_ERROR_UNQUOTED): Remove.
+ (AC_MSG_RESULT, AC_MSG_RESULT_UNQUOTED): Output to the log too.
+ (AC_CHECKING, AC_VERBOSE): AU_ define.
+
+2000-04-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: s/1>&/>&/g.
+ (AC_FD_LOG): New macro, replaces...
+ (AC_FD_CC): this. Provide an AU definition.
+ (_AC_ECHO_UNQUOTED, _AC_ECHO_N): Use m4_default.
+
+2000-04-05 Akim Demaille <akim@epita.fr>
+
+ At the end of `./configure', save the cache values, and the CPP
+ values.
+
+ * acgeneral.m4 (_AC_CACHE_DUMP): New macro.
+ (AC_CACHE_SAVE, AC_OUTPUT): Use it.
+ (AC_OUTPUT): Dump confdefs.h into config.log.
+ (_AC_INIT_PREPARE::config.log): Name the package being configured
+ if you can.
+
+2000-04-05 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Disable caching by default, so as not to cause problems when
+ newbies accidentally use a stale cache file.
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Set cache_file to /dev/null
+ to disable caching by default.
+ (_AC_INIT_HELP): Adjust the --help message.
+ (AC_CACHE_LOAD, AC_CACHE_SAVE): Don't print "loading/updating
+ /dev/null" messages.
+ * autoconf.texi: Note that caching is disabled, how to enable it,
+ and that `./config.cache' is the traditional name of the cache file.
+ * install.texi: Likewise.
+
+2000-04-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): If any option waiting for a
+ directory receives a relative path, die (bindir, sbindir,
+ libexecdir, datadir, sysconfdir, sharedstatedir, localstatedir,
+ libdir, includedir, oldincludedir, infodir, mandir, exec_prefix,
+ prefix). Fixes Autoconf 42.
+
+2000-04-03 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Canonicalizing): Officially recognize
+ AC_CANONICAL_TARGET and AC_CANONICAL_BUILD.
+
+2000-04-03 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Writing configure.in): Explain what Autoconf
+ is. Explain how to use the quotation scheme used in Autoconf.
+ (Quoting): Update. Do not advocate changequote.
+
+2000-03-30 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Fix F77 name-mangling macros to work with cached values (so
+ they don't break the second time you run configure).
+
+ * aclang.m4 (AC_F77_NAME_MANGLING): Extract f77_case,
+ f77_underscore from cache variable.
+ (AC_F77_WRAPPERS): Get rid of ac_cv_f77_wrappers, it's useless.
+ Simplify the nested case-esac into a single one.
+ Simplify the documentation strings of CPP symbols.
+
+2000-03-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix the accumulation in
+ CONFIG_HEADERS.
+
+2000-03-31 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh: Catch up with the `mktemp -d' changes in
+ autoconf.sh.
+ * autoupdate.sh: Likewise.
+
+2000-03-31 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): bug fix in F77 test program
+ (missing whitespace--F77 requires program statements to start in
+ column 7).
+
+2000-03-29 Akim Demaille <akim@epita.fr>
+
+ Rewrite the autoheader chain on top of `autoconf --trace'.
+
+ * autoheader.m4: Dispatch the prototypes next to there AC_
+ siblings.
+ (AH_TEMPLATE, AH_VERBATIM): Move to...
+ * acgeneral.m4: here.
+ (AH_OUTPUT): New macro.
+ * autoheader.sh: Run `autoconf --trace' instead of `m4 autoheader.m4'.
+ * autoheader.m4: Remove.
+ * Makefile.am: Adjust.
+ * tests/tools.m4 (AH_DEFUN): Remove, no longer makes sense.
+ * tests/actests.m4 (autoheader::AC_TATOOINE): Remove, was used by
+ the test above.
+
+2000-03-29 Akim Demaille <akim@epita.fr>
+
+ silent.m4 depends upon the current quotation in m4, which changes
+ if `-i' is used or not.
+
+ * autoconf.sh (trace::silent.m4): Removed.
+ (trace::run_m4_trace): Pass -Derrprint.
+
+2000-03-29 Akim Demaille <akim@epita.fr>
+
+ Use `mktemp -d' when possible to create securely a tmp work dir.
+
+ * autoconf.sh: Use it when possible to create the dir $tmp.
+ Stop using variables for tmp files, use their names in $tmp.
+ [install]: Use the new features of autoconf --trace.
+
+2000-03-28 Akim Demaille <akim@epita.fr>
+
+ Probably all the versions of bash up to 2.04 fail on
+ fnmatch ("/tmp", "[/\\\\]")
+ The backslash must not be last.
+
+ * acgeneral.m4 (_AC_INIT_HELP, AC_PATH_PROG, _AC_OUTPUT_FILES,
+ _AC_OUTPUT_LINKS, _AC_OUTPUT_SUBDIRS): Always make `\\' be the
+ first character in all the `[]' of `case' patterns.
+
+2000-03-27 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_CHECK_TOOL_PREFIX): Rename back as
+ AC_CHECK_TOOL_PREFIX since some packages rely on it.
+
+2000-03-27 Akim Demaille <akim@epita.fr>
+
+ Move all the language dependent macros into aclang.m4.
+
+ * aclang.m4: New file.
+ * autoconf.m4: Include it.
+ * autoheader.m4: Likewise.
+ * autoupdate.m4: Likewise.
+ * Makefile.am: Adjust.
+ * test/Makefile.am: Likewise.
+ * acgeneral.m4 (AC_LANG_CASE,AC_LANG_SAVE, _AC_LANG_DISPATCH,
+ AC_LANG, _AC_LANG_CURRENT, AC_LANG_SOURCE, AC_LANG_PROGRAM,
+ AC_LANG_CALL, AC_LANG(C), AC_LANG_SOURCE(C), AC_LANG_PROGRAM(C),
+ AC_LANG_CALL(C), AC_LANG(C++), AC_LANG_SOURCE(C++),
+ AC_LANG_PROGRAM(C++), AC_LANG_CALL(C++), AC_LANG(FORTRAN77),
+ AC_LANG_SOURCE(FORTRAN77), AC_LANG_PROGRAM(FORTRAN77),
+ AC_LANG_CALL(FORTRAN77): Move to...
+ * aclang.m4: here.
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77,
+ AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS, AC_PROG_F77_WORKS,
+ AC_PROG_CC_GNU, AC_PROG_CXX_GNU, AC_PROG_F77_GNU, AC_PROG_CC_G,
+ AC_PROG_CXX_G, AC_PROG_F77_G, AC_PROG_GCC_TRADITIONAL,
+ AC_PROG_CC_C_O, AC_PROG_F77_C_O, AC_PROG_CC_STDC, AC_PROG_CPP,
+ AC_PROG_CXXCPP, AC_REQUIRE_CPP, AC_PROG_LEX, AC_TYPE_MODE_T,
+ AC_C_CROSS, AC_C_CHAR_UNSIGNED, AC_C_LONG_DOUBLE, AC_C_BIGENDIAN,
+ AC_C_INLINE, AC_C_CONST, AC_C_VOLATILE, AC_C_STRINGIZE,
+ AC_C_PROTOTYPES, AC_F77_LIBRARY_LDFLAGS, AC_F77_NAME_MANGLING,
+ AC_F77_WRAPPERS): Move to...
+ * aclang.m4: here.
+
+2000-03-27 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (trace): Let translate_awk do the whole translation
+ from `$trace' to the m4 program.
+
+2000-03-27 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PACKAGE): Also define AC_PACKAGE_STRING.
+ Use it here and there.
+
+2000-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * acgeneral.m4 (_AC_INIT_HELP, _AC_OUTPUT_SUBDIRS): Fix the DOS
+ absolute path pattern: s/?:[[/\\]]/?:[[/\\]]*/.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_CANONICAL_TARGET, _AC_CANONICAL_BUILD): Rename
+ as (AC_CANONICAL_TARGET, AC_CANONICAL_BUILD), although internal,
+ too much foreign code depends upon them.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (translate_awk): `> "/dev/stderr"' is not portable
+ to systems without a real /dev/stderr in the file system or if not
+ using one of the three free awks. Use
+ print message | "cat >&2"
+ ...
+ END { close("cat >&2") }
+ From Aharon Robbins.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh (checking completeness): Be ready to recognize
+ patterns with a value, and spaces between `#' and the directive, e.g.
+ # define FOO FIXME:
+ Reported by John Fortin.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_RUN_IFELSE): New macro.
+ (AC_TRY_RUN_NATIVE): Remove.
+ (AC_TRY_RUN): Use AC_RUN_IFELSE, not AC_TRY_RUN_NATIVE.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Ah ah! I recognized you, even
+ masked: you are AC_TRY_LINK_FUNC.
+ Fix quotation.
+ (AC_SEARCH_LIBS): Use AC_SHELL_IFELSE.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.m4 (AC_TRY_LINK_FUNC, AC_CHECK_LIB): New tests.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LANG_CALL, AC_LANG_CALL(C), AC_LANG_CALL(C++),
+ AC_LANG_CALL(FORTRAN77)): New macros.
+ (AC_TRY_LINK_FUNC): Use it.
+ (AC_TRY_CPP): Argument was output twice.
+ (AC_COMPILE_IFELSE, AC_LINK_IFELSE): Output $3 only if needed.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_TRY_COMPILER): Use AC_LINK_IFELSE.
+ (AC_TRY_LINK_FUNC, AC_CHECK_LIB, AC_CHECK_FUNC): Don't check that
+ the current language is C++ to output `extern "C"': the CPP
+ condition is enough.
+
+2000-03-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LINK_IFELSE, AC_COMPILE_IFELSE): New macros.
+ (AC_TRY_LINK, AC_TRY_COMPILE): Use them.
+ (AC_CHECK_MEMBER, AC_COMPILE_CHECK, AC_CHECK_DECL,
+ _AC_CHECK_TYPE_NEW): Adjust.
+ * acspecific.m4 (AC_DECL_YYTEXT, AC_PATH_XTRA): Adjust.
+
+2000-03-23 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * acspecific.m4 (AC_F77_NAME_MANGLING): Need to use
+ AC_F77_LIBRARY_LDFLAGS when linking C and Fortran code.
+
+2000-03-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LANG_PROGRAM, AC_LANG_PROGRAM(C),
+ AC_LANG_PROGRAM(C++), AC_LANG_PROGRAM(FORTRAN77)): New macros.
+ (AC_TRY_COMPILE, AC_TRY_LINK): Use them.
+
+2000-03-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Support --help={long, short,
+ recursive}.
+ (_AC_INIT_HELP): Propagate --help=recursive to CONFIG_SUBDIRS.
+ Code stolen from...
+ (AC_OUTPUT_SUBDIRS): s/ac_config_dir/ac_subdir/g.
+
+2000-03-23 Lars J. Aas <larsa@sim.no>
+
+ * libm4.m4 (m4_do): New macro.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Provide a language independent means to generate language specific
+ programs.
+
+ * acgeneral.m4 (_AC_LANG_DISPATCH): New macro.
+ (AC_LANG): Use it.
+ (AC_LANG_SOURCE, AC_LANG_SOURCE(C), AC_LANG_SOURCE(C++),
+ AC_LANG_SOURCE(FORTRAN77)): New macros.
+ (AC_TRY_COMPILER, AC_EGREP_CPP, AC_TRY_RUN_NATIVE): Use
+ AC_LANG_SOURCE.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Fix a bug: some macros (e.g., AC_REVISION, AC_COPYRIGHT etc.) can
+ be used before AC_INIT, but they do require it. But then, the
+ argument of the explicit AC_INIT call is lost.
+
+ * acgeneral.m4 (AC_CONFIG_SRCDIR): New macro.
+ (_AC_INIT_SRCDIR): Adjust.
+ (_AC_INIT): Pass your argument to AC_CONFIG_SRCDIR.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.m4 (AC_PATH_PROG, AC_PATH_PROGS): New tests.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Start the language support overhaul: Introduce AC_LANG().
+
+ * acgeneral.m4 (AC_LANG): Renamed as _AC_LANG_CURRENT.
+ (AC_LANG, AC_LANG(C), AC_LANG(C++), AC_LANG(FORTRAN77)): New
+ macros.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS, AC_LANG_FORTRAN): AU_DEFUN'ed.
+ Adjust all callers.
+ * acspecific.m4 (AC_F77_NAME_MANGLING): Remove the exceeding
+ AC_LANG_RESTORE.
+ * tests/Makefile.am (FILTER_MACROS): Add AC_LANG.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Speed ups.
+
+ * libm4.m4 (m4_append, m4_list_append): Use m4_define, not define.
+ On my machine the former implementation takes 4mn 40s to run the
+ test suite. Using m4_define leads to 4mn 15s.
+ * acgeneral.m4 (_AC_SUBST): Use AC_EXPAND_ONCE (which uses
+ m4_define, not define). 4mn.
+ (_AC_DIVERT): Don't use m4_case. Starting from those 4mn, if you
+ just move NORMAL* first in m4_case, the test suite is run in 3mn.
+ If instead of using m4, you use an `associative array' plus a
+ wrapper (current implementation), it falls to 2mn.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (autoconf --trace): New test.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (task trace): Pipe the output of the first m4 into
+ the second one, instead of saving to a tmp file, so that we can
+ trace endless configure.in expansion.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Uniform idioms.
+
+ * acgeneral.m4 (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS,
+ _AC_OUTPUT_LINKS, _AC_OUTPUT_COMMANDS): Prefer
+ for i in : $is; do test $i = : && continue
+ over
+ for i in .. $is; do if test $i != ..; then
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE, _AC_INIT_PARSE_ARGS): Move more
+ initializations to...
+ (_AC_INIT_DEFAULTS): here.
+
+2000-03-21 Akim Demaille <akim@epita.fr>
+
+ Give a means to compute `srcdir' earlier in configure.
+
+ * acgeneral.m4 (_AC_INIT_SRCDIR): New macro, pulled out from...
+ (_AC_INIT_PREPARE): No longer compute `srcdir'.
+ (_AC_INIT): Use _AC_INIT_SRCDIR.
+ (AC_INIT): Don't forget to pass the argument to _AC_INIT.
+
+2000-03-20 Jim Meyering <meyering@lucent.com>
+
+ * acspecific.m4 (AC_SYS_LONG_FILE_NAMES): Don't test for existence
+ of $ac_xdir. Not only is `test -e' not portable, but the test isn't
+ necessary at all; the following mkdir ends up accomplishing the
+ same goal. Suggestion from Alexandre Oliva.
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_ENVIRONMENT) [setting IFS]: Be careful
+ to use space, tab and new line, in precisely that order.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_SUBDIRS): Rename as _AC_OUTPUT_SUBDIRS.
+ No argument, use AC_LIST_SUBDIRS.
+ Adjust callers.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WITH): Double quote the head
+ of the help snippet.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ Give an identity to `configure' scripts.
+
+ * acgeneral.m4 (AC_PACKAGE): New macro.
+ (_AC_COPYRIGHT_SEPARATOR): Remove.
+ (AC_COPYRIGHT): Adjust.
+ (_AC_INIT_HELP, _AC_INIT_VERSION): Name the package you configure
+ when you want.
+ (_AC_INIT): Adjust.
+ * configure.in (AC_PACKAGE): Add.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ Don't rely on RS = "\0" to swallow the whole input as a single
+ record, this is not portable: mawk and nawk understand it as RS =
+ "". gawk understands it as expected.
+
+ * autoconf.sh (translate_awk::BEGIN): No longer change RS.
+ (translate_awk::body): Move to the END.
+ Instead, accumulate the input in `request'.
+
+2000-03-20 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Testing Values and Files): Be a subsection of
+ `Portable Shell Programming'.
+ (Shell Substitutions, Limitations of Usual Tools): New subsections.
+
+2000-03-17 Akim Demaille <akim@epita.fr>
+
+ Use a single tool to reformat the raw `configure' script output by
+ m4.
+ Suggested by Paul Eggert.
+
+ * autoconf.sh: Stop playing with 2 seds and an AWK to finalize
+ `configure', a single AWK program is enough.
+
+2000-03-17 Akim Demaille <akim@epita.fr>
+
+ In Autoconf 2.13, although AC_OUTPUT_COMMANDS did double quote its
+ arguments, AC_OUTPUT arguments 2 and 3 were not! Currently,
+ AC_OUTPUT over quotes too: stop that.
+ Reported by Martin Buchholz.
+
+ * doc/autoconf.texi (Output): Don't expand on the ternary
+ AC_OUTPUT.
+ * acgeneral.m4 (AC_OUTPUT): Don't over quote $2 and $3.
+
+2000-03-17 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * acspecific.m4 (AC_SYS_LONG_FILE_NAMES): Security fixes: create
+ the temp files in a private temporary directory, not directly in
+ TMPDIR.
+
+2000-03-17 Akim Demaille <akim@epita.fr>
+
+ Install the IFS we need once for all.
+
+ * acgeneral.m4 (_AC_INIT_PREPARE_ENVIRONMENT): New macro.
+ Handle the NLS envvars, and IFS.
+ (_AC_INIT_PREPARE): Use it, no longer set the NLS envvars.
+ (_AC_WHICH_A, AC_PATH_PROG): Rely on the default IFS.
+ * acspecific.m4 (AC_PROG_INSTALL, AC_FUNC_SELECT_ARGTYPES):
+ Likewise.
+
+2000-03-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_TRY_CPP, AC_EGREP_CPP, AC_TRY_COMPILE,
+ AC_TRY_LINK, AC_TRY_RUN_NATIVE): Simplify the removal of the
+ contest files: don't remove them before running the actions, just
+ remove them at the end of the macro.
+
+2000-03-16 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_FUNC_SELECT_ARGTYPES): Use
+ : ${foo='some words'}
+ not
+ : ${foo=some words}
+ since this is not portable: Digital Unix v5.0: `bad substitution'.
+ From Nicolas Joly.
+
+2000-03-16 Lars J. Aas <larsa@sim.no>
+
+ * libm4.m4 (m4_assert, m4_shiftn): New macros.
+ (m4_case,m4_match): Rewrite to use m4_shiftn (for readability reasons).
+ (m4_for): Add the STEP argument and some argument-verifying asserts.
+ (m4_split): Correct spaces to tabulator in regexp.
+
+2000-03-15 Akim Demaille <akim@epita.fr>
+
+ Revamp AC_FUNC_SELECT_ARGTYPES.
+
+ * acspecific.m4 (AC_FUNC_SELECT_ARGTYPES): Use a single cache
+ variable instead of three.
+ Use AC_CACHE_CHECK.
+ Shorten the name of the var loops, they are no longer cached.
+ Include sys/types.h unconditionally.
+ `select' returns an int, fixes Autoconf/46.
+ Don't display parens in the user messages.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh: Use run_m4f, not run_m4.
+
+2000-03-14 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * tests/actest.m4 (AC_ENV_SAVE): Don't consider RANDOM and LINENO
+ which some shells update. At least ksh on HP-UX 10.20 and sh on
+ IRIX 6.5 do change their `RANDOM' even if `read' via `set'.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WITH): No use for @%:@ here,
+ no need to over quote $1 in the comments.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Replace some ifelse with ifval or m4_default, or
+ even nothing when not needed.
+ * acspecific.m4: Likewise.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Insert the Autoconf version in
+ config.log, and the command line which ran configure.
+ Kill a couple of useless quote around dollars.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Kill a changequote in the
+ building of `ac_configure_args'.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_DIVERT): Rename _AC_DIVERT.
+ (AC_DIVERT): New macro.
+ Spread its use where better than a pair of AC_DIVERT_PUSH/POP.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_BINSH): Remove, useless now that...
+ (AC_REVISION): Require AC_INIT, not _AC_INIT_BINSH.
+ (AC_INIT): Do what _AC_INIT_BINSH used to.
+ Don't require _AC_INIT_VERSION, just call it.
+ Rename as _AC_INIT.
+ (AC_INIT): New macro, single expansion wrapper around _AC_INIT.
+ (_AC_COPYRIGHT_SEPARATOR): New.
+ (AC_COPYRIGHT): Use it.
+ Require AC_INIT, not _AC_INIT_VERSION.
+ * doc/autoconf.texi (Versions): Promote as first section of
+ `Setup'.
+ Rename as `Notices'.
+ Document AC_COPYRIGHT.
+ Don't give false reasons for placing AC_REVISION before AC_INIT,
+ the place no longer matters.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (trace_m4::smash): Double quote, we don't want the
+ result to be evaluated.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: s/@%:@line __oline__/#line __oline__/g. __oline__
+ is not a macro, so there is just no use in avoiding `#'.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): When there were no
+ CONFIG_FILES, we had to expand _AC_OUTPUT_FILES into the KILL
+ diversion, because it is AC_OUTPUT_FILES which undiverted the
+ AC_SUBST sed script at its proper place, otherwise it would have
+ been undiverted at the end of `configure', leading to an sh syntax
+ error.
+ Now that we no longer use a diversion, we don't need to call
+ AC_OUTPUT_FILES if useless.
+ (AC_OUTPUT_FILES): Rename as _AC_OUTPUT_FILES.
+ (AC_OUTPUT_LINKS): Rename as _AC_OUTPUT_LINKS.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ AC_ARG_PROGRAM must not be expanded twice, which is likely since
+ Automake calls it, and usually users do too. If it happens,
+ `--program-prefix=g' actually prepend two (or more) `g'.
+
+ * acgeneral.m4 (AC_DEFUN_ONCE): New macro.
+ (AC_ARG_PROGRAM): AC_DEFUNed_ONCE. Or is it AC_DEFUN_ONCE'd? :).
+ No longer AC_EXPAND_ONCE the help string, the macro itself is
+ expanded at most once.
+ Rename the here-doc tag EOF_SED as EOF.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ Get rid of the ICMDS diversion.
+
+ * acgeneral.m4 (AC_DIVERT): Remove ICMDS.
+ (_AC_OUTPUT_COMMANDS_INIT): New growing string.
+ (_AC_CONFIG_COMMANDS_INIT, _AC_OUTPUT_CONFIG_STATUS): Adjust.
+
+2000-03-14 Akim Demaille <akim@epita.fr>
+
+ Introduce AC_SUBST(VAR, VAL).
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Stop global double quoting,
+ failed experiment.
+ Merge all the var=val AC_SUBST(var) into AC_SUBST(var, val).
+ (AC_SUBST): Implement support for 2nd arg.
+ * doc/autoconf.texi (Setting Output Variables): Adjust.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ Simplify the diversions naming system.
+ Suggested by Alexandre Oliva and Lars J. Aas
+
+ * libm4.m4 (ifndef): New macro.
+ * acgeneral.m4 (AC_DIVERT): New macro, maps a diversion name to
+ its value. The diversions now have a short name, e.g., `NOTICE',
+ instead of the former macros which had long names, e.g.,
+ `AC_DIVERSION_NOTICE'.
+ (AC_DIVERT_PUSH): Adjust.
+ (AC_DIVERT_POP): Use ifndef.
+ (AC_DIVERSION_CURRENT): Rename as `AC_DIVERT_DIVERSION' to stay
+ within the `AC_DIVERT' name domain.
+ Adjust all callers.
+ * acspecific.m4: Adjust all callers.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Invoking autoconf): Update documentation of
+ `autoconf --trace'.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (tmpbase): New var. Adjust trap code and other tmp
+ file names.
+ (translate_awk::BEGIN): Set RS to "\0" so that the whole file be a
+ single record.
+ (translate_awk::trans): Convert from array to function.
+ (translate_awk::error): New function.
+ (translate_awk::main action): Implement support for ${sep}@ and
+ ${sep}*. Use trans() and error().
+ (translate_awk): Don't put space before user functions call, it is
+ not portable.
+ Remove trailing `;', this is not C :).
+ (task trace): Quote `$traces' when you eval it, to protect the
+ white spaces.
+ Propagate `translate_awk' failures to `autoconf.sh'.
+ Translate the quadrigraphs.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ Trap on 0 is not executed when `exit' is called without argument.
+
+ * autoheader.sh (trap 1 2 13 15): s/exit/exit $?/.
+ * autoconf.sh: Likewise.
+ Remove translate_awk too.
+ * autoupdate.sh: Likewise.
+ Handle `--debug'.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ More uniform style in scripts.
+
+ * autoheader.sh: s/-eq/=/.
+ Uniform ordering of variable initializations, option handling.
+ Don't use quotes where useless (foo=$1, not foo="$1").
+ Propagate `run_m4' and `run_m4f'.
+ Use `$0' in --help.
+ * autoconf.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Likewise.
+ * autoupdate.m4: Small bug: at the end `dnl' is disabled, so use
+ `m4_dnl'.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ `autoconf --trace': faster.
+
+ * autoconf.sh (initialization): New var, new option.
+ (option loop): When you need an arg, make sure there is one.
+ (run_m4f): New var, which content is that of the former...
+ (run_m4): Don't use m4 frozen state files.
+ Change all callers.
+ Don't pass AC_LOCALDIR, not documented, and unused.
+ (task trace): Honor `--verbose' and `--initialization'.
+ (globally): Send `--verbose' messages in stderr.
+ Fix random typos.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PROG_BINSH): Removed.
+
+2000-03-13 Akim Demaille <akim@epita.fr>
+
+ Start revamping `autoconf --trace'.
+
+ * autoconf.sh (debug): New var, new option.
+ Adjust the trap code.
+ (task trace): Instead of decoding `m4 --trace' with sed, decode it
+ with m4 itself.
+ ($silent_m4): New file, which disables m4's `errprint'.
+ ($trace_m4): New file. Logistic for the m4 which is in charge of
+ decoding the traces of the first.
+ ($translate_awk): Transform a user trace request into $trace_m4
+ code.
+
+2000-03-10 Akim Demaille <akim@epita.fr>
+
+ Multiple `-e' to egrep are not portable. On IRIX 6.5 and Solaris
+ 2.5.1 only the last one is honored:
+ > printf "foo\nbar\n" | egrep -e 'foo' -e 'bar'
+ bar
+ > printf "foo\nbar\n" | egrep -e 'bar' -e 'foo'
+ foo
+ Reported by Nicolas Joly.
+ An alternative would have been to use `sed', unfortunately
+ alternation is not portable.
+
+ * tests/actest.m4 (join): New macro.
+ (AC_ENV_SAVE): Join the egrep patterns into a single big one.
+ * tests/Makefile.am (EGREP_EXCLUDE): Rename as FILTER_MACROS.
+ Join the egrep patterns into a single big one.
+
+2000-03-10 Jim Meyering <meyering@lucent.com>
+
+ * acgeneral.m4 (_AC_CHECK_TOOL_PREFIX): Correct typos in definition:
+ add `_' prefix to make the function name match comments and existing
+ uses. Remove leading prefix from _AC_CANONICAL_HOST.
+
+2000-03-09 Ossama Othman <ossama@debian.org>
+
+ * acspecific.m4 (AC_SYS_RESTARTABLE_SYSCALLS): Added some missing
+ headers if they exist (needed for some missing prototypes) and
+ corrects the signal handler prototype/definition. The signal
+ handler prototype is now prepended with an `extern "C"' for C++
+ compilers since some platforms explicitly require an `extern "C"'
+ signal handler.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * autoheader.m4 (autoheader::AC_CHECK_HEADERS_DIRENT): Rename as
+ (autoheader::_AC_CHECK_HEADERS_DIRENT): to cope with the new name
+ of the autoconf:: macro.
+ Fixes autoconf/119, reported by Raja R Harinath.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PATH_PROG, AC_OUTPUT_FILES, AC_OUTPUT_SUBDIRS):
+ Fix quotation problems in DOS path handling.
+
+2000-03-08 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * acspecific.m4 (AC_FUNC_MMAP, AC_FUNC_ALLOCA): Make them C++
+ safe: include the right headers, cast the allocations etc.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ The argument of AC_COPYRIGHT should be plain text, not an sh
+ comment.
+
+ * libm4.m4 (m4_quote): s/$@/$*/.
+ * acgeneral.m4 (AC_COPYRIGHT): Prepend `# ' to the lines that go
+ on the top of `configure'. Actually, prepend `@%:@ ' so that
+ there are as many evaluations on both sides.
+ (_AC_INIT_VERSION): No longer strip `# '.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (all-local): Remove. It wastes time to have
+ testsuite rebuilt each time an ac*.m4 file changes. It is enough
+ to build it for each `make check'.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ Leave a diversion exclusively for Copyright notices.
+
+ * acgeneral.m4 (AC_DIVERSION_DEFAULTS): New diversion number.
+ (_AC_INIT_NOTICE): Move definition of `ac_includes_default' from
+ here...
+ (_AC_INIT_PREPARE): to here.
+ (_AC_INIT_NOTICE): Play with your diversion yourself, don't let
+ (AC_INIT): do it for you.
+ (_AC_INIT_DEFAULTS): New macro.
+ (AC_INIT): Use it.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ Provide a means to specify more Copyright information in
+ `configure'. And after all, it suits to `configure --version' too.
+
+ * acgeneral.m4 (AC_DIVERSION_DEFAULTS, AC_DIVERSION_INIT_PREPARE):
+ New diversion numbers.
+ (AC_DIVERSION_INIT): Rename as...
+ (AC_DIVERSION_INIT_PARSE_ARGS): this.
+ (AC_DIVERT_POP): Instead of going into wild endless loops when
+ there are more pops than pushes, die with dignity.
+ (AC_COPYRIGHT): New macro.
+ (_AC_INIT_NOTICE): Move definition of `ac_includes_default' from
+ here...
+ (_AC_INIT_PREPARE): to here.
+ (_AC_INIT_NOTICE): Remove.
+ (AC_INIT): Use it to install Autoconf's Copyright.
+ (_AC_INIT_DEFAULTS): New macro.
+ (AC_INIT): Use it.
+ (AC_PREFIX_DEFAULTS): Dump in AC_DIVERSION_DEFAULTS.
+ (_AC_INIT_PARSE_ARGS): Dump in AC_DIVERSION_INIT_PREPARE.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ We don't need _AC_ARG_*_HELP_PROLOGUE.
+
+ * acgeneral.m4 (AC_EXPAND_ONCE): AC_PROVIDE yourself, in case
+ there is no AC_DEFUN associated with the text to expand.
+ (_AC_ARG_ENABLE_HELP_PROLOGUE, _AC_ARG_WITH_HELP_PROLOGUE,
+ _AC_ARG_VAR_HELP_PROLOGUE): Remove, instead...
+ (AC_ARG_ENABLE, AC_ARG_WITH, AC_ARG_VAR): do it yourself.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Fix copy n' paste typos in
+ `--with-*', `--without-*' and `*' decoding.
+ Reported by Raja R Harinath.
+ Fixes autoconf/118.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ Don't dump AC_ARG_PROGRAM help messages if not used.
+
+ * acgeneral.m4 (_AC_INIT_HELP): Don't.
+ (AC_ARG_PROGRAM): Do.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ Don't dump X help messages when `configure' does not check for X.
+
+ * acgeneral.m4 (_AC_INIT_HELP): Don't dump X help messages.
+ * acspecific.m4 (AC_PATH_X): Do it.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ No longer rely on /bin/sh to compose the optional parts of
+ `configure --help'.
+
+ * acgeneral.m4 (AC_DIVERSION_HELP_BEGIN, AC_DIVERSION_HELP_ENABLE,
+ AC_DIVERSION_HELP_WITH, AC_DIVERSION_HELP_VAR,
+ AC_DIVERSION_HELP_END): New diversion numbers.
+ (AC_EXPAND_ONCE): New macro.
+ (AC_PROVIDE_IF): New macro.
+ (AC_BEFORE, AC_REQUIRE): Use it.
+ (AC_REQUIRE): Don't use indir.
+ (_AC_ARG_ENABLE_HELP_PROLOGUE, _AC_ARG_WITH_HELP_PROLOGUE,
+ _AC_ARG_VAR_HELP_PROLOGUE): New macros.
+ (AC_ARG_ENABLE, AC_ARG_WITH, AC_ARG_VAR): Expand once the
+ _HELP_PROLOGUE macro which corresponds.
+ (_AC_INIT_HELP): Adjust to AC_DIVERSION_HELP_BEGIN and
+ AC_DIVERSION_HELP_END.
+ (_AC_INIT_NOTICE, _AC_INIT_HELP): Remove the sh code which handled
+ the optional help strings.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ AC_OUTPUT_COMMANDS no longer uses a diversion.
+
+ * acgeneral.m4 (AC_DIVERSION_CMDS): Removed.
+ (_AC_OUTPUT_CONFIG_STATUS): Don't undivert it.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): Fix quoted/non quoted here
+ document problems.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_BINSH, AC_INIT_NOTICE, AC_INIT_PREPARE):
+ Rename as...
+ (_AC_INIT_BINSH, _AC_INIT_NOTICE, _AC_INIT_PREPARE): this.
+ All callers adjusted.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Rename as...
+ (_AC_INIT_PARSE_ARGS): this.
+ Move the display of help and version strings to...
+ (_AC_INIT_HELP, _AC_INIT_VERSION): here.
+ (AC_INIT): Adjust. Also, fix quotation.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ Some tests are failing with srcdir != builddir, because they can't
+ find config.guess, install-sh etc.
+ Reported by Erez Zadok.
+
+ * tests/atspecific.m4 (AT_TEST_MACRO): Set AC_CONFIG_AUX_DIR to
+ top_srcdir in configure.in, and pass the value of top_srcdir to
+ configure.
+
+2000-03-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WITH, AC_PATH_PROG,
+ AC_PATH_PROGS, AC_PATH_TOOL, AC_CHECK_TOOL, AC_PREFIX_PROGRAM,
+ AC_EGREP_CPP, AC_TRY_LINK, AC_COMPILE_CHECK, AC_TRY_RUN_NATIVE):
+ Use ifval instead of ifelse.
+
+2000-03-07 Mark Elbrecht <snowball3@bigfoot.com>
+
+ Support absolute DOS-style paths.
+
+ Any character before the colon is accepted because network drives
+ can be assigned characters outside the [a-zA-Z] range. DOS-style
+ relative paths (?:foo/bar) are also considered absolute for
+ Autoconf's purposes since the path '../?:foo/bar' is invalid.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Treat DOS-style paths (?:*') as
+ absolute.
+ (AC_OUTPUT_SUBDIRS): Likewise.
+ (AC_PATH_PROG): Make pattern for matching DOS-style paths the same
+ as that used in AC_OUTPUT_FILES and AC_OUTPUT_SUBDIRS.
+
+2000-03-06 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (m4_match): Remove, no longer used.
+
+2000-03-04 Jim Meyering <meyering@lucent.com>
+
+ * autoheader.sh: Use `rm -f', not just `rm' when removing temporaries.
+ Preserve exit status in trap handler.
+ Based on suggestions from Paul Eggert.
+
+2000-03-03 Paul Eggert <eggert@twinsun.com>
+
+ Move the quadrigraphs out of the user name space.
+
+ * acgeneral.m4: 's/\@BKL@/@<:@/g', 's/\@BKR@/\@:>@/g',
+ 's/\@DLR@/\@S|@/g', 's/\@PND@/@%:@/g'.
+ * acspecific.m4: Likewise.
+ * autoconf.sh: Likewise.
+
+2000-03-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_WHICH_A): New macro.
+ (AC_CHECK_PROG): Use it. Use ifval.
+ (AC_CHECK_PROGS): Use ifval. Fix the quoting.
+ * tests/semantics.m4: Test AC_CHECK_PROG.
+ * tests/Makefile.am (EGREP_EXCLUDE): Add /AC_CHECK_PROGS?/.
+
+2000-03-02 Russ Allbery <rra@stanford.edu>
+
+ * autoscan.pl (parse_args): Add support for -m <macrodir>.
+
+2000-03-02 Akim Demaille <akim@epita.fr>
+
+ The whole family supports -V = --version.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Report and support -V.
+ * autoconf.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * autoheader.sh: Likewise.
+ * autoscan.pl: Likewise.
+ * ifnames.sh: Likewise.
+ In addition, don't dump --help on invalid options.
+ * doc/autoconf.texi: Adjusted.
+ * doc/install.texi: Likewise.
+
+2000-03-02 Lars J. Aas <larsa@sim.no>
+
+ * libm4.m4 (m4_noquote): New macro.
+
+2000-03-02 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PATH_X_DIRECT): Moved all the shell variable
+ into the ac_ name space.
+ Reported by Nicolas Joly.
+
+2000-03-02 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Move some macros to a better place.
+
+2000-03-02 Akim Demaille <akim@epita.fr>
+
+ Internal macros are named `_AC_'.
+
+ * acgeneral.m4 (AC_CANONICAL_TARGET, AC_CANONICAL_BUILD,
+ AC_CANONICAL_THING, AC_CHECK_TOOL_PREFIX, AC_CONFIG_UNIQUE):
+ Prepend `_' to their names.
+ * acspecific.m4 (AC_CHECK_HEADER_DIRENT, AC_CHECK_HEADERS_DIRENT,
+ AC_PATH_X_XMKMF, AC_PATH_X_DIRECT): Prepend `_' to their names.
+ * doc/autoconf.texi (Macro Names): Adjusted.
+
+2000-03-02 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ The empty regexp cannot be portably used in egrep's alternation.
+ For instance with Digital Unix v5.0:
+ > echo "foo" | egrep -e "^(|foo|bar)$"
+ > echo "|foo" | egrep -e "^(|foo|bar)$"
+ |foo
+ > echo "|bar" | egrep -e "^(|foo|bar)$"
+ > echo "bar" | egrep -e "^(|foo|bar)$"
+ bar
+ > echo "bar" | egrep '^(foo|bar|)$'
+ > echo "bar|" | egrep '^(foo|bar|)$'
+ bar|
+ > echo "bar" | egrep '^(foo||bar)$'
+ > echo "|bar" | egrep '^(foo||bar)$'
+ |bar
+ > echo "foo" | egrep '^(foo||bar)$'
+ foo
+ > echo "foo|" | egrep '^(foo||bar)$'
+ >
+ Reported by Nicolas Joly.
+
+ * src/actest.m4 (AC_ENV_SAVE): s/(|EXTRA_|PRE_)/(EXTRA_|PRE_)?/.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Removed a few addresses, the map is...
+ * THANKS: here.
+
+2000-03-01 Lars Hecking <lhecking@nmrc.ucc.ie>
+
+ * acspecific.m4 (AC_PATH_XTRA): On LynxOS 3.0.1/i386,
+ gethostbyname(), getservbyname(), and inet_addr() are in -lbsd.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ * tests/actest.m4 (AC_ENV_SAVE): Use multiple -e instead of
+ multiple egrep.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ * config.guess: Updated from master repository.
+ * config.sub: Likewise.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ Test suite: instead of using a full list of the AC macros and an
+ AT macro with selects which are the AC macros to test, just
+ produce the list of the AC macros we want to test.
+
+ * tests/atspecific.m4 (TEST_MACRO): Removed.
+ * tests/Makefile.am (EGREP_EXCLUDE): New variable, performing the
+ selection TEST_MACRO used to do.
+ (macros.m4): Use it. Use AT_TEST_MACRO, not TEST_MACRO. Check
+ also AU macros.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Tune the use of quotes, add missing
+ @noindents, remove dead FIXME:s, promote #if ! over #ifndef,
+ simplify duplicated text.
+
+2000-03-01 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Configuration Commands): Document
+ AC_CONFIG_COMMANDS_PRE and _POST.
+
+2000-02-29 Akim Demaille <akim@epita.fr>
+
+ Test suite: more debugging information.
+
+ * tests/atspecific.m4 (AT_TEST_MACRO): When verbose, report the
+ content of config.log.
+
+2000-02-29 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (MAKEINFO): Removed.
+ (INSTALL.txt): Call $(MAKEINFO) with --no-split.
+ Reported by Nicolas Joly.
+
+2000-02-28 Akim Demaille <akim@epita.fr>
+
+ * doc/Makefile.am (MAKEINFO): s/makeinfo/@MAKEINFO@/.
+ * missing: chmod +x.
+
+2000-02-28 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (testsuite): Use $(M4), not m4.
+ From Patrick Tullmann.
+
+2000-02-25 Akim Demaille <akim@epita.fr>
+
+ * src/acgeneral.texi (AC_INIT_NOTICE): Include inttypes.h in the
+ ac_includes_default.
+ * doc/autoconf.texi (Default Includes): Adjust.
+
+2000-02-25 Akim Demaille <akim@epita.fr>
+
+ Export the knowledge on disabling echo's trailing new line.
+
+ * acspecific.m4 (AC_PROG_ECHO_N): Rename as...
+ (_AC_PROG_ECHO): this.
+ Set ECHO_N, ECHO_C, ECHO_T instead of ac_n, ac_c and ac_t.
+ All dependencies changed.
+ * doc/autoconf.texi (Preset Output Variables): Document ECHO_C,
+ ECHO_N and ECHO_T.
+ * m4/atconfig.m4 (fp_PROG_ECHO): Removed.
+ (AT_CONFIG): Don't use it.
+
+2000-02-24 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (AC_ACLOCALDIR): Use `(aclocal) 2>/dev/null`, not
+ `aclocal 2>/dev/null` if you want no complaints for missing
+ aclocal.
+ From Nicolas Joly.
+
+2000-02-22 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * configure.in (HELP2MAN): Specify the third argument of
+ AM_MISSING_PROG. Fixes autoconf/116.
+
+2000-02-21 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (syntax.sh): The logic of the previous patch was
+ twisted. Fix it so that it performs what claims the entry below.
+ From Nicolas Joly.
+
+2000-02-21 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (syntax.sh): Exit 1 if you managed to kill the
+ child, since it means `/bin/sh -n' went loopy.
+
+2000-02-18 Akim Demaille <akim@epita.fr>
+
+ Some `diff' refuse to diff with /dev/null, such as Tru64's.
+ Reported by Nicolas Joly.
+
+ * tests/atgeneral.m4 (empty): New dummy file.
+ Changed various `diff /dev/null' as `diff empty'.
+
+2000-02-18 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (TEST_MACRO): Don't run AC_PATH_TOOL and
+ AC_PATH_PROG.
+
+2000-02-18 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4 (at_diff): Don't use `cmp -s', on DOS it
+ differentiate between Unix and DOS EOL. `diff' does not.
+ Reported by Eli Zaretski.
+ Also, be ready to use a diff that does not support `-u'.
+
+2000-02-18 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.m4 (Syntax of the scripts): Be robust to shells that
+ never return on some `/bin/sh -n foo.sh'.
+ Reported by Nicolas Joly.
+
+2000-02-17 Akim Demaille <akim@epita.fr>
+
+ Move the documentation into doc/.
+ Some CVS tricks were used so that history is kept in both the top
+ directory, and in doc/.
+
+ * doc/Makefile.am: New file.
+ * Makefile.am: Adjusted.
+ * configure.in: Adjusted.
+ * autoconf.texi: Moved from here to...
+ * doc/autoconf.texi: here.
+ * make-stdts.texi: Likewise.
+ * install.texi: Likewise.
+ * texinfo.tex: Likewise.
+
+2000-02-17 Akim Demaille <akim@epita.fr>
+
+ * tests/actest.m4 (AC_ENV_SAVE): Added ALLOCA.
+
+2000-02-17 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.m4 (AC_CHECK_TYPES): `addr, addr' is not
+ portable sed: use `addr,addr'.
+
+2000-02-17 Akim Demaille <akim@epita.fr>
+
+ Fix the `missing dummy.in' reported by the test suite.
+ Reported by Erez Zadok.
+
+ * tests/torture.m4 (config.status under extreme conditions):
+ Reorganized. Because files required by this test were created
+ outside the pair AT_SETUP/AT_CLEANUP, when the test fails and
+ autotest extracts this test, the `debug' script does not contain
+ the files it needs. Now AT_SETUP/AT_CLEANUP encloses the full
+ auto contained section.
+
+2000-02-16 Akim Demaille <akim@epita.fr>
+
+ * tests/actest.m4 (AC_ENV_SAVE): X_EXTRA_LIBS can be changed by
+ AC_PATH_EXTRA.
+ Reported by Erez Zadok.
+
+2000-02-15 Akim Demaille <akim@epita.fr>
+
+ Define HAVE_DECL_FOO both to 1 if found and 0 otherwise.
+
+ * acgeneral.m4 (AC_CHECK_DECLS): Define HAVE_DECL_FOO to 1 instead
+ of NEED_FOO_DECL if found. Define to 0 if not found.
+ * autoheader.m4 (AC_CHECK_DECLS): Template HAVE_DECL_FOO.
+ * tests/semantics.m4 (AC_CHECK_DECLS): Adjusted.
+ * doc/autoconf.texi (Generic Declarations): Adjusted.
+
+2000-02-15 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Generic Structures):
+ s/AC_FATAL/AC_MSG_ERROR.
+
+2000-02-15 Akim Demaille <akim@epita.fr>
+
+ autoreconf had a silly syntax error, test it and fix it.
+ Reported by Franc,ois Pinard and Rainer Orth.
+
+ * autoreconf.sh: Removed spurious `;;'.
+ Formatting changes.
+ * tests/tools.m4 (Syntax of the scripts): Run `sh -n' on all the
+ shell scripts.
+
+2000-02-15 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (options handling): --v* of --version was shadowing
+ --verbose.
+
+2000-02-11 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.m4: Nuke the trailing space in defs.
+
+2000-02-11 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4: Really added to the CVS repository.
+
+2000-02-11 Akim Demaille <akim@epita.fr>
+
+ Don't use `cat -s' to single out new-lines, it is not portable.
+ Also remove trailing blanks.
+
+ * tests/Makefile.am (testsuite): Use sed instead of cat.
+ * tests/torture.m4: No longer check for a trailing space.
+ * autoconf.sh: Likewise.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * tests/actest.m4 (AC_ENV_SAVE): OpenBSD-2.3's /bin/sh defines an
+ envvar SECONDS which does change with time.
+ KMEM_GROUP is set by AC_FUNC_GETLOADAVG.
+ Reported by Volker Borchert.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (macros.m4): Better regex to build `macro'.
+ Depend upon acgeneral.m4.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh: Remove the duplicate trap code.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT): When dispatching your arguments, use
+ ifval, not ifset!
+ Dispatch actions to AC_CONFIG_COMMANDS not AC_OUTPUT_COMMANDS, to
+ avoid unneeded warnings for obsolete use of AC_OUTPUT_COMMANDS.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_VERBOSE): This is a tab, not spaces.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Changequote busters II.
+ They're back to save the world.
+
+ * acspecific.m4 (AC_PROG_CC_C_O, AC_PROG_F77_C_O,
+ AC_PROG_MAKE_SET, AC_TYPE_GETGROUPS, AC_FUNC_GETLOADAVG,
+ AC_FUNC_MKTIME, AC_STRUCT_TIMEZONE, AC_F77_LIBRARY_LDFLAGS): Blast
+ that jelly o' changequote. Set the quotes free.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Interrupting autoheader left temp files.
+ From Jim Meyering.
+
+ * autoheader.sh (usage): The usage is to use $0 here.
+ (ah_base): Be in TMPDIR.
+ Install the `trap' before creating the first tmp file.
+ Also trap on 0.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): This is a routine of
+ `configure', not `config.status', hence use `conftest' for tmp
+ files, not `$ac_cs_root'.
+ Removed forgotten developer comment.
+ Double quoting the whole body is nicer than just the part that
+ needs to be.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.m4: Also check the value of @DEFS@ when no
+ CONFIG_HEADER is used.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Changequote-busters!
+ From Dan Ackroyd.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS, AC_INIT_PREPARE,
+ AC_CACHE_SAVE, AC_PREFIX_PROGRAM, AC_OUTPUT,
+ _AC_OUTPUT_CONFIG_STATUS, AC_OUTPUT_MAKE_DEFS, AC_OUTPUT_FILES,
+ _AC_OUTPUT_HEADERS, AC_OUTPUT_LINKS, AC_OUTPUT_SUBDIRS): Quit
+ playing with changequotes, @BKL@ and Co.! Just quote properly.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Honor properly the `#define' config.h.in templates.
+ Test it.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADERS): Rename as...
+ (_AC_OUTPUT_HEADERS): this. All callers changed.
+ Don't mess with changequote, just quote properly.
+ Bug 1. Because of the `#' in `ac_dA', the quotes <<>> were not
+ removed, and therefore the sed script contained `<<define>>'
+ instead of `define'. Now that the block is properly quoted, there
+ is no need to quote `define'.
+ Bug 2. Once a `#define' substitution performed, we were branching
+ to the top of the sed script (`t top'). This resulted in an
+ endless substitution of `#define foo 1' to `#define foo 1'.
+ Branching is not enough: you also have to fetch the next input
+ line, i.e., use `t' instead of `t t' in ac_dD, and don't output
+ `: top' in `config.defines'.
+ Though it was correct for `#undef' templates, just apply the same
+ transformation to `ac_uD' and `config.undefs'.
+ Bug 3. Don't try to preserve what was behind the value in the
+ template, since on
+ #define NAME "bar baz"
+ it leads to
+ #define NAME 1 baz"
+ Now `ac_dB' catches everything behind the NAME (making sure there
+ is at least a space) and `ac_dC' only outputs a space.
+ * tests/torture.m4: Check that various forms of `#define' header
+ templates are properly handled.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Avoid calling `rm' without arguments.
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): It is smarter to use a
+ quoted here doc to output the section providing defaults for
+ CONFIG_*.
+ Don't rm the CONFIG_FILES here but in..
+ (AC_OUTPUT_FILES) [test -n "$CONFIG_FILES"]: here.
+ Hm, actually, no, just don't remove them at all, let the newly
+ created files replace the old ones, exactly as in
+ AC_OUTPUT_HEADERS.
+ From Graham Jenkins.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_LIST_MEMBER_OF): s/ac_$exists/$ac_exists/!
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Don't
+ : ${FOO="$foo"}
+ but
+ : ${FOO=$foo}
+ Since Ultrix will also assign the quotes to FOO.
+ Reported by Harlan Stenn.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Keep `AC_CHECK_TYPE' backward compatibility and provide a proper
+ `AC_CHECK_TYPE',
+ Based on ideas from Paul Eggert and Alexandre Oliva.
+
+ * acgeneral.m4 (AC_CHECK_TYPE_INTERNAL): Rename as...
+ (_AC_CHECK_TYPE_NEW): this.
+ (AC_CHECK_TYPES): Adjusted.
+ (AC_CHECK_TYPE): Rename as...
+ (_AC_CHECK_TYPE_OLD): This. Adjusted to _AC_CHECK_TYPE_NEW.
+ No longer support extra includes, stick to 2.13's interface.
+ (_AC_CHECK_TYPE_BUILTIN_P): New macro.
+ (AC_CHECK_TYPE): New macro.
+ * autoheader.m4 (autoheader::AC_CHECK_TYPE): Rename as...
+ (autoheader::_AC_CHECK_TYPE_OLD): this.
+ * tests/atspecific.m4 (TEST_MACRO): Skip /^_AC_/ macros.
+ * tests/semantics.m4: Test the choices of AC_CHECK_TYPE (wrt _NEW
+ or _OLD implementation).
+ * doc/autoconf.texi (Generic Types): Reorganized. Explain
+ everything about AC_CHECK_TYPE and Co.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (near m4_split): Remove the buggy additional
+ changequote.
+ Quote properly `m4_split' when registering it.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ The AU-glue code for AC_LINK_FILES was not fully compatible: in
+ AC_LINK_FILES($from, $to)
+ `$from' and `$to' can be lists, hence `AC_CONFIG_LINKS($to:$from)'
+ is wrong.
+ Reported by H.J. Lu.
+
+ * acgeneral.m4 (AC_LINK_FILES): Replace the m4-glue code from
+ AC_LINK_FILES to AC_CONFIG_LINKS, with sh-glue code.
+ Give a detailed update message.
+ (_AC_LINK_FILES_CNT): New variable. Initialize.
+ * tests/tools.m4 (autoupdate): No longer exercise `autoupdate'
+ with AC_LINK_FILES.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PROG_SED): Removed.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ AC_CHECK_FILES has never worked properly.
+
+ * acgeneral.m4 (AC_CHECK_FILE): Use AC_CACHE_CHECK.
+ * autoheader.m4 (AC_CHECK_FILES): AH-define.
+ * tests/semantics.m4: Test AC_CHECK_FILES.
+ * tests/atspecific.m4 (TEST_MACRO): Don't.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ No longer use a diversion to store the sed program implementing
+ AC_SUBST.
+
+ * acgeneral.m4 (_AC_SUBST): New macro.
+ (_AC_SUBST_SED_PROGRAM): Initialize.
+ (AC_SUBST): Use _AC_SUBST.
+ (AC_SUBST_FILE): Likewise.
+ (AC_DIVERSION_SED): Removed. Renumber the AC_DIVERSIONs.
+ (AC_OUTPUT_FILES): Instead on undiverting AC_DIVERSION_SED, output
+ _AC_SUBST_SED_PROGRAM.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Standardize the error messages in the options handling of
+ `configure' and `config.status'.
+
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_STATUS): Rename as...
+ (_AC_OUTPUT_CONFIG_STATUS): this.
+ Change the error messages from
+ value: invalid feature name
+ to
+ invalid feature: value
+ Invite the user to try --help for invalid options.
+ (AC_INIT_PARSE_ARGS): Likewise.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_COMMANDS_COMMANDS): Rename as...
+ (_AC_OUTPUT_COMMANDS): This. All callers changed.
+ Disable the verbose message until Automake uses the new features
+ of `config.status'.
+ Reported by Jim Meyering.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Clean up a few changequotes.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Instead of using changequote
+ to protect a few `[ ]', double quote the constant sections.
+
+2000-02-10 Akim Demaille <akim@epita.fr>
+
+ Restore AC_HAVE_LIBRARY.
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): AU_DEFUNed in terms of
+ AC_CHECK_LIB.
+ * doc/autoconf.texi (Libraries): Document.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Fix the handling of `./configure foo=bar' and test it.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS, getopt loop): Always define
+ ac_optarg as the rhs of the first `=', not only on `-.*=', so that
+ `configure var=val' defines ac_optarg=val.
+ Improve the robustness to shell special characters:
+ - Use grep when checking that shell variable names are valid.
+ - Quote the quotes in ac_optarg before `eval var='$ac_optarg''.
+ - Quote the quotes when building ac_configure_args.
+
+ * tests/torture.m4: Test that `./configure foo=bar' works properly.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Resynchronize `INSTALL' with the current `configure', and
+ conversely...
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Let `configure' support `-h =
+ --help' and `-n = --no-create'.
+ Document -h, -n and -q in configure's help message.
+ * install.texi (Operation Controls): Formatting changes.
+ Document `configure -h'.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * README: Updated.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * ChangeLog.1: Formatting changes.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Clean up `make clean'.
+
+ * Makefile.am (CLEANFILES): Added autoupdate.m4f and autoconf.tmp.
+ * tests/torture.m4: Rm dummy and dummy.in.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Test `autoupdate'.
+
+ * tests/tools.m4 (AH_DEFUN): Fix the comments.
+ Quote properly.
+ (autoupdate): New test.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ AU_ glue code for AC_OUTPUT with arguments.
+
+ * acgeneral.m4 (AU_DEFINE): New macros, pulled out from AU_DEFUN.
+ Defines a macro in `autoupdate::' with all the required wrapping
+ for `autoupdate'.
+ (AU_DEFUN): Use it.
+ (AC_OUTPUT): When dispatching your arguments, use ifval, not
+ ifset!
+ Dispatch actions to AC_CONFIG_COMMANDS not AC_OUTPUT_COMMANDS, to
+ avoid unneeded warnings for obsolete use of AC_OUTPUT_COMMANDS.
+ (autoupdate::AC_OUTPUT): New macro.
+ * doc/autoconf.texi (Writing configure.in, the example): Don't
+ advocate AC_OUTPUT with args.
+ (Output, AC_OUTPUT with args): Simplify the documentation, and
+ provide the translation into the new scheme.
+ Propagate what remained into the proper sections.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ AU_ glue code for AC_OUTPUT_COMMANDS.
+
+ * acgeneral.m4 (AC_OUTPUT_COMMANDS): AU_DEFUNed in terms of
+ AC_CONFIG_COMMANDS.
+ (AC_OUTPUT_COMMANDS_CNT): New variable, declared both in
+ `autoconf::' and `autoupdate::'.
+ (AC_OUTPUT): Register your arguments to AC_OUTPUT_COMMANDS only if
+ there are to avoid spurious `run autoupdate' messages.
+ * doc/autoconf.texi (Libraries): Document the changes.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Avoid outputting `config_files' code in `config.status' if there
+ are none.
+
+ * acgeneral.m4 (AC_OUTPUT): Don't register $1 to `AC_CONFIG_FILES'
+ if $1 is empty.
+ Normalize the names of the sections in `config.status --help'.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * README-alpha: New file, based on Automake's.
+ * Makefile.am: Tuned.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ Extend the concept of `INIT-CMDS' to the AC_CONFIG_FOOS.
+
+ * acgeneral.m4 (_AC_CONFIG_COMMANDS_INIT): New macro which will
+ collect the `INIT-CMDS'.
+ (AC_CONFIG_COMMANDS, AC_CONFIG_LINKS, AC_CONFIG_HEADERS,
+ AC_CONFIG_FILES): Use it, and also temporarily divert to -1
+ instead of spamming dnl everywhere.
+ (AC_OUTPUT_CONFIG_STATUS): Make sure to output the INIT-CMDS
+ before the other sections, it'd be a pity to initialize after the
+ use :).
+
+ * doc/autoconf.texi (Configuration Actions): New section,
+ documenting the common behavior of AC_CONFIG_FILES,
+ AC_CONFIG_HEADERS, macro AC_CONFIG_COMMANDS, and AC_CONFIG_LINKS.
+ (Configuration Files): Document $2 and $3 of AC_CONFIG_FILES.
+ (Configuration Headers): Document $2 and $3 of AC_CONFIG_HEADERS.
+ (Configuration Commands): Document $2 and $3 of AC_CONFIG_COMMANDS.
+ (Configuration Links): Document $2 and $3 of AC_CONFIG_FILES.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_sign, m4_cmp, m4_list_cmp): New macros.
+ * acgeneral.m4 (AC_UNGNITS): Rename as...
+ (_AC_VERSION_UNLETTER): this. All callers changed.
+ Implement the scheme proposed by Alexandre Oliva:
+ Nl -> (N+1).-1.(l#)
+ (_AC_VERSION_COMPARE): New macro.
+ (AC_PREREQ): Use it.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * tests/base.m4: Really added to the CVS repository.
+ * tests/tools.m4: Likewise.
+
+2000-02-09 Akim Demaille <akim@epita.fr>
+
+ * tests/base.m4: s/m4 -I ../m4 -I $at_top_srcdir/.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh (debug): Initialize to `false', not 0.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Fix a bug: `libm4::define' was incorrectly registered.
+
+ * libm4.m4 (libm4::define): Not only register, define too.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Use AU_DEFUN, remove the call
+ to AC_OBSOLETE.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PROVIDE): Use `m4_define', not `define'.
+ Because of the names pace machinery this change makes `autoconf'
+ about four times faster on complex `configure.in's.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Open the access to AH_ to users.
+
+ * autoheader.m4 (autoheader::AH_DEFUN): New macro.
+ * tests/tools.m4: New file, in charge of testing the scripts.
+ All the dependencies adapted.
+ * tests/actest.m4 (autoheader::AC_TATOOINE): New macro, used while
+ testing autoheader.
+ * tests/atspecific.m4: Create config.hin instead of config.h.in.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Because of commas and brackets, m4_split must mess with the
+ quotes.
+
+ * libm4.m4 (m4_split): Quote the elements of the list you produce.
+ * tests/base.m4: New file, testing libm4.
+ All callers adapted.
+ Test m4_wrap.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CONFIG_UNIQUE): Strip the `:foo.in' part
+ yourself, in order to give better error messages.
+ (AC_CONFIG_IF_MEMBER): Adapted to the above change.
+ Quote some regexp active characters ([+.*]).
+ Suggested by Alexandre Oliva.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INCLUDES_DEFAULT): Make it more robust to
+ the fact it is used non quoted.
+ Reported by Jim Meyering.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Simplify some excess in
+ changequote.
+ (AC_OUTPUT_SUBDIRS): Likewise.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * autoupdate.sh: Don't dump --help on --wrong-option.
+ * autoconf.sh: Reformatting, and use >&2 instead of 1>&2.
+ * autoreconf.sh: Likewise.
+ * autoheader.sh: Likewise.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_namespace_push, m4_namespace_pop): Use the private
+ macros to be robust to name space changes.
+ (m4_popdef, m4_pushdef): New private macros.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Let the doc catch up.
+
+ * doc/autoconf.texi (Common Behavior): New section, to document
+ the common behavior of the macros.
+ (Standard Symbols): New subsection. Describes the transformation
+ of the AC_DEFINEd names.
+ (Default Includes): New subsection. Obvious content.
+ All the ``callers'' updated.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_HEADERS): Don't use `break' to exit the
+ while loops which are breaking conftest.defines and
+ conftest.undefs into smaller snippets: just use the proper
+ condition for the while.
+ Suggested by Alexandre Oliva.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Configuration Commands): New section, for
+ AC_CONFIG_COMMANDS.
+ Move the definition of AC_OUTPUT_COMMANDS here.
+ (Configuration Links): New section, for AC_CONFIG_LINKS and
+ AC_LINK_FILES.
+ (Configuration Files): New section, for AC_CONFIG_FILES.
+ (Globally) Promote AC_CONFIG_HEADERS over AC_CONFIG_HEADER.
+ (Using System Type): Don't document AC_CONFIG_LINKS and
+ AC_LINK_FILES.
+ (Invoking config.status): Mention CONFIG_COMMANDS.
+ Document --file and --header.
+ Talk first of the newest interface of config.status.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Introduce a concept index, and update a bit the documentation.
+
+ * doc/autoconf.texi (Concept Index): New section.
+ Various entries added.
+ (Typedefs): Rename as...
+ (Types): this. Pay attention to not limiting the documentation to
+ the typedefs.
+ (Particular Types): Mention the equivalent generic test.
+ Promote the GNU coding style at various places.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Revamp the autoupdate/AC_OBSOLETE chain. All the details are
+ given in the prologue of acoldnames.m4.
+
+ * acgeneral.m4 (Prologue): Enter the `autoconf' name space.
+ (AU_DEFUN): New macro.
+
+ * autoupdate.m4: New file.
+ Disable the name spaces `autoconf', and `libm4'. Disable libm4.
+ * Makefile.am: Tuned to support the changes above.
+
+ * autoupdate.sh: Model after autoconf.sh.
+ Can run on several files at once (for instance m4/*.m4).
+ Don't touch files that are up to date.
+ Run m4 on autoupdate.m4f instead of playing with sed.
+
+
+ Use AU_DEFUN.
+
+ * acgeneral.m4 (AC_LINK_FILES, AC_ENABLE, AC_WITH): Use AU_DEFUN,
+ remove the call to AC_OBSOLETE.
+ * acspecific.m4 (AC_CYGWIN32): Likewise.
+ * acoldnames.m4: Replaced all the definitions via `define' or
+ `AC_DEFUN' to use `AU_DEFUN'.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Clean up some m4 files.
+
+ * acoldnames.m4: Use `#', not `dnl'.
+ Don't spread `dnl' everywhere, anyway, we are in a divert(-1).
+ * autoconf.m4: Likewise.
+ * autoheader.m4: Likewise.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Clean up autoconf.
+
+ * autoconf.sh: Minor reorganizations to clearly separate the
+ prologue, which is almost common to all the shell scripts of
+ Autoconf, and the body.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Improve support of name spaces in libm4. Put the m4 builtins
+ in the `libm4' name space.
+
+ * libm4 (m4_changequote, m4_define, m4_defn, m4_dnl, m4_indir,
+ m4_undefine): Private copies in the global name space. Used by
+ the name space mechanisms.
+ (m4_namespace_register): New macro.
+ (m4_namespace_define): Use it.
+ (builtin, changequote, defn, dnl, esyscmd, ifdef, ifelse, indir,
+ patsubst, popdef, pushdef, regexp, undefine, syscmd, sysval): Put
+ in the `libm4' name space.
+ (m4_disable, m4_enable): Use the private m4_indir, otherwise once
+ `libm4' closed, there is no `indir' available, and therefore no
+ means to reopen a name space.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Output really nothing if AC_INIT was not given. Unconditional
+ output can be problematic with autoupdate.
+
+ * acgeneral.m4 (AC_INIT_NOTICE): Output ac_includes_default.
+ (Default includes section): No longer dump ac_includes_default in
+ AC_DIVERSION_INIT.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_namespace_define): Fix a bug: `m4_namespace'
+ instead of `$1'.
+ Simplify some excess in quoting.
+ Use NAMESPACE::MACRONAME instead of `m4_defn(NAMESPACE,
+ MACRONAME)'.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Adapt autoheader to use libm4's name spaces.
+
+ * autoheader.m4 (AH_HOOK): Removed.
+ (AH_DEFUN): Define in the `autoheader' name space.
+ Use only AH_DEFUN to define macros in this file.
+ (epilogue): No longer run the `AH_HOOKS', enter the `autoheader'
+ name space.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Clean up a bit the user interface.
+
+ * autoconf.sh: Give your name while reporting errors.
+ Don't spit --help for errors on arguments.
+ * autoreconf.sh: Likewise.
+ * autoheader.sh: Likewise.
+ More temporary files that one can browse when debugging.
+ Don't ${var}, just $var.
+ Don't dump --help when the arguments are invalid.
+ (config_h): Use the empty value instead of `undefined' to check
+ that it is defined.
+ * acspecific.m4: Formatting changes.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Introduce name spaces in libm4.
+
+ * libm4.m4 (m4_namespace_push, m4_namespace_pop,
+ m4_namespace_define, define, m4_disable, m4_enable, m4_rename):
+ New macros.
+ (_m4_foreach, _m4_for, m4_wrap): Use m4_define for temporaries.
+ (m4_split): Don't mess with the quotes.
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS, AC_OUTPUT_HEADERS): Quote
+ `define'.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Introduction): m4 1.4 is now required.
+ (Invoking autoconf): A better help on --trace.
+ (Defining Symbols): Advocate a proper use of the quotes in m4
+ code, including if the quotes are sometimes useless. It is bad,
+ very bad not to quote properly, so quote all the examples
+ properly.
+ (Cache Files): Use a unary call to define, instead of an empty
+ $2.
+ (Using System Type): Watch out TeX wrapping.
+ (Pretty Help Strings): Don't give too long a snippet of --help.
+ Promote the coding style of Autoconf. Quote properly.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PRO): Use AC_PROVIDE instead of defining
+ yourself. This allows to see everything that is AC_PROVIDEd via
+ autoconf --trace.
+ (AC_SPECIALIZE): define'd, not AC_DEFUN'd.
+ (AC_PROVIDE): Use define with a single arg, instead of an empty $2.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (ac_includes_default): Don't use simple quotes, but
+ doubles quotes if you want to use \-continuation lines: this is
+ not recognized by MIPS' sh.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4. Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CONFIG_HEADERS, AC_CONFIG_LINKS,
+ AC_CONFIG_SUBDIRS): A space was missing to separate the arguments
+ of m4_append.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Arrange that config.status creates the file with the AC_SUBSTing
+ engine only if needed.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Create the sed code only if test
+ -n "$CONFIG_FILES".
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Promote AC_LANG_CASE.
+
+ * acgeneral.m4 (AC_TRY_COMPILER, AC_TRY_LINK_FUNC, AC_CHECK_LIB,
+ AC_TRY_COMPILE, AC_TRY_LINK, AC_TRY_RUN_NATIVE, AC_CHECK_FUNC):
+ Use AC_LANG_CASE instead of ifelse (AC_LANG, ...).
+ (AC_TRY_LINK_FUNC): Quote the body the the AC_DEFUN (whoa, how
+ could this survive so long?!?).
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Use the style we promote.
+
+ * doc/autoconf.texi (Header Templates): Promote #if over #ifdef;
+ and #undef over #define in templates.
+ * acspecific.m4 (AC_DECL_SYS_SIGLIST, AC_FUNC_MMAP,
+ AC_FUNC_SETPGRP, AC_FUNC_VFORK, AC_FUNC_SELECT_ARGTYPES): Use #if,
+ not #ifdef and #ifndef, indent CPP directives.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ Quote properly AC_SHELL_IFELSE and callers.
+
+ * acgeneral.m4 (AC_SHELL_IFELSE): Don't overquote $1.
+ (AC_VAR_IF_SET, AC_CHECK_MEMBER, AC_CHECK_LIB, AC_CHECK_HEADER,
+ AC_CHECK_DECL, AC_CHECK_FUNC, AC_CHECK_TYPE_INTERNAL): Quote the
+ first argument of AC_SHELL_IFELSE.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ It seems quite delicate to have AC_INCLUDES_DEFAULT insert the
+ default headers in the INIT section of configure: the reason is
+ that AC_INCLUDES_DEFAULT is called unquoted, and this results in
+ an un expected behavior. Thanks to Roman V. Shaposhnick for the
+ details.
+
+ The current implementation is not satisfying: the default headers
+ are defined in the INIT section even if they are not used.
+
+ * acgeneral.m4 (Prologue of AC_INCLUDES_DEFAULTS): Dump the
+ definition of ac_includes_default in the INIT section of
+ configure.
+ (AC_INCLUDES_DEFAULTS): Use it.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * TODO: Updated.
+ * THANKS: Updated.
+
+2000-02-08 Akim Demaille <akim@epita.fr>
+
+ * libm4.m4 (m4_for): New macro.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Stay in Autoconf's name space.
+
+ * acspecific.m4 (AC_F77_LIBRARY_LDFLAGS): Prefixed with 'ac_':
+ arg, save_arg, i, seen, previous_arg, ld_run_path.
+ Rename f77_link_output as ac_link_output.
+ * tests/actest.m4 (AC_ENV_SAVE): Don't note F77, FFLAGS, FLIBS,
+ G77, f77_case, f77_underscore.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Use `#' for comments instead of `dnl'.
+ Better highlighting of the sections in the sources.
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+ * autoheader.m4: Likewise.
+ * acoldnames.m4: Likewise.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Create libm4.m4.
+
+ * Makefile.am: Adjusted for libm4.m4.
+
+ * acgeneral.m4 (m4_errprint, m4_warn, m4_fatal, m4_prefix,
+ m4_eval, m4_shift, m4_format, m4_include_unique, m4_include,
+ m4_sinclude, m4_quote, m4_split, m4_join, m4_strip, m4_append,
+ m4_list_append, ifval, ifset, m4_default, m4_case, m4_match,
+ m4_foreach): Moved from here, to...
+ * libm4.m4: here.
+ * acgeneral.m4 (AC_WRAP): Moved from here, to...
+ * libm4.m4 (m4_wrap): here. All callers changed.
+
+ * acgeneral.m4: Don't include acversion.m4.
+ * autoconf.m4: Include libm4.m4 and acversion.m4.
+ * autoheader.m4: Likewise.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ AC_CHECK_SIZEOF: Fix a bug, use standard default headers, and
+ test.
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF): Don't over quote $1, some []
+ were left in the C code, and had the macro fail.
+ Use AC_INCLUDES_DEFAULT.
+ * doc/autoconf.texi: Mention default includes. Explain stdio.h
+ must always be given.
+
+ * tests/atspecific.m4 (TEST_MACRO): Updated the list of
+ exceptions.
+ (AT_CHECK_DEFINES): New macro, to check the content of config.h.
+ * tests/semantics.m4: All the tests are updated to use
+ AT_CHECK_DEFINES.
+ Test AC_CHECK_SIZEOF, AC_CHECK_HEADERS, and AC_CHECK_FUNCS.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Give explicit diagnostics when an input file (for config headers;
+ config files etc.) does not exist.
+ From Jim Meyering.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES, AC_OUTPUT_HEADERS): Check for the
+ existence of source files.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Torture test config.status, AC_SUBST and AC_DEFINE.
+
+ * tests/torture.m4: New file.
+ * tests/suite.m4: Include it.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (m4_for, m4_foreach): New macros.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TYPE_INTERNAL): Instead of defining an
+ unused pointer to the type $1, use
+ if (($1 *) 0) return 0;
+ to avoid warnings from the compiler.
+ From Paul Eggert.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INCLUDES_DEFAULT): Include sys/types.h
+ Reported by Jim Meyering.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4: New file, for AT macros specific to
+ Autoconf testing.
+ * tests/suite.m4 (AT_TEST_MACRO): Moved to
+ * tests/atspecific.m4 (AT_TEST_MACRO): here.
+ * tests/syntax.m4 (TEST_MACRO): Moved to
+ * tests/atspecific.m4 (TEST_MACRO): here. Don't test /^AC_INIT/,
+ nor /^AC_PROG_\(CC\|CXX\|F77\)_\(GNU\|WORKS\)$/: they are already
+ tried elsewhere.
+ * tests/Makefile.am: Adjusted.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (m4_case): Fixed a typo and a bug: one shift was
+ missing.
+ (m4_match): New macro.
+ * tests/atgeneral.m4 (AT_CASE): Fixed.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_F77_LIBRARY_LDFLAGS): Don't use FFLAGS_SAVE
+ but ac_save_FFLAGS.
+ (AC_F77_NAME_MANGLING): Don't use foo_bar but ac_foo_bar.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_C_INLINE): Proceed as for AC_C_CONST:
+ condition out the test case if __cpluscplus.
+ Don't document the autoheader template twice, one is enough.
+ * autoheader.m4 (AC_CONFIG_HEADER): don't hook on this guy, but
+ on...
+ (AC_CONFIG_HEADERS), since the former is defined on the latter.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_TYPE_INTERNAL): Use the scheme proposed
+ by Alexandre Oliva for testing the definition of TYPE:
+ TYPE *foo;
+ sizeof (TYPE);
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_C_CONST): Don't changequote, there is no need
+ for it. Just quote properly!
+ condition out the test case if __cpluscplus.
+ AC_REQUIRE AC_PROG_CC_STDC.
+ Fix slightly the display of the result (formerly the first run
+ says `none needed', and later, because of the cache `no').
+ (AC_C_INLINE, AC_C_VOLATILE): AC_REQUIRE AC_PROG_CC_STDC.
+ * doc/autoconf.texi (AC_C_CONST): Give a few hints on the
+ motivation for trusting the C++ compilers.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * tests/atgeneral.m4: Updated.
+ (AT_CASE): new macro.
+ (AT_CHECK): Use it. Don't changequote for patsubst, there is no
+ need.
+ * tests/syntax.m4 (TEST_MACRO): Don't run AC_ARG_VAR.
+ Reported by Jim Meyering.
+ Use AT_CASE.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Test that the macros respect the user variable name space.
+
+ * acgeneral.m4 (AC_CANONICAL_THING): define, not AC_DEFUN.
+ Don't AC_PROVIDE, there is no need.
+ When calling `config.sub`, also || exit 1, to catch failures from
+ config.sub.
+ * acspecific.m4 (AC_SYS_LONG_FILE_NAMES): Use ac_val, not val.
+ (AC_EXEEXT): Use ac_file, not file.
+ * tests/actest.m4: New file, holding extra Autoconf macros used
+ during the testing.
+ (AC_ENV_SAVE): New macro, save the sh variables in a file.
+ * tests/suite.m4 (AT_TEST_MACRO, Generation of configure.in):
+ include actest.m4, and call twice AC_ENV_SAVE to compare the
+ variables before and after the macro.
+ * tests/Makefile.am (macro.m4): Don't test macros that are
+ required: they will be tested somewhere else.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4(AC_CONFIG_PRE_COMMANDS, AC_CONFIG_POST_COMMANDS):
+ Rename as AC_CONFIG_COMMANDS_PRE, AC_CONFIG_COMMANDS_POST. All
+ dependencies changed.
+ From Jim Meyering.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+2000-02-07 Akim Demaille <akim@epita.fr>
+
+ Start a new series of tests which check the semantics.
+
+ * acgeneral.m4 (AC_CHECK_MEMBER): It is not smart to define
+ ac_Foo, and use AC_Foo. Got rid of AC_Member_Aggregate and
+ AC_Member_Member which were complicating more than simplifying.
+ (AC_CHECK_DECLS): Use m4 lists.
+ (AC_CHECK_TYPES): A comma was missing.
+ * autoheader.m4: (AC_CHECK_DECLS): Use m4 lists.
+ * doc/autoconf.texi (Generic Declarations): AC_CHECK_DELCS uses m4
+ lists.
+ * tests/semantics.m4: New file. Collection of semantical tests:
+ verify that the tests are positive and negative when appropriate.
+ Test AC_CHECK_MEMBERS, AC_CHECK_DECLS and AC_CHECK_TYPES.
+
+2000-02-04 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (macros.m4): Fix the sed snippet.
+
+2000-02-04 Akim Demaille <akim@epita.fr>
+
+ * testsuite/autoconf.g/init.exp: Removed, test performed by
+ tests/syntax.m4.
+ * testsuite/autoconf.g/sizeof.exp: Likewise.
+ * testsuite/autoconf.s/defines.exp: Likewise.
+ * configure.in (AC_OUTPUT): Adjusted.
+ * Makefile.am (SUBDIRS): Adjusted.
+
+2000-02-04 Akim Demaille <akim@epita.fr>
+
+ * tests/syntax.m4: Test AC_CHECK_SIZEOF.
+ * tests/Makefile.am (CLEANFILES, DISTCLEANFILES): Adjusted.
+ (macros.m4): Use tmp dest files ($@-t), not directly `$@'.
+
+2000-02-04 Akim Demaille <akim@epita.fr>
+
+ Hide AH_HOOK behind AH_DEFUN.
+
+ * autoheader.m4 (AH_DEFUN): New macro. Combination of define and
+ AH_HOOK.
+ (AC_TRY_RUN, AC_DEFINE, AC_DEFINE_UNQUOTED, AC_CHECK_LIB,
+ AC_CHECK_HEADERS, AC_CHECK_HEADERS_DIRENT, AC_CHECK_DECLS,
+ AC_CHECK_FUNCS, AC_CHECK_SIZEOF, AC_PROG_LEX, AC_CHECK_MEMBERS,
+ AC_CHECK_TYPE, AC_FUNC_ALLOCA, AC_CHECK_TYPES, AC_C_CHAR_UNSIGNED,
+ AC_AIX, AC_F77_WRAPPERS, AC_CONFIG_HEADER): All the former calls
+ to define and AH_HOOK in autoheader.m4 are replaced by AH_DEFUN.
+
+2000-02-04 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_RSH, AC_ARG_ARRAY, AC_HAVE_POUNDBANG): No use
+ to hide, you are DEFUNCT.
+
+1999-11-14 Akim Demaille <akim@epita.fr>
+
+ * autoconf.texi (Invoking ifnames): ifnames no longer supports
+ --macrodir.
+
+1999-11-13 Akim Demaille <akim@epita.fr>
+
+ Run the `syntax' test on acgeneral macros too.
+ Fix the bugs discovered.
+
+ * acgeneral.m4 (AC_CANONICAL_THING): Quote the
+ AC_REQUIRE([AC_CANONICAL_HOST]). Bug triggered by the use of
+ AC_CANONICAL_BUILD alone in configure.in. Also, quote the
+ arguments of macros (eg, ifelse([$1]...), not ifelse($1...)).
+ (m4_case): New macro.
+ (AC_LINKER_OPTION): Don't clash with user's name space
+ (s/i/ac_link_opt).
+ (AC_LIST_MEMBER_OF). You mean AC_FATAL, not AC_MSG_ERROR.
+ Quote properly the argument.
+ dnl out the empty lines that result from m4 pure code.
+ Don't pollute the user name space.
+ Use AC_SHELL_IFELSE.
+ (AC_F77_NAME_MANGLING): Don't use `test -o'. There are still
+ name space problems.
+ * tests/Makefile.am (macros.m4): Also fetch the macros from
+ acgeneral.m4.
+
+1999-11-13 Akim Demaille <akim@epita.fr>
+
+ Really install this patch.
+
+ * acgeneral.m4 (AC_MSG_ERROR, AC_MSG_ERROR_UNQUOTED): Allow an
+ optional $2: exit status.
+
+1999-11-13 Akim Demaille <akim@epita.fr>
+
+ Check that the AC_DEFINEs from acspecific.m4 do have a template.
+ Fix the discovered bugs.
+
+ * tests/atgeneral.m4 (AT_CHECK): Don't just exit 1 when you want
+ to propagate the failure of a test: exit with the same exit
+ status, at least to preserve 77 (=ignore).
+ * tests/syntax.m4 (TEST_MACRO): Run also autoheader. Don't run
+ this test on all the macros, some just cannot run without
+ arguments.
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_STATUS): In the if egrep/fi for
+ #define templates, add a `:' to prevent syntax errors in
+ config.status when there are no AC_DEFINE performed.
+ * autoheader.m4 (AH_TEMPLATE): Don't use _AC_SH_QUOTE here, use it
+ in...
+ (AH_VERBATIM): here. Now AH_C_UNSIGNED_CHAR is no longer failing
+ (formerly it would produce a non backslashed backquote, which
+ made sh choke).
+
+1999-11-13 Akim Demaille <akim@epita.fr>
+
+ Introduce a means to distinguish failures of `configure' due to
+ extern software (so that the test suite doesn't fail on them).
+
+ * acgeneral.m4 (AC_MSG_ERROR, AC_MSG_ERROR_UNQUOTED): Allow an
+ optional $2: exit status.
+ * doc/autoconf.texi: Document.
+ * acspecific.m4 (AC_PROG_CC_WORKS, PROG_CXX_WORKS,
+ AC_PROG_F77_WORKS): Exit 77 if the compiler does not work.
+
+1999-11-13 Akim Demaille <akim@epita.fr>
+
+ Clean up a bit the handling of the LANG stack. More is needed.
+
+ * acgeneral.m4 (AC_LANG_CASE): New macro.
+ (AC_LANG_RESTORE): Use m4_case.
+ (AC_LINKER_OPTION): Use AC_LANG_CASE.
+
+1999-11-11 Akim Demaille <akim@epita.fr>
+
+ * autoconf.texi (Generic Declarations): Fixed a typo which
+ prevented `make distcheck' from succeeding.
+ * texinfo.tex: Updated for the same reasons.
+
+1999-11-11 Akim Demaille <akim@epita.fr>
+
+ Introduce a new style of testing, independent from DejaGNU.
+
+
+ Introduce the logistics.
+
+ * configure.in: Initialize AT, and output tests/atconfig, and
+ tests/Makefile.
+ * m4/atconfig.m4: New file.
+ * m4/Makefile.am: Adjusted.
+ * aclocal.m4: Include atconfig.m4.
+ * Makefile.am: Adjusted.
+ * tests/Makefile.am: New file.
+ * tests/atgeneral.m4: Likewise.
+ * tests/atconfig.in: Likewise.
+
+
+ Write tests.
+
+ * tests/syntax.m4: New file, in charge of checking the validity of
+ the sh code produced by the macros defined in acspecific.m4.
+ acgeneral.m4 is not checked here, because these macros require
+ arguments.
+ * tests/suite.m4: New file. Run syntax.m4.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ A test suite will be introduced which tries to run all the
+ specific macros, but hasbeen'd macro make configure die with bad
+ exit status. So we wish to distinguish live macros from defunct
+ macros at the moment they are AC_DEFUN'd, not in their body. Hm,
+ defunct, defunct... Hey! That's a good name!
+
+ * acgeneral.m4 (AC_DEFUNCT): New macro, comparable to AC_DEFUN,
+ but for macros which are no longer defined. Replaces AC_HASBEEN.
+ (AC_HASBEEN): Defunct. Well, removed in fact.
+ (AC_HAVE_LIBRARY): Don't use AC_DEFUN and AC_HASBEEN, just
+ AC_DEFUNCT.
+ * acspecific.m4 (AC_UNISTD_H, AC_USG, AC_MEMORY_H, AC_DIR_HEADER,
+ AC_INT_16_BITS, AC_LONG_64_BITS): Likewise.
+ (AC_XENIX_DIR): It was defunct even before I declared it was: was
+ depending upon AC_DIR_HEADER which is defunct. So AC_DEFUNCT'ed
+ now.
+ (AC_DYNIX_SEQ, AC_IRIX_SUN, AC_SCO_INTL): While we're here, you
+ too are defunct now.
+ * autoconf.texi (Obsolete Macros): Replace the documentation of
+ AC_HASBEEN with that of AC_DEFUNCT.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh: Formatting changes.
+ Removed development junk.
+ * acspecific.m4: Formatting changes.
+ * autoconf.m4: Likewise.
+ * autoheader.m4: Likewise.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ Let Autoconf use autoconf's `--install'.
+
+ * m4/Makefile.am: New file.
+ * m4/init.am: New file, required by Automake.
+ * m4/missing.am: Likewise.
+ * m4/sanity.am: Likewise.
+ * aclocal.m4: Include them.
+ * configure.in (AC_OUTPUT): Added m4/Makefile.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ Make autoconf support --install.
+
+ * autoconf.sh (task install): New task. Extract the set of
+ auxiliary m4 files a configure.in depends upon. Install links
+ from library files to the local dir so that the packages depends
+ only on local extensions. Check that the user includes exactly
+ the files she needs.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ Require GNU m4 1.4 (well 1.3 in fact).
+
+ Because we are ready to handle the case where there are no frozen
+ files, we *have* to pass a -I, which is dangerous in conjunction
+ with the silent including of `aclocal.m4': you may include things
+ that were not expected. Since anyway handling pre 1.3 complicates
+ the task, just require an m4 which supports reloading of frozen
+ files.
+
+ * acspecific.m4 (AC_PROG_GNU_M4): Check for --reload.
+ * autoconf.sh: Likewise
+ * autoheader.sh: Likewise.
+ * configure.in: Explicitly state the m4 version you want.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ No need for foo="`bar`", foo=`bar` is fine.
+ Simplify ${foo} and ${1} into $foo and $1.
+
+ * acgeneral.m4 (ac_LF_and_DOT): Remove the double quotes.
+ * acspecific.m4 (AC_PROG_CC_C_O, AC_PROG_F77_C_O): Likewise.
+ * autoconf.sh: Likewise.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Remove all the code and messages related to
+ AC_MACRODIR, since ifnames is not related to macros in anyway.
+
+1999-11-10 Akim Demaille <akim@epita.fr>
+
+ New version of AC_INCLUDE, which does not glob, nor rely upon the
+ shell. Add AC_INCLUDES too. Help tracking multiple inclusions.
+
+ * acgeneral.m4 (m4_errprint, m4_warn, m4_fatal): New macros,
+ variations around errprint.
+ (m4_include_unique): New macro which registers what are the files
+ already included, and warns if some are included several times.
+ (m4_include, m4_sinclude): New macro, using m4_include_unique.
+ (AC_INCLUDE): Is now just a wrapper of m4_include.
+ (AC_INIT): Use m4_sinclude, not sinclude.
+ (_AC_ERRPRINT): Removed, m4_errprint is here!
+ (AC_WARNING, AC_FATAL): Wrappers of m4_warn and m4_fatal.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ * autoheader.sh: No longer rely on a system acconfig.h.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ Be kind to Automake: list the arguments of selected macros
+ (for instance AC_SUBST will list each variable which may be
+ substitued).
+
+ * autoconf.sh (--trace, --output): New options.
+ Implement tracing of macros.
+ trap also on 0, so that there is no need to rm here and there.
+ * autoconf.texi (Output): Document --trace and --output.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ Clean up the macros for testing members of aggregates.
+
+ * acgeneral.m4 (AC_CHECK_MEMBER): FATAL if $1 has no dot in it.
+ Use AC_INCLUDE_DEFAULTS.
+ (AC_C_STRUCT_MEMBER): Removed.
+ * acspecific.m4 (AC_STRUCT_TIMEZONE): Adapted to AC_CHECK_MEMBERS.
+ (AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV): Adapted to
+ AC_CHECK_MEMBERS and obsoleted.
+ (AC_STRUCT_ST_BLOCKS): Adapted to AC_CHECK_MEMBERS.
+ * autoconf.texi (AC_STRUCT_ST_BLKSIZE, HAVE_STRUCT_STAT_ST_RDEV):
+ Explain they are obsoleted, and how to migrate.
+ (AC_STRUCT_ST_BLOCKS, AC_STRUCT_TIMEZONE): Explain that the
+ AC_DEFINE changed (but the former #defines remain defined
+ currently).
+ (AC_C_STRUCT_MEMBER): Removed, replaced by the definitions of
+ AC_CHECK_MEMBER and AC_CHECK_MEMBERS.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ Install a uniform set of default includes.
+
+ * acgeneral.m4 (AC_INCLUDES_DEFAULT): New macro. Expands in its
+ argument if non empty, otherwise a default list of includes.
+ (AC_CHECK_DECL, AC_CHECK_TYPE_INTERNAL): Use AC_INCLUDES_DEFAULT.
+ * autoconf.texi: Adjusted.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ * autoheader.m4 (AH_FUNC_ALLOCA, AH_C_CHAR_UNSIGNED, AH_AIX):
+ Don't leave `[]dnl' in pseudo #-comment (actually CPP directives).
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ Fix a bit of the brokenness of AC_CHECK_TYPE.
+
+ * acgeneral.m4 (AC_CHECK_TYPE_INTERNAL): New macro, inspired from
+ the former AC_CHECK_TYPE. This macro is exactly the one that
+ ought to be named AC_CHECK_TYPE: it just checks, and executes user
+ actions. In the future, this macro ought to be renamed
+ AC_CHECK_TYPE.
+ There is a big difference with the former AC_CHECK_TYPE: instead
+ of grepping in the headers, it tries to compile a variable
+ declaration. This is both safer, slower, and better, since now we
+ can check for compiler types (e.g., unsigned long long).
+ (AC_CHECK_TYPES): The looping and AC_DEFINEing version of the
+ previous macro. Uses m4 loops.
+ (AC_CHECK_TYPE): Reimplemented on top of AC_CHECK_TYPE_INTERNAL.
+ * autoheader.m4 (AH_CHECK_TYPE, AH_CHECK_TYPES): New macros,
+ hooked.
+ * autoconf.texi (@ovar): New macro, for optional variables.
+ (Generic Typedefs): Document AC_CHECK_TYPES.
+ * autoheader.texi: (AH_CHECK_TYPE, AH_CHECK_TYPES): New macros.
+ (Epilogue): Hooks them.
+
+1999-11-01 Akim Demaille <akim@epita.fr>
+
+ Update autoupdate.
+
+ * acoldnames.m4: Sort the two sections.
+ * acoldnames.m4 (AM_CYGWIN32, AM_EXEEXT, AM_FUNC_FNMATCH,
+ AM_FUNC_MKTIME, AM_PROG_LIBTOOL, AM_MINGW32, AM_PROG_INSTALL,
+ fp_FUNC_FNMATCH): Added their new names.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Create man pages for the executables.
+
+ * Makefile.am (SUBDIRS): Add `man' and prepend `.' so that
+ executables be built before help2man is run.
+ * configure.in (AC_OUTPUT): Add man/Makefile.
+ AC_MSG_ERROR, not AC_ERROR.
+ Check for missing help2man.
+ * man/Makefile.am: New file.
+ * man/autoconf.x: Likewise.
+ * man/autoreconf.x: Likewise.
+ * man/autoheader.x: Likewise.
+ * man/autoscan.x: Likewise.
+ * man/autoupdate.x: Likewise.
+ * man/ifnames.x: Likewise.
+ * man/common.x: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Reformating of configure and
+ config.status --help.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_STATUS): Implement `config.status
+ --file' and `--header'.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * autoheader.m4 (AH_TEMPLATE): Quote $2 once, now _AC_SH_QUOTE
+ behaves properly.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+ * acspecific.m4: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CONFIG_LINKS): Allow a second argument,
+ commands to run, as AC_CONFIG_FILES and HEADERS.
+ (AC_LIST_LINKS_COMMANDS): New growing string. Initialize.
+ (AC_OUTPUT_LINKS): Use it.
+ (AC_OUTPUT_FILES, AC_OUTPUT_HEADERS, AC_OUTPUT_LINKS): Don't
+ pretend to have arguments: you don't depend upon it.
+ (AC_OUTPUT): Call the previous macros without arguments.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Don't use define/undefine, but
+ pushdef/podef. AC_UPCASE_NAME no longer exist.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formatting changes.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * TODO: Updated.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Clean up dead comments/code. Clean up the incompatibilities
+ between quoted and non quoted _AC_ECHO and the like.
+
+ * acgeneral.m4: Remove the comments on the no longer defined AC_TR.
+ (_AC_SH_QUOTE): Be robust to active symbols.
+ (_AC_ECHO): Quote properly the argument.
+ (AC_TRY_RUN): Don't quote [AC_TRY_RUN] in the warning.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Formatting changes.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_NOTICE, AC_INIT_PREPARE, AC_ARG_ENABLE,
+ AC_ARG_WITH, AC, TRY_COMPILER, AC_TRY_RUN, AC_TRY_CPP,
+ AC_EGREP_CPP): Use @PND@ instead of [#]: it looses the editors
+ that try to match the pairs of (), [] etc.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Fix the compatibility of the compiling macros with C++.
+
+ * acgeneral.m4 (AC_TRY_COMPILE, AC_TRY_LINK, AC_CHECK_SIZEOF): Use
+ `int main () {...}', instead of `main () {...}'.
+ * acspecific.m4 (AC_TYPE_GETGROUPS, AC_FUNC_CLOSEDIR_VOID,
+ AC_FUNC_FNMATCH, AC_FUNC_GETPGRP, AC_FUNC_SETPGRP, AC_FUNC_VFORK,
+ AC_FUNC_WAIT3, AC_FUNC_ALLOCA, AC_FUNC_UTIME_NULL,
+ AC_FUNC_SETVBUF_REVERSED, AC_FUNC_MEMCMP, AC_C_CHAR_UNSIGNED,
+ AC_C_LONG_DOUBLE, AC_C_BIGENDIAN, AC_SYS_RESTARTABLE_SYSCALLS):
+ Likewise.
+ * acspecific.m4 (AC_FUNC_FNMATCH): Call
+ AC_CHECK_HEADERS(fnmatch.h), and include fnmatch.h in the compiled
+ code.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_COMPILE_CHECK, AC_TRY_COMPILE,
+ AC_TRY_RUN_NATIVE, AC_OUTPUT_CONFIG_STATUS): Use @PND@ instead of
+ [#]: it looses the editors that try to match the pairs of (), []
+ etc.
+ Formatting changes.
+ * acspecific.m4: Formatting changes.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Allow standard beta version numbers.
+
+ * configure.in: Declare version 2.14a.
+ * acgeneral.m4 (AC_UNGNITS): New macro which transform version
+ numbers to pure digits (2.14a to 2.14.0.1, 2.15z to 2.15.0.26
+ etc.).
+ (AC_PREREQ): Normalize argument and AC_ACVERSION via AC_UNGNITS.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Fix the --version of all the executables.
+
+ * Makefile.am (editsh, editpl): Substitute also PACKAGE and
+ VERSION.
+ * autoconf.sh (version): New string.
+ (--version): Use it.
+ (--help) Output on stdout, not stderr.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoscan.pl: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Perform a better checking for missing templates in autoheader.
+
+ * autoheader.m4 (AH_HOOK): When hook AC_FOO on AH_FOO, define the
+ new AC_FOO to be the expansion of both AH_FOO *and* AC_FOO. See
+ its definition for the motivations.
+
+ * autoheader.m4 (AH_FUNC_ALLOCA): Remove the now useless
+ additional templates.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Work properly with Automake 1.4.
+
+ * Makefile.am (distpkgdataDATA): Replaces dist_pkgdata_DATA.
+ (nodistpkgdataDATA): Replaces nodist_pkgdata_DATA.
+ (EXTRA_DIST): Added $(distpkgdataDATA).
+ (pkgdata_DATA): Adapted.
+ (AUTOMAKE_OPTION): Require 1.4.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Fix a bug in templates of AC_CHECK_LIB.
+
+ * autoheader.m4 (AH_CHECK_LIB): Template HAVE_LIBFOO, not
+ HAVE_FOO.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Formating changes.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formating changes.
+ * acspecific.m4: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (pkgdata_DATA): Split into dist_pkgdata_DATA and
+ nodist_pkgdata_DATA.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_PROG_GNU_M4): New macro.
+ * configure.in: Use it.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Provide a means to specify commands to run before config.status is
+ created (and, for symmetry, after it is created).
+
+ This is typically needed by Automake so that AC_REPLACEd functions
+ go through deansification via
+
+ LIBOBJS=`echo $LIBOBJS | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+
+ and/or by Libtool which needs to define LTLIBOBJS and others:
+
+ LTLIBOBJS=`echo $LIBOBJS | sed 's/\.o/\.lo/g'`
+ AC_SUBST(LTLIBOBJS)
+
+ * acgeneral.m4 (AC_OUTPUT_PRE_COMMANDS): New growing string.
+ Initialize.
+ (AC_OUTPUT_POST_COMMANDS): Likewise.
+ (AC_CONFIG_PRE_COMMANDS): New macro, grows AC_OUTPUT_PRE_COMMANDS.
+ (AC_CONFIG_PRE_COMMANDS): Likewise.
+ (AC_OUTPUT): Run AC_OUTPUT_PRE_COMMANDS before
+ AC_OUTPUT_CONFIG_STATUS, and AC_OUTPUT_POST_COMMANDS after.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Remove spurious empty lines appearing in configures.
+
+ * acgeneral.m4 (AC_CONFIG_UNIQUE): Produce no output. Instead of
+ fighting with dnl, divert to KILL upon entry, and pop at exit.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Avoid using double quotes
+ inside "`...`": some shells parse this incorrectly.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (pkgdata_DATA, EXTRA_DIST): Removed acconfig.h.
+ * testsuite/autoconf.s/defines.exp: Commented out, there is no
+ longer an acconfig.h.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * autoconf.m4: Insert -*- Autoconf -*-.
+ * acgeneral.m4: Likewise.
+ * acspecific.m4: Likewise.
+ * acoldnames.m4: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Create AC_CONFIG_HEADERS which has the same interface as the other
+ AC_CONFIG_*S.
+
+ * acgeneral.m4 (AC_CONFIG_HEADERS): New macro, with the same
+ interface as AC_CONFIG_LINKS and AC_CONFIG_FILES.
+ (AC_LIST_HEADERS_COMMANDS): New growing string, initialize it.
+ (AC_CONFIG_HEADER): Rename as...
+ (AC_CONFIG_HEADERS): this, for consistency.
+ (AC_CONFIG_HEADER): New macro, which calls AC_OUTPUT_HEADERS.
+ (AC_OUTPUT_HEADERS): The square brackets for sed and grep were
+ not properly quoted: use @BKL@ and @BKR@.
+ (AC_OUTPUT_HEADERS): Run the AC_LIST_HEADERS_COMMANDS.
+
+ * acgeneral.m4 (AC_OUTPUT): Once config.status created, before
+ running it, trap to `exit 1' so that config.status is not removed
+ if configure is interrupted when config.status is complete.
+
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_STATUS): When recognizing
+ arguments, accept only foo, and no longer foo:foo.in etc.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Formating changes.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ config.status: Speed up the creation of config headers (about four
+ times faster on Linux).
+
+ The previous scheme had three sed commands for each AC_DEFINE: one
+ for #define templates, and two for #undef templates (with or
+ without trailing spaces). Divide this in three sed scripts
+ instead: a one liner that removes the trailing spaces, one for
+ #defines, and then the last for #undef.
+
+ The real speed up comes from the fact that the #define script
+ starts by checkin if the current input line has a #define, and if
+ not the script immediately goes to the next line, without running
+ the rest of the script as was the case before. Equally for the
+ #undef script.
+
+ Note that this way, users that don't use #define templates don't
+ pay too much the overhead, since the sed script `realizes' quickly
+ there are no #define lines. My test case runs in 0.32s with
+ #define templates, and 0.24s without. To improve this common
+ case, the whole code for #define templates is conditionalized by a
+ proper egrep call. The result runs is 0.24s, i.e., almost no cost
+ at all.
+
+ I made one dangerous change that I carefully evaluated before
+ commiting: the sed scripts are cut at 48 lines instead of 12 as
+ before. This produces here docs of about 4Kb. I checked many
+ `configure's and they all have big here documents, much bigger
+ than the 12 lines (for instance AC_FUNC_MMAP produces a 150 lines
+ long, 3800+ character here document). So I moved to the well
+ known HP UX sed limitations: no more than 100 commands, and there
+ are two commands per line now, plus a two command preamble. The
+ speed up is noticeable.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADERS): Remove the ac_e
+ family.
+ Changed ac_uD and ac_dD to `...;t t', instead of `...g'.
+ Instead of creating `conftest.vals' with both ac_e, ac_d,
+ and ac_u family, preprocess to strip the trailing spaces, and
+ create `conftest.defines' with the ac_d family, and then
+ `conftest.undefs' for the ac_e family.
+ Break up both `conftest.defines' and `conftest.undefs'. Insert a
+ top label and a global test for `#defines' and `#undef' before.
+ Call `conftest.defines' if there are #define in the input.
+ Call `conftest.undefs'.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Prefer `>file' over `> file' etc.
+ * acspecific.m4: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Rename the family AC_NEED_DECL as AC_CHECK: it is more uniform,
+ but keep defining NEED_FOO_DECL when `foo' is not declared. Files
+ not using Autoconf behave better when declarations lacks than when
+ they are wrong. So the unset position should off, hence #if NEEDS
+ instead of #if !HAVE (which is triggered when HAVE is not set).
+
+ * acgeneral.m4 (AC_NEED_DECL): Rename as...
+ (AC_CHECK_DECL): This. Make sure the arguments are the usual
+ IF-FOUND, IF-NOT-FOUND.
+ (AC_NEED_DECLS, AC_CHECK_DECLS): Likewise.
+ * autoconf.texi (Generic Declarations): Document the changes
+ aforementioned.
+ * autoheader.m4 (AH_NEED_DECLS): Rename as
+ (AH_CHECK_DECLS): This.
+ (AH_HOOKS): Hook AH_CHECK_DECLS on AC_CHECK_DECLS instead of
+ _NEED_.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Revamp the handling of the arguments of config.status: instead of
+ looping over config_files etc. to recognize the file names, use
+ the case which handles the options.
+ Suggested by Alexandre Oliva.
+
+ * acgeneral.m4 (ifset): Rename as...
+ (ifval): This. All callers changed.
+ (ifset): New macro, which tests if a macro is set to a non empty
+ value.
+
+ * acgeneral.m4: Initialize growing lists and strings to empty, to
+ ease the tests.
+ (AC_CONFIG_HEADER): Quote AC_LIST_HEADERS in the define, to handle
+ the case AC_LIST_HEADERS is initialized.
+
+ * acgeneral.m4: (AC_OUTPUT_CONFIG_STATUS): New macro, pulled out
+ from...
+ (AC_OUTPUT): Instead of using $1, $2 and $3, pass them to the
+ official macros (AC_CONFIG_FILES, AC_OUTPUT_COMMANDS).
+ Call AC_OUTPUT_CONFIG_STATUS.
+ (option handling): Use the case-esac to recognize arguments.
+ (AC_OUTPUT_COMMANDS): Fix the missing fi;done.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Add a means to specify commands to be run by config.status. At
+ the difference of AC_OUTPUT_COMMANDS, require that the set of
+ commands be named, so that both
+ CONFIG_COMMANDS=foo ./config.status
+ and
+ ./config.status foo
+ perform the Right Thing.
+
+ * acgeneral.m4 (AC_CONFIG_UNIQUE): Also check in
+ AC_LIST_COMMANDS.
+ (AC_CONFIG_FILES): Remove a dead pushdef.
+ (AC_CONFIG_COMMANDS): New macro.
+ (AC_LIST_COMMANDS): New config list.
+ (AC_LIST_COMMANDS_COMMANDS): New growing string.
+ (AC_OUTPUT_COMMANDS_COMMANDS): New macro, output config commands
+ in config.status.
+ (AC_OUTPUT): Take AC_LIST_COMMANDS into account.
+ (AC_OUTPUT): Call AC_OUTPUT_COMMANDS_COMMANDS.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ New macro: AC_CONFIG_FILES which is very much like AC_OUTPUT but
+ that one associates commands to run when a config file is created.
+ For instance for a shell script `foo', one uses
+ AC_CONFIG_FILES(foo, chmod +x foo).
+
+ In addition, check that the same name is never used twice in
+ config files, headers, subdirs and links.
+
+ * acgeneral.m4 (m4_append): Don't insert new line between
+ elements.
+ (m4_list_append): New macro.
+ (AC_CONFIG_IF_MEMBER): New macro which tests if a file is member
+ of a config list.
+ (AC_CONFIG_UNIQUE): New macro which ensures that a config file
+ name is not yet used.
+ (AC_CONFIG_HEADER, AC_CONFIG_LINKS, AC_CONFIG_SUBDIRS): Use
+ AC_CONFIG_UNIQUE.
+
+ * acgeneral.m4 (AC_CONFIG_FILES): New macro.
+ (AC_LIST_FILES): New list, which stores arguments of
+ AC_CONFIG_LISTS the same as AC_LIST_LINKS stores AC_CONFIG_LINKS
+ etc.
+ (AC_OUTPUT): No longer rely on $1 to designate the config files:
+ register them via AC_CONFIG_FILES. All uses of $1 replaced by
+ uses of AC_LIST_FILES.
+ (AC_OUTPUT_FILES): Run the commands associated to the
+ CONFIG_FILES.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (Looking for bugs): In addition to AC_, match AH_
+ and AM_.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Provide the m4 infrastructure for defining AH_ hooks.
+
+ * autoheader.m4 (AH_HOOK): New macro.
+ Hook all the AC_ macros to their AH_siblings in AH_HOOKS.
+ Run AH_HOOKS.
+
+ * acgeneral.m4 (m4_append): New macro.
+ (m4_list_append, m4_list_add): Removed.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Formating changes.
+ * acgeneral.m4: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_CHECK_MEMBER, AC_CHECK_MEMBERS): New macros.
+ * autoheader.m4 (AH_CHECK_MEMBERS): New macro.
+ (epilogue): Hook AH_CHECK_MEMBERS on AC_CHECK_MEMBERS.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ * autoheader.m4 (AC_FUNC_ALLOCA): Rename from this ...
+ (AH_FUNC_ALLOCA): ... to this. Includes all the needed templates.
+ (AC_C_CHAR_UNSIGNED): Rename from this ...
+ (AH_C_CHAR_UNSIGNED): ... to this.
+
+1999-10-31 Ben Elliston <bje@cygnus.com>
+
+ * Makefile.am (CLEANFILES): New explicit variable.
+ (editsh): acdatadir is no longer defined, so use pkgdatadir.
+ (editpl): Likewise. From Akim Demaille.
+ * Makefile.in: Regenerate.
+
+ * configure: Regenerate.
+ * aclocal.m4: Generate.
+ * Makefile.in: Regenerate with Automake.
+ * testsuite/Makefile.in: Likewise.
+
+1999-10-31 Akim Demaille <akim@epita.fr>
+
+ Use Automake. Based on files from Ben Elliston.
+
+ * acgeneral.m4: No longer define AC_ACVERSION, include
+ acversion.m4.
+ * acversion.m4.in: New AC_CONFIG_FILE.
+ * acspecific.m4: Few formating changes.
+ * autoconf.texi: No longer define EDITION, VERSION and UPDATED:
+ include version.texi.
+ AC_OUTPUT the Makefiles mentioned below and acversion.m4.
+ * configure.in: Use AM_INIT_AUTOMAKE.
+ Do not AC_ARG_PROGRAM: AM_INIT_AUTOMAKE does it.
+ * Makefile.am: New file.
+ * mdate-sh: Likewise.
+ * missing: Likewise.
+ * testsuite/Makefile.am: Likewise.
+
+1999-10-31 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_PROG_CC_STDC, AC_C_PROTOTYPES): Inherit from
+ Automake. From Franc,ois Pinard.
+ * autoconf.texi (Particular Programs): Document AC_PROG_CC_STDC.
+ (C Compiler Characteristics): Document AC_C_PROTOTYPES.
+
+ * testsuite/autoconf.s/defines.exp: Changed `fail' and `pass' in
+ `xfail' and `xpass'. The test suite checks that acconfig.h
+ templates the AC_DEFINEs. Since we no longer rely on acconfig.h,
+ the test is obsolete.
+ * acspecific.m4 (AC_PROG_BINSH, AC_PROG_SED): Don't quote the name
+ of the macro defined; the test suite does not recognize this
+ syntax. From Akim Demaille.
+
+1999-10-27 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (Generic Programs): @defmac for AC_PATH_TOOL may
+ not span multiple lines.
+
+1999-10-26 Ben Elliston <bje@cygnus.com>
+
+ * INSTALL: Regenerate.
+
+1999-10-16 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_PROG_CXX): gcc is not a C++ compiler.
+ * autoconf.texi (AC_PROG_CXX): Update documentation.
+
+1999-10-13 Ben Elliston <bje@cygnus.com>
+
+ * acconfig.h: Reintroduce missing definitions due to test suite
+ regressions.
+
+ * autoconf.texi (Configuration Headers): Document the potential
+ trouble caused by autoheader and boilerplate files. Fix for
+ PR autoconf/45.
+
+1999-10-07 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * Makefile.in (dist): Fixed for srcdir != objdir.
+
+1999-10-07 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_CHECK_HEADER_DIRENT): Reintroduce its
+ AC_DEFUN.
+
+1999-10-06 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4: Various formatting changes.
+ * acspecific.m4 (AC_PROG_CC_WORKS): Declare main returns an int.
+
+1999-10-05 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ Shell meta characters in an argument causes the configure script
+ to freak out and generate a config.status file that contains
+ syntax errors.
+ Bug triggered by ./configure --with-foobar=\''`"$'.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Quote single quotes that end
+ up between single quotes. Protect arguments of echo with double
+ quotes.
+ (AC_INIT_PREPARE): Likewise.
+ (AC_PATH_PROG): Protect argument of test.
+ (AC_OUTPUT): Quote meta characters in ac_configure_args.
+
+1999-10-05 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (AC_PATH_XTRA): Correctly document the behaviour
+ when X is not available.
+
+1999-10-05 Akim Demaille <akim@epita.fr>
+
+ The sed quoting script depends on the shape of the commands used
+ by AC_SUBST. The latter was changed, but not the former.
+ Bug triggered with FOO='%\c' AC_SUBST(FOO).
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Fix the sed quoting script.
+
+1999-10-05 Akim Demaille <akim@epita.fr>
+
+ When you rely on the `t' flag of sed for the immediately
+ preceding substitution, use a combination of `: foo; t foo'.
+ Bug triggered if you AC_DEFINE(FOO, "%").
+ Additionally, work around a bug in IRIX sed.
+ Suggested by Ken Pizzini.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Added a label and a test in the
+ sed code of `$ac_cs_root.hdr'.
+
+1999-10-05 Akim Demaille <akim@epita.fr>
+
+ Implement AC_PATH_TOOL.
+ Submited by Gary V. Vaughan.
+
+ * acgeneral.m4 (AC_PATH_TOOL): New macro.
+ * autoconf.texi (Generic Programs): Document.
+
+1999-10-05 Akim Demaille <akim@epita.fr>
+
+ Handle arbitrary version numbers.
+ Reported by H.J. Lu.
+
+ * acgeneral.m4 (m4_split): Support a second optional argument: a
+ regexp to specify where to split.
+ (m4_compare): New macro, compares arbitrary long m4 lists of
+ integers.
+ (AC_PREREQ_SPLIT, AC_PREREQ_CANON, AC_PREREQ_COMPARE): Removed,
+ replaced by more generic macros.
+ (AC_PREREQ): Reimplemented, using m4_compare and m4_split.
+
+1999-10-04 Akim Demaille <akim@epita.fr>
+
+ Beware of the expansions of $n in comments.
+
+ * acgeneral.m4 (AC_OUTPUT): Changed $1 into $[1] in dnls.
+
+1999-10-04 Akim Demaille <akim@epita.fr>
+
+ Revert partially the previous changes: AC_CHECK_HEADERS_DIRENT is
+ used by AC_HEADER_DIRENT.
+
+ * autoheader.m4: Restablish the hook for AC_CHECK_HEADERS_DIRENT.
+
+ * acspecific.m4 (AC_CHECK_HEADERS_DIRENT, AC_CHECK_HEADER_DIRENT):
+ Reinserted.
+
+1999-10-02 Akim Demaille <demaille@inf.enst.fr>
+
+ * acgeneral.m4: Instead of just undefining eval, format, include
+ and shift, rename them to m4_eval, etc.
+
+1999-10-02 Akim Demaille <akim@epita.fr>
+
+ AC_DIR_HEADERS is hasbeen'ed.
+
+ * acspecific.m4 (AC_DIR_HEADER): Raised from obsolete to hasbeen.
+
+ * acspecific.m4 (AC_CHECK_HEADERS_DIRENT, AC_CHECK_HEADER_DIRENT):
+ Removed, were used only by AC_DIR_HEADER and were not documented.
+
+ * autoheader.m4: Remove the hooks for AC_CHECK_HEADERS_DIRENT.
+
+ * autoconf.texi (Particular Headers): Removed the documentation of
+ AC_DIR_HEADER.
+
+ * autoconf.texi (Environment Variables): Remove the very last
+ traces of documentation of --env-VAR.
+
+1999-10-02 Akim Demaille <akim@epita.fr>
+
+ Remove hasbeen'ed macros from the documentation.
+
+ * autoconf.texi (Obsolete Macros): Document AC_HASBEEN.
+
+ * autoconf.texi (Libraries): Remove the documentation of
+ AC_HAVE_LIB.
+ (Particular Headers): likewise for AC_UNISTD_H, AC_MEMORY_H,
+ AC_USG.
+ (C Compiler Characteristics): Likewise for AC_INT_16_BITS,
+ AC_LONG_64_BITS.
+
+1999-10-01 Akim Demaille <akim@epita.fr>
+
+ Make the handling of the configuration links (AC_LINK_FILES)
+ exactly the same as that of configurations files (AC_OUTPUT_FILES)
+ and headers (AC_CONFIG_HEADERS). As a result, it is sane to run
+ ./config.status src/libmy_lib
+ or
+ CONFIG_LINKS=src/lib_mylib:lib/lib_mylib ./config.status
+
+ * acgeneral.m4 (AC_LINK_FILES): Use AC_FATAL to diagnose bad
+ number of argument.
+ Obsoleted (but implemented) in favor of AC_CONFIG_LINKS.
+
+ * acgeneral.m4 (AC_CONFIG_LINKS): New macro. Takes space
+ separated list of DEST:SOURCES arguments.
+
+ * acgeneral.m4: Rename each occurence of AC_LIST_HEADER as
+ AC_LIST_HEADERS for consistency.
+
+ * acgeneral.m4 (AC_OUTPUT, config.status prologue): Move the
+ definition of config_files and config_headers to the top.
+ Add the definition of config_links.
+ Change the help message to use the aforementioned variables.
+
+ * acgeneral.m4 (AC_OUTPUT_LINKS): Adapted to the new scheme of
+ AC_LIST_LINKS.
+
+ * autoconf.texi (Output, AC_OUTPUT): Mention AC_CONFIG_LINKS.
+ (Invoking config.status): Mention CONFIG_LINKS.
+
+ * autoconf.texi (Using System Type): Document AC_CONFIG_LINKS.
+ Explicit the obsoleteness of AC_LINK_FILES.
+
+1999-10-01 Akim Demaille <akim@epita.fr>
+
+ Moving most of the task of creating config.h.in from sh to m4.
+ Getting rid of acconfig.h by supply a major new family of macros:
+ AH_* which make it possible to insert arbitrary text into
+ config.h.in.
+
+ * autoheader.m4: Major rewrite: introduction of a set of macros
+ AH_ that produce code into config.h.in. There are two sets of
+ macros: generic macros, or specialized, documented below. The
+ basic idea is that an AC_FOO macro which needs an entry in
+ config.h.in should have a sibling AH_FOO which expands into that
+ entry. In a near future, these macros will be moved next to their
+ siblings.
+
+ * autoheader.m4 (AH_VERBATIM, AH_DEFINE, AH_DEFINE, AH_NEED_DECLS,
+ AH_CHECK_SIZEOF, AH_CHECK_FUNCS, AH_CHECK_HEADERS,
+ AH_CHECK_HEADERS, AH_CHECK_LIB, AH_PROG_LEX, AH_FUNC_ALLOCA,
+ AH_C_CHAR_UNSIGNED, AH_AIX, AH_F77_WRAPPERS): New macros.
+
+ * autoheader.m4 (End section): Bind AC_ macros to their
+ AH_siblings.
+
+ * autoheader.sh: Remove the sections in charge of SYMS, TYPES,
+ FUNCS, HEADERS, LIBS and DECLS: autoheader.m4 is now in charge of
+ these.
+
+ * autoheader.sh (options): Added -d, --debug, which does not
+ remove the temporary files.
+
+ * autoheader.sh: Instead of redirecting stdout to the output
+ stream, always output to a temporary file. This allows to change
+ slightly the consistency check: before autoheader would check that
+ each non documented AC_DEFINE is templated in an acconfig. Now it
+ just checks whether the template is in the output file.
+
+ * acconfig.h: Completely emptied, the remaining templates
+ (_ALL_SOURCE, __CHAR_UNSIGNED__, F77_FUNC, F77_FUNC_,
+ HAVE_STRINGIZE, and STACK_DIRECTION) are now either associated to
+ their AC_DEFINE, or to one of the new AH_ macros.
+
+ * acgeneral.m4: Reordering of the m4 macros which are not specific
+ to Autoconf.
+
+ * acgeneral.m4 (AC_HAVE_LIB): Promoted from obsolete to hasbeen.
+
+ * acgeneral.m4 (AC_TR_CPP): Fixed quoting problem, and missing ^
+ in patsubst.
+ (AC_TR_SH): Fixed quoting problem.
+
+1999-09-29 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_WRAP): Don't output an extra space after the
+ last word.
+
+1999-09-29 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Check for the kstat_open()
+ function in libkstat (on systems such as Solaris). This family of
+ functions is preferred since they don't require setgid permissions
+ to use them. Fix for PR autoconf/65.
+
+1999-09-29 Akim Demaille <akim@epita.fr>
+
+ * acconfig.h: Commit the change announced below.
+
+1999-09-29 Akim Demaille <akim@epita.fr>
+
+ * acspecific.m4 (AC_C_CONST): Changed from
+ const charset x;
+ to
+ const charset x = {0, 0};
+ From Jim Meyering.
+
+1999-09-28 Akim Demaille <akim@epita.fr>
+
+ Start to get rid of acconfig.h. It is an anachronism.
+
+ * acgeneral.m4 (_AC_SH_QUOTE): Both cases must be evaluated the
+ same number of times.
+
+ * acconfig.h (_ALLOCA, CLOSEDIR_VOID, const, CRAY_STACKSEG_END,
+ DGUX, DIRENT, GETGROUPS_T, GETLOADAVG_PRIVILEGED, GETPGRP_VOID,
+ gid_t, HAVE_ALLOCA, HAVE_ALLOCA_H, HAVE_DOPRNT, HAVE_FNMATCH,
+ HAVE_GETLOADAVG, HAVE_GETMNTENT, HAVE_LONG_DOUBLE,
+ HAVE_LONG_FILE_NAMES, HAVE_MMAP, HAVE_RESTARTABLE_SYSCALLS,
+ HAVE_ST_BLKSIZE, HAVE_ST_BLOCKS, HAVE_STRCOLL, HAVE_ST_RDEV,
+ HAVE_STRFTIME, HAVE_SYS_WAIT_H, HAVE_TM_ZONE, HAVE_TZNAME,
+ HAVE_UNISTD_H, HAVE_UTIME_NULL, HAVE_VFORK_H, HAVE_VPRINTF,
+ HAVE_WAIT3, inline, INT_16_BITS, LONG_64_BITS, MAJOR_IN_MKDEV,
+ MAJOR_IN_SYSMACROS, _MINIX, NDIR, NEED_MEMORY_H, NLIST_NAME_UNION,
+ NLIST_STRUCT, NO_MINUS_C_MINUS_O, F77_NO_MINUS_C_MINUS_O,
+ _POSIX_1_SOURCE, _POSIX_SOURCE, RETSIGTYPE, SELECT_TYPE_ARG1,
+ SELECT_TYPE_ARG234, SELECT_TYPE_ARG5, SETPGRP_VOID,
+ SETVBUF_REVERSED, STAT_MACROS_BROKEN, STDC_HEADERS, SVR4, SYSDIR,
+ SYSNDIR, SYS_SIGLIST_DECLARED, TIME_WITH_SYS_TIME, TM_IN_SYS_TIME,
+ uid_t, UMAX, UMAX4_3, USG, vfork, VOID_CLOSEDIR, WORDS_BIGENDIAN,
+ X_DISPLAY_MISSING, YYTEXT_POINTER): Removed their autoheader
+ template. They are now documented with their own AC_DEFINE.
+
+ * acgeneral.m4 (AC_HASBEEN): New macro. Same as AC_OBSOLETE, but
+ dies.
+
+ * acspecific.m4 (AC_UNISTD_H, AC_USG, AC_MEMORY_H, AC_INT_16_BITS,
+ AC_LONG_64_BITS): Promoted from obsolete to hasbeen.
+
+ * autoheader.m4 (AC_DEFINE_UNQUOTED): Define via AC_DEFINE, so
+ that we program things only once.
+ (AC_DEFINE): Use AC_WRAP and _AC_SH_QUOTE. It is now safe to have
+ backquotes and extra spaces in the third argument, without
+ yielding a bad result.
+
+ * autoheader.m4: Instead of a huge `eval', use a temporary file.
+ (option handling): Added --debug, to keep the temporary files.
+ Fixed a couple of missing quotes.
+
+1999-09-28 Akim Demaille <akim@epita.fr>
+
+ Make AC_FOREACH be robust to active symbols.
+
+ * acgeneral.m4 (m4_split, m4_join, m4_strip): New macros.
+ (AC_FOREACH_COMMA): Rename as...
+ (m4_foreach): this.
+ (_AC_CAR): Renamed as...
+ (_m4_car): this.
+ (_AC_FOREACH): Renamed as...
+ (_m4_foreach): this.
+ (_AC_COMMATIZE): Removed.
+ (AC_FOREACH): Rewritten using m4_split, m4_join, m4_strip, and
+ m4_foreach.
+ * acgeneral.m4: Spell checked.
+ * autoconf.texi: Likewise.
+
+1999-09-28 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_NEED_DECL): When $4 is given, don't provide
+ defaults headers.
+ Change the message from `have' to `need'.
+ Change the actions for `if-(not-)found' to `if-(not-)needed.
+ Remove trailing parentheses.
+
+ * acgeneral.m4 (AC_NEED_DECLS): Change the actions for
+ `if-(not-)found' to `if-(not-)needed.
+ Define NEED_DECL_foo, instead of NEED_foo_DECL.
+
+ * autoheader.sh (decls): Reflect this.
+
+ * autoconf.texi (Generic Declarations): Update.
+
+1999-09-27 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT): Divert AC_OUTPUT_FILE to
+ AC_DIVERSION_KILL if there are no CONFIG_FILES.
+ (AC_OUTPUT, ac_cs_usage): Output the list of files to instanciate
+ only if there are.
+
+1999-09-27 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_DECL): Renamed as...
+ (AC_NEED_DECL): This.
+ (AC_CHECK_DECLS): Renamed as...
+ (AC_NEED_DECLS): This.
+ (AC_NEED_DECL): Include <stdio.h>, <memory.h>, <string.h>,
+ <strings.h>, <stdlib.h>, <stddef.h>, and <unistd.h>.
+
+ * autoconf.texi (Generic Declarations): Updated.
+
+1999-09-27 Ben Elliston <bje@cygnus.com>
+
+ * autoscan.pl (scan_files): Emit an AC_PROG_CC invocation to
+ configure.scan if there are any C files present. Fix for PR
+ autoconf/19.
+
+1999-09-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_WRAP): Rewritten.
+ (AC_HELP_STRING): Wrapper of AC_WRAP.
+ * acgeneral.m4 (_AC_SH_QUOTE): Rewritten. Don't try to handle
+ both backslashed and non backslashed backquotes in a single
+ string: consider that either all the backquotes are quoted, or
+ none.
+
+1999-09-26 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_PATH_PROG): Use a single case statement for
+ Unix and DOS absolute paths.
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF): Fix a typo.
+ Allow a third default argument: extra headers.
+ * autoconf.texi (C Compiler Characteristics): Document.
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Convert to the AC_VAR_* family.
+ Allow a third optional argument: extra includes.
+ * autoconf.texi (Generic Typedefs): Documents.
+
+1999-09-26 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_OUTPUT_LINKS): Eliminate gratuitous spaces from
+ $ac_sources if this variable is otherwise empty. Fix for PR
+ autoconf/30.
+
+1999-09-25 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (AC_FUNC_SETVBUF): Do not mention which systems
+ might have their setvbuf() arguments reordered. It's difficult to
+ accurately determine and is not essential. Fix for PR autoconf/7.
+
+ * acgeneral.m4 (AC_LINK_FILES): Emit an error if an incorrect
+ number of arguments are collected. Fix for PR autoconf/10.
+
+1999-09-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT, handling of options): Make it possible
+ to specify the files to configure on the command line instead of
+ via envvars. Document it.
+
+1999-09-25 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4: Rename the occurences of the variable `confstat'
+ as `ac_cs_root'. The previous name was breaking the naming
+ scheme.
+
+1999-10-24 Akim Demaille <akim@epita.fr>
+
+ * TODO: Updated.
+ Added a section for 2.15 and 3.
+
+1999-09-24 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_HEADER_STDC): Define ISLOWER and ISUPPER
+ macros correctly on EBCDIC systems. Contributed by Kurt D.
+ Zeilenga. Fix for PR autoconf/6.
+
+1999-09-24 Jim Blandy <jimb@zwingli.cygnus.com>
+
+ * acspecific.m4 (AC_C_VOLATILE): New test.
+ * acconfig.h: Add new entry for `volatile'.
+ * autoconf.texi (C Compiler Characteristics): Document it.
+
+1999-09-24 Ben Elliston <bje@cygnus.com>
+
+ * autoreconf.sh: Do not run autoheader if AC_CONFIG_HEADER is
+ commented out in configure.in. Reported by Erez Zadok
+ as a fix for PR autoconf/21.
+
+ * install.texi: Replace `can not' with `cannot'.
+
+1999-09-23 Pavel Roskin <pavel_roskin@geocities.com>
+
+ Avoid that comments from aclocal.m4 show up in configure when
+ using AC_REVISION.
+
+ * acgeneral.m4: New diversion levels AC_DIVERSION_KILL and
+ AC_DIVERSION_BINSH introduced. Use AC_DIVERSION_KILL as the
+ initial value for AC_DIVERSION_CURRENT.
+ (AC_INIT_BINSH): Set AC_DIVERSION_BINSH explicitly
+ (AC_REVISION): Likewise.
+ (AC_INIT): Set AC_DIVERSION_NOTICE when calling AC_INIT_NOTICE.
+
+1999-09-23 Akim Demaille <akim@epita.fr>
+
+ * NEWS: Document AC_ARG_VAR.
+
+ * acspecific.m4 (AC_C_LONG_DOUBLE): Avoid a needed execution by
+ using a pure compilation test. Excellent for cross compilation.
+ From Kaveh R. Ghazi.
+
+1999-09-22 Akim Demaille <akim@epita.fr>
+
+ * install.texi: Give more details on envvar handling.
+ * acgeneral.m4 (AC_HELP_STRING): Add a third argument to tune the
+ width of the first column.
+ (AC_INIT_NOTICE): Initialize ac_arg_enable_help, ac_arg_with_help,
+ and ac_arg_var_help.
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Remove the handling of
+ --env-var=. After debate, the solution chosen to specify envvars
+ to configure is a` la make: ./configure VAR=VAL.
+ (AC_INIT_PARSE_ARGS, --help): Output ac_arg_enable_help,
+ ac_arg_with_help, and ac_arg_var_help.
+ * acgeneral.m4 (AC_ARG_VAR): New macro, to register and document
+ influent envvars.
+ * acspecific.m4 (AC_PROG_CC): Document CFLAGS.
+ This is mainly to test AC_ARG_VAR. Var to document are to be
+ defined.
+
+1999-09-22 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (m4_default): New macro.
+ (AC_CHECK_LIB): When ACTION-IF-FOUND is specified, don't perform
+ the default action.
+ Reported by Pavel.
+
+1999-09-22 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Clear the CCOPTS environment variable before
+ invoking the C compiler on HP-UX. This is necessary to guarantee
+ that the test program is compiled correctly. Reported by Dietmar
+ P. Schindler.
+
+1999-09-22 Linas Vepstas <linas@linas.org>
+
+ * config.guess: Add OS/390 match pattern.
+ * config.sub: Add mvs, openedition targets.
+
+1999-09-21 Nick Clifton <nickc@cygnus.com>
+
+ * config.sub: Add fr30 target.
+
+1999-09-21 Ben Elliston <bje@cygnus.com>
+
+ * configure.in: Check if an appropriate version of GNU m4 is
+ installed at configure-time rather than at runtime. From Pavel
+ Roskin. Fix for PR autoconf/2.
+ * configure: Regenerate.
+
+1999-09-21 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS, --help message): Use quoted
+ heredocs to avoid problems with quotes.
+
+1999-09-21 Akim Demaille <akim@epita.fr>
+
+ * NEWS: Updated.
+ * THANKS: Likewise.
+
+ * acgeneral.m4 (AC_CHECK_HEADER): Use AC_VAR_*.
+ (AC_CHECK_HEADERS): Adapted.
+
+ * acgeneral.m4 (AC_TR): Remove, it is useless.
+ (AC_TR_CPP): Updated version of formerly AC_TR_DEFINE, based on
+ the model of AC_TR_SH.
+ All callers changed.
+
+ * autoconf.sh (Checking for Bugs): Remove the indirection that
+ made the `sort -u' useless.
+
+1999-09-21 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh (Last sed cmd): Change also @PND@ to `#', since this
+ is also a symbol very hard to quote in m4.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use AC_VAR_*.
+
+ * acgeneral.m4: Use `m4_BUILTIN' instead of indirection via
+ `builtin'.
+
+1999-09-21 Akim Demaille <akim@epita.fr>
+
+ * autoconf.texi (Particular Structures): Move documentation of
+ AC_HEADER_STAT and AC_HEADER_TIME from here...
+ (Particular Headers): to here.
+ (Declarations): New section.
+ (Particular Headers): Move doc of AC_DECL_SYS_SIGLIST from here...
+ (Particular Declarations): to here.
+
+1999-09-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * acgeneral.m4 (AC_CHECK_FUNC_DECL, AC_CHECK_FUNC_DECLS): New
+ macros.
+
+ * autoconf.texi (AC_CHECK_FUNC_DECL, AC_CHECK_FUNC_DECLS):
+ Document.
+
+ * autoheader.m4: Add support for AC_CHECK_FUNC_DECLS.
+
+ * autoheader.sh: Likewise.
+
+1999-09-21 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_SHELL_IFELSE): New macro.
+ (AC_VAR_IF_SET): Use it.
+ (AC_CHECK_FUNC): Likewise.
+
+ * Makefile.in (${srcdir}/configure): Use autoconf.sh to build
+ Autoconf's configure. Before the building was performed running
+ m4 at hand, but much was not done (e.g., __oline__,
+ @BKL@... expansion)
+
+1999-09-20 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_OUTPUT): Don't remove the CONFIG_HEADERS
+ unconditionaly: it breaks the `config.h has not changed' trick.
+
+1999-09-20 Ben Elliston <bje@cygnus.com>
+
+ * autoheader.sh: Bourne shell compatibility fix. From Pavel Roskin.
+
+1999-09-20 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * autoheader.sh: Fix the tr invocation.
+
+1999-09-17 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect QNX version 4.
+ * config.sub: Handle `qnx' and `i386-qnx' aliases.
+
+1999-09-17 Erez Zadok <ezk@cs.columbia.edu>
+
+ * config.guess: Eliminate the trailing dot if ${UNAME_RELEASE} is
+ 1.4-<SOMETHING>. Fix for PR autoconf/22.
+
+1999-09-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Improve configure's --help.
+
+ * acgeneral.m4 (AC_OUTPUT): Change the root of filenames of
+ config.status from $conftest to $confstat.
+ The previous patch to make config.status reentrant was wrong,
+ because it changed some `conftest' that are used by configure into
+ `$conftest', while it was for config.status only. To avoid
+ another confusion like this, all the filenames of config.status
+ should be `$confstat*', and those of configure should be
+ `conftest*'.
+ (AC_OUTPUT): Rename the uses of `ac_file' for the sed fragments as
+ `ac_sed_frag'.
+
+ * acgeneral.m4 (AC_OUTPUT): This macro used to open the here
+ documents that configure uses to generate config.status, included
+ that of the submacros. Now, it no longer handles the here
+ documents for its subroutines (it was far to hard to track).
+ (AC_OUTPUT_FILES): Open and close your here documents to
+ $CONFIG_STATUS.
+ (AC_OUTPUT_HEADER): Likewise.
+ (AC_OUTPUT_LINKS): Likewise.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Move $ac_vpsub and $extrasub
+ from the AC_SUBST substitutions (i.e., that of @SHELL@ etc.) to
+ the specific section (that of @srcdir@ etc.).
+ Now the ``general substitution'' section is absolutely uniform.
+
+ * acgeneral.m4 (AC_SUBST): Change sed call from `s%@from@%to%g'
+ into `s%@from@%to%;t t'.
+ (AC_SUBST_FILE): Likewise.
+ (AC_OUTPUT_FILES): Optimize the sed scripts by branching if there
+ are no `@' on the line. Impressive speed up.
+
+ * Makefile.in (DISTFILES): Add THANKS.
+
+ * THANKS: New file.
+
+1999-09-15 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_FILE): Use ifset.
+ (AC_CHECK_FUNC): Updated to use AC_VAR_*, and AC_CACHE_CHECK.
+ (AC_CHECK_SIZEOF): Likewise.
+ (AC_CACHE_CHECK): Use AC_MSG_RESULT_UNQUOTED.
+ (AC_MSG_RESULT_UNQUOTED): New macro.
+
+1999-09-15 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ Fix for PR autoconf/28.
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Don't assume LF is \012, use
+ `echo` followed by a non-blank, within quotes.
+ * autoheader.sh (syms): Likewise.
+ * configure: Rebuilt.
+
+1999-09-14 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Don't assume LF is \012,
+ use `echo` followed by a non-blank, within quotes.
+ * autoheader.sh (syms): Likewise.
+ * configure: Rebuilt.
+ Reported by Christian Krone.
+
+ * acgeneral.m4 (AC_INCLUDE): New macro.
+ * autoconf.texi: Document it.
+
+ * acgeneral.m4 (AC_OUTPUT_SUBDIRS): Save INSTALL in
+ ac_given_INSTALL, so that we can adjust relative pathnames for
+ sub-configures.
+
+ * acgeneral.m4 (Configuration): Accept --env-VAR=VALUE and
+ VAR=value.
+ * autoconf.texi, install.texi: Document it.
+ * configure: Rebuilt.
+
+1999-09-14 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_HELP_STRING): Rewrite in m4. Have m4 work, and
+ give a break to sh.
+ (_AC_FOREACH): Be careful not to evaluate the arguments. A loop
+ over *quoted* macro names should loop over the macro names, not
+ upon their expansion.
+ (_AC_COMMATIZE): Also swallow end of lines.
+
+ * autoconf.texi (Pretty Help Strings): Updated to reflect the
+ changes.
+
+1999-09-13 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (ifset): New helpy tiny macro.
+ (AC_OUTPUT): Improved --help of config.status.
+ (AC_OUTPUT): Remove inconditionaly all the files to be updated.
+ (AC_OUTPUT): Use pid to define the temporary file names in order
+ to allow parallel builds.
+
+ * autoconf.sh: Substitute also /@BKL@/[/ /@BKR@/]/ /@DLR@/$/ so
+ that these characters are more easily accessible from m4 without
+ turning changequote juggling into a nightmare.
+
+ * acgeneral.m4 (AC_WRAP): New macro, for word wrapping.
+
+ * autoconf.texi: Update the direntry for more modern Texinfos.
+ Add pointer to configure and config.status.
+ Remove the dots from the menus: horizontal space is precious.
+ (Invoking config.status): More traditional presentation of the options.
+
+1999-09-07 Ben Elliston <bje@cygnus.com>
+
+ * autoreconf.sh: Recognise -v as a synonym for --verbose.
+
+1999-09-07 Gary V. Vaughan <gvaughan@oranda.demon.co.uk>
+
+ * Makefile.in (INSTALL, standards.info, autoconf.info): MiKTeX
+ for Windows treats all options after the first filename as
+ additional filenames, so real options must appear before the first
+ filename.
+
+1999-09-07 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * autoconf.texi (LDFLAGS, LIBS): Document that -L linker flags
+ should be kept in LDFLAGS and not LIBS.
+
+1999-09-07 Jim Meyering <meyering@ascend.com>
+
+ * acgeneral.m4 (AC_SEARCH_LIBS): Use $ac_lib as the index, not $i.
+
+1999-09-06 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_FUNC_ALLOCA): Rename cache variable to avoid
+ name clashes with AC_CHECK_HEADER(alloca.h).
+
+1999-09-05 Steve Chamberlain <sac@pobox.com>
+
+ * config.sub: Add support for configuring for picoJava (pj).
+
+1999-09-05 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (CONFIG_AUX_DIRS): Try running `shtool install'.
+ Contributed by Ralf S. Engelschall.
+
+1999-09-04 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Use POSIX compliant shell code on DG/UX.
+ Suggested by Stephen Gildea.
+
+1999-09-04 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Output comment to not only
+ `Makefile', but also `makefile'.
+
+1999-09-04 Jim Blandy <jimb@zwingli.cygnus.com>
+
+ * Makefile.in (install): Don't freak if the M4FROZEN files were
+ never generated. m4 1.1 is supported, but doesn't freeze files.
+
+1999-09-04 Scott Bambrough <scottb@netwinder.org>
+
+ * config.guess: Autodetect ArmLinux using 2.9.1.xx linker
+ emulation names and using the emulation names from the linker from
+ the binutils CVS tree.
+
+ * config.sub: Change manufacturer name for the NetWinder alias
+ from Corel to Rebel.
+
+1999-09-04 Jeremy Elson <jelson@circlemud.org>
+
+ * autoheader.m4 (AC_CHECK_HEADER): Define.
+
+1999-09-02 Tom Tromey <tromey@cygnus.com>
+
+ * autoheader.sh: Allow multiple spaces between #undef and symbol
+ name.
+
+1999-09-01 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_ACVERSION): Bump to 2.14.1 to differenciate the
+ experimental branch from the main trunk.
+
+ * acgeneral.m4 (AC_FOREACH_COMMA): New macro, to perform m4 loops
+ on m4 lists (i.e., list='(item_1, item_2, ..., item_n)').
+ (AC_FOREACH): New macro, to perform m4 loops on shell lists (i.e.,
+ list='item_1 item_2 ... item_n').
+
+ * acgeneral.m4 (AC_DEFUN): Now accept two other optionnal
+ parameters: the name of the macro which is specialized here, and
+ the name of the first argument. For instance `AC_CHECK_FNMATCH'
+ should be declared as specializing `AC_CHECK_FUNC' for `fnmatch'
+ as first argument.
+
+ * acgeneral.m4 (AC_CHECK_FILES): Use AC_FOREACH for looping,
+ instead of the shell's loop.
+
+ * acgeneral.m4 (AC_TR): In addition to transliteration, provide a
+ means to specify the valid destination alphabet and a default
+ character for aliens characters. This is in order to remove
+ characters such as `+:-' etc. that may appear in file names, but
+ are not valid for shell variables or #defines.
+ (AC_TR_DEFINE): New macro, maps anything to a valid uppercase
+ #define rhs.
+ (AC_TR_UPCASE_NAME): Replaced by AC_TR_DEFINE. All callers
+ changed.
+ (AC_TR_UPCASE_FILE): Likewise.
+
+ * acgeneral.m4 (AC_TR_SH): Don't use the generic AC_TR: there is a
+ difficult problem of quoting between m4 and sh. Use the variable
+ $ac_tr_sh to work around this difficulty.
+ (AC_VAR_TEST_SET): New macro, which tests if a variable is set.
+ (AC_VAR_IF_SET): New `ifelse' macro.
+ (AC_CACHE_VAL): Use AC_VAR_IF_SET.
+ (AC_INIT_NOTICE): Define $ac_tr_sh.
+
+ * acgeneral.m4 (AC_CHECK_FILE): Converted to use AC_TR and AC_VAR
+ families.
+
+ * acgeneral.m4: Fixed the regular expressions: `$' shall not be
+ portably in a sed \(\) group.
+
+1999-08-28 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Once and for all, emit the correct string for
+ Unixware 7! Contributed by Mike Hopkirk.
+
+ * acspecific.m4 (AC_C_INLINE): Qualify the return type of the
+ dummy inlined function to satisfy newer C++ compilers. Fix for
+ PR autoconf/49.
+
+1999-08-26 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (Changed Results): Correct an error in one of the
+ examples. Fix for PR autoconf/38.
+
+1999-08-25 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (Cache Variable Names): Be more explicit about the
+ requirements for cache variable names. Fix for PR autoconf/53.
+
+1999-08-25 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * autoreconf.sh: Run aclocal with the -I option only if
+ aclocal_dir != `.'. Fix for PR autoconf/44.
+
+1999-08-22 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acspecific.m4 (AC_PROG_CC): Remove uname test for 32-bit
+ Windows/Cygwin, and just test for `cl' as a last resort.
+
+ * autoconf.texi (Particular Programs): Document new optional
+ argument to AC_PROG_CC, AC_PROG_CXX and AC_PROG_F77. Document
+ additions to the Fortran 77 compiler search list.
+
+ * acspecific.m4 (AC_PROG_F77): Add more Fortran 77 compilers to
+ the search list. Contributed by Steven G. Johnson.
+
+ (AC_PROG_CC): Likewise.
+ (AC_PROG_CXX): Likewise.
+ * acspecific.m4 (AC_PROG_F77): Add an optional first argument
+ which gives the user an opportunity to specify an alternative
+ search list for the compiler.
+
+1999-08-18 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Remove "/MP" from the release string on
+ multiprocessor x86 machines running SVR4.0. Suggested by Tom
+ Purcell.
+
+1999-08-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Add optional third argument
+ INCLUDES, which specifies the headers in which to search for the
+ type in question. Also, pass a "description" argument to
+ AC_DEFINE_UNQUOTED.
+ * acconfig.h (mode_t, off_t, pid_t, size_t): Remove definitions.
+ * autoconf.texi (AC_CHECK_TYPE): Document optional third argument.
+
+1999-08-05 Jeffrey A Law <law@cygnus.com>
+
+ * config.sub (-wrs case): Use os=-vxworks, not os=vxworks.
+
+1999-08-05 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Update patch submission address.
+
+1999-08-05 Ben Elliston <bje@cygnus.com>
+
+ * config.sub: Accept version number appended to OS name for MiNT.
+ Contributed by Guido Flohr.
+
+1999-08-04 Ben Elliston <bje@cygnus.com>
+
+ * Makefile.in (INSTALL_SCRIPT): Substitute.
+ (install): Install scripts with $(INSTALL_SCRIPT).
+
+1999-07-20 Tom Tromey <tromey@cygnus.com>
+
+ * autoheader.sh: Fixed regexp when searching for missing symbol.
+ From Pavel Roskin.
+
+1999-07-16 Tom Tromey <tromey@cygnus.com>
+
+ * autoheader.sh: Be more stringent when looking to see if symbol
+ is in a template file.
+
+1999-07-15 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acspecific.m4 (AC_F77_LIBRARY_LDFLAGS): New implementation, to
+ make maintenance easier.
+ Grep the initial output so that we don't start parsing "-l" and
+ "-L" too early. From Christopher Lee.
+
+ * acgeneral.m4 (AC_LIST_MEMBER_OF): New "private implementation
+ macro" use by AC_F77_LIBRARY_LDFLAGS.
+ (AC_LINKER_OPTION): Likewise.
+
+1999-07-11 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Cray T3E has an Alpha CPU.
+
+1999-07-04 Mark Elbrecht <snowball3@bigfoot.com>
+
+ * acspecific.m4 (AC_PROG_CXX): Look for gpp after g++. gpp is the
+ DJGPP C++ compiler, since `g++' is not a valid DOS filename.
+
+1999-06-12 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect Linux on ia64.
+ * config.sub: Handle ia64.
+
+1999-06-12 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Handle `elf32ppclinux' from ld. Contributed by
+ Cort Dougan.
+
+1999-06-09 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * autoconf.texi (Pretty Help Strings): Synchronize documentation
+ with implementation.
+
+1999-06-04 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Fix sed regexp for handling
+ CPP macros with args.
+
+1999-06-04 Nick Clifton <nickc@cygnus.com>
+
+ * config.sub: Add mcore target.
+
+1999-06-03 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_ACVERSION): Correct version number.
+ * autoconf.texi (EDITION): Likewise.
+ (VERSION): Likewise.
+
+1999-06-02 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * autoconf.texi (Pretty Help Strings): Document and regenerate the
+ indices.
+ * acgeneral.m4 (AC_HELP_STRING): New macro.
+
+ * NEWS: Begin documenting "Major changes" for release 2.14.
+
+ * acconfig.h (F77_FUNC): Add.
+ (F77_FUNC_): Likewise.
+
+1999-06-01 Akim Demaille <demaille@inf.enst.fr>
+
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Use macros of the AC_TR_
+ family.
+ (AC_HAVE_LIBRARY): Likewise.
+ (AC_CHECK_FUNCS): Likewise.
+ (AC_CHECK_FILES): Likewise.
+ (AC_CHECK_SIZEOF): Likewise.
+
+ * acgeneral.m4 (AC_TR): New macro which performs transliteration
+ by m4 when possible, or by `tr' at configure time.
+ (AC_TR_UPCASE_NAME): New macro, transliteration 'a-z' to 'A-Z'.
+ (AC_TR_UPCASE_FILE): New macro, transliteration 'a-z./-' to
+ 'A-Z___'.
+ (AC_TR_SH): New macro, transliteration to valid sh var name.
+
+ * acgeneral.m4 (_AC_SH_QUOTE): New macro which protects non
+ protected backquotes against shell expansion.
+ (AC_MSG_CHECKING): Use it.
+ (AC_CHECKING): Use it.
+ (AC_MSG_RESULT): Use it.
+ (AC_VERBOSE): Use it.
+ (AC_MSG_WARN): Use it.
+ (AC_MSG_ERROR): Use it.
+
+ * acgeneral.m4 (_AC_MESSAGE): New macro to report message at m4
+ time.
+ (AC_WARNING): New macro to report warnings at m4 runtime.
+ (AC_FATAL): New macro, to report fatal error at m4 runtime.
+
+ * acspecific.m4 (AC_RSH): Use AC_FATAL.
+ (AC_ARG_ARRAY): Idem.
+ (AC_HAVE_BOUNDBANG): Idem.
+
+ * acgeneral.m4 (AC_VAR_IF_INDIR): New macro.
+ (AC_VAR_SET): Likewise.
+ (AC_VAR_GET): Likewise.
+
+1999-05-30 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * autoheader.m4 (AC_DEFINE): Ignore CPP macro arguments.
+ (AC_DEFINE_UNQUOTED): Likewise.
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Change sed regexps to
+ recognize CPP macros that take arguments. Reported, and based on
+ a patch, by Steven G. Johnson.
+ (AC_OUTPUT_HEADER): Likewise.
+
+ * autoconf.texi (Fortran 77 Compiler Characteristics): Document
+ new AC_F77_NAME_MANGLING macro.
+
+1999-05-30 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * autoconf.texi (Fortran 77 Compiler Characteristics): Document
+ new AC_F77_FUNC_WRAPPER macro.
+
+ * acspecific.m4 (AC_F77_WRAPPERS): New macro to define the
+ F77_FUNC and F77_FUNC_ CPP macros to properly mangle the names of
+ C identifiers so that they match the name mangling scheme used by
+ the Fortran 77 compiler.
+ (AC_F77_NAME_MANGLING): New macro to test for the name mangling
+ scheme used by the Fortran 77 compiler.
+
+1999-05-27 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Translate the ":" character to a
+ "_", which allows checking for member functions in C++ libraries.
+
+1999-05-25 H.J. Lu <hjl@gnu.org>
+
+ * config.guess (dummy): Changed to $dummy.
+
+1999-05-22 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Handle NEC UX/4800. Contributed by Jiro Takabatake.
+
+1999-05-17 Ben Elliston <bje@cygnus.com>
+
+ Merge with the EGCS source tree.
+
+ * config.guess: Add detection for Interix and UWIN on Windows NT,
+ OpenBSD on PA-RISC and UnixWare version 7.x.
+ Improve usage of `tr' where sets are concerned.
+ Detect all HP 9000 machines.
+ Determine machine types more completely on older UnixWare systems.
+ Determine C library version on GNU/Linux for the PowerPC.
+ * config.sub: Numerous additions. Some cleanup.
+
+1999-04-29 Ben Elliston <bje@cygnus.com>
+
+ * config.sub: Handle `t3e' alias for Cray T3E. Contributed by
+ James A. Lupo.
+
+1999-04-19 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acgeneral.m4 (AC_TRY_LINK_FUNC): Add support for Fortran 77.
+
+1999-04-17 Paul Eggert <eggert@twinsun.com>
+
+ * autoconf.texi, acspecific.m4 (AC_FUNC_MKTIME): New macro.
+ taken from automake's AM_FUNC_MKTIME.
+ * acfunctions: mktime now belongs to AC_FUNC_MKTIME.
+
+1999-04-11 Philipp Thomas <kthomas@gwdg.de>
+
+ * config.sub: Set basic_machine to i586 when target_alias = k6-*.
+
+1999-04-11 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * autoheader.m4: Do not complain about using AC_TRY_RUN without a
+ cross-compilation action--only autoconf should do this.
+
+1999-04-11 Paul Eggert <eggert@twinsun.com>
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Allow first argument to be a
+ shell variable.
+
+1999-04-11 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_C_STRUCT_MEMBER): New macro.
+ * acspecific.m4 (AC_STRUCT_TIMEZONE): Rewrite in terms of
+ AC_C_STRUCT_MEMBER.
+ (AC_STRUCT_ST_BLOCKS): Likewise.
+ (AC_STRUCT_ST_BLKSIZE): Likewise.
+ (AC_STRUCT_ST_RDEV): Likewise.
+ * autoconf.texi (Structures): Update. Add menu for subnodes.
+ (Particular Structures): New node.
+ (Generic Structures): New node.
+ (AC_C_STRUCT_MEMBER): Document.
+
+1999-04-10 Ben Elliston <bje@cygnus.com>
+
+ * mkinstalldirs: Add `-m' flag to specify the mode of a newly
+ created directory. Add command line usage and `-h', `--help'
+ options. Contributed by Jeff Garzik.
+
+1999-04-08 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_PROG_CC): Try using the `cl' C compiler under
+ Cygwin. Contributed by Scott Stanton.
+
+ * config.sub: Handle MPE/iX.
+
+1999-04-07 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Add more CLIX machines. From Thomas Dickey.
+
+1999-04-06 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Avoid the possibility of `ld' on GNU/Linux systems
+ being something other than the GNU linker (such as a directory, in
+ the case of GNU binutils).
+
+1999-04-05 Ben Elliston <bje@cygnus.com>
+
+ * config.sub: Add modern Alpha processors. Reorganise.
+
+ * acspecific.m4 (AC_CYGWIN): Do not remove conftest*; let
+ AC_TRY_COMPILE clean up after itself.
+ (AC_MINGW32): Likewise.
+ (AC_EMXOS2): Likewise.
+
+ * acspecific.m4 (AC_EMXOS2): New macro. Contributed by Ryuji Abe.
+ (AC_EXEEXT): Handle case for OS/2.
+ (AC_PROG_CC_WORKS): Show $CPPFLAGS when running the compiler.
+ (AC_PROG_CXX_WORKS): Likewise.
+
+ * autoconf.texi (AC_EMXOS2): Document.
+ (AC_EXEEXT): Mention OS/2.
+ (AC_MINGW32): Move.
+ (UPDATED): Update.
+
+1999-04-02 Mike Stump <mrs@wrs.com>
+
+ * acgeneral.m4 (AC_ARG_PROGRAM): Remove spaces, as there is one
+ more pass through sh than you think.
+
+1999-04-01 Ben Elliston <bje@cygnus.com>
+
+ * standards.texi: Update from FSF.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Avoid using the installation
+ script belonging to HP `pwplus' when running the install
+ program. Contributed by Steven G. Johnson and Dave Adams.
+ (AC_EXEEXT): Do not consider `.xcoff' as a possible executable
+ filename extension. Contributed by Robert S. Maier.
+
+1999-03-28 Tom Tromey <tromey@cygnus.com>
+
+ * autoconf.texi (AC_OUTPUT_COMMANDS): Add to macro index.
+
+1999-03-22 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Rename BUILD_CC to CC_FOR_BUILD; there is a
+ precedent for the usual name of this environment variable.
+
+1999-03-22 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * autoheader.sh: Report an error if AC_CONFIG_HEADER is not
+ present in the configure input file.
+
+1999-03-21 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Correct typo for detecting ELF on FreeBSD.
+
+1999-03-14 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * config.guess: Recognise HP 9000/8x0 machines.
+
+1999-03-11 Ben Elliston <bje@cygnus.com>
+
+ * config.sub: Recognise hppa2.0w. Contributed by Erez Zadok.
+
+1999-03-11 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * config.guess: Prefer $HOST_CC over $CC when deciding on a C
+ compiler to compile stub programs. Allow this to be overridden
+ with the value of $BUILD_CC in cross-compilation environments
+ where the native compiler must be used for running tests on the
+ host.
+
+1999-03-11 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Recognise MiNT and TOS on Atari machines.
+ Contributed by Guido Flohr.
+
+ * config.sub: Add aliases for MiNT.
+
+1999-03-10 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Recognise HP 9000/800. Merged from the master
+ FSF version of this file.
+
+1999-03-01 Gordon Matzigkeit <gord@trick.fig.org>
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Don't require that macro
+ symbols be valid C identifiers.
+
+1999-02-28 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_FUNC_VFORK): Allow test to behave correctly
+ when $ac_cv_func_vfork_works is the empty string. Contributed by
+ <red@nym.alias.net>.
+
+ * config.sub: Add `oskit' as a basic system type. From Godmar Back.
+
+1999-02-26 Ben Elliston <bje@cygnus.com>
+
+ * install-sh: Avoid trailing whitespace.
+
+ * autoscan.pl (parse_args): Make compatible with Perl version 4.
+
+1999-02-24 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect LynxOS 3.x. Contributed by Giuseppe
+ Guerrini.
+
+1999-02-23 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect ReliantUNIX on MIPS. Contributed by Andrej
+ Borsenkow.
+ Also remove random trailing whitespace.
+
+1999-02-22 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (System Services): Explain the semantics of the
+ AC_SYS_RESTARTABLE_SYSCALLS macro in greater detail. Suggested by
+ Franc,ois Pinard.
+
+1999-02-22 Stu Grossman <grossman@cygnus.com>
+
+ * acgeneral.m4 (AC_CANONICAL_SYSTEM): Explicitly require
+ AC_CANONICAL_HOST, AC_CANONICAL_TARGET and AC_CONICAL_BUILD.
+ (AC_CONFIG_AUX_DIR): Run auxillary shell scripts through $SHELL.
+ Do not rely on their magic number.
+ (AC_CANONICAL_THING): New macro. Cache results.
+ (AC_CANONICAL_HOST): Reimplement; use AC_CANONICAL_THING.
+ (AC_CANONICAL_TARGET): Likewise.
+ (AC_CANONICAL_BUILD): Likewise.
+ (AC_OUTPUT): Use $SHELL.
+ (AC_OUTPUT_SUBDIRS): Likewise.
+
+1999-02-19 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Make C code clean for C++ compilers. Contributed
+ by Markus Oberhumer.
+
+1999-02-19 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Automatically recognise ELF on FreeBSD. From Niall
+ Smart and improved by Andrew Cagney.
+
+1999-02-19 Felix Lee <flee@cygnus.com>
+
+ * acgeneral.m4 (AC_CACHE_VAL): Don't need backticks. This is a
+ performance enhancement for about a 5% reduction in the runtime of
+ the generated configure script.
+
+1999-02-18 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect NEC EWS4800. Contributed by Koji Arai.
+
+1999-02-11 Ben Elliston <bje@cygnus.com>
+
+ * standards.texi: Update from FSF.
+
+1999-02-10 Tom Tromey <tromey@cygnus.com>
+
+ * acgeneral.m4 (AC_CACHE_LOAD): Avoid sourcing special files.
+ Works around bug in some versions of bash.
+
+1999-02-02 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * autoconf.texi: Corrected definitions for AC_CONFIG_AUX_DIR and
+ AC_PROG_F77. Duplicated descriptions for AC_SEARCH_LIBS and
+ AC_TRY_LINK_FUNC removed.
+
+1999-01-29 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_EXEEXT): Ignore C++ source files.
+
+1999-01-28 Gary V. Vaughan <gvaughan@oranda.demon.co.uk>
+
+ * acspecific.m4 (AC_PROG_INSTALL): set INSTALL_SCRIPT to
+ ${INSTALL} so that automake doesn't propogate install time flags
+ for INSTALL_PROGRAM into INSTALL_SCRIPT.
+
+1999-01-25 Ben Elliston <bje@cygnus.com>
+
+ * install-sh: Use $mkdirprog, not `mkdir' directly. Contributed by
+ Jeff Garzik.
+
+ * Makefile.in (clean mostlyclean distclean maintainer-clean):
+ Remove .m4f files.
+
+ * config.guess: Synchronise with master FSF version. Add detection
+ for HP MPE/iX.
+
+ * config.sub: Likewise.
+
+1999-01-23 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Catch more NILE system models. Contributed by
+ Akim Demaille and Graham Jenkins.
+
+ * autoheader.sh: Force $tmpout to close to avoid Windows file
+ sharing conflicts. From Mark Elbrecht.
+
+1999-01-21 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (Introduction): Update bug reporting address.
+
+ * config.guess: Likewise.
+
+1999-01-19 Pavel Roskin <pavel_roskin@geocities.com>
+
+ * ifnames.sh: Source lines ending with backslash are prepended to
+ the following line before further processing.
+
+1999-01-19 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_PROG_CXXCPP): Substitute @CXXCPP@ correctly
+ when $CXXCPP is overridden in the supervisory shell. Contributed
+ by Michael Schoene.
+
+1999-01-16 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_ACVERSION): Bump to 2.14.1 for prereleases.
+
+1999-01-14 Scott Bambrough <scottb@corelcomputer.com>
+
+ * config.guess: Recognise armv[234][lb] types (ie. `armv*').
+
+1999-01-13 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.sh: Remove -v and --verbose from the command line usage
+ help. They do not exist.
+
+1999-01-12 Scott Bambrough <scottb@corelcomputer.com>
+
+ * config.sub: Recognize armv[234][lb] types (ie. `armv*'). Add
+ alias for the NetWinder; set company to `corel'.
+
+1999-01-11 Akim Demaille <demaille@inf.enst.fr>
+
+ * autoreconf.sh (verbose): use either `:' or `echo'.
+ (aclocal_m4): Renamed from aclocal.
+ (aclocal_flags): New var.
+ Run aclocal using $aclocal_flags.
+ Redirect ls' stderr to /dev/null to avoid spurious messages.
+
+1999-01-11 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect HP-UX on MPE/iX machines.
+
+ * acgeneral.m4 (AC_ACVERSION): Increment to 2.14.
+
+ * autoconf.texi (EDITION): Likewise.
+ (VERSION): Likewise.
+
+1999-01-10 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect Rhapsody on PowerPC and other machines.
+ Contributed by Wilfredo Sanchez.
+
+ * config.sub: Add rhapsody and openstep aliases.
+
+1999-01-09 Ben Elliston <bje@cygnus.com>
+
+ * Makefile.in (html): New target. Generate HTML documentation.
+ (install-strip): Add.
+ Contributed by Wilfredo Sanchez.
+
+ * autoconf.texi (AC_CHECK_LIB): Explain more. Contributed by Bob
+ Friesenhahn.
+ (UPDATED): Bump to 1999.
+
+ * config.guess: Distinguish between OpenStep and NeXTStep
+ platforms. Contributed by Wilfredo Sanchez.
+
+1999-01-09 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * acgeneral.m4 (AC_CHECK_FUNC): Don't actually call the function.
+
+1999-01-09 H.J. Lu <hjl@lucon.org>
+
+ * config.guess: Permit multiple concurrent instances by including
+ the process ID of the shell running this script in temporary
+ filenames.
+
+1999-01-08 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.sh: More useful and up-to-date help from the --help
+ option. Contributed by Akim Demaille.
+
+ * autoheader.sh: Likewise.
+
+ * autoreconf.sh: Likewise.
+
+ * autoscan.pl: Likewise.
+
+ * autoupdate.sh: Likewise.
+
+ * ifnames.sh: Likewise.
+
+ * config.guess: Detect Cray T3E and NEC SX-4, SX-5 machines.
+ Contributed by Andreas Schott.
+
+1999-01-06 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (AC_OBJEXT): Correct documentation.
+
+1999-01-05 Ben Elliston <bje@cygnus.com>
+
+ * Version 2.13.
+
+1999-01-04 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (AC_CHECK_FILE): Document.
+ (AC_CHECK_FILES): Likewise.
+ (AC_SEARCH_LIBS): Likewise.
+ (AC_FUNC_SELECT_ARGTYPES): Use Jeff Garzik's version.
+ (AC_C_STRINGIZE): Likewise.
+ (AC_CYGWIN): Document.
+ (AC_EXEEXT): Likewise.
+ (AC_OBJEXT): Likewise.
+ (AC_MINGW32): Likewise.
+ (AC_TRY_LINK_FUNC): Likewise.
+ (AC_VALIDATE_CACHED_SYSTEM_TUPLE): Likewise.
+
+1999-01-01 Ben Elliston <bje@cygnus.com>
+
+ * NEWS: Update.
+
+ * acspecific.m4 (AC_PROG_CXX_WORKS): Specify an explicit return
+ type for `main' to keep modern C++ compilers happy.
+
+1998-12-28 Jeff Garzik <jgarzik@pobox.com>
+
+ * autoconf.texi:
+ (AC_SEARCH_LIBS, AC_CHECK_FILE, AC_CHECK_FILES,
+ AC_TRY_LINK_FUNC): Document.
+ (AC_CHECK_LIB): Indicate the absence of
+ action-if-not-found will not kill default action.
+ (AC_SYS_INTERPRETER): Alphabetize with rest of section,
+ s/ac_cv_sys_interpreter/interpval/
+
+ * acgeneral.m4:
+ (AC_TRY_LINK_FUNC): Fix arg transposition.
+ (AC_SEARCH_LIBS): Require autoconf 2.13, add other-libs arg.
+ (AC_CHECK_FILES): Add underscore to HAVE_file define.
+
+ * acspecific.m4:
+ (AC_SYS_INTERPRETER): New shell var 'interpval' stores
+ internal var ac_cv_sys_interpreter.
+
+1998-12-27 Ben Elliston <bje@cygnus.com>
+
+ * autoconf.texi (AC_PROG_INSTALL): Update.
+ (AC_FUNC_ALLOCA): Correct code fragment.
+ (AC_FUNC_SELECT_ARGTYPES): Document.
+ (AC_C_STRINGIZE): Likewise.
+ (AC_VALIDATE_CACHED_SYSTEM_TUPLE): Likewise.
+
+ * acspecific.m4 (AC_CYGWIN): Rename from `AC_CYGWIN32'.
+ (AC_CYGWIN32): Warn about deprecated usage. Forward to AC_CYGWIN.
+
+ * config.sub: Drop `32' from `Cygwin32'.
+
+ * config.guess: Likewise.
+ Handle BSD/OS variants for non-x86 machines. Contributed by Chris
+ P. Ross.
+
+ * NEWS: Update.
+
+ * configure: Rebuild.
+
+1998-12-26 Ben Elliston <bje@cygnus.com>
+
+ * autoreconf.sh (stamp): Add missing quote.
+
+ * mkinstalldirs: Write output which is not diagnostic to standard
+ output and not standard error. Suggested by Steve Robbins.
+
+1998-12-11 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acconfig.h, acgeneral.m4, acspecific.m4, autoconf.texi: Change
+ all of the Fortran 77 code to use the new `F77' prefix instead of
+ the older `FC' prefix.
+
+1998-12-11 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_ACVERSION): Bump to 2.13.
+
+ * autoconf.texi (EDITION): Likewise.
+ (VERSION): Likewise.
+
+1998-10-30 Jeff Garzik <jgarzik@pobox.com>
+
+ * autoconf.texi: Document AC_CACHE_LOAD and AC_CACHE_SAVE. Explain
+ how AC_CACHE_SAVE can be used as a means of syncing the cache to
+ disk prior to doing something potentially fatal in configure.
+
+1998-10-29 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * autoreconf.sh: Support several automake command line options,
+ and run aclocal and automake when needed. Also, create stamp files
+ just like automake's Makefiles would do for config headers.
+ Additional contributions from Tom Tromey.
+
+1998-10-24 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acgeneral.m4 (AC_LANG_FORTRAN77): Remove [] (i.e. the m4 quotes)
+ since it was confusing the test suite. Also make `f77' the default
+ for FC, otherwise the test suite fails.
+
+ * autoconf.texi (Fortran 77 Compiler Characteristics): Added new
+ node documenting the new AC_F77_LIBRARY_LDFLAGS macro.
+
+ * acspecific.m4 (AC_F77_LIBRARY_LDFLAGS): New macro to determine
+ the linker flags (e.g. `-L' and `-l') for the Fortran 77 intrinsic
+ and run-time libraries.
+
+1998-10-24 Ben Elliston <bje@cygnus.com>
+
+ * acspecific.m4 (AC_FUNC_SELECT_ARGTYPES): New macro. Detects the
+ types of formal arguments to select(). Contributed by Lars Hecking.
+
+ * acconfig.h (SELECT_TYPE_ARG1): Add.
+ (SELECT_TYPE_ARG234): Likewise.
+ (SELECT_TYPE_ARG5): Likewise.
+
+ * config.guess: Hide warnings emitted by the HP linker when
+ generating a PA 2.0 object file. Contributed by Marcus Thiessel.
+
+1998-10-20 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_LANG_RESTORE): Fix a typo spotted by Noah
+ Elliott.
+
+1998-10-09 Tom Tromey <tromey@cygnus.com>
+
+ * Makefile.in (autoconf.m4f): New target.
+ (autoheader.m4f): Likewise.
+
+1998-10-08 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_TRY_LINK_FUNC): Fix macro ordering.
+
+Sun Oct 4 21:57:20 1998 Tom Tromey <tromey@cygnus.com>
+
+ * autoconf.texi (Defining Symbols): Documented third argument to
+ AC_DEFINE.
+ * autoheader.m4 (AC_DEFINE_UNQUOTED): Generate `verbatim'
+ assignment if third argument given.
+ (AC_DEFINE): Likewise.
+ * acgeneral.m4 (AC_DEFINE): Handle case where $# is 3.
+ (AC_DEFINE_UNQUOTED): Likewise.
+ * autoheader.sh: Echo $verbatim if not empty.
+
+1998-10-03 Ben Elliston <bje@cygnus.com>
+
+ * acconfig.h (FC_NO_MINUS_C_MINUS_O): Add to complete the Fortran
+ 77 support.
+
+ * README: Update bug reporting address. Include maintainer info.
+
+1998-10-02 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_VALIDATE_CACHED_SYSTEM_TUPLE): New macro. This
+ macro can be used to ensure that a configure script will not run
+ on a second system without removing the cache and re-running
+ configure. Contributed by Alexandre Oliva.
+
+1998-09-29 Ben Elliston <bje@cygnus.com>
+
+ * acgeneral.m4 (AC_SEARCH_LIBS): New macro. Searches a series of
+ libraries for a given function. Contributed by Jim Blandy.
+ (AC_TRY_LINK_FUNC): New macro. Again, from Jim.
+
+1998-09-28 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Detect multiprocessor DC/OSx running on Pyramid
+ MIServer machines. Contributed by Graham K. Jenkins.
+
+ * acgeneral.m4 (AC_CHECK_PROG): Fix a bug if the supplied path
+ contains colons. This was observed with some versions of NetBSD
+ `sh' and some versions of `bash'.
+ (AC_PATH_PROG): Likewise. Contributed by Tom Yu.
+
+1998-09-27 Ben Elliston <bje@cygnus.com>
+
+ * Makefile.in (all): Generate frozen .m4 files at build time.
+ (install): Do not freeze .m4 files. Install pre-frozen .m4f files
+ using $(INSTALL_DATA).
+ (.m4.m4f): Freeze files if m4 supports stored internal state.
+ Contributed by Karl Heuer.
+
+ * install-sh: Import latest version from the FSF.
+
+ * mkinstalldirs: Likewise.
+
+ * config.guess: Apply the sysconf(2) test to HP 9000/600-series,
+ 9000/802, 9000/804 and 9000/892 machines. Contributed by Pavel
+ Roskin.
+ Detect UnixWare 7. Contributed by Paul Gampe.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Substitute `INSTALL_SCRIPT'.
+ Contributed by Franc,ois Pinard
+ (AC_C_STRINGIZE): New macro to test the availability of the
+ stringizing operator in the C preprocessor. Contributed by Arnold
+ Robbins on behalf of the GNU AWK project.
+
+ * acconfig.h (HAVE_STRINGIZE): Add for the AC_C_STRINGIZE macro.
+
+ * testsuite/Makefile.in (check): If DejaGNU is not installed,
+ print a warning and skip the `dejacheck' target (which will fail).
+ (site.exp): Use tests to guard commands from generating error
+ messages if `site.exp' or `site.bak' do not exist. Contributed by
+ Karl Heuer.
+ (dejacheck): Remove unused target.
+
+1998-09-26 Ben Elliston <bje@cygnus.com>
+
+ * texinfo.tex: Import latest version from the FSF.
+
+ * config.guess: Treat all SPARC variant processors running BSD/OS
+ as just `sparc' for compatibility reasons. Contributed by Chris
+ Torek.
+
+ * acgeneral.m4 (AC_CHECK_FILE): New macro. Checks for the
+ existence of a file in the file system (native only).
+ Contributed by Ken Raeburn.
+ (AC_CHECK_FILES): Likewise.
+
+1998-09-15 Didier Verna <verna@inf.enst.fr>
+
+ * acspecific.m4 (AC_PATH_XTRA): use X_EXTRA_LIBS add-on libraries
+ in the test for libICE. It is needed at least under Solaris.
+
+1998-09-15 Ben Elliston <bje@cygnus.com>
+
+ * config.guess: Handle strange processor ID assignments on AIX
+ machines. Contributed by Didier Desseaux.
+
+Sat Sep 12 16:25:00 1998 Aaron Crane <aaronc@pobox.com>
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Changed the egrep regex to avoid
+ incorrectly assuming that if foobar_t is defined, then so is
+ bar_t.
+
+Tue Sep 8 14:06:04 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * acgeneral.m4: Make the following macros Fortran 77 aware
+ (i.e. conditionalize whether to `#include "confdefs.h"', etc.):
+ (AC_TRY_COMPILE)
+ (AC_TRY_LINK)
+ (AC_CHECK_LIB)
+
+ * acgeneral.m4 (AC_LANG_FORTRAN77): Rename `AC_LANG_FORTRAN' to
+ `AC_LANG_FORTRAN77'. Change the Fortran 77 language macro from
+ `FORTRAN' to `FORTRAN77'.
+ (AC_LANG_RESTORE): Change the Fortran 77 language macro from
+ `FORTRAN' to `FORTRAN77'
+
+ * autoconf.texi: Updated Fortran 77 documentation, particularly
+ for `AC_TRY_COMPILE', `AC_TRY_LINK' and `AC_CHECK_LIB'.
+
+Thu Sep 3 09:34:39 1998 Matthew D. Langston <langston@SLAC.Stanford.EDU>
+
+ * autoconf.texi: Added Fortran 77 documentation.
+
+ * acspecific.m4 (AC_PROG_FC): New macro. Determine a Fortran
+ compiler to use.
+ (AC_PROG_FC_WORKS): New macro.
+ (AC_PROG_FC_GNU): New macro.
+ (AC_PROG_FC_G): New macro.
+ (AC_PROG_FC_C_O): New macro.
+
+ * acgeneral.m4: Add FFLAGS (Fortran 77 flags).
+ (AC_LANG_FORTRAN): New macro.
+ (AC_LANG_RESTORE): Make Fortran 77 aware.
+ (AC_TRY_COMPILER): Make Fortran 77 aware (i.e. conditionalize
+ whether to `#include "confdefs.h"').
+
+Thu Jun 18 12:13:27 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * acspecific.m4 (AC_EXEEXT): Correct setting of ac_exeext when
+ there is no extension.
+
+Mon Jun 1 12:30:39 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * acgeneral.m4 (AC_CHECK_PROG): Set IFS to just ":" when searching
+ through PATH.
+ (AC_PATH_PROG): Likewise.
+ * acspecific.m4 (AC_PROG_INSTALL): Likewise.
+ (AC_PROG_CC): On cygwin32, if neither gcc nor cc
+ are found, look for cl.
+ (AC_PROG_CXX): Look for cl after all other choices.
+ * configure: Rebuild.
+
+Thu May 28 18:37:36 1998 Ian Lance Taylor <ian@cygnus.com>
+
+ * acgeneral.m4 (AC_ACVERSION): Bump to 2.12.2.
+
+ Add support for Visual C++:
+ * acgeneral.m4 (ac_exeext, ac_objext): New variables.
+ (ac_link): Use ac_exeext.
+ (AC_TRY_COMPILER, AC_TRY_LINK, AC_TRY_RUN_NATIVE): Likewise.
+ (AC_TRY_CPP): Remove lines from stderr which contain only the name
+ of the file.
+ (AC_REPLACE_FUNCS): Use ac_objext.
+ * acspecific.m4 (AC_PROG_CC): Check whether compiler supports -g
+ even if it is not gcc.
+ (AC_PROG_CXX): Likewise.
+ (AC_PROG_CPP): Try running the compiler with the -nologo option.
+ (AC_FUNC_ALLOCA): Check for _MSC_VER. Use ac_objext.
+ (AC_FUNC_MEMCMP): Use ac_objext.
+ (AC_STRUCT_ST_BLOCKS): Likewise.
+ (AC_OBJEXT): New macro.
+ (AC_CYGWIN32, AC_MINGW32, AC_EXEEXT): New macros.
+ * configure: Rebuild.
+
+ * Makefile.in (editsh): Substitute for SHELL.
+ (Makefile, config.status): Use $(SHELL) when running
+ config.status.
+ * autoconf.sh: Change initial /bin/sh to @SHELL@.
+ * autoheader.sh: Likewise.
+ * autoreconf.sh: Likewise.
+ * autoupdate.sh: Likewise.
+ * ifnames.sh: Likewise.
+
+Thu Apr 30 16:29:00 1998 Syd Polk <spolk@cygnus.com>
+
+ * acspecific.m4 (SETPGRP_VOID): The test for setpgrp needs
+ to have unistd.h included or the DEC compiler does not
+ flag the error that triggers setting the variable.
+
+Tue Nov 18 14:21:38 1997 Eric Mumpower <nocturne@cygnus.com>
+
+ * autoreconf.sh: Do the right thing when AC_CONFIG_HEADER is
+ given more than one filename. As noted in the "Invoking
+ autoheader" node of the info files, autoheader will use the first
+ file argument given to AC_CONFIG_HEADER. Prior to this patch,
+ autoreconf would end up executing incorrect shell code (e.g.
+ "test ! -f 1.h 2.h.in") in such cases.
+ Patch submitted in parallel to bug-gnu-utils@prep.ai.mit.edu.
+
+Fri Oct 3 18:10:39 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Add a grep when checking whether
+ set quotes correctly, to avoid a cache overflow on HP-UX 9.
+ * configure: Rebuild.
+
+Wed Sep 11 15:35:19 1997 Chris Provenzano <proven@cygnus.com>
+
+ * acgeneral.m4 : Always set SHELL and substitute SHELL.
+ When looking for a path for an executable allow the
+ user to override with an DOS path.
+ * configure : New configure generated by autoconf.
+
+Thu Sep 4 22:30:40 1997 Jeffrey A Law (law@cygnus.com)
+
+ * acspecific (AC_PROC_INSTALL): Don't use installbsd on OSF.
+
+Wed Sep 3 23:00:44 1997 Chris Provenzano <proven@cygnus.com>
+
+ * configure : New configure generated by autoconf.
+ * Makefile.in : Set SHELL=@SHELL@. configure now substiutes
+ ${CONFIG_SHELL-/bin/sh} in for @SHELL@ at configure time.
+
+Mon Aug 11 01:40:37 1997 Jason Molenda <crash@cygnus.co.jp>
+
+ * acspecific (AC_FUNC_VFORK): If cross-compiling, set
+ $ac_cv_func_vfork_works to $ac_cv_func_vfork (assume vfork works
+ if present).
+
+Tue Aug 5 23:00:05 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * acgeneral.m4 (AC_VERSION): Set to 2.12.1.
+ (AC_CANONICAL_HOST): Use CONFIG_SHELL to run $ac_config_sub and
+ $ac_config_guess.
+ (AC_CANONICAL_TARGET, AC_CANONICAL_BUILD): Likewise.
+
+Tue Dec 10 19:38:59 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Use grep to prevent overflowing
+ HP-UX 9.05 /bin/sh buffer in case statement. From Eric Backus.
+
+Mon Dec 9 23:39:17 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Add a semicolon between
+ shell variable assignments; the evaluation order varies between
+ implementations.
+
+Tue Nov 26 13:00:28 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Version 2.12.
+
+Wed Nov 20 13:00:21 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Test release 2.11.2.
+
+ * acgeneral.m4 (AC_OUTPUT): Remove a now-wrong test for whether to
+ make an unquoted here document.
+ (AC_CACHE_SAVE): Double-up backslashes in double quotes.
+ From Paul Eggert.
+
+ * Test release 2.11.1.
+
+ * acgeneral.m4 (AC_TRY_COMPILE, AC_TRY_LINK): Make the final
+ newline consistent with the other AC_TRY_* macros: no final dnl
+ is needed to avoid extraneous blank lines.
+ (AC_CHECK_LIB, AC_HAVE_LIBRARY, AC_COMPILE_CHECK): Remove
+ extraneous dnl's.
+ (AC_DIVERSION_CMDS, AC_DIVERSION_ICMDS): New macros.
+ (AC_OUTPUT_COMMANDS, AC_OUTPUT): Use them instead of appending to
+ list macros.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Handle cache variable values
+ correctly even if they contain single quote, or are quoted by
+ the shell. From Paul Eggert.
+ (AC_INIT_PREPARE): Set LC_MESSAGES to C if set.
+ From Hans Olsson.
+ Set LC_CTYPE to C if set.
+ From Thomas Winder.
+ * autoconf.sh, autoheader.sh: Likewise set LC_MESSAGES and LC_CTYPE.
+
+Tue Nov 19 10:29:06 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * testsuite/autoconf.g/sizeof.exp: Use the v2 macro name.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES, AC_OUTPUT_HEADER): Support
+ creating output files from multiple pieces, concatenated.
+ Suggested by Theodore Ts'o.
+ (AC_LINK_FILES): If called more than once, concatenate the
+ arguments. From Roland McGrath.
+ (AC_CONFIG_SUBDIRS): Likewise.
+ (AC_OUTPUT_COMMANDS): New macro. Suggested by
+ Tom Tromey.
+ (AC_OUTPUT): Use the lists it sets.
+
+ * acgeneral.m4 (AC_TRY_RUN_NATIVE): Fail if linking fails, like
+ AC_TRY_LINK.
+ (AC_TRY_RUN): Don't require AC_C_CROSS.
+ (AC_TRY_COMPILER): New macro.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS): Set cross_compiling.
+ * acspecific.m4 (AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS): Use
+ AC_TRY_COMPILER instead of AC_TRY_LINK.
+ (AC_PROG_CC_GNU, AC_PROG_CC_G): Split out of AC_PROG_CC.
+ (AC_PROG_CXX_GNU, AC_PROG_CXX_G): Split out of AC_PROG_CXX.
+ For the *_G macros, make the cache variable names non-GNU-specific.
+ (AC_C_CROSS): Mark obsolete, and otherwise a no-op.
+
+ * AUTHORS: New file.
+ * Makefile.in (DISTFILES): Add it.
+
+ * acspecific.m4 (AC_FUNC_MMAP): Update the getpagesize
+ declarations from getpagesize.h. Check for unistd.h.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Run the eval in a subshell.
+
+ * acfunctions: Map fnmatch, strftime, getpgrp, setpgrp to their
+ own macros.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Check that $CONFIG_HEADERS is
+ unset, not that it's empty.
+
+Mon Nov 18 10:24:50 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Version 2.11.
+
+Sun Nov 17 20:12:05 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_FUNC_STRCOLL): Make the checking message more
+ accurate.
+
+Thu Nov 14 11:15:27 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acheaders: Add entry for malloc.h. Make the strings.h entry
+ suggest AC_CHECK_HEADERS instead of AC_HEADER_STDC.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Move initialization of
+ ac_max_here_lines here from AC_OUTPUT_HEADER.
+
+ * autoheader.sh: Take the multiple-include protection back out.
+ It's not needed for a file that just #defines stuff, and, as Ken
+ Raeburn pointed out in Apr 1994:
+ Since you don't make it optional, and you don't give the writer of
+ configure.in much control over the name of the symbol, it also would
+ prevent one "config.h" file in a subdirectory from including
+ "../config.h" as a way to avoid duplicating some common tests.
+
+ * acspecific.m4 (AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS): Don't try
+ running a program, just try linking.
+ (AC_C_CROSS): Make the wording clearer.
+
+Wed Nov 13 10:07:14 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_CXX): Check whether the
+ compiler works before checking whether it's a GNU compiler.
+ (AC_FUNC_VFORK): Call _exit after perror.
+ (AC_PATH_XTRA): Go back to using -R, as setting an env var as part
+ of CC doesn't get eval'd correctly to actually work.
+ Directly test whether a space is needed after -R.
+ Don't add "-L" to LDFLAGS if $x_libraries is empty.
+ (AC_FUNC_STRFTIME): Check for it in -lintl only if it's not in the
+ normal libraries.
+
+ * Test release 2.10.3.
+
+ * testsuite/Makefile.in (dejacheck): New target, suggested by Tom
+ Tromey.
+ (check): Depend on dejacheck.
+
+Tue Nov 12 00:06:14 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Split the list of sed commands in
+ conftest.subs into multiple files named conftest.s[1-9][0-9]*.
+ Create a pipeline of sed commands that use these files, then delete
+ the temporary files. From John W. Eaton.
+
+ * acspecific.m4 (AC_AIX, AC_MINIX): Remove warnings about AC_TRY_LINK.
+ These macros don't change the linkage options.
+
+ * Test release 2.10.2.
+
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_CXX) [GCC]: Use -O2 instead
+ of -O. Suggested by fnf@ninemoons.com (Fred Fish).
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Support passing
+ AC_CONFIG_HEADER a value containing shell variables. Suggested by
+ Markku Savela and Julian Onions.
+ * acgeneral.m4 (AC_TRY_RUN_NATIVE, AC_TRY_LINK, AC_TRY_COMPILE,
+ AC_TRY_CPP): Show the test program in config.log if the test fails.
+ From Karl Berry.
+
+ * testsuite/config/unix.exp: Run the configure script as "./script"
+ in case the user doesn't have "." in their PATH.
+
+Mon Nov 11 18:02:58 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_TRY_COMPILE, AC_TRY_LINK): Deal with smart
+ compilers that know that an unused function doesn't have to be
+ linked in: call the function directly from main().
+ (Removing a legacy from when they tried to run the code, I think-djm.)
+ From fnf@ninemoons.com (Fred Fish).
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Rename ac_save_LIBS to avoid
+ a clash with AC_CHECK_LIB.
+ From Jim Meyering.
+ (AC_FUNC_FNMATCH, AC_FUNC_MMAP, AC_FUNC_VFORK, AC_FUNC_WAIT3,
+ AC_FUNC_STRCOLL, AC_FUNC_MEMCMP): Rename cache variables to avoid
+ wrong results if someone calls AC_CHECK_FUNC for these functions.
+
+ * autoheader.sh: Don't cmp with config.h.in if it doesn't exist yet.
+ Don't frob lines 1-@TOP@ or @BOTTOM@-end of acconfig.h's.
+ Accept TAB as well as SPC after #undef in acconfig.h's.
+
+Sat Nov 9 01:54:04 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Test release 2.10.1.
+
+ * acspecific.m4 (AC_PROG_CC_WORKS, AC_PROG_CXX_WORKS): New macros
+ adapted from Bruno Haible.
+ (AC_PROG_CC, AC_PROG_CXX): Use them.
+ * acgeneral.m4 (AC_TRY_RUN_NATIVE): Split out of AC_TRY_RUN.
+ (AC_TRY_LINK): Check that the executable exists after linking.
+ (AC_EGREP_CPP): Disable m4 quote chars around egrep, so [] in regexps
+ isn't eaten.
+
+ * autoheader.sh: Add multiple-inclusion protection for config.h.
+
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Pretty up the output.
+ (AC_CHECK_LIB): Include the function being tested in the message.
+ (AC_CHECK_PROG, AC_PATH_PROG): Add a dummy variable to force word
+ splitting on the path.
+
+ * acspecific.m4 (AC_FUNC_MMAP): Remove check and uses of valloc.
+ It turns out it's a separate issue, for GNU grep.
+ Replace the test program with a new version from Mike Haertel.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Accept the HP-UX sh 'set' output
+ format. From Marcus Daniels.
+
+ * acgeneral.m4 (AC_MSG_CHECKING, AC_CHECKING): Write a message to
+ config.log also. From T.E.Dickey.
+ (AC_CHECK_LIB, AC_CHECK_HEADER, AC_CHECK_HEADERS): Replace use of
+ tr with sed, to avoid a bug in the AIX 4.1.3.0 tr reported by
+ Alain Knaff. He says that version of tr interprets \055 as a
+ range specifier, like an unquoted -.
+ * acspecific.m4 (AC_PROG_MAKE_SET, AC_CHECK_HEADER_DIRENT,
+ AC_CHECK_HEADERS_DIRENT): Ditto.
+
+ * acspecific.m4 (AC_FUNC_SETPGRP): New macro.
+ * acconfig.h (SETPGRP_VOID): New entry.
+ From T.E.Dickey.
+
+ * acspecific.m4 (AC_PATH_X_DIRECT): Try /lib/usr/lib/X11 for A/UX.
+ From Guillermo Gomez.
+ (AC_PATH_XTRA): Replace -R with adding LD_RUN_PATH to CC in the
+ Solaris kludge. Suggested by Paul Eggert.
+ Define X_DISPLAY_MISSING with AC_DEFINE, and
+ if not using X, clear out the X variables.
+ Check system-dependent libs before system-independent ones.
+ Check for more system-dependent libs.
+ From Karl Berry.
+ Use AC_CHECK_FUNC in the system-dependent libs tests.
+ From Larry Schwimmer.
+ Wart removal: Don't require AC_ISC_POSIX.
+ (AC_ISC_POSIX): Require AC_PROG_CC, since it uses $GCC.
+ From gvran@uddeborg.pp.se.
+ Don't blather about being called before AC_TRY_LINK,
+ which is now called in AC_PROG_CC. Don't encourage using this macro.
+ * acconfig.h (X_DISPLAY_MISSING): Add entry.
+
+Fri Nov 8 16:02:08 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_PATH_X_DIRECT): Search for /usr/X11 before
+ /usr/X11Rn, etc. From bostic@bsdi.com (Keith Bostic).
+
+ * acgeneral.m4 (AC_CHECK_TYPE) [STDC_HEADERS]: Check in stddef.h, too.
+ From Glenn P. Davis.
+ Don't require the second char after the type name to be a space.
+ (AC_TRY_RUN): Remove the test files before executing the "failure"
+ case code.
+
+ * acspecific.m4 (AC_PROG_CXX): Check for cc++ for NexT.
+ From Carl Edman.
+ (AC_PROG_CC, AC_PROG_CXX): Check whether -g works even if
+ C[XX]FLAGS is set. From T.E.Dickey.
+ (AC_FUNC_FNMATCH): New macro.
+ * acconfig.h (HAVE_FNMATCH): New entry.
+
+ * acgeneral.m4 (AC_REPLACE_FUNCS): Call AC_CHECK_FUNCS to do the work.
+
+Tue Oct 29 13:03:44 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * acgeneral.m4 (AC_OUTPUT_SUBDIRS): Fix thinko in computation of
+ ac_sub_srcdir in relative but not "." case.
+
+Thu Oct 10 22:29:37 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CANONICAL_HOST, AC_CANONICAL_TARGET,
+ AC_CANONICAL_BUILD): Allow the os part of the string returned by
+ config.sub to contain dashes, as in "linux-gnu".
+
+Fri Jul 19 16:59:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Add dnl so regexp doesn't have a
+ leading newline.
+
+Wed Jun 12 13:56:57 1996 David J MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Remove extra ')'.
+
+ * Many files: Update the FSF street address.
+
+Sun Jun 9 17:54:23 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Add missing \ in last change.
+
+Fri Jun 7 11:54:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Identifierize lib name in $ac_tr_lib.
+
+Mon May 27 13:49:02 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_SYS_LONG_FILE_NAMES): If $TMPDIR names an
+ existing, writable directory, then test it instead of /tmp, /var/tmp,
+ and /usr/tmp for long file name support.
+
+ * acgeneral.m4 (AC_PREREQ): Prepend "FATAL ERROR: " to msg.
+
+Sun May 26 19:07:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_MAKE_SET): Sanitize $MAKE for use as
+ identifier.
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Tighten regexp so ulong doesn't match
+ ulong_t.
+
+ * autoheader.sh: Put $syms in a temporary file and use fgrep -f.
+
+Tue May 7 13:20:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
+
+ * acgeneral.m4: Version 2.10 released.
+
+Tue Mar 26 13:03:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Make subdir if necessary.
+
+Thu Mar 21 10:52:03 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Fix name of -lelf cache variable
+ name in test of it.
+ (AC_PATH_XTRA): Fix name of -ldnet cache variable name in test of it.
+
+Wed Mar 20 09:37:31 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use \055 for -; leading and trailing
+ both lose with some tr.
+
+ * acspecific.m4 (AC_C_CONST): Remove check for gcc 2.7 bug.
+ RMS wants everyone to lose until gcc is fixed.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Put - last in tr set so it is not
+ considered a range.
+
+ * acspecific.m4 (AC_C_CONST): Add check for gcc 2.7 bug.
+ From Paul Eggert and Jim Meyering.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Omit `char $2' decl when $2 is `main'.
+
+Wed Mar 13 22:10:42 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Put quotes around _ when
+ constructing cache variable name, to separate it from preceding
+ text.
+
+Sat Mar 16 15:53:22 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * Version 2.9 released.
+ * acgeneral.m4 (AC_ACVERSION): Updated to 2.9.
+
+Wed Mar 13 12:49:51 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Undo last change to $ac_dB,
+ and instead change the code written into conftest.hdr.
+
+Tue Mar 12 02:51:24 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Apply Jan 15 fix to
+ AC_OUTPUT_MAKE_DEFS here too: Match `#define foo' without trailing
+ space in confdefs.h. Before configure would lose if all its trailing
+ whitespace got stripped, and that can happen in mail.
+
+Sun Mar 10 20:30:09 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_INIT_NOTICE): Add 95 and 96 to copyright years.
+
+Sat Mar 9 18:28:42 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Add missing [.
+
+Fri Mar 8 15:06:48 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Declare $2 to override gcc2 internal
+ prototype.
+
+ * Version 2.8 released.
+
+Wed Mar 6 14:38:31 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use a cache variable name containing
+ both the library and function name.
+
+Tue Jan 16 16:39:21 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_PROG): Take optional 6th arg, full name
+ of program to reject if found in search path.
+ * acspecific.m4 (AC_PROG_CC): If gcc not found use AC_CHECK_PROG
+ for cc, rejecting /usr/ucb/cc.
+ Fatal configure error if no $CC found at all.
+
+Mon Jan 15 15:57:36 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Match `#define foo' without
+ trailing space in confdefs.h. Before configure would lose if
+ all its trailing whitespace got stripped, and that can happen in mail.
+
+Fri Jan 12 14:38:37 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_TRY_CPP): Use "" instead of '' when setting
+ ac_try; we need one level of expansion there for $ac_cpp, then
+ AC_TRY_EVAL does one more for its the expansion of $ac_cpp.
+
+Thu Jan 11 10:38:19 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_LANG_C, AC_LANG_CPLUSPLUS): Removed echo cmds
+ from $ac_cpp, $ac_compile, and $ac_link.
+ (AC_TRY_EVAL, AC_TRY_COMMAND): New macros for running tests' commands.
+ Always put the configure source line and command line into config.log.
+ (AC_TRY_CPP, AC_TRY_COMPILE, AC_TRY_LINK): Use them.
+ * acspecific.m4: Use AC_TRY_EVAL and AC_TRY_COMMAND for running
+ all tests.
+
+Fri Jan 5 17:50:28 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PATH_X, AC_PATH_X_XMKMF, AC_PATH_X_DIRECT):
+ Rearrange logic: do no tests if $with_x=no; make incl and lib
+ tests independent, and distinguish unset from empty.
+
+ * autoconf.sh (undefined macro check): \ sed \s inside "". If
+ grep $name in $infile misses, give error message that there must
+ be an Autoconf bug.
+
+Tue Dec 19 10:49:20 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * autoconf.sh: Ignore undefined macros in shell comments.
+
+Mon Dec 11 22:12:54 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_CC_C_O): Rearrange logic to get the right
+ answer for cc.
+
+Fri Nov 24 17:26:38 1995 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * autoconf.sh: Define $AWK from the subst @AWK@, and use it.
+
+Wed Nov 22 11:01:16 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Version 2.7.
+
+ * autoheader.m4 (AC_CHECK_FUNCS, AC_CHECK_HEADERS): Expand the
+ optional action args. From jj@jfch.vc.cvut.cz (Jakub Jelinek).
+
+ * acgeneral.m4 (AC_CHECK_LIB): Translate - in library names to _.
+ (AC_ARG_PROGRAM): Use cat instead of echo to avoid SysV echo
+ interpreting backslashes. From kim@tac.nyc.ny.US (Kimmo Suominen).
+ (AC_OUTPUT_FILES): Quote $ and \ for being in an unquoted here
+ document. From Paul Eggert.
+
+ * acspecific.m4 (AC_PATH_X_XMKMF): Use ${MAKE-make}, not plain make.
+ (AC_C_CONST): Avoid a warning from g++.
+ From tgl@sss.pgh.pa.us (Tom Lane).
+ (AC_FUNC_MMAP): Check for valloc and getpagesize; don't rely on
+ predefines.
+ (AC_HEADER_STDC): If cross-compiling, assume the ctype macros are
+ ANSI. From dje@cygnus.com (Doug Evans).
+ (AC_TYPE_SIGNAL) [__cplusplus]: Give a full prototype.
+ From churritz@cts.com (Chad Hurwitz).
+ (AC_FUNC_VFORK): If cross-compiling, use AC_CHECK_FUNC instead.
+ From Steve Chamberlain.
+
+Tue Sep 5 20:37:48 1995 Paul Eggert <eggert@twinsun.com>
+
+ * acspecific.m4 (X_LIBS): Use `-R lib', not `-Rlib', since Sun
+ CC 3.0 requires this.
+
+Tue Aug 8 20:10:12 1995 Paul Eggert <eggert@twinsun.com>
+
+ * acgeneral.m4: When creating config.status, start a new
+ here-script just before building conftest.subs, to work around
+ a bug in the HP-UX 9 HP9000-800 sh.
+
+Tue Nov 21 17:36:41 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Makefile.in (install): Undo last ASCRIPTS panic change.
+ The bug reporter hadn't cleaned up his source dir.
+
+Mon Nov 20 15:26:50 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Version 2.6.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Prettify usage message somewhat.
+
+ * Makefile.in: Use @bindir@, @datadir@, @infodir@.
+ (install): Find ASCRIPTS in $(srcdir).
+
+Sat Nov 18 14:21:55 1995 Karl Berry <karl@cs.umb.edu>
+
+ * autoconf.sh: Allow lowercase letters in the undefined-macro name.
+
+Fri Nov 17 15:05:44 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * Version 2.5 released.
+
+Fri Nov 17 15:23:04 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Don't start tr argument with '+',
+ so as not to confuse old GNU tr's. From
+ Ian Lance Taylor.
+ (AC_INIT_PARSE_ARGS): Make sure MFLAGS and MAKEFLAGS are empty.
+ From Paul Townsend (aab@cc.purdue.edu).
+ (AC_CHECK_LIB, AC_CHECK_HEADERS, AC_CHECK_FUNC): Remove
+ duplicate `d' from alphabets.
+
+ * acspecific.m4 (AC_USG): Define USG if we don't have rindex and
+ bzero, not if we do have them.
+ From Viktor Dukhovni.
+
+Sun Oct 29 15:13:37 1995 Richard Stallman <rms@mole.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_PROG): Use arg 5 as search list, not arg 4.
+
+Wed Aug 30 17:34:48 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_CC_C_O): If $CC groks it and cc doesn't
+ exist, choose yes.
+
+Wed Jul 26 00:03:26 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Test release 2.4.2.
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF): Take an optional size to
+ use when cross-compiling.
+
+ * acspecific.m4 (AC_FUNC_CLOSEDIR_VOID, AC_DIR_HEADER): If
+ cross-compiling, assume it returns void. It's not a big loss.
+ From Karl Berry.
+
+ * acgeneral.m4 autoheader.sh: Change tr [a-z] [A-Z] into expansion
+ of the full alphabet, to combat losing AIX 4.1.1 tr when LANG
+ isn't set the way it likes.
+
+ * acspecific.m4 (AC_FUNC_GETMNTENT): Check in -lgen for Unixware.
+ From miguel@roxanne.nuclecu.unam.mx (Miguel de Icaza).
+
+ * autoheader.m4 (AC_CONFIG_HEADER): Set config_h to the first
+ argument. From ghudson@mit.edu (Greg Hudson).
+
+ * Makefile.in (all): Depend on info.
+
+ * acgeneral.m4 (AC_CHECK_PROG, AC_PATH_PROG, AC_CHECK_PROGS,
+ AC_PATH_PROGS, AC_CHECK_TOOL): Add optional PATH
+ parameter.
+
+Mon Jul 24 17:27:11 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Don't enclose tr args in [], for
+ SysV and POSIX. From Karl Heuer.
+
+Wed Jul 19 17:43:44 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Translate + to p in lib name.
+
+Wed Jun 28 13:45:16 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WITH): Allow an empty value
+ for --enable and --with args.
+ (AC_CACHE_CHECK): New macro.
+ * acspecific.m4: Use it where possible.
+
+Tue Jun 27 13:29:54 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS, AC_INIT_PREPARE): Add options
+ --bindir, --libdir, etc.
+
+Mon Jun 26 20:54:36 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_LANG_C, AC_LANG_CPLUSPLUS): Put the command
+ being run into the log file.
+
+Thu Jun 22 22:33:23 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_PROG_INSTALL): Don't cache a shell script path.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Allow lib name to contain a . or /,
+ by fixing the cache variable name.
+
+Wed Jun 14 23:07:20 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * Version 2.4.
+
+Sun May 7 08:09:12 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PATH_X_XMKMF): Check for libX11.{so,sl} as
+ well as .a when seeing whether LIBDIR or USRLIBDIR is right.
+
+Sat May 6 17:29:07 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_CPP): If CPP is already set, use that as
+ the value and set the cache variable to it.
+
+Mon Mar 27 10:48:36 1995 David J. MacKenzie <djm@churchy.gnu.ai.mit.edu>
+
+ * Version 2.3.
+
+ * acgeneral.m4 (AC_OUTPUT): Add quotes around the echo arguments
+ in the trap, so backslashes aren't required for multiline input.
+ From G.Wilford@ee.surrey.ac.uk.
+ Also use the sed trick when not using a config header file.
+
+Thu Mar 23 18:02:25 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_LANG_C, AC_LANG_CPLUSPLUS): Put "-c" right
+ after compiler name. Same for "-o conftest".
+
+ * ifnames.sh (AC_MACRODIR): Default to @datadir@, not a hardcoded
+ path.
+
+ * Test release 2.2.1.
+
+ * acgeneral.m4 (AC_OUTPUT): Use sed, not tr, so we only remove the
+ output config header, not the input one too. From
+ muessig@ipf.bau-verm.uni-karlsruhe.DE (Peter Muessig).
+ (AC_LANG_C): Undo Feb 7 change. According to Roland McGrath,
+ most compilers require all options but -l... and -o to come first.
+
+ * Makefile.in (uninstall): Don't use $@, since the cd makes it
+ invalid when srcdir is relative.
+
+Wed Mar 8 17:05:06 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * Version 2.2.
+
+Wed Mar 8 12:44:34 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Makefile.in: Follow cd commands with &&, not ;.
+ From Franc,ois Pinard.
+
+Tue Mar 7 11:48:19 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acspecific.m4 (AC_FUNC_ALLOCA): Keep sh variable name space
+ clean. Put newline after AC_DEFINE_UNQUOTED call to avoid Irix
+ syntax error.
+
+Mon Mar 6 15:07:00 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Test release 2.1.3.
+
+ * acspecific.m4 (AC_FUNC_ALLOCA): Replace nested AC_FUNC_CHECK
+ calls with a loop.
+
+ * acspecific.m4 (AC_FUNC_VPRINTF): Don't check for signal munging.
+ From Paul Eggert.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Tell the user whether the cache
+ changed or not. From gnu@toad.com (John Gilmore).
+
+ * Makefile.in (install-info): Don't cd, to avoid breaking
+ install-sh references.
+
+Fri Mar 3 11:41:01 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * Makefile.in (autoconf.info, standards.info): Use --no-split to
+ avoid creating filenames > 14 chars.
+
+ * acgeneral.m4 (AC_CHECK_FUNC): Use assert.h,
+ to avoid protype conflicts from ctype.h (!!) on OSF/1 3.0.
+
+Sat Feb 25 01:56:57 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_C_BIGENDIAN): Check for BYTE_ORDER macro from
+ sys/param.h before trying the test program which cannot be
+ cross-compiled.
+
+Fri Feb 24 20:02:08 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_FUNC): Include errno.h instead of ctype.h
+ in test program.
+
+Wed Feb 22 18:01:27 1995 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * Test release 2.1.2.
+
+Tue Feb 21 13:00:07 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CACHE_VAL): Add extra quotes to work around AIX
+ 4.1 bug reported by hyc@locus.com (Howard Chu).
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Check for -lelf before -lkvm.
+ Reported by Kaveh R. Ghazi.
+ (AC_HEADER_STAT): Check whether S_IFDIR is defined, to work around
+ ISC bug reported by rick@anasazi.com (Rick Coupland).
+
+ * autoheader.sh: Better solution to @BOTTOM@ printing.
+ From Paul Eggert.
+
+Mon Feb 13 18:13:11 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_CC_C_O): Use sed filter to make sure
+ ${ac_cc} is always a valid shell variable name.
+ (AC_PROG_MAKE_SET): Remove gratuitous backslashes in checking message.
+
+Sun Feb 12 18:42:35 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_TOOL_PREFIX): Require AC_CANONICAL_BUILD,
+ so both $build and $host are definitely set before we compare
+ them.
+
+Sat Feb 11 04:37:30 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_TOOL): Rewritten. Take optional third
+ arg VALUE-IF-NOT-FOUND. Check for
+ ${ac_tool_prefix}PROG-TO-CHECK-FOR first. If not found and third
+ arg given, and ${ac_tool_prefix} is nonempty, check for unadorned
+ PROG-TO-CHECK-FOR as well. Last choice use VALUE-IF-NOT-FOUND.
+
+Fri Feb 10 17:45:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT): Fix sed command to produce $ac_dots
+ for subdir configures.
+
+Thu Feb 9 14:42:20 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * testsuite/config/unix.exp (autoconf_load): Run the script with
+ /dev/null as the cache.
+
+ * acgeneral.m4 (AC_CHECK_TOOL_PREFIX, AC_CHECK_TOOL): New macros,
+ from Roland McGrath.
+
+ * acspecific.m4 (AC_DECL_YYTEXT): Cache the output file root.
+ (AC_C_INLINE): If the compiler doesn't recognize it, define it
+ away. Try __inline__ too. From Jim Avera.
+ (AC_FUNC_GETPGRP): New macro. From Arnold Robbins.
+ * acconfig.h: New entry for it.
+
+ * configure.in: Check for new awk.
+ * Makefile.in (editsh): Substitute in AWK.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Allow trailing slashes in PATH
+ elements.
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Ditto.
+
+Tue Feb 7 11:32:09 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_CHECK_LIB, AC_HAVE_LIBRARY): Check and add the new
+ library before existing libs, not after, in case it uses them.
+ * acspecific.m4 (AC_FUNC_GETLOADAVG, AC_FUNC_GETMNTENT,
+ AC_FUNC_STRFTIME, AC_DYNIX_SEQ, AC_IRIX_SUN, AC_SCO_INTL): Ditto.
+
+ * autoheader.sh: Allow @BOTTOM@ to be the first line in
+ acconfig.h. From iwj10@cus.cam.ac.uk (Ian Jackson).
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Add semicolons before
+ AC_DEFINE. Check for -lkvm before -lutil. Assume it needs setgid
+ if using -lutil.
+
+ * acgeneral.m4 (ac_compile, ac_link): Put the file name before the
+ variables, so they can contain -l options.
+
+ * acspecific.m4 (AC_FUNC_WAIT3): Sleep longer for HPUX.
+ (AC_TYPE_SIGNAL): Declare signal as extern "C" for C++.
+
+ * Makefile.in testsuite/Makefile.in (maintainer-clean): Renamed
+ from realclean.
+
+ * autoconf.sh (TMPDIR): Inherit from environment, or set if not.
+
+ * acgeneral.m4 (AC_PREFIX_PROGRAM): Say we're checking the prefix.
+
+ * acspecific.m4 (AC_ISC_POSIX): Fix typo.
+ (AC_PATH_X): Screen out bogus values from imake.
+ (AC_PROG_LEX): Check for yywrap, not main, in the library.
+
+Thu Feb 2 11:32:07 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acconfig.h (__CHAR_UNSIGNED): Protect with #ifndef.
+ From marcus@ee.pdx.edu (Marcus Daniels).
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Workaround Ultrix and 4.3BSD sh
+ bug in setting the high bit on variable values.
+ From Ken Raeburn.
+ (AC_OUTPUT_FILES, AC_OUTPUT_SUBDIRS): Ignore initial "./" to
+ avoid messing up the dot-dot counts.
+ (AC_OUTPUT_SUBDIRS): Pass INSTALL magic to subdirectories.
+ From Karl Berry.
+
+ * ifnames.sh: Speed up drastically by folding 3N+2 processes into 2.
+ From Paul Eggert.
+
+Wed Feb 1 11:58:27 1995 David J. MacKenzie <djm@catapult.va.pubnix.com>
+
+ * acgeneral.m4 (AC_ARG_ENABLE, AC_ARG_WITH): Add additional
+ quoting for internal consistency.
+ From junio@twinsun.COM (Jun Hamano).
+
+ * acspecific.m4 (AC_PATH_XTRA): R6 function name was wrong.
+ From Karl Berry.
+ (AC_C_CROSS): Fix typo in cache var name.
+ From tgl@sss.pgh.pa.us (Tom Lane).
+ (AC_PROG_MAKE_SET): Change / in the make program name into _ so it
+ can be part of a shell variable name.
+ (AC_DECL_YYTEXT): Fix arguments to AC_TRY_LINK.
+ From interran@uluru.stanford.edu (John Interrante).
+
+ * acgeneral.m4 (AC_CHECK_SIZEOF): If test program fails, set the
+ variable to 0 as the doc sez.
+ From eisen@cc.gatech.edu (Greg Eisenhauer).
+
+ * acgeneral.m4, acspecific.m4: Remove *.core and core.* as well as
+ core, for recent BSD's.
+
+ * acspecific.m4 (AC_SYS_INTERPRETER): Use `#! /' instead of `#!/'.
+ * acgeneral.m4 (AC_INIT_BINSH): Likewise.
+ * All scripts: likewise.
+ From woods@kuma.web.net (Greg A. Woods).
+
+ * acgeneral.m4 (AC_INIT_PREPARE): Use fd 6 instead of 4, to
+ prevent a conflict on the Kubota Titan. From
+ muessig@ipf.bau-verm.uni-karlsruhe.DE (Peter Muessig).
+
+ * autoconf.sh: Use a more concise syntax to set variables.
+ From Karl Berry.
+
+ * acspecific.m4 (AC_FUNC_WAIT3): Check page fault measurements to
+ catch Linux. From tobias@server.et-inf.fho-emden.de (Peter Tobias).
+
+ * acgeneral.m4 (AC_OUTPUT): If running config.status
+ fails, exit with a nonzero status. From Ken Raeburn.
+
+Tue Dec 6 19:07:07 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_FUNC_GETLOADAVG): Use elf_begin in -lelf
+ check, not elf_read.
+
+Mon Nov 7 18:18:11 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_PROG_MAKE_SET): Fix msg; $MAKE is not useful
+ Make syntax.
+
+Fri Nov 4 09:08:33 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * Version 2.1.
+
+ * autoreconf.sh: Add -f --force option.
+ From Theodore Ts'o.
+
+Thu Nov 3 10:24:08 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_TRY_RUN): Reword warning.
+
+ * acspecific.m4 (AC_PROG_CXX): Notify the user of the check for
+ GNU C++.
+ (AC_PROG_CXX, AC_PROG_CXXCPP): Use g++, not gcc, as default C++
+ compiler.
+ * acgeneral.m4 (AC_LANG_CPLUSPLUS): Ditto.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Move ac_usage string directly
+ into the here document to work around A/UX shell limitation.
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Mention the MSG macros in the
+ obsolete warning.
+
+ * autoscan.pl (output_programs): Use AC_CHECK_LIB, not
+ AC_HAVE_LIBRARY.
+
+ * acgeneral.m4 (AC_CHECK_FUNC): Move prototype outside of function
+ so it works with C++. From ejb@era.COM (E. Jay Berkenbilt).
+
+Fri Oct 28 11:23:30 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_CHECK_HEADERS_DIRENT): Use define, not
+ AC_DEFUN, so the test suite doesn't call it with no arguments,
+ leading to a syntax error in the real Bourne shell.
+
+Wed Oct 26 18:40:41 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * Version 2.0.
+
+Tue Oct 25 11:04:16 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_CHECK_HEADER, AC_CHECK_HEADERS): Change -
+ in file names to _.
+ * acspecific.m4 (AC_CHECK_HEADER_DIRENT, AC_CHECK_HEADERS_DIRENT):
+ Likewise.
+
+Mon Oct 24 11:28:20 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * Makefile.in (uninstall): Remove the transformed names.
+ (SCRIPTS): Rename from PROGS.
+ * configure.in: Likewise.
+
+Fri Oct 21 07:14:23 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_TRY_COMPILE): New macro.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS): Set $ac_compile.
+ (AC_TRY_LINK): Don't declare exit.
+ * acspecific.m4 (AC_C_INLINE, AC_C_CONST, AC_CHECK_HEADER_DIRENT,
+ AC_DECL_SYS_SIGLIST, AC_HEADER_SYS_WAIT, AC_TYPE_SIGNAL,
+ AC_FUNC_GETLOADAVG, AC_HEADER_TIME, AC_STRUCT_TM,
+ AC_STRUCT_TIMEZONE, AC_STRUCT_ST_BLOCKS, AC_STRUCT_ST_BLKSIZE,
+ AC_STRUCT_ST_RDEV): Use AC_TRY_COMPILE instead of AC_TRY_LINK.
+ (AC_AIX, AC_MINIX, AC_ISC_POSIX): Must come before AC_TRY_COMPILE.
+
+ * acspecific.m4 (AC_PROG_LEX): Don't assume -ll if using lex;
+ check for it. From Mark Eichin.
+
+Thu Oct 20 07:11:22 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_PARSE_ARGS): Ignore --site.
+
+ * autoscan.pl: Add more blank lines to the output. Pacify perl -w.
+
+Wed Oct 19 09:14:50 1994 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_PREREQ_COMPARE): Allow secondary and ternary
+ numbers >99. From John Eaton.
+
+Wed Oct 19 00:06:40 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * ifnames.sh: Take comments out of sed script.
+
+Tue Oct 18 00:20:04 1994 David J. MacKenzie <djm@duality.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_INIT_NOTICE): Set ac_default_prefix.
+ (AC_INIT_PARSE_ARGS, AC_SITE_LOAD, AC_OUTPUT): Use it.
+ (AC_PREFIX_DEFAULT): New macro.
+ From Ken Raeburn.
+
+ * testsuite/autoconf.s/syntax.exp: Renamed from specific.exp.
+
+ * acgeneral.m4 (AC_SITE_LOAD): Change where to look for config.site.
+
+ * configure.in: Call AC_ARG_PROGRAM.
+ * Makefile.in (install): Use program_transform_name.
+
+ * acgeneral.m4 acspecific.m4 acoldnames.m4: Clarify copying terms.
+
+ * acgeneral.m4 (AC_CANONICAL_BUILD): Default build to host, not empty.
+
+ * acspecific.m4 (AC_PROG_CC): Recognize NeXT cpp as GNU C.
+ From tom@basil.icce.rug.NL (Tom R.Hageman).
+
+Mon Oct 17 18:25:53 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PROG_CPP): Use assert.h (comes with gcc), not
+ stdio.h (loses for new cross-compilers). From Roland McGrath.
+
+Tue Oct 11 13:22:22 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PATH_XTRA): Add X_PRE_LIBS variable and assume
+ -lSM if -lICE is found. From Karl Berry.
+
+Mon Oct 3 20:12:36 1994 David J. MacKenzie (djm@duality.gnu.ai.mit.edu)
+
+ * testsuite/Makefile.in (AUTOCONF, AUTOCONFFLAGS): Test
+ ../autoconf, not installed autoconf.
+
+Sat Oct 1 04:43:43 1994 Paul Eggert <eggert@twinsun.com>
+
+ * acspecific.m4: Catch `const' bug in NEC SVR4.0.2 mips cc.
+
+ * Makefile.in (.sh, .pl, configure): Do chmod before mv.
+
+ * acheaders, acspecific.m4 (AC_HEADER_SYS_WAIT): New entry.
+
+ * acconfig.h (HAVE_SYS_WAIT_H): New entry.
+
+Wed Sep 28 08:59:01 1994 David MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * Makefile.in: Set datadir to $(prefix)/share.
+
+Tue Sep 27 08:00:38 1994 David MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * Makefile.in: Use implicit rules to make scripts.
+ From Jim Meyering.
+
+ * acconfig.h: Remove #undefs of unused symbols.
+ From Paul Eggert.
+ * testsuite/autoconf.s/defines.exp: New file.
+ * testsuite/autoconf.s/specific.exp: Extract the list of macros to
+ test from acspecific.m4 instead of hardcoding it.
+ * acspecific.m4 (AC_PROG_CXXCPP): Default CXX to gcc, not c++.
+
+Mon Sep 26 12:32:46 1994 David MacKenzie <djm@churchy.gnu.ai.mit.edu>
+
+ * acspecific.m4 (AC_HEADER_DIRENT): Only check for -lx if not
+ using dirent.
+ * autoreconf.sh: Shorten sed label for OSF/1.
+ * acgeneral.m4 acspecific.m4: Change licensing terms for output.
+
+Thu Sep 22 15:36:56 1994 David MacKenzie <djm@churchy.gnu.ai.mit.edu>
+
+ * autoconf.sh (tmpin): Always set.
+
+Wed Sep 21 13:12:10 1994 David MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_INIT_PREPARE): Remove trailing slashes from
+ srcdir.
+
+Mon Sep 19 17:11:39 1994 David MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_INIT, AC_INIT_PARSE_ARGS, AC_CANONICAL_SYSTEM,
+ AC_ARG_PROGRAM): Make the default for program_transform_name be
+ a valid sed script, and substitute it always.
+
+Sat Sep 17 08:27:58 1994 David MacKenzie <djm@geech.gnu.ai.mit.edu>
+
+ * autoheader.sh: Protect `for' loop from checking empty $syms.
+
+ * ifnames.sh: Use % instead of , as sed s separator.
+
+ * autoscan.pl: Update output comments.
+
+Fri Sep 16 11:20:02 1994 David MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_TYPE_GETGROUPS): Provide a cross compiling
+ default. From Jim Meyering.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Document
+ --program-transform-name.
+
+Thu Sep 15 16:26:36 1994 David MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_INIT_NOTICE): Clarify copying notice.
+ Fix up comments between sections.
+
+ * acspecific.m4 (AC_PROG_LEX): Omit extra checking message.
+
+ * autoreconf.sh: Give usage if non-option args are given.
+ * autoconf.sh autoheader.sh: Define AC_LOCALDIR for configure.in.
+
+Thu Sep 15 11:31:13 1994 Ian Lance Taylor (ian@airs.com)
+
+ * Makefile.in (check): Set AUTOCONFFLAGS from srcdir, not objdir.
+
+Thu Sep 15 09:06:40 1994 David MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_MSG_ERROR): Say that it's an error in the message.
+
+ * Makefile.in (check): Copy install-sh from srcdir if needed.
+
+ * autoreconf.sh: Only regenerate autoheader-generated header file
+ templates. Pass relative macrodir properly.
+ * autoconf.sh autoheader.sh autoreconf.sh: Add -l --localdir option.
+ Based on work by Mark Eichin.
+
+ * ifnames.sh: Add -h option.
+ * autoconf.sh autoheader.sh: Remove -v option.
+
+ * acgeneral.m4 (AC_CHECK_TYPE): Require AC_HEADER_STDC and check
+ stdlib.h if present.
+
+ * acgeneral.m4 (AC_OUTPUT): Protect cache save from interruptions.
+
+Tue Sep 13 09:46:23 1994 David J. MacKenzie (djm@churchy.gnu.ai.mit.edu)
+
+ * Makefile.in (install): Use srcdir. From Mark Eichin.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Automatically add
+ configure_input comment to Makefiles again.
+ * Makefile.in testsuite/Makefile.in: Remove configure_input ref.
+
+ * acgeneral.m4 (AC_LINK_FILES, AC_OUTPUT_LINKS): Reverse the order
+ of the arguments. Support relative symlinks.
+
+ * acgeneral.m4 acspecific.m4: Remove some gratuitous {} in shell
+ variable references.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): New output variable
+ configure_input replaces big kludge for adding output comment.
+ * Makefile.in, testsuite/Makefile.in: Use it.
+
+Mon Sep 12 23:06:08 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_INIT_PREPARE, AC_OUTPUT_SUBDIRS): Make command
+ line quoting work for shell metachars besides blanks.
+
+Sun Sep 11 23:34:24 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_PATH_XTRA): Link with X_EXTRA_LIBS when
+ checking for -lSM.
+
+ * acfunctions (memcmp): Use AC_FUNC_MEMCMP. From Paul Eggert.
+
+ * acgeneral.m4 (AC_COMPILE_CHECK): Mark obsolete.
+
+Sat Sep 10 10:59:19 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * Makefile.in (DISTFILES): Include install-sh, not install.sh.
+
+ * autoscan.pl: Check AC_MACRODIR.
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS, AC_INIT_PREPARE,
+ AC_CONFIG_SUBDIRS, AC_OUTPUT_SUBDIRS): Make quoting of command
+ line options work.
+ (AC_CONFIG_AUX_DIRS): Check for install-sh over install.sh.
+
+ * acspecific.m4 (AC_FUNC_GETMNTENT): Only check for second lib if
+ first lib isn't found. From Jim Meyering.
+
+Fri Sep 9 10:41:42 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_FUNC_MEMCMP): New macro, from Jim Meyering.
+ * testsuite/autoconf.s/specific.exp: Test it.
+
+ * testsuite/Makefile.in (site.exp): Simplify.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Use a shorter syntax for setting
+ the variables. Idea from Karl Berry.
+ (AC_CHECK_FUNCS, AC_CHECK_HEADERS): Take an action-if-not-found.
+ From Jim Meyering.
+
+ * acconfig.h: Add entries for getmntent and strftime.
+ * acspecific.m4 (AC_C_CHAR_UNSIGNED): If GCC, don't run a test
+ program.
+
+Thu Sep 8 10:53:53 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_USG): Was passing too many args to AC_TRY_LINK.
+ (AC_FUNC_STRFTIME, AC_FUNC_GETMNTENT): New macros.
+ (AC_HEADER_DIRENT): Check for Xenix dir libs.
+ (AC_XENIX_DIR, AC_SCO_INTL, AC_IRIX_SUN, AC_DYNIX_SEQ, AC_AIX,
+ AC_ISC_POSIX, AC_MINIX): Go back to the v1 names.
+ * acoldnames.m4: Delete their aliases.
+ * testsuite/autoconf.s/specific.exp: Check them.
+
+ * acgeneral.m4 (AC_ARG_PROGRAM): Use `;' instead of `-e' to
+ separate sed arguments, to simplify Makefile usage and support
+ sed arguments containing spaces.
+ (AC_CANONICAL_HOST): Move check for config.sub here from
+ AC_CANONICAL_SYSTEM.
+
+ * autoheader.m4 (AC_CHECK_HEADERS_DIRENT): Redefine. From Paul Eggert.
+ (AC_CHECK_SIZEOF): Redefine this, not the old name.
+ (AC_HAVE_LIBRARY): Redefine.
+
+Wed Sep 7 09:32:31 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * testsuite/lib/common.exp: Ignore warnings about test programs.
+ * testsuite/autoconf.s/specific.exp: Check AC_FUNC_CLOSEDIR_VOID.
+
+ * Makefile.in (*clean): Remove the new index.
+ (dist): Undo adding write perms. Screws up RCS.
+ * acgeneral.m4 (AC_OUTPUT_MAKE_DEFS): Remove comments from sed
+ program.
+ * acoldnames.m4: Change a couple of AC_DEFUN to define.
+
+Wed Sep 7 01:27:19 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_SITE_LOAD): Check whether $CONFIG_SITE is empty.
+
+Tue Sep 6 09:55:30 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_ARG_PROGRAM): New macro.
+ (AC_INIT_PARSE_ARGS, AC_CANONICAL_SYSTEM): Do a little setup for it.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Clarify comment. Remove check
+ for bsdinst, since it's no better than our install.sh.
+ (AC_CHECK_HEADER_DIRENT, AC_CHECK_HEADERS_DIRENT): New macros.
+ (AC_HEADER_DIRENT, AC_DIR_HEADER): Use them.
+ (AC_PROG_CC, AC_PROG_CXX): Check whether GCC accepts -g.
+
+ * acgeneral.m4 (AC_INIT_PREPARE): Call AC_PROG_ECHO_N.
+ Use define instead of AC_DEFUN for some frequently called or
+ internal macros that aren't involved in ordering constraints.
+
+Mon Sep 5 17:37:36 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_C_CROSS): Provide default argument to AC_TRY_RUN.
+
+Fri Sep 2 09:30:41 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TRY_CPP): Use a temp file so sh -x works.
+ From Mark Nudelman.
+
+ * acgeneral.m4: --norecursion -> --no-recursion.
+ (AC_OUTPUT_LINKS): Reset srcdir to ac_given_srcdir.
+
+ * acspecific.m4 (AC_PATH_X): Call AC_ARG_WITH(x, ...).
+ (AC_PROG_INSTALL): Search for bsdinst too.
+
+ * Makefile.in (dist): Make distribution files writable.
+
+ * acgeneral.m4 (AC_OUTPUT): Move trap 0 commands to near the end
+ of configure, to work around shell bug in failing to execute the
+ trap when there are commands after AC_OUTPUT.
+
+Sat Sep 3 19:47:06 1994 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Write CONFIG_FILES defn
+ unquoted, so $1 can contain references to shell variables in configure.
+
+Thu Sep 1 15:34:15 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TRY_RUN): Always warn if no cross-compile
+ default is given.
+ * acspecific.m4 (AC_FUNC_MMAP, AC_FUNC_VFORK, AC_FUNC_WAIT3,
+ AC_FUNC_UTIME_NULL, AC_FUNC_STRCOLL): Provide a default
+ for AC_TRY_RUN.
+ (AC_FUNC_CLOSEDIR_VOID): New macro, broken out of AC_HEADER_DIRENT.
+
+Thu Sep 1 00:06:38 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 acspecific.m4: Discard all output until AC_INIT is
+ called. Remove now-unnecessary dnl's between macro definitions.
+ (AC_OUTPUT): Add exit 0 and optional unquoted here document to
+ end of config.status.
+
+Wed Aug 31 00:11:28 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_PATH_X_DIRECT): Use AC_TRY_LINK instead of
+ AC_CHECK_LIB, so we don't add the library to $LIBS or print anything.
+ (AC_PATH_XTRA): Remove initial checking message.
+ (AC_HEADER_STDC): In test program, default to no STDC headers if
+ cross compiling.
+
+Tue Aug 30 16:16:29 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * autoreconf.sh: Add -h option.
+ * autoupdate.sh: Remove -v option.
+
+ * acgeneral.m4 (AC_EGREP_CPP, AC_TRY_CPP): Add parens around eval
+ for old shells. From Kaveh Ghazi.
+ (AC_TRY_RUN): Warn when generating configure, if called without
+ a default parameter and AC_CANONICAL_SYSTEM has been called.
+
+ * autoheader.sh: Don't run `for' loops on empty lists.
+ From Ken Raeburn.
+
+ * autoconf.sh autoheader.sh: Print the version number using grep
+ like the other scripts, not using m4.
+ * acgeneral.m4: Remove conditional for printing version number.
+ It broke with frozen files.
+
+ * autoheader.m4: New file.
+ * autoheader.sh: Use it; the frozen version if possible.
+ * Makefile.in (install): Install a frozen autoheader.m4f if possible.
+ * autoconf.m4: Don't sinclude acsite.m4 here.
+ * acgeneral.m4 (AC_INIT): Include it here.
+
+Tue Aug 30 14:02:07 1994 David J. MacKenzie (djm@mole.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use AC_DEFINE_UNQUOTED.
+ From Jim Meyering.
+
+ * acgeneral.m4: Revise diversions, to topologically order
+ macros called via AC_REQUIRE.
+ (AC_DIVERT_PUSH, AC_DIVERT_POP): New macros.
+ (AC_INIT, AC_ARG_ENABLE, AC_ARG_WITH, AC_SUBST, AC_SUBST_FILE,
+ AC_REQUIRE): Use them.
+ From Franc,ois Pinard (bless his soul!).
+ (AC_PRO, AC_EPI): New macros.
+ (AC_DEFUN): Use them.
+ (AC_INIT): sinclude aclocal.m4 herea.
+ * autoconf.m4: Not here.
+
+ * autoconf.sh: Use a freeze file if available and m4 can do it.
+ * Makefile.in (install): Install a freeze file if m4 supports it.
+
+Mon Aug 29 16:18:22 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_TRY_CPP): Remove subshell and move quotes.
+
+Sun Aug 28 17:37:26 1994 David J. MacKenzie (djm@bennett.eng.umd.edu)
+
+ * acspecific.m4 (AC_C_CHAR_UNSIGNED, AC_C_LONG_DOUBLE,
+ AC_C_INLINE): Don't AC_REQUIRE AC_PROG_CC.
+
+ * acspecific.m4 (AC_RSH, AC_ARG_ARRAY, AC_HAVE_POUNDBANG): Define
+ to print error messages.
+
+ * acgeneral.m4 (AC_OUTPUT_LINKS): Insert ac_links and ac_files
+ into config.status using an *un*quoted here document.
+ From Ken Raeburn.
+
+Sat Aug 27 13:31:58 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): Remove comments from within sed
+ script. From Kaveh Ghazi.
+
+Fri Aug 26 17:03:18 1994 David J. MacKenzie (djm@geech.gnu.ai.mit.edu)
+
+ * autoconf.sh, acgeneral.m4: __LINE__ -> __oline__.
+
+ * acgeneral.m4 (AC_TRY_CPP, AC_EGREP_CPP): Append any error output
+ to config.log.
+ (AC_EGREP_CPP): Don't use a temp file.
+
+ * acspecific.m4 (AC_FUNC_ALLOCA): Require CPP.
+
+ * acgeneral.m4 (AC_INIT_PREPARE): Replace AC_SUBST_DEFAULT calls
+ with AC_SUBST.
+ (AC_SUBST_DEFAULT): Macro removed.
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_CXX): If CFLAGS or CXXFLAGS
+ was not set already, give it a default value according to whether
+ we have gcc.
+
+ * acspecific.m4 (AC_PATH_XTRA): Use AC_CHECK_LIB, not AC_HAVE_LIBRARY.
+
+Fri Aug 26 00:34:11 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acconfig.h (HAVE_UNION_WAIT): Entry removed; it wasn't defined
+ anywhere.
+
+ * acgeneral.m4 (AC_OUTPUT_HEADER): rm files before mv onto them.
+ (AC_OUTPUT): Remove explicit exit at end of configure, to allow
+ code after AC_OUTPUT (needed for Emacs).
+
+ * acgeneral.m4 (AC_CANONICAL_SYSTEM): Move setting of alias vars
+ into submacros.
+
+ * acspecific.m4 (AC_PROG_CPP): If $CPP is set and is a directory,
+ ignore it.
+
+Thu Aug 25 09:26:36 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_SYS_INTERPRETER): Move hash mark out of macro
+ call.
+ (AC_FUNC_MMAP): If C++, put malloc decls in extern "C".
+
+ * acgeneral.m4 (AC_INIT_PARSE_ARGS): Untabify help message
+ and indent options.
+
+ * Makefile.in (DISTFILES): Remove ChangeLog.0.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Do uppercasing of library name at
+ runtime.
+ (AC_HAVE_LIBRARY): Retain old behavior.
+
+ * acspecific.m4 (AC_FUNC_VFORK): If C++, use a prototype for the
+ function in the test program.
+ (AC_C_ARG_ARRAY): Macro deleted.
+ * acoldnames.m4, acconfig.h, testsuite/autoconf.s/specific.exp:
+ Remove references to it.
+
+ * autoupdate.sh: Make sure $infile can be read, and $tmpout has
+ the same permissions. Make sure $infile can be written. From
+ Paul Eggert.
+
+ * acgeneral.m4 (AC_INIT*): Remove now-incorrect AC_BEFORE calls.
+ (AC_CHECK_FUNC): If C++, use extern "C".
+ (AC_TRY_LINK, AC_TRY_RUN): If C++, declare exit.
+
+ * acspecific.m4 (AC_PATH_XTRA): Check for more libraries.
+ From Karl Berry.
+
+ * acgeneral.m4 (AC_INIT_PREPARE): Substitute CPPFLAGS.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS): Include CPPFLAGS in the commands.
+
+ * acgeneral.m4 (AC_OUTPUT_FILES): Move protection for right side
+ of sed substitution here from AC_MAKE_DEFS, so it applies to all
+ AC_SUBST'd variables.
+
+ * Makefile.in (install): Use for loops. From Jim Meyering.
+
+ * acgeneral.m4: Revise diversions to rely on implicit flushing at
+ the end of the m4 run. Idea from Franc,ois Pinard.
+ (AC_INIT_PREPARE, AC_ARG_ENABLE, AC_ARG_WITH, AC_PREFIX_PROGRAM):
+ Write to the appropriate diversions.
+ (AC_ENABLE, AC_WITH): Supply default help string.
+ (AC_ENABLE_INTERNAL, AC_WITH_INTERNAL, AC_PREFIX_INTERNAL):
+ Macros removed.
+ (AC_CONFIG_SUBDIRS): Set `subdirs' here instead of in
+ AC_INIT_PREPARE.
+ (AC_PREFIX): Macro removed.
+ * acoldnames.m4 (AC_PREFIX): Make it an alias for AC_PREFIX_PROGRAM.
+
+ * acoldnames.m4: We don't officially support calling
+ the subroutines of AC_INIT directly, or replacing them, so don't
+ document it.
+
+Wed Aug 24 00:19:05 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 (AC_EGREP_CPP, AC_TRY_LINK, AC_TRY_RUN,
+ AC_TRY_CPP): Add #line directives.
+ * autoconf.sh: Make the #line directives accurate.
+ From Franc,ois Pinard.
+
+ * acgeneral.m4 (AC_OUTPUT): Set ac_given_INSTALL from INSTALL.
+ (AC_SUBST_FILE): Replace with what was AC_INSERT_FILE.
+ (AC_SUBST_DEFAULT): New macro.
+ (AC_INIT_BINSH): Renamed from AC_BINSH.
+ (AC_INIT_PREPARE): Call AC_SUBST_DEFAULT for CFLAGS, CXXFLAGS, and
+ LDFLAGS.
+
+ * acspecific.m4 (AC_HEADER_MAJOR): Don't nest caching tests.
+
+ * Makefile.in (clean): Remove the new index files.
+
+ * configure.in: Check for gm4 before gnum4.
+
+ * acspecific.m4 (AC_PROG_RSH): Macro removed.
+
+ * Makefile.in (install): Install autoconf.m4.
+
+ * acspecific.m4 (AC_SYS_INTERPRETER): New name and calling
+ convention for AC_HAVE_POUNDBANG.
+ (AC_OS_XENIX): Check ac_header_dir instead of DEFS.
+
+ * testsuite/autoconf.s/specific.exp: Add AC_HEADER_DIRENT.
+ Remove AC_SYS_REMOTE_TAPE. Replace AC_HAVE_POUNDBANG with
+ AC_SYS_INTERPRETER.
+
+ * acspecific.m4 (AC_INT_16_BITS, AC_LONG_64_BITS): Reword messages.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Use our standard alternate m4 quote
+ characters << and >> instead of /.
+
+ * acspecific.m4 (AC_C_CONST, AC_TYPE_GETGROUPS,
+ AC_PROG_GCC_TRADITIONAL): Don't put the test program in a
+ temporary variable.
+
+ * acgeneral.m4 (AC_CHECK_HEADERS, AC_CHECK_FUNCS): Use
+ AC_DEFINE_UNQUOTED.
+ * autoheader.sh (AC_DEFINE_UNQUOTED): Define.
+
+Tue Aug 23 00:03:06 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4: Improve comments on some macros.
+ Fix improperly quoted undefine calls.
+ (AC_QUOTE_DQUOTE, AC_QUOTE_SQUOTE, AC_QUOTE_HERE, AC_QUOTE_SED,
+ AC_QUOTE_TOKEN, AC_DEFINE_QUOTE, AC_DEFINE_SEDQUOTE,
+ AC_QUOTE_IDENTITY): Macros removed.
+ (AC_DEFINE, AC_DEFINE_UNQUOTED): Only write the (correct) value to
+ confdefs.h.
+ (AC_OUTPUT_MAKE_DEFS): New macro.
+ (AC_OUTPUT): Call it. Move AC_SUBST calls to AC_INIT_PREPARE.
+ (AC_OUTPUT_FILES): Put most variable substitutions in a here document
+ instead of a string, to avoid unwanted changes to the values.
+ (AC_OUTPUT_HEADER): Generate the sed script to transform
+ config.h.in from conftest.h. Only split up the sed script in
+ configure, not also in config.status.
+
+ * acspecific.m4 (AC_PROG_ECHO_N): Work around some greps lacking -e.
+
+ * acspecific.m4 (AC_PATH_X, AC_PATH_X_XMKMF, AC_PATH_X_DIRECT,
+ AC_PATH_XTRA): Fix cache use and message printing.
+
+ * acgeneral.m4 (AC_SITE_LOAD): Check env var CONFIG_SITE first.
+ (AC_OUTPUT_HEADER): New macro broken out of AC_OUTPUT.
+
+ * acgeneral.m4, acspecific.m4 (AC_FD_MSG, AC_FD_CC): New
+ symbolic constants.
+
+ * acgeneral.m4, acoldnames.m4 (AC_INIT_PARSE_ARGS): Renamed from
+ AC_INIT_PARSEARGS.
+
+ * autoupdate.sh: Use $SIMPLE_BACKUP_SUFFIX, if set.
+
+ * autoheader.sh (AC_CHECK_LIB): Reflect the added arg.
+
+ * autoconf.m4: New file.
+ * Makefile.in (DISTFILES): Add it.
+ * autoconf.sh, autoheader.sh, Makefile.in: Use it.
+
+ * acspecific.m4 (AC_SYS_REMOTE_TAPE): Macro removed.
+
+ * acfunctions, acheaders, acidentifiers, acmakevars, acprograms,
+ autoscan.pl: Use new macro names.
+
+ * acgeneral.m4 (AC_MSG_ERROR): Enclose within {} so it acts like a
+ single statement. From mjshield@nyx.cs.du.edu (Michael Shields).
+ (AC_CHECK_FUNCS, AC_CHECK_HEADERS): Only compute the uppercase
+ name if we're going to define that symbol.
+ (global): Remove AC_DIVERSION_VAR.
+ (AC_OUTPUT): Adjust quoting and substitutions to replace most
+ variable values directly in the sed script. Handle srcdir,
+ top_srcdir, and INSTALL specially.
+ Add .cpp and .hpp to c-ish suffixes list.
+
+ * configure.in: Use the new macro names.
+
+ * ChangeLog.0: New file, broken out of ChangeLog.1.
+ * Makefile.in (DISTFILES): Add it.
+
+ * autoupdate.sh: Update the regexps to account for changes to
+ acoldnames.m4.
+
+Mon Aug 22 23:57:18 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * testsuite/autoconf.s/specific.exp: Use new macro names.
+
+Fri Aug 12 10:15:51 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_HEADER_DIRENT, AC_DIR_HEADER): Use one cache
+ variable for each header file, not one for all of them.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Print a message noting when cache
+ is unwritable.
+ (AC_CHECK_FUNCS, AC_CHECK_HEADERS): Take an optional arg to
+ execute on a match.
+
+ * acspecific (AC_OS_AIX, AC_OS_MINIX, AC_OS_ISC): Don't need to be
+ called before AC_TRY_CPP, since that doesn't use CFLAGS.
+
+ * acgeneral.m4 (AC_CHECK_PROG, AC_PATH_PROG): Print a result
+ whether or not we found the program.
+ (AC_CHECKING): Not obsolete.
+ (AC_WITH, AC_ENABLE, AC_INIT_PREPARE): Merge the --enable and
+ --with diversions.
+
+ * acgeneral.m4 (AC_DEFUN): New macro.
+ Use it globally to define macros that are used as functions,
+ as opposed to macros that are used as variables. Remove calls to
+ AC_PROVIDE.
+
+Thu Aug 11 08:25:08 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_OS_XENIX): Fix assignments. From Franc,ois
+ Pinard.
+ (AC_SYS_REMOTE_TAPE): Fix typo.
+
+Wed Aug 10 09:30:11 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_C_CHAR_UNSIGNED): Don't lie about the result
+ if gcc, just ignore it.
+
+ * acgeneral.m4 (AC_CHECK_LIB): Add a function argument.
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Make it a wrapper around
+ AC_CHECK_LIB.
+ * acoldnames.m4: Remove its alias.
+ * acspecific.m4: Add argument to callers.
+
+ * acspecific.m4 (AC_PROG_ECHO_N): Move from acgeneral.m4 AC_MSG_ECHO_N.
+ * acgeneral.m4: Callers changed.
+
+ * acgeneral.m4 (AC_CACHE_LOAD, AC_CACHE_SAVE, AC_SITE_LOAD,
+ AC_MSG_CHECKING): Aesthetic changes to messages, suggested by
+ Franc,ois Pinard.
+
+ * acspecific.m4 acgeneral.m4 acoldnames.m4: Rename
+ AC_TRY_CROSS to AC_C_CROSS.
+
+ * acgeneral.m4 (AC_INIT_PARSEARGS): Don't mention --verbose in
+ help message.
+ (AC_INIT_PREPARE): Use file descriptor 5 for config.log, and 6 for
+ nothing. --verbose no longer does anything.
+ (AC_MSG_ECHO_N): New macro.
+ (AC_MSG_CHECKING, AC_MSG_RESULT, AC_CACHE_VAL): Require it and use
+ the shell variables it sets.
+ (AC_MSG_RESULT, AC_VERBOSE): Print unless --silent/--quiet is given,
+ not only when --verbose is given.
+ (AC_DEFINE): Don't echo anything.
+ (AC_CACHE_VAL): Use a custom echo instead of AC_MSG_RESULT.
+ * acgeneral.m4 (AC_CHECKING, AC_VERBOSE): Put back real versions,
+ marked obsolete.
+ * acoldnames.m4: Delete their aliases.
+ * acgeneral.m4, acspecific.m4 (many macros): Make sure each call
+ to AC_MSG_CHECKING has exactly one matching AC_MSG_RESULT, and
+ make the result messages make sense with the checking messages.
+
+ * acgeneral.m4 (AC_OUTPUT_SUBDIRS): Use echo, not AC_MSG_RESULT,
+ to print recursion notice.
+
+Tue Aug 9 00:17:28 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Add comment mentioning config.log.
+
+ * ChangeLog.1: File split out of ChangeLog.
+ * Makefile.in (DISTFILES): Add it.
+
+ * acgeneral.m4 (AC_OUTPUT, AC_OUTPUT_HEADER), autoheader.sh:
+ Support optional input-file specification in output-file names.
+ * autoheader.sh: Support top and bottom comments for config.h.in
+ in acconfig.h.
+
+ * acgeneral.m4, README: Say more about requiring GNU m4.
+
+ * autoheader.sh: In the list of symbols to get template entries
+ for, start each symbol with a blank.
+
+ * autoupdate.sh: Add sed substitutions for replacing macro
+ calls without parameters.
+
+ * acgeneral.m4 (AC_CACHE_VAL): Omit the cache var name from the
+ result message.
+
+ * acspecific.m4 (AC_DIR_HEADER): Define to be similar to
+ AC_HEADER_DIRENT, but only define the old cpp macros.
+ (AC_HEADER_DIRENT): Only define the new ones.
+ * acoldnames.m4: Don't say that those two macros are synonyms.
+ * acconfig.h: Add the new cpp macros. Add <> to some comments.
+
+ * acgeneral.m4 (AC_OUTPUT): Don't mess with $INSTALL if it starts
+ with a $, due to user intervention.
+
+ * Makefile.in, testsuite/Makefile.in: Fix *clean targets.
+
+ * acgeneral.m4 (AC_CACHE_SAVE, AC_CACHE_LOAD, AC_SITE_LOAD):
+ Use echo instead of AC_MSG_RESULT.
+ (AC_INIT_PARSEARGS): Group options by topic in help message. Idea
+ from Franc,ois Pinard.
+
+ * TODO: New file.
+
+Mon Aug 8 23:04:01 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Tighten up srcdir handling code slightly.
+ Add one or more ../ to $INSTALL when it's a relative path and
+ creating a file in a subdirectory.
+
+Tue Aug 2 19:54:26 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * autoheader.sh: Read acoldnames.m4. Redefine the new macro names.
+ Only define HAVE_LIBFOO where AC_CHECK_LIB is called with only one
+ argument.
+
+Sat Jul 30 09:53:38 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 acspecific.m4: The Great Renaming.
+ (Well, I think it's great. You may have your own opinion.)
+
+ * acspecific.m4 (AC_DIR_HEADER): Define HAVE_<path>_H as well as
+ the old DIRENT, SYSDIR, etc.
+
+ * acgeneral.m4 acspecific.m4: Add missing spaces between arguments
+ to m4 calls. From Franc,ois Pinard.
+
+ * autoconf.sh: Read acoldnames.m4.
+ * Makefile.in (DISTFILES, PROGS, install, clean): Add
+ acoldnames.m4 and autoupdate.sh.
+
+Tue Jul 26 08:52:17 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * testsuite/Makefile.in (check): Print a message noting that
+ runtest is part of DejaGNU.
+
+ * autoscan.pl: Remove unneeded backslash.
+
+Sun Jul 24 23:30:27 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * Makefile.in (clean mostlyclean distclean realclean): Recurse
+ into testsuite directory.
+
+Wed Jul 20 09:38:29 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * Makefile.in (install): Add missing else and fi.
+ * acspecific.m4 (GETGROUPS_T, RETSIGTYPE, STACK_DIRECTION): Use
+ AC_DEFINE_UNQUOTED rather than AC_DEFINE.
+ From Jim Meyering.
+
+Tue Jul 19 14:49:02 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4 (AC_MEMORY_H): Add more quotes.
+
+ * acgeneral.m4 (AC_TEST_RUN): Check for cross_compiling = yes, not
+ whether it's non-empty.
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O, AC_SET_MAKE): Eval the cache var
+ assignments.
+ (AC_YYTEXT_POINTER): Fix typo.
+
+ * testsuite/autoconf.s/specific.exp,
+ testsuite/autoconf.g/sizeof_type.exp,
+ testsuite/autoconf.g/init.exp: New files.
+ * testsuite/lib/common.exp, testsuite/config/unix.exp: Many
+ changes to make them work.
+
+ * acgeneral.m4 (AC_DEFINE): Use redirection for echo, not $verbose.
+
+Sat Jul 2 22:07:18 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acspecific.m4 (AC_REMOTE_TAPE): Substitute PROGS.
+
+Thu Jun 30 16:29:15 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 (AC_SUBST_FILE): New version from Ken Raeburn.
+
+ * ifnames: Add --help, --version, --macrodir options.
+
+Fri Jun 24 06:03:35 1994 Paul Eggert (eggert@twinsun.com)
+
+ * acspecific.m4 (AC_VFORK): Improve test for the gcc-sparc vfork bug.
+
+Thu Jun 30 09:47:17 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT_SUBDIRS): Pass correct --srcdir option
+ to sub configures. Quote args containing spaces.
+ (AC_PREPARE): Set and substitute `subdirs'. Quote args containing
+ spaces.
+ (AC_CANONICAL_HOST, AC_CANONICAL_TARGET, AC_CANONICAL_BUILD):
+ Substitute the cpu, vendor, os variables.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Look for ginstall before other
+ names.
+
+ * acgeneral.m4 (AC_TEST_LINK): Add newlines around argument code.
+ From mjshield@nyx.cs.du.edu (Michael Shields).
+
+Wed Jun 29 16:56:28 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * autoscan.pl: Add --macrodir option.
+
+ * acgeneral.m4 (AC_CACHE_SAVE): Capture stderr for Ultrix sh.
+
+Tue Jun 28 18:05:00 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * Makefile.in: Make INSTALL from install.texi.
+
+Thu Jun 23 02:03:19 1994 David J. MacKenzie (djm@vortex.eng.umd.edu)
+
+ * ifnames.sh: New file.
+ * Makefile.in: Add it in various places.
+
+Tue Jun 14 12:58:38 1994 David J. MacKenzie (djm@bleen.eng.umd.edu)
+
+ * Makefile.in (DISTFILES): Add testsuite files.
+
+ * autoconf.sh: Print version number on stdout, not stderr.
+ * acgeneral.m4: Ditto.
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Add OTHER-LIBRARIES arg.
+ Treat empty commands args as if they weren't given.
+
+Thu Jun 9 11:39:14 1994 David J. MacKenzie (djm@bleen.eng.umd.edu)
+
+ * acgeneral.m4 (AC_CHECK_TYPE): New macro.
+
+ * acspecific.m4 (AC_PROG_CPP, AC_PROG_CXXCPP, AC_YYTEXT_POINTER,
+ AC_LN_S, AC_RSH, AC_STDC_HEADERS, AC_MAJOR_HEADER, AC_DIR_HEADER,
+ AC_STAT_MACROS_BROKEN, AC_SYS_SIGLIST_DECLARED, AC_GETGROUPS_T,
+ AC_UID_T, AC_RETSIGTYPE, AC_MMAP, AC_VFORK, AC_WAIT3, AC_ALLOCA,
+ AC_GETLOADAVG, AC_UTIME_NULL, AC_STRCOLL, AC_SETVBUF_REVERSED,
+ AC_STRUCT_TM, AC_TIME_WITH_SYS_TIME, AC_TIMEZONE, AC_ST_BLOCKS,
+ AC_ST_BLKSIZE, AC_ST_RDEV, AC_CROSS_CHECK, AC_CHAR_UNSIGNED,
+ AC_LONG_DOUBLE, AC_WORDS_BIGENDIAN, AC_ARG_ARRAY, AC_INLINE,
+ AC_CONST, AC_HAVE_POUNDBANG, AC_REMOTE_TAPE, AC_LONG_FILE_NAMES,
+ AC_RESTARTABLE_SYSCALLS, AC_FIND_X, AC_FIND_X_XMKMF,
+ AC_FIND_X_DIRECT): Cache results.
+ (AC_SIZE_T, AC_PID_T, AC_OFF_T, AC_MODE_T): Use AC_CHECK_TYPE.
+ (AC_DIR_HEADER_CHECK): Macro removed.
+
+Wed Jun 8 18:03:45 1994 David J. MacKenzie (djm@bleen.eng.umd.edu)
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Cache results.
+
+Thu May 26 09:43:37 1994 David J. Mackenzie (djm@poseidon.cygnus.com)
+
+ * acspecific.m4 (AC_PROG_CC, AC_PROG_CXX): Cache results.
+ Eliminate temp file in gcc test.
+ (AC_GCC_TRADITIONAL): Cache results.
+
+Wed May 25 14:45:44 1994 David J. Mackenzie (djm@poseidon.cygnus.com)
+
+ * acspecific.m4 (AC_VPRINTF): Use AC_FUNC_CHECK.
+
+ * acgeneral.m4 (AC_CONFIG_AUX_DIR): Renamed from AC_CONFIG_AUXDIR.
+ (AC_SUBST_FILE): Macro deleted; didn't work, not clear it's needed.
+
+ * acgeneral.m4 (AC_SITE_LOAD): New macro.
+ (AC_PREPARE): Call it.
+
+Wed May 25 08:18:07 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * acgeneral.m4: m4exit if --version, to reduce needless delay.
+
+ * acgeneral.m4 (AC_PREPARE): Redirect file descriptor 6 to
+ config.log.
+ (AC_LANG_C, AC_LANG_CPLUSPLUS): Send compiler messages to desc 6.
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): Likewise.
+ * Makefile.in (distclean): Remove config.log.
+
+ * acgeneral.m4 (AC_PREPARE): Add AC_BEFORE calls for AC_CONFIG_HEADER,
+ AC_REVISION, AC_PREREQ, and AC_CONFIG_SUBDIRS.
+ Add AC_PROVIDE calls to those macros and AC_ARG_ENABLE and AC_ARG_WITH.
+
+ * acgeneral.m4 (AC_CANONICAL_SYSTEM, AC_CANONICAL_HOST,
+ AC_CANONICAL_TARGET, AC_CANONICAL_BUILD): Add "ICAL" to names.
+ (AC_LINK_FILES): Renamed from AC_MAKE_LINKS.
+ (AC_TEST_RUN): Renamed from AC_TEST_PROGRAM, which is now an alias.
+ * acspecific.m4: Change callers to use new name.
+
+ * acgeneral.m4 (AC_PREFIX_INTERNAL): Renamed from AC_PREFIX.
+ (AC_PREFIX): Obsolete wrapper for it.
+ (AC_PREFIX_PROGRAM): Define a variable.
+ (AC_PREPARE): Call AC_PREFIX_INTERNAL if that variable is set.
+
+Tue May 24 18:49:35 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * acspecific.m4 (AC_ALLOCA): Don't declare alloca if it's already
+ defined. From Bill Sommerfeld.
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Verbosely note when using the
+ cross-compiling default.
+ (AC_CACHE_WRITE): Set the cache values only if not already set.
+ (AC_PARSEARGS, AC_OUTPUT): Allow giving an empty prefix or exec_prefix.
+
+ * acgeneral.m4, acspecific.m4: Rename AC_CONFIG_AUX* to
+ AC_CONFIG_AUXDIR*.
+
+ * acgeneral.m4 (AC_OUTPUT, AC_OUTPUT_HEADER): Add an env var
+ CONFIG_STATUS to allow overriding the name of config.status.
+
+ * acspecific.m4 (AC_MINUS_C_MINUS_O): If $CC=cc, don't duplicate
+ the check. From Jim Meyering.
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): Add missing newline.
+ Always include 'fi' for cross-compiling if.
+ From Jim Meyering.
+
+ * Makefile.in (prefix, exec_prefix): Use @ substitutions.
+
+ * acgeneral.m4: Make default cache file ./config.cache,
+ so PATH is not used by "." command. From Jim Meyering.
+
+Thu May 19 06:05:07 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_STRUCT_TM): Fixed checking message to be less
+ confusing.
+
+Wed May 18 22:11:45 1994 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_BINSH): New macro.
+ (AC_INIT, AC_REVISION): Require AC_BINSH first thing.
+
+Wed May 18 09:08:39 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * acgeneral.m4: Rename some internal macros.
+ Give the diversions symbolic names.
+ (AC_ARG_ENABLE, AC_ARG_WITH, AC_ENABLE_INTERNAL, AC_WITH_INTERNAL):
+ New macros.
+ (AC_PARSEARGS): Print --with and --enable help strings.
+ (AC_ENABLE, AC_WITH): Make wrappers around _INTERNAL functions.
+ Mark obsolete.
+ (AC_PREPARE): Execute any saved up --with or --enable code.
+
+Tue May 17 15:18:00 1994 David J. MacKenzie (djm@bleen.eng.umd.edu)
+
+ * acgeneral.m4 (AC_REVISION): Move quotes around to make it work
+ again.
+
+Sat May 14 07:30:57 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4, acspecific.m4: Clean up some comments.
+
+Tue May 10 09:50:12 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): set the _path_ cache variable,
+ not the _program_ one.
+ * acgeneral.m4 (AC_PREFIX): Call AC_PROGRAM_PATH instead of
+ duplicating it.
+ (AC_PROGRAM_CHECK, AC_PROGRAM_PATH): If the user set the variable
+ in the environment, cache that value.
+ (AC_PREPARE, AC_CHECKING, AC_VERBOSE): Use file descriptors 4 and
+ 5 for checking and results messages. Idea from metaconfig 3.0.
+
+Mon May 9 08:20:14 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4 (AC_TEST_PROGRAM): If no default for
+ cross-compiling is given, but we are cross-compiling, give an error.
+ (AC_PROGRAM_EGREP, AC_TEST_LINK, AC_TEST_PROGRAM, AC_TEST_CPP):
+ Don't add an extra blank line after the if-clause.
+ (AC_REVISION): Merge AC_DOREV into this macro.
+ Rename some macros:
+ AC_SYSTEM_TYPE -> AC_CANON_SYSTEM
+ AC_HOST_TYPE -> AC_CANON_HOST
+ AC_TARGET_TYPE -> AC_CANON_TARGET
+ AC_BUILD_TYPE -> AC_CANON_BUILD
+ (AC_OUTPUT): Don't do Cygnus-style magic
+ substitutions on prefix and exec_prefix, just initialize and
+ substitute them normally.
+
+Sun May 8 01:09:42 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acspecific.m4 (AC_AIX, AC_MINIX, AC_ISC_POSIX): Don't call
+ AC_BEFORE for AC_HEADER_EGREP, to avoid require loops.
+ * acgeneral.m4 (AC_HEADER_EGREP): Call AC_PROGRAM_EGREP instead of
+ duplicating most of it.
+
+Fri May 6 15:26:48 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4 (AC_YYTEXT_POINTER): Use AC_TEST_LINK, not
+ AC_TEST_PROGRAM.
+
+Fri May 6 00:45:29 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4, acgeneral.m4: Add dnl after AC_PROVIDE,
+ AC_REQUIRE, and AC_BEFORE calls.
+ Use AC_CHECKING and AC_TEST_LINK instead of AC_COMPILE_CHECK.
+
+ * acgeneral.m4 (AC_TEST_LINK): New macro.
+ (AC_COMPILE_CHECK): Mark obsolete. Call AC_CHECKING and
+ AC_TEST_LINK.
+ (AC_PROGRAM_CHECK, AC_PROGRAM_PATH, AC_HAVE_LIBRARY, AC_HEADER_CHECK,
+ AC_FUNC_CHECK, AC_SIZEOF_TYPE): Print "checking" messages even if
+ using cached values. Use AC_TEST_LINK instead of AC_COMPILE_CHECK.
+ * acspecific.m4 (AC_PROG_INSTALL): Ditto.
+
+ * acgeneral.m4 (AC_PROGRAM_CHECK, AC_PROGRAM_PATH): Fix nesting in
+ cache use.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Ditto.
+
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_SUBDIRS): Adjust relative cache
+ file paths before passing them to sub-configures. Omit existing
+ --cache-file arguments.
+
+Thu May 5 21:38:51 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4 (AC_FUNC_CHECK, AC_HEADER_CHECK): Combine redundant
+ code. Use AC_CACHE_VAL.
+ (AC_SIZEOF_TYPE): Use AC_CACHE_VAL.
+
+Thu May 5 12:51:32 1994 David J. MacKenzie (djm@gamera.eng.umd.edu)
+
+ * Makefile.in (all): Don't depend on info files.
+ (install): Don't install INSTALL.
+ (installcheck, install-info): New targets.
+
+Thu May 5 08:49:39 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (dist): chmod the dist directory, not the current
+ directory. Don't depend on DISTFILES.
+
+ * autoconf.sh: Go back to old way of doing NLS nuisance test.
+ * autoheader.sh: Ditto.
+ * acgeneral.m4: Ditto.
+
+Thu May 5 08:36:19 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4: Use "yes" and "no" or "" uniformly for boolean
+ variables' values. Don't assume default values.
+ (AC_PROGRAM_CHECK, AC_PROGRAM_PATH): Always set the cache variable
+ and use different ones.
+
+ * acspecific.m4: Use "yes" and "no" or "" uniformly for boolean
+ variables' values. Don't assume default values.
+ (AC_STDC_HEADERS, AC_ALLOCA): Untangle nested tests.
+
+Thu May 5 07:51:38 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (distclean): Remove config.cache.
+
+Wed May 4 19:41:35 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_HAVE_LIBRARY): Use AC_CACHE_VAL.
+
+ * Makefile.in (install): Depend on all again.
+ (install-info): Depend on info again.
+
+Wed May 4 15:05:11 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acspecific.m4 (AC_PROG_INSTALL): Use AC_CACHE_VAL.
+ * acgeneral.m4 (AC_PROGRAM_CHECK, AC_PROGRAM_PATH): Use AC_CACHE_VAL.
+ (AC_REPLACE_FUNCS): Use AC_FUNC_CHECK.
+ Rearrange general tests into 4 categories:
+ Checking for files - fundamental (caching)
+ Checking for files - derived (caching)
+ Checking for C features - fundamental (no caching)
+ Checking for C features - derived (caching)
+
+ * acgeneral.m4 (AC_CACHE_LOAD, AC_CACHE_SAVE, AC_CACHE_VAL):
+ New macros.
+ (AC_PREPARE): Call AC_CACHE_LOAD.
+ (AC_OUTPUT): Call AC_CACHE_SAVE.
+ (AC_PARSEARGS): Add --cache-file=FILE option.
+ (AC_CONFIG_SUBDIRS): Pass --cache-file to subdirectory configures.
+
+ * acgeneral.m4 (AC_OUTPUT_CONFIG_SUBDIRS): Renamed from
+ AC_CONFIG_SUBDIRS.
+ (AC_CONFIG_SUBDIRS): Just define AC_SUBDIR_LIST.
+ (AC_OUTPUT): Call AC_OUTPUT_CONFIG_SUBDIRS if AC_SUBDIR_LIST is
+ defined.
+ Make config.status --recheck pass --norecursion to configure.
+
+ * acspecific.m4 (AC_SETVBUF_REVERSED): Print "checking" message.
+
+Wed May 4 10:40:56 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * autoreconf.sh: Add options [--help] [--macrodir=dir] [--verbose]
+ [--version].
+
+ * acspecific.m4 (AC_GCC_TRADITIONAL, AC_SET_MAKE, AC_RSH,
+ AC_GETLOADAVG, AC_CROSS_CHECK): Print results verbosely.
+ (AC_GETLOADAVG): Name space cleanup.
+
+Wed May 4 09:32:04 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * autoheader.sh, autoconf.sh, acgeneral.m4: Make the NLS
+ nuisance test actually do something.
+
+Mon May 2 16:31:33 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * configure.in: Check for standards.texi.
+ * Makefile.in: Put everything back into one directory.
+ Don't assume standards.* exist.
+
+Sat Apr 30 09:37:06 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): Change >> to > in sed command.
+
+Fri Apr 29 21:56:33 1994 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
+
+ * Makefile.in (all): Make autoreconf too.
+
+Fri Apr 29 21:03:48 1994 David J. MacKenzie (djm@aria.eng.umd.edu)
+
+ * acgeneral.m4 (AC_OUTPUT): When doing substitutions on files, if
+ the file starts with "#!", put the "automatically generated"
+ comment on the second line instead of the first.
+
+Fri Apr 29 12:53:53 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * acgeneral.m4 (AC_CONFIG_AUX, AC_CONFIG_AUX_DEFAULT,
+ AC_CONFIG_AUX_DIRS, AC_SYSTEM_TYPE, AC_HOST_TYPE, AC_TARGET_TYPE,
+ AC_BUILD_TYPE, AC_SUBST_FILE, AC_MAKE_LINKS, AC_OUTPUT_MAKE_LINKS,
+ AC_CONFIG_SUBDIRS): New macros.
+
+ * acspecific.m4 (AC_PROG_INSTALL): Use install.sh from ac_aux_dir.
+
+ * Makefile.in: Remove references to standards.*.
+ Add autoreconf.
+
+Thu Apr 28 12:01:01 1994 David J. MacKenzie (djm@burnout.eng.umd.edu)
+
+ * Makefile.in (dist): Add .., ../etc, and ../texinfo files.
+
+ * acspecific.m4 (AC_LN_S): Add verbose messages.
+
+ * Makefile.in, configure.in: Add autoscan and its data files.
+ Check for perl.
+
+
+ -----
+
+ Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free
+ Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
diff --git a/ChangeLog.3 b/ChangeLog.3
new file mode 100644
index 0000000..bedcba3
--- /dev/null
+++ b/ChangeLog.3
@@ -0,0 +1,23224 @@
+2012-01-15 Jim Meyering <meyering@redhat.com>
+
+ getopt: refine syntax of previous change
+ * lib/Autom4te/General.pm (getopt): Use a more concise test.
+
+2011-01-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ getopt: remove hack for special handling of "-" argument
+
+ Older versions of Getopt::Long acted bogusly and died when they
+ where configured with the 'bundling' flag and an argument '-' was
+ seen on the command line they were parsing. That is no longer
+ the case though, and has not been for quite a long time: the bug
+ is no longer present in the 5.6.2 version of perl and the 2.25
+ version of Getopt::Long (and today, the latest versions of perl
+ and Getopt::Long are respectively 5.14.2 and 2.38). The obsolete
+ workaround for that Getopt::Long bug can thus be removed from our
+ 'getopt' function.
+
+ It is also worth noting that such a workaround was quite buggy
+ and brittle itself; for example, a command like this:
+ "autom4te --output -"
+ would have caused the incorrect diagnostic:
+ "autom4te: option `--output' requires an argument"
+ Much worse, a command like this:
+ "autom4te --language=autoconf --output - configure.ac"
+ would have caused the standard input of autom4te to be processed
+ and copied into the 'configure.ac' file, deleting its pre-existing
+ content! Surely not what a user would have expected.
+
+ After this change, a command like this:
+ autom4te --language=autoconf --output - - <configure.ac >out
+ works as expected, processing the input from 'configure.ac' and
+ writing it to the 'out' file.
+
+ * lib/Autom4te/General.pm (use): Require perl version 5.6.2.
+ (getopt): Remove the old workaround.
+
+2012-01-15 Jim Meyering <meyering@redhat.com>
+
+ avoid new warning about undefined $ARGV[0]
+ * lib/Autom4te/General.pm (getopt): Avoid warning induced by
+ yesterday's change: $ARGV[0] may not be defined, e.g., when
+ invoked via autoreconf.
+
+2011-01-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ getopt: fix diagnostic for missing mandatory option argument
+ Before this change, an incorrect command line usage:
+ "autom4te --output"
+ triggered broken diagnostic like:
+ "autom4te: unrecognized option `--output'"
+ instead of the expected and correct:
+ "autom4te: option `--output' requires an argument"
+ * lib/Autom4te/General.pm (getopt): Give correct diagnostic in
+ case of usage errors due to missing arguments for options for
+ which they are mandatory. Code basically copied from automake's
+ 'parse_arguments' private subroutine.
+
+2012-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ doc: mention Bash 2.03 bug with backslash-newline
+ * doc/autoconf.texi (Invoking the Shell): New section.
+ (Backslash-Newline-Empty): Rename from Backslash-Newline-Newline.
+ Mention problem with Bash 2.03.
+
+ doc: clarify sed buffer limit
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ That 4000-byte limit applies to output and internal buffers, too.
+
+2012-01-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ maint: update copyright year
+ All files changed to add 2012, via 'make update-copyright'.
+
+ maint: resync upstream files
+ * ChangeLog, GNUmakefile, build-aux/announce-gen:
+ * build-aux/config.guess, build-aux/config.sub, build-aux/gendocs.sh:
+ * build-aux/git-version-gen, build-aux/move-if-change:
+ * build-aux/texinfo.tex, build-aux/update-copyright:
+ * build-aux/vc-list-files, doc/fdl.texi, doc/gendocs_template:
+ * doc/standards.texi, lib/Autom4te/XFile.pm, m4/autobuild.m4:
+ Regenerated by 'make fetch'.
+
+2012-01-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ autoconf: remove " -link" and ")" from xlf output
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT):
+ Also remove " -link" and trailing ")" from xlf output.
+ Problem and fix reported by Thomas Jahns in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2012-01/msg00000.html>.
+
+2011-12-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ configure: will re-execute with $CONFIG_SHELL, if it's set
+ * lib/m4sugar/general.m4 (_AS_DETECT_BETTER_SHELL): Define the macro
+ `_AS_FORCE_REEXEC_WITH_CONFIG_SHELL' to `yes', so that the code in
+ `_AS_DETECT_BETTER_SHELL' will cause autoconf-generated configure
+ scripts to always re-execute themselves with $CONFIG_SHELL, if it's
+ set in the environment.
+ * doc/autoconf.texi (config.status Invocation): Update.
+ * doc/install.texi (Defining Variables): Likewise.
+ * NEWS: Likewise.
+ * tests/m4sh.at: Add tests for the new semantics in ...
+ (Configure re-execs self with CONFIG_SHELL): ... this new
+ test group.
+
+2011-12-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ m4sh: allow forced re-execution with $CONFIG_SHELL, if it's set
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): If the m4sh client
+ has defined the macro `_AS_FORCE_REEXEC_WITH_CONFIG_SHELL' to
+ "yes", emit code to always re-execute the current script with
+ $CONFIG_SHELL, if that's set.
+ * tests/m4sh.at: Add tests for the new and old semantics, in ...
+ (Re-exec with CONFIG_SHELL, Forced re-exec with CONFIG_SHELL): ...
+ these new test groups.
+
+2011-12-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ m4sh: refactor _AS_DETECT_BETTER_SHELL, for future changes
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Move code to
+ handle the re-execution of the shell ...
+ (_AS_REEXEC_WITH_SHELL): ... in this new macro.
+
+2011-12-24 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: issue with shell functions and here-documents on Solaris
+ * doc/autoconf.texi (Here-Documents): Using a command substitution
+ in a here-documents being fed to a shell function is unportable.
+ Problem revealed by the automake testsuite:
+ <http://lists.gnu.org/archive/html/automake-patches/2011-12/msg00149.html>
+
+2011-12-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ AS_LN_S: fall back on 'cp -pR' (not 'cp -p') if 'ln -s' fails
+ This works better for symlinks to directories.
+ Problem reported by Eli Zaretskii via Werner Lemberg in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2011-12/msg00006.html>.
+ * NEWS:
+ * doc/autoconf.texi (Particular Programs): Document this.
+ * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): Implement this.
+
+2011-12-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ AC_LANG_BOOL_COMPILE_TRY(C): port to g++ with warnings
+ * lib/autoconf/c.m4 (AC_LANG_BOOL_COMPILE_TRY(C)): Use the
+ array as well as setting it, to pacify g++. Reported by
+ Werner Lemberg in
+ <http://lists.gnu.org/archive/html/autoconf/2011-12/msg00005.html>.
+
+2011-12-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ doc: document GNU make's \#
+ * doc/autoconf.texi (Comments in Make Macros): Also mention \#
+ in the right hand side of a macro, as an unportable usage.
+
+2011-11-11 Eric Blake <eblake@redhat.com>
+
+ doc: tweak previous commit
+ * doc/autoconf.texi (Limitations of Builtins) <export>: Give
+ concrete example of offender, and drop redundant text.
+ Reported by Stefano Lattarini.
+
+ doc: mention export portability hint
+ * doc/autoconf.texi (Limitations of Builtins) <export>: Document
+ export limitation.
+ Suggested by Bruno Haible.
+
+2011-10-21 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ fortran: define $GFC to "yes" if $FC is a GNU compiler
+ * lib/autoconf/fortran.m4 (AC_PROG_FC): Define `$GFC' to "yes" if
+ the detected fortran compiler is a GNU compiler, define it to the
+ empty string otherwise.
+ This is mostly for consistency for what is done for the C, C++
+ and Fortran 77 compilers.
+ * doc/automake.texi: Update.
+
+2011-10-13 Eric Blake <eblake@redhat.com>
+
+ admin: mention recent copyright assignments
+ * AUTHORS: Update list.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: we prefer US English spelling over British one
+ * doc/autoconf.texi (Parallel Make): Prefer `behavior' over
+ `behaviour' in a couple of places.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: some fixlets in section about shell signal handling
+ * doc/autoconf.texi (Signal handling): Rename ...
+ (Signal Handling): ... to this, for consistency with other node
+ names. Fix some typos and grammaros. Add more URL references
+ in comments.
+
+2011-10-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: korn shells can have $? > 256 for signal-terminated children
+ Some Korn shells, when a child process dies due to signal number
+ n, can leave in $? an exit status of 256+n, instead of the more
+ common 128+n. See also Austin Group issue 0000051:
+ <http://www.austingroupbugs.net/view.php?id=51>
+ * doc/autoconf.texi (Signal handling): Document the described Korn
+ Shell behaviour, and some of its possible shortcomings.
+ Suggestion by Eric Blake.
+
+2011-09-26 Eric Blake <eblake@redhat.com>
+
+ docs: relax documentation license by dropping cover text
+ * doc/autoconf.texi (copying): Drop front- and back-cover texts.
+ * NEWS: Document this.
+ Reported by Brian Gough.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: signal-related bugs and incompatibilities for the shells
+ Motivated by recent discussion on the bug-autoconf list, as well
+ as work in the automake testsuite:
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00003.html>
+ <https://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+ <http://lists.gnu.org/archive/html/automake-patches/2011-09/msg00066.html>
+ * doc/autoconf.texi (Signal handling): New paragraph.
+ (@menu at "Portable Shell", @detailmenu): Update.
+
+2011-09-19 Eric Blake <eblake@redhat.com>
+
+ docs: refer to correct AC_RUN_IFELSE parameter name
+ * doc/autoconf.texi (Runtime) <AC_RUN_IFELSE>: Fix wording.
+ Reported by Reuben Thomas.
+
+2011-09-16 Eric Blake <eblake@redhat.com>
+
+ docs: fix typo in shell example
+ * doc/autoconf.texi (Shell Substitutions): Fix typo.
+ * THANKS: Update.
+ Reported by Nick Bowler.
+
+2011-09-14 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: more details about make VPATH rewriting woes
+ * doc/autoconf.texi (Automatic Rule Rewriting): Solaris make
+ VPATH rewriting applies to any whitespace-separated word in a
+ rule, so it might apply also to shell variables, functions
+ and keywords (and automake has already tripped on this once);
+ document this, with an example. Since we are at it, do some
+ minor reformatting of existing text.
+
+2011-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: document Solaris 10 /bin/ksh and XPG4 sh 'unset' bug
+ * doc/autoconf.texi (Limitations of Builtins): Solaris 10 ksh
+ and XPG4 sh also fails upon `unset' of a variable that is not
+ set.
+
+2011-07-24 Jim Meyering <meyering@redhat.com>
+
+ docs: improve the prose describing _AC_CHECK_TYPE_NEW_BODY
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW_BODY): Improve prose.
+
+2011-08-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ AC_C_CONST: don't reject gcc -Werror -Wall
+ * lib/autoconf/c.m4 (AC_C_CONST): Don't reject gcc when it is used
+ with -Werror -Wall during configuring. It's unwise to use GCC
+ that way, but apparently enough people do it nowadays that it's an
+ issue. These days nobody uses the old compilers that the old
+ tests reject, so we can't test this fix against them, but it's
+ more important to work with modern GCC (even when misused) than to
+ work with no-longer-used compilers. Problem reported by Shevek in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2008-11/msg00007.html>
+ and raised again by Dan Kegel in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2011-08/msg00020.html>.
+
+2011-08-16 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: other issues with parallel BSD make
+ Motivated by automake bug#9245:
+ <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9245>
+ and FreeBSD PR bin/159730:
+ <http://www.freebsd.org/cgi/query-pr.cgi?pr=159730>
+ * doc/autoconf.texi (Parallel Make): Document other BSD make
+ incompatibilities. Reorganize the existing related documentation
+ accordingly.
+
+2011-08-08 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: fix minor typos
+ * doc/autoconf.texi (Shell Functions): Fix a couple of minor typos.
+
+2011-08-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: another Solaris sh bug with redirected `:'
+ * doc/autoconf.texi (File Descriptors): Solaris 10 /bin/sh
+ "optimizes" away redirected `:' commands in a shell function
+ after the first call.
+
+2011-07-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ docs: modernize treatment of ns-resolution timestamps
+ * doc/autoconf.texi (Limitations of Usual Tools): ns-resolution time
+ stamps are now routinely supported by coreutils 'cp' etc.
+
+2011-07-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/specific.m4 (AC_SYS_LARGEFILE): Port to Mac OS X 10.5
+ by defining _DARWIN_USE_64_BIT_INODE. Imported from gnulib.
+
+2011-07-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Quote cleanly.
+ This is imported from gnulib. gnulib also has an HP-UX 11.11 fix, but
+ let's see if we can do that another way, as it's pretty heavyweight.
+
+2011-07-22 Eric Blake <eblake@redhat.com>
+
+ docs: fix minor doc problems
+ * doc/autoconf.texi (Why Not Imake): Fix grammar.
+ (autoreconf Invocation): Fix short option for --version.
+ * THANKS: Update.
+ Reported by Christophe Jarry and Russ Allbery.
+
+2011-07-12 Benoit Sigoure <tsunanet@gmail.com> (tiny change)
+
+ docs: fix typo in AC_PATH_PROG
+ * doc/autoconf.texi (Erlang Compiler and Interpreter):
+ s/AC_PROG_PATH/AC_PATH_PROG/.
+ * THANKS: Update.
+
+2011-06-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/semantics.at (AC_REPLACE_FUNCS): Test for just-fixed bug.
+
+2011-06-30 Timo Kamph <timo.kamph@tu-harburg.de> (trivial change)
+
+ * lib/autoconf/functions.m4 (_AC_REPLACE_FUNCS): Fix tr-cpp problem.
+ See http://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00058.html
+
+2011-06-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA): Be even smarter.
+ GCC was too smart for the previous patch. See
+ <http://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00035.html>.
+
+2011-06-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA): Try to outsmart GCC.
+ Problem with stack-detection code reported by Andy Wingo in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00032.html>.
+ This fix is imported from gnulib's c-stack module.
+
+ * doc/autoconf.texi (File Descriptors): Fix texinfo typo.
+
+2011-06-14 Eric Blake <eblake@redhat.com>
+
+ doc: mention more about ksh cloexec behavior
+ * doc/autoconf.texi (File Descriptors): Clarify that only the exec
+ builtin suffers from cloexec issues.
+
+ doc: update quoting example
+ * doc/autoconf.texi (Autoconf Language): Add AC_LANG_SOURCE use.
+ * THANKS: Update.
+ Reported by Křištof Želechovski.
+
+2011-05-05 Eric Blake <eblake@redhat.com>
+
+ doc: document dash bug with positional parameters
+ * doc/autoconf.texi (Shell Substitutions) <${10}>: Document
+ a pitfall with $10.
+
+2011-04-27 Eric Blake <eblake@redhat.com>
+
+ docs: document NetBSD join bug
+ * doc/autoconf.texi (Limitations of Usual Tools) <join>: Mention
+ bug in -a parsing.
+ Reported by J.T. Conklin.
+
+2011-04-13 Eric Blake <eblake@redhat.com>
+
+ maint: reflect recent copyright assignments
+ * AUTHORS: Update.
+
+2011-04-05 Eric Blake <eblake@redhat.com>
+
+ maint: reflect recent copyright assignments
+ * AUTHORS: Update.
+
+2011-04-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New macro AC_FC_PP_DEFINE for the preprocessor define flag.
+ * lib/autoconf/fortran.m4 (AC_FC_PP_DEFINE): New macro.
+ * lib/autom4te.in (Automake-preselections): Preselect it.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/local.at (_AT_CHECK_ENV): Do not complain about
+ FCFLAGS_F nor FC_DEFINE.
+ * NEWS: Update.
+
+ New macro AC_FC_PP_SRCEXT for preprocessed file extensions.
+ * lib/autoconf/fortran.m4 (AC_FC_PP_SRCEXT): New macro.
+ * lib/autom4te.in (Automake-preselections): Preselect it.
+ * doc/autoconf.texi (Fortran Compiler): Document it, rewriting
+ the documentation for AC_FC_SRCEXT along the way.
+ * tests/fortran.at (AC_FC_PP_SRCEXT usage): New test.
+ * tests/mktests.sh: Exclude the macro from default testing.
+ * NEWS: Update.
+
+ New macro AC_FC_MODULE_OUTPUT_FLAG: module output directory.
+ * lib/autoconf/fortran.m4 (AC_FC_MODULE_OUTPUT_FLAG): New macro.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/local.at (_AT_CHECK_ENV): Do not complain about
+ FC_MODOUT.
+ * NEWS: Update.
+
+2011-04-02 Luc Maisonobe <luc@spaceroots.org>
+ Julian C. Cummings <cummings@cacr.caltech.edu>
+ Alexander Pletzer <pletzer@txcorp.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New macro AC_FC_MODULE_FLAG: Fortran 90 module include path.
+ * lib/autoconf/fortran.m4 (AC_FC_MODULE_FLAG): New macro,
+ adjusted and rewritten from the AX_F90_MODULE_FLAG macro from
+ the Autoconf Macro Archive by Luc Maisonobe, Julian C. Cummings,
+ and Alexander Pletzer.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/fortran.at (AC_FC_MODULE_FLAG): New test.
+ * tests/local.at (AT_CHECK_ENV): Do not complain about FC_MODINC
+ setting.
+ * NEWS, THANKS: Update.
+
+2011-04-02 Luc Maisonobe <luc@spaceroots.org>
+ Alexander Pletzer <pletzer@txcorp.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New macro AC_FC_MODULE_EXTENSION: Fortran 90 module extension.
+ * lib/autoconf/fortran.m4 (AC_FC_MODULE_EXTENSION): New macro,
+ rewritten from the AX_F90_MODULE_EXTENSION macro from the
+ Autoconf Macro Archive by Luc Maisonobe and Alexander Pletzer.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/local.at (_AT_CHECK_ENV): Do not complain about
+ FC_MODEXT setting.
+ * NEWS, THANKS: Update.
+
+2011-03-26 Jim Meyering <meyering@redhat.com>
+
+ README-hacking: fix typo
+ * README-hacking: s/just build/just built/.
+
+2011-03-08 Colin Watson <cjwatson@debian.org> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Particular Functions): Document AC_FUNC_FORK
+ cache variables.
+ * THANKS: Update.
+
+2011-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: BSD and Solaris make trailing space macro issue.
+ * doc/autoconf.texi (Trailing whitespace in Make Macros):
+ Document issue with trailing whitespace in macro settings.
+
+2011-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix Cray Fortran flag for AC_FC_IMPLICIT_NONE.
+ * lib/autoconf/fortran.m4 (_AC_FC_IMPLICIT_NONE): Use -e I
+ not -d i, for Cray ftn.
+ * THANKS: Update.
+ Thanks to Tobias Burnus for feedback and testing.
+
+ docs: document several Fortran and OpenMP cache variables.
+ * doc/autoconf.texi (Generic Compiler Characteristics)
+ [AC_OPENMP]: Document associated cache variables.
+ (Fortran Compiler) [AC_PROG_F77, AC_PROG_FC, AC_PROG_F77_C_O]
+ [AC_PROG_FC_C_O, AC_F77_LIBRARY_LDFLAGS, AC_FC_LIBRARY_LDFLAGS]
+ [AC_F77_DUMMY_MAIN, AC_FC_DUMMY_MAIN, AC_F77_MAIN, AC_FC_MAIN]
+ [AC_F77_WRAPPERS, AC_FC_WRAPPERS, AC_FC_FREEFORM]
+ [AC_FC_FIXEDFORM, AC_FC_LINE_LENGTH, AC_FC_CHECK_BOUNDS]
+ [AC_F77_IMPLICIT_NONE, AC_FC_IMPLICIT_NONE]: Document and/or
+ index the cache variables used by these macros.
+
+2011-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Eric Blake <eblake@redhat.com>
+
+ build: exclude M4 with buggy strstr
+ * m4/m4.m4 (AC_PROG_GNU_M4): When searching PATH, do not accept
+ an m4 that has either the gnulib strstr bug, or the glibc/gnulib
+ strstr bug.
+
+2011-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: fix description of AC_F77_IMPLICIT_NONE.
+ * doc/autoconf.texi (Fortran Compiler) [AC_F77_IMPLICIT_NONE]:
+ This macro modifies FFLAGS, not FCFLAGS.
+
+ AC_FC_SRCEXT: allow gfortran to compile .f77 files.
+ * lib/autoconf/fortran.m4 (AC_FC_SRCEXT): Try '-x f77' for .f77
+ files, '-x f95' for others, for gfortran.
+
+ New macros AC_{F77,FC}_IMPLICIT_NONE to disable Fortran implicit int.
+ * lib/autoconf/fortran.m4 (_AC_FC_IMPLICIT_NONE): New internal
+ macro.
+ (AC_F77_IMPLICIT_NONE, AC_FC_IMPLICIT_NONE): New macros.
+ * doc/autoconf.texi (Fortran Compiler): Document them.
+ * NEWS: Update.
+
+ New macro AC_FC_CHECK_BOUNDS to enable Fortran array bounds checking.
+ * lib/autoconf/fortran.m4 (AC_FC_CHECK_BOUNDS): New macro.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/fortran.at (AC_FC_CHECK_BOUNDS): New test.
+ * NEWS: Update.
+ Prompted by report from Eve-Marie Devaliere.
+
+2011-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update known compiler switches for Fortran and OpenMP macros.
+ * lib/autoconf/c.m4 (AC_OPENMP): Update for Lahey on GNU/Linux.
+ * lib/autoconf/fortran.m4 (_AC_F95_FC): Also try nagfor.
+ (_AC_PROG_FC_V): Update documentation for Lahey switches.
+ (AC_FC_FREEFORM, AC_FC_FIXEDFORM): Add flags for Absoft, Lahey
+ on GNU/Linux, document NAGWare, g95, and f2c switches.
+ (AC_FC_LINE_LENGTH): Document NAGware switch. Update Absoft,
+ Lahey, NAGWare, Open Watcom, g95, and f2c switches.
+
+ tests: accept f2c/fort77 as GNU Fortran 77.
+ * tests/fortran.at (GNU Fortran 77): Try to detect f2c wrapper
+ fort77 as GNU as well: it defines __GNUC__ too. Fixes testsuite
+ failure when f77 is fort77.
+ Report from Giulio Paci.
+
+ docs: macro synopses document default failure cases.
+ * doc/autoconf.texi (Fortran Compiler, Obsolete Macros):
+ Document failure case for AC_F77_DUMMY_MAIN, AC_FC_DUMMY_MAIN,
+ AC_FC_SRCEXT, AC_FC_FREEFORM, AC_FC_FIXEDFORM,
+ AC_FC_LINE_LENGTH, and AC_TRY_RUN macros.
+
+ Reword Fortran macro documentation.
+ * doc/autoconf.texi (Fortran Compiler): Improve wording for
+ AC_FC_FREEFORM, AC_FC_FIXEDFORM, and AC_FC_LINE_LENGTH macros.
+
+2011-02-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ config.status: do not quote $SHELL when rerunning configure.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Allow
+ $SHELL to contain more than one word, when rerunning configure,
+ for debugging purposes like CONFIG_SHELL='/bin/sh -x'.
+
+2011-02-21 Ian Lance Taylor <iant@google.com>
+
+ * lib/autoconf/go.m4: New file.
+ * lib/autoconf/autoconf.m4: Include autoconf/go.m4.
+ * lib/autoconf/Makefile.am (dist_autoconflib_DATA): Add go.m4.
+ * lib/freeze.mk (autoconf_m4f_dependencies): Add
+ $(src_libdir)/autoconf/go.m4.
+ * doc/autoconf.texi: Rebuild menus.
+ (Preset Output Variables): Mention Go. Document GOFLAGS.
+ (Libraries): Mention Go.
+ (Go Compiler): New subsection.
+ (Language Choice): Mention Go.
+ (Generating Sources): Likewise.
+ (Running the Preprocessor): Likewise.
+ * tests/go.at: New file.
+ * tests/suite.at: Include go.at and acgo.at.
+ * tests/local.at (_AT_CHECK_ENV): Add GOC and GOFLAGS.
+ * tests/Makefile.am (TESTSUITE_GENERATED_AT): Add
+ $(srcdir)/acgo.at.
+ (TESTSUITE_HAND_AT): Add go.at.
+ (AUTOCONF_FILES): Add $(autoconfdir)/go.m4.
+ * NEWS: Update.
+
+2011-02-20 Christian Rössel <christian.roessel@gmx.de> (tiny change)
+ Markus Geimer <m.geimer@fz-juelich.de> (tiny change)
+
+ Fix OpenMP flag detection for various Fortran compilers.
+ * lib/autoconf/c.m4 (_AC_LANG_OPENMP(Fortran 77)): Use '!$'
+ OpenMP-conditional compilation construct, to force compile
+ failure with missing OpenMP flag.
+ (AC_OPENMP): Add flags for Cray CCE and NEC SX compilers.
+ * THANKS: Update.
+
+2011-02-18 Eric Blake <eblake@redhat.com>
+
+ docs: document fourth argument of AC_RUN_IFELSE better
+ * doc/autoconf.texi (Runtime) <AC_RUN_IFELSE>: Make synopsis show
+ that the default is configure failure. Rework the text about
+ proper use of the fourth argument.
+
+ long long: don't abort configure when cross-compiling
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Provide no-op
+ cross-compiling fallback; fixing regression from 2011-02-16.
+
+2011-02-16 Patrick Welche <prlw1@cam.ac.uk> (tiny change)
+
+ docs: fix a typo
+ * doc/autoconf.texi (Generic Structures): Fix typo.
+
+2011-02-16 Matt Kraai <kraai@ftbfs.org> (tiny change)
+
+ docs: fix some typos
+ * doc/autoconf.texi (testsuite Scripts): Fix typos.
+ * THANKS: Update.
+
+2011-02-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ autoconf: tune long long tests, particularly for c99
+
+ This change is imported from gnulib.
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Don't bother compiling
+ or running anything if c99, or if unsigned long long int does not
+ work. In either case, we know the answer without further tests.
+ Do not compile _AC_TYPE_LONG_LONG_SNIPPET twice. Instead, compile
+ it at most once, and use its results for both long long int and
+ unsigned long long int. This is more likely to be efficient in
+ the common case where the program wants to check for both long
+ long int and unsigned long long int.
+ (AC_TYPE_UNSIGNED_LONG_LONG_INT): Don't bother compiling if c99,
+ since the answer is already known.
+
+2011-02-15 Eric Blake <eblake@redhat.com>
+
+ doc: fix debug advice typo
+ * doc/autoconf.texi (Debugging): Put shell option in right place.
+ Reported by Reuben Thomas.
+
+2011-02-12 Giulio Paci <giuliopaci@interfree.it> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix detection of link flags for fort77 on GNU/Linux.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Properly detect
+ the fort77 (f2c wrapper) compiler verbose linking output flag.
+ Fixes also AC_F77_LIBRARY_LDFLAGS and AC_F77_DUMMY_MAIN.
+ * THANKS: Update.
+
+2011-02-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi: Rebuild menus using emacs ^C ^U ^A.
+
+2011-02-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ autoconf: new macro AC_HEADER_CHECK_STDBOOL
+ * NEWS: Document this.
+ * doc/autoconf.texi (Particular Headers): Likewise.
+ In example, don't assume a 'system.h' exists.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADER_STDBOOL): New macro.
+ Use it with AN_IDENTIFIER, since it's less heavyweight.
+ Reindent to match gnulib, since that's a bit nicer.
+ (AC_HEADER_STDBOOL): Reimplement in terms of it.
+
+2011-01-29 Jim Warhol <jrw@jwarhol.com> (tiny change)
+
+ * doc/autoconf.texi (Introduction): Fix typo.
+ * THANKS: Update.
+
+2011-01-27 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ docs: another parallel make issue
+ * doc/autoconf.texi (Parallel Make): Document that some make
+ implementations, when run in parallel mode, connect stdout and
+ stderr of child processes to pipes or temporary files, and might
+ re-route stderr of spawned processes to stout. Also document
+ that FreeBSD make in parallel mode reuses the same shell for
+ multiple commands within one recipe (like NetBSD make does).
+
+2011-01-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Eric Blake <eblake@redhat.com>
+
+ docs: advise against HP-UX make due to time stamp semantics.
+ * doc/autoconf.texi (Timestamps and Make): Document HP-UX 11.31
+ make issue with targets having the same time stamps as their
+ prerequisites.
+ * doc/install.texi (Particular Systems): Warn against using
+ HP-UX make.
+
+2011-01-25 Eric Blake <eblake@redhat.com>
+
+ maint: reflect recent copyright assignments
+ * AUTHORS: Update.
+
+2011-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: new section about whitespace trimmed from make command-lines.
+ * doc/autoconf.texi (Command-line Macros and whitespace): New
+ section, document trimming of whitespace from macros set on the
+ command line and from the environment.
+
+2011-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: document how to use comment characters in rules.
+ * doc/autoconf.texi (Comments in Make Rules): Explain how to
+ produce a `#' in a rule.
+ (Comments in Make Macros): Add cross reference.
+ Suggestion from Eric Blake.
+
+ docs: new sections about comments and whitespace in make macros.
+ * doc/autoconf.texi (Top, Portable Make): Adjust menus.
+ (Comments in Make Macros, Trailing whitespace in Make Macros):
+ New sections.
+ Suggestion by Stefano Lattarini.
+
+ docs: do not use AIX 5.3 cp -R.
+ * doc/autoconf.texi (Limitations of Usual Tools): Document one
+ instance of the cp -R bug on AIX 5.3. This seems to have been
+ fixed in 6.1 and newer releases.
+
+ docs: update entry about unset.
+ * doc/autoconf.texi (Limitations of Builtins): NetBSD sh unset
+ also fails upon `unset' of a variable that is not set. Bash 2.01
+ could also dump core over `unset MAILPATH'.
+ Suggestion by Eric Blake.
+
+2011-01-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix LEXLIB and YYTEXT_POINTER with IRIX 6.5 flex 2.5.4.
+ * lib/autoconf/programs.m4 (_AC_PROG_LEX_YYTEXT_DECL):
+ Overquote nontrivial yyless argument, to compensate for
+ underquoted macro definition in IRIX 6.5 flex 2.5.4
+ leading to compile failure due to incompatible operands.
+ Fixes Automake silent-lex-generic.test failure.
+
+2011-01-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: Tru64/OSF sh treats read as special builtin
+ * doc/autoconf.texi (Limitations of Builtins): read may exit
+ upon unreadable or non-existent file with Tru64/OSF 5.1 sh.
+
+2011-01-12 Eric Blake <eblake@redhat.com>
+
+ docs: fix description of m4_ifval
+ * doc/autoconf.texi (Conditional constructs) <m4_ifval>: Use
+ correct argument order.
+ * THANKS: Update.
+ Reported by Mostafa.
+
+2011-01-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid reference to $CYGWIN in Fortran macros.
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Require
+ AC_CANONICAL_HOST. Replace test for $CYGWIN with $host_s test.
+ * tests/fortran.at (AC_F77_DUMMY_MAIN usage)
+ (AC_FC_DUMMY_MAIN usage, AC_F77_MAIN usage, AC_FC_MAIN usage):
+ Use AT_CONFIGURE_AC and simplify accordingly, so auxiliary
+ scripts are copied into the test directories.
+ (AC_F77_FUNC usage, AC_FC_FUNC usage): Likewise. Adjust to
+ autoheader being used now.
+
+ docs: link to Gnulib configmake documentation.
+ * doc/autoconf.texi (Defining Directories): Use proper crossref,
+ now that the Gnulib manual has a configmake section.
+ Thanks to Karl Berry.
+
+2011-01-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: link to 'set -e' shell behavior overview.
+ * doc/autoconf.texi (Limitations of Builtins): Add link to
+ Sven Mascheck's 'set -e' page. Replace broken Opengroup link.
+ Suggestion by Eric Blake.
+
+ docs: mention configmake module for defining directories.
+ * doc/autoconf.texi (Defining Directories): Mention configmake
+ gnulib module.
+ Suggestion by Karl Berry and Eric Blake.
+
+2011-01-04 Eric Blake <eblake@redhat.com>
+
+ doc: improve install.texi texinfo markup
+ * doc/install.texi: Don't force @firstparagraphindent on all
+ clients; instead, add it only when building INSTALL. Compress
+ copyright.
+ * Makefile.am (INSTALL): Match gnulib's formatting.
+ Reported by Karl Berry.
+
+ maint: update copyright year
+ All files changed to add 2011, via 'make update-copyright'.
+
+ maint: resync upstream files
+ * GNUmakefile: Regenerated by 'make fetch'.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/make-stds.texi: Likewise.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/Struct.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+ maint: document use of copyright ranges
+ * README: Copy coreutils wording for allowing copyright year
+ ranges.
+ * cfg.mk (UPDATE_COPYRIGHT_USE_INTERVALS): Now that GNU Coding
+ Standards permit it, prefer shorthand copyright.
+ * .x-update-copyright: Exempt an imported file.
+
+2011-01-03 Karl Berry <karl@freefriends.org>
+
+ Avoid using @acronym in install.texi.
+ * doc/install.texi (Basic Installation, Multiple Architectures)
+ (Installation Names): Write `GNU' instead of `@acronym{GNU}'.
+
+2010-12-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ autoconf: Use -D_STDC_C99=, not -xc99=all, with Solaris cc
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C99): Use -D_STDC_C99= rather than
+ -xc99=all to convince Solaris Studio cc to compile c99 programs.
+
+2010-11-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ autotest: fix file descriptor leak
+ * lib/autotest/general.m4 (_AT_CHECK): Close AS_MESSAGE_LOG_FD
+ when running the test. Problem reported by Luke Mewburn in
+ <http://lists.gnu.org/archive/html/autoconf/2010-11/msg00036.html>.
+
+2010-11-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ autoconf: don't assume sys/stat.h and sys/types.h when testing C89
+ Problem reported by Patrick Pelissier in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2010-11/msg00019.html>.
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C89): Don't include sys/types.h
+ and sys/stat.h. Instead, define a dummy struct stat. C89 doesn't
+ guarantee sys/types.h and sys/stat.h.
+
+2010-11-10 Reuben Thomas <rrt@sc3d.org> (tiny change)
+
+ docs: avoid first person, and credit history to David MacKenzie
+ * doc/autoconf.texi (History): Add credit.
+
+2010-10-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ docs: Posix now says "((cat))" isn't portable
+ * doc/autoconf.texi (Parenthesis): Update documentation to reflect
+ what Posix 1003.1-2008 says about "((".
+
+2010-10-20 Eric Blake <eblake@redhat.com>
+
+ docs: document dash bug in <>
+ * doc/autoconf.texi (File Descriptors): Dash 0.5.5 truncates on
+ <>; at least this was fixed in dash 0.5.6.
+
+2010-10-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: avoid AC_CACHE_CHECK test failure with dash.
+ * tests/base.at (AC_CACHE_CHECK): Normalize configure exit
+ status in presence of syntax error in sourced site file.
+ Do not error out if configure is aborted at this point.
+ Fixes testsuite failure with dash 0.5.5.1.
+
+2010-10-08 Eric Blake <eblake@redhat.com>
+
+ AS_LITERAL_IF: Treat raw = as literal again.
+ * lib/m4sugar/m4sh.m4 (_AS_LITERAL_IF): Treat = like +.
+ * tests/m4sh.at (AS@&t@_TR_SH and AS@&t@_TR_CPP)
+ (AS@&t@_LITERAL_IF): Expand tests.
+ * NEWS: Document the fix.
+ Reported via Ben Pfaff; originally http://bugs.debian.org/593838
+
+2010-09-24 Joshua G. Hale <jgh.emc@gmail.com> (tiny change)
+
+ docs: fix typo in AC_CONFIG_FILES example code.
+ * doc/autoconf.texi (Configuration Actions): Fix typo.
+ * THANKS: Update.
+
+2010-10-05 Eric Blake <eblake@redhat.com>
+
+ doc: suggest a few more workarounds
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Mention
+ that 'redundant' brackets can work around Solaris bug.
+ (File Descriptors): Mention that {} works as well as () for
+ silencing file-not-found warnings.
+ * THANKS: Update.
+ Suggested by Pádraig Brady.
+
+2010-09-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: normalize trailing spaces in gcc -E -dD output.
+ * tests/compile.at (AC_LANG_SOURCE example)
+ (AC_LANG_PROGRAM example): Remove trailing spaces before
+ comparing with expected output. Fixes testsuite failure
+ with GCC 2.95.3 on Haiku.
+ Report by Scott McCreary.
+
+2010-09-22 Eric Blake <eblake@redhat.com>
+
+ Release Version 2.68.
+ * NEWS: Mention the release.
+
+2010-09-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ autom4te: add traces for likely future Automake macros
+ * lib/autom4te.in (Automake-preselections): Trace
+ AM_MAKEFILE_INCLUDE, AM_NLS, AM_POT_TOOLS, AM_PATH_GUILE,
+ AM_PROG_MOC, AM_XGETTEXT_OPTION, _AM_MAKEFILE_INCLUDE.
+
+2010-09-22 Eric Blake <eblake@redhat.com>
+
+ AC_REPLACE_FUNCS: allow split lines again
+ * lib/autoconf/functions.m4 (AC_REPLACE_FUNCS): Flatten newlines
+ and move guts...
+ (_AC_REPLACE_FUNCS): ...to new helper.
+ * tests/semantics.at (AC_REPLACE_FUNCS): Enhance test.
+ Reported by Ralf Wildenhues.
+
+2010-09-21 Eric Blake <eblake@redhat.com>
+
+ AC_LIBOBJ: optimize internal use
+ * lib/autoconf/general.m4 (_AC_LIBOBJ): Move literal check...
+ (AC_LIBOBJ): ...into callers.
+ * lib/autoconf/functions.m4 (_AC_REPLACE_FUNC): Likewise, thus
+ avoiding a second call to AS_LITERAL_IF.
+
+ AC_REPLACE_FUNCS: restore shell loop for non-literal
+ * lib/autoconf/functions.m4 (AC_REPLACE_FUNCS): Handle
+ non-literals, which was lost in 2010-02-26 optimization.
+ * tests/semantics.at (AC_REPLACE_FUNCS): Enhance test.
+ * NEWS: Document the fix.
+ * THANKS: Update.
+ Reported by Wiseman Jun.
+
+ maint: resync upstream files
+ * build-aux/gendocs.sh: Resync via 'make fetch'.
+
+ tests: XFAIL in the face of a MacOS X bug
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Mention
+ the issue.
+ * tests/torture.at (Substitute and define special characters):
+ Detect if sed cannot process 8-bit bytes in the C locale.
+ * THANKS: Update.
+ Reported by Rochan.
+
+2010-09-20 Eric Blake <eblake@redhat.com>
+
+ autom4te: don't filter out portions of location traces
+ * bin/autom4te.in (_m4_warn): Pass warnings through the channels
+ machinery as a single chunk, to avoid partial filtering.
+ * lib/m4sugar/m4sugar.m4 (_m4_warn): Document the conventions.
+ * tests/m4sugar.at (m4@&t@_warn): Enhance test to catch this.
+ Reported by Bruno Haible.
+
+2010-09-17 Eric Blake <eblake@redhat.com>
+
+ build: support autobuild
+ * cfg.mk (gnulib-update): Add autobuild.m4.
+ * configure.ac (AB_INIT): Output autobuild header.
+ * m4/autobuild.m4: New file, from gnulib.
+ * build-aux/config.guess: Resync from upstream.
+ * build-aux/config.sub: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/fdl.texi: Likewise.
+ * doc/gnu-oids.texi: Likewise.
+ * doc/make-stds.texi: Likewise.
+ * doc/standards.texi: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+
+ config.status: avoid corrupting $ac_t
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS_PREPARE): Use a
+ different name, so as not to clash with pre-2.50 usage of "$ac_t"
+ as a tab character.
+ Reported by Sam Steingold.
+
+2010-09-17 Bruno Haible <bruno@clisp.org>
+
+ docs: mark several macros obsolete
+ * doc/autoconf.texi (Particular Functions): Mark AC_FUNC_ERROR_AT_LINE,
+ AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, AC_FUNC_MKTIME, AC_FUNC_STRTOD
+ as obsolete and refer to Gnulib.
+ * NEWS: Mention the change.
+
+ AC_FUNC_STRNLEN: more realistic cross-compilation guess
+ * lib/autoconf/functions.m4 (AC_FUNC_STRNLEN): Require
+ AC_CANONICAL_HOST. When cross-compiling, guess it works everywhere
+ except on AIX.
+
+2010-09-16 Eric Blake <eblake@redhat.com>
+
+ m4sh: fix today's AS_BOX regression
+ * lib/m4sugar/m4sh.m4 (_AS_BOX_LITERAL): Fix underquotation.
+ Reported by Stefano Lattarini.
+
+ fortran: avoid misparsed FCLIBS from Fortran compiler
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Also skip
+ 'Configured by:' lines from gfortran.
+ * NEWS: Mention it.
+ Reported by Stefano Lattarini.
+
+2010-09-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add autom4te trace for AM_PROG_AR.
+ * lib/autom4te.in (Automake-preselections): Trace
+ AM_PROG_AR.
+
+2010-09-16 Eric Blake <eblake@redhat.com>
+
+ m4sugar: fix regression in AC_MSG_ERROR expansion
+ * lib/m4sugar/m4sugar.m4 (m4_defun_init): Avoid macro
+ concatenation on subsequent expansions
+ * tests/m4sh.at (AS_WARN and AS_ERROR): New test.
+ * tests/m4sugar.at (m4@&t@_require: one-shot initialization):
+ Enhance test.
+ * NEWS: Document the fix.
+ * THANKS: Update.
+ Reported by Adrian Bunk and and Nishio Futoshi.
+
+2010-09-13 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: simplify grepping of 'automake --version'.
+ * tests/tools.at (autom4te preselections): Remove minor
+ redundancies in regular expressions used to grep the output
+ 'automake --version' for test skipping.
+ * tests/torture.at (Configuring subdirectories)
+ (Unusual Automake input files): Likewise.
+
+2010-09-13 Eric Blake <eblake@redhat.com>
+
+ autotest: work around zsh bug
+ * lib/autotest/general.m4 (AT_DATA): Special case an empty data
+ file, since zsh botches empty here-docs.
+ * doc/autoconf.texi (Writing Testsuites) <AT_DATA>: Document that
+ this allows empty contents.
+ * tests/autotest.at (AT_DATA): New test.
+ Reported by Ralf Wildenhues.
+
+ docs: mention gnulib portability docs
+ * doc/autoconf.texi (Function Portability, Header Portability):
+ Add external links to gnulib.
+
+2010-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Gary V. Vaughan <gary@gnu.org>
+
+ docs: document zsh specialty with empty here-documents.
+ * doc/autoconf.texi (Here-Documents): zsh 4.3.10 adds a newline
+ to empty here-docs.
+
+2010-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ docs: document zsh special array $options.
+ * doc/autoconf.texi (Special Shell Variables): Add entry for
+ `options'.
+
+ doc: minor updates.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Use
+ second argument of @uref consistently, for nicer OpenMP link.
+ (Polymorphic Variables): Restore font-lock.
+ (Debugging): Add item for bashdb.
+
+ Document and test AT_CHECK args shell execution environment.
+ * doc/autoconf.texi (Writing Testsuites): Document that COMMANDS
+ is run in a subshell, but RUN-IF-FAIL and RUN-IF-PASS are not.
+ * tests/autotest.at (AT@&t@_CHECK execution environment): New
+ test.
+ * NEWS: Update.
+
+ autotest: document and test at_status semantics.
+ * doc/autoconf.texi (Writing Testsuites): Document $at_status.
+ * tests/autotest.at (at_status): New test.
+ * NEWS: Update.
+
+ doc: index entries for non-environment, non-output variables.
+ * doc/autoconf.texi: Clarify the meaning of the various variable
+ indices. Merge variable index `vr' into concept index using
+ syncodeindex.
+ (Configuration Actions, Generic Programs, Generic Functions)
+ (Writing Testsuites): Add index entries for documented shell
+ variables used during in configure and testsuite scripts.
+
+2010-09-12 Fernando Carrijo <fcarrijo@freedesktop.org> (tiny change)
+
+ docs: fix minor typo and 'See See foo' instances
+ * doc/autoconf.texi (Buffer Overruns and Subscript Errors): Fix
+ usage of TeX superscript notation to correctly represent number
+ exponent.
+ (Shell Functions): s/[Ss]ee @xref/@xref/
+ (Limitations of Shell Builtins, Canonicalizing): Likewise.
+ * THANKS: Update.
+
+2010-09-13 Eric Blake <eblake@redhat.com>
+
+ tests: skip broken automake wrapper on MirBSD
+ * tests/tools.at (autom4te preselections): Skip, rather than fail,
+ if 'automake --version' succeeds without printing a version when
+ an environment variable is not set.
+ * tests/torture.at (Configuring subdirectories)
+ (Unusual Automake input files): Likewise.
+
+2010-09-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ doc: minor indexing update.
+ (Shell Substitutions, Site Defaults): Fix markup for indexed
+ entried, using @code and @file as appropriate.
+ (M4 Macro Index): Clarify which of the indexed macros have m4_
+ and which have AS_ prefix.
+
+2010-09-08 Eric Blake <eblake@redhat.com>
+
+ m4sh: preserve set -vx over re-exec
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Trace through
+ re-exec, to make it easier to debug script startup issues.
+ Idea from recent bug-gnulib change to init.sh.
+
+ docs: update alloca recommendations
+ * doc/autoconf.texi (Particular Functions): Don't redeclare alloca
+ on FreeBSD.
+ * THANKS: Update.
+ Reported by Giorgos Keramidas.
+
+ docs: link to GNU Coding Standards in intro
+ * doc/autoconf.texi (Introduction): Actually link to the
+ standards. Make other references consistent.
+
+ docs: mention traditional awk limitation
+ * doc/autoconf.texi (Limitations of Usual Tools) <awk>: Mention
+ that traditional awk lacks ENVIRON. Add reference to awk manual.
+ (Particular Programs) <AC_PROG_AWK>: Add reference to awk section.
+ Reported by Ralf Wildenhues.
+
+2010-09-07 Eric Blake <eblake@redhat.com>
+
+ docs: mention bash vs. POSIXLY_CORRECT
+ * doc/autoconf.texi (Special Shell Variables) <POSIXLY_CORRECT>:
+ Document bash behavior.
+ * THANKS: Update.
+ Reported by Dustin J. Mitchell, via bug-gnulib list.
+
+ docs: enhance recommendations on test usage
+ * doc/autoconf.texi (Limitations of Builtins) <test (strings)>:
+ Mention yet another Solaris issue.
+ Reported by Stefano Lattarini.
+
+2010-08-30 Eric Blake <eblake@redhat.com>
+
+ tests: avoid trashing /
+ * tests/torture.at (AC_CONFIG_COMMANDS with temporary directory):
+ Use a relative path, rather than risking issues with /.
+ Reported by Ralf Wildenhues.
+
+ docs: mention Solaris here-docs vs. ${a-"b c"}
+ * doc/autoconf.texi (Shell Substitutions) <${var:=value}>:
+ Document problem of "" within here-docs.
+ Reported by Ralf Wildenhues.
+
+ fortran: always avoid AC_LANG_CONFTEST warning
+ * lib/autoconf/lang.m4 (AC_LANG_CONFTEST()): Make the default
+ match the fact that the default AC_LANG_SOURCE does not inline
+ confdefs.h in the first place.
+ * lib/autoconf/fortran.m4 (AC_FC_FREEFORM, AC_FC_FIXEDFORM)
+ (AC_FC_LINE_LENGTH, __AC_FC_NAME_MANGLING): Revert previous use of
+ AC_LANG_DEFINES_PROVIDED.
+ Suggested by Ralf Wildenhues.
+
+ config.status: minimize use of $tmp
+ * lib/autoconf/status.m4 (_AC_OUTPUT_MAIN_LOOP)
+ (_AC_OUTPUT_FILES_PREPARE, _AC_OUTPUT_FILE)
+ (_AC_OUTPUT_HEADERS_PREPARE, _AC_OUTPUT_HEADER): Use $ac_tmp
+ internally, while preserving $tmp for existing users.
+ * tests/torture.at (AC_CONFIG_COMMANDS with temporary directory):
+ New test, that $tmp is available but not essential.
+
+ docs: avoid use of $tmp outside of config.status use
+ * doc/autoconf.texi (Polymorphic Variables, Shell Substitutions):
+ Use $var or $t instead.
+ (Limitations of Usual Tools): Use $dir instead.
+ (Initialization Macros) <AS_TMPDIR>: Make good on the NEWS
+ regarding AS_TMPDIR being documented as consuming $tmp.
+ Suggested by Ralf Wildenhues.
+
+2010-08-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ AC_PROG_YACC: fix comment re what "yacc" stands for
+ * lib/autoconf/programs.m4 (AC_PROG_YACC): YACC stands for
+ "Yet Another Compiler Compiler", not "Yet Another C Compiler".
+ Problem reported by Chris Long in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2010-08/msg00134.html>.
+
+2010-08-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid long lines in testsuite script.
+ * lib/autotest/general.m4 (AT_INIT): Remove definition of
+ AT_groups_all. Initialize at_groups from at_help_all, with
+ newlines instead of spaces separating test groups numbers.
+ Adjust all code to newlines.
+ * NEWS: Update.
+ * tests/autotest.at (Huge testsuite): New test.
+
+ Try to update config.cache atomically; respect symlinks.
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): Use `mv -f' to update
+ the cache file if it is a regular file and not a symlink. Move
+ first to temporary name in the target directory if not in the
+ current directory for atomicity across mount points.
+ * tests/base.at (AC_CACHE_CHECK): Try symlinked cache file.
+ * doc/autoconf.texi (Cache Files): Leftover temporary cache
+ files may be deleted by the user.
+ * NEWS: Update.
+
+2010-08-27 Eric Blake <eblake@redhat.com>
+
+ m4sh: protect LINENO against stray macro
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Double quote entire
+ sed script, to avoid issue uncovered by automake testsuite where
+ 'b' was an m4 macro that broke execution on dash.
+ Reported by Stefano Lattarini.
+
+ m4sh: assume ${a:-b} support
+ * tests/m4sh.at (Null variable substitution): New test.
+ * doc/autoconf.texi (Shell Substitutions) <${var:-value}>: Mention
+ that m4sh guarantees support.
+ (Limitations of Usual Tools) <mktemp>: Use it.
+ * lib/m4sugar/m4sh.m4 (AS_LINENO_POP, AS_VAR_IF, AS_TMPDIR):
+ Exploit use of colon for smaller files.
+
+2010-08-26 Eric Blake <eblake@redhat.com>
+
+ docs: document m4_define_default
+ * doc/autoconf.texi (Conditional constructs) <m4_define_default>:
+ Document it, since gnulib wants to use it.
+ * NEWS: Mention this.
+
+ autoconf: warn if AC_*_IFELSE lacks complete program
+ * lib/autoconf/lang.m4 (AC_LANG_DEFINES_PROVIDED): New macro.
+ (AC_LANG_SOURCE): Call it.
+ (AC_LANG_CONFTEST): Add warning if new macro is not called.
+ * lib/autoconf/c.m4 (_AC_LANG_OPENMP): Add missing AC_LANG_SOURCE.
+ * lib/autoconf/fortran.m4 (AC_FC_FREEFORM, AC_FC_FIXEDFORM)
+ (AC_FC_LINE_LENGTH, __AC_FC_NAME_MANGLING): Intentionally bypass
+ AC_LANG_SOURCE.
+ * lib/autoconf/programs.m4 (_AC_PROG_LEX_YYTEXT_DECL): Likewise.
+ * tests/compile.at (AC_COMPILE_IFELSE): New test.
+ * doc/autoconf.texi (Generating Sources) <AC_LANG_CONFTEST>:
+ Document new warning.
+ <AC_LANG_DEFINES_PROVIDED>: Document new macro.
+ <AC_LANG_SOURCE>: Document use of new macro.
+ * NEWS: Document the improvement.
+ Suggested by Bruno Haible.
+
+ autoconf: fix regression in AC_FUNC_SELECT_ARGTYPES
+ * lib/autoconf/functions.m4 (AC_FUNC_SELECT_ARGTYPES): Fix
+ quoting; regression from yesterday leaked '' into default value.
+ Reported by Ralf Wildenhues.
+
+ docs: mention another issue with variable expansion
+ In particular, see http://austingroupbugs.net/view.php?id=221
+ and http://austingroupbugs.net/view.php?id=255.
+ * doc/autoconf.texi (Shell Substitutions) <${var+value}>: New
+ subsection.
+ <${var=literal}>: Tweak wording. Add mention of an ambiguity
+ allowed by POSIX.
+ * tests/torture.at (Substitute and define special characters):
+ Make test more robust; here, the outer "" is in a here-doc, and
+ does not violate the quoting rules of thumb just documented.
+
+2010-08-25 Eric Blake <eblake@redhat.com>
+
+ m4sh: revert incorrect mix of "${a='b'}"
+ * bin/autoconf.as: Revert leak of literal '' into assignment.
+ * tests/tools.at (autom4te preselections): Likewise.
+
+ m4sh: revert regression in AS_TMPDIR
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): The previous patch trying to
+ rename $tmp to $as_tmp was wrong; config.status relies on it.
+
+ m4sh: reduce size of AS_VAR_TEST_SET
+ * lib/m4sugar/m4sh.m4 (AS_VAR_TEST_SET): Make more compact.
+
+ tests: improve some shell assumption testing
+ * tests/m4sh.at (Functions Support, Functions and return Support)
+ (Negated classes in globbing): Update comments.
+ (AS@&t@_VAR basics): Test comparison to empty string.
+
+ docs: mention cost of globbing during variable expansion
+ * doc/autoconf.texi (Shell Substitutions) <${var=literal}>:
+ Recommend quoting substitutions that might trigger globbing.
+ (Limitations of Builtins) <:>: Likewise.
+ * bin/autoconf.as: Follow our own advice.
+ * lib/autoconf/functions.m4 (AC_FUNC_SELECT_ARGTYPES): Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Likewise.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Likewise.
+ * lib/autotest/general.m4 (_AT_FINISH): Likewise.
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Likewise.
+ * tests/autotest.at (parallel autotest and signal handling):
+ Likewise.
+ * tests/c.at (AC_OPENMP and C, AC_OPENMP and C++): Likewise.
+ * tests/foreign.at (shtool): Likewise.
+ * tests/fortran.at: Likewise.
+ * tests/tools.at (autom4te preselections): Likewise.
+ * tests/torture.at (VPATH): Likewise.
+
+ m4sh: fix some namespace safety issues
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_SANITIZE): Avoid problems if
+ as_myself is inherited from environment.
+ (AS_TMPDIR): Be namespace clean.
+
+2010-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ tests: fix AC_CACHE_CHECK to skip with bad shells.
+ * tests/base.at (AC_CACHE_CHECK): Skip test with malformed
+ config.site file if the shell does not report syntax errors
+ from a sourced file. Fixes test failure on AIX and FreeBSD.
+ Report from Rainer Tammer.
+
+2010-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ AC_HEADER_STDBOOL: avoid spurious failure with modern xlc
+ * lib/autoconf/headers.m4 (AC_HEADER_STDBOOL): Move the "bool e =
+ &s;" test into the main program, as C99 might plausibly be
+ interpreted as not requiring support for this construction in
+ static initializers. Remove the "#if defined __xlc__" stuff, as
+ the bug is not present in recent xlc implementations, and they
+ reject the test for other (valid) reasons. People using ancient
+ xlc versions, if any, are suggested to update to fixed versions.
+ Reported by Ralf Wildenhues in the thread starting at:
+ http://lists.gnu.org/archive/html/bug-autoconf/2010-08/msg00103.html
+
+2010-08-24 Eric Blake <eblake@redhat.com>
+
+ AC_FUNC_GETLOADAVG: don't define SVR4 on cygwin
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_GETLOADAVG): Only define
+ SVR4 when -lkvm is required.
+ * THANKS: Update.
+ Reported by Yaakov Selkowitz.
+
+2010-08-23 Eric Blake <eblake@redhat.com>
+
+ AC_HEADER_STDBOOL: avoid spurious clang failure
+ * lib/autoconf/headers.m4 (AC_HEADER_STDBOOL): Drop gcc (and by
+ extension clang) check in favor of a gnulib test. Force failure,
+ rather than merely testing for a compiler extension.
+ * THANKS: Update.
+ Reported by Anders Kaseorg.
+
+2010-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ doc: AIX sed dislikes indented comments.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Update.
+
+2010-08-19 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix autoreconf docs w.r.t. AUTOM4TE environment variable.
+ * doc/autoconf.texi (Using autoreconf to Update configure
+ Scripts): List `AUTOM4TE' among the environment variables
+ honored by autoreconf.
+ * bin/autoreconf.in ($help): Likewise.
+
+2010-08-17 Eric Blake <eblake@redhat.com>
+
+ doc: improve AS_VAR_IF details
+ * doc/autoconf.texi (Polymorphic Variables) <AS_VAR_IF>: Make it
+ clear that user must supply quotes as needed.
+ * THANKS: Update.
+ Suggested by Randall Cotton.
+
+2010-08-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix Autotest --errexit to exit after XPASSing tests.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_group_postprocess>:
+ Exit after an unexpected passing test if $at_errexit.
+ * tests/autotest.at (errexit): Also try tests that xpass, skip,
+ xfail, or fail hard.
+
+2010-08-14 Eric Blake <eblake@redhat.com>
+
+ AC_INIT: allow bugreport to contain '?'
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Relax check.
+ * tests/base.at (AC_INIT with unusual version strings): Enhance
+ test.
+ * doc/autoconf.texi (Initializing configure): Document this.
+ * NEWS: Likewise.
+ * THANKS: Update.
+ Reported by Yavor Doganov and others.
+
+2010-08-10 Peter Rosin <peda@lysator.liu.se>
+
+ Keep testsuite files on unexpected pass.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_group_postprocess>:
+ Don't cleanup the group directory when a test unexpectedly passes.
+ * tests/autotest.at (Cleanup): Check that an unexpected pass leaves
+ the test group directory intact.
+
+2010-08-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Skip AC_FC_SRCEXT([f90]) tests with a Fortran 77 compiler in $FC.
+ * tests/fortran.at (AC_FC_FREEFORM with AC_FC_SRCEXT)
+ (AC_FC_FIXEDFORM with AC_FC_SRCEXT): Skip if the compiler cannot
+ handle files with .f90 extension.
+ Report by Luke Dalessandro.
+
+ Fix testsuite failures with typical m4-x.y.z program suffix.
+ * tests/local.at (AT_CHECK_M4): Normalize hyphens and digits
+ after the `m4' program name.
+ * THANKS: Update.
+ Report by Luke Dalessandro.
+
+2010-08-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix description of AC_CONFIG_TESTDIR to not mention atconfig.in.
+ * doc/autoconf.texi (Making testsuite Scripts): atconfig is not
+ created from an input template.
+
+2010-08-05 Bruno Haible <bruno@clisp.org>
+ and Eric Blake <eblake@redhat.com>
+
+ AC_FUNC_ALLOCA: modernize
+ * lib/autoconf/functions.m4 (AC_FUNC_ALLOCA): Assume that alloca's
+ return type is 'void *', not 'char *'. Supply C89 prototype.
+ Reported by Thomas Klausner.
+
+2010-08-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite failure due to bugs in third-party aclocal macros.
+ * tests/torture.at (Non-literal AC_CONFIG_SUBDIRS): Create a
+ hand-written aclocal.m4 file, so the -Werror test doesn't fail
+ over aclocal warnings about errors in third-party macro files.
+ Simplify test accordingly, calling autoreconf throughout.
+ Report by Bob Friesenhahn.
+
+ Fix AC_LANG_SOURCE and AC_LANG_PROGRAM tests.
+ * tests/compile.at (AC_LANG_SOURCE example)
+ (AC_LANG_PROGRAM example): Fix broken sed script for
+ extracting the interesting part of the conftest.c file.
+ Fixes test failure on Haiku.
+ * THANKS: Update.
+ Report by Scott McCreary.
+
+2010-08-03 Eric Blake <eblake@redhat.com>
+
+ docs: mention bash bug with word splitting
+ * doc/autoconf.texi (Shell Substitutions): Document bash bug, and
+ zsh default behavior difference.
+ Reported by Ralf Wildenhues.
+
+ docs: mention ksh bug with function syntax
+ * doc/autoconf.texi (Shell Functions): Document ksh93 limitation.
+
+2010-08-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix typo in Autotest color test, for dash testsuite failure.
+ * tests/autotest.at (colored test results): Use exit not
+ Exit. Fixes test failure with dash 0.5.4.
+
+2010-08-02 Eric Blake <eblake@redhat.com>
+
+ docs: track recent copyright assignment
+ * AUTHORS: Add Peter Rosin.
+
+2010-08-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add testsuite exposure for last-minute fix in 2.67.
+ * tests/autotest.at (parallel args but non-working mkfifo):
+ New test, to expose the failure v2.66-23-g991183c avoided.
+
+ Ensure unnamed test group categories are separated from previous.
+ * doc/autoconf.texi (Writing Testsuites) <AT_BANNER>: Update
+ description.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_banner>: Set banner
+ to single space, not empty line, once printed. For empty
+ banners, print a single empty line to separate them from a
+ previous test group category.
+ * tests/autotest.at (Banners): Insert another test group; adjust
+ tests accordingly. Extend test to cover semantic change.
+ * NEWS: Update.
+
+2010-07-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix typos in perlpod docs.
+ * lib/Autom4te/ChannelDefs.pm, lib/Autom4te/Channels.pm,
+ lib/Autom4te/General.pm: Fix typos and spacing in perlpod
+ documentation and in comments.
+
+2010-07-29 Eric Blake <eblake@redhat.com>
+
+ docs: mention ksh file descriptor limitation
+ * doc/autoconf.texi (File Descriptors): Document issue with fd 10
+ and above.
+ Reported by Ralf Wildenhues.
+
+ docs: mention cd limitation
+ * doc/autoconf.texi (Limitations of Builtins) <cd>: Document
+ issues with empty argument.
+
+2010-07-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add missing index entries to manual.
+ * doc/autoconf.texi (Fortran Compiler, Language Choice): Add
+ index entries for AC_FC_DUMMY_MAIN, AC_LANG; reformat entry for
+ AC_LANG_ASSERT.
+
+2010-07-21 Eric Blake <eblake@redhat.com>
+
+ Release Version 2.67.
+ * NEWS: Mention the release.
+
+ Prepare for release.
+ * maint.mk (PREV_VERSION_REGEXP): New macro, missed when
+ backporting update-NEWS_hash from gnulib.
+ * cfg.mk (old_NEWS_hash): Correctly generate.
+ * build-aux/gendocs.sh: Temporarily break sync from upstream, to
+ avoid including spurious directories in info source tarball.
+
+ Avoid spurious testsuite failures.
+ * doc/autoconf.texi (Generating Sources): Don't mix gcc '-E' and
+ '-o -', since the former already implies stdout, while the latter
+ creates -.exe on cygwin.
+ * tests/compile.at (AC_LANG_SOURCE example)
+ (AC_LANG_PROGRAM example): Likewise. Also prevent any config.site
+ interference.
+
+ Partially revert previous patch.
+ * lib/autotest/general.m4 (AT_INIT) <serial testing>: Changing
+ at_jobs here breaks output if -j2 was requested but shell is
+ insufficient to support parallel testing.
+ Reported by Ralf Wildenhues.
+
+ Minor testsuite size reduction.
+ * lib/autotest/general.m4 (AT_INIT) <serial testing>: Ensure
+ at_jobs is 1.
+ (AT_SETUP, AT_CLEANUP): Factor initialization code...
+ (AT_INIT) <at_fn_group_banner>: ...into new function.
+ Based in part on suggestion by Ralf Wildenhues.
+
+2010-07-20 Eric Blake <eblake@redhat.com>
+
+ Close job control fd before running tests.
+ * doc/autoconf.texi (File Descriptors): Clarify limitations.
+ * lib/autotest/general.m4 (AT_CLEANUP): Avoid leaking job control
+ fifo fd to user tests.
+ (AT_INIT): Delete comment, now that close is done elsewhere.
+ Suggested by Ralf Wildenhues.
+
+2010-07-20 Paul Eggert <eggert@cs.ucla.edu>
+ and Eric Blake <eblake@redhat.com>
+
+ Plug race in parallel autotest.
+ * lib/autotest/general.m4 (AT_INIT) <Fifo job dispatcher>: Track
+ two fds to fifo in parent, to avoid race where parent can see EOF
+ before child opens fifo. Avoid any atomicity problems with tokens
+ larger than one byte.
+ * NEWS: Document the bug fix.
+
+2010-07-20 Eric Blake <eblake@redhat.com>
+
+ Another empty argument through expr workaround.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Detect empty
+ arguments. Reject empty file argument.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Check for missing argument.
+
+ Also reject ' and newline from AC_INIT strings.
+ * lib/autoconf/general.m4 (_AC_INIT_LITERAL): Reject a couple more
+ problematic characters.
+ * tests/base.at (AC_INIT with unusual version strings): Enhance
+ test.
+ * doc/autoconf.texi (Initializing configure) <AC_INIT>: Further
+ clarifications, and clean up wording about use of m4_esyscmd.
+ * NEWS: Update previous news entry.
+ Suggested by Paolo Bonzini.
+
+2010-07-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Let autoreconf pass warning flags to new-enough aclocal.
+ * bin/autoreconf.in ($aclocal_supports_warnings)
+ ($automake_supports_warnings): New globals.
+ (parse_args): Set and use them. Be sure to invoke `aclocal
+ --help' and `automake --help' just once each.
+ * NEWS: Update.
+ Prompted by report from Bruno Haible.
+
+ Fix parsing of empty variable settings on the command line.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Work around
+ expr bug returning 0 instead of the empty string.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+ Fix typo in the manual.
+ * doc/autoconf.texi (AC_ACT_IFELSE vs AC_TRY_ACT): Fix typo.
+
+2010-07-19 Eric Blake <eblake@redhat.com>
+
+ Fix up AC_INIT vs. " issues, and document it.
+ * doc/autoconf.texi (Initializing configure): Improve
+ documentation on argument restrictions.
+ * NEWS: Tweak information.
+ * lib/autoconf/general.m4 (_AC_INIT_GENERAL): New macro, that also
+ rejects literal ".
+ (_AC_INIT_PACKAGE): Use it to plug hole in last patch.
+ * tests/base.at (AC_INIT with unusual version strings): Enhance
+ test.
+
+2010-07-19 Eric Blake <eblake@redhat.com>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Relax AC_INIT requirements for PACKAGE and VERSION strings again.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_HEREDOC_IF): New macro.
+ (_AS_LITERAL_HEREDOC_IF, _AS_LITERAL_HEREDOC_IF_YES)
+ (_AS_LITERAL_HEREDOC_IF_NO): New helper macros.
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Use
+ AS_LITERAL_HEREDOC_IF for PACKAGE and VERSION strings.
+ * tests/base.at (AC_INIT with unusual version strings): New test.
+ * tests/m4sh.at (AS@&t@_LITERAL_IF): Extend test.
+ * NEWS: Update.
+
+2010-07-19 Eric Blake <eblake@redhat.com>
+
+ Fix testsuite failures from previous patch.
+ * lib/autoconf/c.m4 (_AC_PROG_PREPROC_WORKS_IFELSE): Also remove
+ conftest.i when preprocessor tests break out of a loop.
+
+2010-07-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Allow inspecting AC_PREPROC_IFELSE output in true branch.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY): Redirect
+ preprocessor output to conftest.i rather than /dev/null.
+ (_AC_PREPROC_IFELSE): Remove conftest.i in the postprocessing.
+ * tests/compile.at (Order of user actions and cleanup): Extend
+ test in the ACTION-IF-TRUE branch.
+ * doc/autoconf.texi (Running the Preprocessor): Document new
+ feature.
+ * NEWS: Update.
+
+ Fix AC_FC_LIBRARY_LDFLAGS detection for BlueGene xlf -qipa.
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Ignore
+ '-link', added spuriously when -qipa is used with the XL
+ Fortran compilers on BlueGene.
+
+ manual: compiler flags -D and -L should not be followed by space
+ * doc/autoconf.texi (Preset Output Variables): Remove space
+ between -D and -L flags and their arguments, traditional cpp
+ implementations like Solaris 10, IRIX 6.5, OSF Tru64 5.1D,
+ AIX 5.3 do not accept it.
+
+2010-07-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix comment typo in the manual.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Refer
+ to the right test in the example marker comment.
+ Spotted by Eric Blake.
+
+2010-07-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New Fortran macro AC_FC_LINE_LENGTH.
+ * lib/autoconf/fortran.m4 (AC_FC_LINE_LENGTH): New macro.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * tests/fortran.at (AC_FC_LINE_LENGTH): New test.
+ * NEWS: Update.
+
+ Fix wording about AC_CONFIG_SUBDIRS warning.
+ * doc/autoconf.texi (Subdirectories): We warn, not error, about
+ nonexistent config subdirs, but only at configure run time.
+
+2010-07-10 Eric Blake <eblake@redhat.com>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix regression of AC_CHECK_SIZEOF on pointer types.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF): Translate `*' to `p'
+ when checking literal-ness of the type, for pointer types.
+ * lib/m4sugar/m4sh.m4 (_AS_TR_SH): Also consider `*' as literal.
+ (_AS_TR_CPP): Likewise.
+ * tests/semantics.at (AC_CHECK_ALIGNOF struct): When checking
+ for numeric answer, be sure to not allow variable references.
+ (AC_CHECK_SIZEOF struct): Likewise. Also, test the
+ `AC_CHECK_SIZEOF([int *])' example from the manual.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Add
+ example marker.
+ * NEWS: Update.
+ Reports by Nishio Futoshi and Roberto Bagnara.
+
+2010-07-08 Eric Blake <eblake@redhat.com>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix regression of AC_CONFIG_SUBDIRS with multiple arguments.
+ * lib/autoconf/status.m4 (AC_CONFIG_SUBDIRS): Do not assume the
+ argument is a single word.
+ * tests/torture.at (Deep Package): Extend test to cover this.
+ (Non-literal AC_CONFIG_SUBDIRS): New test.
+ * doc/autoconf.texi (Subdirectories): Add example marker.
+ * NEWS: Update.
+ Report by Bruno Haible.
+
+2010-07-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ Fix minor copy&paste leftover in m4sh tests.
+ * tests/m4sh.at (AS@&t@_TR_SH and AS@&t@_TR_CPP): Remove
+ useless variables assignements ($var, $vAr, $VAR).
+
+2010-07-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite to not trigger Solaris sh for bug.
+ * tests/torture.at (Torturing config.status)
+ (Substitute a 2000-byte string)
+ (Substitute and define special characters)
+ (Substitute a newline): Quote first argument in for list so
+ that it does not look like an assignment.
+
+2010-07-02 Eric Blake <eblake@redhat.com>
+
+ Post-release administrivia.
+ * maint.mk (NEWS_hash): Define.
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ Release Version 2.66.
+ * NEWS: Mention the release.
+
+2010-07-02 Eric Blake <eblake@redhat.com>
+
+ Pick up some maint.mk improvements from gnulib.
+ * configure.ac (AM_INIT_AUTOMAKE): Require 1.11, and build xz
+ archives by default now.
+ * maint.mk (gzip_rsyncable): Avoid non-portable echo.
+ (VC-tag): Depend on gpg_key_ID.
+ (PREV_VERSION): Don't parse error as version.
+ (announcement): Populate email addresses with defaults.
+ (emit_upload_commands, web-manual): Reflect changes in scripts.
+ (update-NEWS-hash, emit-commit-log, release-prep): New macros.
+ * cfg.mk (announcement_Cc_, announcement_mail_headers_): Override
+ defaults.
+ * HACKING: Modernize a bit.
+
+ Resync upstream files.
+ * GNUmakefile: Run 'make fetch'.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/gendocs_template: Likewise.
+ * doc/gnu-oids.texi: Likewise.
+ * doc/make-stds.texi: Likewise.
+ * doc/standards.texi: Likewise.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+ Make AS_TR_SH and AS_TR_CPP similar.
+ * lib/m4sugar/m4sh.m4 (_AS_TR_CPP_LITERAL): Avoid underquoting.
+ (_AS_TR_CPP_INDIR): Handle all polymorphic variables.
+ * tests/m4sh.at (AS@&t@_TR_SH and AS@&t@_TR_CPP): New test.
+ * NEWS: Document the fix.
+ Reported by Bruno Haible.
+
+ Reduce startup cost of autotest.
+ * lib/autotest/general.m4 (_AT_FINISH) <banners>: Rather than
+ doing a recursive find, limit ourselves to top ChangeLog only.
+ Reported by Ralf Wildenhues.
+
+2010-07-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New macro AC_FC_FIXEDFORM, improved AC_FC_FREEFORM, coverage.
+ * lib/autoconf/fortran.m4 (_AC_FC_DIALECT_YEAR): Fix typo in
+ comment.
+ (AC_FC_FREEFORM): Update list of known options for Sun, HP,
+ Lahey/Fujitsu Fortran compilers. Use M4 quoting consistently.
+ (AC_FC_FIXEDFORM): New macro.
+ * tests/fortran.at (AC_FC_DUMMY_MAIN usage, AC_FC_MAIN usage):
+ Use AC_FC_FIXEDFORM, to avoid testsuite failure with FC=xlf95.
+ (AC_FC_FREEFORM with AC_FC_SRCEXT, AC_FC_FIXEDFORM)
+ (AC_FC_FIXEDFORM with AC_FC_SRCEXT): New tests.
+ * tests/mktests.sh: No need to exclude AC_FC_FREEFORM, it uses
+ AC_LANG_PUSH/AC_LANG_POP.
+ * doc/autoconf.texi (Fortran Compiler): Document it.
+ * NEWS: Update.
+
+2010-07-02 Eric Blake <eblake@redhat.com>
+
+ Optimize AS_BOX.
+ * lib/m4sugar/m4sh.m4 (AS_BOX): Use less m4 time.
+ (_AS_BOX_LITERAL): Use fewer forks in the common case.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_BOX>: Document
+ the macro.
+ * NEWS: Mention it.
+
+ Use new AS_LITERAL_IF argument when appropriate.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_SET): Reduce m4 overhead.
+ (AS_VAR_IF, AS_VAR_TEST_SET): Provide shorter variant for simple
+ references.
+ Suggested by Bruno Haible.
+
+ Add tests for AS_BOX.
+ * tests/m4sugar.at (m4@&t@_text_box): New test.
+ * tests/m4sh.at (AS@&t@_BOX): Likewise.
+ * lib/m4sugar/m4sugar.m4 (m4_text_box): Support comma.
+ * doc/autoconf.texi (Text processing Macros) <m4_text_box>:
+ Document further limitations.
+
+ Add optional argument to AS_LITERAL_IF.
+ * lib/m4sugar/m4sh.m4 (_AS_LITERAL_IF): Rewrite to generate macro
+ name, without using m4_cond.
+ (_AS_LITERAL_IF_, _AS_LITERAL_IF_YES, _AS_LITERAL_IF_NO): New
+ helpers.
+ (AS_LITERAL_IF, AS_LITERAL_WORD_IF, _AS_TR_SH, _AS_TR_CPP)
+ (_AS_VAR_PUSHDEF): Adjust callers.
+ * lib/autoconf/types.m4 (AC_CHECK_ALIGNOF): Relax restrictions on
+ invalid bytes, since this allows inline struct layouts.
+ (_AC_CHECK_ALIGNOF): New helper macro.
+ * tests/m4sh.at (AS@&t@_LITERAL_IF): Update test.
+ * doc/autoconf.texi (Polymorphic Variables) <AS_LITERAL_IF>:
+ Update documentation.
+
+ Use AS_LITERAL_WORD_IF as appropriate.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM): Use new macro.
+ * lib/autoconf/general.m4 (AC_REQUIRE_AUX_FILE, AC_CACHE_VAL)
+ (AS_CACHE_CHECK, AC_DEFINE_TRACE, _AC_LIBOBJ): Likewise.
+ * lib/autoconf/libs.m4 (AC_CHECK_LIB): Likewise.
+ * lib/autoconf/status.m4 (AC_CONFIG_SUBDIRS): Likewise.
+ * lib/m4sugar/m4sh.m4 (AS_UNSET, AS_VAR_COPY, AS_VAR_GET)
+ (AS_VAR_IF, AS_VAR_SET, AS_VAR_TEST_SET): Likewise.
+
+ Add AS_LITERAL_WORD_IF.
+ * lib/m4sugar/m4sh.m4 (_AS_LITERAL_IF): Also reject shell quoting
+ characters as non-literal, and provide way to reject space.
+ (AS_LITERAL_WORD_IF): New macro.
+ * doc/autoconf.texi (Polymorphic Variables) <AS_LITERAL_IF>:
+ Document new macro. Fix example to match reality.
+ * NEWS: Document change and new macro.
+ * tests/m4sh.at (AS@&t@_LITERAL_IF): Update test.
+
+ Optimize AC_DEFINE.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Avoid overhead of
+ AS_LITERAL_IF.
+
+2010-07-02 Stefano Lattarini <stefano.lattarini@gmail.com>
+ and Eric Blake <eblake@redhat.com>
+
+ Describe a Solaris /bin/sh bug w.r.t. for loops.
+ * doc/autoconf.texi (Limitations of Shell Builtins) <for>:
+ Document a bug of the 'for' builtin in Solaris /bin/sh, w.r.t.
+ tokens seeming variable assignment in the list of arguments.
+
+2010-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve VPATH handling in config.status for non-Automake projects.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Be sure not
+ to remove references to a subdir of srcdir. Fix treatment of
+ multiple colon-separated VPATH entries.
+ * tests/torture.at (VPATH): New test.
+ Report by Keith Marshall.
+
+ Further improve docs about nested double-quotes and backquotes.
+ * doc/autoconf.texi (Shellology): Remove anchor for pdksh.
+ Move quoting bug example to ...
+ (Shell Substitutions): ... here. Document which behavior is
+ specified by Posix.
+
+ Coverage for Fortran compiler macros.
+ * tests/fortran.at (AC_OPENMP and Fortran 77)
+ (AC_OPENMP and Fortran): Simplify, using AT_CHECK_CONFIGURE.
+ (AC_F77_DUMMY_MAIN usage, AC_FC_DUMMY_MAIN usage)
+ (AC_F77_MAIN usage, AC_FC_MAIN usage, AC_F77_FUNC usage)
+ (AC_FC_FUNC usage, AC_FC_SRCEXT usage, AC_FC_FREEFORM): New
+ tests.
+ * doc/autoconf.texi (Fortran Compiler): Use GNU coding style
+ on C code snippets. Add markers for tested examples.
+ Suggest AC_FC_FREEFORM for source file extensions which the
+ compiler might not natively support but which are accepted
+ with help from AC_FC_SRCEXT. Suggest AC_CONFIG_HEADERS for
+ setups using one of the AC_*MAIN macros.
+
+ Accept any nonzero exit status upon config.status write failure.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Normalize nonzero status to 1 for writing to /dev/full, for HP-UX
+ 11.31 cat which exits 2.
+
+ Fix testsuite failure with Tru64 preprocessor.
+ * tests/compile.at (Order of user actions and cleanup): Add
+ incomplete comment to provoke failure with Tru64/OSF 5.1 cc
+ preprocessor.
+
+2010-06-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Eric Blake <eblake@redhat.com>
+
+ Further clarification on sed -e portability.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Clarify
+ more about sed -e and Posix limitations.
+
+2010-06-22 Bruno Haible <bruno@clisp.org>
+
+ Document how to use literal newlines in makefile rules.
+ * doc/autoconf.texi (Newlines in Make Rules): New section.
+
+ Document how to write comments in makefile rules.
+ * doc/autoconf.texi (Comments in Make Rules): Mention a workaround
+ syntax.
+
+2010-06-22 Ben Pfaff <blp@cs.stanford.edu>
+
+ Document how to propagate variables to submakes.
+ * doc/autoconf.texi: Describe technique used by Automake to
+ propagate variables to submakes in more detail.
+
+2010-06-22 Peter Johansson <trojkan@gmail.com> (tiny change)
+
+ Be consistent in doc example.
+ * doc/autoconf.texi: (Polymorphic Variables) be consistent in code
+ example and output
+
+2010-06-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add comments for vim syntax highlighting.
+ * doc/autoconf.texi: Restore font-lock in some examples using
+ $$, for vim.
+
+ Formatting cleanups for optional arguments.
+ * doc/autoconf.texi (Configuration Actions, Help Formatting)
+ (External Software): Use @r{} for brackets denoting optional
+ arguments, where @ovar is not safe to use.
+
+ Clarify nested double-quotes and backquotes shell issues.
+ * doc/autoconf.texi (Shellology): New anchor for pdksh.
+ (Shell Substitutions): Link to it for escaped double-quotes
+ within double-quoted backquotes; add ksh example for unescaped
+ inner double-quotes problem.
+
+ Mention Tru64 5.1 fgrep limitation with empty patterns.
+ * doc/autoconf.texi (Limitations of Usual Tools): Update.
+
+ Overhaul the manual, esp. the Autotest chapter.
+ * doc/autoconf.texi (Installation Directory Variables):
+ Replace some uses of @var with @code.
+ (Special Shell Variables): Fix misordered paragraph about IFS.
+ (Writing Testsuites): Include paragraph following AT_TESTED in
+ the macro definition.
+ (testsuite Invocation): Failed tests are not rerun.
+ (testsuite Scripts, Autotest Logs, testsuite Invocation)
+ (Making testsuite Scripts): Minor edits for consistency and
+ language.
+
+2010-06-18 Bruno Haible <bruno@clisp.org>
+
+ Document sed -e limitation.
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention portability
+ problem of sed -e option with script fragments.
+
+2010-06-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document, test, and fix AT_ARG_OPTION, AT_ARG_OPTION_ARG.
+ * lib/autotest/general.m4 (_AT_ARG_OPTION): Fix translation of
+ hyphens to underscores when turning option names to variables.
+ Avoid macro name concatenation garbage with trailing `dnl'.
+ (AT_ARG_OPTION, AT_ARG_OPTION_ARG): Overhaul macro description.
+ The OPTIONS are space-separated, not comma-separated. The
+ negative form of AT_ARG_OPTION is prefixed with `--no-'.
+ * tests/autotest.at (AT@&t@_ARG_OPTION, AT@&t@_ARG_OPTION_ARG):
+ New tests.
+ * NEWS: Update.
+ * doc/autoconf.texi (Writing Testsuites): Document AT_ARG_OPTION
+ and AT_ARG_OPTION_ARG.
+ (testsuite Invocation): Call the thingies passed to the
+ testsuite options, not arguments. Note that the testsuite
+ author may add further package-specific options.
+
+ Autotest: enable colored test results.
+ * lib/autotest/general.m4 (HELP_TUNING_BEGIN): New diversion.
+ (HELP_TUNING, HELP_OTHER, HELP_END): Bump diversion numbers.
+ (AT_INIT): Accept
+ --color and --color=never|auto|always. If desired, colorize
+ test results and testsuite summary on standard output.
+ [HELP_TUNING]: Divert content instead to ...
+ [HELP_TUNING_BEGIN]: ... this diversion, m4_wrapped until the
+ end, when we know whether AT_COLOR_TESTS has been specified.
+ (AT_COLOR_TESTS): New macro, set the default for color to auto.
+ * doc/autoconf.texi (Writing Testsuites): Document it.
+ (testsuite Invocation): Document --color* options.
+ * tests/local.at: Call AT_COLOR_TESTS for Autoconf's testsuite.
+ * tests/autotest.at (color test results): New test, mirroring
+ color.test from Automake.
+ * NEWS: Update.
+
+2010-06-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid texinfo bug with backslashes in macro arguments.
+ * doc/autoconf.texi (Text processing Macros)
+ (Common Shell Constructs): Do not use @dvar with backslashes.
+
+2010-06-14 Eric Blake <eblake@redhat.com>
+
+ Make CONFIG_SITE handling more robust.
+ * lib/autoconf/general.m4 (AC_SITE_LOAD): Avoid leading - and path
+ search, and check for failure to load.
+ * tests/base.at (AC_CACHE_CHECK): Enhance test.
+ * doc/autoconf.texi (Site Defaults): Mention that CONFIG_SITE
+ works best as an absolute path.
+ * NEWS: Document the semantic change.
+
+2010-03-13 Bruno Haible <bruno@clisp.org>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Allow plus signs in AC_ARG_ENABLE and AC_ARG_WITH.
+ * doc/autoconf.texi (External Software): Mention that AC_ARG_WITH
+ accepts packages with a + sign in it.
+ (Package Options): Likewise for AC_ARG_ENABLE.
+ * lib/autoconf/general.m4 (_AC_ENABLE_IF): Also replace '+' with '_'.
+ * tests/base.at (AC_ARG_ENABLE and AC_ARG_WITH): New test.
+ * NEWS: Update.
+
+2010-06-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Autotest: simplify logic to compute test group result.
+ * lib/autotest/general.m4 (AT_INIT): Compactify result
+ computation logic.
+
+ New Autotest testsuite option --recheck.
+ * lib/autotest/general.m4 (AT_INIT): New variable $at_recheck.
+ Escape hyphen in $at_dir early. Accept command line switch
+ --recheck. Set $at_suite_log early, based on --directory
+ switch; with --recheck, include the list of FAILed and XPASSed
+ tests from old testsuite.log file in $at_groups. Document
+ --recheck in --help output.
+ * tests/autotest.at (recheck): New test.
+ * doc/autoconf.texi (testsuite Invocation): Document --recheck.
+ * NEWS: Update.
+
+2010-06-14 Karl Berry <karl@freefriends.org> (tiny change)
+
+ Clarify comment about old system.
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Prefer GNU/Linux,
+ and note that bug has long since been fixed.
+
+2010-06-08 Eric Blake <eblake@redhat.com>
+
+ Run libtool test with modern libtool.
+ * tests/foreign.at (Libtool): Request that libtoolize install
+ auxiliary files. Assume libtool 2.x is modern.
+
+2010-06-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Coverage and doc fixes for AC_LANG_SOURCE and AC_LANG_PROGRAM.
+ * tests/compile.at (AC_LANG_SOURCE, AC_LANG_SOURCE(C++))
+ (AC_LANG_SOURCE example, AC_LANG_PROGRAM example): New tests.
+ * doc/autoconf.texi (Generating Sources): Add markers for tested
+ examples; update quoting, and update AC_INIT usage to also set
+ optional URL arguments. Mention that the examples require gcc.
+ Prompted by report from Brian J. Murrell.
+
+ Make AS_SET_CATFILE polymorphic, and add testsuite coverage.
+ * lib/m4sugar/m4sh.m4 (AS_SET_CATFILE): Use AS_VAR_SET to set
+ the variable.
+ * tests/m4sh.at (AS@&t@_SET_CATFILE): New test.
+ * doc/autoconf.texi (Common Shell Constructs): Document that
+ AS_SET_CATFILE is polymorphic in its VAR argument now.
+ * NEWS: Update.
+
+ Testsuite coverage for AC_COPYRIGHT and AT_COPYRIGHT.
+ * tests/autotest.at (AT@&t@_COPYRIGHT): New test.
+ * tests/base.at (AC@&t@_COPYRIGHT): Likewise.
+
+ Testsuite coverage for __file__ and __line__.
+ * tests/m4sugar.at (__file__ and __line__): New test.
+
+ Testsuite coverage for AC_CACHE_VAL and caching semantics.
+ * tests/base.at (AC_CACHE_CHECK): Extend test.
+ (AC_CACHE_LOAD): New test.
+ * tests/torture.at (Configuring subdirectories): Also test
+ --config-cache with AC_CONFIG_SUBDIRS.
+ * doc/autoconf.texi (Caching Results): Annotate code snippets
+ which are tested in the test suite.
+ (Cache Files): Documented cache variables may be used on the
+ configure command line to override individual entries in the
+ cache file.
+
+ Clarify OpenBSD sh errexit issue with compound commands.
+ * doc/autoconf.texi (Limitations of Builtins): Only the last
+ command in a compound list is problematic.
+ Tested on OpenBSD 4.4.
+
+2010-06-07 Eric Blake <eblake@redhat.com>
+
+ Properly quote AC_PREREQ during autoupdate.
+ * lib/autoconf/general.m4 (AC_PREREQ): Follow consistent quoting
+ style for AC_PREREQ.
+ * tests/tools.at (autoupdating AC_PREREQ): Update expected
+ results.
+ Reported by NightStrike.
+
+2010-06-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Documentation and tests for the AC_CHECK_DECL change.
+ * lib/autoconf/general.m4 (_AC_CHECK_DECL_BODY): Squash trailing
+ spaces in as_decl_name.
+ (_AC_CHECK_DECLS): Likewise for the define.
+ * tests/semantics.at (AC_CHECK_DECLS): Extend test.
+ * doc/autoconf.texi (Generic Declarations): Update.
+ * NEWS: Update.
+
+2010-06-01 Joern Rennecke <joern.rennecke@embecosm.com> (tiny change)
+
+ Generalize AC_CHECK_DECL for C++: allow optional arguments.
+ * general.m4 (_AC_CHECK_DECL_BODY): Process trailing function
+ argument types as arguments to use for C++.
+ (_AC_CHECK_DECLS): Filter out trailing function argument types
+ when generating the HAVE_DECL_* macro.
+
+2010-05-25 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Eric Blake <eblake@redhat.com>
+
+ Don't expose AC_{COMPILE,LINK}_IFELSE internals in documentation.
+ * doc/autoconf.texi (Runtime) <AC_LINK_IFELSE>: Suggest to use
+ `conftest$EXEEXT' rather than `conftest$ac_exeext' to acces the
+ just-linked program file.
+ (Runtime) <AC_COMPILE_IFELSE>: Suggest to use `conftest.$OBJEXT'
+ rather than `conftest.$ac_object' to access the just-compiled
+ object file. Also, refer to the object file as "just-compiled"
+ rather than "just-linked".
+
+2010-05-20 Eric Blake <eblake@redhat.com>
+
+ Mention another line-counting alternative.
+ * doc/autoconf.texi (Limitations of Usual Tools) <grep>: Mention
+ how to use sed to count lines.
+ Suggested by Paolo Bonzini.
+
+2010-05-12 Eric Blake <eblake@redhat.com>
+
+ Document the grep workaround.
+ * doc/autoconf.texi (Limitations of Usual Tools) <grep>: Document
+ the bug.
+
+2010-05-12 Mark Hessling <mark@rexx.org> (tiny change)
+
+ Work around QNX4 grep bug.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Count ^
+ rather than $ to avoid QNX4 grep bug.
+ * THANKS: Update.
+
+2010-05-11 David Reiss <dreiss@facebook.com> (tiny change)
+
+ Improve Erlang documentation.
+ * doc/autoconf.texi (Erlang Libraries): Document actual default
+ values.
+ * THANKS: Update.
+
+2010-05-11 Eric Blake <eblake@redhat.com>
+
+ Fix typo in previous patch.
+ * doc/autoconf.texi (File Descriptors): Add end '.
+ Reported by Ralf Wildenhues.
+
+ Mention how to silence program probes.
+ * doc/autoconf.texi (File Descriptors): Document how to silence a
+ program probe.
+
+2010-04-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Error and warning message formatting cleanups.
+ * doc/autoconf.texi (Autoconf Language, Generic Structures):
+ Do not capitalize the first word in error messages, do not end
+ them with a period.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS, AC_MSG_FAILURE):
+ Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Likewise.
+ * lib/autotest/general.m4 (AT_INIT, at_fn_group_prepare):
+ Likewise.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Likewise.
+ * tests/base.at (AC_TRY_COMMAND): Likewise.
+ * tests/torture.at (datarootdir workaround): Adjust expected
+ message.
+
+ Fix placing of ellipses in English text.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Be sure to add a
+ space before `...' in natural language text.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL_BODY):
+ Likewise.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): Likewise.
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Likewise.
+ * tests/suite.at: Likewise.
+ * tests/torture.at (@%:@define header templates): Likewise.
+
+ Ensure autotest tests have an atconfig file, for testsuite -v.
+ * tests/autotest.at (AT_CHECK_AT_PREP): Create a default
+ atconfig file in the directory of the testsuite.
+ (AT_CHECK_AT_TITLE): Also check that `./micro-suite -v' output
+ does not contain empty $at_srcdir expansion.
+ (srcdir propagation): Remove the atconfig file generated by
+ AT_CHECK_AT_PREP. Check each suite invocation for $at_srcdir
+ expansion.
+
+ Fix autotest testsuite -v output to print test group title.
+ * lib/autotest/general.m4 (AT_CLEANUP): Actually print test
+ title in verbose output. Fixes AUTOCONF-2.57-101-gc102ed8
+ regression.
+ * tests/autotest.at (AT_CHECK_AT_TITLE): Amend macro to check
+ for test title in -v output.
+
+2010-04-26 Eric Blake <eblake@redhat.com>
+
+ Clarify octal escapes with tr.
+ * doc/autoconf.texi (Limitations of Usual Tools): Carriage return
+ is portable in octal, but not newline.
+
+2010-04-22 Joel James Adamson <joel@chondestes.bio.unc.edu> (tiny change)
+
+ Add a paragraph to FAQ on Debugging configure scripts.
+ * doc/autoconf.texi (Debugging): Mention inspecting config.log.
+ * THANKS: Update.
+
+2010-04-21 Mike Frysinger <vapier@gentoo.org> (tiny change)
+
+ Fix typo in doc example.
+ * doc/autoconf.texi (Subdirectories): Fix typo.
+
+2010-04-05 Eric Blake <eblake@redhat.com>
+
+ Fix m4_cr_all for EBCDIC.
+ * lib/m4sugar/m4sugar.m4 (m4_cr_all): Swap * and $, so that we
+ don't end up with $* in EBCDIC.
+ * NEWS: Document the fix.
+ * THANKS: Update.
+ Reported by Steve Goetze.
+
+2010-03-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Do not use @acronym in the manual.
+ * doc/autoconf.texi: Remove all usage of @acronym.
+ Suggested by Karl Berry.
+
+ Do not use @sc in the manual.
+ * doc/autoconf.texi: Remove all usage of @sc in the manual.
+ Suggested by Karl Berry.
+
+2010-03-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix wrong comment in testsuite.
+ * tests/m4sugar.at (m4@&t@_warn): Remove copy&pasted comment.
+
+ Formatting cleanups in macro comments.
+ * lib/autoconf/c.m4, lib/autoconf/erlang.m4,
+ lib/autoconf/fortran.m4, lib/autoconf/functions.m4,
+ lib/autoconf/general.m4, lib/autoconf/lang.m4,
+ lib/autoconf/programs.m4, lib/autoconf/specific.m4,
+ lib/autoconf/status.m4, lib/autoconf/types.m4,
+ lib/autotest/general.m4, lib/autotest/specific.m4,
+ lib/m4sugar/m4sh.m4, lib/m4sugar/m4sugar.m4,
+ tests/autotest.at, tests/local.at, tests/m4sh.at,
+ tests/semantics.at, tests/tools.at, tests/torture.at: Fix macro
+ comment format.
+
+2010-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ manual: index strings containing colon in non-info outputs.
+ * doc/autoconf.texi (Quadrigraphs, Shell Substitutions): Produce
+ index entries for concepts containing a colon in output formats
+ other than info.
+
+ Update copyright years for files generated by mktests.sh.
+ * tests/mktests.sh: Update copyright years for generated files.
+
+2010-03-04 Eric Blake <eblake@redhat.com>
+
+ Document AC_LANG_CONFTEST semantic change.
+ * doc/autoconf.texi (Generating Sources) <AC_LANG_CONFTEST>:
+ Enhance documentation, to show that semantic change in 2.63b was
+ intentional.
+ * THANKS: Update.
+ Reported by Brian J. Murrell, analyzed by Ralf Wildenhues.
+
+2010-03-04 Peter Johansson <trojkan@gmail.com> (tiny change)
+
+ Autoconf Macro Archive URL has changed.
+ * doc/autoconf.texi (Introduction, Coding Style, Defining
+ Directories): The Autoconf Macro Archive is officially `GNU'.
+ Update URL.
+
+2010-03-02 Eric Blake <eblake@redhat.com>
+
+ Fix shell code in AS_TR_SH documentation.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_TR_SH>: Fix
+ example to expand to valid shell code.
+ Reported by Ralf Wildenhues.
+
+ Improve documentation on AC_{COMPILE,LINK}_IFELSE.
+ * doc/autoconf.texi (Running the Compiler): Mention that the
+ object file is available after a successful compile.
+ (Running the Linker): Likewise for the linker output.
+ Suggested by Paolo Bonzini.
+
+ Fix typo in docs.
+ * doc/autoconf.texi (Conditional constructs) <m4_ifblank>: Fix
+ typo.
+
+2010-03-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AS_ERROR for FreeBSD sh.
+ * lib/m4sugar/m4sh.m4 (_AS_ERROR_PREPARE): Rewrite as_fn_error
+ to take additional first argument STATUS instead of transporting
+ $? across shell function entry, which does not work with FreeBSD
+ sh. Shift all other arguments by one, adjust.
+ (AS_ERROR): Pass EXIT-STATUS, defaulting to $?, to as_fn_error.
+ Report by Václav Haisman.
+
+ Fix `autom4te cache creation' testsuite failure on FreeBSD.
+ * tests/tools.at (autom4te cache creation): Normalize exit
+ status of failed redirection to 1, may be 2 with FreeBSD sh.
+ * THANKS: Update.
+ Report by Václav Haisman.
+
+ Fix Autotest tracing of shell pipelines for FreeBSD sh.
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): Do not trace
+ commands that contain [^|]|[^|], a likely shell pipeline.
+ * tests/local.at (_AT_CHECK_ENV): Turn off tracing for egrep |
+ grep pipeline.
+ * doc/autoconf.texi (File Descriptors): Document limitation.
+ * tests/autotest.at (Trace output): New test.
+
+2010-03-01 Eric Blake <eblake@redhat.com>
+
+ Update file flow diagram to mention Automake.
+ * doc/autoconf.texi (Making configure Scripts): Avoid confusion
+ with listing Makefile.in twice on one line. Add a diagram showing
+ how automake fits into the picture.
+ Reported by santilín.
+
+2010-02-26 Eric Blake <eblake@redhat.com>
+
+ Optimize AC_REPLACE_FUNCS.
+ * lib/autoconf/functions.m4 (_AC_REPLACE_FUNC): New helper macro.
+ (AC_REPLACE_FUNCS): Use it to reduce forks when checking for
+ replacements, by using literal rather than shell variable.
+
+ Document how to safely override CFLAGS default.
+ * doc/autoconf.texi (C Compiler) <AC_PROG_CC>: Document a way to
+ change the default CFLAGS.
+ (C++ Compiler) <AC_PROG_CXX>: Likewise, for CXXFLAGS.
+ Reported by Monty Taylor; wording suggested by Paolo Bonzini.
+
+ Document that Autoconf relies on IFS.
+ * doc/autoconf.texi (Special Shell Variables) <IFS>: Add details
+ about use of IFS within configure script.
+ * THANKS: Update.
+ Reported by Arkadiusz Miskiewicz.
+
+ Recommend latest m4 release.
+ * README: Bump recommendation to m4 1.4.14 (minimum remains
+ 1.4.6).
+ * doc/autoconf.texi (Introduction): Likewise.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Likewise.
+
+2010-02-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite failures due to setting of $U.
+ * tests/local.at (_AT_CHECK_ENV): Ignore setting of $U.
+
+2010-02-10 Eric Blake <ebb9@byu.net>
+
+ Avoid $U if it is not initialized.
+ * lib/autoconf/general.m4 (_AC_LIBOBJS_NORMALIZE): Ensure $U is
+ set if automake did not define it.
+ * THANKS: Update.
+ Reported by Heiko Schlichting, via Julien Élie.
+
+2010-01-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix substitution of carriage return on Darwin.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Set
+ ac_cs_awk_cr to '\\r', so that sed portably expands this to '\r'
+ rather than a literal carriage return, to fix substitution on
+ Darwin. Regression introduced in 2.63b.
+ Report by Peter O'Gorman.
+
+2010-01-21 Dmitry V. Levin <ldv@altlinux.org>
+
+ Fix test failure when a shell uses $TMPDIR for here-documents.
+ * tests/tools.at (autotools and whitespace in file names): Create
+ $TMPDIR before potential use like in other whitespace tests.
+
+2010-01-20 Paolo Bonzini <bonzini@gnu.org>
+
+ Add recommendation on (not) unsetting IFS.
+ * doc/autoconf.texi (Special shell variables): Explain why it's
+ better not to unset IFS.
+
+2010-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ config.status: consistent exit status with nonexistent config file input.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_MAIN_LOOP): Ensure we
+ exit with status 1 rather than with that of 'false', for
+ reproducibility.
+ (AC_OUTPUT): Ensure to exit 1 in case of config.status failure.
+ * tests/torture.at (Missing templates): Also test code path
+ for $srcdir != '.'.
+ Report by Tim Rice.
+
+2010-01-13 Eric Blake <ebb9@byu.net>
+
+ Fix previous example.
+ * doc/autoconf.texi (Here-Documents): Touch up the example to
+ match output to sample command line.
+
+ Document here-doc pitfall.
+ * doc/autoconf.texi (Here-Documents): Mention problem with <<-
+ operator.
+ Reported by Jim Meyering.
+
+2010-01-12 Eric Blake <ebb9@byu.net>
+
+ Typo fix in earlier commit.
+ * doc/autoconf.texi (Autoconf Language): Fix typo.
+
+2010-01-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Allow AC_FUNC_MKTIME to work with C++.
+ * lib/autoconf/functions.m4 (AC_FUNC_MKTIME): ANSIfy KnR function
+ definitions. Use `const char*' for character literals; cast them
+ to `char*' for putenv.
+
+2010-01-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Export AUTOM4TE in tests/atlocal.in, for aclocal.
+ * tests/atlocal.in: Set and export $AUTOM4TE, for aclocal.
+ Report by Tim Rice.
+
+2010-01-08 Eric Blake <ebb9@byu.net>
+
+ Make autotest example act better with automake.
+ * doc/autoconf.texi (Making testsuite Scripts): Rely on automake
+ feature for recommended autotest snippet, following our own use.
+
+ Clarify language on handling of opening parenthesis.
+ * doc/autoconf.texi (Autoconf Language): Give an example of
+ improper argument passing.
+ * THANKS: Update.
+ Reported by Juan Carlos Hurtado.
+
+2010-01-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Don't fail autom4te preselection test due to different Automake.
+ * tests/tools.at (autom4te preselections): If the cache test
+ fails, extract the Automake version from the toplevel
+ Makefile.in file of the source tree; skip, rather than fail
+ the test group if the automake program has a different version.
+ * THANKS: Update.
+ Report by Dieter Jurzitza, fix suggested by Eric Blake.
+
+2010-01-06 Peter Breitenlohner <peb@mppmu.mpg.de>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_CONFIG_LINKS to generated files when srcdir is absolute.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINK): Check $ac_source,
+ not $srcdir, for being relative or absolute.
+ * tests/torture.at (AC_CONFIG_LINKS): New test.
+ (AC_CONFIG_LINKS and identical files): Extend test, avoid some
+ forks.
+ Report, patch and testcase example by Peter Breitenlohner.
+
+2010-01-05 Eric Blake <ebb9@byu.net>
+
+ Improve release automation.
+ * maint.mk (gnulib_dir, gnulib-version, bootstrap-tools)
+ (announcement): Copy from latest gnulib maint.mk.
+ * cfg.mk (announce_gen, gpg_key_ID): Delete.
+ (bootstrap-tools): Override the default.
+
+ Update upstream files.
+ * GNUmakefile: Update via 'make fetch'.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/move-if-change: Likewise.
+ * build-aux/update-copyright: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/standards.texi: Likewise.
+ * cfg.mk (update-copyright-env): Enforce wrap column.
+
+ Update copyright year.
+ All files changed to add 2010, via 'make update-copyright'.
+
+2009-12-31 Bruno Haible <bruno@clisp.org>
+
+ Improve documentation on Solaris tr bugs.
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Refine
+ description of NUL handling by Solaris tr.
+
+2009-12-31 Eric Blake <ebb9@byu.net>
+
+ Another tr tweak.
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Clarify
+ previous commit.
+ Reported by Ralf Wildenhues.
+
+2009-12-29 Eric Blake <ebb9@byu.net>
+
+ Improve documentation on tr portability.
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Refine
+ description of NUL handling. Document set size issue.
+ Reported by Bruno Haible.
+
+ Fix comment in AC_CHECK_DECLS.
+ * lib/autoconf/general.m4 (AC_CHECK_DECL): Document the includes
+ argument to the shell function.
+
+2009-12-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add testsuite exposure for shtool usage.
+ * tests/foreign.at (shtool): New test.
+ Report by Dmitry Grebeniuk.
+
+2009-12-12 Eric Blake <ebb9@byu.net>
+
+ Improve wording about m4 quote characters.
+ * doc/autoconf.texi (Autoconf Language): Autoconf quote characters
+ come from m4sugar, not raw m4.
+ (Active Characters): Mention that it is m4sugar which changes
+ quotes from `' to [].
+ * THANKS: Update.
+ Suggested by Josef Vukovic.
+
+2009-12-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revert "Improve AC_CONFIG_AUX_DIRS a bit." to fix shtool usage.
+ * lib/autoconf/general.m4 (AC_CONFIG_AUX_DIRS): Revert test for
+ shtool as install script. Regression introduced in 2.64.
+ * NEWS, THANKS: Update.
+ Report by Dmitry Grebeniuk.
+ This reverts commit 93d9386de9c1320afed43f1337ac5ddb2d2dcbb4.
+
+2009-12-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix NEWS description for AC_FUNC_MMAP entry.
+ * NEWS: Update.
+
+ Fix 2.65 AC_TYPE_INT*_T macro body text regression.
+ * lib/autoconf/types.m4 (_AC_TYPE_INT_BODY): Move helper enum
+ definition to prologue section, to avoid syntax error.
+ * NEWS, THANKS: Update.
+ Report by Pierre Ynard.
+
+2009-12-09 Paolo Bonzini <bonzini@gnu.org>
+
+ Fix `recursion' test failure.
+ * tests/m4sugar.at (recursion): Use empty diversion, not 0.
+
+2009-12-05 Stefano Lattarini <stefano.lattarini@gmail.com>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document Solaris/Heirloom sh set -e issue with command substitutions.
+ * doc/autoconf.texi (Limitations of Builtins): Fix typos `set -d'
+ in previous example. Document failure to honor && lists with set -e
+ and a command substitution in the failing command.
+ Report and initial patch by Stefano Lattarini against Automake.
+
+2009-12-04 Eric Blake <ebb9@byu.net>
+
+ Warn if using unnamed diversion.
+ * lib/m4sugar/m4sugar.m4 (_m4_divert, m4_divert_push): Add
+ optional parameter, which controls warning.
+ (m4_divert_pop, m4_cleardivert, m4_divert_require)
+ (_m4_require_call): Adjust callers.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Likewise.
+ * tests/m4sh.at (AT_DATA_LINENO): Avoid triggering the warning.
+ * tests/m4sugar.at (AT_CHECK_M4SUGAR_TEXT, m4@&t@_append)
+ (m4@&t@_text_wrap, recursion): Likewise.
+ (m4@&t@_warn, m4@&t@_divert_stack): Adjust expected output.
+ * tests/tools.at (autom4te and whitespace in file names)
+ (autoconf: the empty token): Avoid triggering the warning.
+ (autoconf: AC_PRESERVE_HELP_ORDER): New test.
+ * tests/mktests.sh (ac_exclude_list): Retire prior test.
+ * NEWS: Document the warning.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_divert>,
+ <m4_undivert>: Make even more explicit that using these directly
+ is discouraged.
+ (Diversion support): Further warn against improper diversion
+ changes.
+ <m4_divert_text>: Give an example of proper use.
+ Reported by Mike Frysinger.
+
+2009-11-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ manual: AC_SEARCH_LIBS also prepends to LIBS.
+ * doc/autoconf.texi (Libraries): Document that AC_SEARCH_LIBS
+ prepends to LIBS, just like AC_CHECK_LIB.
+
+2009-11-27 Paolo Bonzini <bonzini@gnu.org>
+
+ Bump m4.m4 serial number.
+ * m4/m4: Bump serial number to 10.
+
+2009-11-27 Harald van Dijk <truedfx@gentoo.org>
+
+ Fix m4 detection test on dash.
+ * m4/m4 (AC_PROG_GNU_M4): Use AS_ECHO.
+
+2009-11-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_FUNC_MMAP regression with C++ compiler in 2.65.
+ * lib/autoconf/functions.m4 (AC_FUNC_MMAP): Use const char*
+ for the constant string. Cast void* to char* for assignment.
+ * NEWS, THANKS: Update.
+ Report by Michal Čihař.
+
+ Add pgfortran to list of Fortran 95+ compilers.
+ * lib/autoconf/fortran.m4 (_AC_F95_FC): Add pgfortran before
+ pgf95.
+ Based on report by Jeff Squyres.
+
+2009-11-22 Bruno Haible <bruno@clisp.org>
+
+ Fix failure of test 35 when the user has a .autom4te.cfg file.
+ * tests/tools.at (autom4te cache creation): Skip the test if the
+ user has a .autom4te.cfg file.
+
+2009-11-21 Eric Blake <ebb9@byu.net>
+
+ Release Version 2.65.
+ * NEWS: Mention the release.
+
+ Prepare for release.
+ * build-aux/announce-gen: Sync from upstream.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * cfg.mk (gnu_rel_host, url_dir_list): Move...
+ * maint.mk: ...here, copying ideas from gnulib.
+ (major): Rename...
+ (stable): ...to this, copying gnulib.
+ * HACKING (release): Document changes in process.
+
+ Avoid spurious newline in traced macros.
+ * bin/autoreconf.in (tracing): Drop newline before parsing traced
+ arguments; regression from 2009-11-14.
+
+2009-11-20 Eric Blake <ebb9@byu.net>
+
+ Allow absolute names in AT_TESTED.
+ * lib/autotest/general.m4 (AT_INIT) <PREPARE_TESTS>: Check for
+ absolute names before path walk.
+ * THANKS: Update.
+ Suggested by Allan Clark.
+
+2009-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_CONFIG_SUBDIRS tracing in autoreconf.
+ * bin/autoreconf.in (autoreconf_current_directory): Collapse
+ newlines in the autoconf trace output, similar to how automake
+ invokes autoconf, so that newlines do not matter in the argument
+ to AC_CONFIG_SUBDIRS.
+ * tests/torture.at (Deep Package): Expose this issue in the
+ test.
+ * THANKS: Update.
+ Report by Nathan Schulte.
+
+2009-11-09 Eric Blake <ebb9@byu.net>
+
+ Fix AC_FUNC_MMAP for cygwin.
+ * lib/autoconf/functions.m4 (AC_FUNC_MMAP): Make the test more
+ portable: Actually check for <sys/param.h>, and only use MAP_FIXED
+ on an address previously returned from mmap.
+ * THANKS: Update.
+ Reported by Corinna Vinschen.
+
+2009-11-04 Eric Blake <ebb9@byu.net>
+
+ Redocument AS_DIRNAME, even with its flaws.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_DIRNAME>:
+ Restore documentation, since dirname mentions it.
+ Reported by Peter Johansson.
+
+ Update upstream files.
+ * build-aux/announce-gen: Synchronize from upstream.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/update-copyright: Likewise.
+ * doc/standards.texi: Likewise.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/Struct.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+2009-11-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Coverage for autom4te cache creation issues.
+ * tests/tools.at (autom4te cache creation): New test.
+
+2009-11-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix testsuite failures with SHELL=zsh.
+ * tests/statesave.m4 (AC_STATE_SAVE): Ignore argv and ARGC when
+ comparing configure variables.
+
+2009-11-03 Eric Blake <ebb9@byu.net>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update NEWS for recent fixes.
+ * NEWS: Add some entries.
+
+2009-10-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Micro-optimization of config.status substitution.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): No need to
+ concatenate an empty second string, when we have exactly 148
+ characters to substitute.
+ * tests/torture.at (Substitute a 2000-byte string): Add test
+ exposure for runs of backslashes near the 148 character limit.
+
+ Fix testsuite failure on AIX 4.3.3.
+ * lib/autoconf/general.m4 (_AC_RUN_LOG_LIMIT): Remove conftest.err
+ also if it is empty.
+
+ Fix testsuite failure on IRIX and AIX.
+ * tests/torture.at (Substitute and define special characters):
+ Double the backslash before the double-quote in
+ AC_DEFINE_UNQUOTED, as documented for here-documents.
+
+2009-10-31 Eric Blake <ebb9@byu.net>
+
+ Fix cross-manual link to gcc.
+ * doc/autoconf.texi (Portable C and C++): Provide uref rather than
+ xref when building for html.
+ Reported via Karl Berry.
+
+ Update authors.
+ * AUTHORS: Document recent copyright assignments.
+
+2009-10-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_OPENMP configure message for non-C compilers.
+ * lib/autoconf/lang.m4 (AC_LANG_DEFINE): Accept as additional
+ fourth arg the compiler variable name, defined in _AC_CC($1).
+ (_AC_CC): New language dispatch macro.
+ * lib/autoconf/erlang.m4 (AC_LANG(Erlang)): Adjust.
+ * lib/autoconf/fortran.m4 (AC_LANG(Fortran 77), AC_LANG(Fortran)):
+ Likewise.
+ * lib/autoconf/c.m4 (AC_LANG(C), AC_LANG(C++))
+ (AC_LANG(Objective C), AC_LANG(Objective C++)): Likewise.
+ (AC_OPENMP): Use _AC_CC instead of $CC.
+
+ Do not fail OpenMP tests on systems without aclocal.
+ * tests/c.at (AC_OPENMP and C, AC_OPENMP and C++): Override
+ `ACLOCAL=true' for autoreconf, the tests don't need aclocal.
+ * tests/fortran.at (AC_OPENMP and Fortran 77)
+ (AC_OPENMP and Fortran): Likewise.
+
+2009-10-31 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve cache variable documentation.
+ * doc/autoconf.texi (AC_PROG_AWK, AC_PROG_GREP, AC_PROG_EGREP,
+ AC_PROG_FGREP, AC_PROG_INSTALL, AC_PROG_MKDIR_P, AC_PROG_LEX,
+ AC_PROG_YACC, AC_CHECK_PROG, AC_CHECK_PROGS, AC_PATH_PROG,
+ AC_PATH_PROGS): Don't suggest to use the cache variable, only to
+ override it, or preferably, a non-cache variable associated with
+ the test.
+ (AC_PROG_SED): Likewise. Fix name of cache variable.
+ (AC_FUNC_GETMNTENT): Fix name cache variable.
+ (AC_FUNC_LSTAT): Fix typo.
+
+2009-10-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_OPENMP for Fortran (F77 and FC).
+ * lib/autoconf/fortran.m4 (AC_LANG_FUNC_LINK_TRY(Fortran): New.
+ * tests/c.at (AC_C_RESTRICT and C++, AC_OPENMP and C)
+ (AC_OPENMP and C++): New tests.
+ * tests/fortran.at (AC_OPENMP and Fortran 77)
+ (AC_OPENMP and Fortran): New tests.
+ * THANKS: Update.
+ Report by Bart Oldeman.
+
+ Perl coverage convenience targets.
+ * Makefile.am (PERL_COVERAGE_DB, PERL_COVERAGE_FLAGS)
+ (PERL_COVER): New variables.
+ (check-coverage, check-coverage-run, check-coverage-report)
+ (clean-coverage): New phony targets.
+ (clean-local): Depend on clean-coverage.
+
+2009-10-28 Eric Blake <ebb9@byu.net>
+
+ Fix corner cases in AS_LITERAL_IF and AS_TR_SH.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Fix bug with unbalanced
+ parens. Move guts...
+ (_AS_LITERAL_IF): into new helper.
+ (AS_TR_SH, AS_TR_CPP): Fix bugs with expansion of wrong macro.
+ Move guts...
+ (_AS_TR_SH, _AS_TR_SH_LITERAL, _AS_TR_SH_INDIR, _AS_TR_CPP)
+ (_AS_TR_CPP_LITERAL, _AS_TR_CPP_INDIR): ...into new helpers.
+ (AS_VAR_PUSHDEF): Hoist m4_require, by moving guts...
+ (_AS_VAR_PUSHDEF): ...into new helper.
+ * tests/m4sh.at (AS@&t@_LITERAL_IF): Enhance test.
+
+ Minor optimizations to m4sh.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_IF, AS_IDENTIFIER_IF)
+ (AS_LITERAL_IF): Parse fewer bytes during expansion, by visiting
+ if-true and if-false arguments only once.
+
+ Optimize m4_escape for common case.
+ * lib/m4sugar/m4sugar.m4 (m4_escape): Don't use regex if string is
+ already sane, by copying from AS_LITERAL_IF. Move guts...
+ (_m4_escape): ...into new helper.
+
+ Fix m4_text_wrap handling of quoted whitespace.
+ * lib/m4sugar/m4sugar.m4 (m4_escape): New macro.
+ (m4_text_wrap): Use it to avoid issues with embedded [ and ].
+ * tests/m4sugar.at (m4@&t@_text_wrap): Test it.
+ * NEWS: Document this.
+ * doc/autoconf.texi (Text processing Macros) <m4_escape>:
+ Likewise.
+ Reported by Mike Frysinger.
+
+2009-10-27 Eric Blake <ebb9@byu.net>
+
+ Mention another feature of AC_RUN_IFELSE.
+ * doc/autoconf.texi (Runtime) <AC_RUN_IFELSE>: Mention that
+ compiled test program still exists during if-true branch.
+ * THANKS: Update.
+ Reported by Stefano Lattarini, suggestion by Ralf Wildenhues.
+
+2009-10-26 Paolo Bonzini <bonzini@gnu.org>
+
+ Pass Autom4te path down to programs that autoreconf invokes.
+ * bin/autoreconf.in (autom4te): New variable. Export its value
+ as $ENV{'AUTOM4TE'}. Suggested by Peter Johansson.
+ * THANKS: Update.
+
+2009-10-20 Eric Blake <ebb9@byu.net>
+
+ Fix AC_TYPE_UINT64_T on Tru64 with gcc 3.4.4.
+ * lib/autoconf/types.m4 (_AC_TYPE_UNSIGNED_INT_BODY)
+ (_AC_TYPE_INT_BODY): Avoid undefined behavior of attempting shift
+ wider than type.
+ * NEWS: Document this.
+ Reported by Rainer Orth.
+
+2009-10-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix a couple of index entries in the manual.
+ * doc/autoconf.texi (Polymorphic Variables): Fix index entries
+ for AS_VAR_APPEND, AS_VAR_ARITH.
+
+2009-10-15 Eric Blake <ebb9@byu.net>
+
+ Fix typos in INSTALL.
+ * doc/install.texi (Basic Installation, Installation Names): Fix
+ typos in last patch.
+ Reported by Ralf Wildenhues.
+
+ Improve INSTALL wording.
+ * doc/install.texi (Basic Installation): Clarify installcheck
+ behavior.
+ (Installation Names): Mention that --prefix only overrides
+ directory locations not specified on the command line. Prefer
+ /alternate/directory over /path/to. Remove a sentence targeted to
+ the developer, not the user.
+ * THANKS: Update.
+ Suggested by Alfred M. Szmidt.
+
+2009-10-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Fix typos in documentation.
+ * doc/autoconf.texi (Cache Variable Index): Fix typo.
+ (Libraries) <AC_SEARCH_LIBS>: Mention 'none required' result.
+
+2009-10-09 Bruno Haible <bruno@clisp.org>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Recommend `sh -n' debugging, and public result variables for macros.
+ * doc/autoconf.texi (Debugging): Recommend to use "bash -n
+ configure". Recommend the use of result variables as an
+ alternative to run-if-true/run-if-false parameters.
+
+2009-10-05 Bruno Haible <bruno@clisp.org>
+
+ * doc/autoconf.texi (Particular Functions): Swap sections about
+ AC_FUNC_MBRTOWC and AC_FUNC_MEMCMP.
+
+2009-10-01 Paolo Bonzini <bonzini@gnu.org>
+
+ Unconditionally check for junk ./--version after mkdir search loop.
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Always check for
+ presence of ./--version. Reported by Eric Blake.
+
+2009-09-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Clarify documentation about Solaris sed quantifier restriction.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: '*' does
+ not work after subexpressions, \{M,N\} only after one-character
+ expressions. From GCC PR 38923.
+
+2009-09-21 Eric Blake <ebb9@byu.net>
+
+ Fit configure output in 80 columns.
+ * lib/autoconf/functions.m4
+ (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Shorten message.
+
+2009-09-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use consistent notation for cache variables.
+ * doc/autoconf.texi (Generic Programs): Remove `$' before
+ variable name.
+
+ Documentation of specific and general cache variables.
+ * doc/autoconf.texi (Default Includes, Alternative Programs)
+ (Particular Programs, Generic Programs, Files, Libraries)
+ (Function Portability, Particular Functions, Generic Functions)
+ (Particular Headers, Generic Headers, Declarations)
+ (Generic Declarations, Particular Structures, Particular Types)
+ (Specific Compiler Characteristics)
+ (Generic Compiler Characteristics, C Compiler, System Services):
+ Document lots of cache variables.
+ * NEWS: Update.
+ Suggested by Bruno Haible.
+
+ New cache variable index in the manual.
+ * doc/autoconf.texi: Define new index `CA' for cache variables.
+ (caindex): New macro.
+ (Cache Variable Index): New appendix node.
+ (Top, Indices): Adjust menus.
+ (Cache Variable Names, Site Defaults): Adjust text.
+ * doc/Makefile.am (CLEANFILES): Add files generated for CA index.
+
+ New FAQ node: Debugging.
+ * doc/autoconf.texi (Debugging): New node.
+ (Top, FAQ): Adjust menus.
+ Report by Bruno Haible.
+
+ Document AM_MAKEFLAGS workaround to the macro override problem.
+ * doc/autoconf.texi (Macros and Submakes): Automake makefiles
+ provide AM_MAKEFLAGS to help with overriding macros in submake
+ invocations.
+ Prompted by bug report from Bruno Haible.
+
+2009-09-15 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ Implement and document Objective C++ support.
+ * lib/autoconf/c.m4 (AC_LANG(Objective C++), AC_LANG_OBJCXX)
+ (AC_LANG_PREPROC(Objective C++), AC_PROG_OBJCXXCPP)
+ (AC_LANG_COMPILER(Objective C++), AC_PROG_OBJCXX)
+ (_AC_PROG_OBJCXX_G): New macros.
+ (_AC_ARG_VAR_CPPFLAGS, _AC_ARG_VAR_LDFLAGS)
+ (_AC_ARG_VAR_LIBS): Adjusted.
+ * doc/autoconf.texi (Objective C++ Compiler): New node.
+ (Preset Output Variables): Document OBJCXXFLAGS.
+ (Language Choice): Document `Objective C++' language.
+ * NEWS: Updated.
+ * tests/local.at (AT_CHECK_ENV): Ignore AC_SUBSTed Objective C++
+ related variables.
+
+2009-09-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Work around DJGPP shell function return bug with command substitutions.
+ DJGPP bash 2.04 has a bug in that `return $ac_retval' done in a
+ shell function which also contains a command substitution causes
+ the shell to barf. For more details and a fix see:
+ <http://www.delorie.com/djgpp/mail-archives/browse.cgi?p=djgpp-workers/2009/09/09/03:35:08>
+ Possible workaround include putting the `return' in a subshell
+ or calling another function to set the status.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY)
+ (_AC_COMPILE_IFELSE_BODY, _AC_LINK_IFELSE_BODY)
+ (_AC_RUN_IFELSE_BODY, _AC_COMPUTE_INT_BODY): Use AS_SET_STATUS
+ instead of `return'.
+ * doc/autoconf.texi (Common Shell Constructs, Shell Functions):
+ Document the issue.
+ * THANKS: Update.
+ Report by Rugxulo and Reuben Thomas.
+
+ DJGPP fix: Do not redirect standard input in configure scripts.
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): If $DJGPP is
+ nonempty, do not dup fd 0 to AS_ORIGINAL_STDIN_FD, do not close
+ fd 0.
+
+2009-09-14 Eric Blake <ebb9@byu.net>
+
+ Quote result of m4_toupper and m4_tolower.
+ * lib/m4sugar/m4sugar.m4 (m4_tolower, m4_toupper): Quote result.
+ * lib/autotest/general.m4 (AT_KEYWORDS): Adjust caller.
+ * tests/m4sugar.at (m4@&t@_toupper and m4@&t@_tolower): New test.
+ * NEWS: Document this.
+ * THANKS: Update.
+ Reported by Sam Steingold.
+
+2009-09-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ DJGPP fix: remove both conftest and conftest.exe.
+ The DJGPP compiler may create both `a.out' and `a.exe' without -o,
+ and both `conftest' and `conftest.exe' with `-o conftest', but not
+ with `-o conftest.exe'.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_O): Also remove
+ `conftest' without $ac_exeext suffix.
+
+ DJGPP fix: do not try to source /dev/null as cache or site file.
+ * lib/autoconf/general.m4 (AC_SITE_LOAD, AC_CACHE_LOAD): Do not
+ load the cache or site file if it is `/dev/null', as DJGPP treats
+ it as a regular file, but the shell then warns about it later.
+ Fixes several test suite failures on DJGPP.
+
+ testsuite: pass $configure_options to configure invocations.
+ * tests/local.at (AT_CHECK_CONFIGURE): Add $configure_options
+ to configure command line.
+ * tests/autotest.at, tests/base.at, tests/c.at, tests/torture.at:
+ Likewise for each configure invocation.
+ * README-hacking: Document configure_options.
+
+ testsuite: improve Erlang tests portability, overridability.
+ * tests/autotest.at (Erlang Eunit unit tests): Use "no" as
+ value-if-not-found for Erlang tools.
+ * tests/erlang.at: Likewise. Also, use AS_EXIT instead of plain
+ exit.
+
+2009-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoupdate.in: Fix typos in comments.
+
+ Improve autotest testsuite summary message.
+ * lib/autotest/general.m4 (AT_INIT): Hint at the toplevel log
+ only if not $at_debug_p. Always hint at the per-test output.
+
+ Four new autoupdate tests, expected failures.
+ * tests/tools.at (autoupdating macros recursively)
+ (autoupdating with m4@&t@_pushdef, autoupdating with AC_REQUIRE)
+ (autoupdating with complex quoting): New tests.
+
+ Fix description of AC_CHECK_LIB regarding other deplibs.
+ * doc/autoconf.texi (Libraries): Library linking may not fail
+ even without missing additional libs.
+
+2009-09-12 Eric Blake <ebb9@byu.net>
+
+ Track recent copyright assignments.
+ * AUTHORS: Update.
+
+ Improve documentation on quoting.
+ * doc/autoconf.texi (Autoconf Language): Clarify quoting example.
+ * THANKS: Update.
+ Reported by santilín.
+
+2009-09-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New config.status option --config.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Implement
+ --config.
+ * doc/autoconf.texi (config.status Invocation): Document it.
+ * NEWS: Update.
+ * tests/torture.at (configure invocation): Test it.
+ Suggested several times, by several people, in the past.
+
+2009-09-10 Eric Blake <ebb9@byu.net>
+
+ Document that AS_INIT is automatically used.
+ * doc/autoconf.texi (Initialization Macros) <AS_INIT>: Add words
+ to clarify that only bare-bones scripts need a direct AS_INIT.
+ Suggested by Reuben Thomas.
+
+ Clarify portability pitfall of test.
+ * doc/autoconf.texi (Limitations of Builtins) <test>: Give more
+ reasons why -a and -o are not portable.
+ Reported by Reuben Thomas.
+
+2009-09-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document sed limitation with escaped metacharacters.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Use `%'
+ rather than `/' as delimiter in an example `s' command.
+ Document inconsistent treatment of escaped metacharacters.
+ * THANKS: Update.
+ Report by Dave Korn, with additional input from Paolo Bonzini
+ and Eric Blake.
+
+ Document temporary directory `$tmp' for use in config.status.
+ * doc/autoconf.texi (Configuration Actions): Document `$tmp'.
+ * NEWS: Update.
+
+2009-09-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Update License to GPLv3+ including new Autoconf Exception.
+ * NEWS, README: Update licensing information.
+ * COPYING.EXCEPTION: New file.
+ * Makefile.am (EXTRA_DIST): Distribute it.
+ * cfg.mk (autom4te-update): Remove copyright change warning.
+ * lib/autoconf/autoconf.m4, lib/autoconf/autoheader.m4,
+ lib/autoconf/autoscan.m4, lib/autoconf/autotest.m4,
+ lib/autoconf/autoupdate.m4, lib/autoconf/c.m4,
+ lib/autoconf/erlang.m4, lib/autoconf/fortran.m4,
+ lib/autoconf/functions.m4, lib/autoconf/general.m4,
+ lib/autoconf/headers.m4, lib/autoconf/lang.m4,
+ lib/autoconf/libs.m4, lib/autoconf/oldnames.m4,
+ lib/autoconf/programs.m4, lib/autoconf/specific.m4,
+ lib/autoconf/status.m4, lib/autoconf/types.m4,
+ lib/autotest/autotest.m4, lib/autotest/general.m4,
+ lib/autotest/specific.m4, lib/m4sugar/foreach.m4,
+ lib/m4sugar/m4sh.m4, lib/m4sugar/m4sugar.m4: Update exception
+ statement, bump to GPLv3.
+ * bin/autoconf.as, bin/autoheader.in, bin/autom4te.in,
+ bin/autoreconf.in, bin/autoscan.in, bin/autoupdate.in,
+ bin/ifnames.in: Bump to GPLv3+, adjust --version output
+ to reflect the GPLv3+ and the Autoconf Exception.
+ * lib/Autom4te/C4che.pm, lib/Autom4te/ChannelDefs.pm,
+ lib/Autom4te/General.pm, lib/Autom4te/Request.pm,
+ lib/autom4te.in, lib/autoscan/autoscan.pre,
+ lib/emacs/autoconf-mode.el, lib/emacs/autotest-mode.el,
+ lib/freeze.mk, tests/atlocal.in, tests/autoscan.at,
+ tests/autotest.at, tests/base.at, tests/c.at,
+ tests/compile.at, tests/erlang.at, tests/foreign.at,
+ tests/fortran.at, tests/local.at, tests/m4sh.at,
+ tests/m4sugar.at, tests/mktests.sh, tests/semantics.at,
+ tests/statesave.m4, tests/suite.at, tests/tools.at,
+ tests/torture.at, tests/wrapper.as: Bump to GPLv3+.
+
+ Allow to work on systems without Fcntl::flock implementation.
+ * configure.ac (PERL_FLOCK): New substitution variable with test
+ whether Fcntl::flock is implemented by the system.
+ * bin/Makefile.am (edit): Substitute @PERL_FLOCK@.
+ * bin/autom4te.in: Call XFile::lock only if flock is
+ implemented.
+
+2009-09-04 Reuben Thomas <rrt@sc3d.org> (tiny change)
+
+ Mention the Autoconf archive.
+ * doc/autoconf.texi (Coding Style): Add a link.
+
+2009-08-30 Bruno Haible <bruno@clisp.org>
+
+ Document another Solaris tr pitfall.
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Mention
+ that Solaris /usr/bin/tr does not only have problems with
+ replacing NUL bytes but discards all NUL bytes from the input.
+
+2009-09-04 Eric Blake <ebb9@byu.net>
+
+ Improve wording about what goes before AC_INIT.
+ * doc/autoconf.texi (Initializing configure): Update wording.
+ (Versioning) <AC_PREREQ>: Remove misleading text, to match
+ autoscan's behavior.
+ * THANKS: Update.
+ Reported by NightStrike, with input from Ralf Wildenhues.
+
+2009-09-04 Thomas Jahns <jahns@dkrz.de> (tiny change)
+
+ Fix illegal tab character in Fortran source.
+ * lib/autoconf/fortran.m4 (AC_FC_SRCEXT): Change TAB back to
+ multiple spaces; regression introduced 2008-10-23.
+ * NEWS: Mention this.
+ * THANKS: Update.
+
+2009-08-22 Romain Lenglet <romain.lenglet@laposte.net>
+
+ Fix AT_CHECK_EUNIT for versions of Erlang/OTP without init:stop/1.
+ * lib/autotest/specific.m4 (AT_CHECK_EUNIT): Support older
+ versions of Erlang/OTP with an erlang:stop() function that doesn't
+ take arguments.
+
+2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Drop unneeded line in Eunit test.
+ * tests/autotest.at (Erlang Eunit unit tests): Do not copy
+ install-sh.
+
+ Fix build dependencies for Erlang macro files.
+ * lib/freeze.mk (autotest_m4f_dependencies): Add
+ $(src_libdir)/autotest/specific.m4.
+ * tests/Makefile.am (AUTOCONF_FILES): Add erlang.m4.
+
+2009-09-19 Paolo Bonzini <bonzini@gnu.org>
+
+ Use a separate program to test whether the compiler works.
+ * lib/autoconf/erlang.m4 (_AC_LANG_NULL_PROGRAM(Erlang)): New.
+ * lib/autoconf/lang.m4 (AC_LANG_DEFINE): Copy _AC_LANG_NULL_PROGRAM.
+ (_AC_LANG_NULL_PROGRAM(), _AC_LANG_NULL_PROGRAM): New.
+ (_AC_COMPILER_EXEEXT_DEFAULT): Print here "whether the xyz compiler
+ works", before exiting.
+ (_AC_COMPILER_EXEEXT_WORKS): Merge into _AC_COMPILER_EXEEXT_CROSS,
+ remove the "whether the xyz compiler works" message, use
+ conftest$ac_cv_exeext instead of $ac_file.
+ (_AC_COMPILER_EXEEXT): Try _AC_COMPILER_EXEEXT_DEFAULT using
+ the null program, and clean conftest.out only after
+ _AC_COMPILER_EXEEXT_CROSS.
+ (AC_NO_EXECUTABLES): Use _AC_LANG_NULL_PROGRAM.
+ (_AC_COMPILER_OBJEXT): Use _AC_LANG_NULL_PROGRAM.
+
+2009-08-18 Bruno Haible <bruno@clisp.org>
+
+ Document Solaris tr range and NUL limitations.
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention that
+ Solaris /usr/bin/tr does not support ranges, nor the '\0' octal
+ escape.
+
+2009-08-14 Eric Blake <ebb9@byu.net>
+
+ Simplify version control metadata.
+ * .cvsignore: Delete.
+ * bin/.cvsignore: Likewise.
+ * config/.cvsignore: Likewise.
+ * doc/.cvsignore: Likewise.
+ * lib/.cvsignore: Likewise.
+ * lib/autoconf/.cvsignore: Likewise.
+ * lib/Autom4te/.cvsignore: Likewise.
+ * lib/autoscan/.cvsignore: Likewise.
+ * lib/autotest/.cvsignore: Likewise.
+ * lib/emacs/.cvsignore: Likewise.
+ * lib/m4sugar/.cvsignore: Likewise.
+ * man/.cvsignore: Likewise.
+ * tests/.cvsignore: Likewise.
+ * bin/.gitignore: Likewise.
+ * build-aux/.gitignore: Likewise.
+ * config/.gitignore: Likewise.
+ * doc/.gitignore: Likewise.
+ * lib/.gitignore: Likewise.
+ * lib/autoconf/.gitignore: Likewise.
+ * lib/Autom4te/.gitignore: Likewise.
+ * lib/autoscan/.gitignore: Likewise.
+ * lib/autotest/.gitignore: Likewise.
+ * lib/emacs/.gitignore: Likewise.
+ * lib/m4sugar/.gitignore: Likewise.
+ * man/.gitignore: Likewise.
+ * tests/.gitignore: Likewise.
+ * .gitignore: Consolidate all rules into one file.
+
+ Normalize remaining copyright lines.
+ * BUGS: Reformat copyright line, using UPDATE_COPYRIGHT_FORCE.
+ * NEWS: Likewise.
+ * README-hacking: Likewise.
+ * TODO: Likewise.
+ * lib/Autom4te/ChannelDefs.pm: Likewise.
+ * lib/autoconf/fortran.m4: Likewise.
+ * lib/autoconf/general.m4: Likewise.
+ * lib/autoconf/lang.m4: Likewise.
+ * lib/autotest/general.m4: Likewise.
+ * maint.mk: Likewise.
+ * tests/compile.at: Likewise.
+
+ Improve copyright updating.
+ * build-aux/update-copyright: Resynchronize from upstream.
+ * maint.mk (update-copyright): Simplify based on gnulib.
+ (update-copyright-env): New variable.
+ * cfg.mk (update-copyright-exclude-regexp): Delete.
+ (update-copyright-env): New override.
+ * .x-update-copyright: New file.
+ * lib/Autom4te/Makefile.am: Add copyright.
+ * lib/Autom4te/Channels.pm: Revert copyright update to upstream
+ file.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/Struct.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+ Update copyright.
+ * AUTHORS: Include 2009 in copyright.
+ * lib/Autom4te/C4che.pm: Likewise.
+ * lib/Autom4te/Channels.pm: Likewise.
+ * lib/Autom4te/Configure_ac.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/General.pm: Likewise.
+ * lib/Autom4te/Request.pm: Likewise.
+ * lib/Autom4te/Struct.pm: Likewise.
+ * lib/autoconf/Makefile.am: Likewise.
+ * lib/autoconf/autoconf.m4: Likewise.
+ * lib/autoconf/autoscan.m4: Likewise.
+ * lib/autoconf/autoupdate.m4: Likewise.
+ * lib/autoconf/functions.m4: Likewise.
+ * lib/autoconf/libs.m4: Likewise.
+ * lib/autoconf/oldnames.m4: Likewise.
+ * lib/autoconf/types.m4: Likewise.
+ * lib/autoscan/Makefile.am: Likewise.
+ * lib/autoscan/autoscan.pre: Likewise.
+ * lib/autotest/Makefile.am: Likewise.
+ * lib/autotest/autotest.m4: Likewise.
+ * lib/emacs/autoconf-mode.el: Likewise.
+ * lib/emacs/autotest-mode.el: Likewise.
+ * lib/freeze.mk: Likewise.
+ * lib/m4sugar/foreach.m4: Likewise.
+ * man/Makefile.am: Likewise.
+ * tests/atlocal.in: Likewise.
+ * tests/autoscan.at: Likewise.
+ * tests/foreign.at: Likewise.
+ * tests/fortran.at: Likewise.
+ * tests/mktests.sh: Likewise.
+ * tests/semantics.at: Likewise.
+ * tests/suite.at: Likewise.
+ * tests/wrapper.as: Likewise.
+
+ Prepare to bulk update copyright years.
+ * build-aux/update-copyright: New file.
+ * cfg.mk (gnulib-update): Sync it from gnulib.
+ (update-copyright-exclude-regexp): New variable.
+ (web-manual): Move...
+ * maint.mk (web-manual): ...here, to match gnulib.
+ (update-copyright): New target, copied from gnulib's
+ maint.mk (it would be nice to sync this file...).
+ (build_aux): New macro.
+ (VC_LIST, emit_upload_commands): Use it.
+ * build-aux/texinfo.tex: Resynchronize from upstream.
+ * lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): Reformat to meet
+ expected pattern.
+ * lib/autotest/general.m4 (_AT_COPYRIGHT_YEARS): Likewise.
+
+2009-08-12 Paolo Bonzini <bonzini@gnu.org>
+
+ Fix testsuite log capturing for tests 183 and 186.
+ * tests/autotest.at (AT_CHECK_AT_PREP): Prepend AT_dir to
+ testsuite log file for AT_CAPTURE_FILE.
+
+2009-08-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ensure we do not regress with AC_CHECK_MEMBERS.
+ * tests/semantics.at (AC_CHECK_MEMBERS): Expose the recent
+ AC_CHECK_MEMBERS fix.
+ (AC_CHECK_MEMBER): New test group.
+
+2009-08-10 Jeff Squyres <jsquyres@cisco.com> (tiny change)
+
+ Fix typo in AC_REQUIRE description.
+ * doc/autoconf.texi (Prerequisite macros): Fix typo.
+
+2009-08-10 Paolo Bonzini <bonzini@gnu.org>
+
+ Fix description of the macro generated by AC_CHECK_MEMBERS.
+ * lib/autoconf/types.m4 (_AC_CHECK_MEMBERS): Fix regex
+ replacement. Reported by Bruno Haible.
+
+2009-08-07 Romain Lenglet <romain.lenglet@laposte.net>
+
+ * lib/autoconf/erlang.m4 (AC_LANG(Erlang)): Make AC_RUN_IFELSE
+ fail if the test module doesn't compile.
+
+2009-08-02 Paolo Bonzini <bonzini@gnu.org>
+
+ Use exit code to detect no occurrences with grep.
+ * tests/autotest.at (Erlang Eunit unit tests): Fix grep invocation.
+
+2009-08-01 Romain Lenglet <romain.lenglet@laposte.net>
+ Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autotest/specific.m4 (AT_CHECK_EUNIT): New file.
+ * lib/autotest/Makefile.am (dist_autotestlib_DATA): Add specific.m4.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Add definitions of
+ variables used by AT_CHECK_EUNIT macro: ERL, ERLC, ERLCFLAGS.
+ * tests/autotest.at (Erlang Eunit unit tests): Add test for macro
+ AT_CHECK_EUNIT.
+ * doc/autoconf.texi (Writing Testsuites): Document macro
+ AT_CHECK_EUNIT.
+ * NEWS: Mention macro AT_CHECK_EUNIT.
+
+2009-07-30 Paolo Bonzini <bonzini@gnu.org>
+ Joel E. Denny <jdenny@clemson.edu>
+
+ Clarify comparison of echo, printf, and AS_ECHO*.
+ * doc/autoconf.texi (Limitations of Builtins): In echo's entry,
+ give a reason why printf is better than echo. In printf's
+ entry, cross-reference echo's entry.
+
+2009-07-30 Paolo Bonzini <bonzini@gnu.org>
+
+ Add back AH_CHECK_HEADERS.
+ * lib/autoconf/general.m4 (AH_CHECK_HEADERS): New.
+ * NEWS: Create new section.
+
+2009-07-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: avoid bogus hostname match from inner test logs.
+ * tests/autotest.at (Hard fail): Check more restrictively for
+ passed tests, so that hostnames recorded in the log file do not
+ wrongly match.
+ Report by Ludovic Courtès.
+
+2009-07-26 Eric Blake <ebb9@byu.net>
+
+ Release Version 2.64.
+ * NEWS: Mention the release.
+ * README: This release is stable.
+ * HACKING (release): Use dist-xz, not dist-lzma.
+
+ Document some optional features in INSTALL.
+ * doc/install.texi (Basic Installation): Mention that INSTALL is
+ generic, and that not all packages implement all features.
+ Mention 'make distcheck' for maintainers, and 'make installcheck'
+ for users. Mention the GNU Coding Standards.
+ (Installation Names): Mention DESTDIR vs. 'make prefix= install'
+ as ways to alter the configuration, with caveats of each. Move
+ --program-prefix discussion...
+ (Optional Features): ...here. Mention --enable-silent-rules and
+ use of make V=0.
+
+ Basic improvements to INSTALL.
+ * doc/install.texi (Basic Installation): Use better markup.
+ (Multiple Architectures): Introduce the term VPATH.
+ (Installation Names): Mention that --prefix must be absolute.
+ * doc/autoconf.texi (Preset Output Variables)
+ (Installation Directory Variables): Consistently refer to GNU
+ Coding Standards.
+
+ Update some upstream files.
+ * build-aux/config.guess: Resynchronize from upstream.
+ * build-aux/config.sub: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/standards.texi: Likewise.
+
+2009-07-25 Eric Blake <ebb9@byu.net>
+
+ Recognize new m4sugar keywords.
+ * lib/emacs/autoconf-mode.el (autoconf-current-defun): Recognize
+ m4_define_default, m4_defun_init, m4_defun_once.
+ (autoconf-font-lock-keywords): Likewise.
+
+ Require m4 1.4.6, and fix testsuite to support this version.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Reject m4 1.4.5, now that we use
+ regexp it can't handle.
+ * NEWS: Mention minimum version bump.
+ * README: Likewise.
+ * README-hacking: Likewise.
+ * doc/autoconf.texi (Introduction, Why GNU M4): Likewise.
+ * tests/tools.at (autom4te --trace and whitespace): Update test so
+ still work with older m4 line numbers.
+ * tests/m4sugar.at (m4@&t@_require: nested): Likewise.
+ Reported by Ralf Wildenhues.
+
+2009-07-25 Bruno Haible <bruno@clisp.org>
+
+ Clarify autom4te debugging tips.
+ * doc/autoconf.texi (Debugging via autom4te): Fix example from
+ previous commit, and add clarification.
+
+2009-07-25 Eric Blake <ebb9@byu.net>
+
+ Document some autom4te debugging tips.
+ * doc/autoconf.texi (Debugging via autom4te): New node.
+ Suggested by Bruno Haible.
+
+ Fix font-lock.
+ * configure.ac (ac_cv_unsupported_fs_chars): Make editing easier.
+
+ Let autoheader see through m4 macros in AC_DEFINE.
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE): Expand macro before
+ tracing its name.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM, AH_TEMPLATE): Likewise,
+ for using the macro in a template file.
+ * tests/tools.at (autoheader and macros): New test.
+ * NEWS: Mention this.
+ Reported by Bruno Haible.
+
+ Improve NEWS wording.
+ * NEWS: Use more accurate statement.
+ Suggestedy by Ralf Wildenhues.
+
+2009-07-24 Eric Blake <ebb9@byu.net>
+
+ Fix AS_EXIT for FreeBSD sh.
+ * lib/m4sugar/m4sh.m4 (AS_EXIT): Always supply an argument to the
+ shell function, since $? is not reliable on function entry.
+ (_AS_EXIT_PREPARE): Simplify to assume argument.
+ Reported by Ralf Wildenhues.
+
+2009-07-23 Eric Blake <ebb9@byu.net>
+
+ Run more tests under Solaris.
+ * tests/local.at (AT_CHECK_AUTOCONF): Don't skip entire test
+ group when passing over syntax checks.
+
+2009-07-23 Romain Lenglet <romain.lenglet@laposte.net>
+
+ Clean up temporary files generated by Erlang macros.
+ * lib/autoconf/erlang.m4 (AC_ERLANG_CHECK_LIB)
+ (AC_ERLANG_SUBST_ROOT_DIR, AC_ERLANG_SUBST_LIB_DIR)
+ (AC_ERLANG_SUBST_ERTS_VER): Delete conftest.out; renamed
+ erlang_cv_* cache variables into ac_cv_erlang_*.
+ * lib/autoconf/general.m4 (AC_RUN_IFELSE): Delete conftest.beam
+ files generated by Erlang compiler.
+ * tests/local.at (AT_CHECK_ENV): Ignore variables defined by
+ Erlang macros.
+ * tests/erlang.at (AT_SETUP_ERLANG): Delete; replace all uses by
+ AT_CHECK_MACRO.
+ * tests/Makefile.am (AUTOCONF_FILES): Revert previous addition of
+ generated Erlang tests; they are all hand-tested.
+
+ Add autotests for Erlang macros.
+ * tests/erlang.at: Added tests for all macros in erlang.m4.
+ * tests/Makefile.am (TESTSUITE_HAND_AT, AUTOCONF_FILES): Added
+ erlang.at.
+ * tests/suite.at: Likewise.
+ * tests/compile.at (AC_LANG, AC_LANG_PUSH & AC_LANG_POP): Added
+ test for extension of Erlang files.
+ (Multiple languages): Use correct m4 quoting.
+ * NEWS: Mention this.
+
+2009-07-22 Eric Blake <ebb9@byu.net>
+
+ Fix test of autom4te from stdin.
+ * tests/tools.at (autom4te cache locking): Make stdin request
+ explicit, so that --force is properly used.
+
+2009-07-16 Eric Blake <ebb9@byu.net>
+
+ Don't hide leading space in autom4te --trace output.
+ * bin/autom4te.in (handle_traces): Don't flatten leading and
+ trailing space, since tracing spacing bugs can be useful.
+ * tests/tools.at (autom4te --trace and whitespace): New test.
+
+2009-07-13 Eric Blake <ebb9@byu.net>
+
+ Document that $srcdir can be used during configure.
+ * doc/autoconf.texi (Preset Output Variables): Add a paragraph.
+ * THANKS: Update.
+ Reported by Monty Taylor.
+
+2009-07-13 Eric Blake <ebb9@byu.net>
+
+ Disable asynchronous job notification for parallel tests.
+ * lib/autotest/general.m4 (AT_INIT) <Driver loop>: Turn off notify
+ mode, since zsh leaves it on after 'emulate sh'.
+ * doc/autoconf.texi (Limitations of Builtins) <set>: Document that
+ job control options are not portable.
+
+ Guarantee that exit status trumps output matching.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Document this
+ better.
+ * tests/autotest.at (Skip, parallel skip): Enhance tests.
+
+ Fix nits in recent patches.
+ * configure.ac (ac_cv_dir_trailing_space): Avoid $status, for
+ zsh.
+ * doc/autoconf.texi (Writing Testsuites) <AT_FAIL_IF, AT_SKIP_IF>:
+ Tweak wording.
+ (Introduction): Recommend m4 1.4.13.
+ * README: Likewise.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Likewise. Use long option --gnu
+ rather than -g.
+
+2009-07-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Introduce AT_SKIP_IF and AT_FAIL_IF
+ * NEWS: Mention AT_SKIP_IF and AT_FAIL_IF.
+ * doc/autoconf.texi (Autotest): Document them.
+ * lib/autotest/general.m4 (_AT_LINE_ESCAPED, AT_SKIP_IF,
+ AT_FAIL_IF, _AT_CHECK_EXIT): New.
+ (AT_CHECK): Use _AT_LINE_ESCAPED.
+ * tests/autotest.at: Add tests for AT_SKIP_IF and AT_FAIL_IF.
+ Use AT_SKIP_IF.
+ * tests/local.at: Use AT_SKIP_IF.
+
+2009-07-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Use m4 -g when available.
+ * m4/m4.m4: Unset POSIXLY_CORRECT during first test. Test for -g.
+ Warn user if he has POSIXLY_CORRECT set but -g is not supported.
+ * bin/Makefile.am: Substitute @M4_GNU@ into generated files.
+ * bin/autom4te.in: Pass @M4_GNU@ to m4.
+
+2009-07-13 Eric Blake <ebb9@byu.net>
+
+ Fix previous patch.
+ * lib/autotest/general.m4 (at_fn_check_prepare_notrace): Use
+ proper m4 quoting.
+ (_AT_DECIDE_TRACEABLE): Likewise.
+
+2009-07-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autotest/general.m4 (at_fn_check_prepare_notrace): Use
+ $at_trace_echo. Add new REASON argument.
+ (at_fn_check_prepare_trace): Do not call at_fn_check_prepare_notrace.
+ Use $at_check_filter_trace.
+ (at_fn_check_prepare_dynamic): Use at_fn_check_prepare_notrace.
+ (at_traceon): Initialize to ':'.
+ (at_traceoff): Remove, use 'set +x' instead throughout.
+ (at_check_filter_trace, at_trace_echo): New shell variables.
+ Initialize them if tracing is requested.
+ (_AT_DECIDE_TRACEABLE): Adjust call to at_fn_check_prepare_notrace.
+
+2009-07-12 Paolo Bonzini <bonzini@gnu.org>
+
+ Move atlocal feature tests to configure
+ * configure.ac: Test for unsupported characters in files and
+ directories here...
+ * tests/atlocal.in: ... and not here.
+
+2009-07-09 Eric Blake <ebb9@byu.net>
+
+ Fix test typo.
+ * tests/m4sh.at (AS@&t@_INIT_GENERATED): Close fd, rather than
+ creating file named -.
+
+ Fix testsuite under dash.
+ * tests/m4sh.at (LINENO stack, AS@&t@_BASENAME, AS@&t@_DIRNAME)
+ (AS@&t@_ECHO and AS@&t@_ECHO_N, AS@&t@_EXIT, AS@&t@_MKDIR_P)
+ (AS@&t@_VERSION_COMPARE, as_me, Negated classes in globbing)
+ (Functions Support, Functions and return Support)
+ (Nested AS@&t@_REQUIRE_SHELL_FN, Nested AS@&t@_REQUIRE)
+ (AS@&t@_REQUIRE_SHELL_FN and m4@&t@_require, AS@&t@_HELP_STRING)
+ (AS@&t@_IF and AS@&t@_CASE, AS@&t@_FOR, AS@&t@_LITERAL_IF)
+ (AS@&t@_VAR basics, AS@&t@_VAR_APPEND, AS@&t@_VAR_ARITH)
+ (AS@&t@_INIT cleanup, AS@&t@_INIT_GENERATED, AS@&t@_MESSAGE_FD)
+ (_AS@&t@_CLEAN_DIR, ECHO_C): Allow testing different CONFIG_SHELL
+ options during the testsuite run.
+ Reported by Ralf Wildenhues.
+
+2009-07-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ignore messages on stderr when testing for the zsh issue.
+ * tests/autotest.at (AT_SKIP_PARALLEL_TESTS): Ignore stderr.
+
+2009-07-07 Eric Blake <ebb9@byu.net>
+
+ Skip parallel tests when zsh 'set -m' fails.
+ * tests/autotest.at (AT_SKIP_PARALLEL_TESTS): Skip test if set -m
+ is not supported.
+ Reported by Ralf Wildenhues.
+
+ Make parallel testsuite more portable.
+ * lib/autotest/general.m4 (AT_INIT) <AT_JOB_FIFO_FD>: Avoid <>;
+ instead open write descriptor in each group and read descriptor in
+ main driver.
+ * tests/autotest.at (AT_SKIP_PARALLEL_TESTS): Relax condition.
+
+2009-07-03 Eric Blake <ebb9@byu.net>
+
+ Avoid syntax error in ash.
+ * lib/autotest/general.m4 (AT_INIT) <driver loop>: Avoid syntax
+ errors on shells that don't recognize <>.
+ * tests/autotest.at (AT_SKIP_PARALLEL_TESTS): Also skip parallel
+ tests for this reason. Skip based on the shell to be tested,
+ not the shell driving the testsuite.
+ (parallel syntax error): Rearrange similar to previous patch.
+ (parallel test execution): Defer skip until after serial tests.
+
+2009-07-02 Eric Blake <ebb9@byu.net>
+
+ Skip test on shells that can't catch syntax failure.
+ * tests/autotest.at (Syntax error): Skip test if shell aborts on
+ syntax error (AIX ksh88) or doesn't detect it (zsh).
+ * doc/autoconf.texi (Limitations of Builtins) <.>: Mention these
+ limitations.
+ Reported by Ralf Wildenhues.
+
+2009-06-30 Jan Madzik <jmadzik@gmail.com> (tiny change)
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid AIX 6.1 ksh88 ECHO_C command substitution bug.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_N_PREPARE): Ensure more than
+ one character is output with `\c'; reset echo output state
+ if buggy ksh was detected, and set ECHO_T instead of ECHO_C.
+ * doc/autoconf.texi (Limitations of Builtins): Document it.
+ * tests/m4sh.at (ECHO_C): New test.
+ * THANKS: Update.
+
+2009-06-27 William Pursell <bill.pursell@gmail.com> (tiny change)
+
+ Fix grammaro in documenation.
+ * doc/autoconf.texi (Guidelines): Fix grammaro.
+
+2009-06-17 Eric Blake <ebb9@byu.net>
+
+ Fix AC_CHECK_HEADER infloop for gcc.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_NEW)
+ (_AC_CHECK_HEADER_OLD): Give up on AU_DEFUN, and manually warn
+ about obsoletion, to avoid infinite loop in gcc.
+ Reported by Ralf Wildenhues.
+
+2009-06-15 Eric Blake <ebb9@byu.net>
+
+ Add m4_copy_force, m4_rename_force.
+ * lib/m4sugar/m4sugar.m4 (m4_copy_force, m4_rename_force): New
+ macros.
+ * tests/m4sugar.at (m4@&t@_defn): Test them.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_copy>: Document
+ them.
+ * NEWS: Likewise.
+ Suggested by Ralf Wildenhues.
+
+ Reinstate _AC_CHECK_HEADER_OLD for gcc.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_NEW)
+ (_AC_CHECK_HEADER_OLD): Provide autoupdate versions, since gcc and
+ others used these undocumented macros.
+ Reported by Ralf Wildenhues.
+
+2009-06-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix concurrent autom4te.cache directory creation race.
+ * bin/autom4te.in: Do not error out if another `autom4te'
+ instance created the cache directory before we could.
+
+2009-06-11 Steven G. Johnson <stevenj@alum.mit.edu>
+ and Eric Blake <ebb9@byu.net>
+
+ Create a file in test program when detecting cross-compilation.
+ * lib/autoconf/lang.m4 (_AC_LANG_IO_PROGRAM): New macro, returns
+ program that creates a file.
+ (_AC_COMPILER_EXEEXT,_AC_COMPILER_EXEEXT_WORKS): Call new macro
+ and document why it's needed to robustly detect cross-compiling.
+ (AC_LANG_DEFINE): Copy implementation across similar languages.
+ * lib/autoconf/c.m4 (_AC_LANG_IO_PROGRAM(C)): Implement new macro.
+ * lib/autoconf/fortran.m4 (_AC_LANG_IO_PROGRAM(Fortran 77)):
+ Likewise.
+ * lib/autoconf/erlang.m4 (_AC_LANG_IO_PROGRAM(Erlang)): Likewise.
+
+2009-06-11 Eric Blake <ebb9@byu.net>
+
+ Simplify AC_LANG(Fortran).
+ * lib/autoconf/fortran.m4 (AC_LANG(Fortran)): Borrow from Fortran
+ 77, which requires reordering portions of the file.
+ (AC_LANG_PROGRAM(Fortran), AC_LANG_CALL(Fortran)): Now defined
+ automatically.
+
+ Clarify m4_copy semantics.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_copy>: Update
+ documentation.
+ * tests/m4sugar.at (m4@&t@_defn): Enhance test.
+
+2009-06-06 Eric Blake <ebb9@byu.net>
+
+ Improve documentation on trap pitfalls.
+ * doc/autoconf.texi (Limitations of Builtins) <trap>: Mention new
+ Posix 2008 requirement on trap, and dash bug in implementing it.
+ Mention various shell bugs with traps defined inside subshells.
+ Mention older bash limitation with single-command exit trap.
+ <set>: Mention another 'set -e' limitation.
+ Reported by Jens Schmidt.
+
+2009-06-06 Jim Meyering <meyering@redhat.com>
+
+ Improve testsuite --help
+ * lib/autotest/general.m4: Correct the example in ./testsuite --help.
+ Improve wording.
+
+2009-06-06 Eric Blake <ebb9@byu.net>
+
+ Document fallback behavior of AC_PROG_LEX.
+ * doc/autoconf.texi (Particular Programs) <AC_PROG_LEX>: Mention
+ why fallback is :, and that a --version check must be used to
+ determine whether flex was found.
+ Reported by Patrick Welche.
+
+2009-05-28 Jim Meyering <meyering@redhat.com>
+
+ Fix syntax errors in autoconf.texi.
+ * doc/autoconf.texi (Erlang Libraries): @-escape curly braces
+ in example code.
+
+2009-05-28 Romain Lenglet <romain.lenglet@laposte.net>
+
+ New AC_ERLANG_SUBST_ERTS_VER macro.
+ * lib/autoconf/erlang.m4: Add macro AC_ERLANG_SUBST_ERTS_VER.
+ * doc/autoconf.texi (Erlang Libraries): Document
+ AC_ERLANG_SUBST_ERTS_VER.
+ * NEWS: Likewise.
+ * AUTHORS: Update Romain Lenglet's email address.
+ * THANKS: Update.
+ Suggested by Ruslan Babayev.
+
+2009-05-26 Eric Blake <ebb9@byu.net>
+
+ Sanitize more problematic environment variables.
+ * doc/autoconf.texi (Environment Variable Index): Add more
+ entries, particularly for precious variables and known culprit
+ variables. Needed to avoid overfull vbox.
+ (Special Shell Variables) <CLICOLOR_FORCE, GREP_OPTIONS>: Add
+ variables known to cause misbehavior.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Unset variables
+ known to cause problems.
+ * THANKS: Update.
+ Based on reports from Ilya Bobir and Joey Mingrone.
+
+2009-05-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document VPATH = $(variable) issue in VPATH chapter.
+ * doc/autoconf.texi (Variables listed in VPATH): New node.
+ (Top, VPATH and Make): Adjust menus.
+ (Build Directories): Refer to it.
+ Prompted by report from Bruno Haible.
+
+2009-05-19 Eric Blake <ebb9@byu.net>
+
+ Update uses of all-permissive license.
+ * ChangeLog: Relicense under GPL.
+ * ChangeLog.0: Likewise.
+ * ChangeLog.1: Likewise.
+ * ChangeLog.2: Likewise.
+ * THANKS: Likewise.
+ * m4/m4.m4: Use latest wording of FSF all-permissive license.
+ * m4/make-case.m4: Likewise.
+ * doc/install.texi: Likewise.
+ * tests/statesave.m4: Relicense to match rest of testsuite; this
+ file does not need all-permissive license since it is not designed
+ for reuse by other packages.
+ * BUGS: Relicense under all-permissive license.
+ * HACKING: Likewise.
+ * NEWS: Likewise.
+ * README: Likewise.
+ * README-alpha: Likewise.
+ * README-hacking: Likewise.
+ * TODO: Likewise.
+
+ Update some upstream files.
+ * build-aux/config.guess: Resynchronize from upstream.
+ * build-aux/gnupload: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/gendocs_template: Likewise.
+
+ Don't mention undocumented interface in NEWS.
+ * NEWS: Correct earlier entry about AS_FOR.
+
+2009-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New manual section `Parallel Make'.
+ * doc/autoconf.texi (Parallel Make): New node, document NetBSD
+ `make -jN' quirks.
+ (Top, Portable Make): Adjust menus.
+
+2009-05-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ testsuite: skip `Multiple languages' test without C++ compiler.
+ * tests/compile.at (Multiple languages): Skip test on systems
+ without a C++ compiler.
+ Report by Jim Meyering.
+
+2009-05-13 Eric Blake <ebb9@byu.net>
+
+ Document zsh bug with empty commands.
+ * doc/autoconf.texi (Special Shell Variables) <?>: Add mention of
+ more problems with $?.
+
+2009-05-11 Patrick Welche <prlw1@cam.ac.uk> (tiny change)
+
+ Also try X11R7 when looking for X11 files, for NetBSD.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Also try directories
+ with X11R7 in the name.
+
+2009-05-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Limit stderr logging for C compiler version.
+ * lib/autoconf/general.m4 (_AC_RUN_LOG_LIMIT, _AC_DO_LIMIT): New
+ internal macros, equivalent to _AC_RUN_LOG and _AC_DO, but with
+ an optional additional argument to limit the number of lines of
+ stderr output logged, defaulting to 10.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Use
+ _AC_DO_LIMIT for capturing compiler version output. Also test
+ -qversion, for the IBM xlc compiler.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+ * THANKS: Update.
+ Report by Christian Rössel and John R. Cary against Libtool.
+
+2009-04-24 Eric Blake <ebb9@byu.net>
+
+ Fix quoting of m4 macros in AT_CHECK.
+ * lib/autotest/general.m4 (AT_CHECK): Expand prior to adding
+ escapes, to avoid shell syntax errors caused by late macro
+ expansion.
+ * NEWS: Document this change.
+ * tests/autotest.at (Metacharacters in command from M4 expansion):
+ New test.
+
+ manual: Use consistent spelling of here-document.
+ * doc/autoconf.texi (Defining Symbols, Programming in M4sh)
+ (Common Shell Constructs, Macro Names, Writing Testsuites): Fix
+ spelling.
+ Reported by Ralf Wildenhues.
+
+ Make AT_CHECK_UNQUOTED more like AC_DEFINE_UNQUOTED.
+ * lib/autotest/general.m4 (AT_CHECK_NOESCAPE): Keep older,
+ undocumented semantics, where unbalanced " cannot be used in the
+ stdout/stderr argument.
+ (AT_CHECK_UNQUOTED): Treat " in stdout/stderr as a literal, since
+ the text is used in double-quoted context.
+ * tests/autotest.at (unquoted output): New test.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Mention which
+ shell expansions are handled.
+
+ Rename AT_CHECK_NOESCAPE to AT_CHECK_UNQUOTED.
+ * lib/autotest/general.m4 (AT_CHECK_NOESCAPE): Deprecate, in favor
+ of new spelling...
+ (AT_CHECK_UNQUOTED): ...for consistency with AC_DEFINE_UNQUOTED.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Document the
+ rename.
+ * NEWS: Likewise.
+ * tests/autotest.at (Binary output, Cleanup): Adjust tests.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Likewise.
+ Reported by Ralf Wildenhues.
+
+2009-04-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New test to ensure autom4te cache file locking works.
+ * tests/tools.at (autom4te cache locking): New test.
+ Report by Eric Blake.
+
+2009-04-22 Paolo Bonzini <bonzini@gnu.org>
+
+ manual: another grammar improvement.
+ * doc/autoconf.texi (Fortran Compiler): Avoid dependency on
+ pronunciation of `FCFLAGS_f90'.
+
+2009-04-23 Eric Blake <ebb9@byu.net>
+
+ Change FOO placeholder to use @var{text} instead.
+ * doc/autoconf.texi (Configuration Actions): Rename AC_CONFIG_FOOS
+ to AC_CONFIG_@var{ITEMS}.
+ * doc/autoconf.texi (config.status Invocation): Likewise.
+ (AC_FOO_IFELSE vs AC_TRY_FOO): Rename node...
+ (AC_ACT_IFELSE vs AC_TRY_ACT): ...to this.
+
+2009-04-22 Eric Blake <ebb9@byu.net>
+
+ Add m4_argn.
+ * lib/m4sugar/m4sugar.m4 (m4_argn): New macro.
+ * NEWS: Document it.
+ * doc/autoconf.texi (Looping constructs) <m4_argn>: Likewise.
+ <m4_car, m4_cdr>: Improve documentation.
+ * tests/m4sugar.at (m4 lists): New test.
+
+2009-04-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Improve description of AC_PROG_CC_C89 and AC_PROG_CC_C99.
+ * doc/autoconf.texi (C Compiler): Document that AC_PROG_CC_C89
+ and AC_PROG_CC_C99 prefer extended over strict conformance modes.
+ Report by Vincent Lefèvre.
+
+2009-04-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revert bogus change in last commit.
+ * doc/autoconf.texi (Initialization Macros): Revert change.
+ Spotted by Eric Blake.
+
+ manual: fix trivial grammar errors.
+ * doc/autoconf.texi (Fortran Compiler, Initialization Macros)
+ (Limitations of Usual Tools, Pretty Help Strings)
+ (config.status Invocation): Fix `a' vs. `an' errors.
+ Report by Eric Blake.
+
+2009-04-21 Eric Blake <ebb9@byu.net>
+
+ Shuffle maintainer-specific rules.
+ * Makefile.am (maintainer-check-tests): Delete.
+ (autom4te-update): Move...
+ * cfg.mk (autom4te-update): ...here.
+ (fetch): Depend on autom4te-update. Split...
+ (gnulib-update): ...into new rule. Import move-if-change from
+ gnulib.
+ * maint.mk (maintainer-distcheck): Absorb former maintainer-check
+ rule.
+ * build-aux/move-if-change: New file, undistributed.
+ * .gitattributes: Handle new upstream file.
+ * .gitignore: Ignore maintainer cruft.
+ * HACKING: Update maintainer instructions.
+ * build-aux/config.guess: Update from upstream.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gendocs.sh: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/gendocs_template: Likewise.
+ * doc/standards.texi: Likewise.
+
+2009-04-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Sync autom4te perl modules from Automake.
+ * lib/Autom4te/Channels.pm: Sync from Automake.
+ * lib/Autom4te/FileUtils.pm: Likewise.
+ * lib/Autom4te/XFile.pm: Likewise.
+
+ Adjust channel definitions for new Automake `ordered' flag.
+ * lib/Autom4te/ChannelDefs.pm (Autom4te::ChannelDefs): Set
+ `ordered' flag to zero for channels `fatal', `automake', and
+ `verb'. This has currently no effect on actual semantics but
+ avoids a consistency check needed for Automake's usage of the
+ Channels.pm code.
+
+ manual: clarify m4_if synopsis.
+ * doc/autoconf.texi (Redefined M4 Macros): Rewrite synopsis of
+ m4_if in the presence of more than three arguments.
+
+ Improve and clarify `config.status' usage documentation.
+ * doc/autoconf.texi (config.status Invocation): Fix markup in
+ synopsis. Use `tag' instead of `file' notation for the
+ non-option arguments, to be consistent with the documentation
+ of the AC_CONFIG_* macros.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise,
+ use `tag' notation for non-option arguments.
+ Report by John Calcote.
+
+2009-04-15 Eric Blake <ebb9@byu.net>
+
+ Test that autotest handles binary output.
+ * tests/autotest.at (Binary output): New test.
+ Suggested by Ralf Wildenhues.
+
+ Add stdout-nolog and ignore-nolog to AT_CHECK.
+ * lib/autotest/general.m4 (AT_DIFF_STDERR(stderr-nolog))
+ (AT_DIFF_STDERR(ignore-nolog), AT_DIFF_STDOUT(stdout-nolog))
+ (AT_DIFF_STDOUT(ignore-nolog)): New macros.
+ * tests/autotest.at (Logging): New test.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Document the
+ new logging actions.
+ * NEWS: Likewise.
+ Reported by Ralf Wildenhues.
+
+ Teach AT_CHECK about hard failures.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_check_skip>
+ <at_fn_check_status, at_fn_group_postprocess>: Handle hard
+ failures.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Document
+ AT_CHECK_NOESCAPE and exit status 99.
+ * NEWS: Likewise.
+ * tests/autotest.at (Hard fail, Cleanup): New tests.
+
+2009-04-14 Eric Blake <ebb9@byu.net>
+
+ Fix yesterday's regression in AS_IF.
+ * lib/m4sugar/m4sh.m4 (_AS_IF_ELSE): Don't corrupt $? in else
+ branch; it is up to the user to avoid syntax errors.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Adjust test.
+
+2009-04-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add traces for AM_SILENT_RULES.
+ * lib/autom4te.in (Automake-preselections): Trace
+ AM_SILENT_RULES.
+
+2009-04-13 Eric Blake <ebb9@byu.net>
+
+ Improve documentation related to expanded-before-required.
+ * doc/autoconf.texi (Expanded Before Required): Add a case study.
+ (Running the Compiler) <AC_COMPILE_IFELSE>: Remind users that
+ running a compile test will AC_REQUIRE the compiler check.
+ (Macro Definitions) <AC_DEFUN>: Contrast AC_DEFUN and m4_define.
+ (C Compiler) <AC_PROG_CC>: Mention the fact that only first
+ invocation of this macro checks for $EXEEXT, and that many other
+ macros use it via AC_REQUIRE.
+ Reported by Andreas Schwab.
+
+ Mention latest rules about make and set -e.
+ * doc/autoconf.texi (Failure in Make Rules): Posix is now clear
+ that make must use set -e.
+ (Limitations of Builtins) <set>: Clarify more about set -e
+ behavior.
+
+ Improve documentation about if exit status.
+ * doc/autoconf.texi (Limitations of Builtins) <if>: Mention that
+ exit status bugs don't affect modern targets.
+ Reported by Andreas Schwab.
+
+ Add cross-reference to new macros.
+ * doc/autoconf.texi (Text processing Macros) <m4_normalize>
+ <m4_strip>: Reference the new m4_ifblank.
+ Suggested by Mike Frysinger.
+
+ Make AS_IF, AS_CASE, and AS_FOR more robust to blank arguments.
+ * lib/m4sugar/m4sh.m4 (_AS_CASE, _AS_CASE_DEFAULT, AS_FOR, _AS_IF)
+ (_AS_IF_ELSE, AS_IF): Avoid syntax error on blank argument,
+ including a macro with an empty expansion.
+ * NEWS: Mention this.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE, AS@&t@_FOR): Update
+ tests.
+ Reported by Mike Frysinger.
+
+ Add m4_blank and friends.
+ * lib/m4sugar/m4sugar.m4 (m4_blank, m4_nblank, m4_default_nblank)
+ (m4_default_nblank_quoted): New macros.
+ * NEWS: Document them.
+ * doc/autoconf.texi (Conditional constructs): Likewise.
+ * tests/m4sugar.at (m4sugar shorthand conditionals): New test.
+ Suggested by Mike Frysinger.
+
+2009-04-13 Eric Blake <ebb9@byu.net>
+
+ Finish upgrade to GFDL 1.3.
+ * doc/autoconf.texi (copying): Use correct license; comment change
+ was missed on 2008-11-04.
+
+2009-04-10 Eric Blake <ebb9@byu.net>
+
+ Test parallel handling of syntax error.
+ * tests/autotest.at (parallel syntax error): New test.
+ Suggested by Ralf Wildenhues.
+
+2009-04-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document awk and config.status line length limitations.
+ * doc/autoconf.texi (Configuration Actions): The input to
+ config.status should have reasonable line length.
+ (Limitations of Usual Tools): Document IRIX, HP-UX awk input
+ line length limit.
+ Report by Bruno Haible.
+
+ Skip `Multiple languages' test if CC is a C++ compiler.
+ * tests/compile.at (Multiple languages): Before starting the
+ test proper, build and run a configure script that tests the
+ C compiler only, and skips the test if this is found to be a
+ C++ compiler.
+ Report by Eric Blake.
+
+ Note that AC_DEFUN is needed for aclocal.
+ * doc/autoconf.texi (Coding Style): Public third-party macros
+ should be AC_DEFUN'ed.
+ Report by John Calcote.
+
+2009-04-10 Eric Blake <ebb9@byu.net>
+
+ Add undocumented _AS_CLEAN_DIR.
+ * lib/m4sugar/m4sh.m4 (_AS_CLEAN_DIR): New macro; fixes m4 quoting
+ in previous patch.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_group_prepare>: Use new
+ macro.
+ * tests/m4sh.at (_AS@&t@_CLEAN_DIR): New test.
+ Reported by Ralf Wildenhues.
+
+2009-04-09 Eric Blake <ebb9@byu.net>
+
+ Avoid problems caused by deleting in-use directory.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_group_prepare>: Only
+ remove the contents of $at_group_dir, not the directory itself.
+
+ Fix regression in empty test.
+ * lib/autotest/general.m4 (AT_SETUP): Prep AT_ingroup for fallback
+ use in empty test. Fixes regression introduced 2009-04-06.
+ (_AT_CHECK): Undo fallback when a test is not empty.
+ (AT_CLEANUP): Expand AT_ingroup before deleting.
+
+2009-04-09 Paolo Bonzini <bonzini@gnu.org>
+
+ Make a less conservative cross-compilation guess for AC_FUNC_UTIME_NULL.
+ * lib/autoconf/functions.m4 (AC_FUNC_UTIME_NULL): Assume
+ not crosscompiling to an obsolete system.
+
+2009-04-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Automake relies on the undocumented `_AC_COMPILER_EXEEXT' macro.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT): Document that
+ Automake relies on this macro.
+
+2009-04-06 Eric Blake <ebb9@byu.net>
+
+ Reduce testsuite size.
+ * tests/statesave.m4: New file.
+ * tests/Makefile.am (EXTRA_DIST): Distribute it.
+ * tests/local.at (AT_CONFIGURE_AC): Reuse file, rather than
+ repeating inline definition of AC_STATE_SAVE.
+ (AT_CHECK_ENV): Factor code...
+ (_AT_CHECK_ENV): ...into shell function.
+ * tests/m4sh.at (AT_DATA_LINENO): Avoid churn in testsuite.
+
+ Handle shell comments in AT_CHECK.
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): Handle # in
+ test correctly. Latent bug in handling shell comment was first
+ fixed 2008-11-20, but regressed two patches later.
+ * tests/autotest.at (Shell comment in command): New test.
+ * NEWS: Document the fix.
+
+ Hard fail any test with syntax errors.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_group_postprocess>:
+ Guarantee test failure on syntax error, rather than inheriting
+ status from previous test.
+ * tests/autotest.at (Syntax error): New test.
+
+2009-03-31 Eric Blake <ebb9@byu.net>
+
+ Beta Release Version 2.63b.
+ * NEWS: Mention the release.
+ * README: Clarify that this is a beta release.
+ * build-aux/texinfo.tex: Synchronize from upstream.
+ * .x-sc_trailing_blank: Exempt more upstream files.
+
+2009-03-30 Eric Blake <ebb9@byu.net>
+
+ Fix testsuite failures under zsh.
+ * tests/local.at (AT_CHECK_ENV): Exempt $argv and $ARGC, which are
+ set by zsh -c 'emulate sh'.
+ Reported by Ralf Wildenhues.
+
+ For now, skip parallel tests under less-tested shells.
+ * tests/autotest.at (AT_CHECK_AT): Add pre-test argument.
+ (Tested programs, Startup error messages, AT_CHECK_AT_TITLE)
+ (Fallacy, Skip, errexit, Long test source lines)
+ (Debugging a successful test, Debugging script and environment)
+ (Debugging a failed test, Using atlocal)
+ (Choosing where testsuite is run): Adjust callers.
+ (AT_SKIP_PARALLEL_TESTS): New macro, to skip parallel tests except
+ under zsh, bash, or when TEST_PARALLEL_AUTOTEST is defined. Makes
+ it easier to avoid testsuite hangs for users with dash or other
+ less-tested shell.
+ (parallel test execution, parallel truth, parallel fallacy)
+ (parallel skip, parallel errexit)
+ (parallel autotest and signal handling): Use it.
+ * BUGS: Mention this.
+
+2009-03-24 Andris Pavenis <andris.pavenis@iki.fi> (tiny change)
+
+ Fix awk substitution of carriage returns on DJGPP.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fix typo in
+ generation of ac_cs_awk_cr.
+ * THANKS: Update.
+
+2009-03-24 Aaron W. LaFramboise <aaronenvelope277@aaronwl.com> (tiny change)
+
+ Work around cygwin bash igncr mode.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fall back to
+ bash carriage returns if ac_cr lost \r from ``.
+ * THANKS: Update.
+ Suggested by Eric Blake.
+
+2009-03-24 Eric Blake <ebb9@byu.net>
+
+ Fix underquoted example in manual.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_TR_CPP>:
+ Properly m4-quote #.
+ * THANKS: Update spelling.
+ Reported by Matěj Týč.
+
+2009-03-18 Eric Blake <ebb9@byu.net>
+
+ Manual: mention more expr pitfalls.
+ * doc/autoconf.texi (Limitations of Usual Tools) <expr (:)>:
+ Mention HP-UX limitation, and $ ambiguity.
+ * THANKS: Update.
+ Reported by Jens Schmidt, in http://bugs.debian.org/466990.
+
+2009-03-17 Jim Meyering <meyering@redhat.com>
+
+ Manual: fix a typo.
+ * lib/m4sugar/m4sh.m4: s/are/is/ => "there is no indirection"
+
+2009-03-17 Eric Blake <ebb9@byu.net>
+
+ Use test consistently in examples.
+ * doc/autoconf.texi (Subdirectories, Caching Results)
+ (Common Shell Constructs, Prerequisite Macros, Coding Style)
+ (Changed Results, Particular Programs, Defining Symbols):
+ Protect against arbitrary user strings.
+ (Multiple Cases): Mention why $fstype does not need protection.
+ Reported by Reuben Thomas.
+
+ Improve confusing section names.
+ * doc/autoconf.texi (Specifying Names): Rename node...
+ (Specifying Target Triplets): ...to this.
+ (Generic Programs): Adjust references.
+ * doc/install.texi (System Type): Touch up formatting.
+ * THANKS: Update.
+ Reported by Tim Freeman, in http://bugs.debian.org/312873.
+
+ Remove historical inaccuracy.
+ * doc/autoconf.texi (Portable Shell): Don't perpetuate myth about
+ #!/bin/sh needing a space.
+ Reported by Reuben Thomas.
+
+ Recommend AS_HELP_STRING more prominently.
+ * doc/autoconf.texi (External Software): Reduce mention of
+ hand-written help strings.
+ Reported by Reuben Thomas.
+
+2009-03-16 Eric Blake <ebb9@byu.net>
+
+ Fix 'make pdf'.
+ * doc/autoconf.texi (Balancing Parentheses): Fix usage of
+ @itemize.
+ Reported by Ralf Wildenhues, fix suggested by Karl Berry.
+
+2009-03-14 Eric Blake <ebb9@byu.net>
+
+ Resync upstream files.
+ * GNUmakefile: Run 'make fetch'.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/gnu-oids.texi: Likewise.
+ * doc/standards.texi: Likewise.
+
+2009-03-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New test for SunStudio `restrict' handling.
+ * tests/c.at (AC_C_RESTRICT and C++): New test.
+ Prompted by bug report from Rolf Vandevaart.
+
+2009-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Manual: testsuite depends on package.m4.
+ * doc/autoconf.texi (Making testsuite Scripts): In the example
+ makefile snippet, $(TESTSUITE) depends on $(srcdir)/package.m4.
+
+2009-03-02 Allan Caffee <allan.caffee@gmail.com> (tiny change)
+
+ Fix a typo in comment for AS_LITERAL_IF.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Update a comment that fell
+ out of date when this function was moved/renamed in 59ecd766.
+ * THANKS: Update.
+
+2009-03-02 Eric Blake <ebb9@byu.net>
+
+ Improve wording for AS_ESCAPE.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_ESCAPE>: Touch
+ up documentation.
+ * lib/m4sugar/m4sh.m4 (_AS_ESCAPE): Fix comment typos.
+ Reported by Ralf Wildenhues.
+
+2009-02-24 Eric Blake <ebb9@byu.net>
+
+ Use pkgdatadir consistently.
+ * bin/Makefile.am (edit): Substitute pkgdatadir, not datadir.
+ * lib/Makefile.am (edit): Likewise.
+ * lib/autom4te.in (Autoconf-without-aclocal-m4, Autotest, M4sh)
+ (M4sugar): Use @pkgdatadir@, not @datadir@.
+ * bin/autoheader.in ($datadir): Likewise.
+ * bin/autom4te.in ($datadir): Likewise.
+ * bin/autoreconf.in ($datadir): Likewise.
+ * bin/autoscan.in ($datadir): Likewise.
+ * bin/autoupdate.in ($datadir): Likewise.
+ * bin/ifnames.in ($datadir): Likewise.
+ * doc/autoconf.texi (Installation Directory Variables): Update
+ example to be consistent; focus on $(bindir) as an autoconf
+ variable, and mention that $(pkgdatadir) comes from automake.
+ Reported by Reuben Thomas.
+
+2009-02-19 Eric Blake <ebb9@byu.net>
+
+ Use m4_translit more efficiently in AS_ESCAPE.
+ * lib/m4sugar/m4sh.m4 (_AS_ESCAPE): Alter API to take first byte
+ of set separately from rest.
+ (AS_ESCAPE, _AS_QUOTE_MODERN, AS_TR_SH, AS_VAR_GET): Adjust
+ callers.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM): Avoid duplicate
+ characters in translit request.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_ESCAPE>:
+ Document the macro.
+ * NEWS: Likewise.
+
+ Mention recently documented macros.
+ * NEWS: Update list of new documentation.
+
+2009-02-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add index for config.site.
+ * doc/autoconf.texi (Site Defaults): Add index for config.site.
+ * THANKS: Update.
+ Report by Stephen P. Schaefer.
+
+2009-02-12 Eric Blake <ebb9@byu.net>
+
+ Fix m4_set speed regression introduced 2008-12-18.
+ * lib/m4sugar/m4sugar.m4 (_m4_stack_reverse): Alter API to avoid
+ creating larger argument on each iteration.
+ (m4_stack_foreach_sep, m4_stack_foreach_sep_lifo)
+ (_m4_set_contents_2): Adjust all four-argument callers.
+
+2009-02-05 Eric Blake <ebb9@byu.net>
+
+ Mention new AC_DEFUN_ONCE clients.
+ * NEWS: Mention recent semantic changes.
+ Reported by Ralf Wildenhues.
+
+2009-02-03 Eric Blake <ebb9@byu.net>
+
+ Use AC_DEFUN_ONCE for some one-shot AC_PROG macros.
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Switch to
+ AC_DEFUN_ONCE, since this is a one-shot macro.
+ (AC_PROG_INSTALL): Likewise.
+
+2009-02-03 Eric Blake <ebb9@byu.net>
+
+ Mention that packagers should not pre-set CFLAGS.
+ * doc/autoconf.texi (Preset Output Variables) <CFLAGS>: Copy
+ advice given by automake on handling variables reserved by GNU
+ Coding Standards.
+ Reported by Karl Berry.
+
+ Document lib64 in config.site.
+ * doc/autoconf.texi (Site Defaults): Fix typo in FHS sample file.
+ Mention use of lib64.
+ * THANKS: Update.
+ Reported by Tom Browder, with help from Peter Breitenlohner.
+
+2009-01-28 Eric Blake <ebb9@byu.net>
+
+ Use AC_DEFUN_ONCE for uncontroversial one-shot macros.
+ * lib/autoconf/headers.m4 (AC_HEADER_ASSERT): Switch to
+ AC_DEFUN_ONCE, since this is a one-shot macro.
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Likewise.
+ * lib/autoconf/general.m4 (AC_CANONICAL_BUILD)
+ (AC_CANONICAL_HOST, AC_CANONICAL_TARGET): Likewise.
+
+2009-01-28 Eric Blake <ebb9@byu.net>
+
+ Reduce blank lines in AC_DEFUN_ONCE macros.
+ * lib/m4sugar/m4sugar.m4 (m4_defun_once): Avoid redundant blank
+ line when a defun_once macro is required.
+ (_m4_defun_once): New helper macro, for less memory use.
+ * tests/m4sugar.at (m4@&t@_require: nested): Adjust test.
+
+ Silence another false positive expand-before-require.
+ * lib/m4sugar/m4sugar.m4 (_m4_defun_pro_outer)
+ (_m4_defun_epi_outer, _m4_require_call, m4_provide): Track name
+ that caused a diversion change, not just diversion number.
+ (m4_require): Factor...
+ (_m4_require_check): ...into new macro, which also checks whether
+ diversion that performed the expansion has been collected.
+ * tests/m4sugar.at (m4@&t@_require: nested): Enhance test.
+ Reported by Ralf Wildenhues.
+
+2009-01-28 Eric Blake <ebb9@byu.net>
+
+ Fix AC_C_RESTRICT for Sun Studio 12 C++.
+ * lib/autoconf/c.m4 (AC_C_RESTRICT): Newer Sun Studio C provides
+ __restrict__ rather than _Restrict, which still trips up Sun
+ Studio 12 C++.
+ * THANKS: Update.
+ Reported by Rolf Vandevaart.
+
+2009-01-28 Eric Blake <ebb9@byu.net>
+
+ Fix years in copyright notices.
+ * lib/m4sugar/m4sugar.m4 (m4_copyright_condense): New macro,
+ undocumented for now.
+ * lib/m4sugar/Makefile.am (version.m4): Add m4_PACKAGE_YEAR,
+ m4_PACKAGE_URL.
+ (RELEASE_YEAR): New macro, copied from bin/Makefile.am.
+ * lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): New macro.
+ (AC_COPYRIGHT): Add undocumented third parameter.
+ (_AC_INIT_COPYRIGHT): Avoid need to bump copyright years.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Likewise.
+ (AT_COPYRIGHT): Add undocumented third parameter.
+ * tests/local.at (AT_COPYRIGHT): Don't add an extra copyright
+ parameter; the generic copyright given by autotest is sufficient
+ since we are the package that owns autotest.
+
+2009-01-27 Eric Blake <ebb9@byu.net>
+
+ Use URLs in --help output, part 3: testsuite.
+ * doc/autoconf.texi (Writing Testsuites): Mention autotest
+ namespace.
+ (Writing Testsuites) <AT_INIT>: Mention mandatory macros.
+ (Making testsuite Scripts): Document AT_PACKAGE_URL.
+ * tests/Makefile.am (package.m4): Follow our own advice.
+ * lib/autotest/general.m4 (AT_INIT): Give the user a hint about
+ package.m4. Enhance --help output.
+ (_AT_COPYRIGHT_YEARS): New macro, to make copyright bump easier.
+
+ Use URLs in --help output, part 2: configure.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Bump copyright
+ date.
+ (_AC_INIT_PACKAGE): Support optional URL parameter, mapped to
+ AC_PACKAGE_URL.
+ (_AC_INIT_DEFAULTS, _AC_INIT_PREPARE): Substitute it.
+ (_AC_INIT_HELP): Use it in './configure --help' output.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise, for
+ './config.status --help'. Bump copyright date.
+ * doc/autoconf.texi (Initializing configure) <AC_INIT>: Document
+ new parameter.
+ * NEWS: Likewise.
+ * tests/tools.at (autoheader): Adjust test.
+ * tests/torture.at (@%:@define header templates)
+ (Torturing config.status): Likewise.
+
+ Use URLs in --help output, part 1: autoconf executables.
+ * bin/autoconf.as (usage): Make output consistent with recent
+ change in gnulib version-etc module.
+ * bin/autoheader.in ($help): Likewise.
+ * bin/autom4te.in ($help): Likewise.
+ * bin/autoreconf.in ($help): Likewise.
+ * bin/autoscan.in ($help): Likewise.
+ * bin/autoupdate.in ($help): Likewise.
+ * bin/ifnames.in ($help): Likewise.
+
+2009-01-27 Peter Breitenlohner <peb@mppmu.mpg.de> (tiny change)
+
+ Quote traced macros passed from autom4te to M4.
+ * bin/autom4te (handle_m4): Apply shell_quote to macro names.
+ * tests/tools.at (autom4te --trace and unusual macro names): New
+ test.
+ * THANKS: Update.
+
+2009-01-26 Eric Blake <ebb9@byu.net>
+
+ Improve AC_DEFUN_ONCE semantics.
+ * lib/m4sugar/m4sugar.m4 (m4_defun_once): Rewrite to be no-op,
+ rather than warning, on second use, and make sure first use never
+ occurs out of order.
+ * tests/m4sugar.at (m4@&t@_require: one-shot initialization):
+ Enhance test.
+ * tests/base.at (AC_REQUIRE & AC_DEFUN_ONCE: [Require, expand],
+ (AC_REQUIRE & AC_DEFUN_ONCE: [Expand, require]): Adjust tests.
+ * NEWS: Document this.
+ * doc/autoconf.texi (Macro Definitions) <AC_DEFUN>: Mention
+ AC_DEFUN_ONCE.
+ (Prerequisite Macros) <AC_REQUIRE>: Likewise.
+ (Expanded Before Required): Likewise.
+ (One-Shot Macros) <AC_DEFUN_ONCE>: Document new semantics.
+ Reported by Bruno Haible, with suggestion by Paolo Bonzini.
+
+2009-01-24 Eric Blake <ebb9@byu.net>
+
+ Fix typos in recent patches.
+ * lib/m4sugar/m4sugar.m4: Improve m4_defun comments.
+ * doc/autoconf.texi (Expanded Before Required): Fix typos.
+ Reported by Ralf Wildenhues.
+
+ Revert change to AC_DIR_HEADER.
+ * lib/autoconf/headers.m4 (AC_DIR_HEADER): Explicitly expanding
+ AC_HEADER_DIRENT no longer triggers a warning, and helps the user
+ who decides they don't need the obsolete AC_FUNC_CLOSEDIR_VOID.
+ Reported by Paolo Bonzini.
+
+2009-01-22 Eric Blake <ebb9@byu.net>
+
+ Silence a false positive expand-before-require case.
+ * lib/m4sugar/m4sugar.m4 (m4_provide): Track the diversion in
+ which a macro was provided.
+ (m4_require): Compare diversion numbers, rather than m4_require
+ nesting, when determining direct requires.
+ * tests/m4sugar.at (m4@&t@_require: nested): Test it.
+ Reported by Ralf Wildenhues, affecting Libtool.
+
+2009-01-21 Eric Blake <ebb9@byu.net>
+
+ Fix out-of-order expansion with expand-before-require.
+ * lib/m4sugar/m4sugar.m4 (m4_require): Redundantly expand a
+ required macro when issuing expand-before-require warning.
+ * doc/autoconf.texi (Prerequisite Macros): Adjust documentation.
+ (Expanded Before Required): New node.
+ * tests/m4sugar.at (m4@&t@_require: nested): Adjust test.
+ * NEWS: Mention this fix.
+ Suggested by Bruno Haible.
+
+ Warn if macro is provided before indirectly required.
+ * lib/m4sugar/m4sugar.m4 (m4_provide): Track the set of all macros
+ provided since last outermost defun.
+ (_m4_defun_pro_outer): Empty the set.
+ (_m4_require_call): Distinguish between direct and indirect
+ requires, and remove required macros from the set.
+ (m4_require): Check the set, in order to warn.
+ * tests/m4sugar.at (m4@&t@_require: nested): Remove xfail, and add
+ test case for direct requires.
+
+2009-01-20 Eric Blake <ebb9@byu.net>
+
+ Clean up some bugs caught by preliminary dependency validation.
+ * lib/autoconf/headers.m4 (AC_DIR_HEADER): Don't invoke
+ AC_HEADER_DIRENT, since AC_FUNC_CLOSEDIR_VOID requires it.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL)
+ (_AS_SHELL_SANITIZE): Fix quoting bugs.
+
+2009-01-19 Eric Blake <ebb9@byu.net>
+
+ Improve AC_REQUIRE documentation.
+ * doc/autoconf.texi (Macro Definitions) <AC_DEFUN>: Add @defmac,
+ and mention interaction with AC_REQUIRE.
+ (Prerequisite Macros) <AC_REQUIRE>: Give more detail on user
+ ordering constraint bug, and how to fix it.
+ * tests/m4sugar.at (m4@&t@_require: nested): New test.
+
+ Speed up m4_require.
+ * lib/m4sugar/m4sugar.m4 (_m4_divert_dump): Change semantics to
+ always be defined, as either empty or a number.
+ (_m4_defun_pro_outer, _m4_defun_epi_outer): Treat _m4_divert_dump
+ as a stack, rather than a one-shot macro.
+ (_m4_require_call): Expect third argument to be pre-expanded.
+ (m4_divert_require, m4_require): Adjust clients accordingly.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Likewise.
+
+2009-01-17 Eric Blake <ebb9@byu.net>
+
+ Avoid underfull hbox.
+ * doc/autoconf.texi (Installation Directory Variables): Reword to
+ fit on line.
+
+2009-01-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ignore `set -e'-related failure of NetBSD sh.
+ * tests/m4sh.at (AS@&t@_EXIT): Skip test if (NetBSD) shell
+ fails to finish EXIT trap after set -e.
+
+2009-01-06 Eric Blake <ebb9@byu.net>
+
+ Maintainer cleanups.
+ * cfg.mk (web-manual): Use new feature of gendocs.
+ (fetch): Fetch gendocs.
+ * Makefile.am (EXTRA_DIST): Distribute new file.
+ * doc/Makefile.am (EXTRA_DIST): Likewise.
+ * .gitattributes: Ignore whitespace in upstream files.
+ * HACKING (Other web updates): Update Free Software Directory
+ instructions.
+ (Upload): No longer mention xdelta.
+ * maint.mk (xd-delta): Likewise.
+ * build-aux/gendocs.sh: New upstream file.
+ * doc/gendocs_template: Likewise.
+ * build-aux/announce-gen: Resync from upstream.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/gnupload: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+
+2008-12-30 Eric Blake <ebb9@byu.net>
+
+ Make it easier to track diversion bugs.
+ * lib/m4sugar/m4sugar.m4 (_m4_divert_raw, _m4_undivert): New
+ internal macros, which are easier to trace than m4_builtin.
+ (m4_cleardivert, m4_divert, m4_divert_push, m4_divert_pop)
+ (m4_undivert): Use them.
+ (_m4_require_call): Likewise. Use fewer macros.
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): Fix typo.
+
+2008-12-26 Bruno Haible <bruno@clisp.org>
+
+ Improve multiarch detection.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Make detection of options
+ indicating a universal build more reliable.
+
+2008-12-28 William Pursell <bill.pursell@gmail.com> (tiny change)
+
+ Use AS_CASE in documented example.
+ * doc/autoconf.texi (Using the System Type): Use AS_CASE in
+ example instead of raw case.
+
+2008-12-23 Eric Blake <ebb9@byu.net>
+
+ Make m4_dumpdef more useful with M4 1.6.
+ * lib/m4sugar/m4sugar.m4 (_m4_dumpdef): New macro.
+ (m4_init): Install it for new enough m4.
+ * tests/m4sugar.at (m4@&t@_dumpdef): Enhance test.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_dumpdef>: Mention
+ lack of sorting.
+
+2008-12-24 Bruno Haible <bruno@clisp.org>
+
+ Improve INSTALL for HP-UX.
+ * doc/install.texi (Particular Systems): For HP-UX, also recommend
+ -D_XOPEN_SOURCE=500. Needed for the declaration of mbstate_t on
+ HP-UX 11.11.
+
+2008-12-22 Bruno Haible <bruno@clisp.org>
+
+ Improve INSTALL for Haiku.
+ * doc/install.texi (Particular Systems): Add a recommendation
+ which prefix to use on Haiku.
+
+2008-12-19 Eric Blake <ebb9@byu.net>
+
+ Fix typo in previous commit.
+ * doc/autoconf.texi (Set manipulation Macros) <m4_set_map_sep>:
+ Fix typo.
+
+ Document some recently added macros.
+ * lib/m4sugar/m4sugar.m4 (m4_map_args_w): Add optional sep
+ parameter.
+ * doc/autoconf.texi (Looping constructs) <m4_map_args_sep>
+ <m4_map_args_w, m4_stack_foreach, m4_stack_foreach_sep>: Document
+ new macros.
+ (Set manipulation Macros) <m4_set_map_sep>: Likewise.
+ * tests/m4sugar.at (m4@&t@_stack, M4 loops): Enhance tests.
+ * NEWS: Document new macros.
+
+2008-12-18 Eric Blake <ebb9@byu.net>
+
+ Fix separator in m4_stack_foreach_sep.
+ * lib/m4sugar/m4sugar.m4 (_m4_stack_reverse): Separate separator
+ from prefix.
+ * tests/m4sugar.at (m4@&t@_stack): Enhance test.
+
+2008-12-18 Eric Blake <ebb9@byu.net>
+
+ Mention limitation of M4 1.4.x on builtin tokens.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_dumpdef>: Document
+ ramification of M4 1.4.x's inability to pass builtin tokens
+ through text macros.
+ (Evaluation Macros) <m4_curry>: Likewise.
+ * tests/m4sugar.at (m4@&t@_defn): Enhance test.
+ * NEWS: Mention subtle change in m4_dumpdef semantics.
+
+ Document m4_version_prereq.
+ * doc/autoconf.texi (Number processing Macros)
+ <m4_version_prereq>: Add documentation.
+ * NEWS: Mention it.
+ Reported by Bruno Haible.
+
+2008-12-10 Jim Meyering <meyering@redhat.com>
+
+ AC_HEADER_ASSERT: don't say assertions are disabled when they're not
+ * lib/autoconf/headers.m4 (AC_HEADER_ASSERT): Do not make configure
+ report "checking whether to enable assertions... no", when they are
+ in fact enabled. This is solely a bug in the output of configure.
+ In spite of saying "no", NDEBUG was not defined in that case.
+ Also, as noted by Eric Blake, leave assertions enabled upon
+ --enable-assert=INVALID.
+
+2008-12-09 Eric Blake <ebb9@byu.net>
+
+ Fix m4_location inside m4_wrap with m4 1.4.5.
+ * lib/m4sugar/m4sugar.m4 (m4_undefine): Redefine m4_location
+ inside wrapped text if older m4 is detected.
+ Reported by William Pursell.
+
+2008-12-08 William Pursell <bill.pursell@gmail.com> (tiny change)
+ and Eric Blake <ebb9@byu.net>
+
+ Fix AC_HEADER_ASSERT w.r.t. --enable-assert.
+ * lib/autoconf/headers.m4 (AC_HEADER_ASSERT): Honor --enable-assert,
+ rather than treating it as a synonym for --disable-assert.
+ * NEWS: Document the fix.
+
+2008-12-06 William Pursell <bill.pursell@gmail.com> (tiny change)
+
+ Fix AC_HEADER_ASSERT to honor --enable-assert, rather than
+ treat --enable-assert and --disable-assert equivalently.
+ * lib/autoconf/headers.m4 (AC_HEADER_ASSERT): Check value of $enableval.
+
+2008-12-05 William Pursell <bill.pursell@gmail.com> (tiny change)
+
+ Fix some typos and grammatical errors in documentation.
+ * doc/autoconf.texi: Clean up some bad use of English.
+
+2008-12-03 Eric Blake <ebb9@byu.net>
+
+ Improve AC_STATE_SAVE.
+ * tests/local.at (AC_STATE_SAVE): Avoid ls -1, and use one less
+ process by hoisting the uniqueness check into sed.
+ * doc/autoconf.texi (Limitations of Usual Tools) <ls>: Mention
+ MacOS bug.
+
+2008-12-02 Eric Blake <ebb9@byu.net>
+
+ Avoid MacOS readdir bug in testsuite.
+ * tests/local.at (AC_STATE_SAVE): Avoid spurious failures due to
+ duplicated ls entries.
+ * THANKS: Update.
+ Reported by Bruce Dugan and others.
+
+2008-11-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_JOB_FIFO_FD): Hide zsh 4.3.4
+ error messages about `set -m'.
+
+2008-11-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix a couple of test failures with dash.
+ * tests/autotest.at (AT_CHECK_AT_TITLE_CHAR): Normalize
+ exit status of `cd'.
+ * tests/m4sh.at (AS_MESSAGE_LOG_FD): Remove script before
+ regeneration, to avoid timing effects.
+
+2008-11-25 Eric Blake <ebb9@byu.net>
+
+ Add m4_cleardivert.
+ * lib/m4sugar/m4sugar.m4 (m4_cleardivert): New macro.
+ * lib/autotest/general.m4 (AT_INIT): Use it.
+ * lib/autoconf/general.m4 (_AC_INIT_NOTICE): Likewise.
+ * tests/m4sugar.at (m4@&t@_divert_stack): Test it.
+ * doc/autoconf.texi (Diversion support) <m4_cleardivert>: Document
+ it.
+ * NEWS: Likewise.
+ Suggested by Paolo Bonzini.
+
+ Add safety check for m4_expand vs. diversions.
+ * lib/m4sugar/m4sugar.m4 (m4_expand): Make more robust against
+ diverted text.
+ * doc/autoconf.texi (Evaluation Macros) <m4_expand>: Document new
+ safety check.
+
+2008-11-24 Eric Blake <ebb9@byu.net>
+
+ Fix typo in AS_MESSAGE_LOG_FD patch.
+ * lib/m4sugar/m4sh.m4 (AS_ERROR): Check correct condition.
+
+2008-11-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ More reliable signal handling in Autotest.
+ * lib/autotest/general.m4 (Driver loop): Rewrite signal handler.
+ Start parallel jobs in their own process group, enabling job
+ control in the shell if possible, for better signal handling.
+ Deal with INT, TERM, and HUP in the testsuite driver. In the
+ parallel driver, propagate TSTP to jobs either as TSTP or as
+ STOP (to avoid fork bombs with ksh).
+ Inside the job processes, add PIPE handler to write back the
+ job token, so the master process does not hang.
+ Disable the parallel driver if job control is not provided or if
+ trap does not understand signal names.
+ * tests/autotest.at (parallel autotest and signals): New test,
+ exercises INT, TERM, and PIPE, serial and parallel, with and
+ without `make' in the loop.
+ Kudos to Richard Stevens for writing APUE.
+
+2008-11-22 Eric Blake <ebb9@byu.net>
+
+ Fix testsuite failure on Solaris.
+ * tests/torture.at (AT_CHECK_CONFIG_CREATION_NOWRITE): Normalize
+ failure status to 1.
+
+2008-11-21 Eric Blake <ebb9@byu.net>
+
+ Clean up AS_MESSAGE_LOG_FD usage.
+ * lib/m4sugar/m4sh.m4 (AS_MESSAGE_FD, AS_MESSAGE_LOG_FD)
+ (AS_ORIGINAL_STDIN_FD): Provide default M4sh values.
+ (_AS_ECHO_LOG, AS_MESSAGE, _AS_ERROR_PREPARE, AS_ERROR): Simplify
+ usage.
+ (AS_INIT_GENERATED): Don't shuffle an unchanged AS_MESSAGE_FD.
+ * tests/m4sh.at (AS@&t@_INIT_GENERATED): Update test.
+ (AS@&t@_MESSAGE_FD): New test.
+ * doc/autoconf.texi (Initialization Macros) <AS_INIT_GENERATED>:
+ Give more details about fd manipulation.
+ (File Descriptor Macros): Describe M4sh defaults for the fds.
+
+2008-11-21 Eric Blake <ebb9@byu.net>
+
+ Use shell function for AS_ERROR.
+ * lib/m4sugar/m4sh.m4 (_AS_ERROR_PREPARE): New macro, defining a
+ new shell function.
+ (AS_ERROR): Use it.
+ (_AS_LINENO_PREPARE): Break circular dependency.
+ (AS_PREPARE, _AS_PREPARE): Initialize for child scripts.
+
+2008-11-21 Eric Blake <ebb9@byu.net>
+
+ Fix typos in recent testsuite improvements.
+ * lib/autotest/general.m4 (AT_INIT) <at_fn_check_prepare_dynamic>:
+ Fix typo.
+ * NEWS: Clarify the potential impact to users.
+ * tests/autotest.at (AT_DATA_AUTOTEST): New macro, patterned after
+ AT_DATA_M4SUGAR.
+ (AT_CHECK_AT_PREP, AT_CHECK_AT_TITLE): Use it.
+ (unusual file names): Test that the recent echo fix does not
+ regress. Fix quoting bug that made the test a no-op.
+ Reported by Paolo Bonzini and Ralf Wildenhues.
+
+2008-11-21 Eric Blake <ebb9@byu.net>
+
+ Use modern m4sh constructs in autoconf.
+ * bin/autoconf.as (exit_missing_arg, getopt): Use AS_ERROR, rather
+ than AS_EXIT.
+
+ Change the semantics of AS_EXIT without argument.
+ * lib/m4sugar/m4sh.m4 (_AS_EXIT_PREPARE): When defaulting, use $?
+ even if it is 0.
+ (AS_ERROR): Guarantee non-zero status.
+ * bin/autoconf.as (exit_missing_arg, getopt): Revert prior change;
+ we want non-zero status.
+ * tests/m4sh.at (AS@&t@_EXIT): Update test accordingly.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_EXIT>: Update
+ the documentation.
+ <AS_SET_STATUS>: Don't overly restrict implementation.
+ (Printing Messages) <AC_MSG_ERROR>: Describe better default.
+ Suggestions by Paolo Bonzini and Ralf Wildenhues.
+
+2008-11-21 Eric Blake <ebb9@byu.net>
+
+ Add @anchors within Builtins and Usual Tools lists.
+ * doc/autoconf.texi (Limitations of Builtins)
+ (Limitatations of Usual Tools): Add anchors for tools called out
+ by name. Adjust callers to narrow in on tool of interest.
+
+ Move case statement style discussion to m4 quoting section.
+ * doc/autoconf.texi (Limitations of Builtins): Move comparison of
+ quoting styles...
+ (Balancing Parentheses): ...to this new node.
+ Suggested by Ralf Wildenhues.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Factor more common code out of AT_CHECK into shell function.
+ * lib/autotest/general.m4 (_AT_CHECK): Avoid echo bug if AT_LINE
+ starts with -. Move preparations...
+ (AT_INIT) <at_fn_check_prepare_trace>
+ <at_fn_check_prepare_notrace, at_fn_check_prepare_dynamic>:
+ ...into these new shell functions.
+ <at_fn_check_newline>: Inline into only caller.
+ (_AT_DECIDE_TRACEABLE): Use them to condense testsuite size.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Handle version numbers as decimal, even if they start with 0.
+ * lib/m4sugar/m4sugar.m4 (_m4_version_unletter): Avoid
+ interpreting leading zeros as octal.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Speed up AT_CHECK.
+ * lib/autotest/general.m4 (AT_CHECK, AT_CHECK_UNQUOTED): Expand
+ third and fourth arguments once.
+ (_AT_CHECK): Don't re-expand expected output. Rearrange code for
+ fewer scans of arguments.
+ (AT_CHECK): Update caller.
+ (AT_INIT) <at_fn_filter_trace>: Drop parameter.
+ * tests/m4sugar.at (m4@&t@_split): Protect test with
+ quadrigraphs.
+
+ Fix XFAIL related to AT_CHECK.
+ * lib/autotest/general.m4 (AT_CHECK, AT_CHECK_UNQUOTED): Expand
+ first argument once.
+ (_AT_CHECK): Don't re-expand commands.
+ * tests/autotest.at (Multiline command from M4 expansion): Remove
+ XFAIL.
+ * tests/tools.at (autoupdating AU_ALIAS): Quote unbalanced paren.
+ * NEWS: Document the fallout.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Reduce forks in AC_DEFINE.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q_PRINT): New macro.
+ (_AC_DEFINE_Q): Use it to avoid forks for all AC_DEFINE and most
+ AC_DEFINE_UNQUOTED.
+ * lib/autoconf/fortran.m4 (_AC_FC_WRAPPERS): Properly quote #.
+ * tests/torture.at (Substitute and define special characters):
+ (Define to a 2000-byte string): Enhance tests to cover
+ AC_DEFINE_UNQUOTED.
+ (@%:@define header templates): Enhance test to cover #.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Improve m4_expand robustness, part 2.
+ * lib/m4sugar/m4sugar.m4 (m4_expand): Support unterminated
+ comments, by wrapping old implementation...
+ (_m4_expand): ...as this, and renaming old core...
+ (_m4_expand_): ...to this.
+ (m4_text_box): Use lighter-weight _m4_expand.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_EXPAND)
+ (_AS_DETECT_BETTER_SHELL, AS_FUNCTION_DESCRIBE): Likewise.
+ * lib/autotest/general.m4 (AT_KEYWORDS): Likewise.
+ * tests/m4sugar.at (m4@&t@_expand): Enhance test.
+ * tests/autotest.at (AT_CHECK_AT_TITLE_CHAR): Likewise.
+ * doc/autoconf.texi (Evaluation Macros) <m4_expand>: Mention new
+ functionality.
+
+ Improve m4_expand robustness, part 1.
+ * lib/m4sugar/m4sugar.m4 (_m4_expand): Tolerate unquoted
+ unbalanced `)'.
+ * tests/m4sugar.at (m4@&t@_expand): New test.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Add m4_chomp, m4_esyscmd_s.
+ * lib/m4sugar/m4sugar.m4 (m4_esyscmd_e, m4_chomp, m4_chomp_all):
+ New macros.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_esyscmd_s>: Document
+ them.
+ (Text processing Macros) <m4_chomp>: Likewise.
+ * NEWS: Likewise.
+ * tests/m4sugar.at (m4@&t@_esyscmd_s): New test.
+
+ Remove _m4_index.
+ * lib/m4sugar/m4sugar.m4 (_m4_index): Delete; it is more efficient
+ to make callers guarantee a match.
+ (m4_init): Adjust caller.
+ * lib/autoconf/status.m4 (_AC_CONFIG_COMPUTE_DEST): Likewise.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Likewise.
+
+ Describe different hacks for balancing ')' in case statements.
+ * doc/autoconf.texi (Limitations of Builtins) <case>: Add an
+ exposition on various quoting styles.
+
+2008-11-20 Eric Blake <ebb9@byu.net>
+
+ Speed up _AS_QUOTE.
+ * lib/m4sugar/m4sh.m4 (_AS_QUOTE_IFELSE): Inline into...
+ (_AS_QUOTE): ...here, delete unused second parameter, and factor
+ choice into...
+ (_AS_QUOTE_MODERN, _AS_QUOTE_OLD): ...new helpers.
+
+2008-11-20 Alfred G. de Wijn <dwijn@iluvatar.eu.org> (tiny change)
+
+ For consistency, make temporary variable match language name.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_G, _AC_PROG_FC_V_OUTPUT):
+ Match the save/test variables' names to the FFLAGS/FCFLAGS being
+ saved.
+ * THANKS: Update.
+
+2008-11-19 Eric Blake <ebb9@byu.net>
+
+ Improve testsuite generation.
+ * tests/local.at (AT_DATA_M4SUGAR, AT_DATA_M4SH)
+ (AT_DATA_AUTOCONF): Escape all quadrigraphs, not just @&t@. Use
+ fewer macros.
+
+2008-11-18 Eric Blake <ebb9@byu.net>
+
+ Use fn for shell functions, func for autoconf CHECK_FUNCS.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNC): Abbreviate shell
+ function names.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE)
+ (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE, _AC_RUN_IFELSE)
+ (AC_CHECK_DECL, AC_COMPUTE_INT): Likewise.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL)
+ (_AC_CHECK_HEADER_COMPILE, _AC_CHECK_HEADER_PREPROC): Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW, _AC_TYPE_INT)
+ (_AC_TYPE_UNSIGNED_INT, AC_CHECK_MEMBER): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_WORK, _AS_EXIT_PREPARE)
+ (AS_EXIT, AS_SET_STATUS, _AS_UNSET_PREPARE, _AS_MKDIR_P)
+ (_AS_MKDIR_P_PREPARE, _AS_VAR_APPEND_PREPARE, AS_VAR_APPEND)
+ (_AS_VAR_ARITH_PREPARE, AS_VAR_ARITH): Likewise.
+ * doc/autoconf.texi (Shell Functions): Likewise.
+
+2008-11-18 Eric Blake <ebb9@byu.net>
+
+ Alter default value of AS_EXIT.
+ * lib/m4sugar/m4sh.m4 (_AS_EXIT_PREPARE): Let as_func_exit
+ parameter be optional.
+ (AS_EXIT): Use it to make better default.
+ (_AS_DETECT_BETTER_SHELL): Use new default.
+ * bin/autoconf.as (exit_missing_arg, getopt): Likewise.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Likewise.
+ * tests/m4sh.at (AS@&t@_EXIT): Update test.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_EXIT>: Mention
+ new default behavior.
+ (Limitations of Builtins) <trap>: Adjust to use new default.
+ * NEWS: Mention the semantic change.
+ Suggested by Ralf Wildenhues.
+
+ Update example to match actual Tru64 behavior.
+ * doc/autoconf.texi (Limitations of Builtins) <trap>: Correct
+ the example.
+ Reported by Ralf Wildenhues.
+
+ Add AS_SET_STATUS, make AS_EXIT more efficient.
+ * lib/m4sugar/m4sh.m4 (_AS_EXIT_PREPARE, AS_SET_STATUS): New
+ macros.
+ (AS_EXIT): Rewrite to avoid forks.
+ (_AS_SHELL_SANITIZE): Avoid AS_EXIT prior to shell functions.
+ (AS_PREPARE, _AS_PREPARE): Add new preparation.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_SET_STATUS>:
+ Document.
+ * NEWS: Mention new macro.
+ * tests/m4sh.at (AS@&t@_EXIT): New test.
+ (BASENAME_TEST): Sort.
+
+ Document Tru64 bug with 'set -e'.
+ * doc/autoconf.texi (Limitations of Builtins) <trap>: Mention a
+ bug in mixing 'set -e' with 'trap .. 0'.
+ Reported by Ralf Wildenhues.
+
+ Document a Solaris /bin/sh bug with 'set -e'.
+ * doc/autoconf.texi (Shell Functions): Mention the bug.
+
+2008-11-17 Eric Blake <ebb9@byu.net>
+
+ Detect empty list in AS_FOR.
+ * lib/m4sugar/m4sh.m4 (AS_FOR): Handle iteration over $@
+ properly.
+ * tests/m4sh.at (AS@&t@_FOR): Enhance test to catch it.
+ Reported by Paolo Bonzini.
+
+2008-11-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Use a different workaround for an automake quirk.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+ (distclean_generic): New helper variable, to fool automake.
+ ($(distclean_generic)): Depend on clean-local, to prevent
+ the race in the two rules with accessing and removing
+ $(TESTSUITE).
+ Report by Eric Blake.
+
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_ARITH_PREPARE): Simplify, avoid
+ unbalanced parentheses from last change.
+ Spotted by Eric Blake, fix suggested by Paolo Bonzini.
+
+ Fix exit status of expr version of as_func_arith.
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_ARITH_PREPARE): Count an exit
+ status of 1 of expr also as success, to avoid failure if the
+ computation result is zero. Fixes test failures with IRIX sh,
+ where the expr variant of as_func_arith is used.
+
+ Do not use read-only variable $status.
+ * tests/compile.at (AC_RUN_IFELSE): Use $estatus instead of
+ $status, for zsh.
+
+2008-11-15 Eric Blake <ebb9@byu.net>
+
+ Use the new AS_FOR function.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNCS): Use new
+ abstraction for cleaner code.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADERS): Likewise.
+
+ Add AS_FOR, undocumented for now.
+ * lib/m4sugar/m4sh.m4 (AS_FOR): New macro.
+ * tests/m4sh.at (AS@&t@_FOR): New test.
+ Suggested by Paolo Bonzini.
+
+2008-11-13 Eric Blake <ebb9@byu.net>
+
+ Optimize single-argument loop.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNCS): Avoid forks when
+ loop only has one argument.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADERS): Likewise.
+
+2008-11-13 Eric Blake <ebb9@byu.net>
+
+ Fix AS_ESCAPE usage bugs.
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_APPEND_PREPARE)
+ (_AS_VAR_ARITH_PREPARE): Expand macros prior to adding shell
+ escapes.
+ (AS_TR_SH, AS_VAR_GET): Use _AS_ESCAPE for speed.
+ * doc/autoconf.texi (Polymorphic Variables) <AS_VAR_SET>: Document
+ caveat due to conditional AS_ESCAPE.
+ * tests/m4sh.at (AS@&t@_VAR basics): Enhance test.
+
+2008-11-12 Eric Blake <ebb9@byu.net>
+
+ Whitespace reduction in configure.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM): Avoid empty lines.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE, AC_CHECK_FILES):
+ Likewise.
+ (_AC_DEFINE_Q): Restore empty line, since some clients in the wild
+ depend on it.
+
+2008-11-12 Eric Blake <ebb9@byu.net>
+
+ Make M4sh, not autoconf, guarantee sane $SHELL.
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Move setting of
+ SHELL...
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): ...to here.
+ * doc/autoconf.texi (Initialization Macros): Document the effect
+ on SHELL.
+ * tests/m4sh.at (AS@&t@_INIT_GENERATED): New test.
+ Reported by Ralf Wildenhues.
+
+2008-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Wrap keywords in `testsuite --list' output.
+ * lib/autotest/general.m4 (AT_INIT): Rewrite --list awk script,
+ avoid lint warnings from gawk, wrap keyword lists to stay below
+ 80 characters per line if possible.
+ * tests/autotest.at (Keyword wrapping): New test.
+
+ * tests/local.at (AT_COPYRIGHT): Bump copyright years.
+
+ * doc/autoconf.texi (Conditional constructs, Macro Names): Fix
+ typos.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ Work around <=m4-1.4.9 bug in m4_format.
+ * lib/m4sugar/m4sugar.m4 (_m4_index): New internal macro.
+ (m4_init): Only use it in older m4.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Use it to avoid
+ m4_format bug in older m4.
+ * lib/autoconf/status.m4 (_AC_CONFIG_COMPUTE_DEST): Likewise.
+ Reported by Bob Proulx.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ Match upstream standards.texi.
+ * doc/standards.texi: Resync from upstream.
+ * doc/fdl-1.3.texi: Rename...
+ * doc/fdl.texi: ...to this.
+ * doc/Makefile.am (autoconf_TEXINFOS, standards_TEXINFOS): Update
+ users.
+ * doc/autoconf.texi (GNU Free Documentation License): Likewise.
+ * cfg.mk (fetch): Likewise.
+
+ Yet more FDL 1.3 fallout.
+ * NEWS: Mention manual license change.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ Avoid some regex uses.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Use m4_format rather
+ than m4_bpatsubst to grab string prefix.
+ * lib/autoconf/status.m4 (_AC_CONFIG_REGISTER)
+ (_AC_CONFIG_REGISTER_DEST, AC_CONFIG_SUBDIRS): Likewise.
+ (_AC_FILE_DEPENDENCY_TRACE_COLON): Use m4_translit instead of
+ m4_bpatsubst to change bytes.
+ (_AC_CONFIG_DEPENDENCY_DEFAULT): Use m4_index rather than
+ m4_bmatch to find byte.
+ (_AC_CONFIG_COMPUTE_DEST): New helper macro.
+
+ Use more efficient macros in AC_CONFIG_SUBDIRS.
+ * lib/autoconf/status.m4 (_AC_CONFIG_FOOS, AC_CONFIG_SUBDIRS): Use
+ m4_map_args_w.
+ (_AC_OUTPUT_FILE): Use m4_map_args_sep and m4_map_args.
+ (_AC_OUTPUT_FILE_ADJUST_DIR): New helper macro.
+
+ Use more efficient macros in AC_CHECK_FILES and AC_CHECK_DECLS.
+ * lib/autoconf/general.m4 (AC_CHECK_FILES): Use m4_map_args_w,
+ and avoid typo.
+ (AC_CHECK_DECLS, AC_CHECK_DECLS_ONCE): Use m4_map_args_sep.
+ (_AC_CHECK_FILES, _AC_CHECK_DECLS, _AC_CHECK_DECL_ONCE): New
+ helper macros.
+ (AC_LIBSOURCES): Use m4_map_args.
+
+ Use more efficient macros in AC_CHECK_TYPES.
+ * lib/autoconf/types.m4 (AC_CHECK_TYPES, AC_CHECK_MEMBERS): Use
+ m4_map_args_sep.
+ (_AC_CHECK_TYPES, _AC_CHECK_MEMBERS): New helper macros.
+
+ Use more efficient macros in AC_CHECK_HEADERS.
+ * lib/autoconf/headers.m4 (AH_CHECK_HEADERS)
+ (AH_CHECK_HEADERS_DIRENT): Rename...
+ (_AH_CHECK_HEADER, _AH_CHECK_HEADER_DIRENT): ...and take only one
+ argument, rather than a list.
+ (AC_CHECK_HEADERS, AC_CHECK_HEADERS_ONCE):
+ Adjust callers to use m4_map_args_w.
+ (AC_HEADER_DIRENT): Adjust caller to use m4_map_args.
+ (_AC_CHECK_HEADER_ONCE): New helper macro.
+
+ Use more efficient macros in AC_CHECK_FUNCS.
+ * lib/autoconf/functions.m4 (_AH_CHECK_FUNCS): Rename...
+ (_AH_CHECK_FUNC): ...and take only one argument, rather than a
+ list.
+ (AC_CHECK_FUNCS, AC_CHECK_FUNCS_ONCE): Adjust callers to use
+ m4_map_args_w.
+ (_AC_CHECK_FUNC_ONCE): New helper macro.
+ (AC_REPLACE_FUNCS): Use m4_map_args_w.
+
+ Use more efficient macro in AT_INIT.
+ * lib/autotest/general.m4 (AT_INIT): Use m4_map_args.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ More FDL 1.3 fallout.
+ * cfg.mk (fetch): Add gnu-oids.texi, drop fdl.texi.
+ * doc/Makefile.am (standards_TEXINFOS): Reflect upstream
+ dependency changes.
+ * doc/fdl.texi: Delete.
+ * doc/gnu-oids.texi: New upstream file.
+ * doc/standards.texi: Resync from upstream.
+ * doc/make-stds.texi: Likewise.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+
+2008-11-10 Clinton Roy <clinton.roy@gmail.com> (tiny change)
+
+ Pass autoreconf -I to aclocal -I
+ * bin/autoreconf.in (parse_args): Pass --include to aclocal.
+ * doc/autoconf.texi (autoreconf Invocation): Updates for above.
+ * NEWS: Document it.
+ * THANKS: Update.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ Try 'print -r --' as a non-forking variant of 'printf %s\\n'.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_PREPARE): Cater to Solaris ksh.
+ * doc/autoconf.texi (Limitations of Builtins) <printf>: Document
+ the print workaround.
+ Idea by Paolo Bonzini.
+
+2008-11-10 Eric Blake <ebb9@byu.net>
+
+ Provide a section on all tools allowed in GNU Coding Standards.
+ * doc/autoconf.texi (Limitations of Builtins) <read>: Sort.
+ <wait>: Add section.
+ (Limitations of Usual Tools) <awk>: Make table entry consistent.
+ <chgrp, mkfifo, rmdir, sleep, sort, tar> Add sections.
+
+2008-11-09 Paolo Bonzini <bonzini@gnu.org>
+
+ Balance parentheses in _AC_CACHE_DUMP.
+ * lib/autoconf/general.m4 (_AC_CACHE_DUMP): Balance parentheses
+ without introducing \).
+
+2008-11-07 Eric Blake <ebb9@byu.net>
+
+ Further doc updates for AC_CHECK_HEADER change.
+ * doc/autoconf.texi (Generic Headers) <AC_CHECK_HEADER>: Mention
+ new default, and make it more obvious that using [-] is generally
+ broken.
+
+2008-11-07 Eric Blake <ebb9@byu.net>
+
+ * ChangeLog: Enforce UTF-8 encoding.
+
+2008-11-06 Eric Blake <ebb9@byu.net>
+
+ Skip preprocessor check in AC_CHECK_HEADERS_ONCE.
+ * lib/autoconf/headers.m4 (_AC_HEADERS_EXPANSION): Provide fourth
+ argument to speed up check.
+
+2008-11-06 Eric Blake <ebb9@byu.net>
+
+ Speed up AC_CHECK_TYPE.
+ * lib/autoconf/types.m4 (AC_CHECK_TYPE): Factor out $@, and avoid
+ regex when enough arguments are present.
+
+2008-11-06 Paolo Bonzini <bonzini@gnu.org>
+
+ Remove three forks per _AC_RUN_LOG_STDERR in the common case.
+ * lib/autoconf/general.m4 (_AC_RUN_LOG_STDERR): Avoid grep/rm/cat
+ sequence when the program's stderr was empty, while providing a
+ conftest.err file even in that case.
+ (_AC_CACHE_DUMP): Fix mismatched parenthesis.
+
+2008-11-06 Paolo Bonzini <bonzini@gnu.org>
+
+ Change `present but cannot be compiled' behavior to use compiler result.
+ * NEWS: Document it.
+ * doc/autoconf.texi (Present But Cannot Be Compiled): Document it.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Implement it
+ and adjust warning.
+ * tests/semantics.at (AC_CHECK_HEADERS): Test new semantics.
+
+2008-11-05 Eric Blake <ebb9@byu.net>
+
+ Add m4_map_args_w.
+ * lib/m4sugar/m4sugar.m4 (m4_map_args_w): New macro, undocumented
+ for now.
+ (_m4_split): Allow user control over separator.
+ (m4_split): Adjust caller.
+ (m4_foreach_w, m4_append_uniq_w, _m4_text_wrap): Rewrite to use
+ m4_map_args_w.
+ * tests/m4sugar.at (m4@&t@_append): Augment test keywords.
+ (M4 loops): Test new interface.
+
+ Use m4_set_map_sep in more places.
+ * lib/m4sugar/m4sugar.m4 (m4_set_difference, m4_set_intersection)
+ (m4_set_union): Use m4_set_map_sep rather than m4_set_foreach.
+ * doc/autoconf.texi (Set manipulation Macros) <m4_set_map>:
+ Enhance documentation.
+ <m4_set_foreach>: Mention faster alternative.
+ (Looping constructs) <m4_foreach>: Likewise.
+
+ Unify m4_set_foreach and m4_set_map.
+ * lib/m4sugar/m4sugar.m4 (m4_set_map_sep): New macro, undocumented
+ for now.
+ (m4_set_contents, m4_set_foreach, m4_set_list, m4_set_listc)
+ (m4_set_map): Adjust callers.
+
+ Use _m4_foreach in more places.
+ * lib/m4sugar/foreach.m4 (m4_dquote_elt, m4_join, m4_joinall)
+ (_m4_minmax, m4_set_add_all): Use _m4_foreach instead of
+ m4_foreach.
+ * lib/m4sugar/m4sugar.m4 (_m4_joinall): Use m4_map_args_sep
+ instead of m4_foreach or m4_map_args.
+
+ Unify _m4_foreach and _m4_map.
+ * lib/m4sugar/m4sugar.m4 (_m4_map): Delete, merged with...
+ (_m4_foreach): ...this.
+ (m4_foreach, m4_map, m4_mapall, m4_map_sep, _m4_mapall_sep)
+ (m4_map_args, m4_map_args_sep): Adjust callers.
+ * lib/m4sugar/foreach.m4 (_m4_map): Rename...
+ (_m4_foreach): ...to this, overwriting old definition.
+
+2008-11-04 Eric Blake <ebb9@byu.net>
+
+ Add m4_map_args_sep, undocumented for now.
+ * lib/m4sugar/m4sugar.m4 (m4_map_args_sep): New macro.
+ (_m4_map): Change API to cover more of m4_map*.
+ * lib/m4sugar/foreach.m4 (_m4_map): Adjust to new API.
+ (m4_map_args): Delete.
+ * tests/m4sugar.at (m4@&t@_map_args and m4@&t@_curry): Enhance
+ test.
+
+ Improve m4_for performance.
+ * lib/m4sugar/m4sugar.m4 (_m4_for): Alter API to make it easier to
+ avoid m4_define by some clients.
+ (m4_for): Adjust caller.
+ * lib/m4sugar/foreach.m4 (_m4_foreach, m4_case, m4_bmatch)
+ (_m4_cond, _m4_bpatsubsts, _m4_shiftn, m4_do, m4_reverse)
+ (_m4_map, m4_map_args, m4_map_args_pair, _m4_list_pad)
+ (_m4_list_cmp): Likewise.
+
+2008-11-04 Eric Blake <ebb9@byu.net>
+
+ Adjust expected output.
+ * tests/torture.at (Missing templates): Reflect added quoting.
+ Detected by Bob Proulx's buildbot.
+
+ Reject arguments with leading =.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Detect case of
+ missing variable name, with fewer forks. Quote invalid arguments
+ in message, in case they include spaces.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS)
+ (_AC_OUTPUT_MAIN_LOOP): Quote invalid arguments.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * tests/base.at (configure arguments): Test this.
+ Reported by Jeff Squyres.
+
+2008-11-04 Eric Blake <ebb9@byu.net>
+
+ Upgrade to FDL 1.3.
+ * cfg.mk (fetch): Add fdl-1.3.texi.
+ * .gitattributes: Likewise.
+ * doc/autoconf.texi (GNU Free Documentation License): Point to new
+ upstream version.
+ * doc/Makefile.am (autoconf_TEXINFOS): Likewise.
+ (standards_TEXINFOS): Mention current dependence on older license.
+ * doc/fdl-1.3.texi: New upstream file.
+ * GNUmakefile: Resync from upstream.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+
+2008-11-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Point at AM_SUBST_NOTMAKE.
+ * doc/autoconf.texi (Setting Output Variables): Add cross
+ reference to new Automake macro AM_SUBST_NOTMAKE.
+
+2008-11-03 Paolo Bonzini <bonzini@gnu.org>
+
+ Eliminate a fork per invocation of AC_LANG_CONFTEST.
+ * lib/autoconf/c.m4 (AC_LANG_CONFTEST(C)): Define instead of
+ AC_LANG_SOURCE(C).
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Add a comment at the
+ top of confdefs.h, which also works around cpp deficiencies.
+ * lib/autoconf/lang.m4 (AC_LANG_DEFINE): Define AC_LANG_CONFTEST(xyz)
+ (AC_LANG_CONFTEST): Dispatch based on _AC_LANG.
+ (AC_LANG_CONFTEST()): New.
+
+2008-11-03 Paolo Bonzini <bonzini@gnu.org>
+
+ Reorganize definition of languages.
+ * lib/autoconf/c.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Objective C),
+ _AC_LANG_ABBREV(C), _AC_LANG_ABBREV(C++), _AC_LANG_ABBREV(Objective C),
+ _AC_LANG_PREFIX(C), _AC_LANG_PREFIX(C++), _AC_LANG_PREFIX(Objective C)):
+ Replace definitions with usage of AC_LANG_DEFINE.
+ (Sections 2b, 2c): Delete.
+ (Sections 1b, 1c): Move after section 2a.
+ * lib/autoconf/erlang.m4 (AC_LANG(Erlang), _AC_LANG_ABBREV(Erlang),
+ _AC_LANG_PREFIX(Erlang), AC_LANG_SOURCE(Erlang)): Replace definitions
+ with usage of AC_LANG_DEFINE.
+ (AC_LANG_ERLANG): Define using AU_DEFUN.
+ * lib/autoconf/fortran.m4 (AC_LANG(Fortran), AC_LANG(Fortran 77),
+ _AC_LANG_ABBREV(Fortran), _AC_LANG_ABBREV(Fortran 77),
+ _AC_LANG_PREFIX(Fortran), _AC_LANG_PREFIX(Fortran 77),
+ _AC_LANG_SOURCE(Fortran), AC_LANG_SOURCE(Fortran 77)): Replace
+ definitions with usage of AC_LANG_DEFINE.
+ * lib/autoconf/lang.m4 (AC_LANG_DEFINE, AC_LANG_SOURCE()): New.
+
+2008-11-03 Paolo Bonzini <bonzini@gnu.org>
+
+ Use preprocessor in cpp tests.
+ * tests/c.at (CPP tests): Use AC_CHECK_HEADERS(..., [-]).
+
+2008-10-31 Paolo Bonzini <bonzini@gnu.org>
+
+ Rename _AC_CHECK_HEADER_OLD and _AC_CHECK_HEADER_NEW.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADER): Adjust naming.
+ (_AC_CHECK_HEADER_PREPROC_BODY): New name of _AC_CHECK_HEADER_OLD_BODY.
+ (_AC_CHECK_HEADER_COMPILE_BODY): New name of _AC_CHECK_HEADER_NEW_BODY.
+ (_AC_CHECK_HEADER_PREPROC): New name of _AC_CHECK_HEADER_OLD.
+ (_AC_CHECK_HEADER_COMPILE): New name of _AC_CHECK_HEADER_NEW.
+ * tests/semantics.at (AC_CHECK_HEADERS_OLD, AC_CHECK_HEADER_NEW):
+ Give better name.
+
+2008-10-31 Eric Blake <ebb9@byu.net>
+
+ Support multiple undiverts and dumpdefs at once.
+ * lib/m4sugar/m4sugar.m4 (m4_dumpdefs, m4_undivert): Allow extra
+ arguments.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_dumpdef>,
+ <m4_undivert>: Document argument list change.
+ * tests/m4sugar.at (m4@&t@_divert_stack, m4@&t@_dumpdef): Test
+ them.
+
+ Simplify diversion stack handling.
+ * lib/m4sugar/m4sugar.m4 (m4_divert_stack): Use fewer macros, and
+ avoid extra newlines.
+ (m4_divert_stack_push): Compute location here, rather than caller.
+ (m4_divert_push): Update caller.
+ (m4_divert): Likewise, and also adjust current diversion name.
+ (m4_divert_pop): Simplify rule that diversion stack must never go
+ empty.
+ (_m4_require_call): Bypass diversion stack when collecting
+ required macro text.
+ (m4_init): Set current diversion without requiring m4_init.
+ * lib/m4sugar/m4sh.m4 (AS_INIT): Avoid too many pops.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Schedule wrapped
+ text to run prior to m4sugar cleanup.
+ * doc/autoconf.texi (Text processing Macros) <m4_newline>: Mention
+ optional argument.
+ (Conditional constructs) <m4_ifvaln, m4_n>: Mention use of dnl.
+ * NEWS: Undo blurb about m4_divert.
+ * tests/m4sugar.at (m4@&t@_divert_stack): New test.
+
+ Simplify expansion stack handling.
+ * lib/m4sugar/m4sugar.m4 (m4_expansion_stack): Use fewer macros;
+ always output 'top level'.
+ (_m4_expansion_stack_entry): New macro, to format the string only
+ when needed.
+ (m4_expansion_stack_push): Only push a macro name.
+ (m4_warn, _m4_defun_pro): Update callers.
+ (m4_expansion_stack_pop, m4_expansion_stack_dump): Delete.
+ (_m4_defun_epi, m4_fatal): Inline the calls.
+ * tests/m4sugar.at (m4@&t@_expansion_stack): New test.
+
+2008-10-30 Eric Blake <ebb9@byu.net>
+
+ Better documentation of AC_CHECK_HEADER's fourth argument.
+ * doc/autoconf.texi (Generic Headers) <AC_CHECK_HEADER>: Mention
+ how to suppress compiler or preprocessor header check.
+ Reported by Jeff Squyres.
+
+2008-10-30 Eric Blake <ebb9@byu.net>
+
+ Fix LINENO testsuite failure.
+ * tests/m4sh.at (AT_DATA_LINENO): Use AS_LINENO_PREPARE, not
+ undocumented _AS_PREPARE, and move unset earlier in script.
+
+ Update LINENO documentation.
+ * doc/autoconf.texi (Initialization Macros) <AS_INIT_GENERATED>:
+ (Special Shell Variables) <LINENO>: Mention that LINENO support in
+ child scripts may be broken. Modernize example.
+
+2008-10-30 Paolo Bonzini <bonzini@gnu.org>
+
+ Do not check for $LINENO in generated scripts.
+ * lib/m4sugar/m4sh.m4 (_AS_PREPARE): Do not call _AS_LINENO_PREPARE,
+ and explain why.
+
+2008-10-30 Eric Blake <ebb9@byu.net>
+
+ Don't check for non-POSIX extensions in suggested tests.
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_APPEND_WORKS): Remove suggestion;
+ we still use += if available, but should not reject shells (like
+ dash) that don't provide it.
+ (_AS_DETECT_SUGGESTED): Document a policy for m4sh.
+ Reported by Paolo Bonzini.
+
+2008-10-30 Paolo Bonzini <bonzini@gnu.org>
+
+ Pass CONFIG_SHELL down to generated scripts, and re-export SHELL.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): If proceeding
+ with a given CONFIG_SHELL, move it to SHELL.
+ (AS_INIT_GENERATED): Re-export SHELL.
+
+2008-10-30 Eric Blake <ebb9@byu.net>
+
+ Work around Solaris /bin/sh case bug.
+ * lib/m4sugar/m4sh.m4 (_AS_CASE, _AS_CASE_DEFAULT): Always provide
+ a non-empty command list.
+ (AS_CASE): Always guarantee that a case will match.
+ * doc/autoconf.texi (Limitations of Builtins) <case>: Document the
+ Solaris bug, and mention AS_CASE.
+
+2008-10-30 Paolo Bonzini <bonzini@gnu.org>
+
+ Require _AS_CR_PREPARE where appropriate.
+ * lib/m4sugar/m4sh.m4 (_AS_PREPARE): Call _AS_CR_PREPARE.
+ (AS_PREPARE): Require _AS_CR_PREPARE.
+
+ Avoid walking the entire PATH when looking for a better shell.
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_SANITIZE): Test shell characteristics
+ as the PATH is walked.
+
+ Add third argument to _AS_PATH_WALK
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_SANITIZE): Do not call _AS_CR_PREPARE.
+ (_AS_PATH_WALK): Add third optional argument.
+
+ Trim down the length of the shell function test.
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_WORK): Condense.
+
+2008-10-29 Eric Blake <ebb9@byu.net>
+
+ Fix LINENO detection to work around bash and pdksh limitations.
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_WORKS): Enhance the test, so
+ that we can choose which of two tests to trust.
+ (_AS_RUN): Set flag when alternate shell is running.
+ (_AS_DETECT_EXPAND): New macro.
+ (_AS_DETECT_BETTER_SHELL): Use it to massage LINENO tests.
+
+2008-10-29 Eric Blake <ebb9@byu.net>
+
+ Mention proper fix for zsh users.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Recommend zsh
+ version known to work.
+ Suggested by Paolo Bonzini.
+
+ Document current beta-quality status.
+ * configure.ac: Reflect fact that change to git-version-gen
+ produces -, but not always a letter, on non-release builds.
+ * BUGS: Mention known issues.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Ask for help in
+ debugging platforms with deficient shells.
+
+2008-10-29 Eric Blake <ebb9@byu.net>
+
+ Alter signature of AS_INIT_GENERATED.
+ * lib/m4sugar/m4sh.m4 (AS_INIT_GENERATED): Add parameters, and
+ manage here-doc and chmod in place. This also allows future
+ changes for optimizing the child via diversion/m4_wrap magic.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Update
+ caller.
+ * doc/autoconf.texi (Initialization Macros) <AS_INIT_GENERATED>:
+ Update the documentation.
+
+2008-10-29 Eric Blake <ebb9@byu.net>
+
+ Use _m4_stack_reverse in m4_set.
+ * lib/m4sugar/m4sugar.m4 (_m4_set_contents_1)
+ (_m4_set_contents_2): Rewrite to share _m4_stack_reverse
+ implementation.
+ (m4_set_contents, m4_set_foreach, m4_set_list, m4_set_listc)
+ (m4_set_map): Adjust callers to new API.
+
+ Add m4_stack_foreach_sep.
+ * lib/m4sugar/m4sugar.m4 (m4_stack_foreach_sep)
+ (m4_stack_foreach_sep_lifo): New macros.
+ (_m4_stack_reverse): Adjust prototype, to support it.
+ (m4_copy): Use fewer macros.
+ * tests/m4sugar.at (m4@&t@_stack_foreach): Rename...
+ (m4@&t@_stack): ...and add m4_stack_foreach_sep tests.
+
+2008-10-29 Bruno Haible <bruno@clisp.org>
+
+ Mention Sun WorkShop 6.2 OpenMP bug.
+ * doc/autoconf.texi (AC_OPENMP): Document portability pitfall.
+
+2008-10-29 Paolo Bonzini <bonzini@gnu.org>
+
+ Rewrite handling of diversion and expansion stack.
+ * NEWS: Document stricter requirement on m4_init.
+ * lib/m4sugar/m4sugar.m4 (m4_divert_stack): New, replacing
+ _m4_divert_n_stack.
+ (_m4_divert_stack_push): New.
+ (m4_divert): Use _m4_divert_stack_push and replace m4_define with
+ m4_popdef.
+ (m4_divert_push): Use _m4_divert_stack_push.
+ (m4_divert_pop): Use m4_divert_stack instead of _m4_divert_n_stack,
+ pop _m4_divert_stack instead of m4_divert_stack.
+ (m4_expansion_stack): New. Update comment above it.
+ (m4_expansion_stack_push, m4_expansion_stack_pop): Work on
+ _m4_expansion_stack instead of m4_expansion_stack.
+ (m4_expansion_stack_dump): Check presence of _m4_expansion_stack
+ instead of m4_expansion_stack. Use m4_expansion_stack's expansion
+ instead of the definition, and compensate for the trailing newline
+ in the expansion.
+ (m4_warn, _m4_defun_pro, _m4_defun_epi): Check presence of
+ _m4_expansion_stack instead of m4_expansion_stack.
+ (m4_newline): Expand first argument after the newline.
+ (m4_init): Use m4_divert_stack instead of _m4_divert_n_stack,
+ * tests/m4sugar.at (m4_append, m4_text_wrap): Invoke m4_init.
+ * tests/tools.at (whitespace in file names, the empty token): Likewise.
+
+2008-10-28 Eric Blake <ebb9@byu.net>
+
+ Reduce forks while searching for better shell.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_REQUIRED)
+ (_AS_DETECT_SUGGESTED): No need to provide extra subshell; _AS_RUN
+ already does the job.
+ (_AS_DETECT_BETTER_SHELL): Simplify AS_EXIT when not run in a trap
+ 0 context.
+
+ Undo needless efforts to protect $2 in $2_t.
+ * lib/autoconf/types.m4 (_AC_TYPE_INT_BODY)
+ (_AC_TYPE_UNSIGNED_INT_BODY): Reduce extra quoting.
+
+2008-10-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix parallel test execution output lossage.
+ * lib/autotest/general.m4 (_AT_CHECK): Truncate files to hold
+ standard output and standard error before the test, use append
+ mode for writing.
+ * THANKS: Update.
+ Caught by Bob Proulx' build daemons, analysis and suggested fix
+ by Stéphane Chazelas.
+
+2008-10-28 Eric Blake <ebb9@byu.net>
+
+ Use m4_map_args in more places.
+ * lib/m4sugar/m4sugar.m4 (m4_defn, m4_dumpdef, m4_popdef)
+ (m4_undefine, m4_combine): Use m4_map_args, rather than
+ m4_foreach.
+
+2008-10-28 Eric Blake <ebb9@byu.net>
+
+ Override m4 1.4.x dumpdef, as it breaks autom4te.
+ * lib/m4sugar/m4sugar.m4 (m4_dumpdef): New implementation.
+ (m4_copy): Formatting touchup.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_dumpdef>: Mention
+ semantic differences as well as m4_dumpdefs.
+ * NEWS: Likewise.
+ * tests/m4sugar.at (m4@&t@_dumpdef): New test.
+
+2008-10-28 Eric Blake <ebb9@byu.net>
+
+ Allow m4sugar to be used without autom4te, such as in bison.
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap, m4_qlen): Document that
+ alternate escape sequences can be used.
+ (m4_text_box): Likewise. Don't output quadrigraphs.
+ (m4_qdelta): Delete unused macro.
+
+2008-10-28 Paolo Bonzini <bonzini@gnu.org>
+
+ Add m4_stack_foreach and m4_stack_foreach_lifo.
+ * lib/m4sugar/m4sugar.m4 (_m4_stack_reverse): New from _m4_copy.
+ (m4_stack_foreach, m4_stack_foreach_lifo): New.
+ (m4_copy): Use m4_stack_foreach and m4_curry.
+ (_m4_dumpdefs_down, _m4_dumpdefs_up): Remove.
+ (m4_dumpdefs): Rewrite using m4_stack_foreach_lifo.
+ * tests/m4sugar.at (m4_stack_foreach): New test.
+
+2008-10-28 Paolo Bonzini <bonzini@gnu.org>
+
+ use a shell function for AC_TYPE_INTx_T
+ * lib/autoconf/types.m4 (_AC_TYPE_INT_BODY, _AC_TYPE_UNSIGNED_INT_BODY):
+ New.
+ (_AC_TYPE_INT, _AC_TYPE_UNSIGNED_INT): Define and use a shell function.
+
+2008-10-28 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/general.m4 (AC_CHECK_DECL): Fix AS_ESCAPE usage.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL,
+ _AC_CHECK_HEADER_NEW): Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW, AC_CHECK_MEMBER): Likewise.
+
+2008-10-28 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/types.m4 (_AC_CHECK_MEMBER_BODY): New.
+ (AC_CHECK_MEMBER): Define and use a shell function.
+
+2008-10-27 Eric Blake <ebb9@byu.net>
+
+ Prefer m4_fatal over AC_FATAL.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF, AC_CHECK_ALIGNOF)
+ (AC_CHECK_MEMBER): Use non-obsolete macro name.
+ * lib/autoconf/fortran.m4 (_AC_LIST_MEMBER_IF): Likewise.
+ * lib/autoconf/general.m4 (AC_REQUIRE_AUX_FILE, AC_SUBST):
+ Likewise.
+ * lib/autoconf/lang.m4 (_AC_LANG_DISPATCH): Likewise.
+ * lib/autoconf/status.m4 (_AC_CONFIG_DEPENDENCY_DEFAULT)
+ (_AC_CONFIG_UNIQUE, _AC_CONFIG_REGISTER_DEST): Likewise.
+
+2008-10-27 Eric Blake <ebb9@byu.net>
+
+ Avoid raw carriage return in scripts.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Generate CR
+ via tr, rather than with literal byte.
+ * THANKS: Update.
+ Reported by Steven R. Loomis; patch suggested by Thomas Dickey.
+
+2008-10-27 Eric Blake <ebb9@byu.net>
+
+ Use AS_VAR_ARITH.
+ * lib/autotest/general.m4 (at_func_arith): Delete; replace all
+ clients with AS_VAR_ARITH instead.
+ * lib/autoconf/general.m4 (_AC_COMPUTE_INT_COMPILE): Use new
+ macro.
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Likewise.
+ * tests/torture.at (Torturing config.status): Likewise.
+ * tests/tools.at (autom4te --force): Likewise.
+
+ Add AS_VAR_ARITH.
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_ARITH_PREPARE, _AS_VAR_ARITH_WORKS)
+ (AS_VAR_ARITH): New macros.
+ (_AS_PREPARE, AS_PREPARE): Emit preparation.
+ * tests/m4sh.at (AS@&t@_VAR_ARITH): New test.
+ * doc/autoconf.texi (Polymorphic Variables) <AS_VAR_ARITH>:
+ Document new macro.
+ (Limitations of Usual Tools) <expr>: Mention portability problem
+ if first argument starts with -.
+ (Shell Substitutions) <$((expression))>: Mention it.
+ * NEWS: Likewise.
+
+2008-10-27 Eric Blake <ebb9@byu.net>
+
+ Use read, rather than `cat`, for safe one-line files.
+ * lib/autotest/general.m4 (AT_CLEANUP): Avoid a fork, since it is
+ known that the file has only one line and no \.
+ * lib/autoconf/general.m4 (_AC_COMPUTE_INT_RUN): Likewise.
+
+2008-10-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_COMPUTE_INT_COMPILE,
+ _AC_COMPUTE_INT_RUN): Add IF-SUCCESS argument.
+ (_AC_COMPUTE_INT_BODY): New.
+ (AC_COMPUTE_INT): Define and use a shell function.
+
+2008-10-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW_BODY): Extract
+ test body here. Move head comment of _AC_CHECK_TYPE_NEW here.
+ (_AC_CHECK_TYPE_NEW): Define a shell function and call it.
+
+2008-10-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_CHECK_DECL_BODY): New.
+ (AC_CHECK_DECL): Use a shell function.
+
+2008-10-27 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_OLD,
+ _AC_CHECK_HEADER_NEW): Use a shell function.
+
+2008-10-25 Eric Blake <ebb9@byu.net>
+
+ Track recent copyright assignments.
+ * AUTHORS: Update.
+
+2008-10-25 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for _AC_CHECK_HEADER_MONGREL.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL_BODY): New
+ macro.
+ (_AC_CHECK_HEADER_MONGREL): Use a shell function.
+
+2008-10-25 Eric Blake <ebb9@byu.net>
+
+ Simplify _AS_PREPARE handling of functions.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE_SHELL_FN): Factor...
+ (_AS_REQUIRE_SHELL_FN): ...into new helper macro.
+ (_AS_PREPARE): Temporarily redefine AS_REQUIRE_SHELL_FN to make
+ this task easier.
+ (_AS_LINENO_PREPARE): Make more efficient.
+ (_AS_MKDIR_P_PREPARE): Simplify use in _AS_PREPARE.
+ (_AS_UNSET_PREPARE): Avoid blank newline.
+ (AS_INIT): Emit as_func_unset alongside other functions.
+
+2008-10-25 Eric Blake <ebb9@byu.net>
+
+ Document AS_EXIT.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_EXIT>: Document
+ this macro.
+ (Limitations of Builtins): Mention AS_EXIT.
+ * NEWS: Mention it.
+
+ Use AS_EXIT in autoconf.as.
+ * bin/autoconf.as: Consistently use AS_EXIT.
+
+2008-10-24 Eric Blake <ebb9@byu.net>
+
+ Fix m4 underquoting in AC_PROG_INSTALL.
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Produce accurate
+ character ranges.
+
+ Speed up AC_CHECK_HEADER.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADER): Factor out $@.
+
+2008-10-24 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for AC_CHECK_FUNC.
+ * lib/autoconf/functions.m4 (_AC_CHECK_FUNC_BODY): New macro.
+ (AC_CHECK_FUNC): Use a shell function.
+ * lib/autoconf/c.m4 (AC_LANG_SOURCE(C)): Reduce number of forks.
+
+2008-10-24 Eric Blake <ebb9@byu.net>
+
+ Work around fact that gnulib-tool doesn't use m4_copy.
+ * lib/autoconf/general.m4 (AC_LIBOBJ, AC_LIBSOURCES): Defun, not
+ define, so that an initial location is present, to account for
+ fact that gnulib-tool pushes another AC_DEFUN'd macro on top.
+
+ Make m4_defun_init more robust.
+ * lib/m4sugar/m4sugar.m4 (m4_defun_init): Handle indirect macro
+ names, and correct number of arguments.
+ (m4_copy): Also set up location of the copy.
+ (m4_defun): When copied, use current macro name, not original.
+ * tests/m4sugar.at (m4@&t@_require: one-shot initialization):
+ Update test.
+
+ Optimize clients of AS_REQUIRE.
+ * lib/m4sugar/m4sugar.m4 (m4_defun): Add undocumented third
+ argument.
+ (m4_defun_init): New undocumented macro.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_LOG, AS_MESSAGE, AS_BASENAME)
+ (_AS_DIRNAME_EXPR, AS_DIRNAME, AS_ECHO, AS_ECHO_N, AS_TEST_X)
+ (AS_LN_S, AS_MKDIR_P, _AS_PATH_WALK, AS_VERSION_COMPARE)
+ (AS_TR_SH, AS_TR_CPP, AS_VAR_APPEND, AS_VAR_PUSHDEF): Use it to
+ simplify these macros once the one-shot initialization is
+ complete.
+ * tests/m4sugar.at (m4@&t@_require: one-shot initialization): New
+ test.
+
+ Improve m4_copy.
+ * lib/m4sugar/m4sugar.m4 (m4_copy): Add second implementation for
+ public use.
+ (_m4_copy): New macro, which preserves pushdef stacks.
+ (_m4_defun_pro_outer): Bypass it, for speed.
+ (m4_init): Bypass new implementation, since it breaks on m4_defn.
+ * bin/autoupdate.in (handle_autoconf_macros): Likewise.
+ * lib/autoconf/general.m4 (AC_PREREQ): Undefine before redefining,
+ now that m4_copy checks this.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_copy>: Document
+ this, as well as m4_rename.
+ * lib/autoconf/autoconf.m4 (m4_copy): Temporarily redefine when
+ renaming builtins, since it breaks on m4_ifdef.
+ * NEWS: Likewise.
+ * tests/m4sugar.at (m4@&t@_defn): Enhance test.
+
+2008-10-24 Eric Blake <ebb9@byu.net>
+
+ AC_FUNC_GETGROUPS: Revert regression.
+ * lib/autoconf/functions.m4 (AC_FUNC_GETGROUPS): Only set
+ ac_cv_func_getgroups_works=no when it is not available.
+
+2008-10-23 Eric Blake <ebb9@byu.net>
+
+ Whitespace cleanup.
+ * lib/autoconf/fortran.m4: Consistently use tabs.
+
+2008-10-23 Chikama Masaki <masaki.chikama@gmail.com> (tiny change)
+
+ For gfortran on sh, ignore -little.
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Add -little to
+ list of ignored arguments.
+ * THANKS: Update.
+
+2008-10-23 Paolo Bonzini <bonzinI@gnu.org>
+
+ Eliminate empty lines after AC_*_IFELSE.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE,
+ _AC_LINK_IFELSE, _AC_RUN_IFELSE): Add a dnl at end.
+
+2008-10-23 Paolo Bonzini <bonzinI@gnu.org>
+
+ Avoid a fork in _AC_RUN_LOG and _AC_RUN_LOG_STDERR
+ * lib/autoconf/general.m4 (_AC_RUN_LOG, _AC_RUN_LOG_STDERR):
+ Return a boolean status code based on $ac_status.
+
+2008-10-23 Paolo Bonzini <bonzinI@gnu.org>
+
+ Ensure actions can look at conftest* files.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY,
+ _AC_COMPILE_IFELSE_BODY, _AC_LINK_IFELSE_BODY, _AC_RUN_IFELSE_BODY):
+ Move rm commands, except IPA files and Apple debug symbols...
+ (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE, _AC_LINK_IFELSE,
+ _AC_RUN_IFELSE): ...in here.
+ * tests/compile.at: Add regression test.
+
+2008-10-23 Eric Blake <ebb9@byu.net>
+
+ Remove excess dnl from m4sh.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL, _AS_PREPARE)
+ (_AS_SHELL_FN_WORK, _AS_SHELL_SANITIZE, AS_IF, _AS_ECHO_LOG)
+ (AS_MESSAGE, AS_ERROR, AS_BASENAME, _AS_BASENAME_PREPARE)
+ (_AS_DIRNAME_EXPR, AS_DIRNAME, _AS_DIRNAME_PREPARE, AS_ECHO)
+ (AS_ECHO_N, AS_TEST_X, AS_EXECUTABLE_P, _AS_ME_PREPARE)
+ (_AS_LINENO_PREPARE, AS_LN_S, AS_MKDIR_P, _AS_PATH_WALK)
+ (AS_SET_CATFILE, AS_HELP_STRING, AS_TMPDIR, AS_VERSION_COMPARE)
+ (_AS_TR_SH_PREPARE, AS_TR_SH, _AS_TR_CPP_PREPARE, AS_TR_CPP)
+ (_AS_TR_PREPARE, AS_VAR_APPEND, AS_VAR_PUSHDEF)
+ (AS_INIT_GENERATED): Use fewer dnl in m4sh macro bodies.
+
+2008-10-23 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for _AC_RUN_IFELSE.
+ * lib/autoconf/general.m4 (_AC_RUN_IFELSE_BODY): New macro.
+ (_AC_RUN_IFELSE): Use a shell function.
+ (_AC_RUN_LOG): Avoid subshell for logging.
+
+2008-10-23 Eric Blake <ebb9@byu.net>
+
+ Formatting tweak: balance () with m4sh case statements.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL)
+ (_AS_SHELL_SANITIZE, _AS_ECHO_N_PREPARE, _AS_ECHO_PREPARE)
+ (AS_SET_CATFILE, _AS_TEST_PREPARE): Add strategic shell comments.
+ (_AS_CASE, _AS_CASE_DEFAULT, AS_CASE): Rearrange newlines, to
+ allow output of strategic shell comments.
+ (AS_VERSION_COMPARE): Use AS_CASE.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Enhance test.
+
+2008-10-22 Jim Meyering <meyering@redhat.com>
+
+ AC_FUNC_GETGROUPS: always define $ac_cv_func_getgroups_works
+ * lib/autoconf/functions.m4 (AC_FUNC_GETGROUPS): Always define
+ the shell variable, $ac_cv_func_getgroups_works. Otherwise, if
+ it is set to "yes" in the environment and configure is run on
+ a system like mingw that lacks the getgroups function, it would
+ mistakenly define HAVE_GETGROUPS. Reported by Simon Josefsson in
+ <http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/15354>.
+
+2008-10-22 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for _AC_LINK_IFELSE.
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE_BODY): New macro.
+ (_AC_LINK_IFELSE): Use a shell function.
+
+2008-10-22 Eric Blake <ebb9@byu.net>
+
+ Fix autoconf logging commands.
+ * lib/autoconf/general.m4 (AC_MSG_RESULT_UNQUOTED, _AC_EVAL)
+ (_AC_EVAL_STDERR, AC_RUN_LOG): Respect as_lineno.
+ (_AC_DO_ECHO): Likewise, and use fewer dnl.
+ (_AC_RUN_LOG_STDERR): Avoid subshell for logging.
+
+2008-10-22 Eric Blake <ebb9@byu.net>
+
+ Fix testsuite failure.
+ * tests/mktests.sh (ac_exclude_list): Don't generate test for
+ AC_REQUIRE_SHELL_FN.
+
+2008-10-21 Eric Blake <ebb9@byu.net>
+
+ Improve wording related to automake and autotest.
+ * doc/autoconf.texi (Making testsuite Scripts): Clarify wording in
+ relation to automake. Mention dependency on package.m4.
+ Consolidate examples. Define AUTOM4TE.
+ * THANKS: Update.
+ Reported by William Pursell.
+
+2008-10-21 Eric Blake <ebb9@byu.net>
+
+ Allow AS_VAR_SET_IF in shell lists.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_SET_IF): Allow continuation of
+ line.
+ * lib/autoconf/general.m4 (AC_CACHE_VAL): Supply newline no longer
+ provided by AS_VAR_SET_IF.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Adjust
+ clients.
+ * lib/autoconf/libs.m4 (AC_SEARCH_LIBS): Likewise.
+ * tests/m4sh.at (AS@&t@_VAR basics): Enhance test.
+
+ Allow AS_VAR_IF in shell lists.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_IF): Allow continuation of line.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNC): Adjust clients.
+ * lib/autoconf/general.m4 (AC_CHECK_FILE, AC_CHECK_DECL):
+ Likewise.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL)
+ (_AC_CHECK_HEADER_NEW, _AC_CHECK_HEADER_OLD)
+ (_AC_CHECK_HEADER_DIRENT): Likewise.
+ * lib/autoconf/libs.m4 (AC_CHECK_LIB): Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW, AC_CHECK_MEMBER):
+ Likewise.
+ * tests/m4sh.at (AS@&t@_VAR basics): Enhance test.
+
+ Allow AS_CASE in shell lists.
+ * lib/m4sugar/m4sh.m4 (AS_CASE): Always execute test, in case of
+ side effects. Allow continuation of script on same line as esac.
+ * lib/autoconf/c.m4 (AC_PROG_CC_STDC): Adjust client.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Enhance test.
+ * NEWS: Document the subtle change.
+
+ Allow AS_IF in shell lists.
+ * lib/m4sugar/m4sh.m4 (AS_IF): Always execute test, in case of
+ side effects. Allow continuation of script on same line as fi.
+ (_AS_DETECT_BETTER_SHELL): Adjust clients.
+ (AS_VAR_IF, AS_VAR_SET_IF): For now, supply newline no longer
+ given by AS_IF.
+ * lib/autoconf/c.m4 (_AC_PROG_PREPROC_WORKS_IFELSE): Likewise.
+ * lib/autoconf/general.m4 (_AC_ENABLE_IF): Likewise.
+ (AC_EGREP_CPP, _AC_RUN_IFELSE): Adjust client.
+ * lib/autoconf/libs.m4 (AC_SEARCH_LIBS): Likewise.
+ * doc/autoconf.texi (Common Shell Constructs) <AS_IF>: Fix typo.
+ (Polymorphic Variables): Move mention of dnl to the only two
+ AS_VAR functions that need it.
+
+2008-10-21 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for _AC_COMPILE_IFELSE.
+ * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE_BODY): New macro.
+ (_AC_COMPILE_IFELSE): Use a shell function.
+
+2008-10-21 Eric Blake <ebb9@byu.net>
+
+ Use AS_VAR_APPEND.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNCS_ONCE): Use new macro.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE)
+ (_AC_LIBOBJS_NORMALIZE): Likewise.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADERS_ONCE): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS)
+ (_AC_OUTPUT_CONFIG_STATUS, _AC_OUTPUT_MAIN_LOOP): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+ Add AS_VAR_APPEND.
+ * lib/m4sugar/m4sh.m4 (_AS_VAR_APPEND_PREPARE)
+ (_AS_VAR_APPEND_WORKS, AS_VAR_APPEND): New macros.
+ (AS_PREPARE, _AS_PREPARE): Emit preparation.
+ * tests/m4sh.at (AS@&t@_VAR_APPEND): New test.
+ * doc/autoconf.texi (Polymorphic Variables) <AS_VAR_APPEND>:
+ Document new macro.
+ <AS_VAR_SET>: Mention ramification of `""` rules.
+ * NEWS: Mention new macro.
+
+2008-10-21 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Use a shell function for _AC_PREPROC_IFELSE.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE_BODY): New macro.
+ (_AC_PREPROC_IFELSE): Use a shell function.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Factor for faster execution.
+ (AS_REQUIRE_SHELL_FN): Bypass AS_REQUIRE if function has already
+ been provided.
+
+2008-10-21 Eric Blake <ebb9@byu.net>
+
+ Add banners to generated files.
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_SANITIZE): Use m4_text_box for
+ existing banner.
+ (AS_INIT): Add new banners at strategic points.
+ * lib/autoconf/general.m4 (AC_INIT): Alter banner location, and
+ make consistent with other banners.
+ * lib/autotest/general.m4 (AT_INIT): Make banners consistent.
+
+2008-10-20 Paolo Bonzini <bonzini@gnu.org>
+
+ Add AC_REQUIRE_SHELL_FN and the SHELL_FN diversion.
+ * lib/autoconf/general.m4 (AC_REQUIRE_SHELL_FN): New.
+ (m4_divert(SHELL_FN)): New.
+
+2008-10-20 Eric Blake <ebb9@byu.net>
+
+ Avoid unportable use of echo in testsuite.
+ * tests/m4sh.at (AS@&t@_VAR basics): Use AS_ECHO, since string
+ contains backslash.
+
+2008-10-18 Paolo Bonzini <bonzini@gnu.org>
+
+ Make sure that nested AS_REQUIRE do not lose the desired diversion.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Expand _m4_divert_desired before
+ passing it to m4_divert_require, so that its content is not used
+ anymore.
+ * tests/m4sh.at (Nested AS_REQUIRE): New testcase.
+
+2008-10-18 Eric Blake <ebb9@byu.net>
+
+ Document bugs in { } handling.
+ * doc/autoconf.texi (Limitations of Builtins): Mention bug on
+ empty list.
+
+ Fix some testsuite failures introduced two days ago.
+ * tests/m4sh.at (Nested AS@&t@_REQUIRE_SHELL_FN)
+ (AS@&t@_REQUIRE_SHELL_FN and m4@&t@_require): Adjust to changed
+ API.
+ Reported by Ralf Wildenhues.
+
+2008-10-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Show how to extract single substitutions from config.status.
+ * doc/autoconf.texi (config.status Invocation): Show example
+ using `--file=-'.
+
+2008-10-17 Eric Blake <ebb9@byu.net>
+
+ Add m4_curry.
+ * lib/m4sugar/m4sugar.m4 (m4_curry, _m4_curry): New macros.
+ * tests/m4sugar.at (m4@&t@_map_args): Rename...
+ (m4@&t@_map_args and m4@&t@_curry): ...and add currying tests.
+ * doc/autoconf.texi (Looping constructs) <m4_map_args>: Document
+ currying as a way to add parameters.
+ (Evaluation Macros) <m4_curry>: Document the new macro.
+ * NEWS: Likewise.
+
+ Improve suggested test filtering.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_SUGGESTED_PRUNE): New macro,
+ extracted from...
+ (_AS_DETECT_BETTER_SHELL): ...here, to use faster API. No need to
+ check for an empty required set.
+
+ Add m4_set_map.
+ * lib/m4sugar/m4sugar.m4 (m4_set_foreach): New macro.
+ * tests/m4sugar.at (m4@&t@_set): Enhance test.
+ * doc/autoconf.texi (Set manipulation Macros) <m4_set_map>:
+ Document it.
+ * NEWS: Likewise.
+
+ Document m4_map_args.
+ * lib/m4sugar/m4sugar.m4 (m4_transform, m4_transform_pair):
+ Rename...
+ (m4_map_args, m4_map_args_pair): ...to these names, and document.
+ (m4_version_unletter): Use the interface.
+ * lib/m4sugar/foreach.m4 (m4_map_args, m4_map_args_pair)
+ (_m4_map_args_, _m4_map_args_pair_, _m4_map_args_pair_end):
+ Perform same renames.
+ * lib/m4sugar/m4sh.m4 (AS_CASE, AS_IF): Adjust callers.
+ * tests/m4sugar.at (m4@&t@_map_args): New test.
+ (recursion): Adjust caller.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Likewise.
+ * doc/autoconf.texi (Looping constructs) <m4_map_args>: Document
+ this interface.
+ * NEWS: Mention the new macros.
+
+2008-10-17 Eric Blake <ebb9@byu.net>
+
+ Reduce vertical whitespace in configure.
+ * lib/autoconf/general.m4 (AC_INIT): Silence newline output during
+ m4 side effect initializations.
+ * lib/m4sugar/m4sh.m4 (AS_PREPARE): Likewise.
+
+2008-10-17 Eric Blake <ebb9@byu.net>
+
+ Document AS_VAR interfaces.
+ * doc/autoconf.texi (Programming in M4sh): M4sh is now prime-time.
+ (Polymorphic Variables): New node.
+ * NEWS: Update accordingly.
+
+ Test AS_VAR interfaces.
+ * tests/m4sh.at (AS@&t@_VAR): New test.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_PUSHDEF): Force expansion of
+ _AS_TR_SH_PREPARE at top level, rather than argument collection.
+ (AS_TR_SH): Support command substitution.
+
+ Add AS_VAR_COPY.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_COPY): New macro.
+ (AS_VAR_IF): Use it, instead of the broken AS_VAR_GET.
+ * lib/autoconf/general.m4 (AC_CACHE_CHECK): Likewise.
+ * lib/autoconf/libs.m4 (AC_SEARCH_LIBS): Likewise.
+ * lib/autotest/general.m4 (_AT_FINISH): Likewise.
+
+ Sort AS_VAR_* interfaces.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_GET): Reduce output to one line.
+ (AS_VAR_TEST_SET, AS_VAR_SET, AS_VAR_SET_IF, AS_VAR_POPDEF): Sort,
+ no code changes.
+
+2008-10-16 Eric Blake <ebb9@byu.net>
+
+ Allow comments before functions emitted by m4sh.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE_SHELL_FN): Add comment
+ argument. Supply closing comment, to ease readability.
+ (_AS_MKDIR_P_PREPARE): Adjust caller.
+ (_AS_UNSET_PREPARE): Add comment.
+
+ Add AS_FUNCTION_DESCRIBE.
+ * lib/m4sugar/m4sh.m4 (AS_FUNCTION_DESCRIBE): New macro.
+ * lib/autotest/general.m4 (AT_INIT): Use it.
+
+2008-10-16 Eric Blake <ebb9@byu.net>
+
+ Speed up m4_qlen with caching.
+ * lib/m4sugar/m4sugar.m4 (_m4_qlen): Renamed from old m4_qlen.
+ (m4_qlen): Cache results for speed.
+
+2008-10-16 Paolo Bonzini <bonzini@gnu.org>
+
+ Add a testcase using more then one language.
+ * tests/compile.at (Multiple languages): New test.
+
+2008-10-16 Paolo Bonzini <bonzini@gnu.org>
+
+ Fix Libtool's config.lt test.
+ * lib/m4sugar/m4sh.m4 (_AS_PREPARE): Disable AS_REQUIRE while
+ expanding it.
+
+2008-10-15 Eric Blake <ebb9@byu.net>
+
+ Break circular require chain in _AS_LINENO_PREPARE.
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Ensure that logging is
+ disabled when reporting LINENO failure, since logging requires
+ LINENO.
+ * doc/autoconf.texi (Initialization Macros): Recommend m4_pushdef,
+ not m4_rename, since the latter is undocumented.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Avoid
+ m4_rename, as it does not yet handle pushdef stacks.
+ Reported by Ralf Wildenhues.
+
+2008-10-15 Eric Blake <ebb9@byu.net>
+
+ Cleanups to previous patches.
+ * doc/autoconf.texi (Portable Shell): Minor edits.
+ (Limitations of Builtins): Touch up wording.
+ * lib/m4sugar/m4sh.m4 (AS_LINENO_PUSH): Nuke trailing whitespace.
+ (_AS_SHELL_SANITIZE): Wrap comments less than 80 columns.
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Updates to shell portability documentation.
+ * doc/autoconf.texi: Updates all references to "Portable Shell" and
+ "Limitations of Builtins" to use three-argument commands.
+ (Programming in M4sh): Document AS_ECHO, AS_ECHO_N, AS_UNSET.
+ (Portable Shell): Move here discussion about "Where is the POSIX
+ shell?" Mention that M4sh provides a SVR2 shell and takes care
+ of unsetting variables if necessary. Talk about M4sh and not only
+ Autoconf-generated scripts.
+ (Special Shell Variables): Talk about M4sh and not only
+ Autoconf-generated scripts. Don't talk about things that Autoconf
+ does not do. Mention problems of $LINENO with shell functions.
+ (Limitations of Builtins). Mention AS_ECHO and AS_ECHO_N. Move
+ discussion of eval bugs before discussion on proper use of eval.
+ Mention AS_IF. Reword why not to use "shift N". Mention "foo=;
+ unset foo" trick. Include M4sh code that unsets MAIL for Bash 2.01.
+ * NEWS: Update list of documented M4sh macros.
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Assume a (possibly buggy) `unset' is present after a
+ `better shell' was found.
+ * lib/autoconf/general.m4 (_AC_CACHE_DUMP): Use AS_UNSET.
+ * lib/autoconf/programs.m4 (AC_PROG_SED): Use AS_UNSET.
+ * lib/m4sugar/m4sh.m4 (_AS_UNSET_PREPARE): Provide $as_unset as an
+ alias for AS_UNSET, for backwards compatibility.
+ (_AS_DETECT_BETTER_SHELL): Set BASH_ENV and ENV to /dev/null in case
+ the shell does not support unset.
+ (_AS_SHELL_SANITIZE): Work around Bash 2.01 bugs. Unset BASH_ENV.
+ (AS_INIT, _AS_PREPARE, AS_PREPARE): Call it.
+ (AS_UNSET): Assume it is there but it might fail if the variable is
+ not set. Use it throughout instead of $as_unset.
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Turn AS_SHELL_SANITIZE into a for-Libtool-only wrapper.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_REQUIRED, _AS_DETECT_SUGGESTED): Remove
+ m4_require of _AS_DETECT_BETTER_SHELL.
+ (_AS_CLEANUP): Add it here.
+ (_AS_DETECT_BETTER_SHELL): Just expand the test instead of appending it
+ to _AS_CLEANUP.
+ (_AS_SHELL_SANITIZE): New name of the old AS_SHELL_SANITIZE macro.
+ (AS_SHELL_SANITIZE): New macro hacking around Libtool misuse.
+ (AS_PREPARE): Use _AS_SHELL_SANITIZE.
+ (AS_INIT): Add m4_provide of itself.
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Use "test x$foo = xyes" to avoid upsetting Libtool's sh.test.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL, _AS_SHELL_FN_WORK): Use
+ "test x$foo = xyes".
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Trim down the size of the better-shell test.
+ * lib/m4sugar/m4sh.at (_AT_DETECT_BETTER_SHELL): Store the common
+ snippets into shell variables.
+ (_AS_RUN): Rewrite.
+
+2008-10-15 Paolo Bonzini <bonzini@gnu.org>
+
+ Support a stack of LINENO values for AS_MESSAGE.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_LOG): If defined, use $as_lineno as
+ the line number emitted to the log file.
+ (AS_LINENO_PUSH, AS_LINENO_POP): New.
+ * tests/m4sh.at (LINENO Stack): New test.
+
+2008-10-14 Eric Blake <ebb9@byu.net>
+
+ Correct previous patch.
+ * doc/autoconf.texi (Shell Functions): Bash obeys Posix, after
+ all.
+
+ Document shell function environment pitfall.
+ * doc/autoconf.texi (Shell Functions): Document bugs in bash,
+ Solaris /bin/sh.
+
+2008-10-14 Paolo Bonzini <bonzini@gnu.org>
+
+ Use m4_require to implement AS_REQUIRE.
+ * lib/m4sugar/m4sugar.m4 (_m4_require_call): Accept a third argument.
+ (m4_require): Pass it.
+ (m4_divert_require): New.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Rewrite using m4_divert_require.
+ Remove comment about differences with m4_require.
+ * tests/m4sh.at (AS_REQUIRE_SHELL_FN and m4_require): Update to test
+ the expected behavior.
+ (Nested AS_REQUIRE_SHELL_FN): New test.
+
+2008-10-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Test AS_LINENO_PREPARE.
+ * tests/m4sh.at: Use documented AS_LINENO_PREPARE.
+
+2008-10-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Test AS_ME_PREPARE.
+ * tests/m4sh.at (as_me): New test.
+
+2008-10-13 Paolo Bonzini <bonzini@gnu.org>
+
+ Add and document AS_INIT_GENERATED.
+ * lib/m4sugar/m4sh.m4 (AS_INIT_GENERATED): New.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Use it.
+ * doc/autoconf.texi (Initialization macros): Document it.
+
+2008-10-13 Eric Blake <ebb9@byu.net>
+
+ Use consistent shell function style.
+ * lib/m4sugar/m4sh.m4 (_AS_PREPARE, AS_REQUIRE_SHELL_FN)
+ (_AS_SHELL_FN_WORK): Imitate GNU Coding Standards for C
+ functions.
+
+2008-10-13 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Place names of
+ contributors under m4 rather than shell comments.
+
+2008-10-10 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (AS_ME_PREPARE, AS_LINENO_PREPARE): New.
+ * doc/autoconf.texi (Initialization macros): Document them.
+ (Portable Shell): Refer to AS_LINENO_PREPARE.
+ * NEWS: Mention them.
+
+ * bin/autoconf.as: Invoke AS_ME_PREPARE.
+ * lib/autotest/general.m4: Likewise.
+
+2008-10-10 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (Programming in M4sh): Make its own chapter.
+
+2008-10-10 Eric Blake <ebb9@byu.net>
+
+ Fix _AS_MKDIR_P usage.
+ * lib/m4sugar/m4sh.m4 (_AS_MKDIR_P): Correct documentation to
+ match implementation.
+ (_AS_PREPARE, _AS_MKDIR_P_PREPARE): Adjust callers.
+ * doc/autoconf.texi (Programming in M4sh) <AS_MKDIR_P>: Tweak
+ wording to better match behavior.
+
+2008-10-10 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi: Be less wary of shell functions.
+ * NEWS: Document the increased use of shell functions.
+
+2008-10-10 Paolo Bonzini <bonzini@gnu.org>
+
+ * m4sugar/m4sh.m4 (_AS_MKDIR_P): New, from AS_MKDIR_P. Adjust
+ meaning of as_mkdir_p to be `false' or a full `mkdir -p' command.
+ (AS_MKDIR_P): Just dispatch to as_func_mkdir_p.
+ (_AS_PREPARE): Define shell functions.
+ (_AS_MKDIR_P_PREPARE): Set as_mkdir_p according to the above change.
+ Define shell functions.
+
+2008-10-09 Eric Blake <ebb9@byu.net>
+
+ Only prepare $as_me if it will be used.
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Avoid unconditional
+ preparation.
+ (_AS_ECHO_LOG): Depend on $LINENO preparation.
+ (AS_MESSAGE): Depend on $as_me preparation.
+ (AS_TMPDIR): Use AS_ERROR, rather than a hand-rolled copy.
+
+2008-10-09 Paolo Bonzini <bonzini@gnu.org>
+
+ * m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Delay setting as_me
+ until the M4SH-INIT diversion using _AS_ME_PREPARE.
+ (_AS_PREPARE): Invoke _AS_EXPR_PREPARE before _AS_BASENAME_PREPARE
+ and _AS_DIRNAME_PREPARE, and _AS_BASENAME_PREPARE and _AS_ME_PREPARE
+ before _AS_LINENO_PREPARE.
+ (AS_PREPARE): Include all the AS_REQUIREs manually.
+ (_AS_ME_PREPARE): New.
+ (_AS_LINENO_PREPARE): Use m4_defun.
+
+2008-10-09 Paolo Bonzini <bonzini@gnu.org>
+
+ * m4sugar/m4sh.m4 (_AS_BASENAME_EXPR, _AS_DIRNAME_EXPR): Do not
+ require _AS_EXPR_PREPARE.
+ (_AS_BASENAME_PREPARE, _AS_DIRNAME_PREPARE): Do it here.
+ (_AS_PREPARE): Add _AS_BASENAME_PREPARE.
+
+2008-10-08 Eric Blake <ebb9@byu.net>
+
+ Resync from gnulib.
+ * cfg.mk (cvs_executable_files, cvs_files): Rewrite...
+ (fetch): ...into new target.
+ (executable-update): Delete, now that it is unused.
+ * maint.mk (update, local_updates, cvs_files, gnulib_repo)
+ (wget-update, cvs-update): Likewise.
+ * HACKING (Update the foreign files): Document new procedure.
+ * GNUmakefile: Resync from upstream, via new 'make fetch'.
+ * build-aux/config.guess: Likewise.
+
+2008-10-08 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_SPY): Remove.
+ (AS_INIT): Do not call it.
+
+2008-10-08 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Expand
+ _AS_UNSET_PREPARE in M4SH-SANITIZE.
+
+2008-10-08 Eric Blake <ebb9@byu.net>
+
+ Avoid repeating required shell tests in suggested set.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_REQUIRED, _AS_DETECT_SUGGESTED):
+ Use m4_set, rather than m4_expand_once/m4_append.
+ (_AS_DETECT_SUGGESTED): Adjust to new storage layout, and filter
+ required tests out of suggested tests.
+ Reported by Paolo Bonzini.
+
+2008-10-08 Paolo Bonzini <bonzini@gnu.org>
+
+ Add m4sh keyword to all m4sh.at tests.
+ * tests/m4sh.at: Add m4sh keyword to all tests. Fix comment
+ pastos.
+
+2008-10-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Document AS_VERSION_COMPARE.
+ * doc/autoconf.texi (Programming in M4sh): Document
+ AS_VERSION_COMPARE.
+ * NEWS: Update.
+
+ Do not write to testsuite log fd before initialization.
+ * lib/autotest/general.m4 (AS_MESSAGE_LOG_FD, AT_JOB_FIFO_FD):
+ Define fds only when initializing the log fd so early error
+ messages do not try to write to it.
+ * tests/autotest.at (Startup error messages): New test.
+ * NEWS: Document this 2.63 regression.
+
+2008-10-07 Eric Blake <ebb9@byu.net>
+
+ Ensure _AS_CLEANUP is defined.
+ * lib/m4sugar/m4sh.m4 (_AS_CLEANUP): Give initial definition.
+ * tests/m4sh.at (AS@&t@_INIT cleanup): Expose the need for this.
+
+ Improve m4sh maintainability.
+ * lib/m4sugar/m4sh.m4: Sort macros for sanitizing the shell; no
+ code change.
+
+ Fix m4 quoting in previous patch.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE_SHELL_FN): Determine diversion
+ name prior to invoking AS_REQUIRE.
+ Reported by Ralf Wildenhues.
+
+2008-09-18 Paolo Bonzini <bonzini@gnu.org>
+ and Eric Blake <ebb9@byu.net>
+
+ Add a separate diversion for shell functions.
+ * lib/m4sugar/m4sh.m4 (M4SH-INIT-FN): New diversion.
+ (AS_REQUIRE): Accept diversion parameter.
+ (AS_REQUIRE_SHELL_FN): Use it.
+
+2008-10-06 Eric Blake <ebb9@byu.net>
+
+ Add m4_default_quoted.
+ * lib/m4sugar/m4sugar.m4 (m4_default_quoted): New macro.
+ (m4_for, m4_expand_once, m4_text_wrap, m4_text_box): Use it.
+ * doc/autoconf.texi (Conditional constructs): Document it.
+ * NEWS: Likewise.
+
+ Fix build with case-insensitive make, again.
+ * Makefile.am (pkgdata_DATA): Protect by MAKE_CASE_SENSITIVE.
+ Reported via Keith Marshall, originally by newthinker in
+ <http://thread.gmane.org/gmane.comp.gnu.mingw.user/27725>.
+
+2008-10-06 Bruno Haible <bruno@clisp.org>
+
+ Warn about /usr/ucb on Solaris.
+ * doc/install.texi (Particular Systems): Recommend putting
+ /usr/ucb late in PATH, if at all.
+
+2008-10-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix more testsuite hang corner cases.
+ * lib/autotest/general.m4: Use the serial code path if no test
+ is to be run.
+ * tests/autotest.at (parallel test execution): Test -j and -jN
+ with `-k notmatched'.
+
+2008-10-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix hang with `testsuite -k notmatched'.
+ * lib/autotest/general.m4: Do not reset $at_jobs if it is equal
+ to one. Fixes hang with `-k notmatched'.
+
+2008-10-02 Eric Blake <ebb9@byu.net>
+
+ Document more binary file portability traps.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Remind
+ reader that NUL and sed don't always mix.
+ <tr>: Mention Solaris /usr/ucb/tr bug with \0.
+
+2008-10-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Implement parallel Autotest test execution: testsuite --jobs.
+ * lib/autotest/general.m4 (AT_JOB_FIFO_FD): New macro.
+ (AT_INIT): <at_jobs>: New variable.
+ Accept -j, -jN, --jobs[=N], document them in --help output.
+ Implement parallel driver loop using a FIFO, enabled with --jobs
+ and if mkfifo works; otherwise, fall back to sequential loop.
+ (AT_SETUP): Store, do not output summary progress line if
+ parallel.
+ * tests/autotest.at (parallel test execution, parallel truth)
+ (parallel fallacy, parallel skip): New tests.
+ * doc/autoconf.texi (testsuite Invocation): Document -j, --jobs,
+ the mkfifo requirement, and that --errexit may cause concurrent
+ jobs to finish.
+ * NEWS: Update.
+
+2008-09-20 Eric Blake <ebb9@byu.net>
+
+ Fix sample isinf definition.
+ * doc/autoconf.texi (Function Portability) <isinf>: Filter out NaN
+ first.
+ * THANKS: Update.
+ Reported by David Cournapeau.
+
+2008-09-16 Eric Blake <ebb9@byu.net>
+
+ Fix Erlang regression, introduced 2006-11-17.
+ * lib/autoconf/erlang.m4 (AC_LANG(Erlang)): Avoid M4 comment
+ caused by underquoting.
+ * NEWS: Mention this fix.
+ * THANKS: Update.
+ Reported by BJ Terry.
+
+2008-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (AC_CONFIG_AUX_DIRS): Improve a bit.
+
+ Mention Solaris sh ':' redirection bug.
+ * doc/autoconf.texi (File Descriptors): Redirecting ':'
+ in a loop causes bogus optimization with Solaris sh.
+
+2008-09-10 Eric Blake <ebb9@byu.net>
+
+ Avoid testsuite bug when autom4te cache is disabled by user.
+ * tests/tools.at (autoconf: forbidden tokens, basic): Enable
+ cache, even if user normally disabled it.
+ Reported by Bruno Haible.
+
+ Avoid testsuite bug in presence of verbose config.site.
+ * tests/base.at (Input/Output): Nullify config.site during test.
+ Reported by Bob Friesenhahn.
+
+2008-09-09 Eric Blake <ebb9@byu.net>
+
+ Release Version 2.63.
+ * NEWS: Mention the release.
+
+ Formatting tweaks to the manual.
+ * doc/autoconf.texi (Introduction, Systemology)
+ (File System Conventions, Portable C and C++)
+ (Floating Point Portability): Allow URLs to split as needed.
+ (Indices): Add entries, to work around texinfo bug on indices that
+ start too close to a page break.
+ (Particular Functions): Mention ftello.
+ (Introduction, Language Choice): Use @enddots at sentence end.
+
+ Resync from gnulib.
+ * cfg.mk (cvs_executable_files, cvs_files): Update list of files,
+ although for now, they are still manually sync'd.
+ * build-aux/gnupload: Update.
+ * build-aux/config.sub: Likewise.
+ * GNUmakefile: Likewise.
+
+2008-09-06 Eric Blake <ebb9@byu.net>
+
+ Mention that Automake already supports VPATH.
+ * doc/autoconf.texi (Build Directories): Details in this section
+ only apply to users avoiding automake.
+ * THANKS: Update.
+ Reported by Matej Tyc.
+
+ Relax tone when warning about cross-compiler names.
+ * lib/autoconf/programs.m4 (_AC_TOOL_WARN): Support cross-compiles
+ with poorly named tools; the issue has been reported too many
+ times in the last four years to pull support.
+ * doc/autoconf.texi (Specifying Names, Generic Programs): Update
+ documentation accordingly.
+ * THANKS: Update.
+ Reported by Josef Tran and others, wording suggested by Ralf
+ Wildenhues.
+
+2008-09-01 Eric Blake <ebb9@byu.net>
+
+ Improve AC_C_BIGENDIAN.
+ * doc/autoconf.texi (C Compiler) <AC_C_BIGENDIAN>: Mention that
+ universal builds require a config header.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Enhance comments. Check
+ AH_HEADER at the last possible moment, so that users can use
+ AC_CONFIG_HEADER after this macro.
+ Reported by Stepan Kasal.
+
+ Fix manual date information.
+ * doc/autoconf.tex: UPDATED refers to the day the manual was
+ built, not the release date of Autoconf.
+ Based on a bison patch by Akim Demaille.
+
+2008-08-27 Eric Blake <ebb9@byu.net>
+
+ Fix off-by-one bug in _m4_shiftn.
+ * lib/m4sugar/foreach.m4 (_m4_shiftn): Handle case when shifting
+ all arguments.
+ * tests/m4sugar.at (M4 loops): Test it.
+ Reported by Akim Demaille.
+
+2008-08-26 Eric Blake <ebb9@byu.net>
+
+ Improve INSTALL formatting.
+ * doc/install.texi [!autoconf]: Ensure first paragraphs are
+ indented like all others in a plain text rendering.
+ * Makefile.am ($(srcdir)/INSTALL): Ensure plaintext formatting.
+ Reported by Bruno Haible.
+
+2008-08-26 Stepan Kasal <skasal@redhat.com>
+
+ Check for case sensitive make.
+ * m4/make-check.m4 (AC_PROG_MAKE_CASE_SENSITIVE): New macro,...
+ * configure.ac: ... called here.
+ * Makefile.am ($(abs_srcdir)/INSTALL, INSTALL): Return to...
+ ($(srcdir)/INSTALL): ...this, but enclose the rule in
+ "if MAKE_CASE_SENSITIVE".
+
+2008-08-26 Eric Blake <ebb9@byu.net>
+
+ Update invocation documentation.
+ * doc/autoconf.texi (autoscan Invocation): Mention --debug.
+ (autoreconf Invocation): Mention -v.
+ (autom4te Invocation): Tie --freeze to -F, not -f.
+ (autoupdate Invocation): Mention --prepend-include.
+ * doc/install.texi (configure Invocation): Mention --help=short,
+ --help=recursive, -n/--no-create, --prefix. Avoid TABs.
+ * bin/autoscan.in ($help): Omit space before `...'.
+ * bin/ifnames.in ($help): Likewise.
+ * bin/autoconf.as (Usage): Likewise.
+ * bin/autoreconf.in ($help): Likewise.
+ * bin/autoheader.in ($help): Likewise.
+ * bin/autom4te.in ($help): Likewise.
+ * bin/autoupdate.in ($help): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Use
+ `[OPTION]...', rather than `[OPTIONS]'. Mention --silent. Indent
+ --file correctly.
+
+ Don't let frozen __m4_version__ break downgrade to m4 1.4.x.
+ * bin/autom4te.in: Adjust comments, now that we rely on 1.4.5+.
+ (files_to_options): Avoid inheriting __m4_version__ from frozen
+ file if current M4 does not support it.
+
+2008-08-25 Eric Blake <ebb9@byu.net>
+
+ Adjust to recent m4 1.6 change to support m4_debugmode(d).
+ * lib/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine): Move
+ freeze-time decision of using faster 1.6 implementation...
+ (m4_init): ...to a runtime decision, and add use of new debugmode
+ flag.
+
+2008-08-22 Peter O'Gorman <pogma@thewrittenword.com>
+
+ Limit AC_C_BIGENDIAN univeral checks to Mac OS X.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Limit the check to
+ __APPLE_CC__ with possible -arch flags.
+ * NEWS: Document it.
+
+2008-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Fix typo.
+
+2008-08-22 Eric Blake <ebb9@byu.net>
+
+ * TODO: Add an item for additional m4sugar looping constructs.
+ Suggested by Ralf Wildenhues.
+
+ Add reminder to keep dual implementations in sync.
+ * lib/m4sugar/m4sugar.m4: Add comments.
+ * lib/m4sugar/foreach.m4: Likewise.
+ Suggested by Ralf Wildenhues.
+
+2008-08-22 Peter Eisentraut <peter_e@gmx.net> (tiny change)
+
+ Format warning and error messages to match GCS.
+ * lib/autoconf/general.m4 (_AC_INIT_DIRCHECK)
+ (_AC_INIT_PARSE_ARGS, _AC_CACHE_DUMP): Start warning and error
+ messages with a lowercase letter, end them without punctuation.
+ * lib/autoconf/lang.m4 (AC_NO_EXECUTABLES): Likewise.
+ * lib/autoconf/libs.m4 (AC_PATH_X): Likewise.
+ * lib/autoconf/status.m4 (AC_OUTPUT, _AC_OUTPUT_MAIN_LOOP):
+ Likewise.
+ * tests/fortran.at (GNU Fortran): Likewise.
+ * tests/torture.at (Deep Package): Likewise.
+
+2008-08-21 Eric Blake <ebb9@byu.net>
+
+ Avoid extra side effects in m4sugar list expansion.
+ * lib/m4sugar/m4sugar.m4 (m4_mapall_sep, m4_list_cmp): Wrap
+ around...
+ (_m4_mapall_sep, _m4_list_cmp_raw): ...new helpers, to avoid
+ duplicate side effects.
+ (m4_version_compare): Adjust caller.
+ * lib/m4sugar/foreach.m4 (m4_list_cmp): Rename...
+ (_m4_list_cmp_raw): ...to match m4sugar.
+ * doc/autoconf.texi (Looping constructs): Document the behavior of
+ side effects.
+ * tests/m4sugar.at (M4 loops, m4@&t@_map, m4@&t@_version_compare):
+ Ensure only one side effect.
+ (recursion): Fix test typo.
+ Reported by Ralf Wildenhues.
+
+2008-08-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * TODO: Add item for compiler default flags.
+ Suggested by Bruno Haible.
+
+ * tests/m4sh.at (AS_IF and AS_CASE): Set the expansion limit
+ back to 1000.
+
+2008-08-21 Eric Blake <ebb9@byu.net>
+
+ Formatting improvements.
+ * doc/autoconf.texi: Use @file and @command, rather than @code,
+ where appropriate.
+
+ Document another make bug.
+ * doc/autoconf.texi (The Make Macro SHELL): Mention bug in BSD
+ make, GNU make <= 3.80.
+
+ Tweak wording about SHELL in Makefile.
+ * doc/autoconf.texi (The Make Macro SHELL): Stronger wording on
+ the importance of proper SHELL settings.
+ Reported by Bruno Haible, in
+ http://lists.gnu.org/archive/html/bug-libtool/2008-04/msg00029.html.
+
+2008-08-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid timestamp races for updated input.
+ * tests/m4sh.at (AS_IF and AS_CASE): Use `autom4te --force' for
+ second script.
+ * tests/tools.at (autotools and whitespace in file names): Add
+ --force for repeated invocations.
+
+2008-08-20 Bruno Haible <bruno@clisp.org>
+
+ Add section to INSTALL about particular systems.
+ * doc/install.texi (Particular systems): New node.
+ * doc/autoconf.texi: Adjust menus.
+
+2008-08-19 Bruno Haible <bruno@clisp.org>
+ and Peter O'Gorman <peter@pogma.com>
+
+ Mention universal binaries in INSTALL.
+ * doc/install.texi (Compiling For Multiple Architectures): Explain
+ how to create universal binaries on MacOS X.
+
+2008-08-19 Jim Meyering <jim@meyering.net>
+ Eric Blake <ebb9@byu.net>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid shell parse errors after interrupt due to empty ``.
+ * doc/autoconf.texi (Shell Substitutions): Document the issue.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_IF): New function.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNC): Use it in place of
+ "test AS_VAR_GET([...]) = yes"
+ * lib/autoconf/general.m4 (AC_CHECK_FILE, AC_CHECK_DECL): Likewise.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Likewise.
+ (_AC_CHECK_HEADER_NEW, _AC_CHECK_HEADER_OLD): Likewise.
+ (_AC_CHECK_HEADER_DIRENT): Likewise.
+ * lib/autoconf/libs.m4 (AC_CHECK_LIB): Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW, AC_CHECK_MEMBER): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Use
+ temporary variable to work around the issue.
+ * tests/foreign.at (Libtool): Quote result of command
+ substitution.
+
+2008-08-18 Eric Blake <ebb9@byu.net>
+
+ Test m4_transform without tickling shell bugs.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Relax test to
+ something more manageable.
+ * tests/m4sugar.at (recursion): Move stress test of
+ m4_transform_pair here.
+ Reported by Ralf Wildenhues.
+
+ Let 'git diff' give better context for doc updates.
+ * .gitattributes (*.texi*): Add new entry.
+ * README-hacking: Mention how to use it.
+ Inspired by a coreutils patch by Jim Meyering.
+
+2008-08-15 Eric Blake <ebb9@byu.net>
+
+ Fix m4_map regression from 2007-10-16.
+ * lib/m4sugar/m4sugar.m4 (_m4_apply): New macro.
+ (m4_map): Ignore empty sublists. For a list consisting of only an
+ empty sublist, this restores 2.61 behavior of being a no-op.
+ (m4_map_sep): Likewise, and expand separator.
+ (m4_mapall, m4_mapall_sep): New macros, to regain 2.62 behavior.
+ (_m4_map): Rewrite, to be common base for all four variants.
+ * lib/m4sugar/foreach.m4 (_m4_map): Adjust to new prototype.
+ * tests/m4sugar.at (m4@&t@_map): Add tests.
+ * doc/autoconf.texi (Looping constructs) <m4_map>: Document new
+ macros, and mention ramifications of expanded separator.
+ * NEWS: Mention the change.
+
+2008-08-14 Eric Blake <ebb9@byu.net>
+
+ Implement m4_transform_pair, to speed up AS_IF.
+ * lib/m4sugar/m4sugar.m4 (m4_transform, m4_transform_pair): New
+ macros, undocumented for now.
+ * lib/m4sugar/foreach.m4 (m4_transform, m4_transform_pair): Also
+ the m4 1.4.x counterparts.
+ * lib/m4sugar/m4sh.m4 (AS_IF, AS_CASE): Use it.
+ * tests/m4sh.at (AS@&t@_IF and AS@&t@_CASE): Test it.
+
+2008-08-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_PATH_TARGET_TOOL)
+ (AC_CHECK_TARGET_TOOL, AC_CHECK_TARGET_TOOLS): Require, do not
+ warn about previous AC_CANONICAL_TARGET.
+ (AC_CHECK_TARGET_TOOL): Add missing `$' making the macro
+ unusable in the non-cross-compiling case.
+ * NEWS, THANKS: Update.
+ Report by Dave Erickson.
+
+2008-08-12 Eric Blake <ebb9@byu.net>
+
+ Optimize m4_bmatch.
+ * lib/m4sugar/foreach.m4 (m4_bmatch): Provide linear
+ implementation for m4 1.4.x.
+ * tests/m4sugar.at (m4@&t@_bmatch): New test.
+ (recursion): Test the linear nature.
+ * NEWS: Document the fix.
+
+ Fix m4_cond corner case.
+ * lib/m4sugar/foreach.m4 (_m4_cond): Ensure alternate
+ implementation allows concatenation with subsequent text.
+ * tests/m4sugar.at (m4@&t@_cond): Enhance test.
+
+ Add test for m4_cond.
+ * tests/m4sugar.at (m4@&t@_cond): New test.
+ Reported by Ralf Wildenhues.
+
+2008-08-06 Eric Blake <ebb9@byu.net>
+
+ Fix autoheader 2.62 regression on AC_DEFINE([__EXTENSIONS__]).
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Use a
+ unique key for the AH_VERBATIM.
+ * tests/c.at (AC_USE_SYSTEM_EXTENSIONS): New test.
+ * NEWS: Mention the fix.
+ Reported by Andreas Schwab, analyzed by Stepan Kasal.
+
+ Add linear m4_cond for m4 1.4.x.
+ * lib/m4sugar/m4sugar.m4 (m4_cond): Split into...
+ (_m4_cond): ...this, for fewer macros per iteration.
+ * lib/m4sugar/foreach.m4 (_m4_cond): New implementation.
+ * tests/m4sugar.at (recursion): Test it.
+ * NEWS: Document the linear guarantee.
+
+ Speed up diversion handling.
+ * lib/m4sugar/m4sugar.m4 (m4_divert, m4_divert_push)
+ (m4_divert_pop, m4_divert_text): Avoid dnl for fewer macro
+ expansions.
+
+ AC_C_CHAR_UNSIGNED is not strictly necessary.
+ * doc/autoconf.texi (C Compiler) <AC_C_CHAR_UNSIGNED>: Mention a
+ portable alternative to this macro.
+ * THANKS: Update.
+ Reported by Hallvard B Furuseth.
+
+ Update some files from upstream.
+ * GNUmakefile: Update.
+ * build-aux/announce-gen: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/git-version-gen: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * build-aux/vc-list-files: Likewise.
+ * doc/make-stds.texi: Likewise.
+ * doc/standards.texi: Likewise.
+
+2008-08-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix AC_CONFIG_FILES([$var]) 2.62 regression.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Flatten
+ whitespace in $ac_config_files and $ac_config_headers.
+ * tests/torture.at (Parameterized AC_CONFIG_FILES): New test.
+ Report by Andreas Schwab and Per Øyvind Karlsen.
+ * THANKS: Update.
+
+2008-07-30 Eric Blake <ebb9@byu.net>
+
+ Fix bugs in previous version of m4_bpatsubsts.
+ * lib/m4sugar/foreach.m4 (_m4_bpatsubsts): Don't expand $1, and
+ allow concatenation with subsequent text.
+ * tests/m4sugar.at (m4@&t@_bpatsubsts): Enhance test.
+
+2008-07-29 Eric Blake <ebb9@byu.net>
+
+ Add linear m4_bpatsubsts for m4 1.4.x.
+ * lib/m4sugar/m4sugar.m4 (m4_bpatsubsts): Match documentation
+ about anchors, even for only one substitution.
+ * lib/m4sugar/foreach.m4 (_m4_bpatsubsts): New implementation.
+ * doc/autoconf.texi (Conditional constructs) <m4_bpatsubsts>:
+ Clarify behavior with regard to quoting.
+ * tests/m4sugar.at (recursion): Test scaling of m4_bpatsubsts.
+ (m4@&t@_bpatsubsts): New test.
+ * NEWS: Document the linear guarantee.
+
+ Tweak m4_do semantics.
+ * lib/m4sugar/m4sugar.m4 (m4_do): Don't concat final argument with
+ subsequent text.
+ * lib/m4sugar/foreach.m4 (m4_do): Don't concat intermediate
+ arguments, and avoid infinite loop.
+ * doc/autoconf.texi (Evaluation Macros) <m4_do>: Document the
+ behavior.
+ * tests/m4sugar.at (m4@&t@_do): New test.
+
+ Optimize m4_for.
+ * lib/m4sugar/m4sugar.m4 (m4_for): Use fewer macros.
+ (_m4_for): Take additional parameter, for fewer m4_indir calls.
+ * lib/m4sugar/foreach.m4 (_m4_foreach, _m4_shiftn, m4_do)
+ (m4_reverse, _m4_list_pad, _m4_list_cmp): Adjust all callers.
+ * doc/autoconf.texi (Looping constructs) <m4_for>: Document subtle
+ semantic change caused by the optimization.
+ * tests/m4sugar.at (M4 loops): Test the new semantics.
+
+ One more m4_list_cmp tweak.
+ * lib/m4sugar/m4sugar.m4 (_m4_list_cmp_1): Don't defer shift.
+ * lib/m4sugar/foreach.m4 (m4_list_cmp): Fix comment.
+ * tests/m4sugar.at (recursion): Test both directions of list
+ disparity.
+
+ Add m4_reverse, and improve m4_list_cmp.
+ * lib/m4sugar/m4sugar.m4 (m4_reverse): New macro.
+ (m4_list_cmp): Rewrite to give linear behavior with M4 1.6 on an
+ m4_reverse'd list.
+ * lib/m4sugar/foreach.m4 (m4_reverse): Add the M4 1.4.x
+ counterpart.
+ * tests/m4sugar.at (recursion): Test it.
+ * doc/autoconf.texi (Evaluation Macros) <m4_reverse>: Document
+ it.
+ (Text processing Macros) <m4_append>: Cross-reference to m4_set.
+ * NEWS: Mention new macro.
+
+2008-07-28 Eric Blake <ebb9@byu.net>
+
+ Avoid _m4_shiftn for m4 1.6 speedup.
+ * lib/m4sugar/m4sugar.m4 (m4_foreach, _m4_foreach, m4_map)
+ (_m4_map, m4_map_sep): Rewrite recursion to use one less m4_if.
+ * lib/m4sugar/foreach.m4 (_m4_map): Accomodate changed signature.
+
+ Implement O(n) unique element set creation.
+ * lib/m4sugar/m4sugar.m4 (m4_set_add, m4_set_add_all)
+ (m4_set_contains, m4_set_contents, m4_set_delete)
+ (m4_set_difference, m4_set_dump, m4_set_empty, m4_set_foreach)
+ (m4_set_intersection, m4_set_list, m4_set_listc, m4_set_remove)
+ (m4_set_size, m4_set_union): New macros.
+ * lib/m4sugar/foreach.m4 (m4_set_add_all): Add O(n) fallback for
+ m4 1.4.x.
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS, AC_SUBST): Use
+ new m4_set API for the set most likely to be large.
+ * doc/autoconf.texi (Set manipulation Macros): New node.
+ * NEWS: Mention new macros.
+ * tests/m4sugar.at (m4@&t@_set): New test.
+
+2008-07-25 Eric Blake <ebb9@byu.net>
+
+ Avoid infinite aclocal loop.
+ * lib/m4sugar/m4sugar.m4 (m4_init): Bypass m4_include tracing, so
+ that aclocal doesn't insist on finding m4sugar/foreach.m4.
+
+ Provide O(n) replacement macros for M4 1.4.x.
+ * lib/m4sugar/foreach.m4: New file.
+ (m4_foreach, m4_case, _m4_shiftn, m4_do, m4_dquote_elt, _m4_map)
+ (m4_join, m4_joinall, m4_list_cmp, _m4_minmax): Replace m4sugar
+ macros based on $@ recursion [fast on M4 1.6, but quadratic on M4
+ 1.4.x] with versions based on m4_for/m4_foreach [slow on 1.6, but
+ linear on 1.4.x].
+ * lib/m4sugar/m4sugar.m4 (m4_init): Dynamically load new file if
+ older M4 is assumed.
+ (m4_map_sep): Optimize.
+ (m4_max, m4_min): Refactor, by adding...
+ (_m4_max, _m4_min, _m4_minmax): ...more efficient helpers.
+ (m4_defn, m4_popdef, m4_undefine): Use foreach recursion.
+ * lib/m4sugar/Makefile.am (dist_m4sugarlib_DATA): Distribute new
+ file.
+ * tests/m4sugar.at (M4 loops): Add a stress test that takes
+ forever if m4_foreach and friends are quadratic.
+ * NEWS: Mention this.
+
+2008-07-21 Eric Blake <ebb9@byu.net>
+
+ Ignore undefined macros, necessary with m4 1.6.
+ * bin/autoupdate.in (_au___undefine): New macro,...
+ (_au__undefine): ...wrapped by ifdef to silence m4 warnings.
+ Reported by Ralf Wildenhues.
+
+ Resync with gnulib.
+ * GNUmakefile: Grab from upstream, to fix issue where 'make
+ install' would allow installation of stale version string.
+
+2008-07-19 Eric Blake <ebb9@byu.net>
+
+ Support multiple arguments to m4_defn, m4_popdef, and m4_undefine.
+ * lib/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine): Loop
+ through all variables, per POSIX and newer m4.
+ (_m4_text_wrap): Exploit the looping capabilities.
+ * tests/m4sugar.at (m4@&t@_defn): Test this.
+ * NEWS: Document it.
+ * doc/autoconf.texi (Redefined M4 Macros) <m4_defn, m4_popdef>
+ <m4_undefine>: Likewise.
+
+ Reduce overhead of m4_builtin([defn]).
+ * lib/m4sugar/m4sugar.m4 (_m4_defn, _m4_popdef, _m4_undefine): New
+ internal macros, which are slightly more efficient than
+ m4_builtin([defn]) and company.
+ (m4_defn, m4_popdef, m4_undefine, m4_warn, m4_ifset)
+ (_m4_dumpdefs_up, _m4_dumpdefs_down, _m4_wrap, m4_for)
+ (_m4_divert_n_stack, m4_divert_pop, m4_expansion_stack_push)
+ (m4_expansion_stack_dump, _m4_defun_pro, _m4_defun_epi)
+ (_m4_defun_epi_outer, _m4_require_call, m4_combine, m4_append)
+ (_m4_append_uniq, m4_append_uniq_w, _m4_text_wrap, m4_text_box)
+ (m4_version_prereq): Use them.
+
+ Use warnings from m4 when available.
+ * lib/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine): Don't
+ define slower wrapper if m4 will warn on our behalf; key off of
+ __m4_version__, added alongside the new warnings in m4 1.6.
+ * tests/m4sugar.at (m4@&t@_defn): New test.
+
+2008-07-18 Eric Blake <ebb9@byu.net>
+
+ Add m4_joinall.
+ * lib/m4sugar/m4sugar.m4 (m4_joinall, _m4_joinall): New macros.
+ * tests/m4sugar.at (m4@&t@_join): Test them.
+ * doc/autoconf.texi (Text processing Macros) <m4_join>: Document
+ m4_joinall.
+ * NEWS: Likewise.
+
+2008-07-17 Stepan Kasal <skasal@redhat.com>
+ and Eric Blake <ebb9@byu.net>
+
+ Improve documentation of config.h.in template rules.
+ * doc/autoconf.texi (Header Templates): Mention rules on comments
+ and whitespace, and that the user cannot rely on #undef to survive
+ through config.status.
+
+2008-07-16 Eric Blake <ebb9@byu.net>
+
+ Revert m4_prepend; it is less efficient, and unused by bison.
+ * lib/m4sugar/m4sugar.m4 (m4_prepend, m4_prepend_uniq)
+ (m4_prepend_uniq_w): Delete addition from 2008-07-11.
+ (_m4_grow_uniq_1): Rename back...
+ (_m4_append_uniq): ...to this.
+ * NEWS: Revert NEWS blurb.
+ * doc/autoconf.texi (Text processing Macros) <m4_prepend>: Delete.
+ * tests/m4sugar.at (m4@&t@_prepend): Delete.
+
+2008-07-15 Eric Blake <ebb9@byu.net>
+
+ Avoid failure if version.m4 is omitted but m4_PACKAGE_* unused.
+ * lib/m4sugar/m4sugar.m4 (m4_version_compare): Provide alternate
+ definition for non-Autoconf clients of m4sugar.
+
+2008-07-14 Eric Blake <ebb9@byu.net>
+
+ Tighten bound of potential speed of m4_append.
+ * doc/autoconf.texi (Text processing Macros) <m4_append>
+ <m4_prepend>: If m4 is fixed, m4_append can be linear rather than
+ O(n log n).
+ * lib/m4sugar/m4sugar.m4 (m4_append, m4_append_uniq): Fix comments.
+ Analysis by Bruno Haible.
+
+2008-07-11 Eric Blake <ebb9@byu.net>
+
+ Inherit improvements from bison's fork of m4sugar.
+ * lib/m4sugar/m4sugar.m4 (m4_PACKAGE_VERSION): Ignore failure to
+ find version.texi, since bison does not provide it.
+ (m4_prepend): Add new macro, from bison.
+ (m4_prepend_uniq, m4_prepend_uniq_w): Add new macros, for
+ completeness.
+ (_m4_append_uniq): Rename...
+ (_m4_grow_uniq_1): ...to this to share implementation, and
+ optimize initial assignment.
+ (m4_append_uniq_w): Adjust caller.
+ * NEWS: Document new macros.
+ * doc/autoconf.texi (Text processing Macros) <m4_append>: Mention
+ speed consideration.
+ <m4_prepend>: Document the new prepend variants.
+ * tests/m4sugar.at (m4@&t@_prepend): New test.
+
+ Work around M4 1.6 warning on undefined macros.
+ * lib/m4sugar/m4sugar.m4 (changeword, symbols): Don't rename if
+ not already available as builtins.
+
+2008-07-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (@dvar): Remove trailing newline.
+ (@ovar): Likewise. Fix macro documentation.
+
+2008-07-02 Stepan Kasal <skasal@redhat.com>
+
+ Add quotes to the header of autoscan-generated source.
+ * bin/autoscan.in: Add quotes to AC_PREREQ and AC_INIT.
+
+2008-06-28 Andreas Schwab <schwab@suse.de>
+
+ * doc/autoconf.texi (autoscan Invocation): Fix spacing.
+ (autoconf Invocation): Likewise.
+ (autoreconf Invocation): Likewise.
+ (autoheader Invocation): Likewise.
+ (autom4te Invocation): Likewise.
+
+2008-06-19 Eric Blake <ebb9@byu.net>
+
+ Add comment explaining recent patch.
+ * lib/autotest/general.m4 (AT_INIT) <at_pass_list>: Explain choice
+ of * vs. ? globbing.
+
+2008-06-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINK): Do not warn when not
+ linking a file to itself.
+ Report by Bruno Haible.
+
+2008-06-19 Eric Blake <ebb9@byu.net>
+
+ Resync with gnulib.
+ * GNUmakefile: Grab from upstream, to fix VPATH 'make dist' bug.
+ Reported by Stepan Kasal.
+
+2008-06-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Reorganize autotest files, factorize for parallel execution.
+ * lib/autotest/general.m4 (AS_MESSAGE_LOG_FD): Move definition
+ earlier in the file.
+ (AT_INIT): Create line number cache in
+ $at_suite_dir/at-source-lines.
+ <at_helper_dir>: New directory at-groups below $at_suite_dir.
+ Add comment explaining the new directory structure.
+ (at_func_group_prepare, at_func_group_postprocess): New shell
+ functions to factorize per-test group work. Keep the actual
+ test execution outside of a shell function in order to avoid
+ zsh 4.x exit status bugs.
+ <at_check_line_file, at_status_file, at_stdout, at_stder1>
+ <at_stderr, at_test_source>: Turn these into per-group files
+ below $at_helper_dir. Also store test results there in files
+ named pass, fail, xpass, xfail, skip. Let the parent collect
+ results from $at_helper_dir. Adjust summary statistics
+ computation and result output.
+
+2008-06-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix '#undef variable /* comment */' transform in config headers.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS_PREPARE): For
+ undefined preprocessor macros that are followed by a comment
+ in the header template, do not create nested comments in the
+ output.
+ * tests/torture.at (@%:@define header templates): Extend test.
+ * NEWS: Update.
+ Report by Karsten Hopp <karsten@redhat.com>.
+
+2008-06-09 Eric Blake <ebb9@byu.net>
+
+ Mark AC_TYPE_SIGNAL as obsolete.
+ * lib/autoconf/types.m4 (AC_TYPE_SIGNAL): Switch to AU_DEFUN.
+ * doc/autoconf.texi (Function Portability): Update documentation.
+ (Particular Types): Move AC_TYPE_SIGNAL...
+ (Obsolete Macros): ...here, and mention why.
+ * NEWS: Mention the change.
+
+ Allow lib64 as a default X library location.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): Add lib64.
+ * NEWS: Mention the change.
+ * THANKS: Update.
+ Reported by Brad Walker.
+
+2008-06-05 Eric Blake <ebb9@byu.net>
+
+ Fix regression in AT_KEYWORDS([Macro]), from 2007-10-18.
+ * lib/autotest/general.m4 (AT_KEYWORDS): Expand argument prior to
+ converting it to lower case.
+ * tests/autotest.at (Keywords and ranges): Test this.
+ * NEWS: Document the fix.
+ * THANKS: Update.
+ Reported via Karsten Hopp, by Jochen Schmitt in
+ https://bugzilla.redhat.com/show_bug.cgi?id=449973
+
+2008-06-03 Eric Blake <ebb9@byu.net>
+
+ Fix 'make dist' regression from 2008-05-08.
+ * Makefile.am (INSTALL): Add rule, to accomodate 'make dist' after
+ GNUmakefile's _autoconf rule removes INSTALL.
+
+2008-05-27 Eric Blake <ebb9@byu.net>
+
+ Document Solaris /bin/sh redirection pitfall.
+ * doc/autoconf.texi (File Descriptors): Mention redirection bug.
+
+2008-05-14 Eric Blake <ebb9@byu.net>
+
+ Improve documentation of ! issues.
+ * doc/autoconf.texi (Limitations of Builtins) <!>: Touch up.
+ Reported by Noah Misch.
+
+ Document some FreeBSD shell bugs.
+ * doc/autoconf.texi (Limitations of Builtins) <!>: Mention ! issue
+ in compound pipe commands.
+ <export>: Mention difference of exporting an undefined variable.
+ (Shell Functions): Mention loss of $? in entry to shell functions.
+ Extracted from the git mailing list.
+
+2008-05-13 Stepan Kasal <kasal@ucw.cz>
+
+ Work around MSYS and Cygwin bugs when dealing with trailing space.
+ * tests/atlocal.in (func_sanitize_dir_name): Let atlocal succeed,
+ even when platform bugs are tickled.
+ Reported by Keith Marshall and Eric Blake.
+
+2008-05-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Let AC_MSG_FAILURE report pwd.
+ * lib/autoconf/general.m4 (_AC_ARG_VAR_VALIDATE, AC_MSG_FAILURE):
+ Output $ac_pwd along with fatal failure.
+ * tests/torture.at (Deep Package): Extend test.
+ Reported numerous times against GCC, and probably other packages.
+
+2008-05-12 Eric Blake <ebb9@byu.net>
+
+ Enforce --help and --version compliance.
+ * configure.ac (AM_INIT_AUTOMAKE): Add std-options option.
+
+2008-05-08 Keith Marshall <keithmarshall@users.sourceforge.net> (tiny change)
+
+ Avoid case-insensitive `make install' vs. `INSTALL' conflict.
+ * Makefile.am ($(srcdir)/INSTALL): Replace all references...
+ ($(abs_srcdir)/INSTALL): ...with this.
+
+2008-05-06 Eric Blake <ebb9@byu.net>
+
+ Fix typo.
+ * doc/autoconf.texi (Shell Substitutions): Drop at_ prefix.
+
+ Avoid overfull \hbox.
+ * doc/autoconf.texi (Versioning): Reword to fit line size.
+
+ Document $(( )) pitfalls.
+ * doc/autoconf.texi (Shell Substitutions): Mention octal
+ vs. decimal. Mention autotest's at_func_arith.
+
+ Improve behavior of './testsuite 01'.
+ * lib/autotest/general.m4 (AT_INIT) <at_func_validate_ranges>:
+ Alter usage to eval its arguments, in order to normalize away
+ leading zero. All callers updated.
+ * tests/autotest.at (Keywords and ranges): Test range
+ normalization with leading 0.
+
+2008-04-26 Eric Blake <ebb9@byu.net>
+
+ Mention Solaris /usr/ucb/tr pitfall.
+ * doc/autoconf.texi (Limitations of Usual Tools) <tr>: Add section.
+ Reported by Bruno Haible and Jim Meyering.
+
+2008-04-24 Eric Blake <ebb9@byu.net>
+
+ Mention m4sugar's internal quote strings.
+ * doc/autoconf.texi (Quadrigraphs): Mention alternate quote used
+ in m4sugar, and how to still output it literally.
+ * tests/m4sugar.at (m4@&t@_split): And test it.
+ Reported by Joel E. Denny.
+
+2008-04-23 Eric Blake <ebb9@byu.net>
+
+ Allow unbalanced () in m4_expand.
+ * lib/m4sugar/m4sugar.m4 (m4_expand, _m4_expand): Use more complex
+ quotes.
+ (m4_noquote, _m4_split): Use consistent complex quote.
+ * tests/autotest.at (Left paren, Right paren): Test this.
+ (Parentheses): Ensure new quadrigraphs still work.
+ (AT_CHECK_AT_TITLE_CHAR): All title char tests exercise m4_expand.
+ * NEWS: Mention the fix.
+ * doc/autoconf.texi (Quadrigraphs): Revert mention of macros that
+ require quadrigraphs for ().
+ (Evaluation Macros) <m4_expand>: Relax the restriction against
+ unbalanced ().
+ (Pretty Help Strings) <AS_HELP_STRING>: Likewise.
+ (Writing Testsuites) <AT_SETUP>: Likewise.
+ Reported by Joel E. Denny, fix suggested by Noah Misch.
+
+2008-04-22 Eric Blake <ebb9@byu.net>
+
+ Support unbalanced () in AT_SETUP by adding two new quadrigraphs.
+ * bin/autom4te.in (handle_output): Substitute @{:@ and @:}@.
+ (handle_traces): Likewise.
+ * lib/m4sugar/m4sugar.m4 (m4_qlen): Account for new quadrigraphs.
+ * tests/autotest.at (AT_CHECK_AT_TITLE_CHAR): Add new tests.
+ * doc/autoconf.texi (Quadrigraphs): Document them.
+ (Evaluation Macros) <m4_expand>: Enhance documentation.
+ (Text processing Macros) <m4_text_box>: Document cases where
+ quadrigraphs can help for problemetic unbalanced parentheses.
+ (Pretty Help Strings) <AS_HELP_STRING>: Likewise.
+ (Writing Testsuites) <AT_SETUP>: Likewise.
+ (Limitations of Builtins) <case>: Consolidate text on unbalanced
+ parentheses, and add an example of creative comments.
+ * NEWS: Document the addition.
+ Reported by Joel E. Denny.
+
+2008-04-16 Eric Blake <ebb9@byu.net>
+
+ Document pdksh exec behavior.
+ * doc/autoconf.texi (Limitations of Builtins) <exec>: New
+ subsection.
+ Discovered by Jim Meyering.
+
+2008-04-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autotest.at (AT_CHECK_AT): Allow to pass additional
+ arguments to the inner suite.
+ (errexit, input from stdin): New tests.
+
+2008-04-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Post-release update.
+
+2008-04-10 Eric Blake <ebb9@byu.net>
+
+ AC_AUTOCONF_VERSION might contain arbitrary macro names.
+ * doc/autoconf.texi (Versioning): Mention problem with expansion.
+ * tests/tools.at (autoconf: AC_AUTOCONF_VERSION): Adjust test.
+
+2008-04-09 Slava Sysoltsev <Viatcheslav.Sysoltsev@h-d-gmbh.de> (tiny change)
+
+ Flush buffered output before exit.
+ * bin/autom4te.in (handle_output): Explicitly close file.
+ * THANKS: Update.
+ See http://lists.gnu.org/archive/html/autoconf/2008-04/msg00026.html.
+
+2008-04-08 Eric Blake <ebb9@byu.net>
+
+ Generate web docs for 2.62.
+ * doc/autoconf.texi (Evaluation Macros): Fix typo.
+ (Notices): Use recommended means to escape RCS keyword.
+ * cfg.mk (gnulib_dir): New macro.
+ (web-manual): New target.
+
+2008-04-05 Eric Blake <ebb9@byu.net>
+
+ Release Version 2.62.
+ * NEWS: Mention the release.
+
+2008-04-04 Stepan Kasal <kasal@ucw.cz>
+ and Eric Blake <ebb9@byu.net>
+
+ Return back to GPLv2+, until the text of the exceptions is
+ finalized, reverting the change from 2007-07-03 and the first
+ part of the change from 2007-07-20.
+ * COPYING: Revert to GPLv2.
+ * COPYINGv3: New file, since some auxiliary build tools, used for
+ building autoconf and not installed, are GPLv3.
+ * Makefile.am (EXTRA_DIST): Distribute COPYINGv3.
+ * NEWS: Remove mention of GPLv3.
+ * README: Clarify situation regarding GPLv3.
+
+2008-04-05 Eric Blake <ebb9@byu.net>
+
+ Prepare for release.
+ * maint.mk (announcement): Avoid deleted option.
+ * cfg.mk (release_archive_dir): Use default.
+ * build-aux/gnupload: New file, from automake/gnulib.
+ * Makefile.am (EXTRA_DIST): Distribute it.
+ * .x-sc_two_space_separator_in_usage: New file, to exempt gnupload
+ from syntax check.
+
+2008-04-05 Jim Meyering <meyering@redhat.com>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Work around CR EOL markers on OS/2 (www.ecomstation.com Ecs v2 rc4)
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): When CR
+ is the EOL marker, skip a step that would remove and translate
+ carriage return bytes.
+ * THANKS: Update.
+ Reported by Elbert Pol.
+
+2008-04-05 Eric Blake <ebb9@byu.net>
+
+ Avoid some autoreconf -Wall warnings.
+ * configure.ac: Use proper quoting, to be a good example.
+ (PACKAGE_NAME): Remove setting covered by autoconf.
+ (AM_INIT_AUTOMAKE): Bump automake requirement, for html rules.
+ * doc/Makefile.am (TEXI2DVI): Remove settings covered by
+ automake.
+ (html, autoconf_1.html, standards_1.html): Likewise.
+ (TEXI2HTML, TEXI2HTML_FLAGS): Remove unused macros.
+ * Makefile.am (html): Likewise.
+ * doc/autoconf.texi (Quoting and Parameters): Add missing section
+ name.
+ * tests/Makefile.am (AUTOMAKE_OPTIONS): Intentionally ignore
+ warning about our override, until Automake is fixed.
+ * README-hacking: Document minimum requirements for bootstrap.
+
+2008-04-03 Eric Blake <ebb9@byu.net>
+
+ Fix version number generation in man pages.
+ * Makefile.am (EXTRA_DIST): Distribute .version.
+ (.version): New rule.
+ * man/Makefile.am (common_dep): Depend on .version, not
+ configure.ac.
+ (.x.1): Use package name for version string.
+ * GNUmakefile [!_have-Makefile]: Sync from upstream, again.
+ * build-aux/git-version-gen: Sync from upstream.
+
+ More maintainer tweaks: pass 'make maintainer-distcheck'.
+ * GNUmakefile (_is-dist-target): Sync from upstream.
+ * build-aux/vc-list-files: Sync from upstream, yet again.
+ * tests/atlocal.in (unsupported_fs_chars): Always remove tdir.
+ * tests/Makefile.am (EXTRA_DIST): Don't distribute the built
+ package.m4.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Bump year.
+
+ Fix VPATH 'make syntax-check'.
+ * maint.mk (VC_LIST, VC_LIST_EXCEPT, sc_changelog)
+ (sc_prohibit_jm_in_m4, makefile-check): Support VPATH.
+ (author_mark_check): Avoid error message.
+ * build-aux/vc-list-files: Sync from upstream again.
+ * build-aux/texinfo.tex: Likewise.
+
+ Sync files from upstream, and pass 'make syntax-check'.
+ * config/announce-gen: Move...
+ * build-aux/announce-gen: ...here, and sync from gnulib.
+ * Makefile.am (EXTRA_DIST): Adjust accordingly.
+ * cfg.mk (announce_gen): Likewise.
+ (prev_version_file): Delete, relying on default in maint.mk.
+ (gpg_key_ID): New macro.
+ (url_dir_list): Rewrite to match coreutils.
+ * config/prev-version.txt: Move...
+ * .prev-version: ...here, and adjust to 2.61.
+ * build-aux/vc-list-files: Sync from coreutils.
+ * maint.mk: Resynchronize with coreutils, where possible.
+ (ME): Remove $(srcdir) from definition.
+ (CVS): Delete.
+ (GIT, VC, VC-tag): New macros.
+ (CVS_LIST, CVS_LIST_EXCEPT): Rename...
+ (VC_LIST, VC_LIST_EXCEPT): ...to this.
+ (cvs-tag-check): Delete.
+ (cvs-diff-check): Rename...
+ (vc-diff-check): ...to this.
+ (sc_file_system): Allow FHS acronym.
+ * doc/autoconf.texi (Particular Functions): Recommend
+ unconditional <config.h>.
+ * build-aux/config.guess: Sync from upstream (manually).
+ * build-aux/config.sub: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * doc/make-stds.texi: Likewise.
+ * doc/standards.texi: Likewise.
+ * .gitattributes: Ignore whitespace problems in upstream files.
+
+2008-04-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention awk %u
+ bug on HP-UX/IA.
+ Report by Peter O'Gorman.
+
+2008-04-02 Eric Blake <ebb9@byu.net>
+
+ Recommend the just-released M4 1.4.11.
+ * NEWS: Update recommendation.
+ * README: Likewise.
+ * doc/autoconf.texi (Introduction): Likewise.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Likewise.
+
+2008-04-01 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Bump
+ copyright year.
+
+2008-03-28 Peter O'Gorman <peter@pogma.com>
+
+ Find X11 on Mac OS X too.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT,_AC_PATH_X_XMKMF):
+ Check for libX11 with extensions dylib la and dll too.
+ * THANKS: Update.
+ Reported by Martin Costabel.
+
+2008-03-28 Eric Blake <ebb9@byu.net>
+
+ Update TODO based on completed tasks.
+ * TODO (AC_PROG_INSTALL takes multiple files): Done.
+ (AC_GNU_SOURCE deprecation): Done, see AC_USE_SYSTEM_EXTENSIONS.
+ (AC_COMPILE_IFELSE documentation): Done.
+ (Tracing builtins): Done, now that we require M4 1.4.5.
+ (AC_PROG_CC_POSIX suggestion, providing header files)
+ (AC_TYPE_SIGNAL): Not needed; gnulib's approach is better.
+ (cache consistency): Done with precious variables.
+
+2008-03-26 Eric Blake <ebb9@byu.net>
+
+ Document --trace=macro:format in --help output.
+ * bin/autom4te.in (help): Mention optional trace format.
+ * bin/autoconf.as (usage): Likewise.
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Fix
+ typos in last patch.
+ Reported by Ralf Wildenhues.
+
+2008-03-26 Jim Meyering <meyering@redhat.com>
+
+ Fix texinfo syntax error.
+ * doc/autoconf.texi (Limitations of Usual Tools): s/@kbd {/@kbd{/
+
+2008-03-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Warn, not fail on whitespace-only precious variable differences.
+ * lib/autoconf/general.m4 (_AC_ARG_VAR_VALIDATE): Output
+ precious variable differences less ambiguous with `ugly-quotes'.
+ If their settings differ only in whitespace, do not fail, but
+ reuse the old value.
+ * tests/torture.at (AT_CHECK_AC_ARG_VAR): Extend macro to allow
+ an optional status and expected-warning argument. Fix m4
+ quotation for initial value.
+ (AC_ARG_VAR): Also test for whitespace-only differences, and
+ that the old value is retained in this case.
+ * doc/autoconf.texi (Setting Output Variables): Document this.
+ * NEWS: Update.
+ Report and initial patch by Paolo Bonzini.
+
+2008-03-26 Eric Blake <ebb9@byu.net>
+
+ Document busybox sed bug.
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Mention
+ restrictions when using back-references.
+ Reported by Vincent Lefevre:
+ <http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/13013>.
+
+ Document Automake interaction with AC_CONFIG_MACRO_DIR.
+ * doc/autoconf.texi (Input): Mention ACLOCAL_AMFLAGS for automake
+ users.
+ * THANKS: Update.
+ Reported by Chris Pickett.
+
+2008-03-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autotest.at (Using atlocal): Quote instances of `pwd`.
+
+ * tests/local.at (AT_CHECK_M4): Factorize warning output
+ normalization.
+ Suggested by Eric Blake.
+
+2008-03-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix .exe-related test failure on MinGW.
+ * tests/local.at (AT_CHECK_M4): Normalize `/bin/m4.exe' correctly
+ for comparing warning output.
+
+ Fix Fortran testsuite failures with gfortran 4.3.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): When scanning
+ verbose compiler output, skip lines that set variables; gfortran
+ 4.3 sets LIBRARY_PATH, COMPILER_PATH, COLLECT_GCC_OPTIONS.
+ * THANKS: Update.
+ Report by Vincent Lefèvre.
+
+2008-03-21 Eric Blake <ebb9@byu.net>
+
+ * GNUmakefile: Resynchronize with gnulib.
+
+ Document more uses of $cross_compiling.
+ * doc/autoconf.texi (Runtime): Document that a temporary override
+ is permissible.
+ * THANKS: Update.
+ Reported by Ineiev, example by Ralf Wildenhues.
+
+ Don't swallow $1 in textual local variables.
+ * lib/m4sugar/m4sugar.m4 (m4_combine): Don't use overquoting and
+ expansion of text arguments, as that swallows $1.
+ (m4_text_wrap): Likewise, by splitting out...
+ (_m4_text_wrap): ...new helper macro. Also, allow arbitrary
+ expression for width.
+ * tests/m4sugar.at (m4@&t@_text_wrap): Test this.
+ (m4@&t@_combine): Likewise.
+
+2008-03-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid leftover files on Leopard.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT): Remove a.out.dSYM
+ directory created on darwin.
+ (AC_NO_EXECUTABLES): Likewise; also remove objects which may be
+ left over from a broken link.
+ * tests/c.at (AC_NO_EXECUTABLES (working linker))
+ (AC_NO_EXECUTABLES (broken linker)): New tests.
+ Report by Gary V. Vaughan.
+
+ * lib/autom4te.in (Automake-preselections): Trace
+ _AM_COND_IF, _AM_COND_ELSE, _AM_COND_ENDIF.
+
+2008-03-20 Eric Blake <ebb9@byu.net>
+
+ Kill more CVS references.
+ * README-cvs: Delete. See README-hacking instead.
+ * README-hacking: Update wording, based on older file.
+ * BUGS: Remove CVS mention.
+
+2008-03-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/tools.at (autotools and whitespace in file names): Skip
+ if aclocal is not present.
+
+2008-03-20 Eric Blake <ebb9@byu.net>
+
+ Sync GNUmakefile with gnulib.
+ * GNUmakefile (Makefile.cfg): Rename...
+ (cfg.mk): ...to this, and make optional.
+ (GNUmakefile.cfg): Delete, redundant with cfg.mk.
+ (Makefile.maint): Rename...
+ (maint.mk): ...to this.
+ (all) [!_have-Makefile]: Rename...
+ (abort-due-to-no-makefile): ...to this, and invoke via
+ .DEFAULT_GOAL to pick up all targets.
+ * Makefile.cfg: Rename...
+ * cfg.mk: ...to this.
+ * Makefile.maint: Rename...
+ * maint.mk ...to this.
+ (ME): Reflect name change.
+ (makefile-check, m4-check, author_mark_check, msg): Use $(ME)
+ rather than hard-coded name.
+ * GNUmakefile.cfg: Delete; move rules into cfg.mk.
+ * Makefile.am (EXTRA_DIST): Reflect file name changes.
+ * .x-sc_prohibit_atoi_atof: Likewise.
+ * lib/freeze.mk: Likewise.
+
+2008-03-19 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Introduction): Improve the paraphrase of
+ Henry Spencer's quotation.
+
+2008-03-19 Eric Blake <ebb9@byu.net>
+
+ AC_CONFIG_HEADERS replaced AC_CONFIG_HEADER.
+ * bin/autoscan.in (output): Avoid obsolete spelling.
+ * tests/local.at (AC_STATE_SAVE): Update usage.
+ * THANKS: Update.
+ Reported by John Calcote.
+
+ Emphasize that ease of configure triumphs over ease of autoconf.
+ * doc/autoconf.texi (Introduction): Expand on primary
+ vs. secondary goal of autoconf.
+ * THANKS: Update.
+ Inspired by Paul Smith.
+
+2008-03-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Autom4te/FileUtils.pm (handle_exec_errors): New argument
+ $hint, show if the executing program does not exist.
+ (xsystem_hint): New function, like xsystem but allows to pass
+ a hint.
+ * bin/autoreconf.in: Use xsystem_hint for spawning autopoint and
+ libtoolize.
+ Report by Bruce Korb.
+
+2008-03-14 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/Autom4te/ChannelDefs.pm, tests/fortran.at,
+ tests/mktests.sh, tests/wrapper.as: Fix typos.
+
+2008-03-12 Eric Blake <ebb9@byu.net>
+
+ Fix yesterday's regression in m4_wrap([$1]).
+ * lib/m4sugar/m4sugar.m4 (_m4_wrap): Don't directly invoke wrapped
+ text, since it may contain text that looks like parameters.
+ * tests/m4sh.at (AS@&t@_INIT cleanup): Enhance test.
+
+2008-03-11 Eric Blake <ebb9@byu.net>
+
+ Improve error messages for common testsuite bugs.
+ * lib/autotest/general.m4 (_AT_DEFINE_INIT, _AT_DEFINE_SETUP): New
+ macros for defining order-enforced macros.
+ (AT_INIT, AT_SETUP, AT_CLEANUP, AT_BANNER, AT_XFAIL_IF)
+ (AT_CAPTURE_FILE, AT_DATA, AT_CHECK, AT_CHECK_NOESCAPE): Add error
+ messages when order violations are detected.
+ * tests/autotest.at (AT_CHECK_AT_SYNTAX): New helper macro.
+ (AT_SETUP without AT_INIT, AT_BANNER without AT_INIT)
+ (AT_CLEANUP without AT_INIT, Missing AT_CLEANUP)
+ (AT_CHECK without AT_SETUP, AT_DATA without AT_SETUP)
+ (AT_XFAIL_IF without AT_DATA, AT_KEYWORDS without AT_SETUP,
+ (AT_CLEANUP without AT_SETUP, AT_BANNER inside AT_SETUP)
+ (AT_SETUP inside AT_SETUP, Multiple AT_INIT)
+ (Banner-only test suite): New tests.
+ Reported by Christopher Hulbert.
+
+ Tweak m4_wrap to force FIFO or LIFO semantics.
+ * lib/m4sugar/m4sugar.m4 (m4_wrap): Override M4 implementation.
+ (m4_wrap_lifo, _m4_wrap): New macros.
+ * lib/m4sugar/m4sh.m4 (AS_INIT): Combine all cleanup into known
+ order, prior to m4sugar's.
+ (_AS_DETECT_BETTER_SHELL): Use cleanup parameter, rather than
+ m4_wrap.
+ * lib/autotest/general.m4 (AT_INIT): Combine all cleanup into
+ known order, prior to m4sh's.
+ * doc/autoconf.texi (Diagnostic Macros) <m4_fatal>: Document
+ argument.
+ (Redefined M4 Macros) <m4_wrap>: Rewrite documentation to match
+ new behavior.
+ * tests/m4sh.at (AS_INIT cleanup): New test.
+ * NEWS: Document the change.
+
+2008-03-10 Eric Blake <ebb9@byu.net>
+
+ Encode nested autotest data.
+ * tests/autotest.at (AT_CHECK_AT_PREP): Avoid raw AT_ in output.
+ (unusual file names): Likewise.
+ (m4_pattern_allow): Remove loophole, to make it easier to catch
+ poorly written tests.
+
+ Factor some autotest tests.
+ * tests/autotest.at (AT_CHECK_AT_PREP): New macro, to factor out
+ common initialization.
+ (AT_CHECK_AT, Banners, Keywords and ranges, srcdir propagation)
+ (whitespace in absolute testdir, unusual file names): Use it.
+
+2008-03-06 Eric Blake <ebb9@byu.net>
+
+ Minor documentation fix.
+ * doc/autoconf.texi (Evaluation Macros): Fix typo.
+
+2008-03-04 Eric Blake <ebb9@byu.net>
+
+ Make AT_CHECK act like a simple command.
+ * lib/autotest/general.m4 (_AT_CHECK): Wrap commands in {;}.
+ * tests/torture.at (AT_CHECK_CONFIG_CREATION_NOWRITE): Test it.
+
+2008-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ On MinGW, substitution of CR and 0xFF fails.
+ * tests/torture.at (Substitute and define special characters):
+ MinGW awk cannot handle 0xFF, and on MinGW, the test does the
+ wrong thing for CR.
+
+2008-03-04 Eric Blake <ebb9@byu.net>
+
+ Pull in recent maintainer improvements from coreutils.
+ * GNUmakefile (_is-dist-target): 'make distclean' should not
+ trigger autoreconf.
+ (_dummy): Change directories before removing autom4te.cache.
+ (check dist distcheck install) [!_have-Makefile]: Provide nicer
+ diagnostics.
+ * configure.ac (AC_CONFIG_LINKS): Copy GNUmakefile into VPATH
+ builds, after initial bootstrap.
+ * Makefile.am (distclean-local): Work around current automake bug.
+ * Makefile.maint (ME): Allow VPATH usage.
+
+ Use git-merge-changelog when available.
+ * .gitattributes: New file.
+ * README-hacking: Document use of git-merge-changelog.
+
+ Work around cygwin bug.
+ * tests/atlocal.in (unsupported_fs_chars): Avoid cygwin bug where
+ "touch 't\'" creates regular file 't'.
+
+ Ignore tests that require read-only directories under root.
+ * tests/torture.at (AT_CHECK_CONFIG_CREATION_NOWRITE): Skip
+ no-write portion if user has root-like privileges.
+
+2008-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): Fix detection of '-C -'.
+
+2008-03-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ autoreconf -m now honors $MAKE.
+ * bin/autoreconf.in ($run_make): Renamed from ...
+ ($make): ... this. Use now as command to run `make',
+ overridden by $MAKE. Document this in --help output.
+ * doc/autoconf.texi (autoreconf Invocation): Document
+ all environment variables honored by autoreconf.
+ * NEWS: Update.
+ Report by Paul Eggert.
+
+2008-03-03 Eric Blake <ebb9@byu.net>
+
+ Documentation improvements.
+ * doc/autoconf.texi (Looping constructs): s/recurses/repeats/.
+ (Evaluation Macros): Drop `1' suffix from metasyntax variable name
+ that preceeds @dots. Improve wording.
+ (Text processing Macros): Drop `1' suffix from metasyntax variable
+ name that preceeds @dots.
+ (Number processing Macros): Drop `1' suffix from metasyntax
+ variable name that preceeds @dots. Improve wording.
+ * lib/m4sugar/m4sugar.m4 (m4_cmp): Comment wording fix.
+ Suggested by Ralf Wildenhues.
+
+2008-03-02 Jim Meyering <meyering@redhat.com>
+
+ Don't infloop upon "make dist".
+ * GNUmakefile: Merge from coreutils.
+ * Makefile.am (dist-hook): Inject .tarball-version into tarball,
+ not .version.
+ * configure.ac (AC_INIT): Use .tarball-version, not .version.
+ * build-aux/git-version-gen: Update from gnulib.
+
+2008-03-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Before using /dev/full, check that it is a writable character
+ special device.
+ Report by Benoit Sigoure and Eric Blake.
+
+ Actually test that @configure_input@ is expanded correctly.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Actually check generated file contents for the name of the
+ generated file, using AC_PROG_FGREP and $FGREP.
+
+2008-03-01 Benoit Sigoure <tsuna@lrde.epita.fr>
+
+ Be nice with file systems that don't handle unusual characters.
+ * tests/atlocal.in (func_sanitize_file_name)
+ (func_sanitize_dir_name): New shell functions.
+ * tests/tools.at (autom4te and whitespace in file names)
+ (autotools and whitespace in file names): Use them.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Cover more potentially problemtic file names. Use the new
+ functions.
+
+ Properly handle funny file names for headers in config.status.
+ The test suite did not cover this bug because the code was not
+ quoting properly the arguments of `rm -f' (which "fails" silently)
+ as well as the arguments of `diff' (whose output was redirected to
+ /dev/null so we couldn't see its error message).
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADER): Properly quote the
+ file names passed to `rm' and `diff'.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Add a regression test.
+
+2008-03-01 Benoit Sigoure <tsuna@lrde.epita.fr>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Properly expand @configure_input@ in config.status.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE, _AC_OUTPUT_MAIN_LOOP):
+ Escape the backslashes and ampersands in $configure_input before
+ using it in the sed replacement string to expand @configure_input@.
+ Report by Eric Blake and Patrick Welche.
+
+2008-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ignore errors from ./run on w32.
+ * tests/autotest.at (whitespace in absolute testdir):
+ Ignore stderr for `./run' which fails to remove the
+ busy test directory on w32.
+
+2008-02-22 Eric Blake <ebb9@byu.net>
+
+ Improve documentation for writing autotest suites.
+ * doc/autoconf.texi (Writing Testsuites) <AT_CHECK>: Mention that
+ checks must live inside a test group.
+ Reported by Christopher Hulbert.
+
+2008-02-21 Eric Blake <ebb9@byu.net>
+
+ Sync git-version-gen from upstream.
+ * build-aux/git-version-gen: Pull from gnulib.
+ * configure.ac (AC_INIT): Adjust to new calling convention.
+
+2008-02-12 Eric Blake <ebb9@byu.net>
+
+ Avoid trailing space in config.h with AC_DEFINE([var], []).
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Explicitly mark empty
+ defines with a comment.
+
+2008-02-08 Eric Blake <ebb9@byu.net>
+
+ Fix texinfo typos in previous patch.
+ * doc/autoconf.texi (Site Defaults): s/[{}]/@&/g.
+ Reported by Ralf Wildenhues.
+
+ Describe a config.site that can be used for FHS compliance.
+ * doc/autoconf.texi (Site Defaults): Fix typo. Add new example
+ for FHS.
+ * THANKS: Update.
+ Reported by Jules Colding and Ralf Wildenhues.
+
+2008-02-02 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <grep>: Fix typo.
+
+2008-02-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): Fix --clean to work
+ again, broken since introduction of `-C dir'.
+ * tests/autotest.at (Choosing where testsuite is run): Test it.
+
+2008-01-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Update Back-Cover text to reflect new GNU wording.
+
+2008-01-29 Eric Blake <ebb9@byu.net>
+
+ Fix more autotest regressions.
+ * lib/autotest/general.m4 (AT_LINE): Fix regression from
+ 2007-10-04 when file name is `dnl'.
+ (AT_INIT) <PREPARE_TESTS>: Move command-line assignments...
+ <TESTS_BEGIN>: ...to this new diversion, to fix regression from
+ yesterday in libtool's testsuite.
+ (_AT_ARG_OPTION): Detect write failure.
+ * doc/autoconf.texi (Diversion support): Document PREPARE_TESTS to
+ make libtool's use kosher. Document m4_init.
+ (Programming in M4sh): Document AS_INIT.
+ (Writing Testsuites): Document limitation of AT_DATA file name.
+ * tests/autotest.at (unusual file names): New test.
+ (Banners, Keywords and ranges): Use correct shell.
+
+ More corner cases in testsuite VAR=VALUE handling.
+ * lib/autotest/general.m4 (AT_INIT) <PREPARE_TESTS): Fix quoting
+ bug.
+ <PARSE_ARGS_END>: Also detect leading digits in assignments.
+ * tests/autotest.at (Using atlocal): Enhance test to catch last
+ bug.
+
+ * doc/autoconf.texi (Limitations of Builtins) <.>: Mention bash
+ bug.
+
+2008-01-28 Eric Blake <ebb9@byu.net>
+
+ Fix regression in handling VAR=VALUE arguments to testsuite.
+ * lib/autotest/general.m4 (AT_INIT) <PARSE_ARGS_END>: Detect
+ leading = as invalid. Defer use of command-line variable
+ assignments...
+ <PREPARE_TESTS>: ...here, after atconfig has been sourced. Fix
+ regression in sourcing files.
+ * tests/autotest.at (Using atlocal): New test to catch this.
+ (Debugging a successful test, Choosing where testsuite is run):
+ Use correct shell.
+ Reported by Ralf Wildenhues.
+
+ Document grep peculiarity.
+ * doc/autoconf.texi (Limitations of Usual Tools) <grep>: Document
+ BSD behavior on binary input.
+
+ Minor testsuite improvements.
+ * lib/autotest/general.m4 (AT_INIT) <PREPARE_TESTS>: Use fewer
+ forks when sanitizing PATH. Always output machine information,
+ not just when atconfig was located.
+
+ Add 'testsuite -C dir'.
+ * lib/autotest/general.m4 (_AT_ARG_OPTION): Move missing argument
+ detection...
+ (AT_INIT) <PARSE_ARGS_END>: ...here, since -k always takes
+ argument.
+ <DEFAULTS>: Delay computation of variables based on $at_dir...
+ <PREPARE_TESTS>: ...to here, since -C can change $at_dir.
+ <TESTS>: Re-invoke via absolute name, since -C may be in effect.
+ <PARSE_ARGS>: Parse new option.
+ <HELP_TUNING>: Document it.
+ * tests/autotest.at (Choosing where testsuite is run): New test
+ for this feature.
+ (Keywords and ranges): Add test for missing -k argument.
+ * NEWS: Document this.
+ * doc/autoconf.texi (testsuite Invocation): Likewise.
+
+2008-01-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * build-aux/config.guess, build-aux/config.sub,
+ build-aux/texinfo.tex: Sync from gnulib.
+ * doc/fdl.texi, doc/make-stds.texi, doc/standards.texi:
+ Likewise.
+
+2008-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Particular Programs): Do not mention the
+ Autoconf version in which the AC_PROG_INSTALL change was done.
+ Suggested by Paul Eggert.
+
+2008-01-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix --help=recursive with multiple AC_CONFIG_SUBDIRS.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): If, for recursive help
+ mode, we change to the source directory, also set $ac_pwd so we
+ do not go back to the build tree for the next config subdir.
+ * tests/torture.at (Deep Package): Extend test to contain two
+ config subdirs on the top level.
+
+ Fix parallel `maintainer-check'.
+ * Makefile.am (maintainer-check-tests): Depend on `all'.
+ Use `$(MAKE) $(AM_MAKEFLAGS)' instead of plain `make'.
+ * tests/Makefile.am (maintainer-check-c++, maintainer-check-posix):
+ Likewise.
+ (maintainer-check): Serialize the testsuite runs.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ENABLE2): Accept `+'
+ in feature string for --enable/--with. Convert to underscore
+ for variable name.
+
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Require that
+ `install -c file1 file2 dir' works.
+ * doc/autoconf.texi (Particular Programs): Document this.
+ * NEWS: Update.
+
+2008-01-21 Eric Blake <ebb9@byu.net>
+
+ Improve documentation about default include directives.
+ * doc/autoconf.texi (Generic Headers, Generic Declarations)
+ (Generic Structures, Generic Types)
+ (Generic Compiler Characteristics): Add links to
+ AC_INCLUDES_DEFAULT.
+ Reported by Reuben Thomas.
+
+2008-01-15 Eric Blake <ebb9@byu.net>
+
+ * lib/m4sugar/m4sugar.m4 (m4_qlen): Use fewer macros.
+
+2008-01-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/Makefile.am (noinst_SCRIPTS): Renamed from
+ check_SCRIPTS. Building the wrappers for `all' allows help2man
+ to use them for the manpages.
+ Report by Benoit Sigoure.
+
+ * bin/autoreconf.in: Discard stderr for $autoconf/$aclocal --help.
+
+2007-12-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix some write failure cases in Autotest.
+ * lib/autotest/general.m4 (AT_INIT): Do not exit successfully
+ upon write failures for --help, --version, --list.
+ Guard against write failures for intermediate created scripts.
+ <at_func_create_debugging_script>: Do not make the debugging
+ script executable if it is not complete.
+
+2007-12-12 Eric Blake <ebb9@byu.net>
+
+ Fix thinko in earlier patch - m4_join isn't defined yet.
+ * lib/m4sugar/m4sugar.m4 (m4_expansion_stack_push, _m4_defun_pro)
+ (_m4_defun_pro_outer, _m4_defun_epi, _m4_defun_epi_outer)
+ (m4_require): Use m4_do, not m4_join.
+
+ Fix some whitespace tests on cygwin.
+ * tests/tools.at (autom4te and whitespace in file names): Restore
+ font-lock. Create $TMPDIR before it might be used.
+
+ Fix spurious testsuite failure with M4 1.4.11.
+ * tests/local.at (AT_CHECK_M4): Cater to new m4 error message.
+
+ Optimize AC_REQUIRE.
+ * lib/m4sugar/m4sugar.m4 (m4_expansion_stack_push, _m4_defun_pro)
+ (_m4_defun_pro_outer, _m4_defun_epi, _m4_defun_epi_outer)
+ (m4_require): Avoid extra macro calls.
+
+2007-12-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/torture.at (srcdir): Fix quoting.
+
+ Do not pass top_srcdir to configure scripts in testsuite.
+ * tests/autotest.at (srcdir propagation): Copy install-sh to
+ source tree.
+ (my only test): Drop setting of `top_srcdir'.
+ * tests/base.at (Input/Output): Likewise.
+ * tests/local.at (AT_CONFIGURE_AC): Copy install-sh,
+ config.guess, and config.sub to test source tree.
+ Drop AC_CONFIG_AUX_DIR setting.
+ (AT_CHECK_CONFIGURE): Drop setting of `top_srcdir'.
+ * tests/torture.at (Substitute a 2000-byte string): Drop
+ AC_CONFIG_AUX_DIR setting, copy install-sh to test source tree.
+ (Substitute a newline, datarootdir workaround): Likewise.
+ (Define a newline): Adjust for linenumber changes in configure.ac.
+ * tests/foreign.at (Libtool): Adjust comment to reflect changes.
+
+ * tests/semantics.at (AC_PATH_PROGS_FEATURE_CHECK): Skip test
+ if `pwd` contains whitespace.
+
+ Quote $abs_top_srcdir in tests.
+ * tests/local.at (AT_CHECK_PERL_SYNTAX): Likewise.
+ * tests/tools.at (Syntax of the shell scripts): Likewise.
+
+ * tests/m4sh.at (LINENO): Quote $0.
+
+ Fix testsuite program wrapper for whitespace in `pwd`.
+ The problem here is that the usual mantra is that command
+ variables can contain arguments, thus we cannot just escape
+ $AUTOCONF, $AUTOM4TE etc. The compromise is to put the
+ $top_builddir/tests directory early in $PATH, so that the
+ wrappers are found by their plain name.
+ * tests/wrapper.as: Put $testdir early in $PATH.
+ (AUTOCONF, AUTOHEADER, AUTOM4TE): Set to plain command names.
+
+ Proper config.status --file/--header and $srcdir escaping.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_MAIN_LOOP): Quote special
+ characters in $ac_file_inputs.
+ (_AC_OUTPUT_FILE, _AC_OUTPUT_HEADER): eval $ac_file_inputs
+ accordingly.
+ * tests/torture.at (datarootdir workaround): Adjust.
+ (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS): Extend test.
+
+ Fix Autotest for whitespace in `pwd`.
+ * lib/autotest/general.m4 (AT_INIT)
+ <at_func_create_debugging_script, Driver Loop>:
+ Quote $at_group_dir.
+ * tests/autotest.at (whitespace in absolute testdir): New test.
+
+ * lib/autom4te.in: Quote @datadir@.
+
+ Proper file name escaping in Autoconf programs and Perl modules.
+ This includes escaping of characters special to the shell
+ as well as special to Perl, e.g., leading `<' or `>'.
+ For example, when $file starts with `>', `open ">$file"'
+ wrongly tries to append to a different file.
+ * bin/autoconf.as: Fix quoting for autom4te options.
+ * lib/Autom4te/General.pm (shell_quote): New function, taken
+ from coreutils, written by Jim Meyering.
+ (mktmpdir): Use it.
+ * bin/autom4te.in (files_to_options, handle_m4): Use shell_quote
+ and open_quote.
+ * bin/autoreconf.in (parse_args): Likewise.
+ * bin/autoscan.in (main): Likewise.
+ * bin/autoupdate.in (main): Likewise.
+ * bin/autoheader.in: Likewise, fixing old insufficient escaping.
+ * bin/ifnames.in: Likewise, XFile usage fixes.
+ * tests/tools.at (autom4te and whitespace in file names): Extend
+ test. Test twice, with special characters allowed on w32, and the
+ rest. Test leading and trailing whitespace, for `open_quote'.
+ (autotools and whitespace in file names): New, analogous test.
+ Reported by Paul Eggert and Benoit Sigoure, additional suggestions
+ by Russ Allbery and Eric Blake.
+
+ Sync from Automake.
+ * lib/Autom4te/Channels.pm, lib/Autom4te/Configure_ac.pm,
+ lib/Autom4te/Struct.pm, lib/Autom4te/XFile.pm: Likewise.
+ * lib/Autom4te/FileUtils.pm (open_quote): New function.
+ (update_file, contents): Use it.
+
+ * Makefile.am (autom4te-update): Rewrite for git.
+
+2007-12-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (autom4te Invocation, Autom4te Cache): Fix typos.
+
+ Fix copyright years.
+ * Makefile.am, doc/install.texi, lib/autoconf/fortran.m4,
+ lib/autoconf/lang.m4, lib/freeze.mk: Likewise.
+
+2007-12-04 Eric Blake <ebb9@byu.net>
+
+ Manually resync with gnulib, since 'make cvs-update' no longer works.
+ * build-aux/config.guess: New upstream version.
+ * build-aux/config.sub: Likewise.
+
+ When using older automake, don't downgrade build-aux/texinfo.tex.
+ * configure.ac (AM_INIT_AUTOMAKE): Add no-texinfo.tex option.
+ * doc/Makefile.am (TEXINFO_TEX): Add.
+
+2007-11-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix AC_C_BIGENDIAN bug caused by new awk method of substitution.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Don't comment out the
+ #undef as this runs afoul of our new way of creating config.h.
+ Problem reported by Jim Meyering in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2007-11/msg00164.html>.
+
+2007-11-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix autom4te for unusual characters in input file names.
+ * bin/autom4te.in (files_to_options): Quote active characters
+ for the shell.
+ * tests/tools.at (autom4te and white space in file names):
+ New test.
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <awk>:
+ Document that Tru64 awk always splits $0.
+
+2007-11-24 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (AT_INIT): Do not extract the
+ `#AT_STOP_...' line at the end of each test.
+
+2007-11-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): For awk line number
+ extraction script, ensure `$at_group' has a defined value
+ even for the empty set, and properly quote its usage inside
+ the awk script.
+
+2007-11-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Shell Functions): New chapter. Document
+ IRIX sh $0 issue in functions, move content from ...
+ (Portable Shell): ... here.
+ (Shell Script Compiler): Note that shell functions are not
+ totally unportable any more.
+
+2007-11-22 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): Exit awk script after
+ extracting the line numbers of the last needed test.
+
+2007-11-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT) <at_func_create_debugging_script>:
+ Fix quoting.
+
+2007-11-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix IRIX testsuite debugging failures: $0 in functions.
+ * lib/autotest/general.m4 (AT_INIT) <at_func_create_debugging_script>:
+ Do not use $0 inside a function, as IRIX sh will set that to the
+ function name rather than the script invocation name.
+
+2007-11-19 Paolo Bonzini <bonzini@gnu.org>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (at_func_test): Use cached line numbers
+ to extract test scripts.
+ (AT_INIT): Extract and cache test script line numbers.
+
+2007-11-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4: Revert 2007-11-15 patch and
+ subsequent fixups; the awk -> here-document conversion trashes
+ performance too much with AIX sh.
+
+2007-11-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/local.at: Do not test m4, perl with AT_TESTED.
+
+ Diagnose and guard against write errors dealing with config.status.
+ The general idea is this: all write failures from `configure'
+ writing `config.status' are indicated by $ac_write_error, which
+ is only checked at the end. This is safe because config.status
+ code is not executed before the file is complete. Other write
+ failures, be they inside config.status, or in sub shell/awk
+ scripts spawned from configure or config.status, typically need
+ earlier checking, as their results are used right afterwards.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Initialize `ac_write_fail'
+ before writing config.status, check afterwards.
+ (_AC_OUTPUT_FILES_PREPARE, _AC_OUTPUT_FILE)
+ (_AC_OUTPUT_HEADERS_PREPARE,_AC_OUTPUT_CONFIG_STATUS):
+ Set `ac_write_error' for write failures to config.status. Barf
+ upon write failures to temporary files.
+ Adjust note about closing and reopening the here-document.
+ (_AC_OUTPUT_HEADER, _AC_OUTPUT_LINK, _AC_OUTPUT_COMMAND)
+ (_AC_OUTPUT_MAIN_LOOP): Likewise, adjust note about closing and
+ reopening the here-document.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Ensure `ac_write_error' does not escape into config.status.
+ Also, add a couple of code paths not yet exercised in the test
+ suite: a config file with input from stdin, and a config header
+ output to stdout.
+ Suggestion for catching write errors by Bruno Haible.
+
+2007-11-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid error with Tru64 awk and testsuite lines with many words.
+ * lib/autotest/general.m4 (AT_INIT): In the awk script that
+ reads the testsuite, set the field separator to an unusual value,
+ in order to not run over the limit of 199 fields. Tru64 4.0D awk
+ even splits the input if $i, i>0, was never accessed in the script.
+
+ Revert 2007-10-17 change.
+ * TODO: Multiline args in config files and headers mean something
+ different and are not fixed, see
+ <http://lists.gnu.org/archive/html/autoconf-patches/2007-05/msg00017.html>
+ Report by Stepan Kasal.
+
+ * doc/autoconf.texi (Generic Programs): Fix typo.
+
+2007-11-16 Stepan Kasal <kasal@ucw.cz>
+
+ AC_*_TOOL does not canonicalize the prefix
+ * doc/autoconf.texi (Generic Programs): Do not say that
+ the *_TOOL macros canonicalize, they simply use the `host_alias'.
+
+2007-11-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Diagnose write errors in config.status instantiations.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE)
+ (_AC_OUTPUT_HEADER, _AC_OUTPUT_MAIN_LOOP): Bail out
+ on write errors.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Extend test to also check for some write error failures, using...
+ <AT_CHECK_CONFIG_CREATION_NOWRITE>: ...this new macro.
+ Report by Bruno Haible.
+
+ Indentation fixups.
+ * lib/autotest/general.m4 (AT_INIT) <at_func_log_failure>: Fix
+ indentation.
+ (_AT_CHECK): Use less indentation, to save space.
+
+2007-11-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Add witness macro for @top_build_prefix@ substitution.
+ * lib/autoconf/status.m4 (_AC_HAVE_TOP_BUILD_PREFIX): New macro.
+ (_AC_OUTPUT_FILE): Mention it here.
+
+2007-11-15 Paolo Bonzini <bonzini@gnu.org>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (at_func_test): Remove.
+ (AT_INIT): Pre-extract test groups into separate files.
+ (AT_CLEANUP): Source pre-extracted file instead of calling at_func_test.
+ Remove at-test-source files together with the $at_group_dir.
+ * tests/autotest.at (Long test source lines): New test.
+
+2007-11-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Shell functions and variables may share a namespace.
+ * doc/autoconf.texi (Portable Shell): Mention Solaris sh
+ limitation.
+
+2007-11-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/types.m4 (_AC_TYPE_LONG_LONG_SNIPPET): Make comment match
+ gnulib.
+
+2007-11-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4: Fix a couple of comment typos.
+
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Use $as_me, not $me.
+
+2007-11-13 Jim Meyering <meyering@redhat.com>
+
+ Clean up the rule to create "expr".
+ * tests/Makefile.am (expr): Don't redirect directly to target.
+ Redirect just once, not for each echo statement.
+ Use $@, not literal "expr".
+
+2007-11-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ Don't worry about preprocessor when testing long long.
+ See: http://lists.gnu.org/archive/html/bug-gnulib/2007-11/msg00075.html
+ * doc/autoconf.texi (Preprocessor Arithmetic): New section.
+ (AC_TYPE_LONG_LONG_INT, AC_TYPE_UNSIGNED_LONG_LONG_INT):
+ These no longer check for preprocessor flaws.
+ * lib/autoconf/types.m4 (_AC_TYPE_LONG_LONG_SNIPPET):
+ Do not check for preprocessor flaws.
+
+2007-11-13 Jim Meyering <meyering@redhat.com>
+
+ Adapt dependencies, now that a version change doesn't modify configure.ac
+ * GNUmakefile: Remove "make clean" kludge.
+ * lib/m4sugar/Makefile.am (version.m4): Depend on Makefile, not
+ configure.ac.
+ Don't redirect directly to target.
+ Use $@, not literal "version.m4".
+
+2007-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Making testsuite Scripts): Document
+ ":;{" shorthand as in previous patch.
+
+2007-11-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document problem
+ with { ... } a bit more clearly. Suggest ":;{" as a shorthand
+ for the workaround.
+ * lib/m4sugar/Makefile.am (version.m4): Detect 'echo' failure.
+ Use ":;{" shorthand.
+ * tests/Makefile.am ($(srcdir)/package.m4): Likewise.
+
+2007-11-12 Jim Meyering <meyering@redhat.com>
+
+ Add more non-srcdir build support.
+ * GNUmakefile (dummy): Split a long line.
+ Add -v option to autoreconf invocation.
+
+ Remove the autoreconf-provided INSTALL, so that we regenerate it.
+ * GNUmakefile (dummy): Remove INSTALL.
+
+ Remove racy commands to build scripts in bin/ and tests/.
+ * man/Makefile.am (.x.1): Now that scripts in bin/ and tests/
+ are guaranteed to be built, remove the rules that tried to build
+ them. Before, with a parallel build, these rules could lead to
+ two processes writing tests/wrapper.in concurrently.
+
+ Build in man/ only *after* building in bin/ and tests/.
+ * Makefile.am (SUBDIRS): The man-page-creation process runs $(MAKE)
+ in both bin/ and tests/.
+
+ Accommodate non-srcdir build-from-checkout.
+ * build-aux/git-version-gen: Require an additional parameter: $srcdir.
+ Use git's --git-dir=$srcdir/.git option.
+ Add quotes, in case tarball_version_file contains shell meta-characters.
+ * GNUmakefile (_curr-ver): Pass $(srcdir) to git-version-gen.
+ * configure.ac: Pass "." to git-version-gen.
+
+ Avoid spurious test failures due to version skew.
+ * GNUmakefile (dummy): Run $(MAKE) clean after autoreconf -i.
+
+2007-11-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Avoid warnings about conftest.dSYM directories on Mac OS X Leopard.
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE, _AC_RUN_IFELSE):
+ Remove conftest.dSYM directory.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT)
+ (_AC_LANG_PROGRAM_C_, _AC_FC_MAIN, __AC_FC_NAME_MANGLING):
+ Remove `conftest.*' recursively.
+ * lib/autoconf/lang.m4 (AC_LINK_IFELSE): Likewise.
+ * lib/autoconf/specific.m4 (_AC_SYS_LARGEFILE_MACRO_VALUE):
+ Likewise.
+ (_AC_COMPILER_OBJEXT_REJECT): Reject *.dSYM.
+ * THANKS: Update.
+ Report and analysis by Jeff Squyres and Peter O'Gorman.
+
+2007-11-12 Benoit Sigoure <tsuna@lrde.epita.fr>
+
+ Fix typos in variable names.
+ * tests/semantics.at (test for AC_CHECK_LIB): s/at_m/ac_m/.
+
+2007-11-11 Benoit Sigoure <tsuna@lrde.epita.fr>
+
+ Document that $((expression)) is not portable.
+ * doc/autoconf.texi (Shell Substitutions): Here.
+
+2007-11-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Ignore configure --help* errors due to LINENO-impaired shells.
+ * tests/torture.at (Configuring subdirectories, Deep Package):
+ In the --help* tests in read-only trees, make `.' temporarily
+ writable again for the `stderr' file, and ignore errors due to
+ the attempt to write configure.lineno.
+ Report by Patrick Welche.
+
+2007-11-10 Jim Meyering <meyering@redhat.com>
+
+ Generate package.m4 in build-dir, not srcdir.
+ * tests/Makefile.am (package.m4): Adjust target.
+ Don't redirect directly to $@.
+ (CLEANFILES): Add package.m4.
+ ($(TESTSUITE)): Depend on just-built package.m4, not the one
+ in $(srcdir).
+ When running $(AUTOTEST), search "." before searching $(srcdir).
+
+ Avoid a race condition that would make parallel "distclean" fail.
+ * tests/Makefile.am (distclean-generic): Replace the default,
+ automake-provided rule with an identical one, but with an additional
+ dependency on distclean-local. Simply adding the dependency would
+ cause automake not to emit the rule at all.
+ * BUGS: Building with -jN works, now.
+
+ Distribute git-version-gen.
+ * Makefile.am (EXTRA_DIST): Add build-aux/git-version-gen,
+ since GNUmakefile is distributed, and requires it for dist* rules.
+
+ Remove two more generated files from version control.
+ * INSTALL: Remove generated file.
+ * lib/autoscan/autoscan.list: Remove generated file.
+
+2007-11-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * GNUmakefile (PATH): Remove stray apostrophes; they become
+ part of PATH, which isn't wanted here.
+
+2007-11-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ New config files output variable `top_build_prefix'.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Substitute
+ `top_build_prefix'.
+ * doc/autoconf.texi (Preset Output Variables): Document it.
+ * NEWS: Update.
+ Report by Bob Friesenhahn.
+
+ Avoid expr for arithmetic evaluation if the shell accepts $((...)).
+ * lib/autotest/general.m4 (AT_INIT) <at_func_arith>: New
+ function, to parametrize arithmetic with expr vs. the shell.
+ Use it where possible.
+ Suggestion by Benoit Sigoure.
+
+2007-11-03 Benoit Sigoure <tsuna@lrde.epita.fr>
+
+ Adjust the documentation of autotest WRT atlocal.
+ * doc/autoconf.texi (Making testsuite Scripts): It is not necessary,
+ when using Automake, to write a rule to produce atlocal, since it's
+ an AC_CONFIG_FILES. Mention that atlocal.in needs to be
+ distributed, not atconfig.in.
+
+2007-11-04 Eric Blake <ebb9@byu.net>
+
+ Update list information.
+ * README: Mention new autoconf-commit list.
+ * doc/autoconf.texi (Introduction): Mention autoconf-commit list.
+
+2007-11-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_MALLOC_IF): Fix comment typo.
+
+ * lib/m4sugar/Makefile.am (version.m4): Another bash bug workaround.
+
+ * build-aux/.gitignore: Ignore mkinstalldirs.
+
+ * doc/autoconf.texi (autoreconf Invocation): Fix an underfull line.
+
+2007-11-03 Jim Meyering <meyering@redhat.com>
+
+ s/-/./ in snapshot version string: 2.61a-256-8b556 -> 2.61a.256-8b556
+ * build-aux/git-version-gen: This syncs from coreutils.
+
+ Adjust the build procedure so "make check" works reliably.
+ * README-hacking: Include an extra step between "make" and
+ "make check" to ensure that the latter passes.
+
+ Use just-built tools, when possible.
+ * GNUmakefile (PATH): Set and export here, ...
+ (dummy): ... rather than here.
+
+2007-11-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Andreas Schwab <schwab@suse.de>
+
+ * tests/Makefile.am ($(srcdir)/package.m4): Work around bash
+ exit status bug.
+
+2007-11-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (AC_PREREQ): Require version 2.60, for
+ AC_PROG_SED, AC_PROG_GREP.
+
+2007-11-02 Benoit Sigoure <tsuna@lrde.epita.fr>
+ and Jim Meyering <meyering@redhat.com>
+ and Andreas Schwab <schwab@suse.de>
+ and Eric Blake <ebb9@byu.net>
+
+ Document a bug in GNU Bash with compound commands and redirections.
+ * doc/autoconf.texi (Limitations of Builtins): Mention that GNU
+ Bash doesn't properly set $? when `{ ... } >/bad' fails, and give
+ workaround.
+
+2007-11-03 Eric Blake <ebb9@byu.net>
+
+ Support m4 1.4.5 in testsuite.
+ * tests/torture.at (Define a newline): Exclude line numbers in
+ error message.
+ Reported by Ralf Wildenhues.
+
+2007-11-03 Jim Meyering <meyering@redhat.com>
+
+ Remove automake-provided files from version control.
+ * build-aux/elisp-comp: Remove file.
+ * build-aux/install-sh: Remove file.
+ * build-aux/missing: Remove file.
+ * build-aux/mdate-sh: Remove file.
+ * build-aux/.gitignore: New file.
+ Suggestion from Ralf Wildenhues.
+
+2007-11-03 Eric Blake <ebb9@byu.net>
+
+ Adjust version comparison to account for git snapshot numbers.
+ * lib/m4sugar/m4sugar.m4 (_m4_version_unletter): Also treat - as a
+ component separator.
+ * doc/autoconf.texi (Number processing Macros)
+ <m4_version_compare>: Document this change.
+ * tests/m4sugar.at (m4@&t@_version_compare): Test it.
+
+2007-10-30 Bruno Haible <bruno@clisp.org>
+
+ * lib/autoconf/types.m4 (_AC_TYPE_LONG_LONG_SNIPPET): New macro,
+ extracted from AC_TYPE_LONG_LONG_INT and AC_TYPE_UNSIGNED_LONG_LONG_INT.
+ (AC_TYPE_LONG_LONG_INT, AC_TYPE_UNSIGNED_LONG_LONG_INT): Use it.
+ Fixes problem with Sun C 5.[0-8] in 32-bit mode, reported in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2007-10/msg00210.html>
+ Suggested by Paul Eggert.
+
+2007-10-28 Jim Meyering <meyering@redhat.com>
+
+ * README-hacking: Autoconf, Automake, and Perl are required to build.
+ List Gzip and Tar separately. Suggested by Ralf Wildenhues.
+
+2007-10-28 Jim Meyering <meyering@redhat.com>
+
+ README-hacking: Recommend running autoreconf -vi.
+ * GNUmakefile (dummy): Use autoreconf -i, with appropriate PATH,
+ so that we use just-built tools when they're available.
+ Suggestions from Ralf Wildenhues.
+
+2007-10-28 Jim Meyering <meyering@redhat.com>
+
+ Make inter-release --version output more useful.
+
+ Now, each unofficial build has a version "number" like 2.61a-19-58dd,
+ which indicates that it is built using the 19th change set
+ (in _some_ repository) following the "v2.61a" tag, and that 58dd
+ is a prefix of the commit SHA1.
+ * build-aux/git-version-gen: New file.
+ * configure.ac: Run it to set the version.
+ (AM_INIT_AUTOMAKE): Don't check NEWS here.
+ * Makefile.am (dist-hook): Arrange so that .version appears only
+ in distribution tarballs, never in a checked-out repository.
+ * .gitignore: Add .version here, too. Just in case.
+ * tests/Makefile.am ($(srcdir)/package.m4): Depend on Makefile,
+ not configure.ac, now that the version number changes automatically.
+
+ Ensure that $(VERSION) is up to date for dist-related targets.
+ * GNUmakefile: Arrange to rerun autoconf, if the version reported by
+ git-version-gen doesn't match $(VERSION), but only for dist targets.
+
+2007-10-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix `Deep Package' failure with a configure script early in PATH
+ * tests/torture.at (Deep Package): Add `.' early in PATH.
+ Report by Jim Meyering.
+
+2007-10-27 Jim Meyering <meyering@redhat.com>
+
+ Remove all generated files from version control.
+ * aclocal.m4: Remove.
+ * configure: Remove.
+ * Makefile.in: Remove, along with all other Makefile.in in subdirs.
+ * .gitignore: Add aclocal.m4, configure and Makefile.in. Sort.
+ * README-hacking: New file: how to build from just-checked-out sources.
+
+2007-10-23 Eric Blake <ebb9@byu.net>
+
+ Improve corner case of m4_expand.
+ * lib/m4sugar/m4sugar.m4 (m4_expand, _m4_expand): Rewrite more
+ efficiently.
+ * tests/m4sh.at (AS@&t@_HELP_STRING): Test overquoted comma.
+ * doc/autoconf.texi (Evaluation Macros) <m4_expand>: Update
+ documentation.
+
+2007-10-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/make-stds.texi: Update from gnulib.
+
+2007-10-22 Paul Eggert <eggert@cs.ucla.edu>
+ and Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/c.m4 (AC_C_RESTRICT): Work around Sun C++ compatibility
+ problem reported by Bruno Haible in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2007-10/msg00027.html>.
+
+2007-10-22 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Particular Types): Mention bug in HP-UX 11.00
+ preprocessor.
+
+2007-10-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ Don't check for bug in HP-UX 11.00 cpp.
+ * lib/autoconf/types.m4 (AC_TYPE_UNSIGNED_LONG_LONG_INT):
+ Use -1ull rather than -1u, since that causes problems with gnulib; see
+ <http://lists.gnu.org/archive/html/bug-gnulib/2007-10/msg00329.html>.
+
+2007-10-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autotest.at (Backquote command substitution)
+ (Multiline backquote command substitution)
+ (Parenthetical command substitution)
+ (Multiline parenthetical command substitution): Fix typos in
+ test names.
+
+2007-10-21 Eric Blake <ebb9@byu.net>
+
+ * configure: Regenerate.
+
+2007-10-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix config status generation with Tru64 ksh.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fix
+ escaping of backslash in here-documents.
+
+ Fix `Deep Package' test failure on FreeBSD.
+ * tests/torture.at (Deep Package): Do not add `.' to $PATH
+ unnecessarily. Do not try running `/bin/sh configure' with a
+ configure script to be found in $PATH, if the shell does not do
+ this resolution. Fixes test failure on FreeBSD.
+
+ Fix config header generation with AIX awk.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS_PREPARE): In awk
+ script, use helper array D_is_set, as `" 0"' does not evaluate
+ to true for AIX awk.
+
+2007-10-21 Eric Blake <ebb9@byu.net>
+
+ * tests/autotest.at (Banners): Reinstate test, with typo
+ corrected.
+
+2007-10-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (Defaults): Validate input ranges ...
+ <at_func_validate_ranges>: ... using this new function.
+ * tests/autotest.at (Keywords and ranges): Test invalid ranges.
+ Test --list with ranges and keywords.
+ (Banners): Remove one now-failing test.
+
+2007-10-20 Eric Blake <ebb9@byu.net>
+
+ Fix testsuite --list subset.
+ * lib/autotest/general.m4 (AT_INIT) <at_list_p>: Swap newlines
+ back to spaces, before listing subset of tests.
+ Reported by Ralf Wildenhues.
+
+2007-10-19 Eric Blake <ebb9@byu.net>
+
+ s/parenthesis/parentheses/ where appropriate.
+ * doc/autoconf.texi: Fix typos.
+ * lib/m4sugar/m4sugar.m4: Likewise.
+ Reported by Ralf Wildenhues.
+
+ Document m4_expand limitation.
+ * lib/m4sugar/m4sugar.m4 (m4_expand): Mention problem with
+ unbalanced parse.
+ * doc/autoconf.texi (Pretty Help Strings, Evaluation Macros)
+ (Writing Testsuites): Mention limitations inherited from
+ m4_expand.
+
+ Improve AT_BANNER handling.
+ * lib/autotest/general.m4 (BANNERS): New named diversion.
+ (TESTS_END): Diversion no longer used.
+ (AT_INIT) <at_func_banner, BANNERS>: Factor all banners into a
+ shell function, which prints only as needed, using an associative
+ array of banner text from a special diversion.
+ <PARSE_ARGS_END>: No longer need awk to find banners.
+ <TESTS>: Banners are no longer processed by main driver loop, so
+ we no longer need case statement.
+ (AT_BANNER): Rewrite to populate new diversion.
+ (AT_SETUP): Each test invokes its own banner. No output is needed
+ to the TESTS diversion.
+ * doc/autoconf.texi (Writing Testsuites): Document slight
+ semantics change.
+ * tests/autotest.at (AT_BANNERS): Enhance test.
+ * NEWS: Document AT_BANNER.
+
+ Document and test AT_BANNER.
+ * doc/autoconf.texi (Writing Testsuites): Document AT_BANNER.
+ * tests/autotest.at (AT_CHECK_EGREP): Share between tests.
+ (AT_CHECK_BANNERS): New test.
+
+ Doc touchups.
+ * doc/autoconf.texi (Text processing Macros) <m4_strip>
+ <m4_text_wrap>: Clarify and fix typos.
+
+2007-10-18 Eric Blake <ebb9@byu.net>
+
+ Ignore `make dist' changelogs in testsuite.log.
+ * lib/autotest/general.m4 (AT_INIT) <ChangeLogs>: Prune
+ directories matching AT_PACKAGE_TARNAME-*.
+
+ Fix AT_TESTED, AT_KEYWORDS.
+ * lib/m4sugar/m4sugar.m4 (m4_append_uniq): Warn if separator
+ occurs in string, as duplicates may be added.
+ (_m4_append_uniq): New helper macro.
+ (m4_append_uniq_w): New macro.
+ * lib/autotest/general.m4 (AT_TESTED, AT_KEYWORDS): Fix
+ duplication bug by using new macro.
+ (AT_INIT) <at_tested>: Restore newline separators. Invoke tested
+ programs with stdin redirected, so programs that don't
+ understand --version won't try to behave interactively.
+ * tests/autotest.at (Tested programs): Catch this bug.
+ * tests/m4sugar.at (m4@&t@_append): Test new macro.
+ * tests/local.at (AT_TESTED): Add m4, perl.
+ * doc/autoconf.texi (Text processing Macros): Document
+ m4_append_uniq_w, and update text on m4_append.
+ * NEWS: Document the addition.
+
+2007-10-17 Eric Blake <ebb9@byu.net>
+
+ Function cleanup.
+ * lib/autotest/general.m4 (_AT_CREATE_DEBUGGING_SCRIPT): Convert
+ from m4 macro...
+ (AT_INIT) <at_func_create_debugging_script>: ...to shell
+ function.
+ (AT_INIT): Defer function declarations until after --help,
+ --version. Format functions consistently, trying to fit in 80
+ columns.
+ (TEST_FUNCTIONS): Based on recent changes, rename...
+ (TEST_GROUPS): ...to this.
+
+ Reject FreeBSD m4.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Also check for frozen file support.
+ * configure: Regenerate.
+ Reported by Bob Friesenhahn.
+
+ Test recent additions.
+ * tests/m4sugar.at (m4@&t@_map, m4@&t@_combine)
+ (m4@&t_max and m4@&t_min): New tests.
+ * doc/autoconf.texi (Evaluation Macros) <m4_apply>: Enhance
+ description.
+
+2007-10-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * TODO: multiline args in config files and headers work now.
+
+ Autotest: do not use shell functions for individual tests.
+ * lib/autotest/general.m4 (AT_INIT) <at_func_test>: Merely
+ extract the source test source, do not invoke it.
+ (AT_SETUP, AT_CLEANUP): Source test code outside shell function.
+ * tests/autotest.at (Fallacy): Actually let the inner suite fail,
+ expect exit status of 1.
+ * tests/autotest.at (Skip): New test, for bogus zsh exit status.
+
+ * lib/autotest/general.m4 (at_func_test): Fix test extraction
+ script.
+
+2007-10-17 Eric Blake <ebb9@byu.net>
+
+ Fix m4_combine for empty suffix list.
+ * lib/m4sugar/m4sugar.m4 (m4_combine): Check for suffix list.
+ * doc/autoconf.texi (Text processing Macros): Document this.
+
+ Add m4_combine, based on Libtool's lt_combine.
+ * lib/m4sugar/m4sugar.m4 (m4_combine): New macro.
+ * doc/autoconf.texi (Text processing Macros): Document it.
+ * NEWS: Likewise.
+
+2007-10-16 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Fix `configure --help=recursive' in unconfigured/read-only trees.
+ * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): Avoid errors when `.'
+ is not writable, use 'cp -p' in this case, in the hope that it
+ will not actually be needed. Still try removing files, in case
+ of other write errors.
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR): For ac_confdir,
+ use $as_myself, not $0.
+ (_AC_INIT_HELP): For --help=recursive, if the subdir does not
+ exist, try again in the the source tree. This change assumes
+ that the subpackage configure script is capable of running
+ --help=recursive in the source tree.
+ * tests/torture.at (Configuring subdirectories, Deep Package):
+ Adjust tests to expose both issues, also try invocation as
+ `sh configure ...' and plain `configure ...' with PATH adjusted.
+ * NEWS, THANKS: Update.
+ Report by Hans Ulrich Niedermann.
+
+2007-10-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Check for 64-bit int errors in HP-UX 10.20 preprocessor.
+ Problem reported by H.Merijn Brand in
+ <http://lists.gnu.org/archive/html/bug-tar/2007-10/msg00018.html>.
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT):
+ (AC_TYPE_UNSIGNED_LONG_LONG_INT):
+ Check that preprocessor handles 64-bit ints, too.
+
+2007-10-16 Eric Blake <ebb9@byu.net>
+
+ m4_map is a looping construct.
+ * lib/m4sugar/m4sugar.m4 (m4_map, _m4_map, m4_map_sep): Move.
+
+ Fix m4_map, and add some more utility macros.
+ * lib/m4sugar/m4sugar.m4 (m4_apply, m4_count, m4_dquote_elt)
+ (m4_echo, m4_make_list): New documented macros.
+ (_m4_quote, _m4_shift2): New helper macros.
+ (m4_map): Change semantics to allow calling macro without
+ arguments.
+ (m4_map_sep): Likewise. Also change semantics to quote separator,
+ to match m4_join and m4_append.
+ (m4_version_unletter): Fix use of m4_map.
+ * doc/autoconf.texi (Evaluation Macros): Document m4_apply,
+ m4_count, m4_dquote_elt, m4_echo, m4_make_list.
+ (Text processing Macros): Mention m4_dquote as a faster
+ alternative to joining with commas.
+ (Looping constructs): Document m4_map, m4_map_sep.
+ * NEWS: Mention new macros.
+
+ A few more m4sugar improvements, to benefit libtool.
+ * lib/m4sugar/m4sugar.m4 (m4_bpatsubsts, _m4_shiftn): Reduce size
+ of expansion by avoiding extra uses of $@.
+ (m4_shiftn): Avoid extra dnl, and forbid shifting by 0.
+ (_m4_cdr): New helper macro.
+ (_m4_map, m4_map_sep): Use it to reduce size of expansion.
+ (_m4_shift3): New helper macro.
+ (_m4_foreach): Swap argument order, and use new macro to reduce
+ size of expansion.
+ * doc/autoconf.texi (Looping constructs) <m4_shiftn>: Mention that
+ count must be positive.
+
+ * doc/autoconf.texi (Evaluation Macros) <m4_expand>: Fix typo.
+ Reported by Ralf Wildenhues.
+
+2007-10-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Portable Shell): Improve description of zsh
+ 4.x function subshell bug with exit and trap.
+
+2007-10-15 Eric Blake <ebb9@byu.net>
+
+ Enhance AS_HELP_STRING.
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Don't expand arguments,
+ and reduce number of expansions.
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): Rework to use m4_expand,
+ and to take indent and wrap column numbers.
+ * tests/m4sh.at (AS@&t@_HELP_STRING): Update the test.
+ * doc/autoconf.texi (Pretty Help Strings): Document details about
+ arguments.
+ (Text processing Macros): Minor tweaks.
+ * NEWS: Document this change.
+
+ Fix 2007-10-03 regression with AT_SETUP([a, b]).
+ * lib/m4sugar/m4sugar.m4 (m4_expand): New macro.
+ (m4_text_box): Use it.
+ * lib/autotest/general.m4 (AT_SETUP): Use it.
+ * lib/m4sugar/m4sh.m4 (_AS_RUN): Use it.
+ * tests/autotest.at (AT_CHECK_AT_TITLE_CHAR): Test this.
+ * NEWS: Revert caveat about semantics change on comma.
+ * doc/autoconf.texi (Evaluation Macros): Document m4_expand.
+
+2007-10-13 Eric Blake <ebb9@byu.net>
+
+ Change m4_join to match libtool's ltsugar semantics.
+ * lib/m4sugar/m4sugar.m4 (m4_join): Just define this, not defun.
+ Ignore empty arguments, using...
+ (_m4_join): ...this new helper.
+ * tests/m4sugar.at (m4@&t@_join): New test.
+ * doc/autoconf.texi (Text processing Macros): Document new
+ semantics of m4_join.
+
+ Make AC_PREREQ faster and more robust.
+ * lib/m4sugar/m4sugar.m4 (m4_ignore, m4_unquote): New macros.
+ (m4_version_prereq): Inline constant expansions.
+ (m4_list_cmp): Reduce number of expansions, by avoiding m4_case.
+ Rewrite in terms of [] list, not () list.
+ (_m4_list_cmp, _m4_version_unletter): New helper macros.
+ (m4_version_unletter): Write wrapper around new implementation to
+ preserve old semantics.
+ (m4_version_compare): Pass correct type of list, and avoid
+ overhead of flattening expressions too early.
+ (m4_do): Move to be near other quoting macros.
+ (m4_max, m4_min): Always result in decimal output.
+ * doc/autoconf.texi (Looping constructs): Add m4_car, m4_cdr.
+ Move m4_do...
+ (Evaluation Macros): ...here. Add m4_ignore, m4_unquote.
+ (Text processing Macros): Move m4_version_compare...
+ (Number processing Macros): ...to this new node; document m4_cmp,
+ m4_list_cmp, m4_sign, m4_max, m4_min.
+ * tests/m4sugar.at (m4@&t@_version_compare): Enhance test, to pick
+ up on bugs fixed by this patch.
+ * NEWS: Document new macros.
+
+2007-10-12 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Text processing Macros): Fix bad merge.
+ (Reporting Messages): Fix underfull hbox.
+
+ Some more m4sugar documentation.
+ * lib/m4sugar/m4sugar.m4: Clean up macro order.
+ * doc/autoconf.texi (Programming in M4): Lighten the warning on
+ using m4sugar; it is stabilizing and useful.
+ (Redefined M4 Macros): Touch up wording on M4 builtins; sort. Add
+ m4_divert, m4_undivert, __file__, __line__, __oline__.
+ (Diagnostics): New node, documenting m4_assert, m4_errprintn,
+ m4_fatal, m4_location, m4_warn.
+ (Diversion support): New node, documenting m4_divert_push,
+ m4_divert_pop, m4_divert_text, m4_divert_once.
+ (Text processing Macros): Sort. Add m4_flatten, m4_join,
+ m4_newline, m4_strip, m4_text_box, m4_text_wrap.
+ (Reporting Messages): Mark AC_DIAGNOSE, AC_WARNING, and AC_FATAL
+ as obsolescent.
+ (Printing Messages): Change cross-reference.
+
+ Document interaction of recent m4_append change with Libtool HEAD.
+ * lib/m4sugar/m4sugar.m4 (m4_append): Document semantics change.
+ (m4_append_uniq): Add new parameters, based on lt_append_uniq.
+ * tests/m4sugar.at (m4@&t@_append): New test.
+ * NEWS: Document semantics change.
+ * doc/autoconf.texi (Text processing Macros): Likewise.
+
+ s/AC_VERSION/AC_AUTOCONF_VERSION/.
+ * doc/autoconf.texi (Versioning): Change the name.
+ * NEWS: Likewise.
+ * lib/autoconf/general.m4 (AC_AUTOCONF_VERSION): Likewise.
+ * tests/tools.at (autoconf: AC_AUTOCONF_VERSION): Likewise.
+ Suggested by Ralf Wildenhues.
+
+ Namespace cleanup.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE)
+ (_AC_OUTPUT_HEADERS_PREPARE): Convert here-doc delimiters into
+ autoconf namespace.
+ * doc/autoconf.texi (Programming in M4sugar, Forbidden Patterns)
+ (Programming in M4sh, Macro Names): Beef up description of
+ namespaces reserved for autoconf.
+ * configure: Regenerate.
+
+2007-10-12 Eric Blake <ebb9@byu.net>
+ and Paolo Bonzini <bonzini@gnu.org>
+
+ Speed up execution of subset of testsuite.
+ * lib/autotest/general.m4 (TEST_FUNCTIONS): New diversion.
+ (AT_INIT) <at_func_test>: New shell function.
+ (AT_INIT) <at_myself>: New variable, set to absolute $as_myself.
+ (AT_INIT) <at_test_source> New variable, names file that holds
+ current test function definition.
+ (AT_SETUP): Start the shell function at_func_test_#, into the
+ TEST_FUNCTIONS diversion.
+ (AT_CLEANUP): End the shell function. Simplify the TESTS
+ diversion to invoke the function.
+
+2007-10-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * .gitignore: Ignore tags and TAGS files.
+
+2007-10-11 Eric Blake <ebb9@byu.net>
+
+ Config header generation followup.
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Check for raw newlines,
+ which won't work with the preprocessor nor with the awk
+ implementation.
+ * tests/torture.at (Define a newline): Test raw newline detection,
+ removing the XFAIL.
+ * doc/autoconf.texi (Defining Symbols): Document recent change to
+ allow backslash-newline.
+ * THANKS: Update.
+
+2007-10-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4: Put function braces in separate line.
+
+2007-10-10 Eric Blake <ebb9@byu.net>
+
+ Avoid some overhead from m4_defn and m4_popdef.
+ * lib/m4sugar/m4sugar.m4 (m4_defn, m4_popdef, m4_undefine): Only
+ pass on first argument, since we are documented that way.
+ (m4_for, m4_append_uniq, m4_text_wrap): Optimize out defined-ness
+ check where it is safe to do so.
+ (m4_append): Likewise, and quote the separator.
+ (m4_text_box): Likewise, and avoid regex, also be robust to
+ expansion and quadrigraphs.
+
+ Another AC_DEFINE speedup.
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE): Move parameter
+ elision...
+ (_AC_DEFINE_Q): ...here, and only do it once.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNCS): Avoid overquoting.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Fix m4_defn overquoting
+ introduced 2007-10-05.
+
+ Whitespace cleanup.
+ * lib/autoconf/general.m4: Use consistent indentation.
+ * configure: Regenerate.
+
+ * NEWS: Announce recent round of speed optimizations.
+
+2007-10-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Announce shell function usage in Autotest.
+
+2007-10-10 Eric Blake <ebb9@byu.net>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ Reduce number of forks at startup.
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Speed up NLS
+ sanitization.
+ * configure: Regenerate.
+
+2007-10-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ Use awk for config header generation.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fix comments.
+ (_AC_OUTPUT_HEADERS_PREPARE): New macro. Rewrite of the config
+ header machinery for use with awk and placement outside the main
+ config.status instantiation loop. Retain multi-line defines
+ through backslash-newline combinations, do not split the script
+ any more.
+ (_AC_OUTPUT_HEADER): Simplify accordingly, use $AWK.
+ (_AC_OUTPUT_MAIN_LOOP): Call _AC_OUTPUT_HEADERS_PREPARE if
+ needed.
+ (AC_OUTPUT_MAKE_DEFS): Remove backslash-newline combinations
+ from define values.
+ * NEWS: Update.
+ * tests/torture.at (#define header templates): Extend test by
+ several more cases: white space before and after `#', macros
+ with parameters in config.hin and as defines, multi-line macro
+ values.
+ (Torturing config.status): Use a define value twice the length
+ in order to exercise the awk literal string limit.
+ (Substitute and define special characters): Also try special
+ delimiter, to exercise the special-case code.
+ Suggestion by Eric Lemings.
+
+2007-10-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/local.at (AT_COPYRIGHT): Bump copyright years.
+
+2007-10-09 Eric Blake <ebb9@byu.net>
+
+ Improve header of bin/autoconf.
+ * lib/m4sugar/m4sh.m4 (AS_INIT): Add a 'generated from' notice.
+ * lib/autoconf/general.m4 (_AC_INIT_NOTICE): Override new notice
+ from M4sh.
+ * bin/autoconf.as: Put copyright up front in generated file.
+
+ * bin/autoconf.as (exit_missing_arg): Font-lock tweak.
+
+2007-10-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/install.texi (Basic Installation): Document `uninstall'.
+ * INSTALL: Regenerate.
+ Suggestion by Roberto Bagnara.
+
+2007-10-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): V7 awk had 'index'.
+
+ Adjust doc. to match latest gnulib.
+ * build-aux/texinfo.tex: Sync from gnulib.
+ * doc/standards.texi: Likewise.
+ * doc/autoconf.texi (Copying This Manual): Rename to "GNU Free
+ Documentation License" and remove the subsection. This simplifies
+ the manual a bit and is more like what other GNU projects do
+ nowadays.
+
+2007-10-08 Eric Blake <ebb9@byu.net>
+
+ Use recent changes.
+ * configure: Regenerate.
+
+ Fix regression in m4_text_wrap from 2007-10-05.
+ * lib/m4sugar/m4sugar.m4 (m4_max, m4_min): New macros.
+ (m4_sign): Sort.
+ (m4_text_wrap): Fix off-by-one error in rewrite from m4_for to
+ m4_format.
+ * lib/autotest/general.m4 (AT_SETUP): Avoid negative width.
+ * tests/autotest.at (Long test title, Longer test title): Test
+ this fix, beyond what AS_HELP_STRING already tests.
+
+ Avoid m4 warnings on bad m4_format usage.
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Use %*s, in case width
+ evaulates to 0.
+ * lib/autotest/general.m4 (AT_SETUP): Likewise; also ensure that
+ enough arguments are provided.
+
+2007-10-06 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (Shell portability): Document shell function
+ portability.
+
+2007-10-06 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autotest/general.m4 (AT_INIT): Add at_func_diff_devnull,
+ at_func_check_skip, at_func_check_status, at_func_filter_trace,
+ at_func_log_failure shell functions. Use test -s to avoid
+ useless diff invocations.
+ (at_func_check_newline): Renamed from at_check_newline.
+ (AT_SETUP): Define AT_captured_files to empty.
+ (AT_DIFF_STDERR(*), AT_DIFF_STDOUT(*)): New, extracted from _AT_CHECK.
+ (_AT_CHECK): Replace m4_case with m4_ifdef/m4_indir. Use all
+ the shell functions.
+
+2007-10-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Don't assume "." is writeable, for commands like "autoconf --version".
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_SEPARATOR_PREPARE): Use a
+ different heuristic instead, one that doesn't rely on creating
+ files.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Handle "///"
+ correctly.
+
+2007-10-05 Jim Meyering <meyering@redhat.com>
+
+ Avoid makeinfo warnings.
+ * doc/autoconf.texi (Redefined M4 Macros): Add a `,' after @xref.
+ (Looping constructs): Add ` ' after @defmac'd name, m4_do.
+
+2007-10-05 Eric Blake <ebb9@byu.net>
+
+ Resolve Python issue 1676135 regarding configure directory args.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Strip trailing
+ slashes from directory arguments.
+ * tests/base.at (configure directories): New test.
+ * doc/autoconf.texi (Installation Directory Variables): Document
+ the change.
+ * NEWS: Likewise.
+ * THANKS: Update.
+ Reported by Björn Lindqvist.
+
+ Provide better short-circuiting operation.
+ * lib/m4sugar/m4sugar.m4 (m4_cond, m4_newline): New macros.
+ (m4_text_wrap): Use it. Also avoid useless m4_for.
+ * lib/m4sugar/m4sh.m4 (_AS_QUOTE_IFELSE, AS_LITERAL_IF): Use
+ new macro.
+ (_AS_IDENTIFIER_IF): Likewise, and fix bug when $1 is [,].
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): Use new macros
+ to avoid regexps.
+ * doc/autoconf.texi (Redefined M4 Macros): Expand m4_if
+ documentation. Sort m4_mkstemp, m4_undefine. Move m4_ifndef...
+ (Conditional constructs): ...here, to new section. Also document
+ m4_cond, m4_ifval, m4_n, m4_ifvaln, m4_ifset, m4_case, m4_bmatch,
+ m4_bpatsubsts, and m4_default.
+ (Looping constructs): Document m4_shiftn, m4_shift2, m4_shift3,
+ m4_do.
+
+2007-10-04 Eric Blake <ebb9@byu.net>
+
+ Fix recent testsuite failures.
+ * lib/autotest/general.m4 (AT_INIT, AT_SETUP): Double-quote text
+ that must not be re-expanded after AS_ESCAPE.
+ * lib/m4sugar/m4sh.m4 (_AS_IDENTIFIER_IF): Don't expand $1 when
+ checking if it is an identifier.
+
+ Whitespace cleanup.
+ * lib/autotest/general.m4 (_AT_CREATE_DEBUGGING_SCRIPT): Avoid
+ leading whitespace, as it caused space-tab in testsuite.
+ (AT_INIT): Avoid trailing newlines in testsuite.
+
+ One more round of m4_foreach_w speedups.
+ * lib/m4sugar/m4sugar.m4 (m4_flatten): Only use regex if newline
+ is present.
+ (_m4_split): Avoid useless expansions inside definition. Move
+ argument defaulting...
+ (m4_split): ...here. Change alternate quote to something less
+ likely to appear in $1. Also, special case space as regexp...
+ (m4_foreach_w): ...to avoid regexp on single-term list.
+ (m4_default, m4_defn, m4_popdef, m4_undefine, _m4_foreach): Avoid
+ useless expansions inside definition.
+ * tests/m4sugar.at (m4@&t@_split): Add tests.
+
+2007-10-04 Paolo Bonzini <bonzini@gnu.org>
+
+ * general.m4 (AT_INIT): Add at_check_newline function.
+ (_AT_DECIDE_TRACEABLE): Include at_traceon test, use shell function.
+ (_AT_CHECK): Don't use at_trace_this.
+
+2007-10-04 Paolo Bonzini <bonzini@gnu.org>
+
+ Fix previous commit.
+ * lib/autotest/general.m4 (AT_LINE): Fix regex.
+
+2007-10-04 Eric Blake <ebb9@byu.net>
+
+ Speed up building testsuites.
+ * lib/autotest/general.m4 (AT_LINE): Only use regex when file
+ changed since last time. Use simpler regex.
+
+2007-10-03 Eric Blake <ebb9@byu.net>
+
+ Optimize checking for identifiers.
+ * lib/m4sugar/m4sh.m4 (AS_IDENTIFIER_IF, _AS_IDENTIFIER_IF): New
+ macros, more efficient than regex on m4_re_word.
+ * lib/autoconf/general.m4 (AC_SUBST, AC_DEFINE_TRACE_LITERAL):
+ Rewrite in terms of new macro. As a side-effect, AC_DEFINE can
+ now use @&t@.
+ * configure: Regenerate.
+
+ Remove some XFAILs, and make AT_SETUP output line up.
+ * lib/autotest/general.m4 (AT_SETUP): Only expand description
+ once; thereafter, use its expansion, properly quoted.
+ * tests/autotest.at (AT_CHECK_AT_TITLE): Also check macro
+ expansion with arguments, and check for aligned output.
+ (AT_CHECK_AT_TITLE_CHAR): Remove XFAILs for tests that now pass.
+ Add a test for macros with parameters.
+ * NEWS: Document the semantics change.
+ * tests/base.at: Fix test titles containing commas.
+ * tests/compile.at: Likewise.
+ * tests/tools.at: Likewise.
+ * tests/torture.at: Likewise.
+
+ Another round of regex avoidance.
+ * lib/m4sugar/m4sugar.m4 (m4_cr_alnum, m4_cr_all)
+ (_m4_define_cr_not, m4_cr_not_letters, m4_cr_not_LETTERS)
+ (m4_cr_not_Letters, m4_cr_not_digits, m4_cr_not_alnum)
+ (m4_cr_not_symbols1, m4_cr_not_symbols2): New macros, implementing
+ character ranges useful in m4_translit.
+ (m4_toupper, m4_tolower): Optimize the constant portion of
+ definition.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Also reject @S|@ because it
+ creates $, and reject [] thanks to AS_TR_SH rewrite.
+ (AS_TR_SH, AS_TR_CPP): Use just translit, not bpatsubst.
+ (AS_ESCAPE): Factor...
+ (_AS_ESCAPE): ...into new macro, with second argument required.
+ Avoid regex in common case.
+ (_AS_QUOTE): Use new macro.
+
+ Whitespace cleanup.
+ * lib/autoconf/types.m4: Avoid space-tab.
+ * lib/m4sugar/m4sh.m4: Use tab consistently.
+
+2007-10-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sugar.m4 (m4_shift2, m4_shift3): New macros.
+ (m4_shiftn): Remove no-longer-needed optimization. Perhaps we
+ should remove m4_shiftn entirely?
+ (m4_case, b4_bmatch, m4_map_sep, m4_bpatsubsts, m4_join):
+ Prefer m4_shift2 and m4_shift3 to m4_shiftn.
+ * lib/autoconf/lang.m4 (_AC_LANG_DISPATCH): Likewise.
+ * lib/m4sugar/m4sh.m4 (AS_CASE, AS_IF): Likewise.
+ * tests/autotest.at (AT_CHECK_AT_TEST): Likewise.
+
+2007-10-03 Eric Blake <ebb9@byu.net>
+
+ Comment touchups.
+ * lib/m4sugar/m4sugar.m4: Grammar fixes in comments.
+
+2007-10-02 Eric Blake <ebb9@byu.net>
+
+ Optimize appending text.
+ * lib/m4sugar/m4sugar.m4 (m4_append_uniq): Use index, not regular
+ expressions.
+
+ Optimize recursion.
+ * lib/m4sugar/m4sugar.m4 (m4_shiftn): This macro is called in a
+ lot of hot spots; optimize it for 2 and 3 shifts.
+
+ Optimize AC_PREREQ and other m4sugar numerics.
+ * lib/m4sugar/m4sugar.m4 (m4_sign): Write with m4_eval.
+ (m4_cmp): Compare arbitrary expressions, without overflow.
+ (m4_version_unletter): Also recognize capital letters.
+ (m4_version_compare): Avoid regex when splitting version number
+ string.
+
+2007-10-01 Eric Blake <ebb9@byu.net>
+
+ Once again, reject IRIX m4.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Use indir builtin to root out non-GNU
+ implementations that ignore --trace.
+ * configure: Regenerate.
+ Reported by Ralf Wildenhues.
+
+ Fix regression in AC_DEFINE([macro(with_arg)]).
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE): Don't chop off close
+ quotes with a careless m4_substr.
+
+2007-09-30 Eric Blake <ebb9@byu.net>
+
+ Allow nameless iteration.
+ * lib/m4sugar/m4sugar.m4 (m4_for, _m4_for): Access variable
+ indirectly.
+ * tests/m4sugar.at (myvar): Test this.
+
+2007-09-29 Eric Blake <ebb9@byu.net>
+
+ Speed optimization: avoid m4 regex when other algorithms work.
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Rewrite without regex.
+ (_AS_QUOTE_IFELSE): Likewise.
+ * lib/m4sugar/m4sugar.m4 (m4_strip): Reduce from 3 to 2 regex.
+ (m4_bpatsubsts): Split...
+ (_m4_bpatsubsts): ...so that recursion can avoid patsubst on empty
+ regex.
+ (_m4_divert()): Define, to avoid m4 warning on `m4_divert'.
+ (m4_qlen): Optimize on short strings, to avoid regex.
+ (m4_sign): Avoid regex, and fix bug with `01' and `-0'.
+ * lib/autoconf/general.m4 (AC_CACHE_VAL): Rewrite without regex.
+ (AC_DEFINE_TRACE): Likewise.
+
+2007-09-28 Eric Blake <ebb9@byu.net>
+
+ Oops - my earlier 'optimization' caused a regression.
+ * tests/local.at (AT_CHECK_M4): Fix typo.
+
+2007-09-27 Eric Blake <ebb9@byu.net>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Catch even more common AC_CACHE_VAL mistakes.
+ * lib/autoconf/general.m4 (AC_CACHE_VAL): Warn if cache variable
+ lacks '_cv_', or if AC_SUBST appears in body.
+ * tests/base.at (AC_CACHE_CHECK): Test this change.
+
+2007-09-27 Stepan Kasal <kasal@ucw.cz>
+ and Eric Blake <ebb9@byu.net>
+
+ Autotest no longer caters to Ultrix redirection limitation.
+ * doc/autoconf.texi (Writing testsuite.at): Remove the
+ limitation that the first parameter of AT_CHECK cannot
+ contain redirection.
+ (File Descriptors): Mention that Ultrix limitation is no longer a
+ show-stopper in modern code.
+ * tests/local.at (AT_CHECK_M4): Fix for cases when the fourth
+ parameter is `stderr' or `experr'. Optimize if it was `ignore'.
+ * lib/autotest/general.m4 (AT_CHECK): Update comment.
+
+2007-09-27 Eric Blake <ebb9@byu.net>
+
+ Squelch changeword in m4sugar.
+ * lib/m4sugar/m4sugar.m4 (changeword): Disable this experimental
+ feature of m4 1.4.x.
+
+ Configure whitespace touchups.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Fix alignment of
+ installation directories, and avoid TAB, in configure --help
+ output.
+ * configure.ac: Avoid extra trailing newline.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Avoid space-tab.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Avoid TAB in
+ config.status --help output.
+ * configure: Regenerate.
+
+ Fix underquotation in AS_HELP_STRING.
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): Don't underquote lhs
+ argument.
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Don't underquote
+ first-prefix argument.
+ * tests/m4sh.at (AS@&t@_HELP_STRING): Test this fix.
+ * NEWS: Document AS_HELP_STRING fix.
+
+ Autotest formatting touchups.
+ * lib/autotest/general.m4 (HELP_TUNING): Avoid TAB in terminal
+ output.
+ (PATH): Simplify computation of new PATH.
+
+2007-09-26 Eric Blake <ebb9@byu.net>
+
+ Fix testsuite breakage in last patch.
+ * tests/autotest.at (AT_CHECK_AT_TITLE): Properly quote the
+ font-lock fix.
+ * tests/torture.at (@%:@define header templates): Rename, so that
+ output lines up correctly.
+
+ More font-lock happiness.
+ * tests/autotest.at (AT_CHECK_AT_TITLE_CHAR): Clean up font
+ confusion.
+
+2007-09-25 Eric Blake <ebb9@byu.net>
+
+ Typo fixes.
+ * lib/autoconf/general.m4 (AC_SUBST): Fix typo in comment.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_PUSHDEF): Likewise.
+
+ Improve documentation of M4 parameter expansion.
+ * doc/autoconf.texi (Quoting and Parameters): New section.
+ (Quotation and Nested Macros): Improve wording.
+
+ Improve C99 detection.
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C99): Add support for HP cc, and
+ avoid deprecation warning with icc.
+ * THANKS: Update.
+ Reported by Ted Bullock.
+
+2007-09-24 Jim Meyering <jim@meyering.net>
+
+ Whenever possible, use the vertical bar as sed delimiter.
+ * lib/autoconf/functions.m4 (GETLOADAVG_LIBS) [AC_FUNC_GETLOADAVG]:
+ Use "|", not "!".
+ * lib/autoconf/status.m4 (_AC_SRCDIRS) [ac_top_builddir_sub]:
+ [ac_dir_suffix]: Use "|", not "," as sed delimiter.
+ * tests/mktests.sh (as_me): Likewise.
+ * lib/freeze.mk (check-forbidden-patterns): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Likewise.
+ * configure: Regenerate.
+ * doc/autoconf.texi (Shell Substitutions): Use "|", not "," in examples.
+ * lib/autotest/general.m4 (AT_INIT): Use "|", not "&" as sed delimiter
+ in the : -> $PATH_SEPARATOR transformation of $AUTOTEST_PATH.
+ This is fine, as long as $PATH_SEPARATOR doesn't contain "|".
+
+2007-09-22 Jim Meyering <jim@meyering.net>
+
+ Add a comment.
+ * lib/autoconf/headers.m4 (HAVE_STDBOOL_H): Document the
+ 2004-05-31 change also with a comment in the code.
+
+2007-09-20 Eric Blake <ebb9@byu.net>
+
+ More contribution housekeeping.
+ * THANKS: Sort.
+ * AUTHORS: Sort, reflect recent assignment from Helge Deller.
+
+ Ignore additional files, when copying cross-repository.
+ * .gitignore: Ignore CVS directories, emacs edits.
+ * .cvsignore: Ignore .git directory, emacs edits.
+
+2007-09-15 Eric Blake <ebb9@byu.net>
+
+ Provide AC_VERSION, not m4_AUTOCONF_VERSION.
+ * doc/autoconf.texi (Text processing Macros): Remove mention of
+ m4_AUTOCONF_VERSION, and leave m4_PACKAGE_VERSION undocumented
+ once again.
+ (Notices): Move AC_PREREQ...
+ (Versioning): ...to this new section, alongside the new AC_VERSION
+ alias for the undocumented m4_PACKAGE_VERSION.
+ * lib/m4sugar/m4sugar.m4 (m4_AUTOCONF_VERSION): Revert change.
+ * lib/autoconf/general.m4 (AC_VERSION): New macro.
+ * NEWS: Update to match this rename.
+ * tests/m4sugar.at (m4@&t@_version_compare): Remove tests of
+ m4_PACKAGE_VERSION.
+ * tests/tools.at (autoconf: AC_VERSION): New test.
+ Suggested by Paolo Bonzini and Benoit Sigoure.
+
+2007-09-14 Eric Blake <ebb9@byu.net>
+
+ Prepare for conversion to git.
+ * doc/.cvsignore: Avoid multiple listings on one line.
+ * bin/.cvsignore: Likewise.
+ * .gitignore, bin/.gitignore, config/.gitignore, doc/.gitignore,
+ lib/.gitignore, lib/Autom4te/.gitignore, lib/autoconf/.gitignore,
+ lib/autoscan/.gitignore, lib/autotest/.gitignore,
+ lib/emacs/.gitignore, lib/m4sugar/.gitignore, man/.gitignore,
+ tests/.gitignore: New files, identical to .cvsignore counterpart.
+
+2007-09-13 Eric Blake <ebb9@byu.net>
+
+ Editing eye-candy.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Restore
+ font-lock balance.
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P): Likewise.
+ * lib/autoconf/general.m4 (_AC_DO_ECHO): Likewise.
+ * configure: Regenerate.
+
+ Clean up 'make dist' of previous patch.
+ * tests/Makefile.am (EXTRA_DIST): Distribute mktests.stamp.
+ (CLEANFILES): Don't clean the stamp, since we distribute the
+ generated files pre-built.
+ (MAINTAINERCLEANFILES): Clean it here instead.
+ * tests/Makefile.in: Regenerate.
+
+ Avoid parallel 'make check' issue.
+ * tests/Makefile.am (mktests.stamp): New witness.
+ (TESTSUITE_GENERATED_AT): Use it.
+ (CLEANFILES): Clean the witness.
+ * tests/.cvsignore (mktests.stamp): Ignore the witness.
+
+ Document another awk pitfall.
+ * doc/autoconf.texi (Limitations of Usual Tools) <awk>: Document
+ limitation of field variables in END.
+ Reported by Gary V. Vaughan.
+
+ * AUTHORS: Add missing entries.
+
+2007-09-12 Eric Blake <ebb9@byu.net>
+
+ Publish m4_ifndef, m4_version_compare, m4_AUTOCONF_VERSION.
+ * doc/autoconf.texi (Text processing Macros): Document
+ m4_version_compare, m4_AUTOCONF_VERSION, m4_PACKAGE_VERSION.
+ (Redefined M4 Macros): Document m4_ifndef.
+ * lib/m4sugar/m4sugar.m4 (m4_AUTOCONF_VERSION): New macro; we
+ can't obsolete m4_PACKAGE_VERSION at this time since Autoconf 1.10
+ used it while it was undocumented.
+ * NEWS: Document this change.
+ * lib/m4sugar/Makefile.am (version.m4): Update copyright dates.
+ * lib/m4sugar/Makefile.in: Regenerate.
+ * tests/m4sugar.at (m4@&t@_version_compare): New test.
+ Reported by Bruno Haible.
+
+ * doc/autoconf.texi (Generic Compiler Characteristics): Add
+ missing index entries.
+
+2007-09-11 Eric Blake <ebb9@byu.net>
+
+ Centralize all system extensions checks.
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Inline code
+ from AC_AIX, AC_GNU_SOURCE, AC_MINIX. Add Interix support.
+ (AC_AIX, AC_GNU_SOURCE, AC_MINIX): Obsolete, and point to
+ AC_USE_SYSTEM_EXTENSIONS.
+ (AC_ISC_POSIX): Obsolete, and point to AC_SEARCH_LIBS.
+ (AC_XENIX_DIR, AC_IRIX_SUN): Promote proper quoting in AU_DEFUN.
+ * doc/autoconf.texi (Posix Variants): Reword this section,
+ emphasizing that AC_USE_SYSTEM_EXTENSIONS is the preferred method,
+ rather than a series of system-specific checks.
+ (Obsolete Macros): Add AC_AIX, AC_GNU_SOURCE, AC_ISC_POSIX,
+ AC_MINIX.
+ * NEWS: Document this change.
+ * THANKS: Update.
+ Reported by Martin Koeppe.
+
+2007-09-08 Eric Blake <ebb9@byu.net>
+
+ Clean up obsolete macros references.
+ * doc/autoconf.texi: Add anchors to support better
+ cross-referencing.
+ (Particular Structures): Move obsolete macros descriptions...
+ (External Software): Likewise.
+ (Package Options): Likewise.
+ (Obsolete Macros): ...to here. Add cross-references to
+ documentation on replacements.
+ * NEWS: Mention that these macros have been obsolete for a while
+ now: AC_STRUCT_ST_BLKSIZE AC_STRUCT_ST_RDEV AC_WITH AC_ENABLE.
+
+ Improve M4 path searching during configure.
+ * lib/autoconf/programs.m4 (AC_PATH_PROGS_FEATURE_CHECK): New
+ macro.
+ (_AC_PATH_PROG_FEATURE_CHECK): Rename...
+ (_AC_PATH_PROGS_FEATURE_CHECK): ...to this, add defaulted action
+ parameter, and kill side effects.
+ (_AC_PROG_GREP, AC_PROG_SED): Adjust callers.
+ (_AC_FEATURE_CHECK_LENGTH): Kill extra whitespace.
+ * m4/m4.m4 (AC_PROG_GNU_M4): Don't stop searching until working m4
+ is found.
+ (AC_PATH_PROGS_FEATURE_CHECK): Add backwards compatibility hack to
+ allow bootstrapping with autoconf 2.61.
+ * configure.ac (M4): AC_PROG_GNU_M4 now exits on failure.
+ * configure: Regenerate.
+ * doc/autoconf.texi (Generic Programs): Document new macro.
+ * tests/mktests.sh (au_exclude_script): Exclude auto-testing new
+ macro.
+ * tests/semantics.at (AC_PATH_PROGS_FEATURE_CHECK): New test.
+ * NEWS: Document the change.
+ * THANKS: Update.
+ Reported by Hans Aberg.
+
+ * doc/autoconf.texi (Generic Programs): Fix typo.
+
+2007-09-06 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Generic Programs): Use $PATH_SEPARATOR, not
+ :, and make it clear that optional @var{path} defaults to $PATH.
+ (Erlang Compiler and Interpreter): Likewise.
+
+ Texinfo cleanup.
+ * doc/autoconf.texi: Avoid lines > 80 columns when possible.
+ Reword some paragraphs to avoid overfull, underfull hbox
+ warnings. Add index entries to avoid overfull vbox warnings.
+
+2007-09-05 Eric Blake <ebb9@byu.net>
+
+ * NEWS: Adjust wording for AC_CONFIG_LINKS.
+ Reported by Ralf Wildenhues.
+
+2007-09-03 Eric Blake <ebb9@byu.net>
+
+ * NEWS: Document fixes that have been applied since 2.61a.
+
+ Housekeeping.
+ * THANKS: Update, and convert to UTF-8 encoding.
+ * AUTHORS: Likewise.
+
+2007-08-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (AC_SITE_LOAD): Guard against file
+ names beginning with `-' again.
+
+2007-08-22 Stepan Kasal <kasal@ucw.cz>
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Defining Directories): Mention
+ AM_CPPFLAGS, as the way to modify CPPFLAGS when using Automake.
+
+2007-08-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (AC_SITE_LOAD): Do not overwrite "$@"
+ here, this macro is expanded by AC_INIT. Fixes 2.60 regression.
+ * tests/base.at (configure arguments): New test.
+ * THANKS: Update.
+ Report by Olaf Lenz.
+
+ * lib/autoconf/general.m4 (_AC_ENABLE_IF): Expand macro
+ arguments in comment.
+ Report by Vincent Torri <vtorri at univ minus evry dot fr>.
+
+2007-08-20 Benoit Sigoure <tsuna@lrde.epita.fr>
+
+ * doc/autoconf.texi (File System Conventions): Index the proper
+ way of detecting absolute file names.
+
+2007-08-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * build-aux/config.guess, build-aux/config.sub,
+ build-aux/elisp-comp, build-aux/install-sh, build-aux/mdate-sh,
+ build-aux/missing, build-aux/texinfo.tex, doc/fdl.texi,
+ doc/make-stds.texi, doc/standards.texi: Sync from gnulib.
+ * doc/autoconf.texi (GNU Free Documentation License): Adjust for
+ sectioning change in fdl.texi.
+
+ * bin/autoconf.as: Update --version output to match current GCS.
+ * bin/autoheader.in: Likewise.
+ * bin/autom4te.in: Likewise.
+ * bin/autoreconf.in: Likewise.
+ * bin/autoscan.in: Likewise.
+ * bin/autoupdate.in: Likewise.
+ * bin/ifnames.in: Likewise.
+
+2007-08-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINK): Do not try to link a
+ file to itself if source and build trees coincide.
+ * tests/torture.at (AC_CONFIG_LINKS and identical files): New
+ test.
+ Report by Sebastian Freundt <hroptatyr@gna.org>.
+
+2007-07-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Reword the copyright notices to match what's suggested in GPLv3.
+ In ChangeLog files, use more-permissive notice rather than GPL, as
+ per usual GNU standards these days.
+
+2007-07-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (autoreconf Invocation): Document ACLOCAL_AMFLAGS
+ limitation reported by Leo Moisio in
+ <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=432941>.
+
+2007-07-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * COPYING: Update to GPLv3. All uses changed.
+
+2007-06-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): sed -e ''
+ fails on AIX 5.3.
+
+2007-06-17 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Handle absolute `srcdir'.
+ * tests/autotest.at (srcdir propagation): Test absolute `srcdir' and
+ `srcdir' as subdirectory of `builddir'.
+
+2007-06-13 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Compute $srcdir correctly.
+ * tests/autotest.at (srcdir propagation): New test.
+ * THANKS: Update.
+ Reported by Mike Frysinger.
+
+2007-06-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_SEPARATOR_PREPARE): Set FPATH too.
+ Problem reported by Fred Kreek in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2007-06/msg00009.html>.
+ * doc/autoconf.texi (Special Shell Variables): Warn about FPATH.
+ (Macro Names, Defining Directories): Don't mention PATH as a name
+ for a fully qualified file name, as this usage violates the GNU
+ coding standards and we shouldn't recommend it.
+
+ * lib/autotest/general.m4 (AT_INIT): Don't set PATH to the empty
+ string and then assume shell builtins like "test" will work.
+
+2007-06-12 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/general.m4 (AC_SUBST): Raise a fatal error if VARIABLE is
+ not a valid shell variable name.
+ * tests/mktests.sh (ac_exclude_list): Add AC_ARG_VAR.
+ * tests/torture.at (AC_SUBST: variable name validation): New test.
+ Reported by Andreas Schwab.
+
+2007-06-04 Noah Misch <noah@cs.caltech.edu>
+
+ * doc/autoconf.texi (AC_F77_MAIN): Give a specific usage example that
+ works with both C and C++.
+
+2007-06-03 Noah Misch <noah@cs.caltech.edu>,
+ Bruno Haible <bruno@clisp.org>
+
+ * lib/autoconf/c.m4 (AC_OPENMP): Use a simple loop instead of compiler
+ brand tests.
+
+2007-05-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Types): Give example of use for
+ AC_TYPE_INT8_T etc.
+
+2007-05-29 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/types.m4 (_AC_TYPE_UNSIGNED_INT): Fix a typo.
+
+2007-05-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Types): AC_TYPE_INT8_T does not
+ define HAVE_INT8_T, and likewise for similar macros.
+ Problem reported by Patrick Welche in
+ <http://lists.gnu.org/archive/html/autoconf/2007-05/msg00062.html>.
+
+2007-05-25 Noah Misch <noah@cs.caltech.edu>
+
+ * bin/Makefile.am ($(top_builddir)/bin/autom4te): New dependency.
+
+2007-05-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_OPENMP): Don't echo --enable-openmp
+ choice, since that's what we do with --enable-largefile etc.
+ Redo indenting and assignments to simplify things a bit, and make
+ the parens work with Emacs.
+
+ * doc/autoconf.texi (Generic Compiler Characteristics): Fix typo
+ in my previous change: AC_C_OPENMP -> AC_OPENMP. Reported by Bruno
+ Haible.
+
+2007-05-21 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/c.m4 (AC_OPENMP): Simplify use of AC_ARG_ENABLE.
+ * tests/local.at (AT_CHECK_ENV): Exempt OPENMP_CFLAGS.
+
+2007-05-21 Bruno Haible <bruno@clisp.org>
+
+ * NEWS: Rename AC_C_OPENMP to AC_OPENMP.
+ * lib/autoconf/c.m4 (AC_OPENMP): Renamed from AC_C_OPENMP.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Move
+ renamed AC_OPENMP documentation here, from "C compiler".
+ Mention C++ and Fortran.
+
+2007-05-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Tweak OpenMP documentation a bit.
+
+2007-05-21 Bruno Haible <bruno@clisp.org>
+
+ * NEWS: Mention AC_C_OPENMP.
+ * lib/autoconf/c.m4 (AC_C_OPENMP): New macro.
+ * doc/autoconf.texi (C Compiler): Document AC_C_OPENMP.
+ Based in part on Steven G. Johnson's investigations for the AX_OPENMP
+ macro in the Autoconf macro archive.
+
+2007-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autom4te.in: Fix typos.
+
+2007-05-16 Noah Misch <noah@cs.caltech.edu>
+
+ * bin/autoconf.as: Handle `-' just like other input files.
+ * bin/autom4te.in (parse_args): Pass `-' through.
+ (handle_output): Skip the forbidden token search if we read from stdin.
+ (up_to_date): Always treat stdin as out of date.
+ * tests/tools.at (autoconf: input from stdin): New test.
+ (autoconf: forbidden tokens, basic): Check a second `autoconf' run.
+
+2007-05-16 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/foreign.at tests/semantics.at, tests/tools.at: Remove
+ parameters for AT_CLEANUP.
+ * tests/local.at (AT_CHECK_AU_MACRO): Likewise.
+
+2007-05-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Document that AC_C_RESTRICT checks 'restrict' last.
+ * doc/autoconf.texi (C Compiler): Likewise.
+
+2007-05-14 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/c.m4 (AC_C_RESTRICT): Check `restrict' last.
+
+2007-05-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi: Direntry for "autoconf Invocation"
+ renamed to "autoconf-invocation"
+
+ * doc/autoconf.texi (Caching Results): The CACHE-ID variable
+ in the examples should not use the internal "ac_" prefix.
+
+2007-05-05 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (_AT_NORMALIZE_TEST_GROUP_NUMBER): Use `eval'.
+ * doc/autoconf.texi ($@, case): Document Zsh limitations.
+
+2007-05-03 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Put a.out first.
+ Reorganize the comments before and in the macro.
+
+2007-05-02 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/lang.m4, lib/autoconf/c.m4,
+ lib/autoconf/fortran.m4, lib/autoconf/erlang.m4: Cleanup of
+ section titles and other comments; no code change.
+
+2007-05-01 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Particular Programs): Typo
+ @acindex{AC_PROG_MKDIR_P} shouldn't have "AC" in that call.
+
+2007-04-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_SPY): Don't imply that
+ 'configure' will fail if the shell lacks proper support for shell
+ functions. Suggested by RMS.
+
+2007-04-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Correct the warning
+ about Solaris /bin/printf '%010000x' 123. Problem reported by
+ Bruno Haible.
+
+2007-04-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Don't look
+ for a.* when searching for executables, as this prevents users
+ from having files like a.c. Problem reported by Ralf Wildenhues in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2007-04/msg00029.html
+ This fixes a problem introduced on 2000-12-19.
+
+2007-04-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Warn about Solaris
+ /bin/printf '%010000x' 123. Problem reported by Arto C. Nirkko
+ via Bruno Haible.
+
+2007-04-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Document recent changes to AC_CHECK_ALIGNOF, AC_CHECK_SIZEOF,
+ AC_CHECK_TYPE, AC_CHECK_TYPES.
+ * doc/autoconf.texi (Generic types): C types must be type-names
+ (the C terminology), not type-ids (the C++ term). C++ types
+ must not be anonymous.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW): Remove special case
+ for C++; this drops support for anonymous struct and union types,
+ which were problematic anyway.
+ * tests/semantics.at (AC_CHECK_HEADERS_NEW): Adjust test to work even
+ for C++.
+
+2007-04-12 Jim Meyering <jim@meyering.net>
+
+ * doc/autoconf.texi (Libraries): Typo fix: insert missing "in".
+
+2007-04-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINK): Fix AC_CONFIG_LINKS
+ to prefer a link source from the build tree, if it exists.
+ Report by Pallav Gupta <pallavgupta@gmail.com>.
+
+2007-04-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Generic Types): Document the restrictions
+ on types imposed by AC_CHECK_TYPE, AC_CHECK_TYPES.
+ (Generic Compiler Characteristics): AC_CHECK_SIZEOF now works
+ with objects too. Document the restrictions on its use.
+ Document the restrictions on AC_CHECK_ALIGNOF's type argument.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW):
+ For C, just try sizeof (TYPE) and sizeof ((TYPE)); if the former
+ works but the latter doesn't, then it's a valid type.
+ This lets people use function types and so forth.
+ For C++ there doesn't seem to be a simple solution, so leave it alone.
+ (AC_CHECK_SIZEOF): Allow argument to be a variable.
+ (AC_CHECK_SIZEOF, AC_CHECK_ALIGNOF): Don't bother to invoke
+ AC_CHECK_TYPE; that wasn't documented or necessary.
+
+2007-04-11 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE): Skip AS_TEST_X
+ when cross-compiling.
+
+2007-04-11 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (External Software): Fix a typo in the
+ previous change.
+
+2007-04-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (External Software, Package Options):
+ Fix ambiguous wording. Report by Reuben Thomas <rrt@sc3d.org>.
+
+2007-04-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Types): AC_C_LONG_DOUBLE is now
+ obsolescent. Suggested by Bruno Haible.
+ * NEWS: Document this.
+
+2007-03-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Here-Documents, Limitations of Builtins):
+ (Limitations of Usual Tools): Don't say "older" if Solaris 10 by
+ default still has the problem. Problem reported by Bruce Korb.
+
+2007-03-28 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix a
+ comment in the generated config.status.
+
+2007-03-27 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (AC_CONFIG_SUBDIRS): Update comment.
+
+2007-03-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Shellology): Rework treatment of the 'test'
+ command and case statements to make it a bit clearer and describe
+ more pitfalls.
+
+2007-03-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Mention that AC_PROG_CC_C99 also
+ checks for unsigned long long int.
+
+2007-03-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Warn about other
+ nonstandard grep R.E. escape sequences.
+
+2007-03-17 Jim Meyering <jim@meyering.net>
+
+ * doc/autoconf.texi: Adjust grammar around use of "heuristics".
+ (Limitations of Usual Tools): Also list \< and \>, and mention that
+ HP-UX's grep, like the one from Solaris, does not support that syntax.
+
+2007-03-09 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Specifying Names): `--host' does not
+ change the build type.
+
+2007-03-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Warn that AC_C_BIGENDIAN
+ suggests AC_CONFIG_HEADERS.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Warn if not using
+ AC_CONFIG_HEADERS. Problem reported by
+ Peter O'Gorman.
+
+2007-02-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Fix typo "__LITLE_ENDIAN__".
+ Problem reported by Paolo Bonzini in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2007-02/msg00024.html
+ * tests/semantics.at (AC_C_BIGENDIAN): Don't reject hosts that have
+ universal binaries. Problem reported by Elias Pipping.
+
+2007-02-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: AC_C_BIGENDIAN now supports universal binaries a la Mac OS X.
+ * doc/autoconf.texi (C Compiler): Document this. There is a new
+ extra argument ACTION-IF-UNIVERSAL.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Implement this.
+ Add support for Solaris-style _LITTLE_ENDIAN and _BIG_ENDIAN.
+ Reindent for sanity's sake.
+
+2007-02-24 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Update
+ copyright.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ (_AT_DECIDE_TRACEABLE): Fix syntax highlighting.
+
+2007-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): With --clean, return exit
+ status of rm so we know when it failed.
+ If cleaning of test dir failed before running the test, warn.
+ Output the line separator in verbose mode before the warning
+ to make clear the warning belongs to the following test.
+
+2007-02-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Parentheses): Mention problem with (( in
+ shells.
+
+2007-02-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fix quoting
+ errors introduced in last change.
+
+2007-02-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Prefer \r to
+ an actual carriage return. Use "ac_cr" to contain the actual
+ carriage return.
+ * doc/autoconf.texi (Limitations of Usual Tools): Document problem
+ with traditional Awk and begin.
+ * tests/torture.at (Limitations of Builtins): Document the problem
+ with Bash 2.03 printf.
+ (Substitute and define special characters):
+ Remove trailing white space. Work around a bug in Solaris 8 /bin/bash.
+
+2007-02-06 Ralf Menzel <menzel@ls6.cs.uni-dortmund.de> (tiny change)
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Redirect
+ input from /dev/null in awk test, so even Solaris /usr/bin/awk
+ will not wait for input with a script containing only a BEGIN
+ rule.
+
+2007-02-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Introduction, Why GNU M4): Clarify M4 version
+ requirements.
+ * README: Likewise.
+
+2007-02-02 Eric Blake <ebb9@byu.net>
+
+ * NEWS: Update copyright.
+
+ * m4/m4.m4 (AC_PROG_GNU_M4): Reject M4 1.4 through 1.4.4 as
+ broken.
+ * configure.ac: Update error message.
+ * NEWS: Note that M4 1.4.5 or later is now a hard dependency.
+ Reported by Gary Vaughan and Jim Meyering, and problem analyzed
+ by Stepan Kasal:
+ http://lists.gnu.org/archive/html/bug-autoconf/2006-11/msg00025.html
+
+2007-01-31 Eric Blake <ebb9@byu.net>
+
+ * THANKS (people): Update.
+
+2007-01-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Shellology): pdksh 5.2.14 is still the
+ latest version.
+ (Shell Substitutions): Note problems with @{var:=value} etc.
+ Add a new section for problems with @{#var} etc. Problem noted
+ by Ralf Wildenhues. See:
+ http://lists.gnu.org/archive/html/libtool-patches/2005-01/msg00157.html
+
+2007-01-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Also
+ AC_SUBST([MKDIR_P]), so that Automake < 1.10 will pick up its
+ trace, if a package uses AC_PROG_MKDIR_P explicitly. The actual
+ substitution will still be done by the special code.
+ Report by Jim Meyering.
+
+ * doc/autoconf.texi (File System Conventions): Mention that
+ $PATH_SEPARATOR is for the build system only.
+ Report by Keith Marshall.
+
+2007-01-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Setting Output Variables): Mention that
+ all non-NUL characters are ok in substituted values.
+ * lib/autoconf/status.m4 (_AC_SED_CMD_LIMIT): Fix comment typo.
+ (_AC_OUTPUT_FILES_PREPARE): Test and use backslash escaping of
+ carriage return for $AWK, needed for BSD awk.
+ * tests/torture.at (Substitute and define special characters):
+ Test all 8 bit non-NUL characters.
+ Report against Automake by Patrick Welche.
+
+2007-01-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi: Direntry for "autoconf Invocation" renamed.
+
+2007-01-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_PROG_SED): When closing a pipe
+ early on the reader side, drop stderr of the input to avoid
+ `broken pipe' error output; this may happen even with shell
+ builtin `echo' of some bash versions. Reports by Ian Macdonald
+ <iamacdo@telkomsa.net> and Sam Sexton <Sam.Sexton@reuters.com>.
+
+2007-01-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Use newlines to
+ separate items of `ac_user_opts', to avoid long lines.
+ (_AC_INIT_PARSE_ENABLE2, _AC_ENABLE_IF_ACTION): Adjust.
+
+2007-01-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi: Fix some typos.
+
+2007-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix some wording problems noted by Paolo Bonzini in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2007-01/msg00077.html
+ * doc/autoconf.texi (Signed Overflow Examples): Give more
+ discussion about the allow_superuser_privileges example,
+ and change it a bit to make things clearer.
+ (Optimization and Wraparound): Clarify whether the compiler
+ will generate an infinite loop for the example derived from
+ Autoconf's mktime test.
+ (Signed Overflow Advice): Say that -ftrapv is meant for debugging.
+ Also, clarify unsigned multiplication overflow.
+
+2007-01-04 Eric Blake <ebb9@byu.net>
+
+ * bin/Makefile.am (RELEASE_YEAR): New macro.
+ (edit): Use it to supply correct copyright year to scripts.
+ * bin/autoconf.as (version): Use it.
+ * bin/autoheader.in ($version): Likewise.
+ * bin/autom4te.in ($version): Likewise.
+ * bin/autoreconf.in ($version): Likewise.
+ * bin/autoscan.in ($version): Likewise.
+ * bin/autoupdate.in ($version): Likewise.
+ * bin/ifnames.in ($version): Likewise.
+
+2007-01-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Integer Overflow): Revised based on today's
+ feedback. The most important changes document what happens when
+ you convert an out-of-range value to a signed integer type, and
+ say that (sum < a) != (b < 0) reliably detects overflow when sum =
+ a + b.
+
+ * doc/autoconf.texi (Integer Overflow): Greatly expand and
+ rewrite, taking notions from the recent discussion on the gcc and
+ autoconf mailing lists; please see
+ http://lists.gnu.org/archive/html/autoconf-patches/2006-12/msg00091.html
+ and follow the many links.
+ (Integer Overflow Basics, Signed Overflow Examples):
+ (Optimization and Wraparound, Signed Overflow Advice):
+ (Signed Integer Division): New sections.
+
+2006-12-28 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE): Don't include
+ preprocessor macro arguments in traced name.
+ * doc/autoconf.texi (Defining symbols): Document longstanding
+ support for AC_DEFINE-ing macros with arguments, and document
+ behavior when the same variable has multiple AC_DEFINEs.
+ * lib/autoconf/fortran.m4 (_AC_FC_WRAPPERS): Revert to the
+ old implementation which AC_DEFINEs the FC_FUNC and FC_FUNC_
+ macros directly, giving much shorter and simpler code.
+
+2006-12-28 Malcolm Purvis <malcolmp@xemacs.org> (trivial change)
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Insert a
+ space before "$ac_configure_args" to prevent a 'config.status
+ --recheck' failure if ac_configure_args doesn't contain a leading
+ space. This works around a problem with the XEmacs configure.ac,
+ which uses the (undocumented) ac_configure_args variable
+ inconsistently with Autoconf.
+
+2006-12-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MKTIME):
+ Include <limits.h>, and use its INT_MAX to rewrite the
+ j loop so that it does not overflow 'int'. Problem reported by
+ Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2006-12/msg00084.html>.
+ Play it safe by shifting left by 1 rather than multiplying by 2,
+ as GCC is less likely to optimize this away when the value
+ is signed (when it assumes overflow leads to undefined behavior).
+ Also, don't assume time_t uses two's complement.
+
+2006-12-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/torture.at (Substitute a 2000-byte string): Avoid using
+ a 10kB long (multi-line) string literal, OpenServer 5.0.7 ksh
+ dumps core on it. Report by Tim Rice.
+
+2006-12-18 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/general.m4 (AC_ARG_ENABLE): Print help about
+ --disable-option-checking to --help output even when
+ AC_PRESERVE_HELP_ORDER is not used.
+ (_AC_INIT_PARSE_ENABLE2): Print warnings using actual --enable or
+ --with argument, rather than argument with [-.] replaced by
+ underscores.
+ * NEWS: Fix typo in previous change; the news was in the
+ wrong section.
+
+2006-12-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Warnings are now generated by default for unknown
+ --enable-* and --with-* options.
+ * doc/autoconf.texi (Option Checking): Renamed from
+ (Configure Option Checking). Tighten up the wording a bit.
+ (External Software, Package Options): Cross-reference to Option
+ Checking, and use this to shorten our section.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Prefer test -n
+ "$x" to test "x$foo" != x.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Likewise.
+ Don't warn if $enable_option_checking is "no".
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Initialize
+ ac_unrecognized_opts to the empty string.
+ Don't echo the unrecognized opts, as this might mishandle
+ backslashes or leading -.
+ (AC_PRESERVE_HELP_ORDER): Put the --disable-option-checking
+ usage next to the other --disable-FEATURE options in the
+ help string.
+
+2006-12-18 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS, _AC_INIT_PARSE_ARGS):
+ (_AC_INIT_PARSE_ENABLE2, _AC_INIT_HELP, _AC_ENABLE_IF):
+ Print warning for unrecognized --with and --enable options
+ (AC_DISABLE_OPTION_CHECKING): New macro to disable warnings.
+ * lib/autoconf/status.m4 (AC_CONFIG_SUBDIRS, _AC_OUTPUT_SUBDIRS):
+ Disable option checking when subdirs are configured.
+ (AC_OUTPUT): If warnings are enabled, print warning about
+ unrecognized --with and --enable options at the end of
+ the configure output (as well as at the beginning).
+ * doc/autoconf.texi (Option Checking): New node.
+ Document new option warning functionality.
+
+2006-12-16 Eric Blake <ebb9@byu.net>
+
+ * configure.ac (AC_INIT): Bump version, since 2.61a is released.
+ * NEWS: Start news for current version.
+
+2006-12-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT):
+ Define HAVE_GETMNTENT to 1, not to the empty string.
+ Problem originally reported by Jochen Friedrich in
+ <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=403243>.
+
+ This change prompted by a problem report by Andrey Simonenko in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-12/msg00026.html>.
+ * doc/autoconf.texi (Defining Symbols): AC_DEFINE works for
+ object-like macros only, in the traditional portable character
+ set.
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE_LITERAL):
+ Warn about attempts to define things that are not identifiers.
+ * lib/autoconf/fortran.m4 (_AC_FC_WRAPPERS): Rewrite to avoid
+ awful hack that AC_DEFINEd macro names containing parentheses.
+
+2006-12-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Undo some of the 2006-12-10 change. It was
+ too drastic, even if Texinfo in theory requires it for info mode.
+
+ (config.status Invocation): Renamed back from Recreating a
+ Configuration).
+ (Obsolete config.status Use): Renamed back from Obsolete Recreation.
+ (Autoconf 2.13): Renamed back from 20th-century Autoconf 2.
+
+2006-12-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Version 2.61a.
+
+2006-12-11 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Document changes with echo and printf, and the lack
+ of limits on the total size of multi-line values of substituted
+ variables, and the AC_FUNC_FSEEKO fix.
+
+2006-12-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Writing Autoconf Input): Renamed from
+ Writing configure.ac.
+ (Autoconf Input Layout): Renamed from configure.ac Layout.
+ (Recreating a Configuration): Renamed from config.status Invocation.
+ (Obsolete Recreation): Renamed from Obsolete config.status Use.
+ (acconfig Header): Renamed from acconfig.h.
+ (20th-century Autoconf 2): Renamed from Autoconf 2.13.
+ (Writing Testsuites): Renamed from Writing testsuite.at.
+ (Autom4te Cache): Renamed from autom4te.cache.
+
+ * BUGS: Remove mention of VPATH problem, since it's now documented
+ not to be a bug in the Autoconf build procedure itself, but rather
+ a problem with the proprietary `make' programs.
+
+ * doc/autoconf.texi (Build Directories): Add a cross reference
+ to VPATH and Make.
+
+ * build-aux/config.guess, build-aux/config.sub, build-aux/texinfo.tex:
+ * doc/standards.texi: Sync from gnulib.
+
+ * man/autoconf.1, man/autoheader.1, man/autom4te.1, man/autoreconf.1:
+ * man/autoscan.1, man/autoupdate.1, man/config.guess.1:
+ * man/config.sub.1, man/ifnames.1: Remove from CVS, since they're
+ generated automatically.
+
+2006-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C89): Also try -xc99=all, for Sun
+ C 5.8 on Solaris 10. Using -xc99=all rather than -xc99 bypasses
+ the buggy -xc99 option of Forte Developer 7 C on Solaris 9.
+
+2006-12-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Drop the
+ `CEOF$ac_eof' special marker, the awk script cannot contain a
+ line matching `^CEOF', so this is not needed any more.
+ * tests/torture.at (Substitute a newline): Expose the `%!_!# '
+ special marker in the test.
+
+2006-12-06 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/tools.at (autom4te preselections): Use `find -newer';
+ remove one of the sleeps.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ENABLE): Make it
+ more readable, using ...
+ (_AC_INIT_PARSE_ENABLE2): ... this new helper macro.
+
+ * doc/autoconf.texi (autoheader Invocation): Do not double-
+ quote the parameter of `AH_BOTTOM' in the example.
+
+2006-12-05 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Configuration Headers): Remove the
+ example with multiple input files.
+ (autoheader Invocation): Encourage `AH_BOTTOM', discouraging
+ multiple input files.
+
+2006-12-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): When
+ creating the awk substitution script, handle one input line at a
+ time, so that the maximum length of a substituted (multi-line)
+ value is not limited by the size of the sed pattern space.
+ The trade-off is a slightly repetitive sed script.
+ * doc/autoconf.texi (Limitations of Usual Tools): Branch labels
+ can only have up to 7 characters, due to Solaris 10 /bin/sed.
+ * tests/torture.at (Substitute a 2000-byte string): Increase the
+ test with several long lines, they should not be caught by sed
+ limits any more.
+
+ * tests/tools.at (autom4te preselections): New test, to flag
+ entries missing from autom4te.cfg.
+ Report by David Byron <dbyron@hheld.com>.
+
+ * tests/torture.at (Substitute a 2000-byte string): Actually use
+ AC_PROG_AWK, so the last change works as intended.
+ (Substitute and define special characters): Likewise.
+ (Substitute a newline): Likewise.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Use `$AWK'
+ instead of `awk' consistently.
+ (_AC_OUTPUT_CONFIG_STATUS): Initialize $AWK.
+ * tests/torture.at (Torturing config.status): Test both the
+ result of AC_PROG_AWK and plain awk.
+ (Substitute a 2000-byte string): Likewise.
+ (Substitute and define special characters): Likewise.
+ (Substitute a newline): Likewise.
+
+2006-12-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_FSEEKO): Check that fseeko
+ can be assigned to a function pointer. Problem reported by
+ Peter Palfrader in <http://bugs.debian.org/401377>. Based on
+ part of a patch by Ralf Wildenhues in that same bug report.
+
+2006-12-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/mktests.sh (ac_exclude_list): Exclude AC_FUNC_SETVBUF_REVERSED.
+ * tests/semantics.at (AC_FUNC_SETVBUF_REVERSED): New test.
+
+2006-12-01 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/c.m4 (AC_LANG_INT_SAVE): Avoid newline, to aid in
+ cross-compiling from cygwin to mingw.
+ Reported by Bob Rossi. This resurrects the 2000-11-30 patch to
+ aclang.m4, which was mistakenly removed in the 2001-09-17 patch
+ to lib/autoconf/c.m4.
+
+2006-12-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_PREPARE): Use a longer test
+ string for more reliable failure. Wrap the entire test that
+ causes the broken Solaris printf to dump core, in a subshell,
+ so the segmentation fault message is reliably suppressed.
+ Fix shell expansion errors by using /usr/ucb/echo always;
+ avoid an error on systems without it by another subshell.
+ Avoid m4 expansion of `$1'. Set the zeroth argument of the
+ subshell-$as_echo to `as_echo', for better error message.
+
+2006-11-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_CACHE_DUMP): If `BASH_ARGV' or
+ `BASH_SOURCE' contain a newline, set them to empty, as they may
+ not be unset.
+
+2006-11-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ Turn AC_FUNC_SETVBUF_REVERSED into a noop. It's been obsolete for
+ years and is too hard to maintain now. The last straw was
+ reported by Jerker Baeck in
+ <http://lists.gnu.org/archive/html/autoconf/2006-11/msg00102.html>.
+ * NEWS: AC_FUNC_SETVBUF_REVERSED is now obsolete.
+ * doc/autoconf.texi (Particular Functions): Move
+ AC_FUNC_SETVBUF_REVERSED from here...
+ (Obsolete Macros): ... to here. Say that it does nothing now.
+ * lib/autoconf/functions.m4 (AC_FUNC_SETVBUF_REVERSED):
+ Turn into (almost) a no-op.
+
+ * lib/autoconf/c.m4 (AC_PROG_GCC_TRADITIONAL, AC_C_CONST):
+ (AC_C_VOLATILE):
+ Do not recommend via AN_FUNCTION, AN_IDENTIFIER, or AN_HEADER.
+ These macros are obsolescent and new applications shouldn't need them.
+ * lib/autoconf/functions.m4 (AC_FUNC_CLOSEDIR_VOID, AC_REPLACE_FNMATCH):
+ (AC_FUNC_GETLOADAVG, AC_FUNC_GETPGRP, AC_FUNC_MEMCMP):
+ (AC_FUNC_SELECT_ARGTYPES, AC_FUNC_SETPGRP, AC_FUNC_STAT, AC_FUNC_LSTAT):
+ (AC_FUNC_STRFTIME, AC_FUNC_SETVBUF_REVERSED, AC_FUNC_UTIME_NULL):
+ (AC_FUNC_VPRINTF): Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_DIRENT, AC_HEADER_STAT):
+ (AC_HEADER_STDC, AC_HEADER_SYS_WAIT, AC_HEADER_TIME): Likewise.
+ * lib/autoconf/types.m4 (AC_STRUCT_TM): Likewise.
+
+ * doc/autoconf.texi (Setting Output Variables): Mention that
+ @VAR1@VAR2 has unspecified behavior. Problem reported by
+ Ralf Wildenhues.
+ * NEWS: Mention this.
+
+ * Makefile.am: Put only a single '#' into the copyright notice,
+ so that it's also present in the output file. Standardize wording
+ in makefile copyright notices to match GNU coding standards.
+ * bin/Makefile.am: Likewise.
+ * doc/Makefile.am: Likewise.
+ * lib/Makefile.am: Likewise.
+ * lib/freeze.mk: Likewise.
+ * lib/autoconf/Makefile.am: Likewise.
+ * lib/autoscan/Makefile.am: Likewise.
+ * lib/autotest/Makefile.am: Likewise.
+ * lib/m4sugar/Makefile.am: Likewise.
+ * man/Makefile.am: Likewise.
+ * tests/Makefile.am: Likewise.
+ * lib/emacs/Makefile.am: Remove copyright notice; it's just a
+ one-line file.
+
+2006-11-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Fix error
+ in the sed script that mangles the awk script: delete up to the
+ first exclamation mark only.
+ * tests/torture.at (Substitute and define special characters):
+ Test '!' too.
+
+2006-11-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Rewrite config files generation: avoid quadratic growth in
+ the number of substituted variables by using awk instead of sed
+ for the bulk of the substitutions.
+ * NEWS: Mention this.
+ * doc/autoconf.texi (Setting Output Variables): `|#_!!_#|' is also
+ forbidden in the output (and thus input) file.
+ * lib/autoconf/status.m4 (_AC_AWK_LITERAL_LIMIT): New macro.
+ (_AC_OUTPUT_FILES_PREPARE): Instead of several sed scripts,
+ generate just one large awk script for substitutions,
+ eliminating much of the earlier complexity, while adding some
+ new complexity. Only expand the substitution templates at
+ configure time, for smaller configure script size. If
+ _AC_SUBST_FILES are used, test 'awk' for working getline support
+ at config.status time. If absent, interpolate through the
+ shell. The awk script was written with much help
+ from Paolo Bonzini and Paul Eggert.
+ (_AC_SED_CMD_NUM, _AC_SED_DELIM_NUM, _AC_SED_FRAG): Removed.
+ (_AC_SED_FRAG_NUM): Likewise.
+ (_AC_SUBST_CMDS): Renamed from...
+ (_AC_SED_CMDS): ...this.
+ (_AC_OUTPUT_FILE): Use _AC_SUBST_CMDS.
+ * tests/torture.at (Substitute a 2000-byte string): Also
+ substitute a line with 1000 words, and a variable with several
+ long lines.
+ (Substitute and define special characters): Test awk special
+ characters, and put substitution input strings `@foo@' in the
+ output, to test that no recursion happens; test several other
+ combinations from Paolo Bonzini.
+
+2006-11-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Undo recent changes
+ that replaced echo with AS_ECHO where this wasn't necessary.
+ Problem reportd by Ralf Wildenhues.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_PREPARE): Port to Solaris 7,
+ where "/usr/bin/printf '%s\n' S" dumps core if S is long.
+ This is Sun bug 4206210. Problem reportd by Ralf Wildenhues.
+
+2006-11-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/freeze.mk (GREP): Removed, no need to initialize this.
+
+2006-11-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Don't claim
+ that traditional Awk lacks 3-arg "split". It has it.
+ Mention that FS must be a single character, and a few other
+ 99-byte limits of traditional Awk.
+ Mention that if (i in a) doesn't work with traditional Awk.
+
+2006-11-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/autotest.at (BSx641-newline in command):
+ (BS-BS-newline in command, BSx640-newline in command):
+ (Newline-CODE-BS-newline in command):
+ (Single-quote-BS-newline in command):
+ (Single-quote-newline-BS-newline in command):
+ Use printf '%s\n' instead of echo, for portability to hosts
+ where echo interprets backslashes. This will break on hosts
+ that lack printf, but for now let's assume all such hosts
+ are dead (if not, we should get reports of test failures).
+
+2006-11-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ 'echo' has some portability problems, when given a first argument
+ with a leading '-', or when given any argument containing '\'.
+ Avoid using 'echo' in these cases.
+ * bin/Makefile.am $(bin_SCRIPTS): Rewrite to avoid 'echo' entirely.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * bin/autoconf.as: Use AS_ECHO rather than plain echo, when the
+ argument might be unportable.
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): Likewise.
+ * lib/autoconf/erlang.m4 (AC_LANG(Erlang)): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT):
+ (_AC_FC_LIBRARY_LDFLAGS): Likewise.
+ * lib/autoconf/functions.m4 (AC_FUNC_GETLOADAVG): Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ENABLE, _AC_INIT_PREPARE):
+ (_AC_ARG_VAR_VALIDATE, AC_ARG_PROGRAM, _AC_MSG_LOG_CONFTEST):
+ (AC_RUN_LOG, _AC_RUN_IFELSE, _AC_LIBOBJS_NORMALIZE): Likewise.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Likewise.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Likewise.
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH):
+ (AC_PROG_MAKE_SET): Likewise.
+ * lib/autoconf/status.m4 (_AC_SRCDIRS, _AC_OUTPUT_HEADER):
+ (_AC_OUTPUT_SUBDIRS, _AC_OUTPUT_CONFIG_STATUS): Likewise.
+ * lib/autotest/general.m4 (_AT_CREATE_DEBUGGING_SCRIPT, AT_INIT):
+ (AT_CLEANUP, _AT_DECIDE_TRACEABLE, _AT_CHECK): Likewise.
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE, _AS_ECHO_UNQUOTED):
+ (_AS_BASENAME_SED, _AS_DIRNAME_SED, AS_MKDIR_P, AS_TMPDIR, AS_UNAME):
+ (AS_TR_SH, AS_TR_CPP, AS_VAR_GET): Likewise.
+ * bin/autoconf.as: Redo verbose flag implementation, as the old
+ scheme wouldn't work with AS_ECHO.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/autoconf/general.m4 (AC_MSG_RESULT, AC_MSG_RESULT_UNQUOTED):
+ Don't use ECHO_T, since ECHO_N is now reliable.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/autoconf/general.m4 (AC_ARG_PROGRAM): Use sed "$script"
+ rather than using a here-document to put the script into a file.
+ (_AC_DO_ECHO): Hoist the eval out of the echo, so that we can
+ use AS_ECHO.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_GET): Likewise.
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Use
+ AS_ECHO_N rather than ECHO_N and ECHO_C. This doesn't fix any
+ bug, but we might as well stop using ECHO_N and ECHO_C internally.
+ * lib/autotest/general.m4 (AT_SETUP): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_N): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS):
+ (_AC_OUTPUT_MAIN_LOOP): Rework echo so that it has just one
+ operand, as AS_ECHO requires. Avoid double file name expansion.
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Invoke _AS_ECHO_PREPARE.
+ Don't set as_nl, since _AS_ECHO_PREPARE does that now.
+ (_AS_PREPARE): Comment that _AS_ECHO_N_PREPARE is just for user code.
+ (AS_ECHO, AS_ECHO_N, _AS_ECHO_PREPARE): New macros.
+ * tests/c.at (AC_PROG_CPP without warnings, AC_PROG_CPP via CC):
+ Double-quote strings that would otherwise contain M4 comments.
+ * tests/m4sh.at (AS_ECHO and AS_ECHO_N): New test.
+
+ * configure.ac (AC_INIT): Bump to 2.61a.
+ * NEWS: Likewise.
+
+2006-11-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ Version 2.61.
+
+ * configure.ac (AC_INIT): Bump to 2.61.
+ * NEWS: Likewise.
+
+ * tests/autotest.at (Macro with backslash in a test title):
+ Comment out for now, as this tests neither fails nor passes
+ reliably. Problem reported by Ralf Wildenhues.
+
+2006-11-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ENABLE): Fix some typos
+ in previous change, which caused test failures.
+
+2006-11-16 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Factor out
+ code for --enable, --disable, --with, and --without to...
+ (_AC_INIT_PARSE_ENABLE): ... a new macro.
+ * doc/autoconf.texi (Package Options):
+ * NEWS: Document that AC_ARG_ENABLE allows dots, too.
+
+2006-11-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Import these changes from config via gnulib:
+
+ 2006-11-15 Ben Elliston <bje@gnu.org>
+
+ From Josselin Mouette <joss@debian.org>:
+ * build-aux/config.guess (SX-8:SUPER-UX:*:*): New.
+
+ 2006-11-08 Ben Elliston <bje@gnu.org>
+
+ * build-aux/config.guess (authenticamd:Interix*:[3456]*): Another AMD64.
+
+ 2006-11-07 Steve Woodford <scw@NetBSD.org>
+ Ben Elliston <bje@gnu.org>
+
+ * build-aux/config.guess (*:NetBSD:*:*): Handle sh5el arch.
+ * build-aux/config.sub (sh5el): New basic_machine.
+
+
+ Import this change from coreutils:
+
+ 2006-02-13 Jim Meyering <jim@meyering.net>
+
+ * GNUmakefile (all): Emit diagnostics to stderr, not stdout.
+
+
+ Import this change from gnustandards via gnulib:
+
+ 2006-11-15 Karl Berry <karl@gnu.org>
+
+ * standards.texi: core -> memory, throughout.
+ (CPU Portability): show correct example of calling write
+ on a char value; thanks to Paul Eggert for the code.
+ Both of these suggestions from Eugene Y. Vasserman.
+
+
+ Import these changes from texinfo via gnulib:
+
+ 2006-11-08 Karl Berry <karl@gnu.org>
+
+ * build-aux/texinfo.tex (\dopdfimage): look for png, jpg/jpeg/JPG, and
+ as well as pdf images, since they are supported in pdftex with
+ no further ado.
+
+ 2006-11-05 Karl Berry <karl@gnu.org>
+
+ * doc/texinfo.tex (Image Syntax): don't mention GIF any more.
+
+2006-11-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Document the AC_ARG_WITH change.
+
+2006-11-13 Bruno Haible <bruno@clisp.org>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): For --with, --without
+ options, transliterate also dots to underscores.
+ (_AC_ENABLE_IF): Transliterate also dots to underscores.
+ * doc/autoconf.texi (External Software): Document that AC_ARG_WITH's
+ first argument may also contain dots.
+
+2006-11-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/mktests.sh (ac_exclude_list): Exclude AC_PROG_CXX_C_O, for
+ benefit of platforms like Solaris+GCC where it is common to have a
+ non-working g++ installation.
+
+2006-11-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Joel E. Denny <jdenny@ces.clemson.edu>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/autotest.at (AT_CHECK_AT_TITLE): Fix shell quoting bugs
+ and non-portable sed scripts, and use $CONFIG_SHELL when invoking
+ ./micro-suite.
+
+2006-11-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Set
+ ac_cv_type_long_long_int to 'yes' instead of 'cross-compiling'.
+ Imported from a similar patch to gnulib by Bruno Haible.
+
+2006-11-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: New macros AC_C_FLEXIBLE_ARRAY_MEMBER, AC_C_VARARRAYS.
+ * doc/autoconf.texi (C Compiler): Document them.
+ * lib/autoconf/c.m4 (AC_C_FLEXIBLE_ARRAY_MEMBER, AC_C_VARARRAYS):
+ New macros, taken from gnulib.
+
+2006-11-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Detect bug in
+ Tandem NonStop Kernel (OSS) cc -O circa 2004, reported by
+ Matthew Woehlke.
+
+2006-10-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/torture.at (Configuring subdirectories): Do not skip
+ Automake 1.10 nor future Automake 11.1 (sic).
+
+2006-10-26 Joel E. Denny <jdenny@ces.clemson.edu>
+ and Stepan Kasal <kasal@ucw.cz>
+
+ Handle special characters in test case titles correctly.
+ * lib/autotest/general.m4 (AT_INIT): M4-quote and AS_ESCAPE AT_help_all
+ properly.
+ (AT_SETUP): M4-quote and AS_ESCAPE the title properly everywhere.
+ * tests/autotest.at (AT_CHECK_AT_TITLE): Add EXPANDED-TITLE-TO-TEST
+ argument. Extend to check titles printed by ./micro-suite and
+ ./micro-suite -l and the title in micro-suite.log.
+ (Backquote in a test title,
+ Single-quote in a test title,
+ Double-quote in a test title): Don't expect failure anymore.
+ (Backslash in a test title): Put a non-whitespace character after the
+ backslash so that Bourne shells might actually see it as an escape
+ sequence.
+ (Brackets in a test title,
+ Pound in a test title,
+ Comma in a test title,
+ Quoted Macro in a test title,
+ Macro in a test title,
+ Macro with single-quote in a test title): New tests.
+ (Macro with backquote in a test title,
+ Macro with double-quote in a test title,
+ Macro with backslash in a test title): New tests expected to fail.
+ * tests/torture.at (#define header templates): M4-quote this title in
+ AT_SETUP call so that no M4 code is commented inadvertently somewhere.
+ The visible effect was a stray [] in the testsuite output.
+
+2006-10-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Builtins): Do not invoke
+ `trap ... 0' inside a function, for AIX sh.
+
+2006-10-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/base.at (AC_COMPUTE_INT): Test **0** rather than 1 / 0,
+ since powerpc-apple-darwin8-gcc-4.0.1 (Apple Computer, Inc. build
+ 5363) simply issues a warning when dividing by zero at compile
+ time. Problem reported by Elias Pipping.
+
+2006-10-26 Eric Blake <ebb9@byu.net>
+
+ * THANKS: Update.
+ * doc/autoconf.texi (Evaluation Macros): Improve the example to
+ show effect on macros that expand with commas.
+ Reported by Joel E. Denny.
+
+ * tests/m4sugar.at (m4_warn, m4_require: circular dependencies):
+ Also work with M4 1.4.8.
+
+2006-10-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Slashes): Document Tru64 4.0 bug reported by
+ Jim Meyering.
+
+2006-10-25 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/tools.at (autom4te --force): New test, verifies that
+ `--force' always rewrites the output file.
+
+2006-10-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document that rm
+ needs operands on NetBSD 2.0.2. Problem reported by Bruno Haible.
+
+2006-10-24 Stepan Kasal <kasal@ucw.cz>
+
+ * tools/trace.at (autoconf --trace: user macros): Test `$%'.
+
+2006-10-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/specific.m4 (_AC_SYS_LARGEFILE_MACRO_VALUE):
+ If FUNCTION-BODY is nonempty, use AC_LINK_IFELSE rather than
+ AC_COMPILE_IFELSE, to work around problem with OSF/1 4.0F fseeko
+ reported by Nelson H. F. Beebe for Coreutils 6.4.
+
+ * tests/tools.at (autoconf --trace: user macros): Remove test
+ for tracing multiline macros, since m4 1.4.7a uses a different
+ way to number lines. Problem reported by Ralf Wildenhues.
+
+2006-10-24 Stepan Kasal <kasal@ucw.cz>
+
+ * bin/autom4te.in (handle_m4): Do not redirect stdin to
+ /dev/null since the heuristics for interactive behaviour was
+ fixed in CVS m4.
+
+ * bin/autom4te.in: With --force, always refresh the output
+ file. Problem reported by Greg Schafer <gschafer@zip.com.au>.
+
+ * bin/autoconf.as: Fix the verbose message at the end.
+
+2006-10-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * configure.ac (AC_INIT): Bump to 2.60c.
+ * NEWS: Likewise.
+
+2006-10-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Version 2.60b.
+
+ Import this change from Texinfo:
+ 2006-10-15 Karl Berry <karl@gnu.org>
+ * build-aux/texinfo.tex: automake 1.10
+
+ * NEWS: Remove AC_CACHE_CHECK_INT.
+ * doc/autoconf.texi (Caching Results): Likewise.
+ * lib/autoconf/general.m4 (_AC_CACHE_CHECK_INT): Renamed from
+ AC_CACHE_CHECK_INT, since it's no longer public.
+ * lib/autoconf/types.m4: All uses of AC_CACHE_CHECK_INT changed.
+ * tests/base.at (AC_COMPUTE_INT): Test this, not AC_CACHE_CHECK_INT.
+
+2006-10-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Fix two typos.
+
+2006-10-19 Eric Blake <ebb9@byu.net>
+
+ * lib/m4sugar/m4sugar.m4 (m4_mkstemp): New macro.
+ (m4_maketemp): Avoid warnings with M4 1.9a.
+ * lib/emacs/autoconf-mode.el (autoconf-font-lock-keywords): Color
+ m4_mkstemp.
+ * doc/autoconf.texi (Redefined M4 Macros): Document m4_mkstemp.
+ * NEWS: Likewise.
+
+2006-10-16 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Setting Output Variables): Fix typo.
+
+ * bin/autoconf.as (version): Reword to match GNU Coding
+ Standards.
+ * bin/autoheader.in (version): Likewise.
+ * bin/autom4te.in (version): Likewise.
+ * bin/autoreconf.in (version): Likewise.
+ * bin/autoscan.in (version): Likewise.
+ * bin/autoupdate.in (version): Likewise.
+ * bin/ifnames.in (version): Likewise.
+
+2006-10-14 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_LITERAL_IF): Expand $1 before
+ looking for special shell characters.
+ * lib/autoconf/functions.m4 (AC_CHECK_FUNC): Do not expand the
+ macro defined by AS_VAR_PUSHDEF before passing it as a
+ parameter.
+ * lib/autoconf/general.m4 (AC_CHECK_FILE, AC_CHECK_DECL):
+ * lib/autoconf/libs.m4 (AC_SEARCH_LIBS, AC_CHECK_LIB):
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW, AC_CHECK_MEMBER):
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL):
+ (_AC_CHECK_HEADER_NEW, _AC_CHECK_HEADER_OLD, _AC_CHECK_HEADER_DIRENT):
+ Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Quote parameters of
+ AS_VAR_* properly.
+ * tests/m4sh.at (AS_LITERAL_IF): New test.
+
+2006-10-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ (Imported from Automake.)
+ * build-aux/install-sh (posix_mkdir): Reject FreeBSD 6.1 mkdir -p -m,
+ which incorrectly sets the mode of an existing destination
+ directory. In some cases the unpatched install-sh could do the
+ equivalent of "chmod 777 /" or "chmod 0 /" on a buggy FreeBSD
+ system. We hope this is rare in practice, but it's clearly worth
+ fixing. Problem reported by Alex Unleashed in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-10/msg00012.html>.
+ Also, don't bother to check for -m bugs unless we're using -m;
+ suggested by Stepan Kasal.
+
+2006-10-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ Import this change from Automake:
+
+ 2006-08-23 Alexandre Duret-Lutz <adl@gnu.org>
+ * lib/Autom4te/ChannelDefs.pm (usage): Mention that -Wportability
+ is enabled by default with gnu and gnits strictness.
+ Report from Bruno Haible.
+
+ 2006-03-10 Alexandre Duret-Lutz <adl@gnu.org>
+ * lib/Autom4te/ChannelDefs.pm: Make -Wportability the default in
+ gnu and gnits modes.
+
+ Import this change from Config:
+
+ 2006-09-20 Ben Elliston <bje@gnu.org>
+ * build-aux/config.sub (score, score-*): New.
+
+ Import this change from Gnulib:
+
+ 2006-09-16 Karl Berry <karl@gnu.org>
+ * doc/fdl.texi (ADDENDUM): switch to @heading from @appendixsubsec,
+ to avoid sectioning errors.
+
+ Import these changes from Texinfo:
+
+ 2006-10-04 Karl Berry <karl@gnu.org>
+ * build-aux/texinfo.tex (\singlequotechar): rename to \codequoteright.
+ (\quoteexpand): rename to \rquoteexpand.
+ (\codequoteleft): new def, to look for @set codequotebacktick.
+ (\lquoteexpand, \quoteexpand): new defs.
+ (\lquoteChar, \rquoteChar, \dashChar, \underChar: new \chardef's.
+ (\code): must use new \...Char values, since now ` is active.
+
+ 2006-08-26 Karl Berry <karl@gnu.org>
+ * build-aux/texinfo.tex (\textdegree): New command.
+
+ 2006-08-12 Karl Berry <karl@gnu.org>
+ * build-aux/texinfo.tex (error \box0): smaller font.
+
+2006-10-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Autoheader Macros): Fix syntax error.
+
+2006-10-13 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Autoheader Macros): Warn that the text
+ added to the template can get mangled.
+
+2006-10-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_OBSTACK): In the test,
+ include the default headers, and redefine obstack_chunk_alloc
+ and obstack_chunk_free. Fixes false failure with glibc.
+
+2006-10-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Set as_executable_p,
+ for backward compatibility with Libtool 1.5.22. Problem reported
+ by Ralf Wildenhues.
+
+2006-10-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/c.m4 (AC_PROG_GCC_TRADITIONAL): Require
+ AC_PROG_CC.
+ Report by IOhannes m zmoelnig <zmoelnig@iem.at>.
+
+2006-10-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: AC_USE_SYSTEM_EXTENSIONS now defines _TANDEM_SOURCE for
+ the NonStop platform.
+ * doc/autoconf.texi (Posix Variants): Likewise.
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Likewise.
+
+ * lib/m4sugar/m4sh.m4 (AS_TEST_X): New macro.
+ (AS_EXECUTABLE_P): Use as_test_x rather than as_executable_p.
+ (_AS_TEST_PREPARE): Set as_test_x rather than as_executable_p.
+ Use a better substitute, by inspecting the output of "ls"
+ rather than just using ":".
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE): Use AS_TEST_X
+ rather than AS_EXECUTABLE_P, since we needn't worry about
+ non-regular files here.
+
+ * NEWS: Autoconf-generated shell scripts no longer export BIN_SH,
+ due to configuration hassles with this. See Tonya Underwood's report
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-10/msg00003.html>.
+ * doc/autoconf.texi (Special Shell Variables): Likewise.
+
+2006-10-11 Paul Eggert <eggert@cs.ucla.edu>
+ Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_BOURNE_COMPATIBLE): Don't set BIN_SH.
+ (_AS_DETECT_BETTER_SHELL): Don't look in /usr/bin/posix.
+
+2006-10-11 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_BOURNE_COMPATIBLE): Move the
+ initialization which is not inherited through the environment
+ (_AS_BOURNE_COMPATIBLE): ... to this new macro.
+ (_AS_RUN): Call _AS_BOURNE_COMPATIBLE, not AS_BOURNE_COMPATIBLE.
+
+2006-10-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Describe
+ problems with mkdir -p -m.
+
+2006-10-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (_AC_PROG_PREPROC_WORKS_IFELSE): Remove
+ comment about ac_cpp_err; it was incorrect, and anyway
+ ac_cpp_err is being removed below.
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE): Don't
+ set ac_cpp_err to 'yesyes' if preproc_warn_flag and werror_flag
+ are both 'yes'. In fact, don't bother setting ac_cpp_err at all;
+ nobody uses it.
+ (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE): Don't log our funky tests
+ with werror_flag and conftest.err and so forth. This is more
+ compatible with how _AC_PROG_PREPROC_WORKS_IFELSE behaves,
+ and anyway the user shouldn't normally want to see this gorp logged.
+ Problem reported by Ralf Wildenhues.
+ * lib/autoconf/lang.m4 (AC_LANG_WERROR): werror_flag's default is
+ empty, not 'no', since the rest of the code uses 'test -z'.
+
+2006-10-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE):
+ Use a single call to AC_DO_TOKENS rather than multiple, for
+ efficiency.
+ (_AC_LINK_IFELSE): Test that resulting file is executable.
+ Problem reported by mwoehlke in
+ <http://lists.gnu.org/archive/html/bug-coreutils/2006-10/msg00048.html>.
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Use "test -x /" rather
+ than creating a file to use with test -x; this is much faster.
+
+2006-10-02 Bruno Haible <bruno@clisp.org>
+
+ * lib/autom4te.in (Automake-preselections): Add
+ AM_GNU_GETTEXT_INTL_SUBDIR, for automake 1.10.
+
+2006-09-27 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Writing testsuite.at): Fix a typo: for
+ standard error, `experr' should be used, not `expout'.
+
+2006-09-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_FSEEKO): Don't compile the
+ fseeko testing program twice; just use the earlier result.
+ * lib/autoconf/specific.m4 (_AC_SYS_LARGEFILE_MACRO_VALUE):
+ Set cache var to 'unknown' (not 'no') if leaving the macro unset
+ still doesn't let the program compile.
+ (AC_SYS_LARGEFILE): Test for _LARGE_FILES only if earlier tests
+ failed.
+
+ * lib/autoconf/functions.m4: Fix problems reported by Ralf Wildenhues.
+ (AC_FUNC_ERROR_AT_LINE): Don't bother to check for error.h. Just
+ include it, without including anything else.
+ (AC_FUNC_FSEEKO): Avoid gcc -Wall warnings about constant
+ expressions.
+ (AC_FUNC_STRNLEN): Require AC_USE_SYSTEM_EXTENSIONS.
+
+2006-09-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_ERROR_AT_LINE): Check for
+ `error.h', and include it, for a `error_at_line' prototype.
+ Use a nonempty format string in the link test.
+ * lib/autoconf/functions.m4 (AC_FUNC_WAIT3): Include <sys/wait.h>,
+ for a declaration of wait3.
+
+2006-09-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: AC_CHECK_DECL now also works with aggregate objects.
+ * doc/autoconf.texi (Generic Declarations): Clarify that AC_CHECK_DECL
+ can apply to constants too, and that it checks for macro defns.
+ * lib/autoconf/general.m4 (AC_CHECK_DECL): Assume C89 or better,
+ and simply cast the identifier to void. This handles structure
+ values. Problem reported by Ralf Wildenhues.
+ * tests/semantics.at (AC_CHECK_DECLS): Also check enums.
+
+2006-09-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/semantics.at (AC_CHECK_DECLS): Also check macros,
+ structure, and function symbols.
+
+2006-09-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/semantics.at (AC_CHECK_MEMBERS): Also test with a struct
+ member.
+
+2006-09-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Recommend M4 1.4.7 instead of 1.4.6.
+ * README: Likewise.
+ * doc/autoconf.texi (Introduction, Why GNU M4): Likewise.
+
+2006-09-25 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_OBSTACK): Avoid `gcc -Wall'
+ warnings (uninitialized value).
+ (AC_FUNC_UTIME_NULL): Likewise, test for and include <utime.h> if
+ present.
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Likewise, add
+ parentheses.
+ (AC_STRUCT_TM): Likewise, avoid unused variables.
+
+2006-09-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/c.m4 (_AC_ARG_VAR_LDFLAGS): Update comment.
+ (_AC_ARG_VAR_LIBS): New macro: let LIBS be precious.
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Call _AC_ARG_VAR_LIBS.
+ * lib/autoconf/fortran.m4 (AC_PROG_F77, AC_PROG_FC): Likewise.
+ Report by Olly Betts.
+
+2006-09-19 Eric Blake <ebb9@byu.net>
+
+ * m4/m4.m4: Change copyright.
+ * configure: Regenerate.
+ * Makefile.in: Likewise.
+ * bin/Makefile.in: Likewise.
+ * doc/Makefile.in: Likewise.
+ * lib/Makefile.in: Likewise.
+ * lib/Autom4te/Makefile.in: Likewise.
+ * lib/autoconf/Makefile.in: Likewise.
+ * lib/autoscan/Makefile.in: Likewise.
+ * lib/autotest/Makefile.in: Likewise.
+ * lib/emacs/Makefile.in: Likewise.
+ * lib/m4sugar/Makefile.in: Likewise.
+ * man/Makefile.in: Likewise.
+ * tests/Makefile.in: Likewise.
+
+ * m4/m4.m4 (AC_PROG_GNU_M4): Check for m4 --debugfile support.
+ * bin/Makefile.am (edit): Substitute M4_DEBUGFILE.
+ * bin/autom4te.in (handle_m4): Favor --debugfile over misnamed
+ --error-output, to avoid warnings with M4 2.0.
+
+2006-09-19 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/libs.m4 (AH_CHECK_LIB): Fix quoting, to be
+ consistent with _AH_CHECK_FUNCS and _AH_CHECK_HEADERS.
+ * lib/autoconf/headers.m4 (AH_CHECK_HEADERS_DIRENT): Likewise.
+
+2006-09-15 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT): Eliminate the
+ expansion of AC_CHECK_FUNCS.
+
+2006-09-14 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_CONFIG_MACRO_DIR): Remove a
+ mistaken comment: the path has to be relative; do not use
+ the path at runtime.
+
+2006-09-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Quote the
+ argument to `--prefix' for sub-configure scripts.
+ Pass `--silent' to sub-configure scripts.
+ * tests/torture.at (Configuring subdirectories): Add tests
+ for both changes.
+ * doc/autoconf.texi (Setting Output Variables): Fix example to
+ not show `--silent' being passed to a `configure' re-run.
+
+2006-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Input): Clarify role of AC_CONFIG_MACRO_DIR.
+ * lib/autoconf/general.m4 (AC_CONFIG_MACRO_DIR): Do not check
+ for the existence of the directory at configure-time. That's
+ too late, anyway. Problem reported by Stefan Seefeld.
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Avoid bug in UnixWare
+ 7.1.4 /usr/bin/posix/sh described by Tim Rice in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-09/msg00017.html>.
+
+2006-09-11 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/local.at (AT_CHECK_M4): Fix this so that the testsuite
+ works with GNU M4 1.4.3 again; make the normalized form
+ match the current m4 message; fix the description.
+ * test/tools.at (autom4te cache): Adapt to the change.
+
+2006-09-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MKTIME): Add year_2050_test
+ to catch glibc bug 2821
+ <http://sourceware.org/bugzilla/show_bug.cgi?id=2821>.
+
+ Merge from gnulib as follows: Use AC_CHECK_HEADERS_ONCE instead of
+ AC_CHECK_HEADERS, and likewise for AC_CHECK_FUNCS_ONCE and
+ AC_CHECK_FUNCS. Don't check for stdlib.h, since we now
+ assume C89.
+
+2006-09-08 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autom4te.in (Autoconf-without-aclocal-m4): Move the
+ preselections ...
+ (Autoconf): ... here.
+ (Autoscan-preselections): Delete.
+
+2006-09-07 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autom4te.in (Automake-preselections): Preselect
+ AM_ENABLE_MULTILIB.
+
+2006-09-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Preset Output Variables): srcdir and
+ top_srcdir are not necessarily relative. Problem reported
+ by Dries Kimpe.
+
+2006-09-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Prefer xlf90/xlf95 over
+ f90/f95 because the latter drivers of AIX Fortran 9.1 do not
+ accept files with extension `.f'. For consistency, also prefer
+ xlf over f77.
+ * doc/autoconf.texi (Fortran Compiler): Remove mention of bug
+ from last patch.
+
+2006-09-05 Romain Lenglet <rlenglet@users.forge.objectweb.org>
+
+ * lib/autoconf/erlang.m4 (AC_ERLANG_CHECK_LIB): Added substitution
+ of ERLANG_LIB_VER_* variables.
+ * doc/autoconf.texi (Erlang Libraries): Document ERLANG_LIB_VER_*
+ variables.
+
+2006-09-03 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document 'unset'
+ bugs of Bash 2.01 and 2.05a.
+ (Fortran Compiler): Document that AC_PROG_CC should be called
+ before AC_PROG_FC, due to a bug in Autoconf.
+
+2006-09-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: New macro AC_CACHE_CHECK_INT. It replaces the
+ old AC_COMPUTE_INT, which now behaves like _AC_COMPUTE_INT
+ except the first two arguments are reversed.
+ * doc/autoconf.texi (Caching Results): New macro AC_CACHE_CHECK_INT.
+ (Generic Compiler Characteristics): AC_COMPUTE_INT no longer
+ caches nor outputs a diagnostic. Suggested by Bruno Haible.
+ * lib/autoconf/general.m4 (AC_CACHE_CHECK_INT): New macro,
+ equivalent to the old AC_COMPUTE_INT.
+ (AC_COMPUTE_INT): No longer caches or reports. New signature.
+ All uses changed to AC_CACHE_CHECK_INT.
+ * tests/base.at (AC_CACHE_CHECK_INT): New test.
+ * tests/mktests.sh (ac_exclude_list): Add AC_CACHE_CHECK_INT.
+
+2006-08-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: AC_FUNC_FNMATCH, AC_FUNC_FNMATCH_GNU, AC_FUNC_GETLOADVG,
+ and AC_REPLACE_FNMATCH are now obsolescent in Autoconf. New
+ programs should use their Gnulib counterparts.
+ * doc/autoconf.texi (Particular Functions): Likewise.
+ (Macro Names, testsuite Invocation): Replace uses of these
+ obsolete macros with uses of non-obsolete macros.
+
+2006-08-29 Eric Blake <ebb9@byu.net>
+
+ * configure.ac (AC_INIT): Bump to 2.60b.
+ * NEWS: Update.
+
+2006-08-28 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_STAT): Fix logic that was
+ mistakenly swapped on 2006-08-15.
+
+2006-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Version 2.60a.
+
+2006-08-25 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE): Remove the IPA/IPO
+ file created by the PGI compiler.
+
+2006-08-25 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/Autom4te/General.pm (END): Use `File::Path::rmtree' to
+ simplify the code.
+
+2006-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix Lex library problem reported to us by Julio Garvia.
+ * doc/autoconf.texi (Particular Programs): YYTEXT_POINTER is
+ for the default, which the user can override.
+ * lib/autoconf/programs.m4 (AC_PROG_LEX): Let _AC_PROG_LEX_YYTEXT_DECL
+ deal with LEXLIB.
+ (_AC_PROG_LEX_YYTEXT_DECL): Handle caching correctly; the old code
+ didn't work if some values were cached but not others. Test for
+ broken lex libraries like native ia64-hp-hpux11.22; see
+ <http://sources.redhat.com/ml/binutils/2003-12/msg00337.html>, and
+ work around the problem by preferring an empty LEXLIB to -lfl or
+ -ll. Let the user set LEXLIB='' to indicate no library needed.
+
+ * NEWS: Recommend M4 1.4.6 instead of 1.4.5.
+ * README: Likewise.
+ * doc/autoconf.texi (Introduction, Why GNU M4): Likewise.
+
+2006-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ Rework to use more-modern build style.
+ Many files are renamed; all uses of their names were changed.
+ * .x-sc_trailing_blank: Renamed from .x-sc_trailing_space.
+ * .x-sc_useless_cpp_parens: New file.
+ * build-aux/config.guess: Renamed from config/config.guess. Update.
+ * build-aux/config.sub: Renamed from config/config.sub. Update.
+ * build-aux/elisp-comp: Renamed from config/elisp-comp.
+ * build-aux/install-sh: Renamed from config/install-sh. Update.
+ * build-aux/mdate-sh: Renamed from config/mdate-sh.
+ * build-aux/missing: Renamed from config/missing.
+ * build-aux/texinfo.tex: Renamed from config/texinfo.tex. Update.
+ * build-aux/vc-list-files: Renamed from config/vc-list-files.
+ * config/Makefile.am: Removed.
+ * config/mkinstalldirs: Removed.
+ * config/move-if-change: Removed.
+ * m4/m4.m4: Renamed from config/m4.m4. Add (C) to copyright notice.
+ * Makefile.am (SUBDIRS): Remove config.
+ (ACLOCAL_AMFLAGS): Include from m4, not config.
+ (EXTRA_DIST): Add config/announce-gen, config/prev-version.txt.
+ (WGET, WGETFLAGS): New macros, since Makefile.maint no longer does this.
+ (autom4te-update): Rewrite with a loop. Get from gnulib, not automake.
+ Fail if there's an error.
+ * Makefile.cfg (move_if_change): Remove.
+ (wget_files): Remove.
+ (cvs_executable_files): New macro.
+ (cvs_files): Use it. Remove mkinstalldirs. Add fdl.texi.
+ (executable-update): Use $(cvs_executable_files).
+ (local-checks-to-skip): Remove.
+ * Makefile.maint: Merge from coreutils, plus add our own changes
+ (gzip_rsyncable): New macro.
+ (GZIP_ENV): Use it.
+ (CVS_LIST): Use build-aux/vc-list-files.
+ (VERSION_REGEXP): New macro.
+ (local-checks-available): Add patch-check, $(syntax-check-rules),
+ check-AUTHORS.
+ (syntax-check-rules): Compute dynamically.
+ (sc_cast_of_x_alloc_return_value): Work even if no source files.
+ (sc_cast_of_alloca_return_value): Likewise.
+ (sc_prohibit_atoi_atof): Simplify regexp.
+ (sc_no_if_have_config_h, sc_require_config_h):
+ (sc_prohibit_assert_without_use,
+ (sc_obsolete_symbols): Check for O_NDELAY.
+ (sc_texi_notab): Remove.
+ (sc-changelog): Don't make an exception for '----' lines.
+ (.re-list): Remove, so we don't have a junk file behind.
+ (sc_system_h_headers): Remove the need for .re-list.
+ (sc_the_the): New rule.
+ (sc_tight_scope): Simplify.
+ (sc_trailing_blank): Renamed from sc_trailing_space.
+ (longopt_re): New macro.
+ (sc_two_space_separator_in_usage): New rule.
+ (sc_unmarked_diagnostics): Look at all files under CVS.
+ (sc_useless_cpp_parens, patch-check, check-AUTHORS): New rules.
+ (news-date-check, changelog-check): Version is OK.
+ (po-check): Look for lib files even if not in CVS.
+ (copyright-check): Use $() not ``.
+ (maintainer-distcheck): Do not depend on changelog-check.
+ (my-distcheck): Depend on $(release_archive_dir)/$(prev-tgz).
+ Also check for -Wpointer-arith.
+ (WGET, WGETFLAGS, tgz-md5, tgz-sha1, bz2-md5, bz2-sha1):
+ (xdelta-md5, xdelta-sha1, tgz-size, bz2-size, xd-size, rel-check):
+ Remove.
+ (announcement): Add --gpg-key-id arg.
+ (cvs-sv): Remove.
+ (move_if_change): Just use mv.
+ (local_updates: Remove wget-update, po-update.
+ (po_repo, do-po-update, po-update, wget_files, get-targets): Remove.
+ (config.guess-url_prefix, config.sub-url_prefix): Remove.
+ (ansi2knr.c-url_prefix, texinfo.tex-url_prefix):
+ (standards.texi-url_prefix, make-stds.texi-url_prefix, target, url):
+ ($(get-targets)): Remove.
+ (cvs_files): Remove missing, mkinstalldirs, ansi2knr.c.
+ (gnulib_repo): Renamed from automake_repo. Get from gnulib now.
+ (cvs-update): Get from gnulib.
+ (emut_upload_commands): gnupload is in build-aux now.
+ (alpha beta major): Add changelog-check. Check version.
+ * configure.ac (AC_CONFIG_AUX_DIR): Renamed from config to build-aux.
+ (AC_CONFIG_FILES): Remove.
+ * bin/autoconf.as: Add spaces to avoid distcheck warning.
+ * config/announce-gen: Sync from coreutils.
+ * doc/make-stds.texi: Sync from gnulib.
+ * doc/standards.texi: Likewise.
+ * man/Makefile.am: Adjust for config -> build-aux renaming.
+ * tests/Makefile.am: Prefer $(FOO) to @FOO@.
+ * tests/local.at: Adjust from config -> build-aux renaming.
+ * tests/tools.at: Likewise.
+ * tests/torture.at: Likewise.
+
+ * NEWS: The C99 check now tests for vararg macros and 64-bit
+ preprocessor ints.
+ * doc/autoconf.texi (C Compiler): Document // comments, va_copy.
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C99): Test varargs macros and
+ 64-bit preprocessor ints. Check for static initialization of
+ long long. Remove unnecessary casts.
+
+2006-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Particular Programs): Mention that
+ @INSTALL@ and @MKDIR_P@ may vary for different output files.
+ Reported by Alexandre Duret-Lutz.
+
+2006-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Also ignore
+ -lgcc?* and -lSystem, for Darwin/MacOS X. Problem reported by
+ Bill Northcott in
+ <http://lists.gnu.org/archive/html/autoconf/2006-08/msg00083.html>.
+
+2006-08-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_C_CONST): Don't used shadowed vars, to
+ pacify insanely picky compilers. Problem reported by Eric Blake.
+
+ * doc/autoconf.texi (Posix Variants): INTERACTIVE Unix is no
+ longer supported by Sun.
+
+2006-08-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Autoconf now uses constructs like "#ifdef HAVE_STDLIB_H"
+ rather than "#if HAVE_STDLIB_H", so that it now works with "gcc
+ -Wundef -Werror". Problem reported by David Fang in
+ <http://lists.gnu.org/archive/html/autoconf/2006-08/msg00045.html>.
+ * doc/autoconf.texi (Header Templates, Default Includes):
+ (Particular Functions, Generic Functions, Header Portability):
+ (Particular Headers, Generic Headers, Generic Declarations, Guidelines):
+ (Obsolete Macros, AC_FOO_IFELSE vs AC_TRY_FOO):
+ (Present But Cannot Be Compiled, Preprocessor Symbol Index):
+ Prefer #ifdef to #if.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Prefer #ifdef to #if.
+ * lib/autoconf/functions.m4 (AC_FUNC_ALLOCA, _AC_FUNC_MALLOC_IF):
+ (AC_FUNC_MKTIME, AC_FUNC_MMAP, _AC_FUNC_REALLOC_IF):
+ (AC_FUNC_SELECT_ARGTYPES, AC_FUNC_SETVBUF_REVERSED, _AC_FUNC_VFORK):
+ Likewise.
+ * lib/autoconf/headers.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS):
+ (AC_HEADER_RESOLV, AC_HEADER_STAT): Likewise.
+ * lib/autoconf/specific.m4 (AC_DECL_SYS_SYGLIST):
+ (AC_SYS_RESTARTABLE_SYSCALLS): Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_STAT): Don't assume that
+ S_ISDIR etc. are valid for use in #if; POSIX doesn't guarantee
+ this.
+
+2006-08-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document sed
+ problems with arg script text that doesn't end in newline, and
+ with '-e a...'. Problems reported by Ralf Wildenhues.
+
+2006-08-12 Alexandre Julliard <julliard@winehq.org> (tiny change)
+
+ * lib/autoconf/libs.m4 (AC_PATH_X_DIRECT): Replace another
+ check for libXt by a check for libX11.
+
+2006-08-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (config.status Invocation): Adjust according
+ to last change.
+
+2006-08-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): `config.status
+ --help' should mention that `--version' outputs configuration
+ settings. Report by Bruno Haible.
+
+2006-08-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix test suite failures reported by Pierre in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-08/msg00005.html>.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Don't claim
+ the compiler created a file "b.out" when it didn't create anything
+ at all.
+ * lib/autoconf/specific.m4 (AC_SYS_INTERPRETER):
+ Discard stderr too, when invoking the test script.
+
+2006-08-05 Alexandre Julliard <julliard@winehq.org> (tiny change)
+
+ * lib/autoconf/libs.m4 (AC_PATH_XTRA): Fixed a typo
+ in the restoring of the werror flag.
+
+2006-07-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Volatile Objects): Be even a little
+ less skeptical about "volatile", after discussion with
+ Bruno Haible on bug-gnulib.
+ (Limitations of Usual Tools): Warn about sed stripping
+ leading white space from text. From Bruno Haible.
+
+2006-07-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/libs.m4 (AC_PATH_XTRA): Don't use -R if the
+ compiler complains about it, even if things works after the
+ complaint. Problem reported by Peter O'Gorman.
+
+ * doc/autoconf.texi (Preset Output Variables): Document CFLAGS,
+ CPPFLAGS, and LDFLAGS better. Problem reported by Bruno Haible.
+ Similarly for CXXFLAGS, OBJCFLAGS, ERLCFLAGS.
+
+2006-07-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/libs.m4 (AC_PATH_XTRA): Do the check for space
+ after -R regardless of host. Patrick Welche reports that this
+ fixes things on NetBSD 3.99.
+
+ * NEWS: Recommend M4 1.4.5.
+ * README: Likewise.
+ * doc/autoconf.texi (Introduction, Why GNU M4): Likewise.
+ * tests/tools.at (autom4te cache): Update wording of diagnostic
+ to match M4 1.4.5.
+
+2006-07-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Add a ref to Volatile Objects
+ under AC_C_VOLATILE.
+ (Volatile Objects): Be a little less skeptical about what
+ "volatile" means. Derived from thoughts by Ben Pfaff in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2006-07/msg00092.html>.
+
+2006-07-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi: Fix some typos.
+
+2006-07-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/torture.at (Configuring subdirectories): Set CONFIG_SITE
+ more globally, since the 2006-06-30 patch didn't suffice. Problem
+ reported by Keith Marshall. Also, don't bother with builddir2,
+ since it shouldn't be needed any more.
+
+2006-07-07 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (Generic compiler characteristics):
+ Document AC_COMPUTE_INT. Fix wrong statements on Default
+ Includes for AC_CHECK_SIZEOF and AC_CHECK_ALIGNOF.
+
+ * lib/autoconf/general.m4 (AC_COMPUTE_INT): New.
+ (_AC_COMPUTE_INT): Add obsoletion warnings.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF, AC_CHECK_ALIGNOF): Use
+ AC_COMPUTE_INT.
+
+ * NEWS: Document change.
+
+2006-07-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Volatile Objects): New section.
+
+ * NEWS: Document previous change.
+
+2006-07-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT):
+ Require that long long int be at least 64 bits wide. C99 requires
+ this and enough programs depend on it so we should check for it.
+ Bruno Haible reports in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2006-06/msg00286.html>
+ that long long int is 32 bits wide with some nonstandard compilers.
+ (AC_TYPE_UNSIGNED_LONG_LONG_INT): Likewise.
+
+2006-06-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/torture.at (Configuring subdirectories): Set CONFIG_SITE
+ to a nonexistent file, so that we don't have to worry about
+ a local site configuration that doesn't use /usr/local.
+ Problem reported by Keith Marshall in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00133.html>.
+
+2006-06-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Be more consistent about using @acronym with
+ "HP" and "HP-UX". Remove mention of OSF; the old version wasn't
+ quite right (it talked about "OSF/Tru64", even though the
+ operating systems were called OSF/1, Digital UNIX, and Tru64 UNIX,
+ and it even mentioned "OSF 4"!) and at this point there's little
+ reason to talk about OSF any more, since it died in 1994.
+ (Specific Compiler Characteristics): Simplify example of
+ negative-size array.
+ (File Descriptors): Reorder to make the text flow better.
+ Remove joke about "appreciate the various levels"; I didn't get it.
+ Add remark about HP-UX sh -x bug with stderr noted by Bob Proulx in
+ <http://lists.gnu.org/archive/html/bug-coreutils/2006-06/msg00225.html>.
+ (File Descriptors, Limitations of Usual Tools):
+ Tone down the advice against renaming or removing open files.
+ (Limitations of Usual Tools): Add a new section, on 'rm'.
+
+2006-06-26 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Use -lX11, not
+ -lXt in LIBS, idea from Karsten Hopp; this was due since
+ this change:
+
+ 2005-09-18 Paul Eggert <eggert@cs.ucla.edu>
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Look for X11/Xlib.h
+ and XrmInitialize rather than X11/Intrinsic.h and XtMalloc
+ (which belong to Xt, not X itself). See Debian bug 327655.
+
+2006-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (AC_INIT): Bump to 2.60a.
+ * NEWS: Update.
+
+2006-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Version 2.60.
+
+ * configure.ac, NEWS: Update.
+
+2006-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/texinfo.tex: Sync from upstream.
+
+ * bin/autom4te.in (handle_traces): Transform the `@S|@'
+ quadrigraph correctly in traces.
+
+ * NEWS, lib/Autom4te/C4che.pm, lib/autoconf/functions.m4:
+ Fix typos.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Expand tests for
+ datarootdir-related errors only if AC_DATAROOTDIR_CHECKED is
+ not defined.
+ * doc/autoconf.texi (Changed Directory Variables): New node,
+ to document the whole `datarootdir' business a bit better.
+ * NEWS: Update.
+ * tests/torture.at (datarootdir workaround): Extend test.
+ Prompted by report by Alexandre Julliard.
+
+2006-06-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C89): Check for C89 incompatibility
+ when using default mode of IBM C 6 for AIX. Problem and two-line
+ fix reported by Larry Jones.
+
+2006-06-22 Alexandre Julliard <julliard@winehq.org>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Avoid warning
+ about literal '${datarootdir}' if a definition is found in the
+ output file.
+
+2006-06-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Use "M4" rather than "m4" when appropriate.
+ Problem reported by Eric Blake.
+ * doc/autoconf.texi: Likewise.
+ Use @acronym around BSD, GCC, and GNU when appropriate.
+ (Why GNU M4): Renamed from "Why GNU m4".
+ (Redefined M4 Macros): Mention that Posix
+ m4wrap takes only 1 argument, but GNU M4 1.4.x takes more.
+ (Buffer Overruns): Mention size_t and ptrdiff_t as alternatives
+ to int.
+
+2006-06-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autom4te.in (handle_output): Do not forbid the empty
+ pattern.
+ * tests/tools.at (autoconf: the empty token): New test.
+
+2006-06-20 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sugar.m4 (m4_init): Merge the two m4_wrap
+ calls, so that we do not care whether they are LIFO or FIFO;
+ in the m4_wrap, do not check which diversion is the topmost
+ one, just check that the stack is balanced at the end.
+ * lib/m4sugar/m4sh.m4 (AS_INIT): We are going to change the
+ base diversion forever--pop the previous diversion before
+ opening the new one; consequently, remove the m4_wrap call.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * tests/m4sugar.at: Do not use
+ m4_wrap([m4_diversion_pop([..])]), for educational purposes.
+
+2006-06-19 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Document that m4wrap/m4_wrap might not be LIFO.
+ * doc/autoconf.texi (Redefined M4 Macros): Likewise.
+ Rework example of m4wrap token-pasting trouble so that it doesn't
+ care whether it's LIFO or FIFO.
+ Fix some "contrary to"s that are awkward in English.
+
+2006-06-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/types.m4 (_AC_TYPE_INT): Set `$ac_cv_c_int$1_t'
+ to `yes' instead of `int$1_t' if the type is found, for more
+ consistent configure output (where $1 is the number of bits).
+ (_AC_TYPE_UINT): Likewise for `uint$1_t'.
+ Suggested by Bruno Haible.
+
+ * lib/autoconf/types.m4 (_AC_TYPE_UNSIGNED_INT): Solaris 2.5.1
+ needs _UINT8_T and _UINT64_T defines as well, to avoid clashes
+ with system headers. Report by Bruno Haible.
+
+2006-06-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/config.guess, config/config.sub: Sync from upstream.
+
+ * bin/Makefile.am (autoconf.in): Use `--melt' for autom4te,
+ in order to avoid picking up an older installed frozen m4sh.m4f.
+ Besides an outdated shell startup, this could have been created
+ by an earlier M4 version with incompatible frozen file format.
+
+2006-06-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ * README: Recommend m4 1.4.4 instead of 1.4.3..
+ * doc/autoconf.texi: Likewise.
+ (Special Chars in Names): Say that $(.FOO) is portable, as
+ suggested by Stepan Kasal.
+ (Installation Directory Variables, Build Directories):
+ (Automatic Remaking, Subdirectories, Fortran Compiler):
+ (Making testsuite Scripts, Defining Directories):
+ Quote variable usages better.
+ (Making testsuite Scripts): Add clean-local rule to makefile
+ snippet, by Eric Blake.
+ (Installation Directory Variables): Fix table item font.
+ Reword slightly to clarify. Generalize advice about
+ not using special characters to include all file-related
+ vars, not just VPATH.
+ (Special Chars in Variables): Warn about special characters in
+ $(srcdir) too.
+ (Assignments): Clarify default-value example as suggested by
+ Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2006-06/msg00072.html>.
+ (Special Shell Variables): Note leading ./ or ../, as suggested
+ by Eric Blake.
+ (Limitations of Builtins): Under cd, warn about CDPATH.
+ (The Make Macro MAKEFLAGS): Untabify. Problem reported by
+ Ralf Wildenhues.
+
+2006-06-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Configuration Actions): Remove duplicate
+ `@var', for texi2html.
+ (Systemology): Some more word wrapping, for DVI output.
+ (autom4te Invocation): The short option for `--melt' is `-M',
+ not `-m'.
+
+2006-06-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: More formatting and English tweaks,
+ many suggested by Ralf Wildenhues.
+ Reword to avoid "@code{...}'s" and the like, since it's ugly
+ with Emacs info mode. discontents -> woes.
+ Put a few "will"s back. time stamp -> timestamp.
+ side-effect -> side effect.
+
+2006-06-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Initializing configure, Shell Substitutions):
+ Warn about $@ not persisting. Problem reported by Julien Danjou in
+ <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=372179>.
+ (Special Chars in Names): Renamed from Leading _ in Macro Names.
+ Mention other special chars, too.
+
+2006-06-14 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (The Make Macro MAKEFLAGS): New node.
+
+2006-06-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Some systematic minor improvements, as
+ follows. Use "makefile" when talking about makefiles
+ generally (which might be named "makefile" or "Makefile" or even
+ "foo.mk"), "Makefile" when talking about a specific makefile
+ called "Makefile". This unclutters the text from weird quotes
+ (e.g., "`Makefile's" in info mode). Similarly, use "@var{foo}
+ values" rather than "@var{foo}s" and similar constructs containing
+ "}s". Use "Make rules" rather than "Makefile rules". Minor
+ English-language improvements. Change the prefix "sub-" to "sub"
+ and "re-" to "re".
+ Put blank lines around examples more consistently.
+ Avoid "rather" and "very" as intensifiers.
+ Avoid "will" as an auxiliary.
+ (Limitations of Make): Split this node into....
+ (Portable Make, $< in Ordinary Make Rules, Failure in Make Rules):
+ (Leading _ in Macro Names, Backslash-Newline-Newline):
+ (Backslash-Newline Comments, Long Lines in Makefiles):
+ (Macros and Submakes, The Make Macro SHELL, Comments in Make Rules):
+ (obj/ and Make, make -k Status, VPATH and Make):
+ (VPATH and Double-colon, $< in Explicit Rules):
+ (Automatic Rule Rewriting, OSF/Tru64 Directory Magic):
+ (Make Target Lookup, Single Suffix Rules, Timestamps and Make):
+ New nodes, resulting from splitup of Limitations of Make.
+ All cross-references changed. Raise the top node from
+ a section to a chapter, and all subnodes accordingly.
+ Redo the introductory wording to match the new organization.
+ (Installation Directory Variables): Use an example that is
+ closer to what Autoconf actually does. Mention that VPATH's
+ value should not contain metacharacters or white space.
+ (Fortran Compiler): Fix a VPATH bug in an example.
+ (Leading _ in Macro Names): Mention that this problem is no longer
+ of practical concern.
+ (VPATH and Make): Reword the advice to make it clearer
+ that Autoconf and Automake support VPATH in non-GNU make, but
+ many packages have bugs in this area.
+ ($< in Explicit Rules): Refer to Build Directories rather
+ than using a (non-VPATH-safe) example.
+ (Automatic Rule Rewriting): Mention the sort of disaster that
+ can ensue with Solaris-style rule rewriting with VPATH.
+
+2006-06-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/install.texi (Compilers and Options): Weaken the
+ suggestion to use GNU make for VPATH builds.
+
+ * lib/autom4te.in (Automake-preselections): Add AM_PROG_CXX_C_O,
+ AM_PROG_F77_C_O, AM_PROG_FC_C_O, AC_FC_SRCEXT, AC_FC_FREEFORM.
+
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Fix M4 quotation
+ in regular expression.
+
+2006-06-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Installation Directory Variables):
+ Drop extra @samp from `@table @samp' item.
+ (Limitations of Usual Tools): Comment fix.
+ Do not nest @samp just to point to other table items.
+ (Writing testsuite.at) <AT_CHECK>: The second argument to
+ `@dvar' is already @samp'ed.
+ (Making testsuite Scripts) <AC_CONFIG_TESTDIR>: Likewise,
+ do not use @var in the second argument.
+
+2006-06-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Look for
+ $as_shell.exe too. Problem reported by Andreas Buening in
+ <http://lists.gnu.org/archive/html/autoconf/2006-06/msg00038.html>.
+
+2006-06-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_ALLOCA): Work around
+ `unused variable' compiler warning, for `-Wall -Werror'.
+ Reported by Jaap Haitsma in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00012.html>.
+
+2006-06-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): Remove core file, in
+ case the compiler dumps core. Problem reported for
+ OpenServer 5.0.7 by Tim Rice in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00019.html>.
+ * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE, _AC_LINK_IFELSE):
+ Likewise.
+
+2006-06-06 Tim Rice <tim@multitalents.net>.
+
+ * lib/freeze.mk: Quiet check-forbidden-patterns so the string
+ "ERROR" only shows up in "make check" output if there is an
+ error.
+
+2006-06-06 Eric Blake <ebb9@byu.net>
+
+ * tests/tools.at (automatically allowed tokens): Fix typo.
+
+2006-06-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Don't blame non-GNU VPATH compatibility issues on Automake.
+
+ * doc/autoconf.texi (Integer Overflow): Mention that INT_MIN % -1
+ typically overflows on x86 CPUs, even though the C standard
+ requires otherwise.
+
+2006-06-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac (AC_INIT): Bump to 2.59e.
+ * NEWS: Update.
+
+2006-06-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Version 2.59d.
+
+ * config/texinfo.tex: Sync from upstream.
+
+ * bin/autoreconf.in: Trace `LT_CONFIG_LTDL_DIR'; if it has been
+ seen, invoke libtoolize with `--ltdl' argument.
+ * lib/autom4te.in (Autoreconf-preselections): Adjust.
+ * NEWS: Update.
+ Suggested by Eric Blake.
+
+2006-06-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Whoops! AC_FUNC_STRNLEN isn't obsolescent. Problem
+ reported by Ralf Wildenhues.
+ * doc/autoconf.texi (AC_FUNC_STRNLEN): Likewise.
+
+2006-06-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * THANKS: Update.
+
+2006-06-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Modernize some of the references to Solaris.
+
+2006-06-05 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sugar.m4 (m4_require): Modify the error
+ message issued by AC_REQUIRE.
+ * tests/m4sugar.at: Check m4_require's error message.
+ * tests/base.at: Check AC_REQUIRE's error message.
+ * tests/local.at (AT_CHECK_M4): New macro, almost identical
+ to...
+ (AT_CHECK_AUTOM4TE): ... which is now a thin wrapper around
+ AT_CHECK_M4.
+ (AT_CHECK_AUTOCONF): Use AT_CHECK_M4; no longer support
+ `expout' as the last parameter.
+ * tests/tools.at: Adapt to the above change.
+
+2006-06-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Correct
+ information about race-free implementations of mkdir.
+
+2006-06-04 Eric Blake <ebb9@byu.net>
+
+ * bin/autoreconf.in (help): Document M4 environment variable.
+ * bin/autoconf.as (Usage): Likewise.
+ * bin/autom4te.in (help): Likewise.
+ * doc/autoconf.texi (autom4te Invocation): Likewise.
+
+2006-06-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: GNU make now recommended for VPATH builds.
+ Mention that some macros are now documented to be obsolescent.
+ * doc/autoconf.texi:
+ Prefer "current" to "modern" to describe
+ currently-used (albeit perhaps old-fashioned) hosts.
+ Mention which ancient features no longer need to be worried about.
+ setgid -> set-group-ID
+ setuid -> set-user-ID (these are the Posix terms)
+ Fix some misuses of "only".
+ (AC_C_BACKSLASH_A, AC_C_CONST, AC_C_PROTOTYPES):
+ (AC_C_STRINGIZE, AC_C_VOLATILE, AC_FUNC_CLOSEDIR_VOID):
+ (AC_FUNC_GETPGRP, AC_FUNC_LSTAT, AC_FUNC_MEMCMP):
+ (AC_FUNC_SELECT_ARGTYPES, AC_FUNC_SETPGRP):
+ (AC_FUNC_SETVBUF_REVERSED, AC_FUNC_STAT, AC_FUNC_STRFTIME):
+ (AC_FUNC_STRNLEN, AC_FUNC_UTIME_NULL, AC_FUNC_VPRINTF):
+ (AC_HEADER_DIRENT, AC_HEADER_STAT, AC_HEADER_STDC):
+ (AC_HEADER_SYS_WAIT, AC_HEADER_TIME, AC_ISC_POSIX):
+ (AC_PROG_GCC_TRADITIONAL, AC_STRUCT_TM):
+ Mention that these macros are obsolescent.
+ (Installation Directory Variables): shall -> should
+ (File Descriptors): Mention that 0, 1, 2 might get reopened.
+ Mention that it's now safe to use 3 and 4.
+ (Limitations of Usual Tools): cp -r is now specified by Posix.
+ Omit longwinded and obsolescent discussion of cp -f.
+ Modernize discussion of expr, ls.
+ (Limitations of Make): Modernize discussion of VPATH builds.
+ Mention $? as a workaround in some cases.
+ * doc/install.texi (Basic Installation):
+ Mention "./configure; make; make install" first. Be more
+ specific about why this file is generic. Remove unnecessary
+ parens. Remove misleading "only". Remove obsolete advice
+ about csh. Don't say "configure" takes awhile; say it
+ might take a while. Suggest CFLAGS=-g rather than CFLAGS=-O2,
+ and CC=c99 rather than CC=c89, as these are blessed by current
+ Posix. Recommend GNU make if doing a VPATH build.
+
+2006-06-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Use a consistent style "$ @kbd{...}" for
+ examples involving shell prompts.
+
+2006-06-02 Stepan Kasal <kasal@ucw.cz>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Here-Documents): Add details about the
+ pre-ksh93g bug. Reword slightly to make it clearer. Consistently
+ use "here-documents" instead of "here documents".
+
+2006-06-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/texinfo.tex, doc/standards.texi: Sync from upstream.
+
+2006-06-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (File System Conventions): Warn about ":"
+ anywhere in directory names.
+
+2006-05-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_DO_ECHO): Be even more conservative
+ about quoting the case statement, just in case.
+ * doc/autoconf.texi (Here-Documents): Mention that the ksh bug
+ was fixed in ksh93g; reported by Ralf Wildenhues.
+
+2006-05-31 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (System Services): Do not document
+ overriding EXEEXT via ac_cv_exeext=ext.
+ (Particular Programs) <AC_PROG_MKDIR_P>:
+ Document that ${MKDIR_P} understands --.
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Improve the
+ comment.
+
+2006-05-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DIRNAME_PREPARE): Guard against test
+ argument with leading hyphen. Problem reported by Paul Eggert.
+
+2006-05-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_DO_ECHO): Be more conservative
+ about quoting ac_try: quote all of it, if any of it seems suspicious.
+ This means we don't have to worry about ${ or sed any more.
+ Also, double-quote the case statement, to work around misuses via
+ underquoting as reported by Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00169.html>.
+ (_AC_EVAL_STDERR): Revert, since evidently some packages rely on this
+ undocumented and dangerous macro.
+ Problem reported by Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00168.html>.
+
+2006-05-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DIRNAME_PREPARE): Check whether
+ `dirname -- /' returns `/', for SunOS dirname scripts that escaped.
+ Report by Sam Sirlin <sam@kalessin.jpl.nasa.gov>.
+
+2006-05-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4: Revert AC_TRY_EVAL and AC_TRY_COMMAND,
+ since evidently some packages rely on the old, broken behavior.
+ Problem reported by Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00160.html>.
+ (AC_TRY_EVAL, AC_TRY_COMMAND, _AC_EVAL): Go back to the
+ pre-2006-05-26 definitions, but leave in the comments that
+ these macros are dangerous and should not be used.
+ (_AC_DO_ECHO): Renamed from _AC_EVAL_ECHO. All callers changed.
+ (_AC_DO): Renamed from _AC_EVAL. All callers changed.
+ (_AC_DO_STDERR): Renamed from _AC_EVAL_STDERR. All callers changed.
+ (_AC_DO_VAR): Renamed from AC_TRY_EVAL.
+ (_AC_DO_TOKENS): Renamed from AC_TRY_COMMAND.
+
+2006-05-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (AC_OUTPUT_MAKE_DEFS): Rewrite to avoid
+ the use of 'tr', since this is our only use of 'tr'.
+
+2006-05-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE):
+ Don't assume 'grep' works on long lines, since AIX grep doesn't.
+
+2005-05-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Do not use `grep' on
+ the output file in the `${datarootdir}' test.
+
+2005-05-28 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): If we have not seen
+ mention of `datarootdir' in the input file(s), but literal
+ `${datarootdir}' in the output file, and we haven't warned yet,
+ then warn as well: the user may have (erroneously) used
+ `AC_SUBST([mydatadir], [$datadir/my])' instead of the correct
+ `AC_SUBST([mydatadir], ['${datadir}/my'])'.
+ * tests/torture.at (datarootdir workaround): Extend this test.
+ * NEWS: Update.
+
+2006-05-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (autoheader Invocation): The first argument to
+ `AC_DEFINE_UNQUOTED' need not be a literal. Mention the
+ alternatives and clear up the language a bit.
+
+2006-05-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Reword notice for AC_TRY_COMMAND, AC_TRY_EVAL,
+ ac_config_guess, ac_config_sub, ac_configure.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS):
+ Fix typo that prevented an unnecessary space from being removed.
+ Problems reported by Ralf Wildenhues in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00143.html
+
+2006-05-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Programs, Limitations of Usual Tools):
+ Use better wording to talk about AC_PROG_MKDIR_P's thread-safety.
+ Don't use the term "thread-safe" to talk about mkdir race
+ conditions, since the problem is more a process than a thread
+ issue. Problem reported by Stepan Kasal in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00088.html
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Use code that mimics
+ the test for 'install' more closely. Look at MKDIR_P first.
+ Look in the PATH, and at /opt/sfw/bin.
+ Look for a 'gmkdir' program as well (Solaris 10 /opt/sfw/bin/gmkdir).
+ Don't bother to try mkdir -p, since we already check mkdir --version;
+ just look at the version number. (There's no easy way to check
+ for race-free implementations.)
+ * tests/tools.at (autoconf: subdirectories): Adjust to above
+ changes, since MKDIR_P now might end in "/mkdir -p".
+
+ * doc/autoconf.texi (autoheader Invocation): Mention that the
+ first arg of AC_DEFINE_UNQUOTED must be a literal.
+ Problem reported by Ben Pfaff in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-05/msg00090.html>.
+
+ * NEWS: Mention that AC_TRY_COMMAND and AC_TRY_EVAL may be removed.
+ * doc/autoconf.texi (Special Chars in Variables): New section.
+ (Preset Output Variables): Warn about special chars in CPPFLAGS.
+ (Installation Directory Variables): Quote $(datadir) better.
+ (Limitations of Builtins): Describe some of eval's trickiness.
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): Simplify quoting.
+ * lib/autoconf/fortram.m4 (_AC_PROG_FC_V_OUTPUT): Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Put leading space
+ in front of every arg, not just trailing args. Quote apostrophes.
+ (_AC_EVAL_ECHO): New macro.
+ (_AC_EVAL, AC_EVAL_STDERR): Use it. Quote arg of eval.
+ (AC_TRY_EVAL, AC_TRY_COMMAND): Mention that these macros might get
+ removed.
+ (_AC_LINK_IFELSE): Use proper rule for shell continuation lines,
+ exposed by quoting of eval argument. Put the command on line line
+ so it logs better.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): Use eval more safely.
+ (_AC_PATH_X, AC_PATH_X): Quote more safely.
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Use eval more safely.
+ * lib/autoconf/specific.m4 (AC_SYS_LONG_FILE_NAMES): Don't use eval.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Minor style change.
+ Handle special chars in prefix, ac_srcdir, ac_aux_dir.
+ Use eval more safely.
+ (_AC_OUTPUT_CONFIG_STATUS): Adjust to above changes.
+ * lib/m4sugar/m4sh.m4 (AS_VAR_GET): Note that this API needs
+ to be replaced.
+ * tests/base.at (AC_TRY_COMMAND): Use proper rule for shell continuation
+ lines, exposed by quoting of eval argument.
+
+2006-05-26 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Drop the
+ initialization of `ac_cv_exeext', do not override it if it was
+ already set, unless it was set to `no', for compatibility with
+ Autoconf-2.13, and comment this.
+ Do not export `ac_cv_exeext', Libtool hasn't needed this for years.
+ (_AC_COMPILER_EXEEXT_DEFAULT): Likewise, do not export it.
+ (_AC_COMPILER_EXEEXT_WORKS, _AC_COMPILER_EXEEXT_CROSS): Typos.
+ * doc/autoconf.texi (Compilers and Preprocessors) <EXEEXT>:
+ Document that this test may be overridden by setting
+ `ac_cv_exeext'.
+
+2006-05-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Revert these two patches:
+
+ 2006-04-06 Eric Blake <ebb9@byu.net>
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_O): Inside cache
+ check, s/ac_exeext/ac_cv_exeext/. Fixes regression introduced
+ 2006-04-01.
+
+ 2006-04-01 Stepan Kasal <kasal@ucw.cz>
+ Clean up _AC_COMPILER_EXEEXT* macros.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Don't try to
+ detect exeext, it will be done by _AC_COMPILER_EXEEXT_O; just set
+ ac_file to the name of the default output file and call
+ _AC_COMPILER_EXEEXT_WORKS. Move the definition of ac_files and the
+ initial `rm' of the candidate files...
+ (_AC_COMPILER_EXEEXT): ... here and simplify them. Moreover, use
+ the same list in subsequent `rm' calls, and for the temporary
+ redefinition of ac_clean_files; call _AC_COMPILER_OBJEXT at the end,
+ and don't call the other _AC_COMPILER_EXEEXT_* macros directly, use...
+ (_AC_COMPILER_EXEEXT_TESTS): ... this new macro.
+ (_AC_COMPILER_EXEEXT_O): Don't export ac_cv_exeext, it's not needed (or
+ no longer needed) by libtool. Make it a cache check.
+ (_AC_COMPILER_EXEEXT_CROSS): Remove the comment, it was obviously
+ copied here by mistake.
+ (AC_NO_EXECUTABLES): Redefine _AC_COMPILER_EXEEXT_TESTS, not
+ _AC_COMPILER_EXEEXT.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Do not call
+ _AC_COMPILER_OBJEXT directly.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+
+2006-05-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) < sed (`t')>:
+ Fix description of how the buggy `sed' works.
+
+2006-05-25 Noah Misch <noah@cs.caltech.edu>
+
+ Sync from Automake:
+
+ * lib/Autom4te/XFile.pm (lock): Allow EOPNOTSUPP, besides
+ ENOLCK. Only mention `make -j' when applicable. Only raise
+ fatal errors when `make -j' is involved. Improve error message.
+
+2006-05-25 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Here-Documents): We now know more about
+ the variable expansion in here documents bug.
+ Thanks to Tim Rice and Stepan Kasal.
+
+ * doc/autoconf.texi (Making testsuite Scripts): Add an example
+ how to use TESTSUITEFLAGS. Suggested by Eric Blake.
+
+2006-05-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autotest.at (Multiline command from M4 expansion):
+ No failure to be expected if the shell quotes newlines in
+ commands in the `set -x' output. Report by Tim Rice.
+ * THANKS: Update.
+
+2006-05-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADER): Don't use shell
+ expansion in the here-documents used by config.status, as that
+ runs afoul of the Korn shell version M-12/28/93d bug described in
+ the Autoconf manual, and this in turn causes a Coreutils 5.95 build to
+ fail as described by Tim Rice and diagnosed by Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2006-05/msg00082.html>.
+
+2006-05-23 Jim Meyering <jim@meyering.net>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK):
+ Fix typo introduced with 2006-04-02 change. It reversed the sense
+ of the test.
+
+2006-05-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADER): Simplify ac_dA and
+ ac_dB slightly, to save bytes in the script.
+ Max out at 50 lines, rather than 96; this is more likely
+ (though not guaranteed) to avoid obscure 'sed' failures.
+
+2006-05-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): UnixWare `tr' may interpret
+ `tr -d -' as bad option argument. Work around this by deleting
+ an unrelated character.
+ Report by Tim Rice <tim@multitalents.net>.
+
+2006-05-22 Paul Eggert <eggert@cs.ucla.edu>,
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>,
+ Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Particular Programs): Do not promise that
+ we always prefer the GNU version of the program, and that we
+ search according to PATH; both rules can have exceptions.
+ Update description of AC_PROG_GREP, AC_PROG_EGREP, AC_PROG_FGREP,
+ AC_PROG_SED. Move descriptions of limitations
+ to the Limitations of Usual Tools section.
+ (Limitations of Usual Tools) <sed>: Mention script length
+ limitations with Solaris /usr/ucb/sed.
+ <grep>: Fix wording for empty alternative. Mention that -c and
+ -l should not be combined, and that -E and -F should not be
+ combined.
+
+2006-05-21 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_PROG_SED): Catch script length
+ limits in Solaris 8 /usr/ucb/sed by testing a long script.
+
+2006-05-22 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Defining Symbols): Literal parameter of
+ AC_DEFINE is now passed to m4_pattern_allow.
+ * NEWS: Mention that; likewise for AC_SUBST.
+ * lib/autoconf/general.m4 (AC_DEFINE_TRACE_LITERAL): Pass
+ the parameter to m4_pattern_allow.
+ * tests/tools.at: Add a check for that.
+
+2006-05-22 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4: Fix typos.
+
+2006-05-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Remove
+ only the files that this macro generates.
+
+2006-05-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: For
+ the HP-UX sed limitation of 99 commands, labels do not count.
+ * lib/autoconf/status.m4 (_AC_SED_CMD_LIMIT): Mention that
+ in the comment.
+ (_AC_OUTPUT_HEADER): Revert the change from 2006-05-19.
+
+2006-05-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT):
+ Import the following fix from coreutils:
+
+ 2006-01-13 Jim Meyering <jim@meyering.net>
+
+ Invoke AC_CHECK_FUNCS(getmntent) unconditionally so that tests of
+ $ac_cv_func_getmntent (e.g., in gl_LIST_MOUNTED_FILE_SYSTEMS) need
+ not double-quote uses of that variable, to accommodate the rare
+ case in which getmntent is available in none of the libraries
+ checked. This happens at least on FreeBSD 5.0.
+
+2006-05-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (AC_CONFIG_AUX_DIRS): Bring back
+ ac_config_guess, ac_config_sub, and ac_configure, since evidently
+ some other programs unwisely rely on these undocumented vars.
+ But put in warning comments about them.
+ Problem reported by Ralf Wildenhues in
+ <http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00068.html>.
+ * NEWS: Document that these variables are intended to go away.
+
+2006-05-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/c.m4 (AC_PROG_CXX_C_O): Require AC_PROG_CXX,
+ and set the language to C++ (analogous to the equivalent Fortran
+ tests).
+
+ * lib/autoconf/c.m4 (AC_PROG_CXX_C_O): New macro.
+ * doc/autoconf.texi (C++ Compiler): Document it.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_C_O): Adjust comment.
+ * NEWS: Update.
+
+2006-05-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADER): Fix off-by-one bug
+ that caused config.status to generate 100-command sed scripts; the
+ portable limit is 99.
+
+2006-05-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): Name temporary
+ variable `ac_d' instead of `d' to avoid infringing namespace.
+ Report by Ralf Menzel.
+
+2006-05-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): Don't prepend
+ $ac_top_build_prefix to $MKDIR_P if it's just 'mkdir -p'.
+ * tests/tools.at (autoconf: subdirectories): New test, taken from
+ the corresponding problem report by Ralf Wildenhues in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2006-05/msg00053.html
+
+ * lib/autoconf/functions.m4 (AC_REPLACE_FNMATCH, AC_FUNC_FNMATCH_GNU):
+ Quote some uses of shell variables if they might suffer unexpected
+ globbing. This doesn't fix all instances of quoting problems that
+ I found, just the easy ones that look safe.
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR, _AC_INIT_HELP):
+ (AC_CONFIG_AUX_DIR, AC_CONFIG_AUX_DIR_DEFAULT, AC_CONFIG_AUX_DIRS):
+ (AC_CANONICAL_BUILD, AC_CANONICAL_HOST, AC_CANONICAL_TARGET):
+ (AC_CACHE_LOAD, AC_CACHE_SAVE): Likewise.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF, _AC_PATH_X_DIRECT): Likewise.
+ * lib/autoconf/specific.m4 (AC_SYS_LONG_FILE_NAMES): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINK, _AC_OUTPUT_SUBDIRS):
+ Likewise.
+ * lib/autotest/general.m4 (_AC_INIT_PARSE_ARGS): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Likewise.
+
+2006-05-18 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoreconf.in ($help): Reword according to the manual.
+ Suggested by Olly Betts.
+
+2006-05-17 Olly Betts <olly@survex.com> (tiny change)
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoreconf.in: Pass the directory argument to
+ `require_configure_ac'. Fix comment.
+ * tests/torture.at (Configuring subdirectories): Expose this.
+ Reported by Olly Betts.
+
+2006-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Automake/Configure_ac.pm, lib/Automake/Channels.pm,
+ lib/Automake/FileUtils.pm, lib/Automake/Struct.pm: Sync from
+ Automake as follows:
+
+ * lib/Autom4te/Configure_ac.pm (find_configure_ac): Use
+ `$configure_in' instead of `configure.in', to preserve
+ directory component.
+
+2006-05-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/config.guess, config/config.sub, config/texinfo.tex,
+ doc/make-stds.texi, doc/standards.texi: Sync from upstream.
+
+2006-05-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_STDBOOL): Fix overly-picky
+ test for C99 conformance; (bool) 0.5 is an integer constant
+ expression, but (bool) -0.5 is not. Problem reported by Fedor
+ Sergeev in <http://forum.sun.com/jive/thread.jspa?threadID=96202>.
+
+2006-05-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Programs): AC_PROG_MKDIR_P now
+ sets MKDIR_P, not mkdir_p, to avoid collisions with Automake.
+ Warn about obsolete install-sh files. Remove stray sentence
+ fragment and fix cross reference.
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Don't insist on
+ install -d; this undoes the 2006-05-10 change.
+ (MKDIR_P): Mark with AN_MAKEVAR.
+ (AC_PROG_MKDIR_P): Fall back on $ac_install_sh, not $INSTALL, so
+ that we don't require $INSTALL to be thread-safe. Move comments
+ out of generated code. Require AC_CONFIG_AUX_DIR_DEFAULT instead
+ of AC_PROG_INSTALL. Output a message saying that we're checking
+ mkdir -p. Set MKDIR_P rather than mkdir_p. Do special magic for
+ MKDIR_P instead of AC_SUBST.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE, _AC_OUTPUT_CONFIG_STATUS):
+ Special magic for MKDIR_P, too.
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P): Remove comment that defeated
+ a dnl.
+ * tests/local.at (AT_CHECK_ENV): mkdir_p -> MKDIR_P.
+
+2006-05-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ Sync from Automake, as follows:
+
+ 2006-05-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ * config/install-sh: Initialize IFS, so field splitting isn't
+ turned off later.
+ * config/mkinstalldirs: Likewise.
+ * config/missing: Remove superfluous quotes. Replace all uses of
+ `[' by `test', for consistency, and for..
+ * config/missing (sed_minuso, sed_output): New variables.
+ (autom4te, help2man, makeinfo): Use them. Unifies detection of
+ `-o FILE', `--output FILE', `--output=FILE', stricter regex.
+ Fixes `missing' to detect `--output' for help2man. Fixes
+ PR automake/483. Report by Dennis J. Linse.
+ (autom4te): Document in `missing --help'.
+
+2006-05-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: New macro AC_PROG_MKDIR_P. AS_MKDIR_P is now more robust.
+ * config/install-sh: Don't use 'path' to talk about file names,
+ as per GNU coding standards. Close a race condition reported by Ralf
+ Wildenhues and Stepan Kasal. There is still a race condition
+ on hosts that predate Posix 1003.1-1992, but we can't help this.
+ Don't mishandle weird characters like space on pre-Posix hosts.
+ Invoke mkdir at most once per dir arg on pre-Posix hosts.
+ * doc/autoconf.texi (Programming in M4sh): Cross-reference to
+ AC_PROG_MKDIR_P from AS_MKDIR_P.
+ (Limitations of Usual Tools): Cross-reference to AC_PROG_MKDIR_P
+ from mkdir. Mention that Autoconf 2.60 install-sh is safe but
+ earlier editions are not (including Automake 1.8.3).
+ Do not suggest mkinstalldirs for thread-safety.
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Insist on an 'install'
+ that understands -d, so that AC_PROG_MKDIR_P can fall back on $INSTALL.
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P): Make it more robust in the
+ presence of special characters and race conditions.
+ * tests/local.at (AT_CHECK_ENV): Add mkdir_p to the list of variables
+ in Autoconf's name space.
+
+2006-05-10 Bruno Haible <bruno@clisp.org>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/programs.m4 (AC_PROG_MKDIR_P): New macro, taken
+ from Automake with minor changes.
+ * doc/autoconf.texi (Particular Programs): Document AC_PROG_MKDIR_P.
+
+2006-05-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * config/install-sh: Update to Automake CVS version, as follows:
+ 2006-04-25 Stepan Kasal <kasal@ucw.cz>
+ * lib/install-sh: Simplify the expr implementation of dirname.
+ 2006-04-24 Paul Eggert <eggert@cs.ucla.edu>
+ * lib/install-sh: Handle --, and diagnose unknown options.
+
+2006-05-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/Makefile.am (AUTOTEST): Use `$(MY_AUTOM4TE)' instead of
+ `./autom4te' to create `./testsuite', since the `all' target
+ will ensure its presence, but `installcheck' should not create
+ the uninstalled wrappers.
+
+ * tests/torture.at (Unusual Automake input files): Skip if we
+ detect automake < 1.8.
+
+2006-05-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_STDC): If ac_cv_prog_cc_stdc
+ is set to `no', then that overrides and sets ac_cv_prog_cc_c89
+ and ac_cv_prog_cc_c99 to `no', for backward compatibility.
+ * NEWS: Update.
+
+2006-05-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Take care not to
+ munge (multiple) white space and other oddities.
+ * tests/torture.at (AT_CHECK_AC_ARG_VAR): Make sure to M4-escape
+ single quotes in variable assignment.
+ (AC_ARG_VAR, configure invocation): Adjust tests to expose this
+ and similar failures by adding multiple spaces, tabs, and other
+ special characters.
+ Report and different test suggested by Francesco Romani
+ <fromani@gmail.com> and Andrew Church <achurch@achurch.org>.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): When we escape
+ single quotes, we only need to search for single quotes; this
+ both simplifies the search pattern, and makes us less
+ susceptible to `echo' variations for arguments not containing
+ single quotes.
+ (_AC_ARG_VAR_VALIDATE): Likewise.
+
+2006-05-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Special Shell Variables) <IFS>: Document
+ `$*' and IFS concatenation issue with traditional shells and
+ bash-2.04. Report by Seanster@Seanster.com.
+
+2006-05-03 Bruno Haible <bruno@clisp.org>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Identify more
+ precisely which Mac OS X versions have the od problem.
+
+2006-05-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Use @option systematically.
+
+2006-05-02 Paul Eggert <eggert@cs.ucla.edu>
+ and Bruno Haible <bruno@clisp.org>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Add a paragraph
+ about 'od'.
+ (Integer Overflow): Mention the special case of integer division
+ overflow.
+
+2006-05-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT): Cater for
+ traditional shells like the Solaris one that do not use the
+ first IFS character for assembling `$*'.
+ Prompted by a related report from autoconf_bug@nro.ca.
+
+2006-05-01 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Builtins, Limitations of Make):
+ Mention more problems with the -e option.
+
+2006-04-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Typo.
+ * doc/autoconf.texi (Systemology): Mention the Heirloom Project.
+
+ * doc/autoconf.texi (Introduction, Pointers): Use `@/' liberally
+ in URLs to improve DVI formatted output (requires texinfo 4.6).
+ (System Services, Systemology, Shellology): Likewise.
+ (Limitations of Usual Tools): Rewrite Mac OS X example for nicer
+ output.
+
+ * doc/autoconf.texi (Fortran Compiler): Do not use `@ovar' in
+ continuous text.
+ (Runtime): Fix macro argument names to match description:
+ `action-if-found' -> `action-if-true' and similarly.
+ (Obsolete Macros): Likewise.
+ * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE): Likewise.
+ (AC_COMPILE_IFELSE, AC_TRY_COMPILE, _AC_LINK_IFELSE)
+ (AC_LINK_IFELSE, AC_TRY_LINK, AC_COMPILE_CHECK): Likewise.
+
+2006-04-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Make): Clean up markup.
+
+ * ChangeLog: Typo.
+ * doc/autoconf.texi (Portable Shell): Allow wrapped URLs, for
+ DVI output.
+
+2006-04-28 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document FreeBSD
+ /bin/sh set unsorted output.
+ * lib/autoconf/general.m4 (_AC_CACHE_DUMP): Adjust.
+ * tests/local.at: Likewise.
+
+2006-04-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Portable C and C++, Varieties of Unportability):
+ (Integer Overflow, Null Pointers, Buffer Overruns):
+ (Floating Point Portability, Exiting Portably): New sections.
+ (Writing Test Programs): Fix some langauge. Recommend exiting
+ with status 1, not merely nonzero. Clarify exit declaration.
+ (Run Time): Move C exit status stuff to new Exiting Portably section.
+ (Systemology): Mention Posix and levenez. Update v7 reference.
+ (Portable Shell): Mention the Posix shell.
+
+2006-04-25 Stepan Kasal <kasal@ucw.cz>
+
+ * bin/autoconf.as (me): Replace by as_me.
+
+2006-04-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Don't use AS_ERROR,
+ since as_me isn't set yet.
+
+2006-04-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ Prepare for deprecation of AS_BASENAME and AS_DIRNAME, and fix
+ a few minor bugs in this area.
+
+ * doc/autoconf.texi (Programming in M4sh): Comment out the
+ documentation of AS_BASENAME, for now.
+ (Shell Substitutions): Do not use AS_DIRNAME in an example.
+ (Limitations of Builtins) <basename>: Do not refer to
+ AS_BASENAME.
+ * bin/autoconf.as (me): Don't use AS_BASENAME.
+ (dir): Remove the unused variable.
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_REQUIRED): Renamed from
+ AS_DETECT_REQUIRED. All uses changed.
+ (_AS_DETECT_SUGGESTED): Renamed from AS_DETECT_SUGGESTED.
+ All uses changed.
+ (_AS_DETECT_BETTER_SHELL): Put ;; at the end of a case.
+ (AS_BASENAME): Use "basename --" to protect against leading "-".
+ (_AS_BASENAME_EXPR): Renamed from AS_BASENAME_EXPR. All uses changed.
+ (_AS_BASENAME_SED): Renamed from AS_BASENAME_SED. All uses changed.
+ (_AS_BASENAME_PREPARE): Reject implementations that cannot handle "--".
+ (_AS_DIRNAME_PREPARE): Likewise.
+ (_AS_DIRNAME_EXPR): Renamed from AS_DIRNAME_EXPR. All uses changed.
+ (_AS_DIRNAME_SED): Renamed from AS_DIRNAME_SED. All uses changed.
+ (AS_DIRNAME): Use "dirname --".
+
+2006-04-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Runtime): Renamed from "Run Time". All uses
+ of "run time" and "run-time" changed to "runtime", for consistency.
+ * lib/autoconf/fortran.m4: Likewise (in comment).
+ * lib/autoconf/functions.m4: Likewise.
+ * lib/autoconf/general.m4: Likewise.
+ * lib/autoconf/headers.m4: Likewise.
+
+ * doc/autoconf.texi (Run Time): Document the exit status situation
+ with more accuracy and detail.
+
+2006-04-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Introduction): The GNU Autoconf Macro
+ Archive is not officially `GNU' any more. Update URL.
+ (Defining Directories): Likewise
+ * lib/autoconf/c.m4 (AC_C_RESTRICT): Update URL.
+
+2006-04-19 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Remove the leading
+ newline from the `trap' code to finish `config.log'; the NetBSD
+ /bin/sh resets the exit status after an empty command, as
+ documented in doc/autoconf.texi.
+ Reported by Dalibor Topic <robilad@kaffe.org>.
+
+2006-04-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Clarify AC_C_TYPEOF.
+ Suggested by Bruno Haible.
+
+2006-04-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * configure.ac (ac_cv_sh_n_works): Don't try to test for it, since
+ some shells (e.g., Solaris 8 /bin/sh) implement it verrrry slowly.
+ Instead, just list the shells that we know work.
+ * tests/local.at (AT_CHECK_SHELL_SYNTAX): Remove 2nd arg. All uses
+ changed. Be more cautious about the _cv_ variable.
+ * tests/tools.at (Syntax of the shell scripts): Check the
+ _cv_ variable once, at first, to avoid an internal autoconf error
+ when sh -n does not work.
+
+2006-04-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/Autom4te/FileUtils.pm: Sync from Automake.
+
+2006-04-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_CONFIG_LOG): Don't
+ use ">&-" since we're only 99.999% sure that this is portable,
+ and since the MinGW bug is fixed in a different way.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+2006-04-16 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Handle --recheck
+ before opening config.log, to avoid hitting a bug on MinGW.
+
+2006-04-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_CONFIG_LOG): Close
+ AS_MESSAGE_LOG_FD before reopening it onto the log file.
+ This works around a MinGW bug reported by Eric Paire.
+ Make sure that all writes to the log file append to it,
+ rather than possibly losing data.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+2006-04-14 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/Autom4te/FileUtils.pm (find_file): Fix a typo in the
+ description.
+
+2006-04-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Update.
+
+ * configure.ac (AC_INIT): Bump to 2.59d.
+
+2006-04-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ Version 2.59c.
+
+ * Makefile.maint (news-date-check): Do not require a leading `*'
+ before the release date in NEWS.
+
+2006-04-12 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILE): If the templates for
+ the instantiated file do not contain the string 'datarootdir'
+ but contain @datadir@, @docdir@, @infodir@, @localedir@, or
+ @mandir@, replace the reference '${datarootdir}' by the value.
+ * tests/torture.at (datarootdir workaround): New test.
+ * NEWS: Advertise this temporary fixup.
+ Based on a patch by Bruno Haible, reported and analyzed by
+ Paul Eggert and Noah Misch.
+
+2006-04-12 Eric Blake <ebb9@byu.net>
+
+ * tests/autotest.at (Debugging a failed test): Fix comment.
+
+2006-04-12 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): Simplify the summary of
+ all the changes since 2006-04-07.
+
+2006-04-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): If `ln -s file1 file2'
+ succeeded, but `ln -s file dir' failed, take care to remove the
+ leftover target before the next test, to prevent its spurious
+ failure; also make sure `ln file dir' works before selecting it.
+ Thanks to Keith Marshall for pointing this out.
+ * THANKS: Update.
+
+ * lib/autotest/general.m4 (AT_INIT): Store quoted variable
+ assignments in `at_debug_args', so that we put them correctly
+ in the `run' script.
+ * tests/autotest.at (Debugging a failed test): Unmark XFAIL.
+ Reported by Eric Blake.
+
+2006-04-11 Eric Blake <ebb9@byu.net>
+
+ * tests/autotest.at (AT_CHECK_AT): Add new argument, to allow
+ top-level tests after micro-suite has been run. Used in...
+ (Debugging a successful test, Debugging script and environment),
+ (Debugging a failed test): ...these new tests. The first of these
+ is fixed by...
+ * lib/autotest/general.m4 (_AT_CREATE_DEBUGGING_SCRIPT): New
+ macro, split out from...
+ (AT_INIT): ...here, so that using -d also generates a run script.
+ Document that -d inhibits top-level logging.
+ * doc/autoconf.texi (testsuite Invocation): Document that -d only
+ inhibits top-level logging; debug scripts are created.
+
+ * lib/autotest/general.m4 (_AT_CHECK): Avoid syntax error on empty
+ check.
+ * tests/autotest.at (Empty test, Empty check): New test to check it.
+
+ * lib/autoconf/c.m4 (AC_C_CONST, AC_C_VOLATILE): Avoid warnings
+ from gcc.
+
+2006-04-10 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/mktests.sh: Use "trap '' 0", not "trap 0". Do not touch
+ the files if a problem appears. Make the empty *.at files
+ read-only, too. Proposed by Ralf Wildenhues.
+
+2006-04-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/Makefile.am: Add comment to force updated Makefile.in.
+
+ * lib/freeze.mk: Fix typo in comment. Unlike the last, white
+ space only patch to this file, this patch causes the Makefile.in
+ files that include freeze.mk to be updated, and thus have a
+ newer time stamp again, which in turn makes a pristine CVS
+ checkout have correct time stamps.
+
+ * Makefile.maint (cvs-sv): New macro, to be used..
+ (config.guess-url_prefix, config.sub-url_prefix)
+ (texinfo.tex-url_prefix, standards.texi-url_prefix): ..here;
+ point to CVS text checkout of Gnulib files.
+ (copyright-check): Bump current year.
+ (announcement): Do not hard-wire `./announce-gen'.
+ (cvs-update): Propagate failures of `cvs' and `move-if-change'
+ correctly.
+ * Makefile.cfg (executable-update): Use `chmod a+x' instead of
+ `chmod +x'.
+ (wget_files): Update config.guess, config.sub, texinfo.tex by
+ `wget-update', now that their URLs work again.
+
+2006-04-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Types): Don't use AC_CHECK_TYPE.
+ Problem noted by Paul D. Smith.
+
+2006-04-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi: Remove unused words from word list.
+ * .x-sc_prohibit_atoi_atof, .x-sc_space_tab, .x-sc_sun_os_names,
+ .x-sc_trailing_space: New files.
+
+ * doc/standards.texi: Sync from gnulib.
+
+ * NEWS, doc/autoconf.texi (AC_LIBOBJ vs LIBOBJS): Mark
+ `LIBOBJDIR' as experimental.
+
+ * lib/m4sugar/m4sh.m4 (_AS_LN_S_PREPARE): MSYS `ln -s' fails
+ with a target directory; it's internally implemented as `cp'
+ anyway, but since Autoconf advertises the possibility to use
+ a target directory when LN_S is `ln -s', we need to find out.
+ Reported by Rolf Ebert <rolf.ebert.gcc@gmx.de> against MSYS,
+ analyzed by Keith Marshall <keith.marshall@total.com>.
+
+ * THANKS: Update.
+
+2006-04-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Just output
+ confdefs.h as-is. In general, if it has backslash-newline or the
+ like, then it doesn't work either to sort or to remove empty
+ lines.
+
+2006-04-09 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/Makefile.am (AUTOCONF_FILES): Fix typo in the comment.
+
+2006-04-09 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect
+ _AM_SUBST_NOTMAKE.
+
+2006-04-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Use '\'' for an
+ apostrophe within a single-quoted string, as this is the usual
+ tradition and is easier to read than '"'"'. Don't rely on the
+ shell treating "$/" like '$/'. Use a more-consistent indenting
+ style for the trap.
+
+2006-04-09 Eric Blake <ebb9@byu.net>
+
+ * tests/autotest.at (Backquote command substitution),
+ (Multiline backquote command substitution): Remove mistaken
+ AT_NO_CMDSUBST from the 2006-03-14 patch, which was meant to be
+ applied...
+ (Parenthetical command substitution, Multiline parenthetical
+ command substitution): here.
+
+2006-04-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ Import macros from gnulib (often changing their name).
+
+ * NEWS: AC_C_TYPE_LONG_DOUBLE is now obsolete.
+ New macros AC_CHECK_DECLS_ONCE, AC_CHECK_FUNCS_ONCE,
+ AC_CHECK_HEADERS_ONCE, AC_FUNC_STRTOLD, AC_HEADER_ASSERT,
+ AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE,
+ AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_INT8_T,
+ AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T,
+ AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_LONG_INT,
+ AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T,
+ AC_TYPE_UINT64_T, AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T,
+ AC_TYPE_UNSIGNED_LONG_LONG_INT, AC_USE_SYSTEM_EXTENSIONS.
+ The manual mentions Gnulib more prominently.
+ * doc/autoconf.texi (Gnulib): New node.
+ (Pointers): Add Gnulib URL.
+ (Particular Functions): Alphabetize. Add AC_FUNC_STRTOLD.
+ (Generic Functions): Add AC_CHECK_FUNCS_ONCE. Refer to new
+ Gnulib section.
+ (Particular Headers): Add AC_HEADER_ASSERT. For stdbool.h,
+ suggest a #define rather than a typedef for _Bool, and mention
+ Gnulib rather than trying to substitute stdbool code.
+ (Generic Headers): Add AC_CHECK_HEADERS_ONCE.
+ (Generic Declarations): Add AC_CHECK_DECLS_ONCE.
+ (Particular Structures): Add AC_STRUCT_DIRENT_D_INO,
+ AC_STRUCT_DIRENT_D_TYPE.
+ (Particular Types): Mention stdint.h and inttypes.h as standard
+ headers too.
+ Add AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T,
+ AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_DOUBLE,
+ AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_LONG_LONG_INT, AC_TYPE_UINT8_T,
+ AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T,
+ AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT.
+ (C Compiler): Move AC_C_LONG_DOUBLE to ...
+ (Obsolete Macros): here. Under AC_LONG_DOUBLE, mention
+ AC_TYPE_LONG_DOUBLE or AC_TYPE_LONG_DOUBLE_WIDER instead.
+ (Posix Variants): Add AC_USE_SYSTEM_EXTENSIONS.
+ (Coding Style). Don't mention m4_expand_once.
+ * lib/autoconf/c.m4 (AC_C_LONG_DOUBLE): Implement via
+ AC_TYPE_LONG_DOUBLE_WIDER. Now obsolete.
+ * lib/autoconf/functions.m4 (_AH_CHECK_FUNCS): New macro.
+ (AC_CHECK_FUNCS): Use it.
+ (AC_CHECK_FUNCS_ONCE, AC_FUNC_STRTOLD): New macros.
+ (AC_FUNC_WAIT3): "the Open Group standards" -> "POSIX".
+ * lib/autoconf/general.m4 (AC_CHECK_DECLS_ONCE): New macro.
+ * lib/autoconf/headers.m4 (AC_CHECK_HEADERS_ONCE): New macro.
+ (AC_HEADER_ASSERT): New macro.
+ (AC_HEADER_STDBOOL): Don't assume "#error" works.
+ Catch a bug in IBM AIX xlc compiler version 6.0.0.0.
+ Catch a bug in an HP-UX C compiler.
+ * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): New macro.
+ * lib/autoconf/types.m4 (AC_TYPE_INTMAX_T. AC_TYPE_UINTMAX_T):
+ (AC_TYPE_INTPTR_T, AC_TYPE_UINTPTR_T. AC_TYPE_LONG_DOUBLE):
+ (AC_TYPE_LONG_DOUBLE_WIDER, AC_C_LONG_DOUBLE, AC_TYPE_LONG_LONG_INT):
+ (AC_TYPE_UNSIGNED_LONG_LONG_INT, _AC_TYPE_INT, _AC_TYPE_UNSIGNED_INT):
+ (_AC_STRUCT_DIRENT, AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE):
+ New macros.
+
+ * tests/mktests.sh (ac_exclude_list, au_exclude_list): Do not
+ use /^foo|bar$/, it does not mean /^(foo|bar)$/.
+
+2006-04-08 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Fix the wording
+ of the warning introduced by the 2001-08-28 change.
+
+2006-04-08 Stepan Kasal <kasal@ucw.cz>,
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): All `ac_cv_env_foo'
+ variables shall be overriden by the cache.
+ * tests/torture.at (AC_ARG_VAR): Test also with a first value
+ that contains braces.
+
+2006-04-07 Stepan Kasal <kasal@ucw.cz>
+
+ Revert the patch from 2006-04-01 and only improve
+ _AS_DETECT_BETTER_SHELL:
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Do not optimize; do not
+ skip nonexistent directories.
+ (_AS_DETECT_BETTER_SHELL): The optimization is moved here--try
+ only shell candidates which exist.
+ (AS_UNAME): No need to give three parameters to _AS_PATH_WALK.
+ * lib/autotest/general.m4 (AT_INIT): No need to give three
+ parameters to _AS_PATH_WALK.
+
+2006-04-07 Stepan Kasal <kasal@ucw.cz>,
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoupdate.in (handle_autoconf_patches): Change the way we
+ distinguish m4sugar macros.
+ * tests/tools.at (autoupdating with aclocal and m4_include):
+ New test. Bug reported by Gary V. Vaughan <gary@gnu.org>,
+ test case by Noah Misch <noah@cs.caltech.edu>.
+
+2006-04-07 Stepan Kasal <kasal@ucw.cz>
+
+ Revert my change from 2006-03-17, in other words:
+ * lib/m4sugar/m4sh.m4 (AS_BOURNE_COMPATIBLE): Insert BIN_SH=xpg4
+ and DUALCASE=1.
+ (AS_SHELL_SANITIZE): Remove DUALCASE=1.
+ * doc/autoconf.texi (Special Shell Variables) <BIN_SH>: Say that
+ it is set.
+
+2006-04-07 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Programming in M4sh): Document that
+ AS_MKDIR_P exits the script on failure.
+ * lib/autotest/general.m4: Remove redundant AS_ERROR.
+
+2006-04-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/elisp-comp, config/install-sh, config/mdate-sh,
+ config/missing, config/mkinstalldirs: Sync from Automake.
+
+ * lib/Autom4te/FileUtils.pm, lib/Autom4te/Struct.pm: Sync
+ from Automake.
+
+ * doc/make-stds.texi: Sync from gnulib.
+
+2006-04-06 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_O): Inside cache
+ check, s/ac_exeext/ac_cv_exeext/. Fixes regression introduced
+ 2006-04-01.
+
+2006-04-06 Stepan Kasal <kasal@ucw.cz>,
+ Eric Blake <ebb9@byu.net>,
+ Paul Eggert <eggert@cs.ucla.edu>,
+ Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_CACHE_DUMP): Fix the detection of
+ whether `set' quotes correctly: redirect stderr of the tested
+ `set', and use a subshell, for Ultrix; use `sed' instead of
+ `grep' for zsh `set' which may write binary output; match only
+ at the beginning of a line, to avoid false positives.
+ In order to avoid false positives by unrelated variables with
+ multiline content, put the dump algorithm in a subshell and
+ unset all variables containing newlines (except some which are
+ special to the shell). Warn about cache variables that are
+ unset.
+
+2006-04-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * config/config.guess, config/config.sub, config/texinfo.tex:
+ Sync from upstream.
+
+ * tests/mktests.sh: Reword comments.
+
+ * tests/mktests.sh: Only skip internal macros starting with
+ `_AC_' or `__AC_'. Noted by Stepan Kasal.
+ Update exclusion lists for the test suite to this end:
+ (AC_ARG_VAR): Do test this now.
+ (AC_SEARCH_LIBS, AC_REPLACE_FUNCS): Need an argument.
+ (AC_LINKER_OPTION): Remove (renamed to _AC_LINKER_OPTION).
+ (AC_LIST_MEMBER_OF): Likewise (renamed to _AC_LIST_MEMBER_IF).
+ (AC_LINK_FILES): Obsoleted since (and thus AU_DEFUN'ed).
+
+ * doc/autoconf.texi (Shell Substitutions): Mention the MSYS
+ shell issue with double-quoted command substitutions of native
+ commands.
+ Reported to MSYS by Mark Cave-Ayland, to Autoconf by Keith
+ Marshall.
+
+ * Makefile.maint (sc_cast_of_argument_to_free): Do not fail when
+ no file matches the glob, discard the warning, set `nullglob'.
+ (syntax-check): Likewise.
+ (sc_cast_of_x_alloc_return_value): Likewise.
+ (sc_cast_of_alloca_return_value, sc_error_exit_success)
+ (sc_prohibit_jm_in_m4, .re-list, sc_unmarked_diagnostics)
+ (m4-check): Likewise.
+ (sc_system_h_headers): Do not print rule on execution.
+ (sc_tight_scope): Do not fail for non-existing `src' directory.
+ (sc_changelog): Skip the Copyright footer.
+ * lib/autoconf/lang.m4: Remove trailing space.
+
+ * lib/autoconf/status.m4: More replacements to
+ <tab><space> where this makes sense.
+
+2006-04-06 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/Makefile.am (maintainer-check-posix):
+ s/POSIXLY_CORRECTLY/POSIXLY_CORRECT/
+
+ * lib/autoconf/status.m4 (_AC_CONFIG_FOOS): Append TAGS to
+ ac_config_<foo>s again, sometimes normalized, sometimes not.
+ (AC_CONFIG_FILES, AC_CONFIG_HEADERS, AC_CONFIG_LINKS):
+ (AC_CONFIG_COMMANDS): Do not do so here.
+ (_AC_CONFIG_REGISTER_DEST): Double quote the tags in macros _AC_LIST_TAGS
+ and_AC_LIST_TAG_COMMANDS; fixes another regression introduced by the
+ 2005-07-25 rewrite. Noticed by Noah Misch.
+
+ * lib/autoconf/general.m4 (AC_PRESERVE_HELP_ORDER): Do not define
+ _AC_PRESERVE_HELP_ORDER, ...
+ (AC_ARG_ENABLE, AC_ARG_WITH): ... use AC_PROVIDE_IFELSE insetad.
+
+ * lib/autoconf/general.m4 (AC_ARG_VAR): Do not use m4_divert_once
+ inside m4_expand_once; it is redundant.
+
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Remove the broken support
+ for --help from Cygnus `configure.'
+
+2006-04-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (C Compiler): Warn about #error. Follows up
+ on a patch proposed by Ralf Wildenhues.
+
+2006-04-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4: Replace <space>''<tab> with
+ <tab><space> where this makes sense.
+
+2006-04-05 Howard Chu <hyc@highlandsun.com> (trivial change)
+ Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/general.m4 (AC_PRESERVE_HELP_ORDER): New macro.
+ (AC_ARG_ENABLE, AC_ARG_WITH): Adjust.
+ * doc/autoconf.texi (Help Formatting): New node.
+ * NEWS: Announce AC_PRESERVE_HELP_ORDER.
+
+2006-04-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * TODO, config/Makefile.am, lib/freeze.mk, lib/autoconf/c.m4,
+ lib/autoconf/specific.m4, lib/autoconf/status.m4,
+ lib/autoconf/types.m4, lib/autotest/general.m4,
+ tests/mktests.sh, tests/torture.at: White space cleanup:
+ remove some SPACE before TAB, or add quoting ('' or @&t@).
+
+ * NEWS, TODO, bin/autoreconf.in: `filesystem' -> `file system'.
+
+ * doc/autoconf.texi (Shell Substitutions): Document `^' vs. `|'.
+
+2006-04-05 Eric Blake <ebb9@byu.net>
+
+ * lib/autotest/general.m4 (AT_INIT): Prep AT_*_all, so that an
+ empty test suite works.
+ * tests/autotest.at (Empty test suite): Remove xfail.
+
+2006-04-05 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/status.m4 (_AC_CONFIG_FOOS): Do not append normalized
+ TAGS to ac_config_<foo>s.
+ (AC_CONFIG_FILES, AC_CONFIG_HEADERS, AC_CONFIG_LINKS): Do so here.
+ (AC_CONFIG_COMMANDS): Append NAME to ac_config_commands without
+ normalizing it, consistent it with previous releases.
+ * tests/torture.at (Macro calls in AC_CONFIG_COMMANDS tags): New test.
+
+2006-04-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (AS_BASENAME_EXPR, AS_DIRNAME_EXPR):
+ Use simplified args that Eric Blake originally suggested.
+
+2006-04-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/mktests.sh: Don't use 'cat'; just read the files directly.
+ Prefer 'sort -u' to 'sort | uniq'. Filter data before sorting it.
+ Use 'comm' rather than N instances of grep; this also fixes a bug
+ whereby substrings were incorrectly matched, causing us to not
+ generate tests for AC_F77_NAME_MANGLING and AC_FUNC_LSTAT.
+ (exclude_list): Exclude empty macros.
+ (ac_exclude_list): Exclude AC_INCLUDES_DEFAULT.
+
+ Use awk rather than grep -E or egrep, to avoid
+ portability problems with regular expressions containing newlines.
+ (exclude_list, ac_exclude_list, au_exclude_list, ac_exclude_script):
+ Switch from grep to awk syntax.
+ (ac_exclude_script): Renamed from ac_exclude_egrep.
+ (au_exclude_script): Renamed from au_exclude_egrep.
+
+2006-04-04 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Only `configure.in' evidences
+ a subdirectory subject to Cygnus `configure'.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Likewise.
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Omit the bug
+ report request when we have no AC_PACKAGE_BUGREPORT.
+
+2006-04-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * THANKS: Update.
+
+ * tests/mktests.sh: Update copyright year in the header of the
+ generated files.
+
+ * lib/autoconf/c.m4 (AC_C_INLINE): Do not skip cleanup code.
+ (AC_C_RESTRICT): Likewise. Furthermore, add a function with a
+ typedef'ed restricted pointer, to catch a compiler bug on
+ HP-UX 11.x, and fix warnings so it passes with -Werror.
+ (_AC_PROG_CC_C99): Likewise.
+ Reported by Albert Chin <china@thewrittenword.com>.
+ * tests/mktests.sh: Do not skip AC_C_INLINE, AC_C_RESTRICT.
+
+2006-04-03 Noah Misch <noah@cs.caltech.edu>
+
+ * bin/autoscan.in (subdirs): New global.
+ (scan_file): Prune directories with configure{,.{ac,in,gnu}}.
+ (output): Emit AC_CONFIG_SUBDIRS as needed.
+ * tests/autoscan.at (autoscan): Remove XFAIL.
+
+2006-04-03 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): Use AC_MSG_NOTICE.
+
+2006-04-03 Eric Blake <ebb9@byu.net>
+
+ * THANKS: Add myself.
+
+2006-04-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT): Add `at_testdir' to pointer
+ to log, point to testsuite output tree.
+
+2006-04-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: AC_PROG_CC and AC_PROG_CXX no longer declare 'exit'.
+ * doc/autoconf.texi (Function Portability): Mention that C++
+ has trouble with 'exit'.
+ (Guidelines): Test programs shouldn't use 'exit'.
+ * lib/autoconf/c.m4 (_AC_PROG_CXX_EXIT_DECLARATION):
+ Remove; all uses removed.
+ (AC_LANG_INT_SAVE(C), AC_C_BIGENDIAN):
+ Return from 'main' instead of calling 'exit'.
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA, AC_FUNC_CLOSEDIR_VOID):
+ (_AC_FUNC_FNMATCH_IF, AC_FUNC_GETGROUPS):
+ (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, _AC_FUNC_MALLOC_IF):
+ (AC_FUNC_MEMCMP, AC_FUNC_MKTIME, AC_FUNC_MMAP, _AC_FUNC_REALLOC_IF):
+ (AC_FUNC_SETPGRP, _AC_FUNC_STAT, AC_FUNC_STRTOD, AC_FUNC_STRERROR_R):
+ (AC_FUNC_STRNLEN, AC_FUNC_SETVBUF_REVERSED, AC_FUNC_UTIME_NULL):
+ (_AC_FUNC_FORK, _AC_FUNC_VFORK, AC_FUNC_WAIT3): Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_STDC): Likewise.
+ * lib/autoconf/specific.m4 (AC_SYS_RESTARTABLE_SYSCALLS): Likewise.
+ * lib/autoconf/types.m4 (AC_TYPE_GETGROUPS): Likewise.
+ * tests/compile.at: Likewise.
+
+2006-04-02 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (AC_PATH_X): Update per 2005-08-26 change.
+
+2006-04-01 Stepan Kasal <kasal@ucw.cz>
+
+ Clean up _AC_COMPILER_EXEEXT* macros.
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Don't try to
+ detect exeext, it will be done by _AC_COMPILER_EXEEXT_O; just set
+ ac_file to the name of the default output file and call
+ _AC_COMPILER_EXEEXT_WORKS. Move the definition of ac_files and the
+ initial `rm' of the candidate files...
+ (_AC_COMPILER_EXEEXT): ... here and simplify them. Moreover, use
+ the same list in subsequent `rm' calls, and for the temporary
+ redefinition of ac_clean_files; call _AC_COMPILER_OBJEXT at the end,
+ and don't call the other _AC_COMPILER_EXEEXT_* macros directly, use...
+ (_AC_COMPILER_EXEEXT_TESTS): ... this new macro.
+ (_AC_COMPILER_EXEEXT_O): Don't export ac_cv_exeext, it's not needed (or
+ no longer needed) by libtool. Make it a cache check.
+ (_AC_COMPILER_EXEEXT_CROSS): Remove the comment, it was obviously
+ copied here by mistake.
+ (AC_NO_EXECUTABLES): Redefine _AC_COMPILER_EXEEXT_TESTS, not
+ _AC_COMPILER_EXEEXT.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX, AC_PROG_OBJC): Do not call
+ _AC_COMPILER_OBJEXT directly.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+
+2006-04-01 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DIRNAME_PREPARE): New macro.
+ (AS_DIRNAME): Use it.
+ (_AS_PREPARE): Add _AS_DIRNAME_PREPARE.
+
+ * tests/*.at: Remove the generated ones.
+
+2006-04-01 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't optimize the first PATH walk.
+
+2006-04-01 Eric Blake <ebb9@byu.net>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Optimize nonexistent
+ directories, unless optional third argument supplied.
+ (AS_UNAME): Don't optimize PATH walk.
+
+ * lib/Autom4te/Struct.pm, lib/autoconf/c.m4: s/non-existent/nonexistent/
+
+2006-04-01 Eric Blake <ebb9@byu.net>
+ and Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4: Sort sections as implied by the comments,
+ and fix some typos.
+
+2006-04-01 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_VERSION): Emit script name and
+ Autoconf version number despite a zero- or one-argument AC_INIT.
+
+ * bin/autoreconf.in (parse_args): Multiple -v send --verbose to
+ subordinate tools.
+ * lib/Autom4te/General.pm (getopt): Make -v and -d incremental.
+ * doc/autoconf.texi (autoreconf Invocation): Document it.
+
+ * doc/autoconf.texi: Use `Cygwin', `MinGW', and `license' consistently.
+ Append LocalWords so ispell-buffer passes cleanly. Spelling fixes.
+
+2006-04-01 Eric Blake <ebb9@byu.net>
+
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P): Allow use in shell lists.
+ * lib/autotest/general.m4: Be tolerant of existing directory when
+ rm failed to remove it.
+
+2006-04-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoupdate.in: Redefine m4_location so that warnings print
+ the correct lines of the input file by subtracting..
+ (_au__first_line): ..this new definition.
+
+ * lib/autoconf/general.m4 (AC_COMPILE_CHECK): Prefer
+ AC_MSG_CHECKING over obsolete AC_CHECKING in autoupdated code.
+ Remove stray newline in output.
+ (AC_FOREACH): AU_DEFUN this as literal for autoupdate, and also
+ AC_DEFUN this for autoconf, including the obsoletion diagnose.
+ Fixes autoupdating of code where the replacement output contains
+ m4sugar macros.
+ * lib/autoconf/lang.m4 (AC_LANG_SAVE): Likewise.
+ * tests/mktests.sh (ac_exclude_list): Add AC_FOREACH.
+ (au_exclude_list): Add AC_LANG_SAVE.
+ * tests/tools.at: Several new tests for all of this.
+ * doc/autoconf.texi (Obsoleting Macros): Give a hint about the
+ hairy details.
+ The AC_LANG_SAVE issue was reported against Libtool by
+ Dalibor Topic <robilad@kaffe.org>, and against Autoconf 2.57 by
+ Kristian Kvilekval <kris@cs.ucsb.edu>.
+
+2006-04-01 Stepan Kasal <kasal@ucw.cz>
+
+ * bin/autoupdate.in: Handle m4 builtins and m4sugar macros together--
+ switch all of them on and of when necessary. Fixes the bug when
+ m4sugar macros (e.g., m4_define) were expanded after the first
+ automatic update (e.g., after AC_PREREQ or AC_INIT).
+
+2006-03-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Programming in M4sh): Sharpen the descriptions
+ of AS_BASENAME and AS_DIRNAME. Reported by Stepan Kasal.
+
+ * lib/m4sugar/m4sh.m4 (AS_BASENAME_EXPR): Handle ///, ////, etc.
+ correctly. Problem reported by Eric Blake.
+ (_AS_EXPR_PREPARE): Detect Tru64 expr bug. Problem reported by
+ Ralf Wildenhues.
+
+2006-03-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Programming in M4sh, Limitations of Usual Tools):
+ Tighten up the basename/dirname wording.
+
+2006-03-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * Makefile.maint (sc_texi_notab): New check: do not use TABs
+ in texinfo files outside of verbatim environments.
+ (syntax-check-rules): Update.
+ * doc/autoconf.texi (Configuration Headers): Conform to it.
+
+2006-03-30 Chris Pickett <cpicke@cs.mcgill.ca> (tiny change)
+
+ * doc/autoconf.texi (autoreconf Invocation): Mention that -I for
+ aclocal cannot be given on the command line.
+
+2006-03-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Programming in M4sh): Mention AS_BASENAME.
+ Give an example for AS_DIRNAME instead of referring to Posix..
+ (File System Conventions): Put discussion of // versus / here, and
+ modernize it a bit.
+ (Limitations of Usual Tools): Add basename. Remove verbiage
+ after dirname, since it got moved to the above sections.
+ All this was inspired by a patch proposed earlier by Eric Blake.
+
+2006-03-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Quote
+ `$0' to protect against spaces.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Likewise, for
+ `$0', $as_me.
+
+2006-03-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoscan.in: The value of find_configure_ac should be
+ checked for existence, so we don't barf over a nonexisting
+ configure.ac. Reported by Laurence Darby <ldarby@tuffmail.com>.
+
+2006-03-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoupdate.in: Fix some typos.
+
+2006-03-21 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Installation Directory Variables): Fix typo.
+
+ * lib/autoscan/autoscan.list: Refreshed.
+
+2006-03-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/local.at (AT_CHECK_ENV): Ignore AC_SUBSTed Objective C
+ and Erlang related variables.
+
+ * lib/autoconf/c.m4 (AC_LANG(Objective C), AC_LANG_OBJC)
+ (_AC_LANG_ABBREV(Objective C), _AC_LANG_PREFIX(Objective C))
+ (AC_LANG_SOURCE(Objective C), AC_LANG_PROGRAM(Objective C))
+ (AC_LANG_CALL(Objective C), AC_LANG_FUNC_LINK_TRY(Objective C))
+ (AC_LANG_BOOL_COMPILE_TRY(Objective C))
+ (AC_LANG_INT_SAVE(Objective C), AC_LANG_PREPROC(Objective C))
+ (AC_PROG_OBJCPP, AC_LANG_COMPILER(Objective C), AC_PROG_OBJC)
+ (_AC_PROG_OBJC_G): New macros.
+ (_AC_ARG_VAR_CPPFLAGS): Adjusted.
+ * doc/autoconf.texi (Objective C Compiler): New node.
+ (Preset Output Variables): Document OBJCFLAGS.
+ (Language Choice): Document `Objective C' language.
+ (Fortran Compiler): Fix typo.
+ * NEWS: Updated.
+ Inspired by a patch from David M. Lloyd <dmlloyd@tds.net>.
+
+2006-03-20 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Default Includes): Fix typo
+ s/AC_HEADERS_STDC/AC_HEADER_STDC/
+ (Limitations of Usual Tools): s/unwriteable/unwritable/
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT, _AC_COMPILER_EXEEXT):
+ Fix typos in the comments.
+
+2006-03-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/programs.m4 (AC_PATH_TOOL, AC_CHECK_TOOL, AC_CHECK_TOOLS):
+ Factor out the warning to...
+ (_AC_TOOL_WARN): ... this new macro; use `cross_compiling'.
+ * tests/local.at (AT_CHECK_MACRO_CROSS): Avoid this warning.
+ * tests/semantics.at (AC_C_BIGENDIAN): Likewise.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Do not special
+ case `ac_delim' when writing the sed script.
+
+ * lib/m4sugar/m4sh.m4 (AS_BOURNE_COMPATIBLE): Removed BIN_SH=xpg4,
+ moved DUALCASE=1 ...
+ (AS_SHELL_SANITIZE): ... here.
+ * doc/autoconf.texi (Special Shell Variables) <BIN_SH>: Do not say
+ that it is set.
+
+ * lib/autoconf/programs.m4 (AC_CHECK_PROG): Quote the parameter of
+ AC_SUBST.
+ (_AC_PATH_PROG): Store the result to VARIABLE.
+ (AC_PATH_PROG): No need to set VARIABLE again.
+
+ * tests/local.at (AT_CHECK_MACRO_CROSS): New macro, creates two tests:
+ the first one is usual AT_CHECK_MACRO test, the second one checks
+ that the same works when cross-compiling.
+ * tests/semantics.at (AC_CHECK_ALIGNOF, AC_CHECK_ALIGNOF struct):
+ (AC_CHECK_SIZEOF, AC_CHECK_SIZEOF struct): Use it.
+
+2006-03-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Prepend
+ the directory `/usr/bin/posix' in the shell search, to prefer
+ the Posix shell not only in subsequent spawns as with `$BIN_SH'
+ on Tru64.
+
+ * doc/autoconf.texi (contents): To fix texi2html output, hide
+ `@setcontentsaftertitlepage' for HTML.
+ (Writing Autoconf Macros): Likewise, insert space after `@c'.
+ (Leviticus, Numbers, Deuteronomy): Likewise, change `@,c' to
+ `@,{c}'.
+
+2006-03-16 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PREPARE): Move the IFS setup and CDPATH
+ sanitizing...
+ (AS_SHELL_SANITIZE): ...here; mention _AS_PATH_WALK needs IFS set.
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT): Add an explanation
+ why IFS is restored so late; thank you, Ralf, for reminding us.
+
+2006-03-15 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Pretty Help Strings): No need to use cached
+ variables in the examples.
+
+2006-03-14 Romain Lenglet <rlenglet@users.forge.objectweb.org>
+
+ * doc/autoconf.texi (several sections): Cleaned up documentation for
+ macros in erlang.m4.
+
+2006-03-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autotest.at (AT_NO_CMDSUBST): New macro to determine
+ failure condition for `$(cmd)' style command substitutions.
+ (Parenthetical command substitution, Multiline parenthetical
+ command substitution): Use it.
+
+ * doc/autoconf.texi (Special Shell Variables): Missing word.
+ Reported by Keith Marshall <keith.marshall@total.com>.
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Do not forget to reset
+ IFS even in case of empty `$PATH'.
+
+2006-03-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_INIT) <at_optarg>: Optimize
+ `expr' away if there is nothing to do.
+ < --keywords >: Simplify and robustify argument handling.
+ Revert erroneous comment from 2005-08-23. Extend to allow
+ keyword negation with `!'.
+ Update help message. Remove broken code to prevent running
+ tests multiple times.
+ * doc/autoconf.texi (testsuite Invocation) < --keywords >:
+ Update and fix the documentation accordingly.
+ * tests/autotest.at (Keywords): Renamed to..
+ (Keywords and ranges): .. this. Extended to make sure negated
+ keywords, keywords taken from AT_SETUP arguments, and numeric
+ test ranges work, and that matching is case-insensitive.
+
+2006-03-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_NEW): Use a typedef to
+ allow to pass unnamed structs even in C++.
+ (AC_CHECK_SIZEOF): Likewise.
+ Also fix quoting error in `AC_MSG_FAILURE' arguments.
+ * tests/semantics.at (AC_CHECK_ALIGNOF struct, AC_CHECK_SIZEOF
+ struct): New tests for unnamed structs, each both native and
+ cross-compiling.
+
+ * lib/autoconf/c.m4 (AC_C_TYPEOF): Use typedef to avoid defining
+ a structure inside a cast, for C++ conformance.
+ * lib/autoconf/types.m4 (AC_CHECK_ALIGNOF): Likewise.
+ Also fix quoting error in `AC_MSG_FAILURE' arguments.
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_STDC): If we cannot enable C99
+ nor C89 mode, set `$ac_cv_prog_cc_stdc' to `no' instead of
+ trying to execute the command `no'.
+
+ * lib/autoconf/lang.m4 (AC_LANG_CONFTEST): AC_DEFUN this, not
+ m4_define, so that the requirements of `AC_INCLUDES_DEFAULT' are
+ expanded outside.
+
+ * doc/autoconf.texi (autoconf Invocation): Fix typos in trace
+ example. Do not emphasize `$%', it is hardly new and special.
+ Reported by Edouard Bechetoille <ebecheto@ens-lyon.fr>.
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document
+ OpenBSD and traditional `grep' failure to handle multiple
+ patterns separated by newlines.
+
+2006-03-10 Romain Lenglet <rlenglet@users.forge.objectweb.org>
+
+ * doc/autoconf.texi (several sections): Add documentation for macros
+ in erlang.m4.
+
+2006-03-10 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Obsolete Macros): Fix wording of
+ AC_TRY_LINK_FUNC.
+
+2006-03-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Use @acronym more consistently for acronyms
+ like BSD, GPL, LGPL. Fix minor English typos.
+ (AC_STDC_HEADERS, AC_PROG_GCC_TRADITIONAL):
+ Mention that these macros are becoming obsolete.
+ (AC_STDC_HEADERS, AC_PROG_CC, AC_C_CONST, AC_C_VOLATILE):
+ Use more modern terminology for which standard is what.
+ (AC_PROG_CC): Mention gcc first, and remove obsolete references to egcs
+ and to ansi2knr.
+ (AC_PROG_CXX): Likewise.
+ (AC_C_PROTOTYPES, Test Functions, AC_LIBOBJ vs LIBOBJS):
+ Remove obsolete discussion about how to port to K&R.
+ (Guidelines for Test Programs): Suggest AC_HEADER_STDBOOL rather than
+ the obsolescent AC_HEADER_STDC.
+ (AC_FOO_IFELSE vs AC_TRY_FOO): Don't use #error; test programs
+ can't rely on it.
+
+2006-03-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/c.at (AC_PROG_CPP without warnings, AC_PROG_CPP via CC):
+ Remove stdin redirection from /dev/null to allow pipe to work.
+
+2006-03-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/c.at (AC_PROG_CPP without warnings, AC_PROG_CPP via CC):
+ Require that /lib/cpp include stdio.h correctly. Solaris 10's
+ doesn't. Problem reported by D'Arcy A MacIsaac and diagnosed by
+ Ralf Wildenhues.
+
+2006-03-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_SED_CMD_LIMIT): The limit for
+ HP-UX sed is 99 commands, not 100.
+ (_AC_OUTPUT_FILES_PREPARE): Do not count the `}' of an
+ _AC_SUBST_FILES fragment. Separate `{' and `r' commands by
+ newline for portability.
+ * tests/torture.at (Torturing config.status): Also test 100
+ AC_SUBST_FILE invocations. Fix test to actually verify the
+ AC_CONFIG_FILES output.
+ * doc/autoconf.texi (Limitations of Usual Tools): Document HP-UX
+ command, label, and read-file `r' limits. Unify HP-UX spelling.
+
+ * tests/Makefile.am (edit, $(wrappers)): Do not use `$<' in
+ non-suffix rule.
+ ($(TESTSUITE_GENERATED_AT)): Use `$(srcdir)` for the benefit of
+ non-GNU make.
+ (autoconfdir, $(AUTOCONF_FILES)): Likewise.
+ * tests/mktests.sh: Small shell portability fixes.
+
+2006-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Caching Results): Fix the examples to use a
+ recommended quoting style and discard unwanted output.
+
+2006-03-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autotest/general.m4 (_AT_NORMALIZE_TEST_GROUP_NUMBER): New macro.
+ (AT_INIT): Use it, to remove arbitrary limit of 999,999 test
+ cases, and to work around Tru64 expr bug.
+
+2006-03-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention Tru64
+ expr bug that turns the result of a regex match into a number if
+ possible.
+
+2006-03-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/types.m4 (AC_CHECK_ALIGNOF): Work around
+ HPUX compiler bug, similarly to AC_CHECK_SIZEOF, as documented
+ in section `Specific Compiler Characteristics'.
+
+2006-03-04 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_STRERROR_R): Avoid unused
+ variable warning.
+
+2006-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADER): Force correct
+ order of variable initialization, so even the Solaris 2.6 shell
+ can create a config header correctly. Fixes lots of test suite
+ failures.
+
+2006-02-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Text processing Macros): New node to
+ document the m4sugar macros m4_re_escape, m4_tolower,
+ m4_toupper, m4_split, m4_normalize, m4_append, m4_append_uniq.
+
+2006-02-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Fix typo:
+ XrmInitialize (0) -> XrmInitialize ().
+ Reported by Toshio Kuratomi.
+
+2006-02-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (AS_IF): Extend to allow more than one
+ test, as in `if tests; then cmd1; elif ...; else ...; fi'.
+ * doc/autoconf.texi (Programming in M4sh): Adjusted.
+ * tests/m4sh.at (AS_IF and AS_CASE): Test this. Also make sure
+ both macros are defun'ed so that required macros are evaluated
+ outside.
+
+ * doc/autoconf.texi (Prerequisite Macros): State more precisely
+ where a required macro will be expanded.
+ (Coding Style): Another reason not to use `m4_define'.
+
+2006-02-21 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJ): Minor optimization.
+
+2006-02-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Looping constructs): New node, to
+ document m4_for, m4_foreach, m4_foreach_w, and mention
+ obsolete AC_FOREACH.
+ (Obsolete Macros): Document AC_FOREACH.
+ * lib/m4sugar/m4sugar.m4 (_m4_for): Fix declaration comment.
+ (m4_for): Fix to never loop (almost) endlessly, work correctly
+ with arithmetic expressions in arguments, a step of zero or
+ non-integer multiple of the interval, and avoid integer
+ overflow.
+ * tests/m4sugar.at: New test for m4_for, m4_foreach, and
+ m4_foreach_w.
+
+2006-02-20 Romain Lenglet <rlenglet@users.forge.objectweb.org>
+
+ Add basic support for Erlang, both for configuring Erlang/OTP
+ tools, and Erlang as a conf test language.
+ * lib/autoconf/erlang.m4: New file.
+ * lib/autoconf/autoconf.m4: Add erlang.m4.
+ * lib/autoconf/Makefile.am (dist_autoconflib_DATA): Likewise.
+ * lib/freeze.mk (autoconf_m4f_dependencies): Likewise.
+ * NEWS: Add short description of new macros.
+ * THANKS: Add Romain Lenglet.
+
+2006-02-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Shellology) <pdksh>: Document that pdksh as
+ native /bin/sh may not set KSH_VERSION (seen on OpenBSD).
+
+2006-02-15 Eric Blake <ebb9@byu.net>
+
+ * lib/autoconf/general.m4 (AC_CHECK_DECL): Avoid unused variable
+ warning.
+
+2006-02-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (AS_CASE): New macro.
+ (_AS_CASE): Private helper macro.
+ * tests/m4sh.at: Basic tests for AS_IF and AS_CASE.
+ * doc/autoconf.texi (Programming in M4sh): Document AS_CASE.
+ Fix syntax of AS_IF description
+ (Prerequisite Macros): Mention AS_IF and AS_CASE as workarounds
+ for the AC_REQUIRE mess.
+ * NEWS: Mention AS_CASE, AS_BOURNE_COMPATIBLE, and
+ AS_SHELL_SANITIZE.
+
+2006-02-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Minor style cleanup.
+ Be consistent about spaces after commas.
+ Insert [] where empty args look a bit funny.
+ Fix some "i.e." and "e.g." usages.
+ Try to avoid "X/Y" usages.
+ Don't be pedantic about "ISO C99"; just say C99.
+ Prefer GNU style for spaces in front of parens.
+ (Function Portability): Comment about C89 versus C99
+ signed integer division.
+ (Particular Headers): Use current gnulib style for dirent
+ includes.
+
+2006-02-14 Stepan Kasal <kasal@ucw.cz>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoupdate.in (handle_autoconf_macros): Fix updating of
+ macros without parameters.
+ * lib/autoconf/autoupdate.m4 (AU_ALIAS): Likewise.
+ * doc/autoconf.texi (Obsoleting Macros): Document AU_ALIAS.
+ * tests/tools.at (autoupdating AU_ALIAS): New test for AU_ALIAS
+ `$#' bug.
+ (autoupdate): Updated to match AU_ALIAS fix.
+
+2006-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Programming in M4sh): Document
+ AS_BOURNE_COMPATIBLE and AS_SHELL_SANITIZE.
+
+2006-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): Renamed to..
+ (AS_BOURNE_COMPATIBLE): ..this.
+ (_AS_RUN, AS_SHELL_SANITIZE): Adjusted all callers.
+
+2006-02-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/install.texi (Defining Variables): Tighten up the
+ CONFIG_SHELL wording.
+
+2006-02-12 Paul Eggert <eggert@cs.ucla.edu>
+ and Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): Look at the output
+ of (set -o) rather than testing whether (set -o posix) succeeds,
+ to work around a bug in the AIX 5.3 shell. Problem originally
+ reportd by Howard Chu for libtool.
+
+2006-02-10 J.T. Conklin <jtc@acorntoolworks.com>
+
+ * doc/autoconf.texi (Running the Compiler, Running the Linker):
+ Changes the macro arguments in summaries to match the
+ descriptions.
+
+2006-02-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/install.texi (Defining Variables): Classify the `CONFIG_SHELL'
+ hint as ``a workaround for a bug.''
+
+2006-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * bin/autoreconf.in: New option `--no-recursive'.
+ Improve wording for subpackages a bit.
+ * doc/autoconf.texi (autoreconf Invocation): Updated.
+ * NEWS: Updated.
+
+ * doc/install.texi (Defining Variables): Put `CONFIG_SHELL'
+ in environment of `configure', not the command line.
+ Reported by Howard Chu <hyc@highlandsun.com>.
+
+2006-01-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document the
+ problem with "trap -".
+
+2006-01-23 Steven G. Johnson <stevenj@fftw.org>
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS, _AC_FC_DUMMY_MAIN):
+ (_AC_FC_MAIN, __AC_FC_NAME_MANGLING): Use _AC_LANG in check
+ messages to differentiate Fortran and Fortran 77 tests.
+ (AC_FC_SRCEXT, AC_FC_FREEFORM): Use AC_LANG_PUSH/POP instead of
+ AC_LANG_ASSERT, to allow use in mixed-language projects.
+
+2006-01-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY(C)): Prefer "defined
+ FOO" to "defined (FOO)".
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA): Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_STAT): Likewise.
+ * lib/autoconf/specific.m4 (AC_XENIX_DIR): Likewise.
+ * tests/tools.at (ifnames): Likewise.
+
+2006-01-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Do not pass `-q' to mktemp.
+ * lib/Autom4te/General.pm (mktmpdir): Likewise.
+ (END): Improve error message a bit.
+ Reported by Bruce Korb <bkorb@gnu.org>.
+
+2006-01-12 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Ignore
+ `-LIST:' and `-LNO:', for PathScale 2.3 compilers.
+
+2006-01-11 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Header Portability): On Solaris 8, sys/ptem.h
+ requires sys/stream.h. Reported by Oliver Kiddle.
+
+2006-01-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (AT_INIT): When ensuring writability
+ before the removals of test dirs, use `find' to avoid modification
+ of symlinked directories.
+
+2006-01-11 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (AC_F77_DUMMY_MAIN, AC_FC_DUMMY_MAIN):
+ Don't ignore the macro arguments.
+
+2006-01-11 David Thompson <dthompsn@vizsolutions.com>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CXX_EXIT_DECLARATION): Add `exit'
+ declaration that works for MSVC.
+
+2006-01-11 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_OBJEXT_REJECT):
+ Add `*.map' and `.inf' for Green Hills compiler.
+ Reported by Stefan Seefeld <stefan@codesourcery.com>.
+
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Handle quadrigraphs
+ correctly: pad with spaces after FIRST_PREFIX if necessary,
+ and compute string lenghts with `m4_qlen' instead of `m4_len'.
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): Comments updated.
+ * tests/m4sh.at (AS_HELP_STRING): Test extended.
+ * NEWS: Updated.
+ Reported by numerous people, numerous times.
+
+2006-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bin/autoconf.as, bin/autoheader.in, bin/autom4te.in
+ * bin/autoreconf.in, bin/autoscan.in, bin/autoupdate.in, bin/ifnames.in:
+ * lib/autoconf/general.m4, lib/autoconf/status.m4:
+ * lib/autotest/general.m4, tests/local.at:
+ Update copyright year to 2006.
+
+ * Makefile.maint (sc_root_tests): Use the recommended style s/a/b/ for
+ sed substitutions.
+ * doc/autoconf.texi (Installation Directory Variables): Use s|a|b|
+ for file names, again. Reported by Noah Misch.
+ (Coding Style): Explain that s|a|b| is preferred for file names.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): Prefer s/a/b/.
+ (AC_OUTPUT_MAKE_DEFS): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Likewise.
+ * tests/local.at (AT_CHECK_AUTOM4TE): Likewise.
+
+ Fix Posix-conformance bugs re use of { command in sed scripts,
+ and improve the sed-related documentation a bit.
+ * doc/autoconf.texi (Installation Directory Variables): Use
+ our own style advice re 's,a,b,' versus 's|a|b|'. Use "Sed"
+ rather than "sed" when talking about Sed in general.
+ (Particular Programs): Likewise.
+ (Coding Style): y is like s with respect to / and ,.
+ (Limitations of Usual Tools): Document the weird restrictions
+ that Posix has about { }. Use better quoting.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE, _AC_OUTPUT_HEADER):
+ Rewrite to conform to Posix rules about { } in sed scripts.
+ * lib/m4sugar/m4sh.m4 (AS_DIRNAME_SED, AS_BASENAME_SED): Likewise.
+ * tests/foreign.at (Libtool): Likewise.
+ * tests/semantics.at (AC_CHECK_PROG & AC_CHECK_PROGS):
+ Use our own style advice re 's,a,b,' versus 's|a|b|'.
+
+2006-01-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4: Fix typo.
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Ignore
+ singly- or doubly-quoted arguments to `-cmdline', `-ignore',
+ `-def', for the benefit of Portland `pgf90 -Mipa'.
+ Reported by Christopher Hulbert <cchgroupmail@gmail.com>.
+
+2006-01-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Update copyright (and other) dates to 2006.
+ * doc/autoconf.texi (Shellology): Mac OS X 10.2 changed the default
+ shell from zsh to bash.
+
+2005-12-31 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/programs.m4 (_AC_PROG_GREP): Use $PATH_SEPARATOR;
+ ":" caused problems on OS/2-EMX. Suggested by Andrew Belov.
+
+2005-12-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Shell Substitutions): Warn about unbalanced
+ parentheses in $(...). Problem reported by Eric Blake.
+
+2005-12-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ Mention which characters can be escaped with \ in portable regular
+ expressions used in grep, sed, expr. Mention the leading ^ problem
+ with expr. Clean up some confusing wording. Mention which
+ grep options are portable.
+
+2005-12-09 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/local.at (AT_CHECK_AUTOM4TE): Fix typo in the comment.
+
+2005-12-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Fix typos in previous
+ patch, noted by Ralf Wildenhues.
+
+2005-12-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): Try `set -o
+ posix' unconditionally, for pdksh in `native sh' emulation.
+
+2005-12-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Shellology): Document eval $? problem
+ with ash.
+ (Limitations of Builtins): Likewise.
+
+2005-11-10 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Pass
+ CONFIG_SHELL in the environment of the configure rerun.
+ * doc/autoconf.texi (Here-Documents, config.status Invocation):
+ Suggest passing CONFIG_SHELL absolute, and in the environment
+ rather than as option.
+
+2005-11-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE):
+ Fix quoting of output line (triggered for many AC_SUBST_FILEs).
+ Fix macro quoting. Fix output for n * 98 substituted variables.
+
+2005-11-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_MAIN_LOOP): Initialize
+ `tmp' to avoid file removal race.
+
+2005-11-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Initialize
+ ac_clean_files and LIBOBJS.
+
+2005-11-06 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/programs.m4 (AC_CHECK_PROG, AC_PATH_PROG):
+ Factor functionality to..
+ (_AC_CHECK_PROG, _AC_PATH_PROG): these new macros, but only
+ `AC_SUBST($1)' in the public version.
+ (AC_CHECK_TOOL, AC_PATH_TOOL, AC_PATH_TARGET_TOOL)
+ (AC_CHECK_TARGET_TOOL): Use internal versions for ac_ct_* and
+ ac_pt_* variables.
+
+2005-11-01 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): Remove the comment about 8+3
+ filesystems.
+
+2005-11-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * NEWS: Move AH_HEADER mention to right place.
+
+2005-10-27 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): "conftst2" -> "conftest2"
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_C_O): Likewise.
+
+2005-10-25 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): rm -f conftst2.*, not only
+ conftst2.$ac_objext.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_C_O): Likewise.
+
+2005-10-24 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_C_O): Use conftst2.o instead of
+ conftest.o, to see whether the compiler really obeys; rm the object
+ file before and after the test and register it with ac_clean_files.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_C_O): Likewise.
+
+2005-10-21 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES_PREPARE): When determining,
+ the delimiter CEOF$ac_eof: fix quoting of CEOF[0-9]* and modify the
+ code so that the most common case requires less forks.
+
+2005-10-20 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Shell Substitutions}: Document that ${10} is
+ not portable; thanks to Paul Eggert and Alexandre.
+
+ * NEWS: Fix an old typo.
+
+2005-10-20 Jim Meyering <jim@meyering.net>
+
+ * doc/autoconf.texi: Typo: s/feature/features/ in ``the features of
+ the latter'', in two places.
+
+2005-10-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Generating Sources): AC_LANG_PROGRAMS ->
+ AC_LANG_PROGRAM, fixing a typo. Don't give details about
+ the inner workings of AC_LANG_FUNC_LINK_TRY.
+ * lib/autoconf/c.m4 (AC_LANG_CALL(C)): Reformat to match
+ AC_LANG_FUNC_LINK_TRY. This involves returning the value returned
+ by the function rather than ignoring it.
+ (AC_LANG_FUNC_LINK_TRY(C)): Call the function rather than simply
+ comparing its address. Intel's interprocedural optimization was
+ outsmarting the old heuristic. Problem reported by
+ Mikulas Patocka.
+
+2005-10-19 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_SUBST): Remove an obsolete comment.
+
+2005-10-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sugar.m4 (_m4_map): New macro.
+ (m4_map, m4_map_sep): Use it. Handle the empty list correctly.
+
+2005-10-04 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (AT_INIT): Really make the subtree writable
+ before removing it (chmod -R u+rwx); there are three instances of this.
+
+2005-10-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+ Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Balance parentheses.
+ * lib/autotest/general.m4 (AT_INIT): If the test dir already exists,
+ make its content writable before removing it. Remove an errorneous
+ comment from the end, where the logs of the failed tests are copied
+ to the main log file.
+
+2005-09-27 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/semantics.at (AC_C_BIGENDIAN): Pass --force to autoheader,
+ in case the computer is too quick. Double quote the configure.ac
+ snippets.
+
+ * tests/local.at (AT_CHECK_AUTOCONF): Always pass --force to prevent
+ problems if the testsuite were running too fast.
+
+2005-09-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/libs.m4 (_AC_PATH_X_DIRECT): Look for X11/Xlib.h
+ and XrmInitialize rather than X11/Intrinsic.h and XtMalloc
+ (which belong to Xt, not X itself). See Debian bug 327655.
+ * NEWS: Mention this.
+
+2005-09-07 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_LANG_SOURCE(C)): Remove an incorrect comment.
+
+2005-09-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * config/move-if-change: Don't output "$2 is unchanged";
+ suggested by Ben Elliston. Handle weird characters correctly.
+
+2005-09-06 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/libs.m4 (AC_SEARCH_LIBS): Merge the two AC_LINK_IFELSE
+ calls, so that the final expansion of this macro is shorter.
+ Create the conftest.$ac_ext outside the `for' loop, to speed the run.
+ Do not use `break' in the argument to AC_LINK_IFELSE, it would skip
+ the cleanup there. Use AS_VAR_* macros, to be more general.
+ * tests/semantics.at (AC_SEARCH_LIBS): Check for the cleanup.
+
+ * lib/autoconf/general.m4: Use AS_IF where appropriate.
+
+ * lib/m4sugar/m4sh.m4 (AS_IF): Use m4_default.
+
+2005-09-01 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Configuration Headers): Add an index entry
+ for AH_HEADER.
+
+2005-08-26 Pavel Roskin <proski@gnu.org>
+
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): Use shell variable
+ XMKMF to locate xmkmf. Make XMKMF precious. Export CC when
+ running xmkmf.
+
+2005-08-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_VERSION_COMPARE_PREPARE):
+ The previous patch didn't work, so try a better one.
+
+2005-08-26 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Programming in M4sh) <AS_TR_CPP>: Fix m4 quoting
+ in the example. Reported by Bruno Haible.
+ <AS_TR_SH>: Likewise. Also modify the example to be more convincing:
+ "if $undefined_var;" succeeds with my shell.
+
+ * lib/autoconf/general.m4 (AC_CANONICAL_BUILD, AC_CANONICAL_HOST,
+ AC_CANONICAL_TARGET): Define by AC_DEFUN, no need to use AC_DEFUN_ONCE;
+ but change the m4_divert_text to m4_divert_once.
+
+2005-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_VERSION_COMPARE_PREPARE):
+ Work around bug in Solaris /usr/xpg4/bin/awk.
+ The bug is present in at least Solaris 8 through 10.
+
+2005-08-24 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT): Simplify; rejecting
+ some evil values and relying on the fact that $* concatenates the
+ parameters by the first character from IFS.
+
+2005-08-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>,
+ Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_CONFIG_REGISTER_DEST): When the
+ first header appears, define AH_HEADER.
+ * doc/autoconf.texi (Configuration Headers): Document AH_HEADER.
+ Update limitations about when to call AC_CONFIG_HEADERS.
+ (Configuration Commands): Document that AC_CONFIG_COMMANDS_PRE
+ parameter can call AC_SUBST, AC_DEFINE, or AC_CONFIG_FOOS; explain
+ that AC_CONFIG_COMMANDS_PRE and AC_CONFIG_COMMANDS_POST are not
+ ``Configuration Actions''; fix their index entries.
+
+ * lib/autotest/general.m4 (AT_INIT): Process multiple keywords
+ options correctly. Process N-M as M-N if M is smaller than N.
+ Process ranges correctly so that N-N will run only N.
+ Sort and uniquify the tests that will be run. If there is more
+ than one test, reinsert the banners for the tests.
+ * tests/autotest.at (Keywords): Unmark XFAIL.
+
+2005-08-23 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_DEFINE_Q): Strip the parameter list
+ before passing the macro name to AH_TEMPLATE.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): config.status
+ now opens log after option processing; in particular, --version
+ and --help do not touch config.log.
+
+ * Makefile.maint: Revert the change from 2005-08-12.
+
+2005-08-22 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_ARG_ENABLE, AC_ARG_WITH): Factor out
+ common code to...
+ (_AC_ENABLE_IF, _AC_ENABLE_IF_ACTION): ... these new macros.
+
+2005-08-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Using Autotest, testsuite Scripts)
+ (Autotest Logs, Writing testsuite.at, testsuite Invocation):
+ Language cleanup.
+
+ * doc/autoconf.texi (Defining Symbols, Changed Results):
+ Prepend to LIBS, not append, in examples.
+
+2005-08-16 Stepan Kasal <kasal@ucw.cz>
+
+ When building in place, set srcdir="."; suggested by Tim Van Holder.
+
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR): Do this; to recognize
+ build in place, we need ac_pwd, and thus have to AC_REQUIRE ...
+ (_AC_INIT_DIRCHECK): ... this macro and AC_DEFUN both of them.
+ * lib/autoconf/status.m4 (_AC_SRCDIRS): Fix a comment: srcdir="."
+ does not mean "no --srcdir option".
+
+2005-08-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * tests/autoscan.at (autoscan): New file.
+ * tests/suite.at: Use it.
+ * tests/Makefile.am (TESTSUITE_HAND_AT): Add it.
+ Reported against Libtool by Gideon Go <gideon.go@gmail.com>.
+
+ * tests/autotest.at (Keywords): Test keywords combinations.
+
+2005-08-12 Stepan Kasal <kasal@ucw.cz>
+
+ * Makefile.maint (GZIP_ENV): When checking the help text of gzip,
+ add "2>&1"; gzip 1.2.4 prints help on stderr.
+
+2005-07-27 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): The symbol at_reason
+ was pushdef'ed twice while popped only once. Push it only once.
+ (_AT_CHECK): Cosmetic changes to the "case $at_status" command.
+
+2005-07-26 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): The message is now
+ prefixed by mere "===", not "configure: === ".
+
+2005-07-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * Makefile.maint: Update from Bison.
+
+ * lib/m4sugar/m4sugar.m4 (m4_strip): Comment fix---change tab to
+ "<tab>" in comment, so that the point is understandable.
+
+2005-07-25 Stepan Kasal <kasal@ucw.cz>
+
+ Rewrite substantial part of lib/autoconf/status.m4.
+ The main change is that CONFIG_FILES, CONFIG_HEADERS, CONFIG_LINKS,
+ and CONFIG_COMMANDS are not processed in four separate loops.
+ Instead, there is one main loop. This allows that the common code
+ is expanded only once, thus config.status (and configure) is smaller.
+
+ The registration mechanism in AC_CONFIG_FILES and cousins also
+ changed; the AC_LIST_FILES and cousins macros are no longer used.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS,
+ _AC_OUTPUT_LINKS, _AC_OUTPUT_COMMANDS): Renamed to ...
+ (_AC_OUTPUT_FILE, _AC_OUTPUT_HEADER, _AC_OUTPUT_LINK,
+ _AC_OUTPUT_COMMAND): ..., respectively. These macros no longer
+ contain the initialization, nor the for loop, nor the associated
+ commands; all these go to ...
+ (_AC_OUTPUT_MAIN_LOOP): ... this new macro, called from
+ _AC_OUTPUT_CONFIG_STATUS.
+ (_AC_CONFIG_SPLIT, _AC_CONFIG_SPLIT_SOURCE_DEST, _AC_CONFIG_SPLIT_FILE_IN):
+ Nuked; the code was merged into _AC_OUTPUT_MAIN_LOOP.
+ (_AC_OUTPUT_FILE): The creation of the sed script ...
+ (AC_OUTPUT): ... and the setup of ac_vpsub goes to ...
+ (_AC_OUTPUT_FILES_PREPARE): ... a new macro, also called from
+ _AC_OUTPUT_MAIN_LOOP.
+ (_AC_CONFIG_FILES, _AC_CONFIG_HEADERS, _AC_CONFIG_LINKS,
+ _AC_CONFIG_COMMANDS): Use ...
+ (_AC_CONFIG_FOOS): ... this new macro, which uses these ...
+ (_AC_CONFIG_REGISTER, _AC_CONFIG_REGISTER_DEST): ... new macros.
+ (_AC_CONFIG_FILE, _AC_CONFIG_HEADER, _AC_CONFIG_LINK,
+ _AC_CONFIG_COMMAND, _AC_CONFIG_DEPENDENCIES): No longer needed.
+ (_AC_CONFIG_DEPENDENCY): Update, it uses these ...
+ (_AC_CONFIG_DEPENDENCY_DEFAULT, _AC_FILE_DEPENDENCY_TRACE_COLON):
+ ... new macros.
+ (_AC_CONFIG_UNIQUE): Update.
+ (AC_LIST_FILES, AC_LIST_HEADERS, AC_LIST_LINKS, AC_LIST_COMMANDS):
+ Replaced by this ...
+ (_AC_LIST_TAGS): ... new common macro.
+ (AC_LIST_FILE_COMMANDS, AC_LIST_HEADER_COMMANDS, AC_LIST_LINK_COMMANDS,
+ AC_LIST_COMMAND_COMMANDS): Replaced by this ...
+ (_AC_LIST_TAG_COMMANDS): ... new common macro.
+ (_AC_CONFIG_COMMANDS_INIT): Moved top to the `registration' section;
+ this didn't belong to the `config commands' section.
+ (_AC_OUTPUT_COMMANDS_INIT): Don't initialize, m4_ifdef is our friend.
+ (AC_CONFIG_COMMANDS_PRE, AC_OUTPUT_COMMANDS_PRE,
+ AC_CONFIG_COMMANDS_POST): Moved to a new section, these didn't belong
+ to the `config commands' section either.
+ (AC_CONFIG_SUBDIRS): Don't touch diversion DEFAULTS.
+ (_AC_LIST_SUBDIRS): Don't initialize, m4_ifdef is our friend.
+
+ ... and many changes to the comments nearby.
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): At the end of the day,
+ set ac_subdirs_all='_AC_LIST_SUBDIRS'.
+ * tests/torture.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ AC_CONFIG_COMMANDS(command:input,...) is no longer allowed.
+ (#define header templates): The comment at the top of the generated
+ header now includes the name(s) of the source file(s).
+
+ Several unrelated small changes:
+
+ * lib/autoconf/general.m4 (AC_CACHE_VAL): Be didactic, quote the first
+ parameter to AC_DIAGNOSE.
+ * lib/autoconf/status.m4 (AC_CONFIG_SUBDIRS): Likewise.
+ (_AC_LINK_FILES_CNT): Don't AU_DEFUN this; it causes confusing messages
+ with autoupdate; use m4_define_default inside AU_DEFUNed AC_LINK_FILES.
+ (AC_OUTPUT): In the compatibility code, use m4_ifvaln, to be consistent
+ with AU::AC_OUTPUT.
+ (AU::AC_OUTPUT): Don't double-quote $2 and $3, the compatibility code
+ in AC_OUTPUT doesn't double-quote it either.
+ * tests/tools.at (autoupdate): AU::AC_OUTPUT no longer double-quotes the
+ parameters.
+
+2005-07-10 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Document which
+ versions of Portland Group compiler produce single- and double-quoted
+ -cmdline argument. Reported by Steven G. Johnson <stevenj@fftw.org>
+ and Ole Holm Nielsen <Ole.H.Nielsen@fysik.dtu.dk>.
+
+2005-07-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/local.at (AT_CONFIG_CMP): Ignore lines like "LIBS=''" too.
+ This is a corrected version of yesterday's patch.
+
+2005-07-07 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Report the full
+ path, too; insert a "===" to emphasize the line.
+
+ * lib/autoconf/general.m4 (AC_CANONICAL_BUILD): Rename
+ ac_cv_build_alias to ac_build_alias.
+ (AC_CANONICAL_HOST, AC_CANONICAL_TARGET): Simplify.
+
+ On 2005-02-24, an unintentional AC_SUBST([CC]) was introduced; this
+ change eliminates it. Problem reported by Alexandre Duret-Lutz.
+ * lib/autoconf/general.m4 (_AC_ARG_VAR_PRECIOUS): Move the AC_SUBST ...
+ (AC_ARG_VAR): ... here.
+ (_AC_INIT_PREPARE): Call AC_SUBST for build_alias, host_alias and
+ target_alias.
+
+ Keep a list of all precious variables and process them with one simple
+ for loop, instead of expanding all commands, or, OTOH, complicated
+ processing of output of "set".
+ * lib/autoconf/general.m4 (_AC_ARG_VAR_PRECIOUS): Accumulate the
+ variable names in new macro...
+ (_AC_PRECIOUS_VARS): ... which will be assigned to ac_precious_vars.
+ (_AC_ARG_VAR_STORE): New macro which writes to diversion PARSE_ARGS
+ a loop to assign all ac_env_* and ac_cv_env_* variables.
+ (_AC_ARG_VAR_VALIDATE): Use shell variable ac_precious_vars, divert
+ to INIT_PREPARE.
+ (_AC_INIT_DEFAULTS): At the end, if _AC_PRECIOUS_VARS is set, assign
+ its value to shell variable ac_precious_vars and call
+ _AC_ARG_VAR_STORE and _AC_ARG_VAR_VALIDATE.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Don't call
+ _AC_ARG_VAR_VALIDATE.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Move AC_LANG_PUSH(C)
+ and the AC_SUBSTs ...
+ (AC_INIT): ... here.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Changed the title of
+ the ac_subst_files section in config.log.
+
+ * tests/local.at (AT_CONFIG_CMP): Revert Paul's previous change.
+
+2005-07-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: New macro AC_C_TYPEOF.
+ * doc/autoconf.texi (C Compiler): Document AC_C_TYPEOF.
+ * lib/autoconf/c.m4 (AC_C_TYPEOF): New macro.
+ * tests/c.at (C keywords): Test AC_C_TYPEOF.
+
+ Fix problems reported by Nicolas Joly.
+ * tests/base.at (Input/Output): Ignore 'loading site script' chatter.
+ * tests/local.at (AT_CONFIG_CMP): Ignore lines like "LIBS=''" too.
+ They are generated by the Tru64 v5.1B shell.
+
+2005-07-05 Stepan Kasal <kasal@ucw.cz>
+
+ Fix my changes from 2005-07-01; reported by Noah Misch.
+ * lib/autoconf/status.m4 (_AC_CONFIG_DEPENDENCIES): Fix the
+ description, the macro now accepts only a single tag.
+ (_AC_CONFIG_UNIQUE): Likewise; s/AC_File/[$1]/
+
+ Fix cases when the varsions of Autoconf and Autotest don't match.
+ Reported by Noah Misch.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Set also
+ at_top_builddir, for compatibility with older autotest.
+ * lib/autotest/general.m4 (AT_INIT): If at_top_build_prefix
+ is not set, use at_top_builddir, for compatibility with older
+ versions of autoconf.
+
+2005-07-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bin/autom4te.in ($m4): Catch usages like --nesting-limit=2048.
+ Problem reported by Patrick Welche.
+
+2005-07-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (AC_ARG_PROGRAM): Use &, not |, in
+ sed substitution command, so that we allow | in program prefixes
+ and program suffixes. (& is a problem anyway; we're not fixing
+ that here.)
+ * lib/autoconf/status.m4 (AC_CONFIG_FILES): Likewise, for
+ configure_input, top_builddir, srcdir, etc.
+ * lib/autotest/general.m4 (AT_INIT): Likewise, for
+ PATH_SEPARATOR in AUTOTEST_PATH.
+
+2005-07-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/general.m4 (AC_SITE_LOAD): Rewrite the
+ for loop over config.site files using `set', to allow
+ directory names containing IFS characters.
+
+2005-07-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DIRCHECK): Remove the tests for
+ directories with weird names. Apparently some people like living
+ on the edge. However, improve the test that "pwd" actually does
+ report a name for the working directory.
+ * NEWS: Remove the claim that we test for funny chars in dir names.
+
+2005-07-01 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_FOREACH): Make obsolete; it's
+ replaced ...
+ * lib/m4sugar/m4sugar.m4 (m4_foreach_w): ... by this new macro.
+ * lib/autoconf/status.m4 (_AC_CONFIG_DEPENDENCIES, _AC_CONFIG_UNIQUE):
+ Now accept a single tag, not whitespace separated list.
+ (AC_CONFIG_SUBDIRS): Call _AC_CONFIG_UNIQUE in a m4_foreach_w loop.
+
+2005-06-30 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Configuration Headers): Change the explanation
+ about #include <config.h>.
+ (Generic Functions): Mention the Gnulib project.
+ (Limitations of Usual Tools) <sed>: Another minor rephrasing.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Use a here
+ document to output the default config_* lists to config.status.
+ Don't recognize option --file, if the functionality is not there.
+ Likewise for --header; moreover, recognize --he and --h as shortcuts
+ for --help in that case.
+
+ * lib/autoconf/status.m4: Fix the order of the "sections", so that it
+ matches the order of execution. No code changed.
+
+2005-06-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Fix also for
+ single-quoted -cmdline argument in Portland Group compiler.
+ Reported against LAM by Ole Holm Nielsen <Ole.H.Nielsen@fysik.dtu.dk>.
+
+2005-06-30 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect AC_SUBST_TRACE.
+
+2005-06-29 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (File Descriptors): ksh doesn't pass open file
+ descriptors to child processes; reported by Norman Gray.
+
+2005-06-29 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_ARG_VAR): Move next to _AC_ARG_PRECIOUS.
+
+ * lib/autoconf/general.m4 (AC_SUBST_TRACE): New macro, to be traced
+ instead of AC_SUBST; proposed by Alexandre Duret-Lutz.
+ (AC_SUBST): Call it.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Call AC_SUBST_TRACE for
+ the directory specific variables; but don't call it for configure_input.
+
+2005-06-28 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Reword recent
+ addition.
+
+2005-06-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Don't worry about spaces in bindir etc. Only srcdir and working
+ directory have inherent problems with special characters like spaces,
+ due to limitations in Make syntax. Problem reported by Alexandre
+ Duret-Lutz.
+ * lib/autoconf/general.m4 (_AC_INIT_DIRCHECK): Implement the above.
+ Also, fix Tru64 porting problem with shell patterns,
+ reported by Ralf Wildenhues.
+
+2005-06-23 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Subdirectories): Fix markup typos.
+
+2005-06-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/local.at (AT_CHECK_ENV): Simplify regexp slightly.
+
+ Fix some more shell quoting problems. Prompted by a bug report
+ from Justace Clutter.
+ * lib/autoconf/general.m4 (_AC_INIT_DIRCHECK): Put name of invalid
+ variable into diagnostic. Make the diagnostic an error, not a warning,
+ because we really don't support spaces and suchlike in dir names.
+ (_AC_INIT_SRCDIR): Allow special characters in $ac_unique_file.
+ Don't worry about backslashes in srcdir; it can't happen now.
+ (_AC_INIT_PARSE_ARGS): Allow weird characters in ac_optarg.
+ Simplify ac_optarg handling.
+ (_AC_ARG_VAR_VALIDATE): Remove unnecessary and inconsistent quotes.
+
+2005-06-22 Stepan Kasal <kasal@ucw.cz>
+
+ Fix AT_CONFIG_CMP for Solaris hosts; idea from Ralf Menzel.
+ * configure.ac: Call AC_PROG_EGREP and AC_PROG_SED.
+ * tests/atlocal.in: Propagate $EGREP and $SED.
+ * tests/local.at (AT_CHECK_ENV): Use $EGREP, not $GREP -E.
+ (AT_CONFIG_CMP): Use sed instead of grep plumbing.
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <grep>: Mention
+ that '\|' is not allowed in BREs; recommend using newline separated
+ list of patterns instead of multiple -e options.
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Remove an old comment.
+
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT): Use AC_SUBST/2.
+
+2005-06-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT): Fix typo.
+
+2005-06-21 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <sed>: Document that
+ b, t, r, w commands require single space, while : cannot have any.
+ (Special Shell Variables): Fix sed code this in the example.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS): Likewise; and fix a typo.
+ * lib/autotest/general.m4 (AT_ARG_OPTION): Fix typo in the description.
+
+ * lib/m4sugar/m4sugar.m4 (m4_split): If the parameter is empty,
+ expand to the empty list. Don't use two pairs of m4_changequote,
+ it's not necessary.
+
+2005-06-20 Derek Price <derek@ximbiot.com>
+
+ * lib/m4/programs.m4 (AC_PROG_YACC): Declare YACC & YFLAGS precious.
+
+2005-06-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (as_awk_strverscmp): Port to Solaris /bin/awk.
+ * doc/autoconf.texi:
+ Don't mention Solaris versions so much, if a
+ problem is common to all extant versions of Solaris. Say "SunOS
+ 4" instead of "SunOS" for SunOS 4.
+ (awk): Mention more of the limitations of traditional Awk.
+ (cat): Don't talk about cat -v.
+
+2005-06-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_VERSION_COMPARE_PREPARE): New macro.
+ (AS_VERSION_COMPARE): New macro. The API is taken from CVS,
+ but the implementation is entirely different and is designed
+ to be compatible with glibc strverscmp.
+ * tests/m4sh.at (AS_VERSION_COMPARE): New test.
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention expr bug
+ on Mac OS X 10.4 reported by Peter O'Gorman in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2005-06/msg00041.html
+ * lib/autoconf/general.m4 (_AC_CANONICAL_SPLIT):
+ Use shell builtins rather than 'expr', to work around expr bug.
+
+2005-06-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: "filesystem" -> "file system".
+ "behaviour" -> "behavior".
+ Warn about \(...\)* in Solaris sed (written by Ralf Menzel).
+ * lib/autoconf/general.m4: Omit blank after ":" sed command,
+ as per POSIX.
+ * lib/m4sugar/m4sh.m4: Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS): Work around problem
+ with Solaris sed. Fix by Ralf Menzel and Stepan Kasal.
+
+ * man/Makefile.am (MOSTLYCLEANFILES): Add $(srcdir)/*.t.
+ (.x.1): Ignore the time stamp in the .TH line when deciding whether
+ to update the man page. That way, we don't have to check in new
+ man pages every month.
+
+ * lib/m4sugar/m4sh.m4 (AS_VAR_TEST_SET): Work even if $1 contains
+ quotes and backslashes. Patch from Derek Price.
+
+2005-06-10 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Programming in M4sh): Document AS_TR_CPP &
+ AS_TR_SH.
+
+2005-06-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't accept Solaris 9's diff
+ -u, since it outputs chatter if the input files are the same.
+ Problem reported by Ralf Menzel.
+
+2005-06-08 Derek Price <derek@ximbiot.com>
+
+ * lib/m4sugar/m4sugar.m4: Undefine include & sinclude rather than
+ renaming them since they are about to be redefined anyhow.
+
+2005-06-08 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Redefined M4 Macros): Add index entries for most
+ redefined M4 macros to this node. Document m4_include & m4_sinclude.
+ Move m4_undefine to alphabetical order.
+
+2005-06-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * README: Recommend GNU M4 1.4.3 or later.
+ * doc/autoconf.texi (Introduction): Likewise.
+ Reword to avoid some formatting glitches.
+ Use "#!/bin/sh", not "#! /bin/sh"; the space isn't needed these days.
+ Clarify explanation of HP compiler bug.
+ Redo example output tp match current CVS snapshot.
+ Use @example.org in email addresses when the examples
+ might get inadvertently cut-and-pasted into user code.
+ Remove example of autom4te usage that doesn't seem to work now.
+ Use modern AC_INIT (except when the example is meant to be
+ shown with Autoconf 2.13).
+ Update ksh info for Solaris 9 and later.
+ KB -> kB.
+ Modernize description of Automake versions a bit.
+ Don't claim a future version of Autoconf is near.
+ * doc/install.texi: Reword to avoid some formatting glitches.
+
+2005-06-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi: Add [] to examples, so that the manual
+ follows its own advice about quoting better.
+ Reword to avoid some formatting glitches.
+ * doc/installt.exi: Reword to avoid some formatting glitches.
+
+ * doc/autoconf.texi (Limitations of Builtins) <case>: Mention
+ Tru64 ksh pattern matching bug. Reported against Libtool by
+ Albert Chin <libtool@mlists.thewrittenword.com> and
+ Nicolas Joly <njoly@pasteur.fr>.
+
+2005-06-06 Stepan Kasal <kasal@ucw.cz>
+
+ m4_cdr of one-member list was [[]] (one-member list containing an
+ empty string) instead of [] (an empty list. Callers were skewed to
+ match this misbehaviour. As a consequence of this:
+ - m4_foreach([x], [], [foo]) expanded to `foo', while
+ - the expansion of m4_foreach([x], [[]], [foo]) was empty.
+ This bug has been fixed:
+
+ * lib/m4sugar/m4sugar.m4 (m4_cdr): If only one argument is given,
+ expand to an empty string; print error msg if called without
+ an argument list.
+ (m4_foreach, m4_map, m4_map_sep): Don't expect the previous
+ misbehaviour; handle [] and [[]] correctly.
+
+2005-06-06 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Nuke ac_max_here_lines.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS): Simplify the sed
+ scripts created and the loop applying them, use _AC_SED_CMD_LIMIT.
+
+2005-06-06 Ralf Menzel <menzel@ls6.cs.uni-dortmund.de> (trivial change)
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Solaris' awk cannot
+ swallow records with more than 99 fields.
+ * lib/autotest/general.m4 (AT_INIT): Use the awk builtin `split' to
+ parse the long line.
+
+2005-06-04 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): AIX awk cannot
+ swallow literals longer than 399. Reported by Ralf Wildenhues.
+ * lib/autotest/general.m4 (AT_INIT): Pass $at_groups though stdin,
+ to workaround this limitation.
+
+2005-06-03 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Find g95 in addition
+ to gfortran, and make these the first two compiler names
+ checked (following the general autoconf preference for gcc).
+
+2005-06-03 Stepan Kasal <kasal@ucw.cz>
+
+ * tests/Makefile.am (check_SCRIPTS): Set to $(wrappers).
+ (DISTCLEANFILES): Remove $(check_SCRIPTS).
+ (testsuite): Make sure autotest.m4f is up-to-date before using it.
+
+2005-06-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't create a regular
+ expression of unbounded size when processing the --list
+ option. This runs afoul of a limit of 399 bytes per regular
+ expression on AIX. Problem reported by Ralf Wildenhues.
+
+2005-06-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Note yesterday's changes to AC_SUBST and AC_SUBST_FILE.
+ * doc/autoconf.texi (Particular Headers): Reword example
+ for multiline stdbool replacement.
+ (Setting Output Variables): Reword text a bit. Don't
+ give all the details about |#_!!_#|.
+ Reword description of line replacement.
+
+2005-05-31 Dan Manthey <dan_manthey@partech.com>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Output variables may
+ now contain newlines, and substituted files must be referenced on
+ a line alone; the sed scripts to substitute them are now very
+ different.
+ (_AC_SED_CMD_LIMIT): Added; single place to store limit on how many
+ commands can be put in a sed script portably.
+ * doc/autoconf.texi (Setting Output Variables): Document above
+ changes. (Particular Header Checks) <AC_HEADER_STDBOOL>: Give exaple
+ use of multiline substitution.
+ * tests/torture.at: No longer expect substitution of newline to fail.
+
+2005-05-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_WORK): Fix diagnostics.
+ From Ralf Menzel (trivial change).
+
+2005-05-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/local.at: Don't attempt to check for negated character
+ classes in shell scripts. The test was too brittle.
+
+2005-05-25 Stepan Kasal <kasal@ucw.cz>
+
+ * bin/autoconf.as: Don't use "shift 2"; it's not portable enough.
+ * doc/autoconf.texi (Limitations of Builtins): Document this
+ limitation.
+
+2005-05-24 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_LOG): New macro to factor out
+ common code; used in many places in the tree.
+ (AS_ESCAPE): Make the pattern a bit simpler; use \& insetad of \1.
+ (_AS_ECHO_UNQUOTED): Move the macro lower; no code change.
+
+ * lib/m4sugar/m4sugar.m4 (m4_ifset): Use m4_ifval.
+
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR): Merge the two error
+ messages when ac_unique_file is not found.
+ (AC_CONFIG_MACRO_DIR): Simplify the `if' at the end.
+ (AC_MSG_CHECKING, AC_MSG_RESULT): Put braces around the two echo
+ commands, for consistency with AC_MSG_ERROR and such.
+
+ * bin/autoconf.as: Make more use of "shift 2" in option processing.
+
+ * bin/Makefile.am: Merge the two rules for creating scripts.
+
+2005-05-23 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_MSG_RESULT_UNQUOTED): Make
+ obsolete; it was never documented.
+ (AC_CACHE_CHECK): Use AC_MSG_RESULT instead.
+
+2005-05-20 Stepan Kasal <kasal@ucw.cz>
+
+ * NEWS: @top_builddir@ is now a dirname, ac_top_builddir will follow.
+ * lib/autoconf/status.m4 (_AC_SRCDIRS): Rename ...
+ (ac_top_builddir): ... this ...
+ (ac_top_build_prefix): ... to this; the old name is also kept, for
+ backward compatibility.
+ (ac_top_builddir_sub): New variable, without the trailing slash,
+ always nonempty.
+ (_AC_OUTPUT_FILES): s/@top_builddir@/$ac_top_builddir_sub/
+ * doc/autoconf.texi (Configuration Actions): Rename
+ ac_top_builddir to ac_top_build_prefix.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Rename
+ at_top_builddir to at_top_build_prefix.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+2005-05-20 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Simplify the init
+ of confdefs.h .
+
+2005-05-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Don't m4_quote the second
+ argument to m4_foreach. I guess it was necessary in the past,
+ but I think it's a no-op now.
+
+2005-05-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Merge two consecutive
+ ``cat <<_ACEOF'' commands to one.
+ (_AC_CANONICAL_SPLIT): Use expr, not ``echo|sed.''
+ * lib/autoconf/status.m4: On various places, use expr instead of
+ ``echo|sed.''
+ (_AC_CONFIG_SPLIT, _AC_CONFIG_SPLIT_SOURCE_DEST):
+ (_AC_CONFIG_SPLIT_FILE_IN): New macros, to factor out common code.
+ * lib/autotest/general.m4 (AT_INIT): Use expr to get the numbers from
+ a range.
+ * tests/local.at (AT_CHECK_SHELL_SYNTAX): Use awk to search for
+ the wrong patterns between ``case'' and ``esac.'' The previous
+ code had false positives.
+
+2005-05-14 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA): Prepend ${LIBOBJDIR},
+ as on 2005-05-02.
+ * doc/autoconf.texi (Particular Functions) <AC_FUNC_ALLOCA>:
+ Mention LIBOBJDIR.
+
+2005-05-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * AUTHORS, BUGS, COPYING, ChangeLog, ChangeLog.0, ChangeLog.1,
+ ChangeLog.2, GNUmakefile, Makefile.am, Makefile.cfg,
+ Makefile.maint, NEWS, README, README-alpha, TODO, configure.ac,
+ bin/Makefile.am, bin/autoconf.as, bin/autoheader.in,
+ bin/autom4te.in, bin/autoreconf.in, bin/autoscan.in,
+ bin/autoupdate.in, bin/ifnames.in, config/Makefile.am,
+ config/config.guess, config/config.sub, config/elisp-comp,
+ config/m4.m4, config/mdate-sh, config/missing, config/texinfo.tex,
+ doc/Makefile.am, doc/fdl.texi, lib/Makefile.am, lib/autom4te.in,
+ lib/freeze.mk, lib/Autom4te/C4che.pm, lib/Autom4te/ChannelDefs.pm,
+ lib/Autom4te/Channels.pm, lib/Autom4te/Configure_ac.pm,
+ lib/Autom4te/FileUtils.pm, lib/Autom4te/General.pm,
+ lib/Autom4te/Request.pm, lib/Autom4te/Struct.pm,
+ lib/Autom4te/XFile.pm, lib/autoconf/Makefile.am,
+ lib/autoconf/autoconf.m4, lib/autoconf/autoheader.m4,
+ lib/autoconf/autoscan.m4, lib/autoconf/autotest.m4,
+ lib/autoconf/autoupdate.m4, lib/autoconf/c.m4,
+ lib/autoconf/fortran.m4, lib/autoconf/functions.m4,
+ lib/autoconf/general.m4, lib/autoconf/headers.m4,
+ lib/autoconf/lang.m4, lib/autoconf/libs.m4,
+ lib/autoconf/oldnames.m4, lib/autoconf/programs.m4,
+ lib/autoconf/specific.m4, lib/autoconf/status.m4,
+ lib/autoconf/types.m4, lib/autoscan/Makefile.am,
+ lib/autoscan/autoscan.list, lib/autoscan/autoscan.pre,
+ lib/autotest/Makefile.am, lib/autotest/autotest.m4,
+ lib/autotest/general.m4, lib/emacs/Makefile.am,
+ lib/emacs/autoconf-mode.el, lib/emacs/autotest-mode.el,
+ lib/m4sugar/Makefile.am, lib/m4sugar/m4sh.m4,
+ lib/m4sugar/m4sugar.m4, man/Makefile.am, tests/Makefile.am,
+ tests/atlocal.in, tests/autotest.at, tests/base.at, tests/c.at,
+ tests/compile.at, tests/foreign.at, tests/fortran.at,
+ tests/local.at, tests/m4sh.at, tests/m4sugar.at, tests/mktests.sh,
+ tests/semantics.at, tests/suite.at, tests/tools.at,
+ tests/torture.at, tests/wrapper.as:
+ Update FSF postal mail address.
+
+2005-05-13 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_CONFIG_LIBOBJ_DIR): Remove the broken
+ check.
+ * lib/m4sugar/m4sugar.m4 (m4_bmatch): Halt with error if we don't get
+ enough arguments, similarly as in m4_bpatsubsts.
+
+2005-05-12 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_SRCDIRS): Simplify the computation
+ of absolute paths.
+
+2005-05-11 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Make the check
+ for absolute directory names in one loop.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Handle
+ abbreviations of --version and --debug.
+
+2005-05-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Autoconf Language): Be more precise about
+ quoting rules. Problems noted by Stepan Kasal.
+ Also, throughout this document, be more careful about white space.
+ "blank", "white space", and "space" all have different meanings
+ and we should be careful to say what we mean.
+
+2005-05-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix C++ related problems reported by Werner Lemberg.
+ * doc/autoconf.texi (C++ Compiler): Mention .cpp extension.
+ * lib/autoconf/c.m4 (AC_LANG(C++)): Set ac_ext to .cpp, not .cc.
+ * lib/autoconf/types.m4 (AC_TYPE_SIGNAL): Simplify test, to
+ avoid problems with C++ and throw.
+ * tests/compile.at: .cpp, not .cc.
+
+ * tests/semantics.at: Prepend LIBOBJDIR, as per 2005-05-02 change.
+
+2005-05-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Generic Functions): Typos.
+
+2005-05-02 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJS_NORMALIZE): Prepend each
+ object named in LIBOBJS and LTLIBOBJS with the ${LIBOBJDIR}, as
+ set by latest automake.
+
+2005-05-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): "expr '' \| ''"
+ outputs 0 on GNU/Linux these days.
+
+2005-04-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Autoconf Language): Add more description
+ about quoting heuristics.
+ (Limitations of Builtins): Describe "set -" problems.
+
+2005-04-29 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autotest/general.m4 (AT_KEYWORDS): Separate by space,
+ not newline.
+
+ * doc/autoconf.texi (External Software): Replace AC_DEFINE_UNQUOTED
+ by AC_DEFINE; it was a mistake.
+ From bug reported against libtool by Dalibor Topic <robilad@kaffe.org>.
+
+2005-04-25 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS): A tiny optimization.
+
+2005-04-22 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (External Software): Quadrigraphs are not
+ processed correctly in AS_HELP_STRING; avoid this in the examples.
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): Add a FIXME about quadrigraphs.
+ * lib/m4sugar/m4sugar.m4 (m4_text_wrap): Likewise; and rephrase the
+ comment and reduce m4_default([foo], []) to [foo].
+ (m4_strip): Update the explanation.
+
+2005-04-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE, _AC_RUN_IFELSE):
+ Remove core.conftest.* too; it's generated by Tru64 5.1.
+ Problem reported by Jennis Pruett.
+ * lib/autoconf/functions.m4
+ (AC_FUNC_SETVBUF_REVERSED, AC_FUNC_UTIME_NULL):
+ Don't bother to remove core files; AC_RUN_IFELSE should do that
+ for you.
+
+2005-04-19 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sugar.m4 (m4_bpatsubsts): Add the b- to comment, too.
+
+2005-04-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Handle --docdir.
+ Report from Horst Wente.
+
+2005-04-15 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_ARG_VAR_VALIDATE): Fixed a typo in
+ the comment.
+
+2005-04-14 Gregorio Guidi <greg_g@gentoo.org>
+
+ * doc/autoconf.texi (External Software, Package Options): Add
+ examples showing how to implement --with-* and --enable-* options.
+
+2005-04-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Look for configure.ac
+ as well as configure.in. Problem reported by Gregorio Guidi.
+
+2005-04-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Functions): Use gnulib's current
+ pattern for alloca snippet.
+
+2005-04-04 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): Fix a typo.
+
+2005-04-01 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Generic Programs): Fix a typo.
+
+2005-04-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't assume that "date +%s"
+ fails if %s isn't supported. Problem reported by Ralf Wildenhues.
+
+2005-03-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS):
+ Merge `-z option' as well for the benefit of Solaris link flags. Pass
+ whole-archive (-zallextract, -zdefaultextract) options in the hope of
+ unique libraries, for the Sun Fortran 95 8.0 compiler. Bug reported
+ against Libtool by Yury Puhalsky <pooh@cryptopro.ru>.
+
+2005-03-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: The configure command now warns you if you attempt to use
+ a directory whose name contains a special character like space,
+ newline, or "\".
+ * doc/autoconf.texi (Installation Directory Variables): Allow
+ "," in file names. Do not use \@; it's not a portable regexp.
+ * bin/Makefile.am (edit): Likewise.
+ * lib/Makefile.am (edit): Likewise.
+ * tests/Makefile.am (edit): Likewise.
+ * tests/semantics.at: Likewise.
+ * tests/torture.at: Likewise.
+ * lib/autoconf/general.m4 (AC_ARG_PROGRAM): Likewise.
+ * lib/autoconf/status.m4 (_AC_SRCDIRS): Likewise.
+ * doc/autoconf.texi (File System Conventions): Warn about
+ unportable file names.
+ * lib/autoconf/general.m4 (_AC_INIT_DIRCHECK): New macro.
+ (AC_INIT): Use it.
+ (_AC_INIT_SRCDIR): Use ac_pwd rather than invoking pwd.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Propagate
+ ac_pwd, and quote srcdir.
+ * lib/autotest/general.m4 (AT_INIT): Quote file name args.
+
+ * doc/autoconf.texi: Fix some systematic formatting problems.
+ ".)" needs a following @: if not at the end of a sentence, and
+ similarly for "!)". "etc." should be preceded by a comma.
+ "n-th" -> "@var{n}th". pdksh is still buggy, so update its date.
+
+2005-03-22 Bruno Haible <bruno@clisp.org>
+
+ * doc/autoconf.texi (Input): Mention that AC_CONFIG_AUX_DIR's
+ argument is often called 'build-aux'.
+
+2005-03-07 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Quotation Rule Of Thumb): Mention that the
+ macro AC_TRY_LINK is obsolete.
+ (Installation Directory Variables): Change `AC_OUTPUT_FILES' to
+ `AC_CONFIG_FILES'.
+
+2005-02-24 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/c.m4 (AC_PROG_CC): Be more careful to skip
+ `/usr/ucb/cc'; use `cl.exe' to distinguish the MS compiler
+ from a Common Lisp's `cl'.
+ (AC_PROG_CXX): Behave according to the documentation: don't
+ search for $ac_tool_prefix$CCC and $CCC, just set CXX=$CCC;
+ make the variable CCC precious; use `cl.exe', not `cl'.
+
+2005-02-23 Paul Eggert <eggert@cs.ucla.edu>
+ Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Redirect stdin from
+ /dev/null, as "configure" shouldn't read stdin, and this insulates
+ us from problems (e.g., when testing for "cl"). Also, do this
+ redirection before invoking "hostname" or "uname", and keep the
+ original input stream available via...
+ (AS_ORIGINAL_STDIN_FD): ... this new macro.
+ (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE, _AC_LINK_IFELSE): Don't
+ bother with "</dev/null" since it's now done at the top of
+ 'configure'.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+ * lib/autoconf/programs.m4 (_AC_PATH_PROG_FLAVOR_GNU): Likewise.
+ * doc/autoconf.texi (File Descriptor Macros): New section.
+ (Printing Messages): Mention it.
+ * tests/base.at (Input/Output): New test.
+
+2005-02-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_N_PREPARE): Don't set ECHO_C to
+ newline if neither \c nor -n work, as that would output two
+ newlines. Prefer -n to \c. Reported by Stepan Kasal.
+
+2005-02-12 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_IF): Define by m4_defun, not m4_define.
+ This causes that any required macros inside will get before the if.
+ * doc/autoconf.texi (autom4te.cache): A typo.
+
+2005-02-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ Undo previous change, except keep the change to
+ lib/autoconf/programs.m4 that replaced grep with shell
+ pattern-matching. This is because net-snmp configure reads stdin.
+ Reported by Noah Misch.
+
+2005-02-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Redirect stdin
+ from /dev/null, as "configure" shouldn't read stdin, and this
+ insulates us from problems (e.g., when testing for "cl").
+ Suggested by Alexandre Duret-Lutz. Also, do this redirection
+ before invoking "hostname" or "uname".
+ (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE,
+ _AC_LINK_IFELSE): Undo previous change, as it's no longer needed.
+ * lib/autoconf/c.m4 (AC_PROG_CC, AC_PROG_CXX): Don't bother with
+ "</dev/null" since it's now done at the top of 'configure'.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Likewise.
+ * lib/autoconf/programs.m4 (_AC_PATH_PROG_FLAVOR_GNU): Likewise.
+ Also, replace grep with shell pattern-matching, to save a process.
+
+2005-02-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE,
+ _AC_LINK_IFELSE): Redirect stdin to /dev/null, in an attempt to
+ avoid thinking that Allegro Common Lisp's "cl" command is a C++
+ compiler.
+
+2005-02-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document that
+ grep -q isn't portable. Improve grep -s explanation.
+ Problem reported by Dan Manthey.
+
+2005-02-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Special Shell Variables): Clarify
+ PATH_SEPARATOR wording; fix typo in IFS. Reported by Gary V. Vaughan.
+
+2005-02-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Use @acronym for DJGPP.
+ Fix some @code's that should have been @env's, and vice versa.
+ Sort environment variable names.
+ Mention that shells no longer inherit IFS.
+ Don't recommend PATH_SEPARATOR=';' so strongly.
+ Mention that $RANDOM might expand to the empty string.
+ "symlink" and "soft link" -> "symbolic link".
+ Improve mktemp description (reported by Bruno Haible).
+
+2005-02-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/foreign.at (Libtool): Don't overquote AT_SETUP arg.
+ * tests/m4sh.at (AS_DIRNAME, AS_BASENAME, AS_MKDIR_P, AS_HELP_STRING):
+ Likewise.
+ * tests/semantics.at (AC_C_BIGENDIAN, AC_PATH_PROG & AC_PATH_PROGS):
+ Likewise.
+
+2005-02-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * NEWS: Mention AT_COPYRIGHT.
+
+ * tests/local.at (AT_CMP): Use diff directly on input files rather
+ than copying them.
+
+ * lib/autoconf/programs.m4 (AC_PROG_SED): Don't look in
+ /usr/xpg4/bin since that sed dumps core (at least on Solaris 8).
+
+2005-02-04 Noah Misch <noah@cs.caltech.edu>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/autotest.at (Empty test suite): New test.
+ * tests/torture.at (Substitute and define special characters)
+ (Substitute a 2000-byte string, Define to a 2000-byte string)
+ (Substitute a newline, Define a newline): New tests.
+
+2005-02-04 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/m4sugar/m4sugar.m4 (m4_re_string, m4_re_word): Revert 2002-03-04.
+ * tests/local.at (AT_CHECK_M4SUGAR): Add `m4sugar' to keywords.
+ (AT_CHECK_ENV): Ignore LTLIBOBJS, FC variables, EGREP, FGREP, and SED.
+ * tests/m4sugar.at (AT_CHECK_M4SUGAR_TEXT, AT_CHECK_M4RE): New macros.
+ (Standard regular expressions): New test.
+ (m4_warn, m4_require: circular dependencies, m4_text_wrap): Strip
+ excess test name quoting.
+ * tests/semantics.at (AC_CHECK_HEADERS_OLD, AC_CHECK_HEADERS_NEW): Pass
+ CPPFLAGS to `configure' instead of setting it in `configure'.
+
+ * lib/m4sugar/m4sh.m4 (AS_UNAME): Try only /usr/bin/hostinfo, not
+ any `hostinfo' in $PATH, since hostinfo.exe is a popular file name
+ on some platforms.
+
+ * lib/autoconf/fortran.m4 (AC_LANG(Fortran), AC_FC_SRCEXT):
+ s/FC_SRCEXT/ac_fc_srcext/; s/FCFLAGS_SRCEXT/ac_fcflags_srcext/.
+
+ * tests/local.at (AT_CMP): New macro.
+ (AT_DATA_AUTOCONF): Do not call AC_PROG_GREP.
+ (AC_SAVE_STATE): Move environment grep...
+ (AT_CHECK_ENV): to here. Filter out `'$''. Use AT_CMP.
+ (AT_CONFIG_CMP): New macro.
+ (AT_CHECK_MACRO): Run `configure' twice with cache and compare results.
+ * tests/c.at (Extensions): Do not exit early.
+ * tests/atlocal.in: Inherit $GREP.
+
+ * lib/autoconf/c.m4 (_AC_C_STD_TRY): New macro.
+ (_AC_PROG_CC_C89, _AC_PROG_CC_C99): Use it.
+
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Update for 2005.
+ (AC_COPYRIGHT): Factor header comment portion out and move into...
+ * lib/m4sugar/m4sh.m4 (AS_COPYRIGHT): This.
+ * lib/autotest/general.at (AT_COPYRIGHT): New macro.
+ (AT_INIT): Add Autotest copyright notice. Display copyright notices in
+ --version output.
+ * tests/local.at: Add Autoconf test suite copyright notice.
+ * doc/autoconf.texi (Writing testsuite.at): Document AT_COPYRIGHT.
+
+2005-02-04 Bruno Haible <bruno@clisp.org>
+ and Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): New mkstemp entry.
+
+2005-02-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sugar.m4 (m4_re_escape): Escape ?, ^, \, $ too;
+ this fixes a bug tickled by the AT_CAPTURE_FILE change noted below.
+
+ Try not to generated lines of unlimited length, as POSIX places a
+ 2047-byte limit on line length of portable text files.
+ * lib/autoconf/general.m4 (AC_SUBST, AC_SUBST_FILE):
+ Use newline as a separator, not space.
+ * lib/autotest/general.m4 (AT_TESTED, AT_KEYWORDS): Likewise.
+ (AT_CAPTURE_FILE): Use space-backslash-newline as a separator, not
+ space.
+
+2005-02-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_WORK): Move func_* to
+ as_func_*. Add test to check whether positional parameters
+ are restored after function return.
+
+2005-02-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Special Shell Variables): Mention _,
+ BIN_SH, DUALCASE. Say that variables other than "status" are safe
+ if they contain a lower-case letter. The DUALCASE problem was
+ reported by Ralf Wildenhues.
+
+ * bin/autoconf.as: Don't exit with status 0 after write failure
+ with --help or --version.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP, _AC_INIT_VERSION): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Likewise.
+
+2005-02-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ Unicos 9 sed limitations.
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Try cf77 before fort77
+ to get the option-enhanced interface on older Crays. Try ftn for
+ Fortran 95 (newer Crays).
+
+2005-02-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ * man/Makefile.am (.x.1): Go back to the simple solution, but take
+ care to echo the commands, so the user knows what's going on.
+ Modified from a suggestion by Stepan Kasal.
+
+ * doc/autoconf.texi (autoreconf Invocation): Mention autopoint,
+ with a cross reference. Derived from a suggestion by Bruce Korb.
+
+2005-01-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (config.status Invocation): Warn about
+ discrepancy between CONFIG_SHELL and shell used to invoke 'configure'.
+ * doc/install.texi (Defining Variables): Likewise.
+ Based on a proposed patch by Ralf Wildenhues.
+
+ * man/Makefile.am (.x.1): Make sure the required generated files
+ are up to date. Problem and original solution proposed by Stepan Kasal.
+ $(dist_man_MANS:.1=-bin-prereq), $(dist_man_MANS:.1=-tests-prereq),
+ implicit-man-prerequisites): New rules, used by the above.
+
+ * doc/make-stds.texi, doc/standards.texi: Sync from gnulib.
+ * config/config.guess, config/config.sub, config/install-sh: Likewise.
+ * config/missing, config/texinfo.tex: Likewise.
+
+2005-01-29 Stepan Kasal <kasal@ucw.cz>
+
+ Simplify the implementation of m4_require (a.k.a. AC_REQUIRE).
+ Update the long comment explaining it.
+
+ m4_require no longer writes an ``is required by'' line to the
+ execution stack. It contains only one bit of non-redundant
+ information: that the macro was required, not called. And even
+ this bit is useless in most situations: have you ever met a macro
+ which both calls and requires the same macro?
+
+ * lib/m4sugar/m4sugar.m4 (_m4_defun_pro): Don't push a diversion...
+ (_m4_defun_pro_outer): ... only via this macro, for the outermost
+ macro.
+ (_m4_defun_epi, _m4_defun_epi_outer): Complementarily.
+ (m4_expansion_stack_pop): Remove the misplaced comment.
+ (m4_require): Don't put the ``is required by'' line to the
+ execution stack; slightly improve the out-of-a-defun error message.
+ (_m4_divert_grow): New macro, counter for the temporary diversions.
+ (_m4_require_call): Use it.
+ * tests/m4sugar.at (m4_require): Expect output without the
+ ``is required by'' messages.
+
+2005-01-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Recommend X
+ rather than x for expr.
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_OBJEXT): Avoid subshells when
+ this is safe.
+ * lib/autoconf/programs.m4 (AC_PROG_EGREP, AC_PROG_FGREP): Likewise.
+ * lib/autoconf/specific.m4 (AC_SYS_LONG_FILE_NAMES): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_WORKS): Likewise.
+ * tests/mktests.sh: Likewise.
+
+2005-01-27 Akim Demaille <akim@epita.fr>
+
+ Have autoheader honor --force.
+
+ * doc/make-stds.texi, doc/standards.texi: Update from masters.
+ * lib/Autom4te/Channels.pm, lib/Autom4te/Configure_ac.pm
+ * lib/Autom4te/FileUtils.pm, lib/Autom4te/XFile.pm: Update
+ from masters, so that FileUtils.pm's update_file provide --force
+ support.
+ * bin/autoheader.in: Pass $force to update_file so that
+ config.h.in is always recreated when --force.
+
+2005-01-24 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Introduction): Update Peter Simons' address.
+
+2005-01-21 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Clarify that
+ "if test ! -d foo; ..." is portable. Suggested by Stepan Kasal.
+
+2005-01-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Shell Substitutions): Fix typo in case statement.
+ Warn about newline stripping in `` and $(). Update Solaris
+ version to 9.
+ (Limitations of Builtins): Use expr "X...", not expr "x...", as
+ X insulates us from future changes to Posix.
+ (Limitations of Usual Tools): For AS_DIRNAME, warn about newline
+ stripping.
+
+2005-01-19 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Defining Symbols): Delete the false comment that
+ you cannot use AC_DEFINE to define macros containing `[' or `]'.
+
+2005-01-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Document bug
+ in Solaris 8 join. Problem reported by Tomohiro Suzuki on
+ bug-tar mailing list.
+
+2005-01-05 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sugar.m4 (m4_copy): Fix the explanation.
+
+2005-01-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_LANG_INT_SAVE(C)): Declare longval and
+ ulongval to be static, to avoid unwanted GCC warning. Problem
+ reported by Michael Jennings via Daniel Reed; see
+ <https://bugzilla.redhat.com/beta/show_bug.cgi?id=143852>.
+
+2005-01-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Define datarootdir,
+ docdir, htmldir, dvidir, pdfdir, psdir, and localdir. Update
+ datadir, infodir, and mandir. Adjust argument parsing code.
+ (_AC_INIT_HELP): Update help text.
+ * doc/autoconf.texi (Installation Directory Variables): Document
+ new variables.
+
+2005-01-04 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): If the Make program does
+ not seem to work, assume it does set $(MAKE).
+ * doc/autoconf.texi (AC_PROG_MAKE_SET): Update.
+
+2005-01-03 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Add a comment about nesting.
+
+2005-01-03 Stepan Kasal <kasal@ucw.cz>
+
+ A cleanup of the diversion support in m4sugar.
+
+ * lib/m4sugar/m4sugar.m4 (_m4_divert): A typo in description.
+ (_m4_divert_n_stack): New macro; the expansion is
+ <newline>m4_divert_stack, if m4_divert_stack is defined, and void
+ otherwise.
+ (m4_divert, m4_divert_push, m4_divert_pop, m4_init): Use it.
+ (m4_divert_push, m4_divert_pop, _m4_defun_epi): Don't expand the word
+ stored in _m4_divert_diversion or _m4_divert_dump.
+ (m4_divert_pop): When the parameter is given, compare the symbolic
+ name with the last diversion pushed on the stack. Previously, the
+ current diversion was compared with the numeric value of the
+ diversion given as the parameter.
+ (m4_require): If the macro hasn't been expanded yet, call ...
+ (_m4_require_call): this new macro.
+
+2005-01-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE, _AC_ARG_VAR_VALIDATE):
+ Workarounds for documented `case' limitations.
+
+2005-01-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Warn about
+ sed 'command1;command2'. Problem reported by Ralf Wildenhues.
+
+2005-01-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bin/autoconf.as, bin/autoheader.in, bin/autom4te.in,
+ bin/autoreconf.in, bin/autoscan.in, bin/autoupdate.in,
+ bin/ifnames.in, tests/mktests.sh: Update copyright date to 2005.
+
+ Patch from Roger Leigh (with some minor changes) as follows:
+ * NEWS: New macros AC_PROG_CC_C89, AC_PROG_CC_C99.
+ Resurrect AC_PROG_CC_STDC.
+ * doc/autoconf.texi (C Compiler): Add AC_PROG_CC_STDC,
+ AC_PROG_CC_C89, AC_PROG_CC_C99.
+ (Obsolete Macros): Remove AC_PROG_CC_STDC; it's no longer obsolete.
+ * lib/autoconf/c.m4 (_AC_PROG_CC_C89, _AC_PROG_CC_C99, AC_PROG_CC_C89,
+ AC_PROG_CC_C99): New macros.
+ (AC_PROG_CC_STDC): Use them.
+ (_AC_PROG_CC_STDC): Remove.
+ (AC_C_PROTOTYPES): Use ac_cv_prog_cc_c89, not ac_cv_prog_cc_stdc.
+ * THANKS: Add Roger Leigh.
+
+2004-12-30 Noah Misch <noah@cs.caltech.edu>
+
+ * bin/autoreconf.in (autoreconf_current_directory): AM_INIT_AUTOMAKE
+ signals that the package uses Automake; a `Makefile.am' is typical but
+ not essential. Reported by Magnus Therning.
+ * tests/torture.at (autoreconf.): New banner.
+ (autoreconf and non-AC configure): Rename to `Non-Autoconf
+ AC_CONFIG_SUBDIRS'.
+ (autoreconf an empty directory): Rename to `Empty directory'.
+ (Unusual Automake input files): New test.
+
+2004-12-30 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (AT_CAPTURE_FILE): New macro.
+ (AT_SETUP): Clear AT_capture_files.
+ (_AT_CHECK): On failure, log each of AT_capture_files. Fix comment.
+ (AT_KEYWORDS): Fix comment typo.
+ * tests/autotest.at (AT_CHECK_AT): Use AT_CAPTURE_FILE.
+ * tests/local.at (AT_CHECK_CONFIGURE): Use AT_CAPTURE_FILE.
+ * doc/autoconf.texi (Writing testsuite.at): Document AT_CAPTURE_FILE.
+
+2004-12-29 Albert Chin-A-Young <china@thewrittenword.com>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH):
+ If the variable to set is already set, set ac_cv_path_$1
+ to the preset value so caller can assume ac_cv_path_$1
+ is available. (trivial change)
+
+2004-12-27 Noah Misch <noah@cs.caltech.edu>
+
+ * BUGS (Minor Problems): Warn about makefile limitations.
+ * Makefile.am: Find and update `INSTALL' in $(srcdir).
+ * man/Makefile.am: Find and update manual pages in $(srcdir).
+
+2004-12-24 Eric Blake <ebb9@byu.net>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Test candidate
+ shells in subshell, to avoid noise from ash. (trivial change)
+
+2004-12-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/autoconf.texi (Limitations of Builtins) <case>: Mention
+ problems with SunOS ksh and backslash escaping, Bourne shells and
+ closing brackets (both within character classes). Bug reported
+ against Libtool by Alexander Kurz <alexander.kurz@qsc.de>.
+ <read>: New entry. Mention non-availability of -r.
+
+2004-12-21 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_LINE): Don't add srcdir here, to
+ avoid cluttering displayed messages. Rather, prepend srcdir where
+ AT_LINE is used for log files.
+
+2004-12-21 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/status.m4: Quote ``$tmp'' in many places.
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Fix the comment, as traps are
+ no longer part of the macro, quote the occurrence of ``$tmp''.
+ * doc/autoconf.texi (Forbidden Patterns): Typo.
+
+2004-12-21 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Make sure the "ok" etc. are
+ separated from the test title by forcing a white space.
+
+2004-12-21 Akim Demaille <akim@epita.fr>
+
+ Enable Emacs navigation within testsuite.log files.
+
+ * lib/autotest/general.m4 (AT_CLEANUP): Add an hint for Emacs to
+ use the compilation mode.
+ (AT_LINE): Point to the srcdir.
+
+2004-12-19 Noah Misch <noah@cs.caltech.edu>
+
+ * tests/Makefile.am (installcheck-local): Use $(bindir).
+ (check-local, installcheck-local): Pass TESTSUITEFLAGS.
+ * doc/autoconf.texi (Making testsuite Scripts): Recommend the same
+ Makefile.am scheme Autoconf now uses.
+
+2004-12-18 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/m4sugar/m4sugar.m4 (m4_qlen, m4_qdelta): New macros.
+ * lib/autotest/general.m4 (AT_SETUP): Use m4_qdelta.
+
+2004-12-18 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (_AT_DECIDE_TRACEABLE): New macro.
+ (_AT_CHECK): Use it.
+ * lib/m4sugar/m4sh.m4 (AS_ESCAPE_FOR_EXPAND): Remove.
+ (AS_ESCAPE): Fix comment.
+ * tests/autotest.at: Adjust section banner comments.
+ (AT_CHECK_AT): Accept STATUS and STDERR.
+ (AT_CHECK_AT_TEST): Likewise.
+ (Invalid brace-enclosed parameter expansion)
+ (Multiline command from M4 expansion)
+ (Double-M4-quoted command): New tests.
+
+2004-12-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Update GNU FDL version from 1.1 to 1.2.
+
+2004-12-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_SUBST, AC_SUBST_FILES): Pass $1 to
+ m4_pattern_allow.
+ Suggested by Alexandre Duret-Lutz.
+ * doc/autoconf.texi (Setting Output Variables): Catch up.
+
+2004-12-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Fix comment.
+
+2004-12-17 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJ): We can use AC_SUBST/2,
+ remove the comment which said we cannot.
+
+2004-12-17 Stepan Kasal <kasal@ucw.cz>
+
+ Add a specialized check for resolv.h. Thanks to Gerrit P. Haase,
+ Reini Urban and Paul Eggert for reporting the dependencies.
+
+ * lib/autoconf/headers.m4 (AC_HEADER_RESOLV): New macro.
+ * doc/autoconf.texi (AC_HEADER_RESOLV): Document it.
+ (AC_HEADER_STAT): @cvindex{STAT_MACROS_BROKEN}, not @acindex.
+
+2004-12-17 Stepan Kasal <kasal@ucw.cz>
+
+ * bin/autoscan.in: Open autoscan.log only after ``parse_args'';
+ so that eg. ``autoscan --help'' doesn't truncate it.
+
+2004-12-15 Nicolas Joly <njoly@pasteur.fr>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Remove
+ generated conftest files.
+
+2004-12-13 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (_AT_CHECK) [--trace]: Do not enable shell
+ tracing on commands with possibly-escaped newlines.
+ * doc/autoconf.texi (Writing testsuite.at): Delete documentation of the
+ discontinued behavior and its implications.
+ * tests/autotest.at (BS-newline in command, ^BS-newline in command)
+ (BSx641-newline in command, BS-BS-newline in command)
+ (BSx640-newline in command, Newline-CODE-BS-newline in command)
+ (Single-quote-BS-newline in command)
+ (Single-quote-newline-BS-newline in command): New tests.
+
+2004-12-13 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_EXECUTABLE_P): Use test -f && test -x
+ on platforms where it works.
+ (_AS_TEST_PREPARE): Test for ``test -x''.
+ (_AS_BROKEN_TEST_PREPARE): Nuke.
+
+2004-12-13 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Move the trap commands ...
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): ... here;
+ give only 4-letter prefix to AS_TMPDIR, comment fixed.
+ * lib/autoconf/programs.m4 (_AC_PATH_PROG_FEATURE_CHECK): Don't
+ create the temporary directory.
+ (_AC_FEATURE_CHECK_LENGTH): Work in current directory.
+
+2004-12-12 Kelley Cook <kcook@gcc.gnu.org>
+
+ * bin/autoheader.in: Exit if no AC_CONFIG_HEADERS was found.
+ (trivial change)
+
+2004-12-12 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <expr (:)>: Typo.
+
+2004-12-11 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (_AT_CHECK) [--trace]: Rework a shell pattern
+ to avoid using a negated character class. Reported by Nicolas Joly.
+ * tests/local.at (AT_CHECK_SHELL_SYNTAX): Check for similar constructs.
+
+2004-12-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * man/Makefile.am (autoconf.1, autoheader.1, autom4te.1, autoreconf.1,
+ autoscan.1, autoupdate.1, ifnames.1, config.guess.1, config.sub.1):
+ Don't depend on .x file explicitly, since "make" does that for us.
+ Suggested by Stepan Kasal.
+
+ * bin/Makefile.am (MOSTLYCLEANFILES): Renamed from CLEANFILES.
+ Add *.tmp.
+ (autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate,
+ ifnames): Factor common code. And they said it couldn't be done!
+
+2004-12-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bin/.cvsignore: Add autoconf.in.
+ * tests/.cvsignore: Add wrapper.in.
+ * lib/autotest/general.m4: Escape '$' in case pattern.
+
+2004-12-09 Noah Misch <noah@cs.caltech.edu>
+
+ * man/Makefile.am (autoconf.1): Regenerate when `autoconf.as' changes.
+
+ * lib/autotest/general.m4 [--trace] (AT_INIT): Do not `set -v'.
+
+ * tests/autotest.at: New file.
+ * tests/suite.at: Include it.
+ * tests/Makefile.am: Distribute it.
+
+ * lib/autotest/general.m4 [--trace] (_AT_CHECK): Do not enable
+ shell tracing on a command that could contain multiple lines.
+ * doc/autoconf.text: Document that fact and its implications.
+ * lib/m4sugar/m4sh.m4 (AS_ESCAPE_FOR_EXPAND): New macro.
+ * tests/autotest.at (Multiline backquote command substitution,
+ Multiline parameter expansion, Literal multiline command,
+ Multiline parenthetical command substitution): Remove XFAIL.
+
+2004-12-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Libraries): Clarify problems with AC_CHECK_LIB
+ and suggest AC_SEARCH_LIBS. Suggested by Noah Misch and Stepan Kasal.
+
+2004-12-08 Noah Misch <noah@cs.caltech.edu>
+
+ * configure.ac (test suite): Cease to generate wrapper scripts.
+ * configure: Regenerate.
+ * lib/freeze.mk (MY_AUTOM4TE): Wrap the uninstalled autom4te directly.
+ (m4f_dependencies): Adjust accordingly.
+ * tests/Makefile.am (Wrappers): Generate wrapper scripts.
+ (wrapper.in): Generate it in the build directory.
+ (MAINTAINERCLEANFILES): Delete wrapper.in.
+ (CLEANFILES): Add wrapper.in.
+ * tests/wrapper.as: Move AS_INIT to very top, preserving copyright in
+ the output. Replace each $as_me with a @wrap_program@.
+ * tests/wrapper.in: Delete it; we always build it.
+
+ * bin/Makefile.am (autoconf.in): Generate it in the build directory.
+ (EXTRA_DIST): Remove autoconf.in.
+ (CLEANFILES): Add autoconf.in.
+ (autoconf): Find autoconf.in in the build directory.
+ * bin/autoconf.in: Delete it; we always build it.
+
+2004-12-08 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/autotest/general.m4 (AT_INIT): Replace a `tr' with a `sed'. Join
+ PATH members so as to not prepend an empty element. Move a comment.
+ * Makefile.am (SUBDIRS): Build in `tests' last.
+ * tests/Makefile.am (installcheck-local): Add check-local dependencies.
+
+2004-12-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/mdate-sh: Don't use "set - x`$ls_command /`", as zsh mishandles
+ the spaces inside $ls_command. Problem reported by Loulou Pouchet in
+ <http://lists.gnu.org/archive/html/autoconf/2004-12/msg00074.html>.
+ Don't use "set - x"; plain "set x" is enough, and simplifies debugging.
+
+2004-12-07 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT): Fix typo in previous
+ patch: extra "-l"s.
+
+2004-12-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT): Check libc before
+ looking elsewhere for getmntent. Problem reported by Mark D. Baushke.
+ * doc/autoconf.texi (Particular Functions): Mention new behavior.
+
+2004-12-03 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/general.m4 (AC_DEFINE, AC_DEFINE_UNQUOTED): Factor
+ out the common code to ...
+ (_AC_DEFINE_Q): ... a new macro; simplify the condition about the
+ value of the #define--default to 1, iff the macro was called
+ with exactly one parameter.
+
+2004-12-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MEMCMP): Use
+ "char c = '\200';" rather than "char c = 0x80;" as the
+ latter doesn't conform to the strict C standard due to
+ overflow on signed char hosts.
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_STDC): Prefer -qlanglvl=extc89
+ to -qlanglvl=ansi. We don't want to disable extensions.
+
+2004-11-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Programs): @code{$PATH} -> @env{PATH}.
+ (Using Autotest, testsuite Scripts, Writing testsuite.at):
+ Reword slightly to avoid some English-language problems noted
+ by Ralf Wildenhues in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2004-11/msg00027.html
+
+2004-11-29 Stepan Kasal <kasal@ucw.cz>
+
+ * NEWS: Add ^L above each release.
+
+2004-11-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix documentation problems reported by Russ Boylan in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2004-11/msg00056.html>,
+ along with some nearby cruft.
+ * doc/autoconf.texi (Libtool): Libtool can be used without
+ Automake (not without Autoconf).
+ (Introduction): Mention lists.gnu.org.
+ * BUGS: Don't mention bugs.gnu.org.
+ Remove mention of ancient libtool compatibility problem.
+ * NEWS: Mention that bugs.gnu.org is kaput.
+ * README: Likewise. Mention where mailing list archives can be found.
+
+2004-11-28 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): A typo in the comment.
+
+2004-11-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Pretty Help Strings): Go back to
+ single-quoting assignments to cache variables.
+
+2004-11-23 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Pretty Help Strings): Fix quoting issues
+ with the examples; fix the bug in MY_ARG_WITH example reported
+ by Alexandre Duret-Lutz.
+ * lib/autoconf/general.m4 (AC_ARG_ENABLE, AC_ARG_ENABLE): Enable
+ expansion of $1 in the comment emitted to configure.
+
+2004-11-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Pretty Help Strings): Fix typo
+ in my editing of the previous patch. Problem reported
+ by Alexandre Duret-Lutz.
+
+2004-11-22 Stepan Kasal <kasal@ucw.cz>
+
+ * doc/autoconf.texi (Autoconf Language): Explain that
+ ``descriptions'' may not be double quotes.
+ (Quotation Rule Of Thumb): Likewise.
+ (Pretty Help Strings): Likewise; remove the wrong comment;
+ simplify the examples and improve their quoting.
+
+2004-11-13 Stepan Kasal <kasal@ucw.cz>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Don't check
+ the $1_found variable, don't test whether the file is executable;
+ Both things are checked ...
+ (_AC_PATH_PROG_FEATURE_CHECK): ... here; AS_EXECUTABLE_P replaces
+ the former ``test -f''.
+ * lib/m4sugar/m4sh.m4 (_AS_TEST_PREPARE): Fix a typo.
+
+2004-11-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Avoid cp -r;
+ use cp -R instead.
+
+2004-11-10 Derek R. Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Note `cp -r'
+ limitations. Reorder paragraphs for clarity.
+
+2004-10-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Standardize spelling of "Posix" (as opposed
+ to "POSIX" or "@acronym{POSIX}"), and similarly for "DOS
+ variants", "Unix", and some related minor wording fixups.
+
+ (Shellology, Special Shell Variables): Document that the Zsh
+ problem with NULLCMD was fixed in zsh 3.1.6-dev-18. Thanks
+ to Alexandre Duret-Lutz for this info.
+
+2004-10-10 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (One-Shot Macros): New node.
+
+2004-09-28 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Function Portability): Fix misdescription
+ of putenv. Problem reported by Michael Wardle.
+
+2004-09-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (auindex): New macro.
+ (AU_DEFUN): Use it to fix the bug when the index contained AC_AU_DEFUN.
+ Problem reported by Stepan Kasal.
+
+2004-09-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix problems reported by Andreas Buening in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2004-04/msg00004.html
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Set SHELL=/bin/sh
+ in test makefile.
+ * lib/autotest/general.m4 (AT_INIT): Don't assume /dev/null is
+ readable; it's not true in OS/2-emx.
+
+2004-09-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): If xmkmf returns
+ "/usr/include", clear ac_x_includes instead of leaving it as "no"
+ (trivial change). Problem and patch reported by Andrew Church in:
+ http://lists.gnu.org/archive/html/bug-autoconf/2004-04/msg00016.html
+
+2004-09-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi: Give AC_DEFINE and AC_DEFINE_UNQUOTED
+ three args in examples. Problem reported by Frederik Fouvry in:
+ http://lists.gnu.org/archive/html/bug-autoconf/2004-09/msg00017.html
+ Also, fix some minor spacing and punctuation bugs.
+
+2004-09-02 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): Swap "cd" and
+ "case" to restore ordering.
+ Reported by Stepan Kasal.
+
+2004-08-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Minor typos and stylos.
+
+2004-08-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ * configure.ac (AC_INIT): Bump to 2.59c.
+
+2004-08-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Version 2.59b.
+
+ * README: Add advice about m4 1.4.2.
+
+ * Makefile.cfg (wget_files): Remove config.guess, config.sub,
+ texinfo.tex for now (done by hand now).
+ * Makefile.maint (wget_files, cvs_files):
+ Remove ansi2knr.c; nobody uses it.
+ (ansi2knr.c-url_prefix): Remove.
+ (cvs-update): Fix test for failure. I don't know why it ever
+ worked...
+
+ * doc/autoconf.texi: Update URLs, some of which went stale.
+ Use @uref rather than @href.
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Have configure
+ handle "--" as per POSIX. Suggested by Paul Pogonyshev.
+
+ * config/config.guess, config/config.sub, config/elisp-comp,
+ config/install-sh, config/mkinstalldirs, config/texinfo.tex,
+ doc/fdl.texi, doc/standards.texi: Sync with master copy.
+
+ * NEWS, TODO, configure.ac, bin/autoscan.in,
+ bin/autoupdate.in, bin/ifnames.in, doc/autoconf.texi,
+ doc/install.texi, lib/Autom4te/Configure_ac.pm,
+ lib/Autom4te/FileUtils.pm, lib/autoconf/general.m4,
+ lib/autoconf/programs.m4, lib/autoconf/status.m4,
+ lib/autotest/general.m4, lib/m4sugar/m4sh.m4,
+ lib/m4sugar/m4sugar.m4, tests/local.at, tests/m4sh.at,
+ tests/tools.at, tests/torture.at:
+ Use "file name" rather than "filename" or "path",
+ to be consistent with the terminology of the GNU coding standards.
+
+2004-08-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_LANG_BOOL_COMPILE_TRY(C),
+ AC_C_LONG_DOUBLE): Undo 2004-06-04 change, as it didn't work with
+ HP-UX 11.23 cc/aCC or Tru64 4.0 cc. Problem reported by Noah Misch in
+ <http://lists.gnu.org/archive/html/autoconf/2004-07/msg00004.html>.
+
+ More fixes to support spaces in the name of the build directory.
+ This isn't a complete fix but it's an improvement.
+
+ * bin/autoconf.as (autom4te_options): New var.
+ Use it instead of appending to AUTOM4TE, so that we can allow
+ spaces in the build directory's absolute name.
+ * bin/autoheader.in ($autoconf): Allow spaces in file names.
+ * lib/autotest/general.m4 (AT_INIT, AT_CLEANUP, _AT_CHECK,
+ AT_CHECK_NOESCAPE): Likewise.
+ * tests/wrapper.as (testdir, AUTOM4TE_CFG, autom4te_perllibdir,
+ main program): Likewise.
+
+2004-08-18 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Quote $ac_popdir uses.
+ From Ralf Corsepius in:
+ http://lists.gnu.org/archive/html/autoconf-patches/2004-08/msg00014.html
+
+2004-08-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Function Portability): Document isinf and
+ and isnan. From a suggestion by Kevin Ryde.
+
+ * lib/Autom4te/General.pm (END): Return correct exit status even
+ if unlink succeeds and sets $?. Needed with Solaris 8's perl 5.00503.
+
+2004-08-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/torture.at (Deep Package): Use configure.in, not configure.ac,
+ for compatibility with Automake 1.4. Reported by J C Fitzgerald in
+ <http://lists.gnu.org/archive/html/bug-autoconf/2003-08/msg00051.html>.
+
+2004-08-04 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/general.m4 (AC_REQUIRE_AUX_FILE): New empty macro.
+ (AC_CANONICAL_BUILD): Call it to require config.sub and config.guess.
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Likewise for install-sh.
+ * doc/autoconf.texi (Input): Document AC_REQUIRE_AUX_FILE.
+ * lib/autom4te.in (Automake-preselections): Preselect
+ AC_REQUIRE_AUX_FILE. Automake 1.10 will trace it.
+
+2004-08-02 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect
+ AC_CANONICAL_BUILD and AC_CANONICAL_TARGET. Automake 1.9.1 will
+ trace them.
+
+2004-07-29 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): Set BIN_SH, for
+ Tru64.
+ * doc/autoconf.texi (Shellology): Mention BIN_SH.
+ Document problem with "`""`" in pdksh POSIX mode.
+
+2004-07-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): Use "set -o posix"
+ with pdksh, too. Problem reported by Patrick Welche via
+ Gary V. Vaughan.
+ * doc/autoconf.texi (Shellology): Note that set -o posix is
+ useful for pkdsh, too.
+
+2004-06-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Require
+ _AS_UNSET_PREPARE, so that we can use $as_unset directly.
+ Don't fail if ENV or BASH_ENV is readonly.
+ (AS_SHELL_SANITIZE): Don't fail if ENV, MAIL, MAILPATH, LC_ALL,
+ etc. are read only. Problem reported by Ludovic Courtes.
+
+2004-06-23 Noah Misch <noah@cs.caltech.edu>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE): If the shell is
+ zsh, disable GLOB_SUBST to avoid backslash handling problems.
+ (trivial change)
+
+2004-06-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (File System Conventions): Warn about
+ names like "aux". Problem reported by Eric Blake.
+
+ * lib/autoconf/c.m4 (AC_LANG_BOOL_COMPILE_TRY (C)): Use division
+ by zero instead of array size, so that we can use any arithmetic
+ constant expression (instead of requiring an integer constant
+ expression). This allows us to test expressions like DBL_MAX <
+ LDBL_MAX, which didn't conform to the C standard using the old
+ method.
+ (AC_C_LONG_DOUBLE): Put back in the tests for LDBL_MAX and LDBL_EPSILON,
+ now that we can do floating-point tests at compile time.
+
+2004-06-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/c.m4 (AC_C_LONG_DOUBLE): Don't check LDBL_MAX
+ and LDBL_EPSILON, as the resulting expression isn't an
+ integer constant expression and violates the C standard.
+ Problem reported by Nelson H. F. Beebe. Also, check
+ for "L" suffix, and check that long double doesn't have
+ worse range or precision than double, that mixed-mode
+ arithmetic doesn't generate a diagnostic, that double
+ constants fit in long double.
+
+2004-06-03 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Add notes on free(NULL),
+ malloc(0) and realloc(NULL,size).
+
+ * doc/autoconf.texi (Shell Substitutions): Spelling error reported by
+ Bob Proulx.
+
+2004-05-31 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lib/autoconf/headers.m4 (HAVE_STDBOOL_H): Detect _Bool bug
+ in HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. Problem reported
+ by Jim Meyering.
+
+2004-05-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Builtins): Mention that ! COMMAND
+ can be rewritten using if-then-else. Suggested by Bruno Haible.
+
+2004-05-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (testsuite Scripts): Fix typo.
+ Problem reported by Stepan Kasal.
+
+2004-05-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * tests/Makefile.am (autoconfdir): Fix to match comment (trivial
+ change). Patch reported by Ralf Wildenhues in
+ <http://mail.gnu.org/archive/html/bug-autoconf/2004-05/msg00092.html>.
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MBRTOWC): Don't assume that a
+ function F exists if the compiler and linker let you compile an
+ expression like (F != 0). Recent versions of GCC optimize away
+ the reference to F in that case, since every function address must
+ be nonzero, so the link succeeds even if F does not exist.
+ Problem reported by Manu in
+ <http://mail.gnu.org/archive/html/bug-gnu-utils/2004-05/msg00060.html>.
+
+ * doc/autoconf.texi (Systemology): Standardize on the spelling of
+ "Unix". Many uses changed.
+ (Limitations of Builtins): Explain better why the ! command isn't
+ portable.
+
+2004-05-22 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect
+ LT_SUPPORTED_TAG in lieu of AC_LIBTOOL_TAGS.
+
+2004-05-19 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Add strerror_r, cross
+ referencing AC_FUNC_STRERROR_R.
+
+ * doc/autoconf.texi (Particular Functions): In AC_FUNC_CLOSEDIR_VOID,
+ note pessimistic assumption when cross compiling.
+
+2004-05-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Limitations of Make): Note that BSD make
+ (until 2004) invoked subcommands with sh -e, contra POSIX.
+ Reported by Kevin Ryde.
+
+2004-05-10 Eric Sunshine <sunshine@sunshineco.com>
+
+ * programs.m4 (_AC_PROG_GREP): Fixed bug where PATH argument handed to
+ _AC_PATH_PROG_FEATURE_CHECK contained leading whitespace (i.e.
+ " $PATH:/usr/xpg4/bin"). This resulted in bogus tests, such as
+ `test -f " /usr/bin/grep"', which _always_ failed.
+ (AC_PROG_SED): Ditto bogus PATH fix.
+ * autoconf.texi (AC_PROG_GREP): Properly document that this macro
+ requires that grep correctly supports _multiple_ `-e' options, rather
+ than stating only that grep should accept `-e'.
+
+2004-05-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port to C99, which requires that 'exit' be declared.
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Use AC_INCLUDES_DEFAULT
+ to ensure that stdlib.h is included.
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA, AC_FUNC_SETPGRP,
+ AC_FUNC_STRTOD, AC_FUNC_SETVBUF_REVERSED, AC_FUNC_FORK, _AC_FUNC_FORK,
+ _AC_FUNC_VFORK, AC_FUNC_WAIT3): Likewise.
+ * lib/autoconf/specific.m4 (AC_SYS_RESTARTABLE_SYSCALLS): Likewise.
+ * lib/autoconf/types.m4 (AC_TYPE_GETGROUPS): Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_STDC): Include <stdlib.h>
+ when using 'exit' in a test; C99 requires that 'exit' be declared.
+
+2004-05-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc/autoconf.texi (Particular Programs): AC_PROG_GREP
+ now prefers 'grep' implementations that accept -e.
+ (Limitations of Usual Tools): Describe problems of traditional
+ egrep and fgrep with long input lines, and of traditional grep
+ with -e.
+ * lib/autoconf/programs.m4 (AC_PROG_GREP): Check for -e, too.
+ (_AC_PROG_GREP): Assume 3rd arg is properly quoted for the shell.
+ All callers changed. Append /usr/xpg4/bin to the PATH, for
+ Solaris.
+ (_AC_FEATURE_CHECK_LENGTH): Discard stderr, so we don't bother
+ the user with complaints about multiple -e options.
+ * tests/local.at (AC_STATE_SAVE): Use $GREP, not grep.
+ Define it with AC_PROG_GREP.
+ * configure.ac (AC_PROG_GREP): Add.
+ * lib/freeze.mk (GREP): New macro.
+
+2004-05-02 Eric Sunshine <sunshine@sunshineco.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_DETECT_BETTER_SHELL): Consult $SHELL as
+ a possible candidate only after all others fail, rather than
+ consulting it first. This improves backward compatibility by
+ better reflecting the way shell selection occurred in previous
+ versions of Autoconf, and should help to avoid triggering latent
+ problems in other packages, such as the one in Automake where zsh
+ is not handled robustly:
+ http://mail.gnu.org/archive/html/automake/2004-04/msg00095.html
+ Although it is not Autoconf's responsibility to work around
+ problems in Automake, it nevertheless makes sense to avoid
+ introducing unnecessary incompatibilites.
+
+2004-04-22 Albert Chin-A-Young <china@thewrittenword.com>,
+ Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Don't guess
+ how deeply nested we are when a suitable tool is found, set the
+ ac_path_TOOL_found flag.
+ (_AC_PATH_PROG_FEATURE_CHECK): Encapsulate knowledge of how deeply
+ nested we are in this macro. Break out of all 3 nested loops if
+ ac_path_TOOL_found is set.
+
+2004-04-21 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Break out
+ of the _AS_PATH_WALK loop too if GNU flavor is found.
+
+2004-04-21 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Make): Update documentation
+ for `$<'. New entry `Long lines', based on a report from Simon
+ Josefsson. Augment the documentation for SHELL = @SHELL@ with a
+ paragraph about DJGPP, based on a mail from Richard Dawe.
+
+2004-04-20 Paul Eggert <eggert@twinsun.com>
+
+ * tests/c.at (C keywords): Don't assume that GCC supports
+ "restrict" and "inline", as sufficiently-old GCC versions do not
+ (also, GCC configured to be in pedantic C89 mode does not).
+ Problem reported by Sumit Pandya in:
+ http://mail.gnu.org/archive/html/autoconf/2004-04/msg00092.html
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_G, _AC_PROG_CXX_G): Don't
+ consider -g to work if it generates warnings when plain compiles
+ don't. Problem reported by Braden McDaniel in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2003-07/msg00014.html
+
+ * doc/autoconf.texi (Slashes): New section, to document a problem
+ reported by Jim Meyering in:
+ http://mail.gnu.org/archive/html/bug-coreutils/2004-02/msg00060.html
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Remove potential
+ linker output files before linking, to work around IRIX 6 linker bug.
+ Problem reported by Rainer Orth in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2004-02/msg00007.html
+
+2004-04-20 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/programs.m4 (_AC_FEATURE_CHECK_LENGTH): Make the
+ best tool so far counter rely on the tool path variable name to
+ avoid checks for one tool being affected by the results of running
+ the length check on a previous tool.
+
+ * lib/autoconf/programs.m4 (_AC_PROG_GREP): Take an additional
+ match expression argument, as different greps have different
+ regular expression flavours.
+ (AC_PROG_FGREP): Pass 'FGREP'. fgrep treats all match chars as
+ literals.
+ (AC_PROG_EGREP): Pass 'EGREP$'.
+ (AC_PROG_GREP): Pass 'GREP$'.
+
+2004-04-20 Albert Chin-A-Young <china@thewrittenword.com>
+
+ * lib/autoconf/programs.m4 (AC_PROG_GREP): Cache variable
+ is `ac_cv_path_GREP', not `oc_cv_path_GREP'.
+
+2004-03-29 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Particular Headers, Particular Types, Generic
+ Types, Specific Compiler Characteristics, System Services,
+ Obsolete Macros): Use 'long int', 'short int', 'unsigned int'
+ etc. consistently instead of 'long', 'short', 'unsigned' etc.
+ * lib/autoconf/c.m4 (AC_LANG_INT_SAVE(C), AC_C_BIGENDIAN): Likewise.
+ * lib/autoconf/functions.m4 (AC_FUNC_MMAP, AC_FUNC_SELECT_ARGTYPES):
+ Likewise.
+ * lib/autoconf/headers.m4 (AC_HEADER_SYS_WAIT): Likewise.
+ * lib/autoconf/types.m4 (AC_TYPE_GETGROUPS, AC_TYPE_SIZE_T,
+ AC_TYPE_OFF_T): Likewise.
+ * tests/semantics.at (AC_CHECK_TYPES: backward compatibility):
+ Likewise.
+
+ * tests/foreign.at (Libtool): Create an empty aclocal.m4, to
+ pacify libtool 1.5.2. Fix quoting problems in sed command.
+
+2004-03-28 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Particular Structures): AC_STRUCT_TIMEZONE
+ now defines HAVE_DECL_TZNAME if it is declared, when
+ HAVE_STRUCT_TM_TM_ZONE is not defined.
+ * lib/autoconf/types.m4 (AC_STRUCT_TIMEZONE): Implement this.
+ Do not assume atoi. Rely on HAVE_DECL_TZNAME when testing
+ for HAVE_TZNAME.
+
+2004-03-28 Steven G. Johnson <stevenj@fftw.org>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Corrected
+ superfluous backslashing of quotes (") in sed expressions;
+ thanks to Paul Eggert.
+
+2004-03-26 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): new name of Intel
+ Fortran compiler is ifort, also added pghpf; thanks to Nelson
+ H. F. Beebe for the bug report.
+
+2004-03-26 Steven G. Johnson <stevenj@fftw.org>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): fix for
+ quoted -cmdline argument in Portland Group compiler (bug
+ reported by Jeffrey J. Barteet).
+
+2004-03-25 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Specifying Names): Move cross_compiling ovindex to
+ (Run Time): ... here, where it's now mentioned.
+
+2004-03-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (autom4te Invocation): Language Autoconf
+ inherits from language Autoconf-without-aclocal-m4.
+ (Customizing autom4te): Adjust example; the cache must now be
+ disabled for language Autoconf-without-aclocal-m4.
+
+2004-03-16 Paolo Bonzini <bonzini@gnu.org>
+ Nathanael Nerode <neroden@twcny.rr.com>
+
+ * lib/autoconf/programs.m4 (AC_PATH_TOOL, AC_CHECK_TOOL,
+ AC_CHECK_TOOLS): Warn if a cross-tool is found without
+ a prefix.
+ (AC_PATH_TARGET_TOOL, AC_CHECK_TARGET_TOOL,
+ AC_CHECK_TARGET_TOOLS): New macros.
+ * doc/autoconf.texi (Generic Programs): Document
+ (AC_PATH_TARGET_TOOL, AC_CHECK_TARGET_TOOL,
+ AC_CHECK_TARGET_TOOLS, and warn for future changes
+ in the behavior of AC_PATH_TOOL, AC_CHECK_TOOL and
+ AC_CHECK_TOOLS.
+ (Specifying Names): Document the reason for these future
+ behavioral changes.
+ * tests/mktests.sh: Do not generate tests for the
+ new macros.
+ * NEWS: Document these changes.
+
+ * doc/autoconf.texi: Avoid macros with unbraced arguments,
+ they make TeX hang up.
+
+2004-03-15 Paul Eggert <eggert@bogus.example.com>
+
+ * NEWS: New macro AC_CHECK_ALIGNOF.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Document it.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF): Use long int rather than
+ int; avoid "a `$1'" since this isn't grammatical if $1 begins with a
+ vowel.
+ (AC_CHECK_ALIGNOF): New macro.
+ * tests/mktests.sh (ac_exclude_list): Exclude AC_CHECK_ALIGNOF.
+ * tests/semantics.at (AC_CHECK_ALIGNOF): Add tests similar to
+ those for sizeof.
+
+2004-03-03 Paul Eggert <eggert@twinsun.com>
+
+ * bin/Makefile.am (edit): Don't use $< in a context where
+ POSIX doesn't require support for it. Use $@.in instead.
+ Problem reported by Anthony N. Frasso in
+ <http://mail.gnu.org/archive/html/autoconf/2004-03/msg00008.html>.
+ * bin/autoscan.in, bin/autoupdate.in: Add @configure_input@ comment.
+
+2004-02-23 Gary V. Vaughan <gary@gnu.org>
+
+ * bin/autoreconf.in (autoreconf_current_directory): Recognize LT_INIT
+ from the next generation of Libtool.
+ * lib/autom4te.in (Autoreconf-preselections): Ditto.
+
+2004-02-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <mkdir>: `mkdir -p'
+ is not always thread-safe. Report from Nathanael Nerode.
+
+2004-02-18 Paul Eggert <eggert@twinsun.com>
+
+ Fix a dependencies problem, stemming from a Autoconf 2.59 build
+ problem on QNX reported by Stephen Rasku in
+ <http://mail.gnu.org/archive/html/bug-autoconf/2004-02/msg00066.html>.
+
+ * bin/Makefile.am ($(srcdir)/autoconf.in): Depend on
+ $(m4sh_m4f_dependencies); this removes a FIXME.
+ * tests/Makefile.am ($(srcdir)/wrapper.in): Likewise.
+ (MAINTAINERCLEANFILES): Split into pieces,
+ one per related section. Add $(srcdir)/wrapper.in.
+
+2004-02-09 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Setting Output Variables): Emphasize that
+ AC_SUBST provides no portable way to escape literal newlines.
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Ignore all
+ flags of the form -lcrt*.o, not just -lcrt[01].o and -lcrtbegin.o.
+ Darwin uses -lcrt2.o and there's little point to cataloging all
+ the system variants. Partial fix reported by Andreas Waechter in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2004-02/msg00006.html
+ for bug reported by Nelson H. F. Beebe in:
+ http://mail.gnu.org/archive/html/bug-autoconf/2003-12/msg00090.html
+
+2004-02-04 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (AU_DEFUN): Fix English,
+ suggested by Paul Eggert.
+ * lib/autoconf/autoupdate.m4: Correct reference to
+ acobsolete.m4, suggested by Alexandre Duret-Lutz.
+
+2004-02-02 Paolo Bonzini <bonzini@gnu.org>
+
+ * bin/autoupdate.in: Define __file__ so that warnings
+ refer to the correct file.
+ * doc/autoconf.texi (AU_DEFUN): Describe more correctly
+ the behavior of the third argument.
+ * lib/autoconf/autoupdate.m4 (AU_DEFUN): Describe more
+ correctly the behavior of the third argument. Document
+ what the three macros that AU_DEFUN defines do. Fix
+ warning message when the third argument includes $0
+ (reported by Alexandre Duret-Lutz).
+
+2004-01-30 Paolo Bonzini <bonzini@gnu.org>
+ Eric Sunshine <sunshine@sunshineco.com>
+ Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (M4SH-SANITIZE): New diversion.
+ (AS_INIT): Output shell initialization there. Removed optional
+ parameter. Expand _AS_SHELL_FN_SPY.
+ (AS_INIT_WITH_SHELL_FN): Removed.
+ (_AS_SHELL_FN_SPY): New macro.
+ (AS_DETECT_REQUIRED, AS_DETECT_SUGGESTED): New
+ macros.
+ (AS_SHELL_SANITIZE): Remove loop to find better shell
+ and documentation for the parameter.
+ (_AS_DETECT_BETTER_SHELL): Move it here.
+ (_AS_SHELL_FN_WORK): Remove shell invocation, reformat.
+ (_AS_RUN): Move it here, support testing with eval.
+ (AS_REQUIRE_SHELL_FN): Require shell functions when
+ it is used.
+ (_AS_LINENO_WORKS): Put around braces, we do not
+ trigger the bash bug anymore.
+ * lib/autotest/general.m4: Document M4SH-SANITIZE, do not
+ use AS_INIT_WITH_SHELL_FN.
+ * bin/autoconf.in, tests/wrapper.in: Regenerated.
+
+2004-01-30 Paolo Bonzini <bonzini@gnu.org>
+
+ * bin/autoupdate.in: Trace AU_DEFINE instead of AU_DEFUN.
+ * doc/autoconf.texi: Don't say that the third parameter
+ is broken.
+ * lib/autoconf/autoupdate.m4 (AU_DEFINE): New dummy macro.
+ (AU_DEFUN): Honor the third parameter, create autoupdate
+ macros with AU_DEFINE.
+ * lib/autoconf/headers.m4 (AC_USG, AC_MEMORY_H,
+ AC_DIR_HEADER): Use AU_DEFUN's third parameter.
+ * lib/autoconf/lang.m4 (AC_LANG_SAVE): Likewise.
+ * lib/autoconf/programs.m4 (AC_RSH): Likewise.
+ * lib/autoconf/specific.m4 (AC_HAVE_POUNDBANG,
+ AC_ARG_ARRAY, AC_CYGWIN, AC_EMXOS2, AC_MINGW32,
+ AC_XENIX_DIR): Likewise.
+ * lib/autoconf/types.m4 (AC_INT_16_BITS, AC_LONG_64_BITS,
+ AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV): Likewise.
+ * lib/autoconf/status.m4: Remove FIXME.
+ * tests/local.at (AT_CHECK_AU_MACRO): Ignore stderr, check
+ that the macro is not present anymore in the updated
+ configure.ac.
+ * tests/tools.at (autoupdate AC_LINK_FILES): Ignore stderr
+ of autoupdate.
+
+2004-01-28 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Add 2004 to
+ copyright years.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Add 1992 thorugh
+ 2003 (except 1997) to the list of copyright years. This undoes
+ the 2003-05-22 change, which removed the older years from the list.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Update copyright date to 2004.
+
+2004-01-27 Gary V. Vaughan <gary@gnu.org>
+ Albert Chin-A-Young <china@thewrittenword.com>
+
+ * lib/autoconf/programs.m4 (AC_PROG_GREP): New macro to test for a
+ grep or ggrep program in PATH that accepts as long lines as
+ possible.
+ * lib/autoconf/programs.m4 (_AC_PROG_GREP): Factor out the core of
+ AC_PROG_GREP.
+ (AC_PROG_EGREP, AC_PROG_FGREP): Use it to find best available
+ egrep and fgrep respectively if $GREP -E/-F don't work.
+ (_AC_PATH_PROG_FEATURE_CHECK): Factor out the common core of
+ _AC_PROG_GREP, and AC_PROG_SED.
+ (_AC_FEATURE_CHECK_LENGTH): New helper macro for finding the
+ longest input length accepted by a command.
+ (AC_PROG_SED): Use it.
+ * doc/autoconf.texi (Particular Programs): Document the changes.
+ * NEWS: Updated.
+
+2004-01-27 Paul Eggert <eggert@twinsun.com>
+
+ * bin/autoconf.as ($version): Update copyright from 2003 to 2004.
+ * bin/autoheader.in, bin/autom4te.in, bin/autoreconf.in,
+ bin/autoscan.in, bin/autoupdate.in, bin/ifnames.in: Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_COPYRIGHT): Likewise.
+
+ * Makefile.in, aclocal.m4, configure, bin/Makefile.in,
+ bin/autoconf.in, config/Makefile.in, config/config.guess,
+ config/config.sub, config/install-sh, config/mdate-sh,
+ config/mkinstalldirs, config/texinfo.tex, doc/Makefile.in,
+ lib/Makefile.in, lib/Autom4te/Makefile.in,
+ lib/autoconf/Makefile.in, lib/autoscan/Makefile.in,
+ lib/autotest/Makefile.in, lib/emacs/Makefile.in,
+ lib/m4sugar/Makefile.in, man/Makefile.in, man/autoconf.1,
+ man/autoheader.1, man/autom4te.1, man/autoreconf.1,
+ man/autoscan.1, man/autoupdate.1, man/config.guess.1,
+ man/config.sub.1, man/ifnames.1, tests/Makefile.in,
+ tests/acc.at, tests/acfortran.at, tests/acfunctions.at,
+ tests/acgeneral.at, tests/acheaders.at, tests/aclang.at,
+ tests/aclibs.at, tests/acspecific.at, tests/acstatus.at,
+ tests/actypes.at: Regenerate and/or sync with original
+ sources.
+
+2004-01-26 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Default Includes): Include <stdint.h> even if
+ HAVE_INTTYPES_H is defined. This is needed on Tru64 5.1b with
+ Compac C V6.5-207 (dtk), which defines uintmax_t in <stdint.h> but
+ not <inttypes.h>. Problem reported by Tim Mooney in
+ <http://mail.gnu.org/archive/html/bug-coreutils/2004-01/msg00147.html>.
+ * lib/autoconf/headers.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS):
+ Likewise.
+
+ * lib/autoconf/programs.m4 (AC_PROG_SED): Use diff, not sed;
+ otherwise "make check" fails because it forbids cmp (I guess
+ because cmp treats files as binary on DOS-like systems).
+
+ * tests/mktests.sh: Update copyright date to 2004, since some tests
+ have changed in 2004.
+
+2004-01-23 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/programs.m4 (AC_PROG_SED): New macro to test for a
+ non-truncating sed or gsed program in PATH.
+ * tests/acprograms.at: Add it.
+ * doc/autoconf.texi (Particular Programs): Document it.
+ * NEWS: Updated.
+
+2004-01-15 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_STDC): Try -std, not -std1, since
+ -std1 disables some useful extensions on Tru64. Problem reported
+ by N. Lichtmaier in
+ <http://mail.gnu.org/archive/html/autoconf/2004-01/msg00100.html>.
+
+2004-01-14 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Programming in M4sh): Document that
+ AS_MKDIR_P succeeds if the destination is a symbolic link
+ to an existing directory.
+ (Limitations of Usual Tools): Note that mkdir -p might not
+ succeed on symlinks to directories.
+
+2004-01-13 Paul Hilfinger <hilfinger@CS.Berkeley.EDU>
+
+ * lib/autoconf/autoupdate.m4 (AU_DEFUN): Grammar fix in comment.
+ * bin/autoheader.in: Grammar fix in message.
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P):
+ Test for dir before calling mkdir -p. (trivial changes)
+
+2004-01-13 Eric Blake <ebb9@byu.net>
+
+ * doc/autoconf.texi (Obsolete Macros): In AC_TRY_COMPILE and
+ AC_TRY_LINK, s/AC_LANG_SOURCE/AC_LANG_PROGRAM/. (trivial change)
+
+2004-01-10 Jim Meyering <jim@meyering.net>
+
+ * doc/autoconf.texi (Running the Preprocessor): Correct grammar.
+
+2004-01-09 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/general.m4: Fix bug: AC_CHECK_SIZEOF evokes a warning
+ with `autoconf -Wall,error'. Bug reported by Eric Blake in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2004-01/msg00000.html
+ (_AC_COMPUTE_INT_COMPILE): Invoke _AC_COMPILE_IFELSE, not
+ AC_COMPILE_IFELSE, since we now assume our caller invokes
+ AC_LANG_COMPILER_REQUIRE, for symmetry with _AC_COMPUTE_INT_RUN.
+ (_AC_COMPUTE_INT_RUN): Likewise, for _AC_RUN_IFELSE instead
+ of AC_RUN_IFELSE; this avoids the warning mentioned above.
+ (_AC_COMPUTE_INT): Invoke AC_LANG_COMPILER_REQUIRE.
+
+2004-01-07 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJS_NORMALIZE): Avoid \$ inside
+ `"'...'"`, as it's confusing (and I suspect it may not work on
+ some platforms). The code was incorrect anyway, as it assumed
+ that \$ evaluated to itself in that context. Reported by
+ Alexandre Duret-Lutz.
+
+2004-01-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect AC_LIBTOOL_TAGS
+ and _LT_AC_TAGCONFIG.
+
+2004-01-06 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (One Macro Call): Fix an incorrect
+ example, and add more examples. Reported by Eric Sunshine.
+
+2004-01-05 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ Remove warning against "rm -fr" introduced yesterday; it
+ was a false alarm.
+
+ * bin/Makefile.am (autoconf, autoheader, autom4te, autoreconf,
+ autoscan, autoupdate, ifnames): Don't use chmod -w.
+ * lib/Makefile.am (autom4te.cfg): Likewise.
+ * doc/autoconf.texi (Limitations of Usual Tools): Warn against
+ "chmod -w".
+
+2004-01-04 Paul Eggert <eggert@twinsun.com>
+ Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Speed up sed scripts
+ by doing lineno substitution only on lines containing "$LINENO".
+
+2004-01-04 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/general.m4 (AC_ARG_PROGRAM):
+ Use "rm -f" to remove conftest.sed, not plain "rm".
+ Bug reported by David Relson in
+ <http://mail.gnu.org/archive/html/autoconf/2004-01/msg00011.html>.
+
+ * Makefile.am (autom4te-update):
+ Replace "rm -rf" and "rm -fr" with "rm -f -r", as POSIX requires.
+ * Makefile.maint (my-distcheck, do-po-update): Likewise.
+ * doc/autoconf.texi (Guidelines): Likewise.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Likewise.
+ * lib/autoconf/libs.m4 (_AC_PATH_X_XMKMF): Likewise.
+ * lib/autoconf/specific.m4 (AC_SYS_LONG_FILE_NAMES): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): Likewise.
+ * tests/Makefile.am (clean-local): Likewise.
+ * tests/tortue.at (AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS,
+ srcdir): Likewise.
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ Warn against "rm -fr".
+
+2004-01-03 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Mention that cc
+ -c -o might not work. From a suggestion by Kevin Ryde.
+ (C Compiler, Generating Sources, Limitations
+ of Usual Tools, Limitations of Make, Making testsuite Scripts):
+ Don't put '-o' after non-options, as POSIX doesn't allow this.
+ Mention that cc's name might be gcc or c89 or whatever.
+
+2004-01-04 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi: Add various further index entries.
+
+2003-12-29 Paul Eggert <eggert@twinsun.com>
+
+ * bin/autoreconf.in (autoreconf_current_directory):
+ Fix typo: mkdir without umask arg.
+
+2003-12-27 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Make) <Automatic rule rewriting>:
+ Documents OSF1/Tru64 make behavior. Replace `VPATH = ../src' by
+ `VPATH = ../pkg/src' in examples to make the OSF1/Tru64 make
+ explanation clearer.
+
+2003-12-24 Andreas Schwab <schwab@suse.de>
+
+ * doc/autoconf.texi (Default Includes): Fix misspelling of
+ AC_INCLUDES_DEFAULT.
+
+2003-12-03 Paolo Bonzini <bonzini@gnu.org>
+
+ * configure.ac: Test if sh -n works.
+ * configure: Regenerate.
+ * tests/atlocal.in: Store the result here.
+ * tests/local.at (AT_CHECK_SHELL_SYNTAX): Extracted from
+ tools.at, looking in atlocal's ac_cv_sh_n_works instead
+ of explicitly testing.
+ (AT_CHECK_PERL_SYNTAX): Moved from tools.at.
+ (AT_CHECK_AUTOCONF): Test for the configure script syntax.
+ * tests/tools.at (Syntax of the shell scripts): Simplify
+ using AT_CHECK_SHELL_SYNTAX.
+ (Syntax of the Perl scripts): Remove definition of
+ AT_CHECK_PERL_SYNTAX.
+
+2003-12-03 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_SHELL_FN_WORK): Redirect
+ stderr to /dev/null.
+ * bin/autoconf.in: Regenerate.
+ * bin/wrapper.in: Regenerate.
+
+2003-11-26 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BOURNE_COMPATIBLE):
+ Extracted from AS_SHELL_SANITIZE.
+ (_AS_SHELL_FN_WORK, AS_INIT_WITH_SHELL_FN): New
+ macros.
+ (AS_SHELL_SANITIZE): Move reinvocation code from
+ _AS_LINENO_WORKS, use it to find out if shell
+ functions work.
+ (_AS_LINENO_WORKS): Don't find another shell if $LINENO
+ does not work.
+ (AS_INIT): Pass parameter down to AS_SHELL_SANITIZE.
+ (AS_REQUIRE_SHELL_FN): Test that AS_INIT_WITH_SHELL_FN
+ was called.
+ * lib/autotest/general.m4: Use AS_INIT_WITH_SHELL_FN.
+ * bin/autoconf.in: Regenerate.
+ * tests/wrapper.in: Regenerate.
+ * tests/tools.at: Test the syntax of tests/autoconf
+ and tests/testsuite.
+
+2003-11-24 Akim Demaille <akim@epita.fr>
+
+ * config/announce-gen (&print_locations, &print_signatures)
+ (&sizes): New.
+ Use them.
+ No longer rely on Gnus to inline the list of signatures: compute
+ them on the fly.
+
+2003-11-24 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Programs): AC_PROG_LEX can
+ override some files.
+ (Input): AC_CONFIG_AUX_DIR(aux) is a bad idea on DOS.
+ From Debian Autoconf 2.58.
+
+2003-11-24 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): Quote $ac_popdir
+ uses.
+ From Debian Autoconf 2.58.
+
+2003-11-24 Paolo Bonzini <bonzini@gnu.org>
+
+ * TODO: Remove already done things. Update the part about finding
+ tools for the target.
+
+2003-11-24 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/autoconf/headers.m4 (AC_USG, AC_MEMORY_H, AC_DIR_HEADER):
+ Make wording more consistent.
+ * lib/autoconf/specific.m4 (AC_CYGWIN, AC_EMXOS2, AC_MINGW32):
+ Explain the transition better.
+ * lib/autoconf/types.m4 (AC_INT_16_BITS, AC_LONG_64_BITS): Explain
+ the transition better.
+
+2003-11-24 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (Obsoleting Macros): Don't document the third
+ parameter of AU_DEFUN.
+ * lib/autoconf/autoupdate.m4 (AU_DEFINE): Remove.
+ (AU_DEFUN): Remove the third parameter, it was not used.
+ Use AC_DEFUN directly, not AU_DEFINE.
+ * lib/autoconf/status.m4 (AC_LINK_FILES): Move the message into
+ the expanded body, consistently with other macros such as AC_USG.
+
+2003-11-17 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Put at least 14 bytes
+ into the initial confdefs.h, to work around a bug in NextStep 3.3
+ patch 3 reported by Eric Sunshine.
+
+2003-11-15 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Using System Type): Revise, showing $host rather
+ than $target since the latter is not usual, add guidelines on when to
+ use or not use the system type.
+
+2003-11-12 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Fix what looks like a
+ typo misrepaired by an auto-spellcheck.
+
+2003-11-12 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&parse_args): Don't call automake with
+ --force-missing unless it actually supports it.
+ From Debian #219336.
+
+2003-11-12 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.59a.
+ Require 2.59.
+
+2003-11-06 Akim Demaille <akim@epita.fr>
+
+ Version 2.59.
+
+2003-11-05 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Fix use of AS_SET_CATFILE
+ so that ac_abs_builddir, ac_abs_top_builddir, ac_abs_srcdir,
+ and ac_abs_top_srcdir are absolute paths.
+ * lib/m4sugar/m4sh.m4 (AS_SET_CATFILE): Remove misleading comment.
+
+2003-11-05 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.58a.
+
+2003-11-05 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Using Autotest): Avoid @strong{Note: ...}, since
+ it provokes a warning from makeinfo about looking like a cross
+ reference in info output.
+
+ * doc/autoconf.texi (Function Portability): Add notes on signal
+ handler return type, as per AC_TYPE_SIGNAL.
+
+2003-11-04 Akim Demaille <akim@epita.fr>
+
+ Version 2.58.
+ * doc/standards.texi: Update from master.
+
+ * tests/mktests.sh (ac_exclude_list): Add AC_FC_FREEFORM.
+
+2003-11-04 Akim Demaille <akim@epita.fr>
+
+ AC_CONFIG_FILE([d1/foo:d2/foo]) triggers error messages when
+ computing the absolute path to d1 in the source hierarchy: it may
+ not exist at all. So don't cd into it.
+ From Alexandre Duret-Lutz.
+ http://mail.gnu.org/archive/html/bug-autoconf/2003-10/msg00205.html
+
+ * lib/m4sugar/m4sh.m4 (AS_SET_CATFILE): New.
+ From Paul Eggert, but named after Perl's IO::Spec->catfile.
+ * doc/autoconf.texi (Programming in M4sh): Document.
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Use it.
+
+2003-11-03 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Generic Structure Checks): Describe
+ action-if-found and action-if-not-found in AC_CHECK_MEMBERS.
+
+2003-10-31 Akim Demaille <akim@epita.fr>
+
+ * tests/fortran.at (GNU Fortran 77): Don't run FC macros.
+ (GNU Fortran): New.
+ * doc/autoconf.texi (Language Choice): Document.
+ * lib/autoconf/fortran.m4 (AC_FC_SRCEXT, AC_FC_FREEFORM): Assert
+ the current language is Fortran.
+
+2003-10-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&freeze): Use a less likely warning separator
+ than `\n\n', so that `\n\n\n' is valid in warnings.
+ Reported by Steve Huston.
+
+2003-10-28 Akim Demaille <akim@epita.fr>
+
+ * Makefile.cfg (local_updates, executable-update): Tweak to be
+ robust to parallel makes.
+ Suggested by Alexandre Duret-Lutz.
+
+2003-10-27 Akim Demaille <akim@epita.fr>
+
+ * Makefile.cfg (executable-update): New.
+ (local_updates): Call it.
+
+2003-10-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_RUN_IFELSE, _AC_INIT_PREPARE):
+ Don't remove core.* as it may remove valid user files.
+ * lib/autoconf/functions.m4 (AC_FUNC_SETVBUF_REVERSED)
+ (AC_FUNC_UTIME_NULL): Likewise.
+
+2003-10-23 Akim Demaille <akim@epita.fr>
+
+ Version 2.57g.
+ * config/config.guess, config/config.sub: Upgrade from masters.
+
+2003-10-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/fortran.m4 (AC_FC_SRCEXT): Functions using
+ AC_COMPILE_IFELSE that use break skip the clean up. So do it by
+ hand...
+
+2003-10-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_LINK_IFELSE, _AC_COMPILE_IFELSE):
+ Don't forget to remove conftest.err.
+
+2003-10-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJ): Don't insert twice the
+ same object file in $LIBOBJS.
+ Reported by Alexandre Duret-Lutz & Derek Robert Price.
+ * doc/autoconf.texi (Generic Functions): Adjust.
+
+2003-10-20 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_TR_SH_PREPARE, _AS_TR_CPP_PREPARE):
+ Use 'eval', so that the resulting configure scripts work even if
+ the current directory has a weird file name like 'y%s+%pp%;s%@%_%g'.
+
+2003-10-20 Daniel Jacobowitz <drow@mvista.com>
+
+ * lib/autoconf/lang.m4 (AC_LANG_WERROR): New macro.
+ * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE, _AC_PREPROC_IFELSE)
+ (_AC_LINK_IFELSE): Check the werror flag.
+ * doc/autoconf.texi (Generic Compiler Characteristics): Document
+ AC_LANG_WERROR.
+ * NEWS: Mention it.
+
+2003-10-20 Daniel Jacobowitz <drow@mvista.com>
+
+ * lib/autoconf/lang.m4 (AC_NO_EXECUTABLES): Override
+ _AC_COMPILER_EXEEXT to attempt a link. If linking fails,
+ override AC_LINK_IFELSE.
+
+2003-10-15 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_UNSET_PREPARE): Work around a bug in
+ pdksh 5.2.14. Bug reported by Ralf Corsepius.
+ * doc/autoconf.texi (Shellology): Mention the Korn shell and pdksh.
+ Mention /usr/dt/bin/dtksh on Solaris.
+ (Shell Substitutions): Warn about $((...)).
+ (Parentheses): New section.
+
+2003-10-15 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Add @prindex for exit.
+ Add putenv and unsetenv. Add sysconf _SC_PAGE_SIZE.
+
+2003-10-13 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_FORK): Trivial fix for vfork
+ cross test.
+
+2003-10-11 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Use the new official
+ name for the GNU Fortran 95+ compiler, 'gfortran', not 'g95'.
+
+2003-10-10 Andreas Schwab <schwab@suse.de>
+
+ * bin/autoheader.in: Avoid empty first line in --version and
+ --help output.
+ * bin/ifnames.in: Likewise.
+
+2003-10-09 Paul Eggert <eggert@twinsun.com>
+
+ * lib/Autom4te/XFile.pm: Don't assume -j is solo.
+ Issue a more-informative diagnostic.
+ Problems reported by Eric Sunshine.
+
+2003-10-08 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_V_OUTPUT): Omit quoted
+ -mGLOB_options_string stuff for Intel ifc, which can cause
+ _AC_FC_LIBRARY_LDFLAGS to fail. Use (faster) case for
+ pattern-matching instead of grep.
+
+2003-10-08 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * doc/autoconf.texi: Document new FC Fortran macros.
+
+2003-10-08 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/general.m4 (AC_CONFIG_MACRO_DIR): Stub out a macro
+ that future autopoint/aclocal/automake/autoreconf will be able
+ to trace to find where to install local m4 macros.
+ * doc/autoconf.texi (Input): Document it.
+ * NEWS: Updated.
+
+2003-10-06 Gary V. Vaughan <gary@gnu.org>
+
+ * lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Add
+ -lcrtbegin.o to list of ignored flags and fix underquoting of
+ -lcrt[01].o.
+
+2003-10-04 Steven G. Johnson <stevenj@ab-initio.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC_G): Use language-specific
+ cache variable instead of $G77 to decide whether to include -O2,
+ since $G77 is specific to Fortran 77.
+
+2003-10-03 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (AC_FC_FREEFORM): Support Absoft "-f
+ free" flag. Re-order flags tested into rough order of popularity.
+
+2003-10-03 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (AC_PROG_FC): Reverse the order of the
+ arguments so that it can be used with syntax identical to
+ AC_PROG_F77, and so that we can more easily decide to
+ remove/deprecate the DIALECT optional argument in the future if it
+ proves troublesome.
+ (AC_FC_FREEFORM): Exit 77 upon failure to fix test suite for
+ non-freeform-supporting compilers. Document freeform flags.
+
+2003-10-03 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Look for emacs, not macs.
+ Reported by Eric Sunshine.
+
+2003-10-03 Akim Demaille <akim@epita.fr>
+
+ * lib/autom4te.in (Autoreconf-preselections): Trace AC_CONFIG_AUX_DIR.
+ * bin/autoreconf.in (autoreconf_current_directory): Create the
+ AUX_DIR if needed, for sake of automake --add-missing etc.
+ Suggested by Alexandre Duret-Lutz.
+
+2003-10-03 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Quotation and formatting changes.
+ (EMACS): Don't set it if it is not recent enough to support
+ autoconf-mode.el.
+ From Eric Sunshine.
+
+2003-10-02 Akim Demaille <akim@epita.fr>
+
+ * bin/ifnames.in (&scan_file): Skip C++ comments.
+ From Jeremy Yallop.
+
+2003-10-01 Pavel Roskin <proski@gnu.org>
+
+ * doc/autoconf.texi (Particular Structure Checks):
+ Fix misspelling of HAVE_STRUCT_STAT_ST_BLOCKS.
+
+2003-10-01 Akim Demaille <akim@epita.fr>
+
+ Version 2.57f.
+
+2003-09-30 Paul Eggert <eggert@twinsun.com>
+
+ * lib/Autom4te/XFile.pm: Use Errno.
+ (lock): Ignore ENOLCK errors. Problem reported Andreas Schwab in
+ <http://mail.gnu.org/archive/html/bug-autoconf/2003-09/msg00141.html>.
+
+2003-09-30 Akim Demaille <akim@epita.fr>
+
+ * config/announce-gen (&print_news_deltas): Extracted from...
+ (&print_changelog_deltas): here.
+ (&news_file): Rename as...
+ (@news_file): this.
+
+2003-09-30 Nicolas Joly <njoly@pasteur.fr>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_FC): Remove files which might
+ have been created when invoking the compiler.
+ * tests/fortran.at (GNU Fortran 77): Quote $G77.
+
+2003-09-29 Akim Demaille <akim@epita.fr>
+
+ Version 2.57e.
+
+ * config/mkinstalldirs: Upgrade.
+
+2003-09-28 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Set DUALCASE=1, for MKS sh.
+ Problem reported by Lars J. Aas in
+ <http://mail.gnu.org/archive/html/autoconf/2003-07/msg00042.html>.
+ (_AS_MKDIR_P_PREPARE): Change "rm -fr ./-p" to the more-conservative
+ "test -d ./-p && rmdir ./-p". Suggested by Andreas Schwab in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2003-09/msg00039.html
+
+2003-09-26 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_COMMANDS): Make sure the
+ directory for AC_CONFIG_COMMANDS' first argument exists.
+ This makes valid the invocation of _AC_SRCPATH that follows.
+ Reported by Eric Sunshine.
+ * doc/autoconf.texi (Configuration Commands): Adjust.
+
+2003-09-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (Autom4te::FileUtils): Use it for find_file.
+ Reported by Ralf Corsepius.
+
+2003-09-26 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_HELP_STRING): Don't overquote the
+ arguments.
+ Actually, use AU_ALIAS.
+ From Bruno Haible.
+
+2003-09-26 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_MKDIR_P_PREPARE): If mkdir -p . fails,
+ rm -fr ./-p to remove junk left behind on NextStep and OpenStep.
+ Problem reported by Eric Sunshine in:
+ http://mail.gnu.org/archive/html/autoconf-patches/2002-12/msg00014.html
+
+2003-09-26 Akim Demaille <akim@epita.fr>
+
+ The test suite are sometimes assigning timings incorrectly.
+ Reported by Henk Krus.
+ Diagnosed by Nicolas Joly.
+
+ * lib/autotest/general.m4 (AT_CLEANUP): Rename AT_help as
+ AT_help_all.
+ Instead of making AT_help a sequence of assignments to grow
+ $at_help_all, just make AT_help_all be the growing contents of
+ $at_help_all, and make a single assignment in...
+ (AT_INIT): here.
+ (at_times_skip): Flip the meaning and rename as...
+ (at_times_p): this.
+ (AT_INIT): When summarizing the test that ran, remove
+ $at_times_file after use, and check it is present before trying to
+ use it.
+
+2003-09-25 Akim Demaille <akim@epita.fr>
+
+ Version 2.57d.
+
+ * bin/Makefile.am (edit): Handle '@configure_input@'.
+ (autoconf, autoheader, autom4te, autoreconf, autoscan, autoupdate)
+ (ifnames): chmod -w.
+ * tests/wrapper.as (AUTOCONF, AUTOM4TE, ): Point to tests/
+ executables, not bin/ executables! Otherwise all the magic needed
+ to find non installed files is turned off. This caused a failure
+ of test 40 and 41 that ran aclocal 1.8 which in turn ran autom4te
+ as found in its environment (sent by tests/autoreconf): pointing
+ to bin/autom4te that could not find its files.
+ * tests/mktests.sh: Force the replacement of generated files, for
+ the sake of "mv" program that are interactive when overwriting a
+ -w file.
+ * config/install-sh: Upgrade from CVS Automake.
+
+2003-09-23 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Builtins): Document test -h
+ versus test -L issues.
+
+2003-09-23 Daniel Jacobowitz <drow@mvista.com> and
+ Paul Eggert <eggert@twinsun.com>
+
+ Trivial change to support GCC's configuration procedure.
+ * lib/autoconf/c.m4 (AC_PROG_CPP_WERROR): New macro.
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Don't warn
+ about inconsistency if the preprocessor is set to give errors for
+ any warning.
+ * doc/autoconf.texi (C Compiler Characteristics): Document this.
+
+2003-09-13 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * Makefile.am (autom4te-update, autom4te_files): Fetch Struct.pm
+ and XFile.pm from Automake.
+ * lib/Autom4te/XFile.pm: Update from Automake.
+
+2003-09-12 Akim Demaille <akim@epita.fr>
+
+ Version 2.57c.
+
+2003-09-12 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, config/missing,
+ * lib/Autom4te/Channels.pm, lib/Autom4te/Configure_ac.pm: Update
+ from masters.
+
+2003-09-12 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): Promote linux/types.h,
+ not asm/types.h.
+
+2003-09-11 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): linux/random.h.
+ From Peter Hendrickson.
+
+2003-09-10 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh (au_exclude_egrep): Make it harder to be
+ willing to edit the output files.
+
+2003-09-10 Akim Demaille <akim@epita.fr>
+
+ * tests/fortran.at (GNU Fortran 77): Also exercise AC_FC_SRCEXT
+ and AC_FC_FREEFORM.
+ * tests/mktests.sh: Skip AC_FC_SRCEXT.
+ * lib/autoconf/fortran.m4 (AC_FC_SRCEXT, AC_FC_FREEFORM): Likewise.
+
+2003-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/FileUtils.pm (&update_file): s/cannot not/cannot/g.
+ Reported by Gary Vaughan.
+ * bin/autom4te.in (handle_m4): Likewise.
+
+2003-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/FileUtils.pm (&update_file): Be sure not to leave
+ trailing files.
+
+2003-09-07 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/specific.m4 (AC_SYS_RESTARTABLE_SYSCALLS):
+ Improve the accuracy of the wording about obsolescence.
+ From a suggestion by Ian Lance Taylor in
+ <http://mail.gnu.org/archive/html/autoconf/2003-09/msg00044.html>.
+
+2003-09-05 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/fortran.m4 (AC_FC_FREEFORM): Try -ffree-form too,
+ for the benefit of g77 3.2. Fix suggested by Steven G. Johnson.
+
+2003-09-04 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh (ac_exclude_list): Fix the filtering of
+ AC_FUNC_WAIT3.
+
+2003-09-04 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in: Use &fatal where more appropriate than &error.
+ (freeze): When exiting, use $exit_code.
+ * lib/autoconf/fortran.m4: Comment changes.
+
+2003-09-04 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh (ac_exclude_list): Add AC_FC_FUNC.
+
+2003-09-02 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Add support for newer Fortran dialects. The F77 interface is
+ unchanged, and continues to support Fortran 77. New FC macros
+ correspond to all the old F77 macros, with output variables FC,
+ FCFLAGS, and FCLIBS. AC_PROG_FC defaults to picking the newest
+ available dialect, but older dialects can be specified. There are
+ new macros AC_FC_SRCEXT to set the source extension, and
+ AC_FC_FREEFORM to accept free-form source files.
+
+ * lib/autoconf/c.m4 (_AC_LANG_PREFIX(C), _AC_LANG_PREFIX(C++)):
+ New macros.
+ (AC_LANG_PROGRAM(C)): Invoke _AC_LANG_PROGRAM_C_FC_HOOKS if defined.
+ * lib/autoconf/fortran.m4 (AC_LANG(Fortran), _AC_FORTRAN_ASSERT,
+ _AC_LANG_ABBREV(Fortran), _AC_LANG_PREFIX(Fortran 77),
+ _AC_LANG_PREFIX(Fortran), _AC_FC, AC_LANG_SOURCE(Fortran),
+ AC_LANG_PROGRAM(Fortran), AC_LANG_CALL(Fortran),
+ AC_LANG_PREPROC(Fortran), AC_LANG_COMPILER(Fortran),
+ _AC_FC_DIALECT_YEAR, _AC_F95_FC, _AC_F90_FC, _AC_F77_FC,
+ _AC_PROG_FC, AC_PROG_FC, _AC_PROG_FC_G, _AC_PROG_FC_C_O,
+ AC_PROG_FC_C_O, _AC_PROG_FC_V_OUTPUT, _AC_PROG_FC_V,
+ _AC_FC_LIBRARY_LDFLAGS, AC_FC_LIBRARY_LDFLAGS, _AC_FC_DUMMY_MAIN,
+ AC_FC_DUMMY_MAIN, _AC_FC_MAIN, AC_FC_MAIN, __AC_FC_NAME_MANGLING,
+ _AC_FC_WRAPPERS, AC_FC_WRAPPERS, _AC_FC_FUNC, AC_FC_FUNC,
+ AC_FC_SRCEXT, AC_FC_FREEFORM):
+ New macros.
+ (AC_PROG_F77, AC_PROG_F77_C_O, AC_F77_LIBRARY_LDFLAGS,
+ AC_F77_DUMMY_MAIN, AC_F77_MAIN, _AC_F77_NAME_MANGLING,
+ AC_F77_NAME_MANGLING, AC_F77_WRAPPERS, AC_F77_FUNC):
+ Rewrite in terms of the above.
+ (_AC_PROG_F77_G, _AC_PROG_F77_V_OUTPUT, _AC_PROG_F77_V): Remove.
+ * lib/autoconf/lang.m4 (_AC_LANG_PREFIX): New macro.
+ * tests/acfortran.at: Test AC_FC_FREEFORM, AC_FC_FUNC,
+ AC_FC_MAIN, AC_FC_SRCEXT, AC_FC_WRAPPERS, AC_PROG_FC_C_O.
+
+2003-09-02 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Usual Tools, Limitations of Make):
+ Document problems with timestamp resolution that 'make', 'cp -p', and
+ 'touch -r' have.
+
+2003-08-27 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sugar.at (cross_warning): Make sure to enable the
+ output, so that we can track spurious m4sugar output.
+ * tests/local.at: Require 2.57.
+ (AT_CHECK_M4SUGAR, AT_CHECK_M4SH): Don't m4_default the arguments that
+ are defaulted by AT_CHECK anyway.
+ Use AT_CHECK_AUTOM4TE.
+ * lib/m4sugar/m4sugar.m4: There should be no output at all: add a
+ missing dnl.
+
+2003-08-27 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in: Issue the "Using auxiliary..." message only
+ when -Wobsolete is set.
+ Set it on by default.
+ Suggested by Klee Dienes.
+
+2003-08-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (AC_FUNC_FSEEKO, AC_SYS_LARGEFILE): More
+ documentation.
+ From Guido Draheim.
+
+2003-08-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Output): Make clear that one can run code
+ after AC_OUTPUT.
+
+2003-08-25 Akim Demaille <akim@epita.fr>
+
+ * config/announce-gen, GNUmakefile, Makefile.maint: Update from
+ CVS Bison.
+
+2003-08-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * bin/autoreconf.in (parse_args): Do not pass --no-force to
+ Automake versions prior to 1.8.
+
+2003-08-25 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): netinet/if_ether.h.
+ From Ville Karaila.
+
+2003-08-24 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.57c.
+
+2003-08-22 Akim Demaille <akim@epita.fr>
+
+ Version 2.57b.
+
+ * Makefile.cfg (local-checks-to-skip): New.
+ * Makefile.maint (local-check): Rename as...
+ (local-checks-available): this.
+ (local-check): New.
+
+ * Makefile.am (EXTRA_DIST): Add Makefile.cfg.
+ * configure.ac: Require Automake 1.7.6.
+
+2003-08-22 Akim Demaille <akim@epita.fr>
+
+ Output stack traces in warnings.
+
+ * lib/m4sugar/m4sugar.m4 (_m4_warn): New.
+ Replace the former...
+ (m4_warn): Pass the call stack to _m4_warn.
+ * bin/autom4te.in: Adjust to output the call stack.
+ * tests/m4sugar.at (m4@&t@_warn): Adjust.
+
+2003-08-22 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/Request.pm, lib/Autom4te/C4che.pm: New.
+ * bin/autom4te.in: Adjust.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&file_name_is_absolute): Remove.
+ (&verbose): Remove.
+ (&getopt): Adjust the note and verb channels, depending upon
+ --verbose.
+ * bin/autoheader.in, bin/autom4te.in, bin/autoscan.in,
+ * bin/autoupdate.in: Adjust.
+ Use &verb, not &verbose.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in (&parse_args): Use &parse_warnings and
+ &parse_WARNINGS.
+ ($help): Use Autom4te::ChannelDefs::usage.
+ * bin/autoscan.in: Use Autom4te::ChannelDefs.
+ * lib/Autom4te/General.pm: Don't export error: you don't own it.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ First stab at preserving warnings between calls to autom4te,
+ including when the cache is used.
+
+ There are still several issues: (i) there are too many runs of m4
+ (one for include, one for warnings, and some more), (ii) warnings
+ spreading on several lines are not handled gracefully, (iii) the
+ code meant to have the call stack display for errors does not work
+ (its handling should move from m4 to autom4te).
+
+ * bin/autom4te.in Autom4te::Channels, Autom4te::ChannelDefs):
+ Use them.
+ (@preselect): Add m4_warn.
+ ($exit_status): Remove, use $exit_code.
+ ($help): Use Autom4te::ChannelDefs::usage.
+ (&handle_m4): No longer define the m4_warnings.
+ At each run, extract and report the warnings.
+ Always cache the result, including if the exit status is on
+ failure, since if nothing changes, we should result in the same
+ failure, hence we can use the cache.
+ * lib/m4sugar/m4sugar.m4 (m4_warning_ifelse, _m4_warning_ifelse)
+ (_m4_warning_error_ifelse, __m4_warning_error_ifelse, _m4_warn):
+ Remove.
+ (m4_warn): Redefine as a do-nothing: it is its invocation that
+ matters, as warnings are now reported via traces.
+ * lib/autoconf/general.m4 (AC_DIAGNOSE): Don't make it a copy of
+ the contents of m4_warn: make it _call_ m4_warn, so that tracing
+ the latter reveals calls to the former.
+
+ Adjust the tests.
+
+ * tests/m4sugar.at (m4@&t@_warn): Use existing warning categories.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.pm (Autom4te::Channels, Autom4te::ChannelDefs):
+ Use them.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/FileUtils.pm (&find_file): Walk the @include in
+ forward order.
+ * lib/Autom4te/ChannelDefs.pm: Doc typos.
+ (&parse_warnings): Accept a list of warning requests.
+ (&usage): Return a string, not a side effect.
+ (cross): New warning category.
+
+2003-08-21 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/Configure_ac.pm (&find_configure_ac)
+ (&require_configure_ac): Accept an optional directory argument.
+ ($configure_ac): Remove.
+ * lib/Autom4te/General.pm (&find_configure_ac, &canonfile)
+ (&catfile): Remove.
+ * bin/autoheader.in, bin/autoreconf.in, bin/autoupdate.in,
+ * bin/autoscan.in: Adjust.
+
+2003-08-20 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in: Remove duplicate 'use Autom4te::FileUtils'.
+ Reported by Alexandre Duret-Lutz.
+
+2003-08-20 Akim Demaille <akim@epita.fr>
+
+ * bin/autoupdate.in, bin/autoheader.in, bin/autoreconf.in,
+ * bin/autom4te: Adjust.
+ In particular, be Autoconf tools are really silent when properly
+ working, bind the verbosity of the 'note' channel to $verbose.
+ * lib/Autom4te/General.pm (&find_file, &mtime, &update_file)
+ (&xsystem, &contents): Remove, since they are exported by...
+ * lib/Autom4te/FileUtils.pm: this.
+ More perldoc.
+ * lib/Autom4te/General.pm (&up_to_date_p): Move to...
+ * lib/Autom4te/FileUtils.pm: here.
+
+2003-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/Channels.pm, lib/Autom4te/ChannelDefs.pm
+ * lib/Autom4te/Configure_ac.pm, lib/Autom4te/FileUtils.pm: New,
+ from CVS Automake.
+
+2003-08-20 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (automake_cvsweb, automake_cvsargs, autom4te_files)
+ (autom4te-update): New.
+ * Makefile.cfg (update): Bind autom4te-update.
+
+2003-08-19 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4: Comment various HELP_* diversions.
+ (PARSE_ARGS_BEGIN): New section for option parsing related
+ initialization.
+ (AT_ARG_OPTION,AT_ARG_OPTION_ARG,_AT_ARG_OPTION): New macros to define
+ package specific options and associated help.
+
+2003-08-19 Akim Demaille <akim@epita.fr>
+
+ * config/announce-gen, Makefile.cfg: New.
+ * Makefile.am: Adjust.
+ * GNUmakefile, Makefile.maint: Update from CVS Coreutils.
+
+2003-08-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Automake-preselections): Preselect
+ AC_CONFIG_LIBOBJ_DIR, AC_CONFIG_LINKS, m4_include,
+ and m4_sinclude.
+
+2003-08-19 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/autom4te.in (Autoconf): Move all args except aclocal.m4? into ...
+ (Autoconf-without-aclocal-m4): ... this new language.
+ * doc/autoconf.texi (autom4te Invocation): Mention
+ Autoconf-without-aclocal-m4.
+
+2003-08-18 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Writing testsuite.at): Document RUN-IF-FAIL &
+ RUN-IF-PASS optional arguments.
+
+2003-08-18 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Programming in M4sh): Add doc for AS_IF.
+
+2003-08-16 Derek Price <derek@ximbiot.com>
+
+ * doc/autoconf.texi (Writing testsuite.at): Document defaults for
+ STDOUT & STDERR arguments.
+
+2003-08-14 Derek Price <derek@ximbiot.com>
+
+ * lib/autotestgeneral.m4 (AT_INIT): Reformat test summary line to print
+ DESCRIPTION rather than FILE and LINE. Shorten result to fit in new,
+ shorter column three. Add DESCRIPTION to log file content.
+
+2003-08-13 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (AT_INIT): Correct typo in final status
+ output.
+
+2003-08-12 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (AT_CHECK): Use new _AT_CHECK API.
+ (AT_CHECK_NOESCAPE): Move core functionality to...
+ (_AT_CHECK): ...this new macro.
+
+2003-08-07 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (AT_CHECK): Move core functionality...
+ (AT_CHECK_NOESCAPE): ...to this new macro.
+
+2003-07-31 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_UNSET_PREPARE): Work around a bug
+ in Bash 2.01. Problem reported by Brian Gough in
+ <http://mail.gnu.org/archive/html/bug-autoconf/2003-07/msg00106.html>.
+
+2003-07-25 John W. Eaton <jwe@bevo.che.wisc.edu>
+
+ * lib/autoconf/fortran.m4 (AC_F77_LIBRARY_LDFLAGS): Also ignore
+ -lcrt1.o, for OS X. (trivial change)
+
+2003-07-07 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4 (AC_C_INLINE): Wrap the '#define inline ...'
+ inside '#ifndef __cplusplus'. Problem reported by
+ Bob Friesenhahn.
+
+2003-07-06 Bill Clarke <llib@computer.org>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MMAP): Cast pointer to
+ 'long', not 'int', for benefit of Sun's recent C++ compilers
+ (trivial change). See:
+ http://mail.gnu.org/archive/html/autoconf-patches/2003-07/msg00007.html
+ (This really should be 'intptr_t', not 'long', but that would
+ take more work.)
+
+2003-06-25 Akim Demaille <akim@epita.fr>
+
+ * lib/Makefile.am (autom4te.cfg): Make it read only.
+ Depend on Makefile since it contains substitutions.
+ From Paolo Bonzini.
+ * lib/autom4te.in (args): Add local.at? for Autotest args.
+ This change was made on autom4te.cfg which is generated.
+ Reported by Raja R. Harinath.
+
+2003-06-25 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): sys/mount.h.
+ From Gareth McCaughan.
+
+2003-06-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Report a single config.log,
+ not all of them. This fixes 1. the fact that when testing
+ Autoconf there are many many config.log, 2. the incorrect use of
+ top_srcdir to find config.log.
+ Don't mix the detailed output of failed test with the summary of
+ failures. Rather, append detailed log afterwards.
+
+2003-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/local.at (AT_CHECK_CONFIGURE): Adjust to the verbose being
+ always run: output config.log on $at_group_log.
+
+2003-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (#define header templates): Don't use quotes in
+ C++ comments as it puzzles Emacs' sh font-lock-mode.
+
+2003-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh (au_exclude_egrep): Fix output copyright notice.
+ * lib/autom4te.cfg (args): Add local.at? for Autotest args.
+ * tests/atspecific.m4: Rename as...
+ * tests/local.at: This.
+ * tests/suite.at: Move the globals into...
+ * tests/local.at: here.
+ * tests/Makefile.am: Adjust.
+ * doc/autoconf.texi (testsuite Scripts): Adjust.
+
+2003-06-21 Kevin Ryde <user42@zip.com.au>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CC_STDC): Extend test program to get an
+ error from OSF 4.0 Compaq cc in its default almost-ANSI mode, thereby
+ ensuring we add -std1 for full-ANSI.
+
+ * doc/autoconf.texi (hdrindex): New macro.
+ Add index entries for portability of various standard header files.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.57b.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ Version 2.57a.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in: Don't rely on $HOME being defined.
+ Reported by Marc Espie as PR/233.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4: Use at_times_file only if used.
+ From Nicolas Joly.
+
+2003-06-20 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, config/elisp-comp,
+ * config/install-sh, config/mkinstalldirs, doc/standards.texi:
+ Update from masters.
+
+2003-06-11 Paolo Bonzini <bonzini@gnu.org>
+
+ * doc/autoconf.texi (Writing testsuite.at): Document AT_XFAIL_IF
+ * lib/autotest/general.m4 (AT_XFAIL_IF): New macro.
+ (TEST_SCRIPT): New diversion.
+ (AT_SETUP): Divert output to TEST_SCRIPT and move some code...
+ (AT_CLEANUP): ...to here. Undivert TEST_SCRIPT.
+ (AT_INIT): Support for expected failures.
+
+2003-06-02 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in, bin/autoscan.in, bin/autoheader.in: White space
+ changes.
+ * lib/Autom4te/General.pm (&backname): Remove, no longer used by
+ Autoconf nor Automake.
+ (&contents): New, from Automake.
+ PODify.
+
+2003-05-28 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS, doc/autoconf.texi (Particular Functions),
+ lib/autoconf/functions.m4 (AC_FUNC_MKTIME): Check that mktime
+ is the inverse of localtime.
+
+2003-05-25 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Autom4te/General.pm (END): Print diagnostics to STDERR.
+ (handle_exec_errors): New function. Work around $! being
+ altered by WEXITSTATUS.
+ (xqx, xsystem): Use handle_exec_errors.
+
+2003-05-23 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Autom4te/General.pm (END): Rewrite exit code processing.
+ Do not call `_exit()', simply modify `$?'.
+ (xsystem): Reset $! before running system, and check it afterward.
+ * tests/tools.at (autoupdating AC_PREREQ): Expect exit status
+ 63 for version mismatches.
+
+2003-05-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4: Prefer "TAB-SP" to "SP-TAB", because of
+ Emacs' dangerous whitespace.el behavior (smashing "useless" spaces in
+ the middle of a line).
+ * lib/m4sugar/m4sugar.m4: Likewise.
+ Remove useless spaces in comments.
+
+2003-05-23 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_version_prereq): Failure causes an
+ exit 63, so that we (or Automake's "missing") can tell the
+ difference with a plain failure.
+ * doc/autoconf.texi (Notices): Adjust.
+
+2003-05-23 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am, bin/Makefile.am, config/Makefile.am,
+ * doc/Makefile.am, lib/autoconf/Makefile.am, tests/Makefile.am:
+ White spaces cleanup.
+
+2003-05-22 Jim Meyering <jim@meyering.net>
+ Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4 (_AC_PROG_CXX_EXIT_DECLARATION):
+ Remove `#include <stdlib.h>' from the list; we should never
+ make confdefs.h include <stdlib.h> or <cstdlib>, because the
+ resulting namespace pollution would cause other tests to fail.
+ Configure scripts run with some older versions of g++ and HP's
+ aCC would fail due to such an #include. Problems reported by
+ Matthew Mueller in <http://bugs.debian.org/120704> and by
+ Keith Bostic in
+ <http://mail.gnu.org/archive/html/autoconf/2003-05/msg00063.html>.
+ In the test, use the test declaration before including <stdlib.h>,
+ as that's closer to how it'll be used.
+
+2003-05-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): ucred.h.
+ From Ian Redfern.
+
+2003-05-22 Paolo Bonzini <bonzini@gnu.org>
+
+ Overhaul Autotest's logging: generate separate log files
+ in testsuite.dir/NNN/testsuite.log, and append them to
+ testsuite.log instead of re-running the test verbosely.
+
+ * lib/autotest/general.m4 (AT_INIT): Use a single redirected
+ file descriptor, write 0 to at_status_file instead of setting
+ at_status=0, initialize some new variables (at_status_file,
+ at_group_log, at_suite_log, at_tee_pipe). Remove the cruft
+ to rerun the tests, instead append the at_group_log to the
+ at_suite_log when a test fails.
+ (AT_SETUP): pipe the test case's output into at_tee_pipe,
+ with the AS_MESSAGE_LOG_FD redirected to stdout.
+ (AT_CLEANUP): save the output status in $at_status_file
+ and restore it, redirect the AS_MESSAGE_LOG_FD back to
+ its original place.
+ (AT_CHECK): since tests are run with a redirected stdout,
+ and used to be re-run in verbose mode, turn some $at_verbose
+ into echo, and don't redirect the output of testing stdout
+ and stderr.
+
+ * lib/autotest/autoconf.texi (testsuite Scripts): Update
+ the name of the debugging directory and information about
+ its contents.
+
+2003-05-22 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): Actually use the 2nd
+ parameter.
+
+2003-05-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4, lib/autoconf/autoupdate.m4
+ * lib/autoconf/fortran.m4 lib/autoconf/general.m4
+ * lib/autoconf/headers.m4 lib/autoconf/oldnames.m4
+ * lib/autoconf/status.m4: Fix and adjust copyright notices.
+
+2003-05-22 Akim Demaille <akim@epita.fr>
+
+ * aclocal.m4, bin/autoconf.as, lib/autoconf/autoconf.m4,
+ * lib/autoconf/autoheader.m4, lib/autoconf/autoupdate.m4,
+ * lib/autoconf/c.m4, lib/autoconf/fortran.m4,
+ * lib/autoconf/general.m4, lib/autoconf/headers.m4,
+ * lib/autoconf/lang.m4, lib/autoconf/libs.m4,
+ * lib/autoconf/programs.m4, lib/autoconf/specific.m4,
+ * lib/autoconf/status.m4, lib/autoconf/types.m4,
+ * lib/autotest/general.m4, lib/m4sugar/m4sugar.m4,
+ * tests/atspecific.m4, tests/base.at, tests/compile.at,
+ * tests/foreign.at, tests/m4sh.at, tests/semantics.at,
+ * tests/tools.at, tests/torture.at:
+ Whitespace clean up.
+ Suggested by Jim Meyering.
+
+2003-05-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETLOADAVG): Restore smashed
+ ' \t' as '\t ' so that Emacs' whitespace.el keep it.
+ Reported by Jim Meyering.
+
+2003-05-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Replace AC_HELP_STRING AS_HELP_STRING.
+ Add AC_HELP_STRING to the obsolete macros section.
+ Typos.
+ Use '@.' for sentences that ended in a capital letter.
+ From Art Haas.
+
+2003-05-22 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, config/elisp-comp,
+ * config/install-sh, config/mdate-sh, config/mkinstalldirs,
+ * config/texinfo.tex, doc/standards.texi: Update from masters.
+
+2003-05-21 Paolo Bonzini <bonzini@gnu.org>
+
+ * lib/m4sugar/m4sh.m4 (AS_VAR_SET): Escape the RHS before passing
+ it to eval.
+
+2003-05-21 Akim Demaille <akim@epita.fr>
+
+ * bin/autoupdate.in ($m4): Fix quotation.
+ Reported by Martin Mokrejs.
+
+2003-05-19 Paul Eggert <eggert@twinsun.com>
+
+ * ChangeLog, ChangeLog.2, THANKS, lib/m4sugar/m4sugar.m4:
+ Remove non-ASCII characters.
+
+2003-05-18 Paolo Bonzini <bonzini@gnu.org>
+
+ * tests/semantics.at (AC_SEARCH_LIBS): New test.
+ * tests/semantics.at (AC_CHECK_HEADERS_OLD,
+ AC_CHECK_HEADERS_NEW): New tests.
+
+2003-05-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4: Use the default includes so that
+ memcmp be declared before being tested.
+ Reported by Sander Niemeijer.
+ (AC_FUNC_ERROR_AT_LINE, AC_FUNC_GETGROUPS, AC_FUNC_STRNLEN): Likewise.
+ * doc/autoconf.texi (Default Includes): Document
+ AC_INCLUDES_DEFAULT.
+
+2003-05-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/specific.m4: Include signal.h and unistd.h.
+ * doc/autoconf.texi (Obsolete Macros): Adjust.
+ Reported by Werner LEMBERG and Debian Bug 190886.
+
+2003-05-16 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_UNSET_PREPARE): s/FOO/as_foo/ to avoid
+ user name space clashes.
+ Reported by Bruno Haible.
+
+2003-05-16 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in, bin/autom4te.in, bin/autoreconf.in,
+ * bin/autoscan.in, bin/autoupdate.in, bin/ifnames.in (BEGIN): Make
+ them uniform, and more robust to Perl special characters.
+ Reported by Martin Mokrejs.
+
+2003-05-14 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Libtool): Skip all Libtools pre 1.4.
+
+2003-05-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): X11/extensions/scrnsaver.h,
+ linux/irda.h.
+
+2003-05-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Improve the
+ message.
+ From Matthias Andree.
+
+2003-05-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * lib/Autom4te/XFile.pm (lock, truncate): Do not pass @_ to flock
+ and truncate.
+
+2003-05-06 Akim Demaille <akim@epita.fr>
+
+ Don't try to be smart with aclocal 1.8+ because (i) aclocal no
+ longer updates aclocal.m4 if useless, (ii) if a file m4_included
+ by aclocal.m4 is changed it might require the importing of another
+ m4 extension file, i.e., aclocal must be run.
+
+ * bin/autoreconf.in (&run_aclocal, $aclocal_supports_force): New.
+ (&parse_args): Use --force with aclocal if required and supported.
+ (&autoreconf_current_directory): Use &run_aclocal.
+
+2003-05-06 Akim Demaille <akim@epita.fr>
+
+ Lock autom4te's cache.
+
+ * lib/Autom4te/XFile.pm ($me, &name, &lock, &truncate, &seek): New.
+ * bin/autom4te.in (&Request::save, &Request::load): Use an IO::File
+ argument instead of a file name, so that the request file remains
+ open during the whole autom4te run.
+ ($icache_file): New.
+ (&freeze): Lock the $icache_file.
+
+2003-04-29 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (AT_KEYWORDS): Don't use a comma as the
+ seperator with m4_append_uniq(). It doesn't work.
+ (AT_CLEANUP): Add `;' to end of at_help_all.
+ (AT_INIT): Allow --keywords to be specified more than once. When
+ grepping $at_help_all for keywords, use the field and keyword
+ seperators to ensure a complete keyword match. Alter at_prev handling
+ to support the new --keywords behavior.
+
+2003-04-27 Karl Berry <karl@freefriends.org>
+
+ * doc/autoconf.texi: Make the dir entries in the autoconf manual
+ align better with others. I also made some of the individual
+ entries on one line, for brevity and to make it easier for me to
+ sort my dir-example file in the Texinfo distribution :).
+
+2003-04-12 Jim Meyering <jim@meyering.net>
+
+ * NEWS: Mention the new macro.
+ * lib/autoconf/c.m4 (AC_C_RESTRICT): New macro.
+ * doc/autoconf.texi (C Compiler): Describe AC_C_RESTRICT.
+ * tests/c.at: Test AC_C_RESTRICT.
+ * tests/mktests.sh (ac_exclude_list): Add exclusion for AC_C_RESTRICT.
+
+2003-04-08 Akim Demaille <akim@epita.fr>
+
+ * bin/ifnames.in: Skip C++ comments.
+ From Jeremy Yallop.
+
+2003-04-08 Akim Demaille <akim@epita.fr>
+
+ * GNUmakefile (SHELL): Don't assume sh is in /bin/.
+ From Ilya Zakharevich.
+
+2003-04-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Headers): Some about sys/socket.h,
+ net/if.h, stdlib.h.
+
+2003-04-01 Derek Price <derek@ximbiot.com>
+
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Correct syntax error
+ from Akim's checkin of 2003-03-29.
+
+2003-04-01 Derek Price <derek@ximbiot.com>
+
+ * tests/torture.at (Configuring subdirectories): Add missing
+ close-quote for Akim's change from 2003-03-28.
+
+2003-04-01 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (ac, at, ms): Rename these indexes as...
+ (AC, AT, MS): these.
+ (shortindexflag, @acindex, @ahindex, @asindex, @atindex, @msindex):
+ New.
+ Use them.
+ * doc/Makefile.am (CLEANFILES): Adjust.
+ (TEXI2DVI): Make it --batch.
+
+2003-03-31 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4: Revert the checkin from 2003-03-27
+ which removed the main loop.
+ Thanks to Akim Demaille.
+
+2003-03-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Skip OS/2's install,
+ that starts a GUI.
+ From Ilya Zakharevich.
+
+2003-03-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): The
+ documentation to read is Autoconf's.
+ Suggested by Paul Eggert.
+
+2003-03-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): Suggest
+ reading the section "Present But Cannot Be Compiled" when the
+ header causes problems.
+
+2003-03-28 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): Require aclocal
+ 1.4, otherwise the test fails, as it does support configure.ac.
+ This fixes the "test 40 failed" bug reports.
+
+2003-03-28 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (C Compiler): `#line' portability.
+ From Paul Eggert and Nelson H. F. Beebe.
+
+2003-03-27 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4: Eliminate main loop and reorganize test
+ layout in order to allow scripting around test groups.
+
+2003-03-27 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (PARSE_ARGS,PARSE_ARGS_END,HELP,HELP_MODES,
+ HELP_TUNING,HELP_OTHER,HELP_END,PREPARE_TESTS,TESTS_END): Define and
+ use new diversions in preparation for accepting new arguments and
+ allowing scripting around tests.
+ (OPTIONS,TAIL): Remove these diversions to make way for the ones above.
+
+2003-03-26 Derek Price <derek@ximbiot.com>
+
+ * lib/autoconf/general.m4 (AC_ARG_VAR): Use AS_HELP_STRING instead of
+ obsolete AC_HELP_STRING.
+ (AC_HELP_STRING): AU_DEFUN to...
+ * lib/m4sugar/m4sh.m4 (AS_HELP_STRING): ...here.
+ * tests/m4sh.at (AS_HELP_STRING): New test.
+
+ * tests/acgeneral.at: Regenerated.
+
+2003-03-26 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4: s/DEFAULT/DEFAULTS/ since it makes more
+ sense. Verbosify the diversion definitions comment.
+
+2003-03-26 Derek Price <derek@ximbiot.com>
+
+ * lib/autotest/general.m4 (AT_INIT): Remove redundant call to
+ AS_PREPARE.
+
+2003-03-21 Eric Siegerman <eric_97@pobox.com>
+
+ * doc/autoconf.texi (Present But Cannot Be Compiled):
+ Grammar fixes and minor rewording. (trivial change)
+
+2003-03-06 Paul Eggert <eggert@twinsun.com>
+
+ Work around a problem noted by Nelson H. F. Beebe with coreutils
+ 4.5.9: Sun c89 (Sun WorkShop 6 update 2 C 5.3 Patch 111679-08
+ 2002/05/09) rejects '#line 32768 "configure"' because the line
+ number overflows.
+ * lib/autoconf/c.m4 (AC_LANG_SOURCE(C)): Do not generate
+ #line directives.
+ * lib/autoconf/lang.m4 (AC_LANG_SOURCE): Fix comment to match this.
+ * doc/autoconf.texi (Generating Sources): Document this.
+
+2003-03-01 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * tests/atspecific.m4 (AT_CHECK_AUTOM4TE): Normalize
+ file name for the m4 program, when it has an "exe" file extension.
+ DJGPP's error messages include the error code in brackets -
+ remove the error code during normalization.
+
+2003-02-28 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Present But Cannot Be Compiled): New.
+
+2003-02-28 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Make): Remove the section
+ about `$<' in inference rules, it was a bogus interpretation of
+ an old Automake change. Discuss NetBSD, FreeBSD, OpenBSD, and
+ Tru64 make in the "target lookup" section.
+ (Automake): Automake 1.5+ no longer requires special tools to be
+ present on the developer's host.
+
+2003-02-26 Richard Dawe <rich@phekda.freeserve.co.uk>
+
+ * bin/autoheader.in (BEGIN): For DJGPP SHELL may not be set
+ to a shell that can handle redirection or quoting correctly.
+ Override SHELL with the shell detected by configure.
+ Use of $^O suggested by Tim van Holder.
+ * bin/autom4te.in (BEGIN): Likewise.
+ * bin/autoreconf.in (BEGIN): Likewise.
+ * bin/autoscan.in (BEGIN): Likewise.
+ * bin/autoupdate.in (BEGIN): Likewise.
+ * bin/ifnames.in (BEGIN): Likewise.
+
+ * bin/ifnames.in: Add final newline to help and version messages.
+
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Translate colons,
+ to cope with DOS-style absolute paths, when constructing
+ ${ac_make}.
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS, _AC_OUTPUT_FILES):
+ When constructing paths with IFS=:, quote the path. If we're
+ constructing a DOS-style absolute path, we don't want to split it
+ on the colon.
+
+ * tests/atspecific.m4 (AT_CHECK_CONFIGURE): Fix typo
+ in description.
+
+2003-02-25 Pavel Roskin <proski@gnu.org>
+
+ * bin/autoheader.in: Add missing newline when printing
+ suggestion how change AC_DEFINE call.
+
+2003-02-24 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Fix typo in
+ 2002-09-01 patch by replacing "test -n" with "test -z".
+ This fixes a bug found by Jeff Painter and reported by Tom Epperly in
+ <http://mail.gnu.org/archive/html/autoconf/2003-02/msg00139.html>.
+
+ * doc/autoconf.texi (Shell Substitutions): test -n -> test -z,
+ to fix a mismatch between example and discussion.
+
+2003-02-24 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Builtins): Add notes on printf
+ format starting with "-".
+
+2003-02-20 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * doc/autoconf.texi (Limitations of Make): `foo=bar make -e'
+ is not portable inside Makefile.
+
+2003-02-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL): When
+ compiler says yeah, but preproc says nope, compiler is right.
+ Conversely, prompt the reader to send a bug report to the
+ maintainers of the package, not of Autoconf.
+
+2003-02-20 Klee Dienes <kdienes@apple.com>
+
+ * bin/autoreconf.in (autoreconf_current_directory): Properly
+ handle an empty aclocal.m4.
+
+2003-02-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_PREFIX_PROGRAM): Quote
+ $ac_prefix_program.
+ From Larry Jones.
+
+2002-12-23 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY(C)): Define $1 to an
+ innocuous variant befor including <limits.h> or <assert.h>. This
+ works around a bug reported by Albert Chin: HP-UX 11i
+ (and earlier versions) have a <limits.h> that declares
+ gettimeofday and many other functions.
+
+2002-12-03 Paul Eggert <eggert@twinsun.com>
+
+ Version 2.57.
+
+ * NEWS, configure.ac: Update version.
+
+ * doc/fdl.texi: Upgrade to FDL version 1.2.
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY(C)): Use the function f
+ nontrivially in main's body, so that f's external declaration is
+ not optimized away in AIX. This should fix the bug reported by
+ Martin Frydl in
+ <http://mail.gnu.org/pipermail/autoconf/2002-November/014508.html>.
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY(C),
+ _AC_PROG_PREPROC_WORKS_IFELSE): Use <limits.h> if __STDC__ is
+ defined, to support freestanding compilers. This should fix the
+ bug reported by Momchil Velkov in
+ <http://mail.gnu.org/pipermail/autoconf/2002-November/014490.html>.
+
+ * doc/autoconf.texi (Obsolete Macros): Fix typos (insert empty
+ arg, AC_DEFINE -> AC_DEFINE_UNQUOTED) in documentation for
+ obsolete AC_CHECK_TYPE. The missing empty arg was reported
+ by Simon Josefsson in
+ <http://mail.gnu.org/pipermail/autoconf-patches/2002-December/008830.html>.
+
+ * Makefile.maint (www-gnu): New macro.
+ (standards.texi-url_prefix, make-stds.texi-url_prefix): Use it, as
+ the location has moved.
+
+2002-12-02 Martin Frydl <martin@systinet.com>
+
+ * bin/autom4te.in (at_flatten): rewritten to avoid M4 problem when
+ \(.*\) match is too long and there is something more to be checked.
+ <http://mail.gnu.org/pipermail/autoconf/2002-November/014524.html>
+
+2002-11-15 Akim Demaille <akim@epita.fr>
+
+ Version 2.56.
+
+ * config/install-sh: chmod +x.
+ From Paul Eggert.
+ * config/move-if-change: Indenting changes.
+ * Makefile.am (AUTOMAKE_OPTIONS): Move to...
+ * configure.ac (AM_INIT_AUTOMAKE): here.
+ Require 1.7.1.
+
+2002-11-14 Akim Demaille <akim@epita.fr>
+
+ Version 2.55.
+
+ * config/config.guess, config/config.sub, config/install-sh:
+ Update from masters.
+
+2002-11-14 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint: Sync with Bison, i.e.:
+ (po-check): Scan .l and .y files instead of the
+ .c and the .h files that they generate. This fixes the bug
+ reported by Tim Van Holder in:
+ <http://mail.gnu.org/pipermail/bison-patches/2002-November/001352.html>
+ Look for N_ as well as for _. Try to avoid matching #define for
+ N_ and _.
+ From Paul Eggert.
+
+2002-11-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (C Compiler): Compiling several files at once.
+ From Paul Eggert and Albert Chin-A-Young.
+
+2002-11-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (C Compiler): Solitary backslashes.
+ From Paul Eggert and Albert Chin-A-Young.
+
+2002-11-14 Kevin Ryde <user42@zip.com.au>
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY(C)): Initialize f=$1 rather
+ than assigning in main, to avoid HP cc +O3 optimizing it away.
+
+2002-11-12 Peter Eisentraut <peter_e@gmx.net>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Add -q
+ option. Process --recheck after parsing all options. Pass -q
+ option to configure on --recheck.
+ (AC_OUTPUT): Pass -q from configure to config.status.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Strip -q from
+ arguments to record.
+ * doc/autoconf.texi (config.status Invocation): Document
+ config.status -q option.
+
+2002-11-07 Alexandre Duret-Lutz <adl@gnu.org>
+
+ * bin/autoscan.in (scan_file): Scan Makefile.am too. Ignore
+ Makefile.in if Makefile.am exists.
+ (output): Strip `.am' from Makefiles. Don't
+ output AC_CONFIG_FILES if no Makefiles were found.
+
+2002-11-07 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (cvs_files): Add elisp-comp, mdate-sh.
+ (local_updates): New.
+ * Makefile.maint: Update, from CVS Bison.
+ (local_updates): New.
+
+2002-11-06 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_LANG_FUNC_LINK_TRY): Wrap the `f'
+ declaration in extern "C" too.
+ Reported by Roberto Bagnara.
+
+2002-11-06 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): Don't use grep
+ -w.
+ * doc/autoconf.texi (Limitations of Usual Tools): Grep -w.
+ Reported by Ezra Peisach.
+
+2002-11-05 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoheader.m4 (_AH_TEMPLATE_OLD, _AH_VERBATIM_OLD):
+ Remove.
+ We _have_ to stop using the old compatibility scheme that tried to
+ avoid useless backslashes because Libtool 1.4.3 contains a
+ AC_DEFINE([error_t], [int],
+ [Define to a type to use for \`error_t' if it is not
+ otherwise available.])
+ We _have_ to quote the single quote and backslashes with \. The
+ old compatibility scheme saw that ` was backslashed, and therefore
+ did not quote the single quote. Hence before this patch, Autoconf
+ was not compatible with Libtool.
+
+2002-11-04 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Set the following variables,
+ too: LC_ADDRESS, LC_IDENTIFICATION, LC_MEASUREMENT, LC_MONETARY,
+ LC_NAME, LC_PAPER, LC_TELEPHONE.
+ * doc/autoconf.texi (Special Shell Variables): Mention those vars.
+
+2002-11-04 Akim Demaille <akim@epita.fr>
+
+ Version 2.54c.
+
+ * Makefile.maint (update, cvs-update, po-update, do-po-update):
+ New.
+ * config/texinfo.tex: Update.
+
+2002-11-03 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf_current_directory): New, extracted
+ from...
+ (&autoreconf): here.
+ ($help, $make, &parse_args, &autoreconf_current_directory):
+ Support -m/--make.
+ * doc/autoconf.texi (autoreconf Invocation): Adjust.
+
+2002-10-31 Bruno Haible <bruno@clisp.org>
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_MALLOC_IF): Change message.
+ Change name of cache variable to ac_cv_func_malloc_0_nonnull.
+ (AC_FUNC_MALLOC): Change description of HAVE_MALLOC macro.
+ (_AC_FUNC_REALLOC_IF): Change message. Change name of cache variable
+ to ac_cv_func_realloc_0_nonnull.
+ (AC_FUNC_REALLOC): Change description of HAVE_REALLOC macro.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ The test suite was no longer checking for trailing envvars and files.
+
+ * tests/atspecific.m4 (AC_STATE_SAVE): Don't use quadrigraphs here.
+ (AT_CHECK_ENV): Make sure the `state-ls.before file exists.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/programs.m4 (AC_PROG_MAKE_SET): Use and display
+ `$(MAKE)' instead of '${MAKE}' to emphasize that we refer to the
+ Make variable, not a shell variable.
+ Suggested by Bruno Haible.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (load_configuration): Reject #args out of any
+ language.
+
+2002-10-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_MSG_LOG_CONFTEST): New.
+ (_AC_PREPROC_IFELSE, _AC_COMPILE_IFELSE, _AC_LINK_IFELSE)
+ (_AC_RUN_IFELSE): Use it.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_OBJEXT):
+ (_AC_COMPILER_EXEEXT_DEFAULT): Likewise.
+ * lib/autoconf/c.m4 (AC_LANG_SOURCE): Don't include confdefs.h,
+ inline it.
+
+2002-10-30 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&parse_args, $help): Support --no-cache.
+ * doc/autoconf.texi (autom4te Invocation): Adjust.
+ Suggested by Tim van Holder.
+
+2002-10-29 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Particular Functions): AC_FUNC_MALLOC and
+ AC_FUNC_REALLOC check for compatibility with glibc, not POSIX.
+ Problem reported by Bruno Haible.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Templates): Put also in words what the
+ pictures says to assist free style readers.
+ (Customizing autom4te): s/--cache=/--cache /.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_VFORK): Include stdlib.h and
+ sys/wait.h.
+ sparc_address_test returns void.
+ Use it with an argument, as prototyped.
+ From Bruno Haible.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Subdirectories): Cygnus dirs have
+ configure.in, not configure.ac.
+ Reported by Bruno Haible.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Deep Package): New test.
+ (Configuring subdirectories): Don't use a testSubDir as Autotest
+ now does it itself.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&parse_args, $help): Support --warnings.
+ * doc/autoconf.texi (Invoking autom4te): Rename as...
+ (autom4te Invocation): this, for consistency with the other nodes.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autom4te.in (Autoconf): s/automate/autom4te/.
+ Reported by Ralf Corsepius.
+
+2002-10-29 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_QUOTE): The warning about quoted
+ characters is a back as an `obsolete' warning now.
+ Reported by Ralf Corsepius.
+
+2002-10-28 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.54c.
+
+2002-10-28 Akim Demaille <akim@epita.fr>
+
+ Version 2.54b.
+
+ * tests/foreign.at (Libtool): Adjust to broken libtoolize.
+
+2002-10-28 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_CHECK_AUTOM4TE): Be robust to different
+ m4 executable names, and different GNU M4 version.
+ Reported by Ezra Peisach and Paul Jarc.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_VFORK): Really use
+ AC_RUN_IFELSE.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: More AC_MSG_FAILURE promotion.
+ * lib/autoconf/fortran.m4 (_AC_F77_NAME_MANGLING):
+ Die when a simple Fortran program cannot be compiled.
+ * lib/autoconf/lang.m4 (AC_LANG_CALL, AC_LANG_FUNC_LINK_TRY):
+ Issue a warning if no function is given.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Run Time): Document AC_RUN_IFELSE.
+ Move the documentation of AC_TRY_RUN to...
+ (Obsolete Macros): here.
+ Adjust all the old samples still using AC_TRY_RUN to AC_RUN_IFELSE.
+ (autoconf Invocation): Remove the duplicates with `invoking
+ autom4te'.
+ * lib/autoconf/headers.m4 (AC_HEADER_STDC): Don't use AC_TRY_RUN.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Likewise.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Generating Sources): Document AC_LANG_CALL
+ and AC_LANG_FUNC_LINK_TRY.
+ (Examining Libraries): Rename as...
+ (Running the Linker): this.
+ Document AC_LINK_IFELSE.
+ Move the documentation of AC_TRY_LINK and AC_TRY_LINK_FUNC to...
+ (Obsolete Macros): here.
+ * lib/autoconf/fortran.m4 (_AC_F77_NAME_MANGLING): Don't use
+ AC_TRY_LINK_FUNC nor AC_TRY_LINK.
+ * lib/autoconf/libs.m4 (AC_CHECK_LIB, AC_PATH_XTRA): Likewise.
+ * lib/autoconf/headers.m4 (AC_USG): Likewise.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_STDC): Don't use AC_TRY_CPP.
+
+ More `check config.log' messages.
+
+ * lib/autoconf/general.m4 (AC_MSG_FAILURE): New.
+ * doc/autoconf.texi (Printing Messages): Document it.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF): Use it when
+ appropriate.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT)
+ (_AC_COMPILER_EXEEXT_WORKS, _AC_COMPILER_EXEEXT_O)
+ (_AC_COMPILER_OBJEXT): Likewise.
+ * lib/autoconf/general.m4 (AC_RUN_IFELSE): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_LANG_PROGRAM_C_F77_HOOKS):
+ Likewise.
+ * lib/autoconf/c.m4 (AC_PROG_CPP, AC_PROG_CC, AC_PROG_CXXCPP):
+ Likewise.
+
+ Deprecate macros with unusual interfaces.
+
+ * lib/autoconf/general.m4 (AC_TRY_CPP, AC_TRY_LINK)
+ (AC_TRY_COMPILE, AC_TRY_RUN): AU_DEFUN'ed.
+
+ Document the new ones, and proper style.
+
+ * doc/autoconf.texi (Generating Sources): New.
+ Document AC_LANG_CONFTEST, AC_LANG_SOURCE, AC_LANG_PROGRAM.
+ (Examining Declarations): Rename as...
+ (Running the Preprocessor): this.
+ Document AC_PREPROC_IFELSE.
+ (Examining Syntax): Rename as...
+ (Running the Compiler): this.
+ (AC_FOO_IFELSE vs AC_TRY_FOO): New section.
+ (Obsolete Macros): Move the definition of AC_TRY_CPP and
+ AC_TRY_COMPILE here.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ Move sections around.
+
+ * doc/autoconf.texi (Customizing autom4te): Remove a lost
+ sentence.
+ Reported by Burno Haible.
+ (Language Choice): Now the first section of...
+ (Writing Tests): this section.
+ Make the introduction less C-centric.
+ (Guidelines, Test Functions): Move to...
+ (Writing Test Programs): this new section.
+ (Test Programs): Merge into...
+ (Run Time): this.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * lib/freeze.mk ($(AUTOM4TE_CFG)): Add a missing dependency on
+ autom4te.in that resulted in the need for two `make' runs.
+
+2002-10-27 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.54b.
+
+2002-10-25 Akim Demaille <akim@epita.fr>
+
+ Version 2.54a.
+
+ * Makefile.maint: Update from the Coreutils.
+ (AMTAR): Remove, obsolete.
+ (automake_repo): Update to redhat.com.
+ (cvs_file): New.
+ Adjust to the fact that ansi2knr is now hosted by Automake.
+ * Makefile.am (cvs_files): Add install-sh and mkinstalldirs.
+ * config/config.guess, config/mkinstalldirs, config/texinfo.tex:
+ Update from masters.
+ * lib/autoscan/Makefile.am (EXTRA_DIST, nodist_autoscanlib_DATA):
+ autoscan.pre is not to be installed, and autoscan.list is not to
+ be shipped.
+ (CLEANFILES): Add autoscan.list.
+ (autoscan.list): Disable the cache.
+ * bin/Makefile.am: Include freeze.mk.
+
+2002-10-25 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&load_configuration): Take the file as
+ argument.
+ (&parse_args): Handle -C, --cache.
+ ($help): Adjust.
+ (MAIN): Load ~/.autom4te.cfg and ./.autom4te.cfg.
+ * lib/autom4te.in (Autoconf): Pass --cache=autom4te.cache.
+ * doc/autoconf.texi (Invoking autom4te): Document --cache.
+ Now a subsection of...
+ (Using autom4te): This new section.
+ (Customizing autom4te): New.
+ (autom4te.cache): Adjust.
+
+2002-10-25 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Generic Headers): More information on how to
+ use AC_CHECK_HEADERS.
+
+2002-10-25 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.as, bin/autoconf.in, bin/autoupdate.in ($help):
+ Space changes.
+
+2002-10-25 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (output): Output AC_PREREQ.
+ (%needed_macros): Add AC_PREREQ so that configure.ac without one
+ be reported.
+
+2002-10-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Particular Headers): In AC_HEADER_STDBOOL,
+ document _Bool.
+
+2002-10-23 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (handle_traces): Handle @&t@ in traces.
+ Reported by Peter Eisentraut.
+
+2002-10-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_STDBOOL): Also look for the
+ type _Bool.
+ Fix a typo.
+ * doc/autoconf.texi (Particular Headers): Adjust according to Paul
+ Eggert's recommandations.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_STDBOOL): New, based on CVS
+ Bison, by Paul Eggert.
+ * doc/autoconf.texi (Particular Headers): Document it.
+
+2002-10-22 Aaron M. Ucko <amu@alum.mit.edu>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Avoid duplicates in
+ `$ac_configure_args'.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Use AC_CONFIG_HEADERS in examples.
+ (AC_ST_BLKSIZE, AC_ST_RDEV): Directly point to AC_CHECK_MEMBERS.
+ From Art Haas.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ Restore the 2002-10-11 Akim Demaille <akim@epita.fr> patch:
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL)
+ (AC_CHECK_HEADER, _AC_CHECK_HEADER_NEW,_AC_CHECK_HEADER_OLD): Restore.
+ (_AC_CHECK_HEADER_NEW): Rename as...
+ (AC_CHECK_HEADER): this.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Remove incorrect
+ words about HP-UX cmp: it was actually a user-written cmp.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Libtool): Don't check autoconf's stderr: there
+ are a few warnings.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM, _AH_VERBATIM_OLD):
+ Quote for Perl '' strings, not "".
+ * bin/autoheader.in: Invoke autoconf to get '' strings, not ""
+ strings.
+
+2002-10-22 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_QUOTE): The warning about quoted
+ characters is a syntax warning now.
+ (_AS_QUOTE): Accept $2 as list of characters to quote.
+ * lib/autoconf/autoheader.m4 (AH_VERBATIM, _AH_VERBATIM_OLD):
+ Quote for Perl, not sh.
+ * bin/autoheader.in: When $debug, report the file which is
+ `do'ne.
+ * tests/tools.at (autom4te, autoheader): Exercise @bar, not merely
+ `@', to tickle Perl's lists.
+ Reported by Carlos Velasco.
+
+2002-10-18 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (handle_m4): Pass --fatal-warning to m4, so that
+ missing included files _are_ errors.
+ Thanks to Alexandre Duret-Lutz.
+ * tests/tools.at (autom4te cache): Adjust.
+ * tests/atspecific.m4 (AT_CHECK_AUTOM4TE): New.
+ (AT_CHECK_M4SUGAR): Use it.
+ * tests/m4sugar.at (m4_warn, m4_require: circular dependencies):
+ Adjust.
+ * tests/tools.at (autom4te): Now it does exit 1.
+
+2002-10-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): Don't use cmp.
+ Fixes the `AC_ARG_VAR' test failures.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Don't use cmp.
+ * lib/freeze.mk (check-forbidden-patterns): New.
+ * lib/autoconf/Makefile.am, lib/autotest/Makefile.am
+ * lib/m4sugar/Makefile.am (check-local): Use it to catch `cmp'.
+ * doc/autoconf.texi (Limitations of Usual Tools): HP-UX' cmp and
+ /dev/null.
+ Reported months ago by H. Merijn Brand.
+
+2002-10-17 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (autoheader): Put randoms `@' to stress Perl.
+
+2002-10-16 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.maint (wget_files): Remove ansi2knr.c.
+ (ansi2knr.c-url_prefix): Remove.
+
+2002-10-16 Akim Demaille <akim@epita.fr>
+
+ Because of caching, some files that no longer exist and are no
+ longer required can still cause errors.
+ Reported by Alexandre Duret-Lutz.
+
+ * bin/autom4te.in (&parse_args): Do not prepend `--reload-state'
+ to frozen files in @ARGV, as @ARGV must remain being a list of
+ files. Rather, at M4 call sites, use this...
+ (&files_to_options): New function.
+ (&freeze): Use &error.
+ (&up_to_date): If a file that was included according to the cache
+ is no longer there, then the output is out dated.
+ (&main): Don't even check whether a file is up to date is anyway
+ --force is given.
+ * tests/tools.at (autom4te cache): New.
+
+2002-10-16 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.as: Kill dead options.
+ * bin/autoupdate.in (&parse_args): Kill old options.
+ * bin/autoreconf.in (&parse_args): Remove dead options.
+ Factor some code.
+ (&autoreconf): Report the directories we enter *and leave*, so
+ that error messages can be easily located, and use GNU Make
+ format, so that Emacs' compile mode understands us.
+ * lib/Autom4te/General.pm (&update_file): Use `verbose' to report
+ if some file was changed instead of `print'.
+ * bin/autoheader.in: Suggest AC_DEFINE with 3 args when needed.
+ (&parse_args): Remove the dead options.
+ * tests/atspecific.m4 (AT_CHECK_AUTOHEADER): Adjust to the new
+ autoheader's quiet mode.
+ (AT_CHECK_AUTOUPDATE): Likewise.
+ * tests/tools.at (autoupdate): Adjust.
+ * tests/semantics.at (AC_C_BIGENDIAN): Likewise.
+
+2002-10-11 Akim Demaille <akim@epita.fr>
+
+ No longer use CPP to check for the existing of headers: use CC to
+ check for compilability.
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_MONGREL)
+ (AC_CHECK_HEADER, _AC_CHECK_HEADER_OLD): Remove.
+ (_AC_CHECK_HEADER_NEW): Rename as...
+ (AC_CHECK_HEADER): this.
+
+ * lib/autotest/general.m4 (AT_INIT): Include the failed test
+ numbers in the Subject suggestion.
+
+2002-10-11 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/specific.m4 (AC_DECL_SYS_SIGLIST): Obsolete.
+ Suggest using AC_CHECK_DECLS instead.
+
+2002-10-11 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (AC_ARG_VAR): Have configure report the value
+ of `precious'.
+
+2002-10-11 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_SEPARATOR_PREPARE): Use $$ in the
+ file name to enable parallel executions.
+ From Sam Varshavchik.
+
+2002-10-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf): Run autopoint before the first
+ aclocal invocation, as Gettext macros might not be visible to
+ aclocal.
+ Instead of blindly running autopoint, scan configure.ac (not the
+ traces) for AM_GNU_GETTEXT_VERSION uses, as autopoint does.
+ Reported by Paul D. Smith.
+
+2002-10-08 Paul Eggert <eggert@twinsun.com>
+
+ Work around problems found when POSIXLY_CORRECT=1 is set.
+ None of this seems to have anything to do with POSIX, really,
+ but it's how Perl getopt works.
+ * bin/autom4te.in (parse_args): Configure GetOpt with
+ "permute", too.
+ * doc/autoconf.texi (Invoking autom4te):
+ --warning -> --warnings.
+ * lib/autom4te.in: --warning -> --warnings.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (autom4te.cache): New section.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autom4te.in (Autoscan-preselections, Autoreconf-preselections)
+ (Automake-preselections): Update.
+ * bin/autoreconf.in, bin/autoheader.in: Comment changes.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoscan/autoscan.pre: Move all the remaining rules to...
+ * lib/autoconf/c.m4, lib/autoconf/functions.m4,
+ * lib/autoconf/headers.m4, lib/autoconf/libs.m4,
+ * lib/autoconf/specific.m4, lib/autoconf/types.m4: here.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): Be robust to
+ users who use config.site to require for a cache: in this case,
+ the two last configure runs, using two different sets of
+ arguments, trigger a legitimate error.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (Functions Support, Functions and return Support):
+ New.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * bin/Makefile.am (ETAGS_SH, ETAGS_PERL): Update: ifnames and
+ autoheader are Perl programs.
+ (autoconf, autoheader, autoreconf, autoupdate, ifnames, autoscan)
+ (autom4te): Specify that the sources are in the $srcdir.
+ * doc/autoconf.texi (Installation Directory Variables): Adjust.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoscan/autoscan.pre (st_blksize, st_blocks, st_rdev)
+ (tm_zone): Move their rules to...
+ * lib/autoconf/types.m4: here, using AN_ macros.
+ * lib/autoscan/autoscan.pre (AWK, BISON, INSTALL, LEX, LN, MAKE)
+ (RANLIB, YACC, awk, bison, byacc, flex, gawk, install, lex, ln)
+ (make, mawk, nawk, ranlib, yacc): Similarly, move to...
+ * lib/autoconf/programs.m4: here.
+ * lib/freeze.mk (ETAGS_FOR_M4, ETAGS_FOR_M4SUGAR)
+ (ETAGS_FOR_AUTOCONF): New.
+ Use it.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoscan.m4: New file.
+ * lib/autoconf/autoconf.m4: Include it.
+ * lib/autoconf/functions.m4: Use AN_FUNCTION for all the functions
+ that were listed in the original autoscan.list.
+ * lib/autoconf/headers.m4: Similarly with headers.
+ * lib/freeze.mk (autoconf_m4f_dependencies): Add autoscan.m4.
+ (.m4.m4f): Don't pass --prepend-include, since that's done by
+ tests/autom4te itself.
+ * lib/autoscan/Makefile.am: Include freeze.mk.
+ (autoscan.list): New target --this file is no longer a source.
+ (autoscan.pre): New file.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (@kinds): Make them singular.
+ Adjust all uses.
+ (&init_tables): When --debug, report the list of rules to ease
+ tracking changes in autoscan.list.
+ * lib/autoscan/autoscan.list (function): Strip comments, sort.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoscan/functions, lib/autoscan/headers,
+ * lib/autoscan/identifiers, lib/autoscan/makevars,
+ * lib/autoscan/programs: Merge into...
+ * lib/autoscan/autoscan.list: this.
+ * bin/autoscan.in (&init_tables): Adjust.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoscan/functions, lib/autoscan/headers,
+ * lib/autoscan/identifiers, lib/autoscan/makevars,
+ * lib/autoscan/programs: Make the `kind' explicit, i.e., each
+ `functions' line is now prefixed with `function:'.
+ * bin/autoscan.in (&init_tables): Adjust.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ From now on, autoscan files must always map a macro name to a
+ word: there is no `default' macro for autoscan.
+
+ * bin/autoscan.in (&init_tables): Reject entries with no macro at
+ all.
+ * lib/autoscan/functions, lib/autoscan/headers: Make the macro
+ explicit.
+
+2002-09-28 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (%c_keywords): Remove.
+ (&used): Keep only track of the words we might be interested in.
+ (&output_kind): It is no longer needed to look for non active
+ checks.
+
+2002-09-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MBRTOWC): New, stolen from
+ jm_FUNC_MBRTOWC, by Paul Eggert, from the Coreutils 4.5.1.
+ * lib/autoscan/functions: Adjust.
+ * doc/autoconf.texi (Particular Functions): Adjust.
+
+2002-09-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about mv
+ from /tmp.
+ Thanks to Bill Moseley and Paul Eggert.
+ * lib/m4sugar/m4sh.m4 (AS_TMPDIR): $2 is the directory into which
+ the tmpdir must be created.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Have the tmp
+ dir be in the build tree, instead of $TMPDIR.
+
+2002-09-27 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in: Improve the comments.
+ (&parse_args): Drop obsolete undocumented options.
+ (&output_kind): Output warnings.
+ * lib/autoscan/functions: (dcgettext): Now trigger AM_GNU_GETTEXT.
+ (getwd): Trigger a warning.
+
+2002-09-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in: Clarify that -s is meaningless without -i.
+ Reported by Ralf Corsepius.
+ * doc/autoconf.texi (autoreconf Invocation): Likewise.
+
+2002-09-26 Akim Demaille <akim@epita.fr>
+
+ Single suffix rules and seperated dependencies are not portable.
+
+ * doc/autoconf.texi (Installation Directory Variables): Update.
+ (Limitations of Make): Some about `Single Suffix Rules and
+ Separated Dependencies'.
+ * bin/Makefile.am (autoconf, autoheader, autoreconf, autoupdate)
+ (ifnames, autoscan, autom4te): Un-factor into several rules.
+
+2002-09-25 Paul Eggert <eggert@twinsun.com>
+
+ * BUGS (Interoperability bugs): New section. Mention libtool
+ 1.4.2, configure.ac, and AC_CONFIG_AUX_DIR interoperability bug.
+
+2002-09-24 Paul Eggert <eggert@twinsun.com>
+
+ Fix a portability bug reported by Alexandre Duret-Lutz: Solaris 8
+ make handles suffix-rules differently from GNU make.
+
+ * bin/Makefile.am (SUFFIXES, .in): Remove.
+ (autoconf autoheader autoreconf autoupdate ifnames autoscan autom4te):
+ Move the body of the old .in rule here.
+
+2002-09-16 Akim Demaille <akim@epita.fr>
+
+ i960 compilers create `b.out' files by default.
+ Reported by Ralf Corsepius.
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT): Remove b.out files.
+ (_AC_COMPILER_EXEEXT_DEFAULT): Adjust to b.out.
+
+2002-09-13 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Particular Headers): Remove obsolete
+ reference to `struct timezone' in the description of
+ AC_HEADER_TIME.
+
+2002-09-13 Akim Demaille <akim@epita.fr>
+
+ Version 2.54.
+
+ * config/config.sub, config/config.guess: Update.
+ * Makefile.maint: Update from bits of the Coreutils 4.5.1.
+ * Makefile.am: Adjust.
+
+2002-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Suggest
+ reading config.log when the compiler is rejected.
+ Suggested by Guido Draheim.
+
+2002-09-13 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in: Don't use Cwd::chdir, since in its internals
+ (chdir_init) might hang when stat'ing mounted directories.
+ Reported by Vance Shipley.
+
+2002-09-12 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (&parse_args): Pass a reference to the lists, not
+ the lists.
+
+2002-09-12 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Defining Symbols): Present two different
+ prototypes for AC_DEFINE and AC_DEFINE_UNQUOTED to emphasize the
+ difference between 1 argument calls, and 2-3 argument calls.
+
+2002-09-12 Peter Eisentraut <peter_e@gmx.net>
+
+ * doc/autoconf.texi: Review grammar and punctuation.
+
+2002-09-11 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi: Fix minor formatting, spelling, and
+ grammatical typos.
+ (Defining Symbols): Explain that AC_DEFINE(var) defaults to 1, but
+ AC_DEFINE(var,,description) does not; and the AC_DEFINE(var) case
+ is obsolescent.
+
+2002-09-11 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Questions): Rename as...
+ (FAQ): this.
+ (Defining Directories): New.
+
+2002-09-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Making testsuite Scripts): Update.
+ Suggested by Nishio Futoshi.
+
+2002-09-09 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * doc/autoconf.texi (Making testsuite Scripts): Use `@@' where a
+ plain `@' is wanted.
+
+2002-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Keep the
+ `duplicates', since the algorithm was too naive and could keep
+ `--prefix=1 --prefix=2 --prefix=1' as `--prefix=1 --prefix=2', and
+ keep `--prefix foo --prefix bar' as `--prefix foo bar'.
+ Reported by Ralf Corsepius.
+ * tests/torture.at (Configuring subdirectories): Exercise these
+ cases.
+
+2002-09-09 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETLOADAVG): Use $srcdir when
+ looking for a replacement file.
+ * lib/autoconf/general.m4 (AC_CHECK_DECLS): Check that the
+ directory is relative.
+ * doc/autoconf.texi (Generic Functions): Clarify the replacement
+ directory definition.
+ Reported by Andreas Schwab and Jim Meyering.
+
+2002-09-06 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Setting Output Variables): Clarify what
+ precious variables are.
+ Suggested by Pontus Skoeld.
+
+2002-09-05 Akim Demaille <akim@epita.fr>
+
+ * bin/Makefile.am (autoconf, autoheader, autoreconf, autoupdate)
+ (ifnames, autoscan, autom4te): Since we don't only depend on
+ configure.ac variables (such as VERSION etc.), but also on prefix
+ and so forth, depend on Makefile, not configure.ac.
+ Reported by Alexandre Duret-Lutz.
+ * doc/autoconf.texi (Installation Directory Variables): Adjust.
+
+2002-09-05 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Make): HP-UX trailing backslashes
+ doesn't seem to be confined to ia64, just say "some versions".
+
+2002-09-04 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am, doc/Makefile.am: Remove pdf targets, handled by
+ Automake 1.6c.
+ * Makefile.am (maintainer-clean-local): Remove.
+ (MAINTAINERCLEANFILES): Remove COPYING.
+
+2002-09-03 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Configuration Commands): Remove obsolete
+ example for AC_CONFIG_COMMANDS_PRE. Problem reported by Marcus
+ Brinkmann.
+
+2002-09-03 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.53d.
+ * Makefile.am (AUTOMAKE_OPTIONS): Require 1.6c, i.e., CVS Automake
+ as of today, on Automake's team suggestion.
+
+2002-09-03 Akim Demaille <akim@epita.fr>
+
+ Version 2.53c.
+
+2002-09-02 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (parse_args): Don't honor AUTOM4TE_PATH and
+ SITE_MACRO_DIR.
+ * configure.ac: Disable SITE_MACRO_DIR.
+
+2002-09-02 Jim Meyering <meyering@lucent.com>
+
+ * doc/autoconf.texi (AC_SYS_POSIX_TERMIOS): Reflect renaming: s/am/ac/,
+ i.e., change am_cv_sys_posix_termios to ac_cv_sys_posix_termios.
+ Also, tweak grammar: s/make sure to/be sure to/.
+
+2002-09-02 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Builtins): Explain why logical
+ directory names are generally preferable to physical names.
+
+2002-09-02 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&update_file): s/die/error/.
+ Reported by Raja R. Harinath.
+ * bin/autoheader.in, bin/autoreconf.in, bin/autoscan.in,
+ * bin/autoupdate.in: Use error instead of die.
+
+2002-09-01 Paul Eggert <eggert@twinsun.com>
+
+ * tests/mktests.sh (ac_exclude_egrep, au_exclude_egrep): Use
+ ordinary shell concatenation rather than echo+tr+sed command that
+ runs afoul of a long-line-related sed bug in Solaris 8.
+
+ * bin/autoheader.in (parse_args): --warning -> --warnings.
+
+ * bin/autoconf.as: Work even if "ls" outputs "FOO not found" to
+ stdout, as traditional "ls" does.
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT,
+ _AC_COMPILER_EXEEXT_O): Likewise.
+ * doc/autoconf.texi (Limitations of Usual Tools): Add "ls".
+
+ * bin/autoconf.as: Add --prepend-include option. This patch was
+ applied to bin/autoconf.in in the 2002-07-17 patch by Mark D. Roth,
+ but bin/autoconf.in is generated automatically from bin/autoconf.as.
+
+ * bin/autoconf.in, configure: Regenerate.
+
+ * doc/autoconf.texi (Special Shell Variables): Mention
+ ENV, MAIL, MAILPATH, PS1, PS2, PS4. Index PWD.
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Unset ENV, MAIL,
+ MAILPATH and set PS1, PS2, PS4 to default values, to work
+ around bug in pre-3.0 UWIN ksh reported by Bruce Lilly.
+ For LC_ALL etc, first try to set to "C" as POSIX requires and as
+ the Autoconf documentation specifies; fall back to "unset" only if
+ this fails. Use a shell for-loop for this rather than an m4 loop,
+ to shorten the output script.
+
+2002-08-30 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Special Shell Variables): Mention POSIX
+ 1003.1-2001's requirements for CDPATH. Give a simpler workaround
+ for the CDPATH problem. Document PWD.
+ (Limitations of Builtins): Document the problem that "cd $foo" and
+ "ls $foo" may refer to different directories in shells conforming
+ to POSIX 1003.1-2001. Use PS1 rather than CDPATH for "unset"
+ example, since the old example is now out of date.
+
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR): Reject FOO if "cd
+ FOO" and "ls FOO" talk about different directories; this catches
+ problems when POSIX 1003.1-2001 "cd" fails due to symlink
+ spaghetti.
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Use AS_UNSET instead
+ of rolling our own unset.
+ (_AS_PREPARE): $as_unset CDPATH instead of AS_UNSETting it, since
+ in practice we needn't worry about CDPATH if unset doesn't work.
+
+ * Makefile.in, aclocal.m4, bin/Makefile.in,
+ config/Makefile.in, doc/Makefile.in, lib/Makefile.in,
+ lib/Autom4te/Makefile.in, lib/autoconf/Makefile.in,
+ lib/autoscan/Makefile.in, lib/autotest/Makefile.in,
+ lib/emacs/Makefile.in, lib/m4sugar/Makefile.in, man/Makefile.in,
+ tests/Makefile.in: Regenerate with Automake 1.6.3.
+
+ * config/config.guess, config/config.sub, config/mkinstalldirs:
+ Update.
+
+ * configure: Regenerate with self.
+
+2002-08-30 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Notes on "cc"
+ default output.
+
+2002-08-29 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * bin/autom4te.in (Request::load): Correctly test for "do" read
+ failure.
+
+2002-08-29 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&xqx): New.
+ (&xsystem): Use WIFEXITED and WEXITSTATUS instead of decoding $? by
+ hand, which is not portable.
+ (&error): New.
+ * bin/autom4te.in: Use them.
+ Use &error instead of die.
+ * tests/m4sugar.at (m4_warn, m4_require: circular dependencies):
+ Adjust.
+
+2002-08-17 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/fortran.m4 (AC_PROG_F77): Remove fc from the
+ default list of compilers to try, since it was long ago superseded
+ by the ksh fc builtin. Suggested by Steven G. Johnson.
+
+2002-07-31 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Invoking autom4te): End the option table,
+ fixing a bug introduced by the previous patch.
+ (Limitations of Make): Add a 'target lookup' subentry in the
+ 'VPATH' entry. Rewrite all `make' occurences as `@command{make}'.
+
+2002-07-29 Mark D. Roth <roth@feep.net>
+
+ * bin/autom4te.in: Remove --include-envvar and --site-macro-subdir
+ options and use $AUTOM4TE_PATH.
+ * doc/autoconf.texi: Remove documentation of autom4te
+ --include-envvar and --site-macro-subdir options and document
+ use of $AUTOM4TE_PATH.
+ * lib/autom4te.in: Remove --include-envvar and --site-macro-subdir
+ arguments from each language section.
+
+2002-07-29 Paul Eggert <eggert@twinsun.com>
+
+ * doc/install.texi: Include copyright symbol in copyright notice.
+
+ * Makefile.am (MAKEINFO): Remove; it's a user-specified macro.
+ Replace with:
+ (AM_MAKEINFOFLAGS): New macro.
+ * doc/Makefile.am (MAKEINFO, AM_MAKEINFOFLAGS): Likewise.
+ * Makefile.am (INSTALL): Use the new macros.
+ Use -o rather than --output, since "missing" does not grok --output.
+
+2002-07-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make): Escaped newlines in
+ comments do not always work. Never trust the exit status of
+ `make -k'.
+
+2002-07-24 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Make, Making testsuite Scripts):
+ Untabify, since tabs are not enjoyed by texi2dvi and makeinfo.
+
+2002-07-23 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_SEPARATOR_PREPARE):
+ Use PATH="/nonexistent;.", not PATH=".;.", as FreeBSD ksh2002
+ apparently treats PATH="nonexistent" as if it contained ".".
+ Bug reported by Stefan `Sec' Zehl.
+
+2002-07-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make): Mention the special
+ handling of the obj/ directory by BSD make.
+
+2002-07-20 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Make): Add HP-UX IA-64 trailing
+ backslashes.
+
+2002-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Function Portability): `exit'.
+ (Programming in M4sh): Ethymology of M4sh.
+
+2002-07-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (AC_LIBOBJ vs LIBOBJS): More about $U.
+
+2002-07-18 Akim Demaille <akim@epita.fr>
+
+ Version 2.53b.
+
+2002-07-18 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub: Update.
+
+2002-07-18 Akim Demaille <akim@epita.fr>
+
+ Handle LIBOBJS and LTLIBOBJS once for all, including Libtool's and
+ Automake's parts.
+
+ * lib/autoconf/general.m4 (_AC_LIBOBJS_NORMALIZE): New.
+ * lib/autoconf/status.m4 (AC_OUTPUT_COMMANDS_PRE): Call it.
+ * tests/semantics.at (AC_REPLACE_FUNCS): Adjust.
+
+2002-07-18 Akim Demaille <akim@epita.fr>,
+ Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_HEADERS): Install
+ _AC_AM_CONFIG_HEADER_HOOK for Automake 1.7.
+
+2002-07-17 Russ Allbery <rra@stanford.edu>
+
+ * doc/autoconf.texi (Initializing configure): Clarify the
+ description of the tarname default.
+
+2002-07-17 Andreas Buening <andreas.buening@nexgo.de>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_FORK): Don't set
+ ac_cv_func_fork_works before running _AC_FUNC_FORK, do it if the
+ latter was not run.
+
+2002-07-17 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (find_file): Browse the directories in
+ the order they are given.
+
+2002-07-17 Akim Demaille <akim@epita.fr>
+
+ * tests/wrapsh.as, tests/wrappl.as: Merge into...
+ * tests/wrapper.as: this.
+ * tests/Makefile.am, configure.ac: Adjust.
+
+2002-07-17 Mark D. Roth <roth@feep.net>
+
+ * configure.ac: Add --enable-site-macro-dir option.
+ * bin/Makefile.am: Expand @SITE_MACRO_DIR@.
+ * bin/autom4te.in: Add --prepend-include, --include-envvar, and
+ --site-macro-subdir options.
+ * bin/autoconf.in: Add --prepend-include option.
+ * bin/autoheader.in: Add --prepend-include option.
+ * bin/autoreconf.in: Add --prepend-include option.
+ * bin/autoscan.in: Add --prepend-include option.
+ * bin/autoupdate.in: Add --prepend-include option.
+ * doc/autoconf.texi: Document use of $AC_MACRO_PATH and site
+ macro directory, remove note that include path directories are
+ used in reverse order, and document --prepend-include option.
+ * lib/autom4te.in: Use --prepend-include instead of --include.
+ * tests/wrapsh.in: Use --prepend-include instead of --include.
+
+2002-07-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): `_' is allowed in
+ tarnames.
+ * doc/autoconf.texi (Initializing configure): Adjust.
+
+2002-07-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_REALLOC, _AC_FUNC_REALLOC)
+ (_AC_FUNC_MALLOC): New.
+ (AC_FUNC_MALLOC): Use the latter.
+ Define HAVE_MALLOC to 0 if broken.
+ * doc/autoconf.texi (Particular Functions): Adjust.
+
+2002-07-16 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_C_BACKSLASH_A): New.
+ * doc/autoconf.texi (C Compiler): Adjust.
+
+2002-07-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Properly set the ``header'' part.
+
+2002-07-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Systemology): Some about Darwin.
+
+2002-07-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/specific.m4 (AC_CYGWIN, AC_EMXOS2, AC_MINGW32):
+ Don't use AC_REQUIRE in AU_DEFUN.
+
+2002-07-09 Art Haas <ahaas@neosoft.com>
+
+ * doc/autoconf.texi: Use @enddots{} or @dots{} where appropriate.
+
+2002-07-02 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * bin/autoheader.in, bin/autom4te.in, bin/autoreconf.in,
+ bin/autoupdate.in, bin/ifnames.in, lib/Autom4te/General.pm,
+ lib/Autom4te/Struct.pm, lib/Autom4te/XFile.pm: Add local variables
+ so that Emacs setups GNU style for perl-mode and cperl-mode.
+
+2002-06-27 Paul Eggert <eggert@twinsun.com>
+
+ * config/install-sh: Quote $src. Prefer || to test's -o option,
+ as per "Limitations of Builtins".
+ * tests/atspecific.m4 (AT_CHECK_ENV): Likewise, for && vs test -a.
+ * tests/semantics.at (AC_C_BIGENDIAN): Likewise.
+
+ * tests/mktests.sh: Use grep instead of fgrep, as per
+ "Limitations of Builtins".
+
+2002-06-15 Paul Eggert <eggert@twinsun.com>
+
+ * tests/wrapsh.as (AUTOCONF, AUTOHEADER, AUTOM4TE, AUTOM4TE_CFG,
+ autom4te_perllibdir): Set to top build dir or src dir as appropriate,
+ so that we consistently test the just-built programs.
+ * tests/wrappl.as: Likewise.
+
+2002-06-12 Paul Eggert <eggert@twinsun.com>
+
+ * bin/autoconf.as (AUTOM4TE): Default to a fully qualified path
+ name, so that symlinks to 'autoconf' work properly. Bug reported
+ by Bruno Haible.
+ * bin/autoheader.in (AUTOM4TE): Likewise.
+ * bin/autoreconf.in (autoconf, autoheader): Likewise.
+ * bin/autoscan.in (autom4te): Likewise.
+ * bin/autoupdate.in (autom4te): Likewise.
+
+ * lib/autoconf/functions.m4 (_AC_LIBOBJ_FNMATCH): Also check for
+ btowc, to fix a portability bug with diffutils-2.8.2/lib/fnmatch.c
+ on Solaris 2.5.1.
+
+2002-06-11 Andreas Schwab <schwab@suse.de>
+
+ * doc/autoconf.texi: Add more dir entries.
+
+2002-06-10 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * bin/autom4te.in ($cache): Don't define using `$me', the name
+ of the cache should not depend on the name under which autom4te
+ was installed.
+
+2002-06-07 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (autoconf: forbidden tokens, basic)
+ (autoconf: forbidden tokens, exceptions): Adjust to the change of
+ words in autom4te.in.
+
+2002-06-07 Peter Eisentraut <peter_e@gmx.net>
+
+ * lib/autoconf/c.m4 (AC_LANG_PROGRAM(C)): Use
+ _AC_LANG_PROGRAM_C_F77_HOOKS.
+
+2002-06-07 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_REPLACE_FUNC_FNMATCH): Typo,
+ rename as...
+ (AC_REPLACE_FNMATCH): this.
+ * tests/mktests.sh (exclude_list): Exclude AC_REPLACE_FNMATCH,
+ AC_FUNC_FNMATCH_GNU.
+
+2002-06-07 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Systemology): Point to Tru64 docs, and the
+ Rosetta Stone for Unix.
+
+2002-06-07 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (warn_forbidden): When rejecting a token,
+ suggest m4_pattern_allow.
+ Suggested by Adam J. Richter.
+
+2002-06-07 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Initialize
+ ac_config_libobj_dir.
+ (AC_CONFIG_LIBOBJ_DIR): New.
+ * lib/autoconf/functions.m4 (_AC_FUNC_FNMATCH): Split into...
+ (_AC_FUNC_FNMATCH_IF, _AC_LIBOBJ_FNMATCH): these.
+ Use ac_config_libobj_dir to find the replacement files.
+ (AC_FUNC_FNMATCH, AC_FUNC_FNMATCH_GNU): Split into...
+ (AC_FUNC_FNMATCH, AC_FUNC_FNMATCH_GNU, AC_REPLACE_FNMATCH)
+ (AC_REPLACE_FNMATCH_GNU): these.
+ (AC_FUNC_GETLOADAVG): Use ac_config_libobj_dir.
+ * doc/autoconf.texi (Particular Functions, Generic Functions): Adjust.
+ * tests/mktests.sh (ac_exclude_list): Don't check
+ AC_FUNC_GETLOADAVG as it requires getloadavg.c which is not shipped.
+
+2002-06-06 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_LINKS): Fall back on cp
+ if ln doesn't work.
+ * NEWS: Likewise.
+ * doc/autoconf.texi (Configuration Links): Likewise.
+ (Limitations of Usual Tools): Prefer $(LN_S) to ln -s || ln.
+
+2002-06-05 Paul Eggert <eggert@twinsun.com>
+
+ * config/config.guess, config/config.sub, config/texinfo.tex:
+ Update from masters.
+
+2002-05-29 Paul Eggert <eggert@twinsun.com>
+
+ * bin/autom4te.in ($m4): Do not assume that egrep and fgrep exist.
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Likewise.
+ * lib/autoconf/general.m4 (_AC_RUN_LOG_STDERR, AC_EGREP_CPP):
+ Likewise.
+ * lib/autoconf/Makefile.am (check-local): Likewise.
+ * lib/autoconf/status.m4 (AC_CONFIG_HEADER): Likewise.
+ * lib/autoconf/types.m4 (commentary only): Likewise.
+ * lib/autotest/general.m4 (AT_INIT, AT_CHECK): Likewise.
+ * lib/autotest/Makefile.am (check-local): Likewise.
+ * lib/m4sugar/Makefile.am (check-local): Likewise.
+ * tests/atspecific.m4 (AT_CONFIGURE_AC, AT_CHECK_DEFINES): Likewise.
+ * tests/mktests.sh (egrep): New var; use it instead of plain egrep.
+
+ * lib/autoconf/programs.m4 (AC_PROG_EGREP, AC_PROG_FGREP): New macros.
+ * doc/autoconf.texi (Particular Programs): Document them.
+ (Limitations of Usual Tools): Warn that egrep and fgrep may not exist.
+ * NEWS: Likewise.
+
+2002-05-27 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/types.m4 (AC_TYPE_MBSTATE_T): New macro.
+ * NEWS, doc/autoconf.texi (Particular Types): Document it.
+ * lib/autoconf/functions.m4 (_AC_FUNC_FNMATCH): Require it
+ instead of AC_MBSTATE_T, which never existed.
+
+2002-05-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Hosts and Cross-Compilation): Specify the
+ version of Autoconf that is discussed.
+
+2002-05-22 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/fortran.m4 (AC_PROG_F77): Remove cf77 and cft77
+ from the default list of compilers to try. Suggested by
+ Kate Hedstrom.
+ * NEWS: Document the above.
+ * doc/autoconf.texi (Fortran 77 Compiler): Don't suggest cf77.
+
+2002-05-17 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/types.m4 (AC_CHECK_MEMBER): Work correctly even if
+ the member is itself an aggregate. Bug reported by Sergey Poznyakoff.
+ This improves on an earlier suggestion by H. Peter Anvin.
+
+2002-05-16 Paul Eggert <eggert@twinsun.com>
+
+ AC_FUNC_FNMATCH now tests only for POSIX compatibility.
+ AC_FUNC_FNMATCH_GNU also tests for GNU extensions.
+ Both macros now accept an optional source-dir arg.
+ New macro AC_GNU_SOURCE to define _GNU_SOURCE.
+
+ * NEWS: Document this.
+ * doc/autoconf.texi (Particular Functions, UNIX Variants): Likewise.
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_FNMATCH): New macro.
+ (AC_FUNC_FNMATCH): Use it. Test only for POSIX conformance,
+ not for GNU extensions; this undoes part of the 2000-11-03 change,
+ reverting to 2.13-compatible behavior.
+ Add new optional argument DIR.
+ (AC_FUNC_FNMATCH_GNU): New macro.
+
+ * lib/autoconf/specific.m4 (AC_GNU_SOURCE): New macro.
+
+2002-05-08 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/headers.m4 (AC_HEADER_TIOCGWINSZ):
+ Don't require AC_SYS_POSIX_TERMIOS. The test is unnecessary,
+ and it causes a 'test' syntax error if it fails.
+ Bug reported by Stephen Gildea.
+
+ * lib/autoconf/functions.m4 (AC_FUNC_SETVBUF_REVERSED):
+ If prototypes are supported, use them to check this at compile-time,
+ instead of trying to check it at run-time. If we must do a run-time
+ check, assume that setvbuf is standard when cross-compiling, as
+ nonstandard setvbuf occurs only on ancient and unlikely hosts.
+ Bug reported by Paul D. Smith.
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETLOADAVG): Add optional
+ argument specifying location of getloadavg.c. This removes a
+ FIXME. This idea was taken from Jim Meyering's implementation in
+ textutils.
+ * doc/autoconf.texi (Particular Functions): Document this.
+ Also, mention HAVE_NLIST_H rather than NLIST_STRUCT, since
+ that's what the code does; this fixes a bug reported by
+ Paul D. Smith.
+
+2002-05-03 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (autoreconf): Rewrite to use Gettext's
+ autopoint instead of gettextize.
+ ($uses_alocal): Rename as...
+ ($uses_aclocal): this.
+ * doc/autoconf.texi (autoreconf Invocation): Adjust.
+ Suggested by Bruno Haible.
+
+2002-05-03 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_map_sep): New.
+
+2002-04-29 Paul Eggert <eggert@twinsun.com>
+
+ * bin/autoreconf.in (autoreconf): Don't age aclocal.m4's input
+ files to be 1 second older; just set them to be the same time.
+ Also, sleep 1 second after the first aclocal, to work around
+ problems with sub-second time stamps on the input files.
+
+2002-04-29 Thien-Thi Nguyen <ttn@gnu.org>
+
+ * doc/autoconf.texi: Mention "set -e -x" lossage
+ under node "Limitations of Builtins".
+
+2002-04-29 Akim Demaille <akim@epita.fr>
+
+ * doc/install.texi: Better wording for setting variables when
+ running configure.
+ From Christian Cornelssen.
+
+2002-04-29 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (LINENO): If testsuite itself is rewritten because
+ of lack of $LINENO support, then the test will compare the $LINENO
+ in testsuite vs. the lineno in the test file. This is wrong, of
+ course.
+ Be sure to protect it.
+ Reported by Patrick Welche.
+
+2002-04-25 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Obsolete Macros): Typo.
+ Reported by Vladimir Volovich.
+
+2002-04-25 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (autoreconf): Don't let aclocal.m4 be older
+ than some of the input files, hence, on the second run of aclocal,
+ if some of its input are younger, make them older.
+ Suggested by Paul Eggert.
+
+2002-04-25 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): sed and `!'.
+ Thanks to Paul Eggert.
+
+2002-04-25 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Let ac_subst_files
+ and ac_subst_vars be sh variables containing the list of
+ AC_SUBST_FILES'ed and AC_SUBST'ed identifiers. Output them in the
+ DEFAULT diversion.
+ (_AC_INIT_PREPARE): Use them to log them.
+ (_AC_SUBST, _AC_SUBST_SED_PROGRAM): Remove.
+ (AC_SUBST, AC_SUBST_FILE): Instead of buliding the
+ _AC_SUBST_SED_PROGRAM, store the list of output files/variables in
+ _AC_SUBST_FILES and _AC_SUBST_VARS.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Adjust.
+
+2002-04-24 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (autoreconf): Run automake after autoconf and
+ autoheader, so that automake does not complain about a missing
+ config.h.in that was to be created.
+
+2002-04-23 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in (parse_args): --warning takes an argument.
+ Fixes PR/220.
+
+2002-04-22 Peter Eisentraut <peter_e@gmx.net>
+
+ * lib/autoconf/general.m4 (_AC_RUN_IFELSE): Remove gmon.out
+ and bb.out when cleaning up.
+
+2002-04-22 Akim Demaille <akim@epita.fr>
+
+ Version 2.53a.
+
+2002-04-22 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (LINENO): Fix the Zsh skip pattern.
+
+2002-04-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Pretty Help Strings): Remove a spurious
+ comma.
+ Reported by Gregory Giannoni.
+
+2002-04-22 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (LINENO): Skip the test if LINENO cannot be unset.
+ Fixes false failures on Darwin.
+
+2002-04-21 Paul Eggert <eggert@twinsun.com>
+
+ * TODO, bin/autoupdate.in, doc/autoconf.texi,
+ lib/autoconf/general.m4, lib/autoconf/libs.m4,
+ lib/autoconf/status.m4, lib/m4sugar/m4sugar.m4, tests/m4sh.at,
+ tests/tools.at: Minor spelling and grammar fixes.
+
+2002-04-20 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Shell Substitutions): Fix typos in yesterday's
+ ZSH_VERSION fixes. Bug reported by Raja R Harinath.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * tests/atgeneral.m4 (AT_INIT): Likewise.
+
+2002-04-19 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS, TODO, bin/autom4te.in, bin/autoreconf.in, bin/autoupdate.in,
+ doc/autoconf.texi, lib/freeze.mk, lib/Autom4te/Struct.pm,
+ lib/autoconf/autoheader.m4, lib/autoconf/c.m4,
+ lib/autoconf/functions.m4, lib/autoconf/general.m4,
+ lib/autoconf/lang.m4, lib/autoconf/libs.m4, lib/autoscan/identifiers,
+ lib/autotest/general.m4, lib/m4sugar/m4sh.m4, tests/atgeneral.m4,
+ tests/atspecific.m4, tests/semantics.at, tests/torture.at:
+ Minor spelling and grammar fixes.
+
+ * doc/autoconf.texi: Follow the outline suggested in the GNU
+ Sample Texts sections of the Texinfo 4.2 manual. Most
+ importantly, this makes sure that the copyright notices appear in
+ all output formats. You probably need Texinfo 4.2 to generate
+ the manual now.
+
+ Fix some bugs when using "$@" when there might be zero positional
+ arguments in cases where this matters.
+
+ * bin/autoconf.as: Rewrite so that the problem does not come up.
+ * lib/autoconf/programs.m4 (AC_CHECK_PROG): Likewise.
+ * lib/autoconf/status.m4 (AC_OUTPUT): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+
+ * bin/autoheader.in: Use 'case' statement to work around problem.
+ * bin/auto4mte.in: Likewise.
+ * bin/autoreconf.in: Likewise.
+ * bin/autoscan.in: Likewise.
+ * bin/autoupdate.in: Likewise.
+ * bin/ifnames.in: Likewise.
+
+ * doc/autoconf.texi (Shell Substitutions): Document the problem.
+
+ * lib/autotest/general.m4 (AT_INIT):
+ Use Zsh alias to work around problem.
+ * tests/atgeneral.m4 (AT_INIT): Likewise.
+
+ * tests/c.at: We can't have zero arguments, so remove workaround
+ that is not portable to Zsh.
+
+2002-04-19 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * bin/autoupdate.in (handle_autoconf_macros): Honor AU_DEFUNs
+ from aclocal.m4 too.
+
+2002-04-12 Akim Demaille <akim@epita.fr>
+
+ * tests/wrappl.as: New, M4sh precursor of wrappl.in.
+
+2002-04-10 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Install the Zsh
+ workaround for ${1+"$@"}.
+ * doc/autoconf.texi (Shell Substitutions): Explain it.
+ From Oliver Kiddle and Peter Stephenson.
+
+ Have M4sh perform minimal shell sanitizing.
+
+ * lib/m4sugar/m4sh.at (AS_SHELL_SANITIZE): Split the `_AS_PREPARE_*'
+ part into...
+ (_AS_PREPARE): this new macro.
+ (AS_PREPARE): New.
+ (AS_INIT): Invoke AS_SHELL_SANITIZE.
+ * tests/m4sh.at (AT_DATA_LINENO): Use _AS_PREPARE.
+
+ Adjust Autoconf and Autotest.
+
+ * lib/autoconf/general.m4 (_AC_INIT_DEFAULTS): Don't invoke
+ AS_SHELL_SANITIZE, AS_INIT did it, but invoke AS_PREPARE.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS):
+ Invoke _AS_PREPARE (not AS_PREPARE) in addition to
+ AS_SHELL_SANITIZE.
+
+ Use this M4sh to generate Autoconf's shell scripts.
+
+ * tests/wrapsh.as: New, precursor of wrapsh.in.
+ * tests/Makefile.am: Include lib/freeze.mk to get the dependencies
+ on Autotest and M4sh.
+ ($(TESTSUITE)): Use $(autotest_m4f_dependencies).
+ (wrapsh.in): New target.
+ * bin/autoconf.as: New, precursor of autoconf.in.
+ (autoconf.in): New target.
+
+2002-04-09 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make): Mention the issue
+ with indented comments in rules.
+
+2002-04-09 Andreas Schwab <schwab@suse.de>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Handle empty
+ ac_top_builddir when setting ac_abs_top_builddir.
+
+2002-04-06 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Systemology): Add link to Unix V7 online docs.
+ (Portable Shell): Cross reference to Systemology.
+
+2002-04-05 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (autoreconf): Be sure to accumulate the
+ directories when descending in a SUBDIRS.
+ Reported by Ezra Peisach.
+
+2002-04-04 Andreas Schwab <schwab@suse.de>
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Only simplify if path
+ contains no literal separators.
+
+2002-04-03 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_CONFIG_FILE, _AC_CONFIG_HEADER)
+ (_AC_CONFIG_COMMAND, _AC_CONFIG_LINK): New.
+ Use dnl, not the KILL diversion.
+ Extracted from...
+ (AC_CONFIG_FILES, AC_CONFIG_HEADERS, AC_CONFIG_COMMANDS)
+ (AC_CONFIG_LINKS): here.
+ Adjust.
+ Don't use the KILL diversion, as it kills spurious output, which
+ results in failures being hidden.
+ Use m4_defn where appropriate.
+ (AC_CONFIG_IF_MEMBER): Kill the real bug: a spurious parenthesis
+ after the second argument.
+ Use m4_defn.
+ * lib/autom4te.in (Autoconf, Autotest, M4sh): Don't pass --warning
+ syntax, as it is provided by M4sugar.
+ * tests/torture.at (Multiple AC_CONFIG_FILES): New.
+
+2002-04-03 Andreas Schwab <schwab@suse.de>
+
+ * lib/m4sugar/m4sugar.m4 (m4_bmatch): Make sure m4_bregexp is not
+ expanded if $# <= 2.
+
+ * bin/autoreconf.in (autoreconf): Run automake after rerunning
+ aclocal.
+
+2002-04-03 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_OBJEXT_REJECT)
+ (_AC_COMPILER_EXEEXT_REJECT): New.
+ Also recognize *.bb and *.bbg as compilation byproducts.
+ (_AC_COMPILER_EXEEXT_DEFAULT, _AC_COMPILER_EXEEXT_O)
+ (_AC_COMPILER_OBJEXT): Use them.
+ Fixes Debian #138666.
+
+2002-04-02 Peter Eisentraut <peter_e@gmx.net>
+
+ Integrate AC_PROG_CC_STDC into AC_PROG_CC.
+
+ * lib/autoconf/c.m4 (AC_PROG_CC_STDC): Rename to _AC_PROG_CC_STDC.
+ AU_DEFUN old name. Use _AC_COMPILE_IFELSE.
+ (AC_PROG_CC): Call _AC_PROG_CC_STDC.
+ (AC_C_INLINE): Do not require AC_PROG_CC_STDC.
+ (AC_C_CONST): Same.
+ (AC_C_INLINE): Same.
+ (AC_C_PROTOTYPES): Same. Require AC_PROG_CC instead.
+ * doc/autoconf.texi, NEWS: Document.
+ * tests/mktests.sh (au_exclude_list): Add AC_PROG_CC_STDC and
+ AC_C_CROSS.
+
+2002-04-02 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Invoke
+ _AS_MKDIR_P_PREPARE.
+
+2002-03-28 Kevin Ryde <user42@zip.com.au>
+
+ * lib/autoconf/c.m4 (AC_C_INLINE): Test with a typedef return value,
+ to avoid versions of HP C which don't allow that.
+
+2002-03-27 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_BASENAME_PREPARE): New macro.
+ (AS_SHELL_SANITIZE): Invoke it.
+ (AS_BASENAME): AS_REQUIRE it, and use $as_basename.
+
+2002-03-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Portable Shell): Add pointers to FAQs.
+
+2002-03-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Introduction): The GNATS base moved.
+
+2002-03-25 Paul Eggert <eggert@twinsun.com>
+
+ * tests/m4sh.at: Don't rely on "PATH=test:$PATH test-1" working
+ as POSIX requires, as it doesn't work with Zsh.
+ * doc/autoconf.texi (Assignments): Document the problem.
+
+2002-03-25 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make): Mention more issue
+ about VPATH, overriding of macros in sub-makes, and handling of
+ SHELL.
+
+2002-03-21 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Here-Documents): Mention Solaris 8 dtksh
+ problem with here-document buffer boundaries.
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Unset ENV and BASH_ENV
+ when reinvoking the shell, to work around problems with installers
+ who put strange things like "cd" commands in their environments.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.at (AC_C_BIGENDIAN): s/unknow/unknown/.
+ From Aaron Ucko.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (scan_file): Specify the location in `&used'
+ invocations.
+ From Nicolas Joly.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Adjust @code/@command, @xref/@ref usage.
+ From Nishio Futoshi.
+
+2002-03-19 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_define_default, m4_fst, m4_map): New.
+
+2002-03-18 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Programming in M4sh): Add AS_MKDIR_P.
+ (Limitations of Usual Tools): Add mkdir section.
+
+ * lib/m4sugar/m4sh.m4 (_AS_MKDIR_P_PREPARE): New macro.
+ (AS_MKDIR_P): Require it. Use mkdir -p if available, falling
+ back on AS_DIRNAME to compute prefixes otherwise; this is
+ roughly what mkinstalldirs does. That way, we need not have
+ our own filename disassembler. The old disassembler did not
+ work with Solaris 8 dtksh, which is ksh Version M-12/28/93d.
+
+ * lib/autotest/general.m4 (AT_INIT, AT_CLEANUP):
+ Create at_test_all by a series of assignments,
+ not by a single assignment of a long string. The latter causes ksh
+ version 11/16/88g to silently misbehave on OpenServer 5.0.6a,
+ presumably because of a buffer overrun.
+
+2002-03-14 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autotest/general.m4 (at_times_skip):
+ Renamed from at_times. Now a boolean.
+ ksh93 Version M-12/28/93d doesn't like 'x=times; $x'; it
+ says 'times: not found'.
+
+2002-03-14 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&study_gettextize): New.
+ (&autoreconf): Handle newest gettextize.
+ Rerun aclocal if needed.
+ Suggested by Andreas Schwab.
+
+2002-03-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Special Shell Variables): More about IFS.
+
+2002-03-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Header Portability): New.
+ Add information about stdint.h and inttypes.h from Paul Eggert.
+
+2002-03-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Some about `cp
+ -p'.
+ From Bob Proulx.
+
+2002-03-12 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_BASENAME_EXPR): AS_REQUIRE, not
+ m4_require.
+
+2002-03-11 Andreas Schwab <schwab@suse.de>
+
+ * configure.ac: Explicitly check for EMACS since AM_PATH_LISPDIR
+ does not do it if --with-lispdir is given.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ Version 2.53.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Subdirectories): Clarify that the
+ subdirectory should exist.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): 1.6.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&handle_m4): Do not foreach with `$_' as it
+ aliases the actual variables, and modifications of the former
+ affect the latter.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&handle_m4): Protect us from corrupted file
+ because of C-c: have m4 output in tmp files, then mv them.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.in, bin/autoheader.in, bin/autom4te.in,
+ * bin/autoreconf.in, bin/autoscan.in, bin/autoupdate.in,
+ * bin/ifnames.in: Copyright update.
+
+2002-03-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Invoking autom4te): New.
+
+2002-03-05 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Specifying Names): Clarification suggested by
+ Kevin Ryde.
+
+2002-03-05 Akim Demaille <akim@epita.fr>
+
+ Version 2.52i.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (AC_LIBOBJ vs. LIBOBJS): New.
+ * lib/autoconf/general.m4 (AC_INIT): More informative error
+ message for LIBOBJ.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * lib/freeze.mk ($(build_libdir)/m4sugar/version.m4): New, for
+ parallel builds.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Transforming Names): Equality between target
+ and host is irrelevant.
+ (Specifying Names, Canonicalizing): Remove all references to the
+ backward compatibility hooks. Rather, collect them all into...
+ (Hosts and Cross-Compilation): this new section.
+ * doc/install.texi (System Type): Ditto.
+ * lib/autoconf/general.m4 (AC_CANONICAL_HOST): Explicitly state
+ that `--host' implies cross-compilation.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Evaluation Macros): New.
+ * lib/m4sugar/m4sugar.m4 (m4_lquote): Remove, it is totally
+ useless.
+ (_m4_foreach): Define the variant with immediate evaluation so
+ that it contains exactly the items, not an expression which
+ evaluation is the current item.
+ (m4_re_string, m4_re_word): Don't over quote them.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ Instead of having stacking `shift's evaluated at the end, let
+ `foreach' loops immediately evaluate them.
+
+ * lib/m4sugar/m4sugar.m4 (m4_quote, m4_dquote): Use $@ rather than
+ $*. This is the n-th time I change my mind, but hopefully this is
+ the last...
+ (m4_lquote): New.
+ (m4_text_wrap): Use m4_foreach, which is finally correct _and_
+ efficient.
+ (m4_foreach_quoted, m4_car_quoted, _m4_foreach_quoted): Remove, as
+ it was only a hack for m4_text_wrap.
+ (m4_car2): Remove, replaced by...
+ (m4_cdr): New.
+ (_m4_foreach): Adjust.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Adjust, and use
+ m4_bpatsubst for clarification.
+
+2002-03-04 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Changequote is Evil): New.
+
+2002-03-03 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Portable Shell): Mention 32-byte #! length limit
+ on old systems like SunOS.
+
+2002-03-01 Peter Eisentraut <peter_e@gmx.net>
+
+ * lib/autoconf/c.m4, lib/autoconf/fortran.m4,
+ lib/autoconf/functions.m4, lib/autoconf/general.m4,
+ lib/autoconf/headers.m4, lib/autoconf/lang.m4,
+ lib/autoconf/programs.m4, lib/autoconf/status.m4: Improve spelling
+ of messages.
+
+2002-02-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Suggest a title to the
+ message to be sent.
+
+2002-02-28 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Add va_copy and va_list.
+
+2002-02-25 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_SETPGRP): Fix the test.
+ From Akinori Musha.
+
+2002-02-13 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/Autom4te/XFile.pm (getline, getlines): New functions,
+ translate \r\n to \n.
+
+2002-02-07 Akim Demaille <akim@epita.fr>
+
+ Version 2.52h.
+
+2002-02-07 Akim Demaille <akim@epita.fr>
+
+ Fix Autoconf PR/209.
+ Also reported by Frank Denis.
+
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Don't over quote.
+
+2002-02-07 Akim Demaille <akim@epita.fr>
+
+ Fix Autoconf PR/207:
+ AC_PREFIX_PROGRAM fails with dashed program names
+
+ * lib/autoconf/general.m4 (AC_PREFIX_PROGRAM): Just use a fresh
+ variable when looking for the prefix program.
+ Now it also works for shell variables.
+
+2002-02-07 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): More about
+ case/esac.
+
+2002-02-06 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_COMMANDS): Don't output empty
+ case/esac, some shells don't support it.
+ Reported by Zack Weinberg.
+ * tests/torture.at (AC_CONFIG_COMMANDS with empty commands): New.
+
+2002-02-06 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): When handling --keywords, be
+ sure not to introduce newlines in at_groups.
+ * lib/autotest/Makefile.am (autotest.m4f): Typo.
+
+2002-02-06 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): Skip if aclocal
+ is not available.
+
+2002-02-05 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Specific Compiler Characteristics):
+ Describe HP-UX cc bug workaround more accurately.
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF): Cast to long,
+ not unsigned long.
+ * tests/semantics.at (AC_CHECK_SIZEOF): Check non-GCC
+ cross-compilers, too. This undoes some of the most recent change
+ to this file.
+
+2002-02-05 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (check_SCRIPTS): Use it, instead of WRAPPERS,
+ to make sure they are up to date when `check' is run.
+
+2002-02-05 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Making testsuite Scripts): Document
+ package.m4.
+
+2002-02-05 Akim Demaille <akim@epita.fr>
+
+ * lib/freeze.mk: New.
+
+2002-02-05 Akim Demaille <akim@epita.fr>
+
+ Implement `autom4te --freeze'.
+
+ * bin/autom4te.in (&freeze): New.
+ * lib/autoconf/autoconf.m4, lib/autotest/general.m4,
+ * lib/m4sugar/m4sh.m4: Don't include files given by autom4te.
+
+2002-02-05 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&parse_args): Implement `frozen files are
+ optional are the sum of the previous files on the command line'.
+ Also, pass `--reload-state=' on them, so...
+ (handle_m4): don't.
+ * lib/autom4te.in (Autotest, Autoconf): Rely on M4sh.
+ (M4sh): Rely on M4sugar.
+ (Autotest, M4sh, M4sugar): Use frozen files.
+
+2002-01-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Accept $4.
+ * doc/autoconf.texi (Initializing configure): Adjust.
+
+2002-01-30 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Map non
+ alphanumeric to `-' instead of `_'.
+
+2002-01-30 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.at (AC_CHECK_SIZEOF): Split into two tests: one
+ for plain code, the other for cross-compilation code. The latter
+ is now run with GCC only.
+ * doc/autoconf.texi (Compilers and Preprocessors): New.
+
+2002-01-30 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Support pre-defined
+ values.
+ * doc/autoconf.texi (Initializing configure): Explain how to
+ change AC_INIT default values.
+
+2002-01-29 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): Use configure.in,
+ so that aclocal 1.4 works.
+ Reported by Alexandre Duret-Lutz and Larry Schmitt.
+
+2002-01-28 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Writing testsuite.at): AT_CLEANUP no longer
+ needs an argument.
+
+2002-01-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't be ridiculous: adjust
+ AUTOTEST_PATH *after* it was set.
+ Don't put `.' in the PATH: the user should be precise and `./' if
+ needed. In addition, given that the test suite does some `cd', if
+ `.' is in the path, the `tested programs' sections will report
+ programs found in the test suite's directory, while during the
+ tests (performed in their own directory), these programs are no
+ longer visible. In other words, the results is confusing and
+ useless.
+ * tests/m4sh.at: Adjust: don't rely on `.' being in the PATH.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ Version 2.52g.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in, bin/autoconf.in, bin/autoscan.in,
+ * doc/autoconf.texi: Finally add Akim as an author.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Use PATH_SEPARATOR.
+ (_AS_PATH_SEPARATOR_PREPARE): Don't expect $SHELL to be
+ Bourne. Use /bin/sh.
+ From Andreas Buening.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, config/texinfo.tex:
+ Update from masters.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): 1.5b.
+ * config/auxdir.m4, config/cond.m4, config/depend.m4,
+ * config/init.m4, config/install-sh.m4, config/lispdir.m4,
+ * config/missing.m4, config/sanity.m4, config/select.m4,
+ * config/strip.m4: Remove, to ease sync'ing with any version of
+ Automake.
+
+2002-01-24 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS)
+ (_AC_INIT_PREPARE): Support -n as --no-create, as documented.
+ Reported by Geir Ove Myhr.
+
+2002-01-21 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_MMAP): #Undef malloc.
+
+2002-01-21 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (getopt): Use a more GNUish error
+ message on invalid options.
+ * bin/autom4te.in (parse_args): Don't use
+ Autoconf::General::getopt with non valid options.
+
+2002-01-17 Jim Meyering <meyering@lucent.com>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Initialize
+ $ac_cv_exeext so we don't use an old, invalid, cached value.
+
+2002-01-11 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_STRNLEN): New, from Jim
+ Meyering.
+ * doc/autoconf.texi (Function Portability): Document the strnlen
+ limitation.
+ (Particular Functions): Document AC_FUNC_STRNLEN.
+ * lib/autoscan/functions: Adjust.
+
+2002-01-06 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Don't create
+ package.m4, since is really depends upon configure.ac, not
+ configure.
+ * doc/autoconf.texi (testsuite Scripts): Adjust.
+ * tests/Makefile.am (package.m4): New.
+ EXTRA_DIST it since its a source.
+
+2002-01-06 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PARSE_ARGS): Move the AC_SUBST
+ of PACKAGE_NAME, PACKAGE_TARNAME, PACKAGE_VERSION, PACKAGE_STRING,
+ and PACKAGE_BUGREPORT from here...
+ (_AC_INIT_DEFAULTS): to here, since it is unrelated to the
+ arguments.
+ (_AC_INIT_PREPARE): AC_DEFINE these symbols.
+ * lib/autotest/general.m4: Use AT_PACKAGE_*, not PACKAGE_*.
+ (AT_INIT): No longer catch `^PACKAGE_(BUGREPORT|STRING)$'.
+ * tests/tools.at (autoheader): Adjust.
+ * tests/atspecific.m4 (AT_CHECK_DEFINES): Adjust.
+
+2002-01-06 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (scan_file): Use `&used'.
+
+2002-01-03 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Output): Improved wording regarding use of
+ AC_OUTPUT.
+ From Olly Betts.
+
+2001-12-18 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Add notes on sscanf
+ sometimes needing writable input.
+
+2001-12-17 Jim Meyering <meyering@lucent.com>
+
+ * doc/autoconf.texi (New Macros): Tweak wording.
+
+2001-12-14 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): We cleaning up the
+ trailing files, don't apply `-rf' to files which might not be
+ created by configure (core, core.*, and *.core), but just `rm -f'.
+ Suggested by Jonathan Kamens.
+
+2001-12-14 Aaron M. Ucko <amu@alum.mit.edu>
+
+ * lib/autoconf/general.m4: Avoid duplicates in `$ac_configure_args'.
+
+2001-12-14 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (MAINTAINERCLEANFILES): Remove configure.
+
+2001-12-13 Peter Eisentraut <peter_e@gmx.net>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Rename buildpath to
+ abs_builddir, top_buildpath to abs_top_builddir, srcpath to
+ abs_srcdir, top_srcpath to abs_top_srcdir.
+ (_AC_OUTPUT_FILES): Adjust.
+ * NEWS, doc/autoconf.texi, lib/autoconf/autotest.m4,
+ * tests/atspecific.m4, tests/autoreconf.in, tests/tools.at,
+ * tests/wrappl.in, tests/wrapsh.in: Adjust.
+
+2001-12-12 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * lib/autoconf/fortran.m4 (_AC_PROG_F77_V_OUTPUT): Fix failed
+ C/Fortran linking on HP/UX, by extracting the Fortran library
+ search path from the LPATH line in the $F77 -v output.
+
+2001-12-12 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (File Descriptors): Use a clearer layout for the
+ forbidden file descriptors table.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (%c_keywords): Build it at top level.
+ Map to 1 in order to simplify its uses.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (&scan_c_file, &scan_sh_file, &scan_makefile):
+ Remove $filepath, useless.
+ (&scan_makefile): Don't remove the $(FOO), ${FOO} and @FOO@
+ variables, they are really part of the tokens.
+ Split the input line on spaces and then look for tokens.
+ Now autoscan ceases to ask for AC_PROG_LEX for the package Bison
+ because of `lex$U.$(OBJEXT)'.
+ (&scan_files): Use "@list" instead of join.
+ * doc/Makefile.am (CLEANFILES): Add *.fns.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * tests/autoreconf.in, tests/autom4te.in, tests/autoupdate.in:
+ Remove, replaced by...
+ * tests/wrappl.in: Be common for all the Perl executables.
+ In particular autoscan and autoheader want -I.
+ * configure.ac: Adjust.
+ * lib/autoscan/headers: errno.h is portable.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (used): New.
+ Use it.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (&scan_c_file): Better parsing of CPP
+ directives.
+ (&scan_sh_file): Remove a duplicate pattern.
+ (&check_configure_ac): Use long options.
+ * lib/autoscan/headers (alloca.h): Check with AC_FUNC_ALLOCA.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * bin/autoscan.in (scan_c_file): Fix the handling of C comments.
+ Before, having a line containing the opening of a multi line
+ comment made the whole line be ignored.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Using an Autotest Test Suite): New.
+ (testsuite Scripts): Be one of its subsection.
+ (Autotest Logs): New.
+
+2001-11-26 Akim Demaille <akim@epita.fr>
+
+ Test groups are now run two directories deeper.
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Replace srcdir,
+ top_srcdir and top_builddir with at_srcdir, at_top_srcdir and
+ at_top_builddir.
+ * lib/autotest/general.m4 (AT_INIT): Compute srcdir,
+ top_srcdir, builddir and top_builddir.
+ Use `at_*dir' relatively to the directory containing the
+ suite, use `*dir' when relatively to the current group dir.
+
+2001-11-25 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * doc/autoconf.texi, TODO, lib/autoconf/fortran.m4,
+ lib/autoconf/functions.m4, lib/autoconf/headers.m4,
+ tests/atgeneral.m4, tests/tools.at, tests/atspecific.m4: Fix
+ spelling errors.
+
+2001-11-22 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Using System Type): Add an example of `case
+ $host' usage so people quit using `case $target' everywhere.
+
+2001-11-22 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Installation Directory Variables): Englishoes
+ spotted by Jim Meyering.
+
+2001-11-16 Paul Eggert <eggert@twinsun.com>
+
+ This patch implements a `long double' suggestion by Oliver Kiddle.
+
+ * lib/autoconf/c.m4 (AC_LANG_BOOL_COMPILE_TRY(C)): Make the array
+ static, to catch errors if the value isn't known at compile-time
+ and the compiler supports dynamic arrays. Change its name from
+ `_array_' to `test_array' to avoid potential name clashes.
+ (AC_C_LONG_DOUBLE): Make it a compile-time test, not a run-time
+ test. Do not define HAVE_LONG_DOUBLE if `long double' is no
+ better than double. Catch a bug in GCC 2.95.2 x86.
+ * doc/autoconf.texi (C Compiler): Document the above.
+ * NEWS: Likewise.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (LINENO): Protect from autom4te's substitution by
+ hand.
+ * tests/tools.at: Don't protect dnl, AT_DATA_M4SH does.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): After having run the test
+ group, go back to the initial directory, not to at_suite_dir.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_DATA_M4SUGAR, AT_DATA_M4SH)
+ (AT_DATA_AUTOCONF): Also protect @&t@ from autom4te.
+ (AT_CHECK_AUTOCONF, AT_CHECK_AUTOHEADER): Pass no --include
+ option.
+ (AT_CHECK_CONFIGURE): Use absolute paths.
+ (_AT_CHECK_AC_MACRO): Create aclocal.m4 with AC_STATE_SAVE in it.
+ The problem is still the old one: there is no means in M4 (that I
+ know about) to create a defining macro, because there is no means
+ to create `$1' etc., therefore, the defining macro ``swallows''
+ all the arguments meant to the defined macro.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_DATA_AUTOCONF): New.
+ (AT_CONFIGURE_AC): Output the definition of AC_STATE_SAVE in
+ configure.ac.
+ * tests/aclocal.m4: Remove, as it is no longer used.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4: Change `tests?' into `groups?' in
+ variable names when referring to a single test group, or to
+ `suite' when referring to the whole test suite.
+ `at_last_test' is removed: m4 compute at_format itself.
+ (at_stdout, at_stder1, at_stderr): New variables.
+ (AT_CHECK): Use them.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Be sure to put `.', relative,
+ in PATH.
+ Create `testsuite.dir/003/run' instead of `testsuite.003'.
+ Do it as soon as a test fails, don't wait till the end of the test
+ suite.
+ Don't remove $as_me.[0-9]*, since these files no longer exist.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at: Use absolute paths, since we are no longer run
+ in place.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ Now that tests are running in their own private dir, there is no
+ need to list the files to remove at the end of tests groups.
+
+ * lib/autotest/general.m4 (_AT_CLEANUP_FILE, AT_CLEANUP_FILES):
+ (AT_data_files, at_data_files): Remove.
+ (AT_CLEANUP, AT_DATA): Simplify.
+ (AT_INIT): Adjust.
+ Remove the group dir if !debug && !failed.
+ * tests/atspecific.m4: Adjust.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ Start a new layout for Autotest: `testsuite' creates
+ `testsuite.dir' in which the at-check-line etc. files are to be
+ found, and `testsuite.dir/003' where the test group 3 is run.
+
+ * lib/autotest/general.m4 (AT_INIT): at_tests_dir,
+ at_check_line_file, at_format, at_test_normalized, at_group_dir
+ are new variables.
+ Create the directories.
+ Use absolute paths for at- files.
+ (AT_CHECK): Adjust.
+
+2001-11-11 Michael Matz <matz@kde.org>
+
+ * m4sugar.m4 (_m4_foreach): Make it linear instead quadratic.
+ (m4_car2): New.
+ (m4_car): Properly quote arguments.
+
+2001-11-13 Akim Demaille <akim@epita.fr>
+
+ * tests/aclocal.m4 (AC_STATE_SAVE): s/LIBOBJS/LIB@&t@OBJS/ to cope
+ with stricter rules on LIBOBJS.
+
+2001-11-12 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4 (AC_C_PROTOTYPES): Define __PROTOTYPES too.
+ * doc/autoconf.texi (C Compiler): AC_C_PROTOTYPES now defines
+ __PROTOTYPES too.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_GETMNTENT): Use AC_CHECK_FUNCS.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/c.m4, lib/autoconf/fortran.m4,
+ * lib/autoconf/functions.m4, lib/autoconf/general.m4,
+ * lib/autoconf/headers.m4, lib/autoconf/libs.m4,
+ * lib/autoconf/programs.m4, lib/autoconf/specific.m4,
+ * lib/autoconf/types.m4: When invoking AC_DEFINE and friends,
+ specify to what the macro should be defined (typically to 1).
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_STRTOD): AC_SUBST POW_LIB.
+ From Jim Meyering.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/programs.m4 (_AC_PROG_LEX_YYTEXT_DECL): Use
+ AC_TRY_EVAL to run $LEX, not AC_TRY_COMMAND. This validates the
+ definition used by Automake where LEX is +/- "${missing} lex" and
+ `missing' itself contains variables.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Push KILL at the end.
+ Now that M4sh pushes BODY, the comments were output at the end of
+ the test suites.
+
+2001-11-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf): Run aclocal before tracing, so
+ that we can trace macros from aclocal.m4.
+ Trace AC_PROG_LIBTOOL, not AM_PROG_LIBTOOL, since the latter is
+ obsoleted, and redirect to the former anyway.
+ Reported by Ralf Corsepius.
+
+2001-11-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf): AC_CONFIG_SUBIDRS are to be
+ processed only if present.
+ * tests/torture.at (Configuring subdirectories): Use autoreconf
+ instead of successive calls to autoconf.
+ Add a nonexistent subdirectory to exercise the patch above.
+ Reported by Ralf Corsepius.
+
+2001-11-08 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Limitations of Usual Tools): Note HP-UX cc
+ doesn't accept .S files.
+
+2001-11-07 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_pattern_forbid): Accepts $2.
+ * lib/autoconf/general.m4 (AC_INTI): Forbid LIBOBJS.
+ (_AC_LIBOBJ): s/LIBOBJS/LIB@&t@OBJS/.
+ * bin/autom4te.in (warn_forbidden): New.
+ (handle_output): Use it.
+ Read m4_pattern_forbid with messages.
+
+2001-11-05 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (--normalize): Remove.
+ * lib/autom4te.in: Adjust.
+
+2001-11-05 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (testsuite): Rename this target as...
+ ($(TESTSUITE)): this.
+ From Nicolas Joly.
+
+2001-11-05 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_SUBDIRS): When removing
+ the --prefix option, also remove it's argument.
+
+2001-11-05 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (testsuite Invocation): Update.
+ (Writing testsuite.at): Update.
+
+2001-11-03 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: s/@code/@command/ where appropriate.
+
+2001-11-03 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm: (&catfile, &canonfile)
+ (&file_name_is_absolute): New, wrappers around routines from
+ File::Spec.
+ Use and export them.
+ (&find_configure_ac): Optionally take a directory where to look at.
+ * bin/autoreconf.in (&parse_args): Trim the configure.ac part of
+ the arguments.
+ Default @ARGV to `.', not find_configure_ac.
+ (&autoreconf): Argument is a directory.
+ Trace AC_CONFIG_SUBDIRS and schedule the subdirs for autoreconf'ing.
+ * doc/autoconf.texi (autoreconf Invocation): Update.
+
+2001-11-03 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (@export_vars, @export_subs)
+ (@export_forward_subs): New.
+ Add basename, dirname, and fileparse.
+ (@EXPORT): Adjust.
+ * bin/autoreconf.in (&autoreconf): Fix call to fileparse.
+ Don't look for aclocal flags if we already know aclocal is not
+ used.
+ Move aclocal.m4t only if it exists.
+ Reported by Ezra Peisach.
+
+2001-11-03 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&parse_args): Work only on the configure.ac
+ passed on command line, defaulting to ./configure.ac if present.
+ (&maybe_autoreconf, File::Find): Remove, unused.
+ (&autoreconf): If autoconf is not used, don't try to trace.
+
+2001-11-02 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.52g.
+
+2001-11-02 Akim Demaille <akim@epita.fr>
+
+ Version 2.52f.
+
+2001-11-02 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, doc/standards.texi:
+ * config/lispdir.m4: Update from masters.
+ * configure.ac: Bump to 2.52f.
+
+2001-11-02 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf): Set `$aclocal_flags' to ''.
+ Don't run aclocal when aclocal.m4 is not from aclocal.
+ From Ezra Peisach.
+ Don't run libtoolize and gettextize if --install is not given.
+
+2001-11-01 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): _AS_CR_PREPARE needs to
+ be invoked before _AS_LINENO_PREPARE.
+ (_AS_LINENO_PREPARE): Use as_cr_digits and as_cr_alnum rather
+ than character ranges.
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Fix NLS before
+ invoking AS_BASENAME. Set the locale variables to 'C' if
+ possible, as POSIX requires this to get the traditional
+ behavior.
+ * doc/autoconf.texi (Special Shell Variables): Describe the above.
+
+2001-10-31 Paul Eggert <eggert@twinsun.com>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_WORKS): Do not surround body
+ with {}, as that triggers a bug in Bash 2.05.
+
+ (_AS_LINENO_PREPARE): Use Sed rather than
+ Awk. Fix the sed prepass to work even if there are multiple
+ instances of $LINENO on the same line. Do not substitute for
+ other variables like $LINENOT. Do not check file dates; such a
+ check is unreliable on sufficiently fast machines, and removing
+ the check makes the code simpler and more reliable. Check for
+ output and chmod failures.
+
+ * doc/autoconf.texi (Special Shell Variables): Document
+ the above.
+
+2001-10-31 Akim Demaille <akim@epita.fr>
+
+ * tests/Makefile.am (atconfig): Remove this target, Automake
+ handles it now.
+
+2001-10-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Do not
+ AC_CONFIG_FILES(atlocal) as it means a file atlocal.in *must* be
+ provided, while it is optional.
+ * configure.ac: Adjust.
+
+2001-10-26 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS, README, configure.ac, lib/Autom4te/General.pm,
+ lib/Autom4te/Struct.pm:
+ Require Perl 5.005_03 instead of just 5.005, as some tests fail
+ with 5.005_02.
+
+ * doc/autoconf.texi (Special Shell Variables): Document some
+ more LINENO gotchas, particularly with respect to the Awk+Sed hack.
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_WORKS): New macro.
+ (_AS_LINENO_PREPARE): Use it instead of shell eval, since
+ eval $LINENO is not portable in practice.
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (backname): New.
+
+2001-10-24 Akim Demaille <akim@epita.fr>
+
+ * m4/: Remove, merged into...
+ * config/: here.
+
+2001-10-23 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi (Shellology): Mention the problems with bash
+ 2.05's use of ANSI quoting in its `set' builtin.
+
+2001-10-22 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_STRERROR_R):
+ Rename ac_cv_func_strerror_r_works to ac_cv_func_strerror_r_char_p,
+ and rename HAVE_WORKING_STRERROR_R to STRERROR_R_CHAR_P, since
+ POSIX decided to standardize on the int flavor of strerror_r.
+ Always do char* test, as there's no reason not to.
+ Assign to a char* var, to catch strerror_r that returns int*.
+
+ * doc/autoconf.texi (Particular Functions):
+ Document the above changes. Also, document the fact that
+ AC_FUNC_STRERROR_R defines HAVE_DECL_STRERROR_R.
+
+ * NEWS: Mention HAVE_WORKING_STRERROR_R -> STRERROR_R_CHAR_P.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): The name of
+ the executable was missing from the log.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&update_file): If destination is
+ unchanged, remove the source.
+ (&up_to_date_p): Don't be verbose, be debug.
+ * bin/autoreconf.in: No longer support --m4dir.
+ (&autoreconf): Display the full path of the configure.ac we are
+ studying.
+ Trace it only once.
+ Be sure to honor --force with gettextize.
+ Always run aclocal.
+ * doc/autoconf.texi: Adjust.
+
+2001-10-20 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in ($localdir, $m4, $SIMPLE_BACKUP_SUFFIX):
+ Remove, dead.
+ * bin/autoreconf.in (&autoreconf): Do not run gettextize when
+ `intl' is already present, as it refuses unless --force.
+ (&parse_args): Use -I, --include instead of the old Autoconf
+ options.
+ ($localdir, $autoconf_dir): Remove.
+ (@include): New.
+ (&maybe_autoreconf): New, to preserve $_ for File::Find.
+
+2001-10-19 Jens Petersen <petersen@redhat.com>
+
+ * lib/autoconf/programs.m4 (AC_PROG_AWK): Prefer gawk to mawk.
+ * doc/autoconf.texi (Particular Programs): Likewise.
+
+2001-10-19 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_FILES): Name the generated
+ file in @configure_input@.
+ Don't mention `automatically' in addition to `generated'.
+ * tests/torture.at (#define header templates): Adjust.
+
+2001-10-19 Akim Demaille <akim@epita.fr>
+
+ * lib/emacs/autoconf-mode.el, lib/emacs/autotest-mode.el: In a
+ comment, explain how to install automatic mode selection.
+ From Russ Allbery.
+
+2001-10-19 Ezra Peisach <epeisach@zif.mit.edu>
+
+ * bin/autoreconf.in (autoreconf): Display the path to the
+ configure.ac being studied.
+
+2001-10-18 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF): Cast sizeof to unsigned
+ long, to work around a bug in the HP C compiler version HP92453-01
+ B.11.11.23709.GP.
+
+ * lib/m4sugar/m4sh.m4 (AS_DIRNAME): Use 'dirname' if that works.
+ (AS_BASENAME_EXPR): New macro.
+ (AS_BASENAME_SED): Do not assume GNU sed semantics.
+ (AS_BASENAME): Use 'basename' if that works; then try 'expr';
+ and fall back on 'sed' only if the other two fail. This makes
+ AS_BASENAME act more like AS_DIRNAME.
+ (as_me): Shell-quote the argument of AS_BASENAME, in case $0
+ contains white space.
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR):
+ Use AS_DIRNAME, since I think it's now DOS-friendly.
+ * tests/m4sh.at (DIRNAME_TEST): New arg $3.
+ Allow "dirname //FOO" to return either / or //, as POSIX allows
+ either behavior.
+
+2001-10-10 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/lang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Recognize
+ `a_out.exe' for OpenVMS 7.1, DEC C 5.5 compiler, via GNV.
+ From Eric Sharkey.
+
+2001-10-10 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO_N_PREPARE): m4_defun, not
+ m4_define, since...
+ (_AS_ECHO_N): AS_REQUIREs it.
+
+2001-10-10 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS)
+ (AC_INCLUDES_DEFAULT): Move to...
+ * lib/autoconf/headers.m4: here.
+ * lib/autoconf/types.m4: Comment changes.
+ * doc/autoconf.texi: Specify where the default includes are used
+ in the macro prototypes.
+
+2001-10-09 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoconf.m4 (m4_patsubst, m4_regexp): New
+ transition code.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (&autoreconf): Remove debugging code.
+ (&parse_args): Pass verbosity/debugging options to subtools when
+ --debug, not when --verbose.
+ * lib/autom4te.in (Autoreconf-preselections): New.
+ (Autoconf): Use it.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in (autoreconf): Run libtoolize when appropriate.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (autoreconf Invocation): Adjust.
+ * bin/autoreconf.in (autoreconf): Run gettextize when appropriate.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (AT_CHECK_PERL_SYNTAX): Check autoreconf.
+ (Syntax of the shell scripts): Don't.
+ * bin/autoheader.in, bin/autom4te.in, bin/autoreconf.in: Don't
+ bother with $force since...
+ * lib/Autom4te/General.pm: does.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * bin/autoreconf.in: Rewrite in Perl.
+ * configure.ac: Adjust.
+ * lib/Autom4te/General.pm (&up_to_date_p): New.
+ * bin/autom4te.in (&up_to_date_p): Use it.
+ Rename as...
+ (&up_to_date): this.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_case, m4_bmatch, m4_normalize)
+ (m4_list_cmp): Use $0 to reinvoke yourself.
+ (m4_patsubsts): New.
+ (m4_strip, m4_version_unletter): Use it.
+ * tests/atspecific.m4 (AT_DATA_M4SUGAR, AT_DATA_M4SH): Likewise.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoconf.m4, lib/autoconf/general.m4,
+ * lib/autoconf/libs.m4, lib/autoconf/status.m4,
+ * lib/autoconf/types.m4, lib/autotest/general.m4,
+ * lib/m4sugar/m4sh.m4, lib/m4sugar/m4sugar.m4, tests/atspecific.m4,
+ * tests/torture.at: Rename m4_regexp, m4_patsubst, and m4_match to
+ m4_bregexp, m4_bpatsubst, and m4_bmatch.
+ * doc/autoconf.texi (Redefined M4 Macros): Adjust.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4: Use AS_REQUIRE.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_DIRNAME_EXPR): Use AS_REQUIRE.
+ * tests/tools.at (AT_DATA_FORBIDDEN): Rename/move/duplicate to...
+ * tests/atspecific.m4 (AT_DATA_M4SUGAR, AT_DATA_M4SH): here.
+ * tests/tools.at, tests/m4sh.at: Use it.
+ * tests/m4sh.at: Don't rely on Autoconf macros.
+ (DIRNAME_TEST): Also exercise the expr variant.
+ * tests/m4sugar.at, tests/atspecific.m4 (AT_CHECK_M4SUGAR): The
+ preferred M4sugar extension is now `.4s'.
+ * tests/README: Remove.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_provide_ifelse): Rename as...
+ (m4_provide_if): this.
+ * lib/m4sugar/m4sh.m4 (AS_REQUIRE): New.
+ * lib/autoconf/general.m4 (AS_DEFUN, AC_DEFUN_ONCE, AC_BEFORE)
+ (AC_REQUIRE, AC_PROVIDE, AC_PROVIDE_IFELSE): Be exact copy of the
+ M4sugar peer, i.e., drop the `AC_PROVIDE_$1' broken marker.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ Use `add-log-current-defun-function' for ChangeLog creation.
+ Suggested by Tom Tromey.
+
+ * lib/emacs/autotest-mode.el (autotest-mode-map): New.
+ (autotest-mode): Adjust.
+ * lib/emacs/autoconf-mode.el (autoconf-mode-map): Modernize, map
+ 'comment-region onto `C-c ;'.
+ Comments are `#', not `dnl'.
+ (autoconf-current-defun): New.
+ (autoconf-font-lock-keywords): Recognize `m4_defun'.
+
+2001-10-08 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_m4_divert(BODY)): Move to...
+ * lib/m4sugar/m4sh.m4: here.
+ (AS_INIT): Push the BODY diversion, set the #! /bin/sh line.
+ * lib/autoconf/general.m4 (AC_PLAIN_SCRIPT) : Remove.
+ (AT_INIT): Replace AC_PLAIN_SCRIPT with AS_INIT invocation,
+ include handle the m4_pattern_*, no longer push the
+ BODY diversion nor set the /bin/sh line, AS_INIT does it.
+ * lib/autotest/general.m4 (AT_INIT): Likewise.
+ * tests/base.at: Adjust the tests to use AS_INIT.
+ * tests/tools.at (AT_DATA_FORBIDDEN): New.
+ (autoconf: forbidden tokens): Adjust to work on M4sh instead of
+ Autoconf.
+
+2001-10-07 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (config.status Invocation):
+ CONFIG_SHELL defaults to a shell that supports LINENO if available.
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): If the current
+ shell does not support LINENO, and if CONFIG_SHELL is unset or
+ empty, and if we can find a shell that does support LINENO,
+ then set CONFIG_SHELL to that shell and then re-execute
+ ourselves with CONFIG_SHELL.
+
+2001-10-05 Paul Eggert <eggert@twinsun.com>
+
+ * tests/Makefile.am (clean-local): Don't invoke $(TESTSUITE) if it
+ doesn't exist. Remove *.tmp, as a .tmp file is created during the
+ build of $(TESTSUITE).
+
+2001-10-05 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): Look in the path
+ iff we are a bareword.
+ Reported by Raja R Harinath.
+
+2001-10-05 Akim Demaille <akim@epita.fr>
+
+ * tests/m4sh.at (LINENO): New.
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Be sure to set
+ PATH_SEPARATOR before using it.
+ Fix the absolute path case/esac pattern.
+ Provide $0 as fallback for as_myself.
+ Reported by Raja R Harinath.
+
+2001-10-05 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am, config/Makefile.am, lib/emacs/Makefile.am,
+ * m4/Makefile.am, man/Makefile.am: Add/adjust MAINTAINERCLEANFILES.
+
+2001-10-05 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (_AS_LINENO_PREPARE): New, extracted from...
+ (AS_SHELL_SANITIZE): here. Use it.
+ (_AS_LINENO_PREPARE): Preserve the exit status of $0.lineno.
+ From Paul Eggert.
+
+2001-10-04 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Use a portable
+ combination of Awk and sed to replace $LINENO.
+
+2001-10-02 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Limitations of Builtins): You can't use
+ "source"; it's not portable. Remove confusing and
+ somewhat-incorrect example involving "." and "/".
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): "source" -> ".", for
+ compatibility with POSIX shells.
+
+2001-10-02 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Just source 40.lineno
+ instead of exec'ing to preserve $0 and $@.
+
+2001-10-01 Akim Demaille <akim@epita.fr>
+
+ * tests/testsuite (AT_INIT) <at_pass_list>: New.
+ Don't run twice the same test.
+
+2001-10-01 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT) <--help>: Catch up with reality.
+ No longer output the list of tests.
+ <--list>: New option.
+ <--full-help>: Remove.
+ Complete the short/long options duality.
+ Various small adjustments.
+
+2001-10-01 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Use @kbd for user input.
+ Always use `$' as shell prompt.
+
+2001-09-30 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/status.m4 (AC_OUTPUT_MAKE_DEFS):
+ Don't use nested parenthesization. This patch was originally
+ suggested to bug-autoconf by Philippe De Muyter on 2000-05-28,
+ but somehow it didn't get incorporated then.
+ * doc/autoconf.texi (Limitations of Usual Tools):
+ Clarify remark about sed and nested parenthesization.
+
+ * lib/autoconf/types.m4 (AC_CHECK_SIZEOF):
+ Report an error if the size cannot be determined even though
+ the type exists.
+ * lib/autoconf/general.m4 (_AC_COMPUTE_INT_COMPILE):
+ Check for `expr' arithmetic overflow, and for compilation failure,
+ and invoke a new argument $4 if either is discovered.
+ This makes _AC_COMPUTE_INT_COMPILE more like _AC_COMPUTE_INT_RUN.
+ (_AC_COMPUTE_INT): Pass IF-FAILS arg to _AC_COMPUTE_INT_COMPILE.
+
+2001-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/emacs/autoconf-mode.el, lib/emacs/autotest-mode.el: New.
+ * m4/lispdir.m4: New.
+ * aclocal.m4, configure.ac: Adjust.
+
+2001-09-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_VICTIMS): Rename as...
+ (AT_TESTED): this.
+ (AT_INIT): More the wrapped section to where it will be expanded.
+ Output `AT_tested' only when existing.
+ Catch unexpanded PACKAGE_STRING and PACKAGE_BUGREPORT.
+
+2001-09-27 Akim Demaille <akim@epita.fr>
+
+ Fix the passing of $? to ACTION-IF-FAILED in AC_TRY_RUN, that
+ generates too many bug reports.
+
+ * lib/autoconf/general.m4 (_AC_RUN_IFELSE): Pass the right exit
+ status when executing the ACTION-IF-FALSE.
+ * tests/base.at (AC_TRY_*): Rename as...
+ (AC_TRY_COMMAND): this.
+ (AC_RUN_IFELSE): New.
+ * tests/compile.at (Extensions, C keywords)
+ (AC_PROG_CPP requires AC_PROG_CC, GNU Fortran 77)
+ (Broken/missing compilers, AC_PROG_CPP with warnings)
+ (AC_PROG_CPP without warnings, AC_PROG_CPP via CC): Move to...
+ * tests/c.at (Extensions, C keywords)
+ (Broken/missing compilers, AC_PROG_CPP with warnings)
+ (AC_PROG_CPP without warnings, AC_PROG_CPP via CC)
+ (AC_PROG_CPP requires AC_PROG_CC): here and...
+ * tests/fortran.at (GNU Fortran 77): there.
+ * doc/autoconf.texi (autoconf Invocation): Fix the example:
+ AC_TRY_RUN is about compilation, not shell commands.
+ (Test Programs): AC_TRY_RUN works as used to be advertised.
+
+2001-09-27 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Fix bugs spotted by
+ Raja R Harinath:
+ Be sure to detect when $LINENO always returns the same value.
+ Look for the original script, basename($0) is certainly not
+ enough.
+ Pass the CLI arguments to `$as_me.lineno'.
+
+2001-09-25 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Dump the whole config.log.
+ Be sure the close and reopen the LOG fd before and after using tee
+ to extend the log.
+ <at_tests_pattern>: Adjust to the new format of at_help_all.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (parse_args): There can be several invocations
+ of --language now.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Top): Wrap in @ifnottex.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Compute and provide
+ ac_buildpath, ac_top_buildpath, ac_srcpath, and ac_top_srcpath.
+ (_AC_OUTPUT_FILES): Also substitute srcpath, top_srcpath,
+ builddir, buildpath, top_builddir, and top_buildpath.
+ (_AC_OUTPUT_SUBDIRS): Compute the dir variables *before* changing
+ the current directory.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Compute the dir
+ variables *before* changing the current directory.
+ Skip nonexistent dirs.
+ * doc/autoconf.texi (Preset Output Variables): Document these
+ variables.
+
+ * lib/autotest/general.m4: Do not reset AT_victims.
+ Don't compute at_srcdir nor at_top_srcdir.
+
+ * tests/tools.at: Hence use top_srcdir.
+
+ * tests/Makefile.am, tests/autoconf, tests/autoheader,
+ * tests/autom4te, tests/autoreconf, tests/autoupdate, tests/ifnames:
+ Remove.
+ * tests/autoreconf.in, tests/wrappl.in, tests/autom4te.in,
+ * tests/wrapsh.in, tests/autoupdate.in: New.
+ * tests/Makefile.am (DISTCLEANFILES, EXTRA_DIST): Adjust.
+ * configure.ac: Build the position independent wrappers.
+
+ * man/Makefile.am: Now that test wrappers are position
+ independent, use them and drop dark envvar magic.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Common Shell Constructs): Rename as...
+ (Programming in M4sh): this.
+ Promote to @section.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Dump config.log last.
+ Pass $at_debug_args to the rerun test suite.
+ * lib/m4sugar/Makefile.am (DISTCLEANFILES): New.
+ * bin/Makefile.am (ETAGS_SH): Don't use characters ranges.
+ From Paul Eggert.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (@my_warning): Remove, handled by `autom4te.cfg'.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix shell
+ over-escaping.
+
+2001-09-23 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&debug): New.
+ * bin/autom4te.in ($language): Move to...
+ (parse_args): here.
+ Handle --language in languages.
+ * lib/autom4te.in (Automake-selections, Autoheader-selections)
+ (Autoscan-selections): New.
+ (Autoconf): Adjust.
+
+2001-09-23 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * m4/auxdir.m4, m4/cond.m4, m4/depend.m4, m4/init.m4,
+ * m4/install-sh.m4, m4/missing.m4, m4/sanity.m4, m4/strip.m4: Updated
+ to match current versions from CVS Automake.
+
+2001-09-23 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Special Shell Variables): Add pdksh output
+ for $LINENO.
+
+2001-09-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4: Create `package.m4'.
+ * tests/Makefile.am (package.m4): Remove.
+
+2001-09-22 Akim Demaille <akim@epita.fr>
+
+ Rely on `$LINENO' when possible instead of `__oline__'.
+
+ * lib/m4sugar/m4sh.m4 (AS_SHELL_SANITIZE): Provide some form of
+ `$LINENO' support replacement when not supported.
+ (_AS_CR_PREPARE, _AS_TR_CPP_PREPARE, _AS_TR_SH_PREPARE): Invoke
+ them explicitly to be sure they are not output before this section
+ (via m4_require). Cosmetic only.
+ * lib/autoconf/c.m4, lib/autoconf/general.m4,
+ * lib/autoconf/programs.m4: Replace all the occurrences of
+ `__oline__' with `$LINENO'.
+ * doc/autoconf.texi (Special Shell Variables): Document LINENO.
+
+2001-09-21 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_FORK): Replaceded an 8-bit
+ character (u: -> ue) in a code comment.
+ (AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK): Only run 'ln -s' if we know
+ it works.
+
+2001-09-21 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint (AUTOM4TE): Neutralize autom4te.
+ Suggested by Jim Meyering.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/autoconf/programs.m4: Use extensions listed in
+ $ac_executable_extensions when looking for programs.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/autoconf/general.m4: Fix a small Englisho.
+ * lib/autoconf/status.m4: Fix a small typo. Handle DOS paths when
+ setting up ac_dir_suffix and ac_top_builddir.
+ * lib/m4sugar/m4sh.m4: Default CDPATH to $PATH_SEPARATOR, not ':'.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi (File System Conventions): Clarify the use of
+ PATH_SEPARATOR.
+ (Special Shell Variables[PATH_SEPARATOR]): Ditto.
+ (Special Shell Variables[CDPATH]): Mention that $PATH_SEPRATOR should
+ be used instead of ':'.
+ * lib/autotest/general.m4: Replace occurrences of ':' in
+ AUTOTEST_PATH with $PATH_SEPARATOR at test suite startup.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/atgeneral.m4: Add basic support for test ranges (e.g. 7-34) as
+ arguments. Fixed a typo.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * man/Makefile.am (.x.1): Use @PATH_SEPARATOR@, not ':' to set up
+ $PATH. Also set AUTOM4TE_CFG, so we can process autom4te properly.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * bin/autoscan.in: Add 'exec-perl-if-not-run-by-perl'.
+ * bin/autoupdate.in: Ditto.
+ * bin/autoheader.in: Reworded a few comments.
+ * bin/autoconf.in: Reworded help text for a few options.
+ * bin/autoheader.in, bin/autom4te.in, bin/autoreconf.in,
+ * bin/autoscan.in, bin/autoupdate.in: Ditto.
+
+2001-09-20 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/Autom4te/XFile.pm (open): Simplified the error message (we
+ already have $file). Set output files to binary mode (helps avoid
+ CR issues on DOSish systems).
+
+2001-09-19 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4: Englishoes.
+ From Tim Van Holder and Alexey Mahotkin.
+
+2001-09-18 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Common Shell Constructs): New node,
+ documenting AS_DIRNAME.
+ (Limitations of Usual Tools): Refer to it when discussing dirname.
+ Also, update discussion of POSIX standard to reflect latest draft.
+
+ * lib/autoconf/c.m4:
+ (AC_LANG_INT_SAVE(C)): Also support negative values, down to LONG_MIN.
+
+ * lib/autoconf/general.m4 (_AC_COMPUTE_INT_COMPILE):
+ Do not pass a first argument with leading '-'
+ to expr, by parenthesizing initial integers that might be negative.
+
+ * doc/autoconf.texi (Particular Functions): AC_FUNC_GETPGRP
+ now merely checks whether it is an error to pass an argument
+ to getpgrp.
+
+ * lib/autoconf/functions.m4 (_AC_FUNC_GETPGRP_TEST): Remove.
+ (AC_FUNC_GETPGRP): Don't bother with a runtime test. Just check
+ whether it is a (compile-time) error to pass an argument to
+ getpgrp. This simpler test supports the revised documentation,
+ and is all that AC_FUNC_GETPGRP's users really need.
+
+2001-09-18 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make) <$<>: New.
+
+2001-09-18 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Usual Tools) <find>: More about
+ `{}'.
+ * lib/autotest/general.m4 (AT_INIT): Adjust.
+
+2001-09-18 Paul Wagland <paul@wagland.net>
+
+ * tests/m4sh.at: Ensure that AS_DIRNAME handles '/', '//' and '///'
+ correctly.
+ Add test for AS_BASENAME.
+ * lib/m4sugar/m4sh.m4: Fix AS_BASENAME so that it passes the previous
+ added test. It now correctly handles /1/2/3/, returning '3' not ''.
+ Added AS_BASENAME_SED to make the interface the same as AS_DIRNAME.
+ * tests/base.at: Fixed the expected responses. The old ones were
+ one line out...
+ * lib/autoconf/general.m4: Fixed AC_PREFIX_PROGRAM, it now behaves as
+ the documentation claims it should (and how it behaved in 2.13).
+
+2001-09-18 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): No INIT-CMDS in
+ the AC_CONFIG_COMMANDS invocation.
+ This also solves the name clash problems.
+ Don't set the package's ID.
+ * lib/m4sugar/Makefile.am (version.m4): Revamp.
+ No longer to be shipped.
+ (version.in): Remove.
+ * lib/m4sugar/m4sugar.m4, lib/autoconf/general.m4,
+ * lib/autoconf/status.m4: Adjust.
+ Use `m4_PACKAGE_STRING'.
+ * lib/autotest/general.m4 (AT_INIT): N-th signature change: now
+ the only optional argument is the name of the test suite.
+ Expect `package.m4' to define the package signature.
+ * lib/autom4te.in (Autotest): Add `package.m4?'.
+ * tests/Makefile.am (package.m4): New.
+ * tests/suite.at: ifnames is a victim.
+
+2001-09-18 Akim Demaille <akim@epita.fr>
+
+ * lib/autom4te.in (Autoconf): Preselect AM_CONDITIONAL,
+ AC_LIBSOURCE, AC_CONFIG_FILES.
+ * lib/autotest/general.m4 (AT_INIT): Don't abort when a tested
+ program version string doesn't match the package's.
+ * lib/autoconf/general.m4 (AC_CACHE_VAL): Reestablish the space
+ after `(cached)'.
+
+2001-09-17 Paul Eggert <eggert@twinsun.com>
+
+ * lib/autoconf/c.m4: (AC_LANG_INT_SAVE(C)):
+ Allow expression to return any value that can fit into unsigned long
+ (not int, as before). Check for output errors.
+
+2001-09-17 Bruno Haible <haible@ilog.fr>
+
+ * lib/autoconf/c.m4: (AC_LANG_INT_SAVE(C)):
+ Always include <stdio.h> and <stdlib.h>. Evaluate
+ the expression in an extra function before these includes. Call
+ fprintf "%d" only after ensuring the argument is of type 'int'.
+ Reported by Wayne Chapeskie <waynec@spinnaker.com>.
+
+2001-09-17 Paul Eggert <eggert@twinsun.com>
+
+ Fix bug reported by Paul Townsend on AIX 4.3.3.0 with CFLAGS=-O4
+ or CFLAGS=-O5. In that case, the linker has a relaxed view of
+ fatal errors, and AC_CHECK_LIB causes it to include libraries even
+ when they don't exist.
+
+ * lib/autoconf/headers.m4 (AC_HEADER_DIRENT): Use AC_SEARCH_LIBS,
+ not AC_CHECK_LIB, so that we don't use -ldir or -lx if we don't
+ need it.
+
+ * lib/autoconf/specific.m4 (AC_ISC_POSIX): Replace the old, crufty
+ version with the version used by fileutils 4.1, except use
+ AC_SEARCH_LIBS, not AC_CHECK_LIB, so that we don't use -lcposix if
+ we don't need it.
+
+ * doc/autoconf.texi (AC_ISC_POSIX): Describe new behavior.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at, tests/m4sh.at: Be sure to issue the bangshe line
+ _first_.
+ Reported by Gerrit P. Haase.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Reset `AT_victims' so that
+ m4_defn'ing is valid.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_append_uniq): New.
+ * lib/autotest/general.m4 (AT_VICTIMS, AT_KEYWORDS, _AT_CLEANUP_FILE):
+ Use it.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (_AS_QUOTE_IFELSE, _AS_BOX_INDIR): Use
+ m4_match.
+ (m4_re_escape): New.
+ * lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER): Use it.
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): Use m4_match.
+ * lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER, AC_CONFIG_LINKS):
+ Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_REPLACEMENT_TYPE_P)
+ (_AC_CHECK_TYPE_MAYBE_TYPE_P, AC_CHECK_MEMBER): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Rename AT_TESTS_ALL as
+ AT_tests_all for consistency.
+ Set at_victims.
+ (AT_VICTIMS): Similar to AT_KEYWORDS.
+ (_AT_CLEANUP_FILE_IF): Use m4_match and m4_re_escape.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Fix stupid bugs.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Create and remove
+ `$as_me.[0-9]+' instead of `debug-[0-9]+.sh', so that multiple
+ test suites can cohabit.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * tests/mktests.sh: Don't output banners for empty test files.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ Test suites can be run independently of configure.
+
+ * lib/m4sugar/m4sh.m4 (_AS_ECHO, _AS_ECHO_N_PREPARE): New.
+ * lib/autoconf/programs.m4 (_AC_PROG_ECHO): Remove.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Adjust: AC_SUBST
+ ECHO_N etc.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Don't ask for at_n
+ and at_c.
+ * lib/autotest/general.m4: Use ECHO_*.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * bin/ifnames.in: Rewrite in Perl.
+ * configure.ac: Don't look for AWK.
+ * tests/tools.at (AWK portability): Remove.
+ (Syntax of the shell scripts): Don't check ifnames.
+ (AT_CHECK_PERL_SYNTAX): New.
+ (Syntax of the Perl scripts): Check ifnames.
+ * tests/ifnames: New.
+
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Let --keywords also match
+ test group titles.
+ * tests/atspecific.m4 (AT_CHECK_AU_MACRO): AT_KEYWORDS(autoupdate).
+ Remove all the other keywords.
+
+2001-09-10 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Remove the diversion HELP and
+ SETUP: no longer used.
+ Support -k, --keywords.
+ <at_help>: Be `no', `short', or `long'.
+ <at_help_all>: New variable.
+ (AT_KEYWORDS): New.
+ (AT_CLEANUP_FILE_IFELSE, AT_CLEANUP_FILE): Rename as...
+ (_AT_CLEANUP_FILE_IF, _AT_CLEANUP_FILE): these.
+ (_AT_CLEANUP_FILE_IF): Simplify the regexp.
+ (AT_SETUP): Reset AT_line, AT_keywords, AT_description.
+ No longer fill the HELP diversion.
+ (AT_CLEANUP): Use them.
+ * lib/m4sugar/m4sugar.m4 (m4_append): Support a separator.
+ (m4_list_append): Remove.
+
+ Spread a few keywords in the Autoconf test suite.
+
+2001-09-10 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Don't pass
+ PATH_SEPARATOR, let M4sh compute it.
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_SEPARATOR_PREPARE): New.
+ * lib/autoconf/programs.m4 (AC_SHELL_PATH_WALK): Use PATH_SEPARATOR.
+ Move to...
+ * lib/m4sugar/m4sh.m4 (_AS_PATH_WALK): Here.
+ Simplify when the path is not a literal.
+ (AS_UNAME): Use it to report PATH.
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE_FS_SEPARATORS): Remove.
+ (_AC_INIT_DEFAULTS): AC_SUBST PATH_SEPARATOR.
+ * lib/autoconf/programs.m4 (AC_PROG_INSTALL): Use _AS_PATH_WALK.
+ * lib/autotest/general.m4 (AT_INIT): Use _AS_PATH_WALK to
+ normalize the path, and to look for victims.
+ * tests/semantics.at (AC_PATH_PROG & AC_PATH_PROGS)
+ (AC_CHECK_PROG & AC_CHECK_PROGS): Use PATH_SEPARATOR.
+
+2001-09-07 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&handle_m4): `< /dev/null' so that GNU M4 1.5
+ doesn't neutralize SIGINT, making autoconf etc. non interruptible.
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): Move the package
+ related variables into `at_package_*'.
+ * lib/autotest/general.m4 (AT_VICTIMS): New.
+ (AT_INIT): Adjust for stand-alone/embedded test suites.
+ (AS_MESSAGE_LOG_FD): Define and use it.
+ * tests/suite.at (AT_VICTIMS): Use it.
+ * tests/tools.at (autoupdating AC_PREREQ): Don't depend upon
+ at_version.
+
+2001-09-07 Akim Demaille <akim@epita.fr>
+
+ Move toward possibly stand-alone test suites.
+
+ * lib/autotest/general.m4: Stop displaying srcdir everywhere as,
+ in addition, it introduces useless differences in logs.
+ (AT_INIT): Let atconfig and atlocal be both optional.
+ Adjust PATH computation.
+ * lib/m4sugar/m4sh.m4 (AS_UNAME): More readable display of PATH.
+
+2001-09-07 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/Makefile.am (autoconf.m4f): Depends upon
+ m4sugar/version.m4.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_LANG_BOOL_COMPILE_TRY(C)): Use `_array_'
+ to avoid GCC warnings.
+ From Uwe Seimet.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in: --language is -l, not -s.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ Be ready to handle filenames as stupid as `dnl.at', for if even
+ the maintainer is dumb enough to do that...
+
+ * lib/autotest/general.m4 (AT_SETUP, AT_LINE): Demonstrates your
+ excellence in M4 quotation: consider `__file__' is active.
+
+ And BTW, when invoking m4, pass the --include in the right order:
+ the wrong one.
+
+ * bin/autom4te.in, bin/autoupdate.in: Use reverse when kingtal to
+ 4m.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/XFile.pm: New lib file.
+ * bin/autoupdate.in, bin/autoscan.pl, bin/autom4te.in,
+ * bin/autoheader.in: Use it.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ * bin/autoupdate.in (&handle_m4_macros) <unm4.m4>: Undefine iff
+ defined.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&getopt): Work around the `-' Getopt bug.
+ * bin/autoheader.in, bin/autoupdate.in (&parse_args): Adjust.
+
+ * bin/autoscan.in: Use `getopt' and `find_files' etc.
+ Add -I, --include support.
+ * doc/autoconf.texi (autoscan Invocation): Adjust.
+
+2001-09-05 Akim Demaille <akim@epita.fr>
+
+ CVS GNU M4 doesn't like `undefine(undefined)'.
+
+ * bin/autoupdate.in (&handle_m4_macros, &handle_autoconf_macros):
+ New, extracted from main.
+ Use IO::File wherever possible.
+ (input.m4): Be constant, use -I instead of hard coding $tmp.
+ Therefore be a quoted heredoc.
+ Don't invoke `_au_disable', since ac was not loaded, but just
+ `unm4.m4'.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ Version 2.52d.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): Fix the
+ previous patch.
+ * tests/atspecific.m4 (AT_CHECK_AUTOHEADER): Can create `config.hin~'.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_OUTPUT_CONFIG_STATUS): DU 5.0 has
+ serious problems handling heredocs in heredocs.
+ Reported by Nicolas Joly.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Don't promote non `m4_*' M4 macros.
+ (Making testsuite Scripts): Update.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/Makefile.am (CLEANFILES): Add autom4te.cfg.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Quadrigraphs): Document `@&t@'.
+ (testsuite Scripts): There is no such thing as `atconfig.in'.
+ And actually one diagram is missing: test suite runtime.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&find_file): Browse the includes in the
+ inverse order.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autoupdate.in (@include): `installcheck' revealed the path
+ to m4sugar was lacking!
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * man/Makefile.am (.x.1): We really have to pass
+ autom4te_perllibdir.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Don't pass all the args to
+ debug scripts, in particular passing explicitly listed tests to
+ run is stupid.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&parse_args): Strip `.' from `@include'.
+ * bin/autoupdate.in: Use --include, -I, and --force, -f, too.
+ Use directly autom4te, not autoconf.
+ * tests/autoupdate: $top_srcdir/lib is needed too for melt files.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.at (AC_C_BIGENDIAN): Missing eol.
+ * bin/autoheader.in (%symbol): Strip arguments of macros.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Catch up -I, --include changes.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&parse_args): Die on unknown languages.
+ * bin/autoheader.in: Run directly autom4te --mode=autoconf, no
+ need for autoconf.
+ Promote --include over --macrodir and other obsolete options.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm ($version, $help, &getopt): New.
+ * bin/autoupdate.in, bin/autoheader.in, bin/autom4te.in: Use them.
+ * bin/autom4te.in ($autoconf): Pass --force.
+ `print $out' doesn't print `$_' but `$out'.
+ * tests/tools.at (Syntax of the Perl scripts): Pass the lib dir.
+ (autoheader): Pass --force since the test suite goes too fast for
+ the time stamps.
+ Adjust to the new autoheader messages.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in: Handle the acconfig.h etc. junk files.
+ Check the completeness of the #template.
+ * lib/Autom4te/General.pm (&update_file): s/remove/unlink/.
+ * tests/semantics.at (AC_C_BIGENDIAN): Adjust AT_CHECK_AUTOHEADER
+ invocation.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&find_file, &update_file): New.
+ * bin/autoupdate.in, bin/autoheader.in: Adjust.
+ Drop AC_MACRODIR dead for real.
+ * tests/atspecific.m4 (AT_CHECK_AUTOHEADER): Now autoheader says
+ `autoheader: `config.hin' is created'.
+ * tests/tools.at (Syntax of the Perl scripts): Check autoheader.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autoheader.in: Rewrite in Perl.
+ * tests/autoheader: Adjust.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.in (--include, -I): New option.
+ Map --localdir, --autoconf-dir onto it.
+ Forward autom4te's options instead of interpreting them.
+ * bin/autoconf.in, bin/autoheader.in (AC_MACRODIR, autoconf_dir):
+ There is no such envvar since the inception of autom4te.cfg.
+ * bin/autom4te.in (&parse_args): Uniquify `@include'.
+ * bin/autoupdate.in: Adjust, and perform more control.
+ * tests/atspecific.m4 (AT_CHECK_AUTOCONF): Adjust.
+ * tests/autoconf: Dittowise.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.in: Don't bother with `acsite.m4' and `aclocal.m4'.
+ * bin/autom4te.in (&find_file): Support `FILE?' standing for
+ optionally `FILE'.
+ Use -e, not -f, since /dev/null for instance is OK.
+ (&parse_args): Adjust.
+ * lib/autom4te.in (Autoconf): Add `acsite.m4?' and `aclocal.m4?'.
+
+2001-08-31 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Also find tested executables in bin.
+ * bin/autoconf.in, bin/autoheader.in, bin/autoreconf.in,
+ * bin/autoscan.in, autoupdate.in: Use exclusively the name of the
+ installed peer executables, only PATH is allowed to resolve it.
+ Pass `autoconf_dir' via options, not via invisible envvars.
+ * lib/Autom4te/General.pm (&find_peer): Remove.
+ * lib/autotest/general.m4 (AT_INIT): `AUTOTEST_PATH=a:b' gives
+ `abuild:asrc:bbuild:bsrc', not `abuild:bbuild:asrc:bsrc'.
+ * man/Makefile.am: Let help2man rely on PATH instead of trying to
+ find the executables for it.
+ * tests/Makefile.am: Major cleanup. Too lazy to document...
+ * tests/atlocal.in: Remove all the obscure envvar manipulations.
+ We only need PERL.
+ * tests/atspecific.m4, tests/tools.at: Passing --localdir is
+ indeed related to running the test suite, while passing
+ --autoconf-dir and others is related to running non installed
+ Autoconf executables. So don't do that, leave it to...
+ * tests/autoconf, tests/autoheader, tests/autom4te, tests/autoupdate,
+ * tests/autoscan: New.
+ * tests/atspecific.m4 (AT_CHECK_M4SUGAR, AT_CHECK_M4SH): Don't
+ refer to library files: rely on --language.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in, lib/autom4te.in, bin/autoconf.in:
+ s/--set/--language/.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Strip the @nodes.
+ Suggested by Paul Eggert.
+ (Initializing configure): Typo.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&handle_output): s/@__@/@&t@/.
+ Suggested by Paul Eggert.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint (do-po-update): Wget refuses to overwrite files:
+ download in a tmp dir.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4: s/AT-devnull/devnull/ since there are
+ case insensitive OSes out there :(
+ From Tim Van Holder.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autom4te.in: New.
+ * lib/Makefile.am (edit, autom4te.cfg): New.
+ * bin/autom4te.in (BEGIN): Simplify.
+ Rely on `AC_MACRODIR' in addition of `autom4te_perllibdir'.
+ (&load_configuration): New. Use it.
+ (&parse_args): Support --mode, --set, and --melt.
+ * bin/autoconf.in: Simplify and adjust.
+ * tests/Makefile.am (AUTOMAKE): Use --set.
+ * tests/atlocal.in: Adjust.
+ * BUGS: distcheck and check are weak.
+
+2001-08-29 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4: Use
+ foo=`(command) 2>/dev/null`
+ not
+ foo=`command` 2>/dev/null
+ (at-devnull): Rename as...
+ (AT-devnull): this.
+ (--clean): Remove AT-* files too.
+ * doc/autoconf.texi (Limitations of Usual Tools): Document `date'.
+ Reported by Nicolas Joly.
+
+2001-08-28 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Don't use single
+ quotes inside single quotes.
+ Reported by Nicolas Joly.
+
+2001-08-28 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (Function Portability): Mention C right shifts.
+
+2001-08-27 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/autotest/general.m4: Reword some messages.
+ (AT_INIT): Check for the `times' builtin before using it.
+ Support test ranges as arguments to the testsuite.
+ Have -e imply -d as the help text suggested.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint: Formatting changes.
+ (do-po-update, po-update, cvs-update, update): New targets.
+ (AMTAR): Remove.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT) <at_cmd_line>: Remove.
+ <at_cmd_line>: New.
+ Pass it to debug-*.sh scripts.
+ <AUTOTEST_PATH>: May contain absolute dir names.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Log the command line.
+ Support `VAR=VAL' as arguments.
+ Compute PATH _after_ the options processing, so that AUTOTEST_PATH
+ may be set via the command line.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): $2 defaults to $1.
+ * lib/autotest/autotest.m4 (AT_INIT): Expand AUTOTEST_PATH into
+ first the build dirs, then the src dirs.
+ * configure.ac (AC_CONFIG_TESTDIR): Adjust.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Output the definition of
+ at_data_files earlier.
+ (--clean, -c): New option.
+ * tests/Makefile.am: Use this option.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): Rename `ac_dots' as
+ `ac_top_builddir' to mimic Automake's vocabulary, which much more
+ readable.
+ Adjust callers.
+ * doc/autoconf.texi (Configuration Actions): Document the vars
+ available in commands.
+ Emphasize the risks of collisions in init-cmds.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Input) <AC_INIT>: Move to..
+ (Initializing configure): this new node.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (EXTRA_DIST): INSTALL.txt is a dead hack.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * m4/atconfig.m4 (AT_CONFIG): Remove, replaced by...
+ * lib/autoconf/autotest.m4 (AC_CONFIG_TESTDIR): this.
+ New file.
+ * m4/Makefile.am (EXTRA_DIST): Oops, adjust...
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AU_DEFINE, AU_DEFUN, AU_ALIAS): Move
+ to...
+ * lib/autoconf/autoheader.m4: this new file.
+ * lib/autoconf/general.m4 (AH_OUTPUT, AH_VERBATIM)
+ (_AH_VERBATIM_OLD, AH_TEMPLATE, _AH_TEMPLATE_OLD, AH_TOP, AH_BOTTOM):
+ Move to...
+ * lib/autoconf/autoupdate.m4: this new file.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/status.m4 (_AC_SRCPATHS): New.
+ (_AC_OUTPUT_LINKS, _AC_OUTPUT_FILES, _AC_OUTPUT_SUBDIRS): Use it.
+ Standardize the var names (ac_sub_srcdir -> ac_srcdir, ac_subdir
+ -> ac_dir).
+ (_AC_OUTPUT_HEADERS): AS_DIRNAME always return a dir name.
+ * lib/autoconf/general.m4 (_AC_INIT_HELP): Ditto.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoconf.m4 (AC_CONFIG_COMMANDS)
+ (AC_CONFIG_COMMANDS_POST, AC_CONFIG_COMMANDS_PRE, AC_CONFIG_FILES)
+ (AC_CONFIG_HEADER, AC_CONFIG_HEADERS, AC_CONFIG_IF_MEMBER)
+ (AC_CONFIG_LINKS, AC_CONFIG_SUBDIRS, AC_FILE_DEPENDENCY_TRACE)
+ (AC_LINK_FILES, AC_LIST_COMMANDS, AC_LIST_COMMANDS_COMMANDS)
+ (AC_LIST_FILES, AC_LIST_FILES_COMMANDS, AC_LIST_HEADERS)
+ (AC_LIST_HEADERS_COMMANDS, AC_LIST_LINKS, AC_LIST_LINKS_COMMANDS)
+ (AC_OUTPUT, AC_OUTPUT_COMMANDS, AC_OUTPUT_COMMANDS_POST)
+ (AC_OUTPUT_COMMANDS_PRE, AC_OUTPUT_MAKE_DEFS)
+ (_AC_CONFIG_COMMANDS_INIT, _AC_CONFIG_DEPENDENCIES)
+ (_AC_CONFIG_DEPENDENCY, _AC_CONFIG_UNIQUE, _AC_LINK_FILES_CNT)
+ (_AC_LIST_SUBDIRS, _AC_OUTPUT_COMMANDS, _AC_OUTPUT_COMMANDS_CNT)
+ (_AC_OUTPUT_COMMANDS_INIT, _AC_OUTPUT_CONFIG_STATUS)
+ (_AC_OUTPUT_FILES, _AC_OUTPUT_HEADERS, _AC_OUTPUT_LINKS)
+ (_AC_OUTPUT_SUBDIRS): Move to...
+ * lib/autoconf/status.m4: this new file.
+ * lib/autoconf/general.m4, lib/autoconf/Makefile.am: Adjust.
+ * tests/Makefile.am, tests/suite.at: Adjust.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ Automake 1.5.
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Add 1.5 and dist-bzip2.
+ (AMTAR): Help automake define it.
+ (INSTALL, install-data-hook): The INSTALL.txt trick is no longer
+ needed, 1.5 can have a macro and a target with the same name.
+ * m4/auxdir.m4, m4/cond.m4, m4/depend.m4, m4/install-sh.m4,
+ * m4/strip.m4: New.
+ * m4/init.m4, m4/sanity.m4: Update.
+ * doc/Makefile.am (CLEANFILES): 1.5 knows the texi2dvi files.
+ * lib/autoconf/Makefile.am, lib/autotest/Makefile.am,
+ * lib/m4sugar/Makefile.am, lib/autoscan/Makefile.am,
+ * lib/Autom4te/Makefile.am, man/Makefile.am: Use dist/nodist.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ Provide a mean to ``AC_PREREQ'' for M4sugar, M4sh and Autotest.
+
+ * lib/autoconf/version.in: Remove.
+ * lib/m4sugar/version.in: New.
+ * lib/m4sugar/m4sugar.m4 (m4_acversion, m4_version_prereq): New.
+ Adjust callers.
+ * bin/autoupdate.in: Distinguish M4sugar vs. Autoconf macros by
+ the name of the directory they're in, instead of the filename,
+ since version.m4 is now in m4sugar, but m4_acversion must not be
+ classified as an Autoconf macro.
+ ($input_m4): Don't qualify the path to m4sugar.
+ Rather, pass autoconf_dir to m4.
+ * tests/Makefile.am (testsuite): Remove -I top_srcdir, unneeded.
+ * tests/suite.at: Require 2.52c.
+
+2001-08-27 Akim Demaille <akim@epita.fr>
+
+ testsuite.log should include config.log.
+
+ * lib/autotest/autotest.m4: New.
+ * lib/autotest/general.m4, tests/atspecific.m4: Adjust.
+ * tests/suite.at : Adjust.
+ (AT_INIT): Log config.log.
+ * lib/m4sugar/m4sugar.m4 (m4_text_box): New.
+ * lib/m4sugar/m4sh.m4 (_AS_BOX_LITERAL): Adjust.
+ * lib/autoconf/general.m4 (_AC_INIT_CONFIG_LOG): Use them.
+ (_AC_INIT_PREPARE): Fix the incredibly messy and buggy completion
+ of config.log on traps.
+ (_AC_OUTPUT_CONFIG_STATUS): Use AS_BOX.
+ Use consistently `_ACEOF' for configure's here docs, and `_CSEOF'
+ for config.status'.
+ Open the log as soon as possible.
+ Use the same log introduction as configure's.
+
+2001-08-22 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Indices): New node.
+ Move indices out of the top level menu and into this submenu.
+
+2001-08-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/programs.m4 (_AC_PROG_LEX_YYTEXT_DECL): Use
+ AC_TRY_COMMAND.
+ (AC_DECL_YYTEXT): Fix the previous patch: it points to AC_PROG_LEX.
+
+2001-08-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_SHELL_PATH_WALK, AC_CHECK_PROG)
+ (AC_CHECK_PROGS, AC_PATH_PROG, AC_PATH_PROGS, AC_CHECK_TOOL_PREFIX)
+ (AC_PATH_TOOL, AC_CHECK_TOOL, AC_CHECK_TOOLS): Move to...
+ * lib/autoconf/programs.m4: here.
+ * lib/autoconf/specific.m4 (_AC_PROG_ECHO, AC_PROG_MAKE_SET)
+ (AC_PROG_RANLIB, AC_PROG_YACC, AC_PROG_LEX, _AC_DECL_YYTEXT)
+ (AC_PROG_INSTALL, AC_PROG_LN_S, AC_RSH): Move to...
+ * lib/autoconf/programs.m4: here.
+ (_AC_DECL_YYTEXT): Rename as...
+ (_AC_PROG_LEX_YYTEXT_DECL): this.
+ * lib/autoconf/autoconf.m4, lib/autoconf/Makefile.am
+ * tests/Makefile.am, tests/suite.am: Adjust.
+
+2001-08-22 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (AC_LIST_MEMBER_OF, AC_LINKER_OPTION):
+ Move to...
+ * lib/autoconf/fortran.m4 (_AC_LIST_MEMBER_IF, _AC_LINKER_OPTION):
+ here.
+ * lib/autoconf/general.m4 (AC_TRY_LINK_FUNC): Move to...
+ * lib/autoconf/functions.m4: here.
+ * lib/autoconf/general.m4 (AC_SEARCH_LIBS, AC_CHECK_LIB)
+ (AH_CHECK_LIB): Move to...
+ * lib/autoconf/libs: this new file.
+ * lib/autoconf/specific.m4 (_AC_PATH_X_XMKMF, _AC_PATH_X_DIRECT)
+ (_AC_PATH_X, AC_PATH_X, AC_PATH_XTRA): Move to...
+ * lib/autoconf/libs.m4: here.
+ * lib/autoconf/autoconf.m4, lib/autoconf/Makefile.am: Adjust.
+
+2001-08-22 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sh.m4 (AS_MKDIR_P): Fail if fails.
+ * lib/autoconf/general.m4 (_AC_OUTPUT_SUBDIRS): Adjust.
+ (AC_SITE_LOAD): Better logging of config.site.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * configure.ac (AT_CONFIG): Fix the path.
+ * m4/atconfig.m4 (AT_CONFIG): Don't use EOF but ATEOF so that 2.52
+ can be used.
+
+2001-08-20 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Prepare the cross-compile
+ program with AC_LANG_PROGRAM before feeding it to
+ AC_COMPILE_IFELSE. Cleanup grep usage.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * ChangeLog, ChangeLog.0, ChangeLog.1, ChangeLog.2, AUTHORS, BUGS,
+ * NEWS, README, README-alpha, TODO, tests/README: This package is
+ `Autoconf', not `autoconf' (the executable).
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ Info readers seem to need `Index' in the index node title :(
+
+ * doc/autoconf.texi: Reverse the 2001-08-15 change which
+ simplified index node names.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_INIT_PACKAGE): Warn if the
+ arguments are not literals.
+ * doc/autoconf.texi (Input) <AC_INIT>: Arguments must be literals.
+ Specify the output variables, and macros defined.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Examining Declarations) <AC_TRY_CPP>:
+ (Examining Syntax) <AC_TRY_COMPILE>
+ (Examining Libraries) <AC_TRY_LINK>
+ (Test Programs) <AC_TRY_RUN>: These macros double quote some of
+ their arguments.
+ Reported by Werner Lemberg.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Compute top_builddir,
+ top_srcdir and srcdir from at_topbuild_2_topsrc and at_testdir.
+ Load atlocal late enough to dump it in the log.
+ * m4/atconfig.m4 (AT_CONFIG): Pass them to atconfig.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (Configuring subdirectories): New test.
+ * lib/autoconf/general.m4 (_AC_INIT_SRCDIR): Say what you are
+ looking for.
+ * m4/atconfig.m4: Be sure the let $[0] be expandable.
+ (top_srcdir): Fix its computation.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/general.m4 (_AC_OUTPUT_COMMANDS): Say what you do.
+ * m4/atconfig.m4 (AT_CONFIG): $1 is now the directory where the
+ test suite lives.
+ Create `atconfig' automagically.
+ Configure atlocal.in if present.
+ * tests/atconfig.in: Remove.
+ * tests/atlocal.in: New.
+ * tests/Makefile.am: Adjust.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ Huh!?!?! There are still some user EOF tags used, which prevents
+ their use in AC_CONFIG_COMMANDS for instance...
+
+ * lib/autoconf/general.m4, lib/autoconf/specific.m4,
+ * lib/autotest/general.m4: Rename the EOF tags as `_ACEOF',
+ `_CSEOF', or `_ATEOF', as appropriate.
+ * lib/m4sugar/Makefile.am, lib/autoconf/Makefile.am,
+ * lib/autotest/Makefile.am (check-local): Enforce this constraint.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at, tests/m4sh.at, tests/m4sugar.at,
+ * tests/semantics.at, tests/tools.at, tests/torture.at:
+ s/^AT_DATA\(([^][]+),/AT_DATA([$1],/.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ Autotest invokes M4sh's initialization.
+
+ * lib/autotest/general.m4: Adjust the diversion names.
+ (AT_INIT): Run AS_INIT.
+ Use the BINSH diversion to invoke /bin/sh.
+ * tests/base.at, tests/m4sh.at, tests/m4sugar.at, tests/tools.at:
+ * tests/torture.at: Respect M4sugar and M4sh macro name spaces.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ Let M4sh have its own diversions.
+
+ * lib/autoconf/general.m4 (_m4_divert(BINSH), _m4_divert(REVISION))
+ (_m4_divert(NOTICE)): Rename as...
+ * lib/m4sugar/m4msh.m4 (_m4_divert(BINSH), _m4_divert(HEADER-REVISION))
+ (_m4_divert(HEADER-COMMENT)): these.
+ (_m4_divert(HEADER-COPYRIGHT), _m4_divert(HEADER-COPYRIGHT)): New.
+ (_m4_divert(NOTICE)): New, for Libtool.
+ * lib/autoconf/general.m4 (_m4_divert(PREPARE)): Remove, replaced
+ long ago with `_m4_divert(GROW)'.
+ (AC_COPYRIGHT, AC_REVISION, _AC_INIT_NOTICE): Adjust.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at, tests/compile.at, tests/foreign.at,
+ * tests/m4sh.at, tests/m4sugar.at, tests/mktests.sh,
+ * tests/semantics.at, tests/suite.at, tests/tools.at,
+ * tests/torture.at: Ask Autotest mode, not Autoconf mode.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (handle_output): Handle @__@.
+
+2001-08-20 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/autoconf.m4, lib/autoconf/oldnames.m4,
+ * lib/autotest/general.m4: Adjust the license.
+
+2001-08-17 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Function Portability): Mention snprintf,
+ following up on a suggestion by Kevin Ryde.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * doc/install.texi, doc/autoconf.texi: Use `autoconf', not
+ `autoconf_manual', as texinfo.tex 2001-06-21.10 chokes on it.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Refer to `$as_me.log', not
+ `$0.log' as for projects where testsuite is in src, we'd have
+ testsuite.log created in src.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&parse_args): Recognize --normalize.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ Start implementing the AC_CHECK_HEADER transition scheme.
+
+ * lib/autoconf/headers.m4 (_AC_CHECK_HEADER_NEW)
+ (_AC_CHECK_HEADER_OLD, _AC_CHECK_HEADER_MONGREL): New.
+ (AC_CHECK_HEADER): Use them.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Work around Texinfo buglets.
+ (Transformation Rules): One example is enough, users are expected
+ to have their brains on. And BTW, use DESTDIR.
+ (dvar): New macro. Use it.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Writing testsuite.at) <AT_CHECK>: Complete.
+ * lib/autotest/general.m4 (AT_INIT): Use the relative dir when
+ looking for ChangeLogs.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in: --normalize is a new option.
+ * bin/autoconf.in: Use it.
+
+2001-08-17 Akim Demaille <akim@epita.fr>
+
+ * bin/Makefile.am, lib/Autom4te/Makefile.am, lib/autoconf/Makefile.am
+ * lib/autotest/Makefile.am, lib/m4sugar/Makefile.am: Add TAGS support.
+
+2001-08-16 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi, doc/install.texi: Put copyright notice at
+ start, not at end.
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * doc/Makefile.am (fu): New index, can't use fn because of defmac.
+ Use it.
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (pr): New index.
+ (prindex, findex): Use, merge, and output them.
+ (Environment Variable Index, Output Variable Index)
+ (Preprocessor Symbol Index, Autoconf Macro Index, M4 Macro Index)
+ (Autotest Macro Index): Rename as...
+ (Environment Variables, Output Variables,Preprocessor Symbols)
+ (Autoconf Macros, M4 Macros, Autotest Macros): these.
+ * doc/install.texi: Use @command.
+ (Environment Variables): Rename as...
+ (Defining Variables): this.
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Function Portability): sprintf's return
+ value.
+ From Kevin Ryde.
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint (CVS): New.
+ (local-check): Run changelog-check. last.
+ (alpha): Don't depend upon local-check, since...
+ (cvs-dist): depends upon it.
+
+2001-08-15 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * tests/Makefile.am: Use a clean-local rule to remove
+ autom4te.cache (it's a directory, not a file.
+ * Makefile.am: Ditto (but maintainer-clean-local).
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (@m4_warning): New.
+ (&handle_m4): Use it.
+ * tests/m4sugar.at (m4_warn): Pass `-f' to autom4te to ensure the
+ warnings are issued at each run.
+ * tests/atspecific.m4 (AT_CHECK_M4SUGAR, AT_CHECK_M4SH): M4sugar
+ is in the src tree.
+
+2001-08-15 Akim Demaille <akim@epita.fr>
+
+ * tests/atspecific.m4 (AT_CHECK_AUTOUPDATE): Perl is now required:
+ don't waste time running `autoupdate --version' works.
+ * tests/tools.at (autoupdating AC_PREREQ): Likewise.
+
+2001-08-13 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (ma): Rename this index as...
+ (ac): this.
+
+2001-08-13 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am: Remove dead code and dead comments.
+ (pdf, html): New targets.
+ * doc/autoconf.texi (Using Autotest): New chapter.
+ * doc/Makefile.am (pdf): New targets.
+ (CLEANFILES): Adjust.
+
+2001-08-13 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): Log the start/stop dates and
+ duration of the test suite.
+
+2001-08-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/semantics.at (AC_C_BIGENDIAN): Explicitelly save and load
+ endianness for comparison instead of relying on AT_CHECK_ENV.
+
+2001-08-11 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi, doc/install.texi: Add a copyright notice
+ to the INSTALL file.
+
+2001-08-11 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS: The autoconf manual now is distributed under the terms
+ of the GNU Free Documentation License.
+
+ * doc/autoconf.texi: Switch from old style copyright notice to FDL.
+ Add an appendix "Copying This Manual" for the FDL.
+
+ * doc/fdl.texi: New file, from
+ <http://www.gnu.org/licenses/fdl.texi>.
+
+ * doc/Makefile.am (autoconf_TEXINFOS): Add fdl.texi.
+
+2001-08-10 Paul Eggert <eggert@twinsun.com>
+
+ * AUTHORS, BUGS, ChangeLog, ChangeLog.0, ChangeLog.1,
+ ChangeLog.2, GNUmakefile, Makefile.maint, NEWS, README,
+ README-alpha, TODO, configure.ac, lib/autoconf/Makefile.am,
+ m4/atconfig.m4, m4/init.m4, m4/m4.m4, m4/missing.m4,
+ m4/sanity.m4, tests/README, tests/aclocal.m4,
+ tests/atspecific.m4, tests/base.at, tests/compile.at,
+ tests/foreign.at, tests/m4sh.at, tests/m4sugar.at,
+ tests/semantics.at, tests/suite.at, tests/tools.at,
+ tests/torture.at: Add copyright notice.
+
+ * tests/mktests.sh: Update year in copyright notice.
+
+2001-08-12 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * tests/semantics.at (AC_C_BIGENDIAN): New test.
+
+2001-08-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Handle ACTION-IF-TRUE,
+ ACTION-IF-FALSE, and ACTION-IF-UNKNOWN.
+ * doc/autoconf.texi (C Compiler Characteristics): Update
+ documentation for AC_C_BIGENDIAN.
+
+2001-08-11 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * lib/autoconf/c.m4 (AC_C_BIGENDIAN): Guess endianness by grep'ing
+ magic values from an object file when cross-compiling.
+ Based on code by Guido Draheim <Guido.Draheim@gmx.de>.
+
+2001-08-10 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in (&handle_output): Don't use `grep' with side
+ effects.
+ Suggested by Russ Allbery.
+
+2001-08-10 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * lib/autoconf/general.m4 (_AC_OUTPUT_SUBDIRS): Propagate the
+ current $prefix to the sub-configures.
+
+2001-08-09 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * lib/autoconf/lang.m4: Ignore *.xSYM when looking for an executable
+ extension (needed on BeOS). Reported by Guido van Rossum.
+
+2001-08-09 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in ($icache): Load it only if older than autom4te.
+
+2001-08-07 Akim Demaille <akim@epita.fr>
+
+ * lib/autotest/general.m4 (AT_INIT): All the `at-*' are to be
+ removed.
+ (at-setup-line): Huh? Be a variable `at_setup_line', not a file.
+ No need to remove the files before and after the each test, before
+ each test and at the end of the suite is enough.
+ Display only the children `times', not the shell's.
+ If the test failed or was skipped, at-times is not available.
+
+2001-08-07 Akim Demaille <akim@epita.fr>
+
+ Always produce testsuite.log, including when there are no
+ failures. This helps getting information on skipped tests, and
+ duration of the tests. Err, implement the latter btw.
+
+ * lib/autotest/general.m4 (AT_INIT): Set up fd 6 for the log.
+ Dump information on the first run of each test.
+ (AT_CLEANUP): Create `at-times' containing the duration of the
+ test group.
+
+2001-08-07 Akim Demaille <akim@epita.fr>
+
+ The use of `dumpstat' revealed that `len' was used although it
+ should not. m4_text_wrap was using it, but in the Autoconf world
+ where it is legal. Hence (i) test M4sh in its own world, not
+ Autoconf's, and (ii), ahem, fix the bug :)
+
+ * lib/autotest/general.m4: Be sure the set good quotes, as tracing
+ does not like `' instead of [].
+ (AT_INIT): Forbid `^_?AT_'.
+ And don't output such tokens.
+ * tests/Makefile.am (CLEANFILES): Add `script', `script.s4g',
+ `script.as', and `autom4te.cache'.
+ Remove `empty' and `macro' which are no longer used.
+ * tests/atspecific.m4 (AT_CHECK_M4SUGAR, AT_CHECK_M4SH): New.
+ * tests/m4sugar.at: Use it.
+ * lib/m4sugar/m4sugar.m4: Use `m4_len' not `len'.
+
+2001-08-07 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.in, bin/autoheader.in: --force, -f is a new option.
+
+2001-08-07 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * bin/autom4te.in (handle_output): Typo in quadrigraph substitution.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/functions.m4 (AC_FUNC_ALLOCA, AC_FUNC_ERROR_AT_LINE)
+ (AC_FUNC_FSEEKO, AC_FUNC_OBSTACK): Use AC_LANG_IFELSE, not
+ AC_TRY_LINK.
+ * lib/autoconf/headers.m4 (AC_HEADER_MAJOR): Likewise.
+ * lib/autoconf/fortran.m4 (_AC_LANG_PROGRAM_C_F77_HOOKS)
+ (AC_F77_MAIN): Likewise.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ Don't rely on M4sugar outputting the patterns in files, since we
+ might process the output _without_ running m4, hence without these
+ files.
+
+ * lib/m4sugar/m4sugar.m4 (m4_init): No need for `m4_tmpdir'.
+ * bin/autom4te.in (@Request::includes): Remove, unused.
+ (@Request::source): Rename as...
+ (@Request::input): this.
+ (@preselect): Add `m4_pattern_forbid' and `m4_pattern_allow'.
+ (&handle_output): Fetch the patterns from the traces.
+ `$forbidden' and `$allowed' are constant: use m//o.
+ (&handle_m4): M4sugar no longer wants `m4_tmpdir'.
+ (m4_pattern_forbid, m4_pattern_allow): Adjust for tracing only.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ `autoconf && autoheader' is sped up. Now, speed up `autoheader &&
+ autoconf', i.e., in addition to caching traces, cache the output.
+
+ * bin/autom4te.in (Request::cache): Rename as...
+ (Request::id): this.
+ ($cache, $icache, $tcache, $ocache): New.
+ (&handle_m4): Save M4 output in the cache instead of $tmp.
+ (&handle_output): Adjust.
+ (&up_to_date_p): Check that the output cache is up to date too.
+ (top level): Run `&handle_m4' iff force or the cache is invalid.
+ Run `&handle_output' if the output cache is more recent.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ * bin/autom4te.in ($force): New.
+ (&parse_args, &print_usage): -f, --force is a new option.
+ (&handle_output): CPP directives might have spaces after `#'.
+ (&parse_args): The first file only can be frozen.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ Don't let autom4te compute the `include' traces several times:
+ first check that the trace cache file is up to date, and then
+ compare its timestamp with that of the output.
+
+ * bin/autom4te.in, bin/autoupdate.in, bin/autoscan.in: Normalize
+ the preamble. Don't require 5.005 as Autom4te::General does it,
+ and better yet (use `use', not `require'!).
+ * lib/Autom4te/Struct.pm: Rename the last occurrences of
+ Class::Struct as Autom4te::Struct.
+ * lib/Autom4te/General.pm (File::stat): Use it.
+ (&mtime): New, export it.
+ * bin/autom4te.in: Use it.
+ Declare `$req' is invalid if it is outdated.
+ Don't declare it valid before saving it if something went wrong.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ Autom4te shall not encode Autoconf data, and preselecting traces
+ must be proposed to the users.
+
+ * bin/autom4te.in (@required_trace): Remove.
+ (@preselect): New.
+ (&parse_args, &print_usage): -p, --preselect is a new option.
+ (&up_to_date_p): Adjust.
+ * bin/autoconf.in: Preselect some Autoconf macros.
+
+2001-08-04 Akim Demaille <akim@epita.fr>
+
+ * tests/tools.at (autoconf --trace: user macros): Check traces on
+ macros invoked without arguments, and macros invoked with multiple
+ lines arguments.
+
+2001-08-03 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * bin/autom4te.in (handle_traces): Fix rewriting of traces without
+ arguments.
+
+2001-08-03 Akim Demaille <akim@epita.fr>
+
+ * bin/autoconf.in ($@): Work around the usual sh bug.
+ From Nicolas Joly.
+
+2001-08-03 Akim Demaille <akim@epita.fr>
+
+ Clean up the handling of the M4 builtins tracing exception.
+
+ * bin/autom4te.in (Request::request): Don't complete M4 builtins
+ trace requests.
+ (@m4_builtins): Rename as...
+ (@m4_builtin): this.
+ (%m4_builtin_alternate_name): New.
+ (&parse_args): Complete the trace requests with alternate names.
+ (&handle_traces): Hence no longer do it here.
+ (&trace_requests): Remove, unused.
+
+2001-08-03 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Redefined M4 Macros): Document m4_exit,
+ m4_if, and m4_wrap.
+
+2001-08-03 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (m4_init): Also forbid `_m4_*' tokens.
+ (m4_divert_pop): Dump the whole diversion stack when a diversion
+ mismatch happens.
+ * bin/autom4te.in (&handle_output): Remember of the first
+ occurrence of a possibly undefined macro, not the last.
+ Complain about the possibly undefined macros in the same order as
+ the appear in the output.
+ * lib/autoconf/Makefile.am (autoconf.m4f): List its dependencies.
+ * tests/tools.at (autoconf: forbidden tokens, basic)
+ (autoconf: forbidden tokens, exceptions): No longer sort
+ autoconf's stderr, as it is now deterministic.
+ Check that `dnl' is caught.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * configure.ac: Bump to 2.52c.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ Version 2.52b.
+
+ * lib/Autom4te/Makefile.am (perllibdir): s/Autoconf/Autom4te/.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ Version 2.52a.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm: Use `carp' and `croak', not `warn' and
+ `die'.
+ (&END): New.
+ * bin/autoconf.in, bin/autom4te.in, bin/autoupdate.in: Remove your
+ `END', as `Autom4te::General::END' will be triggered.
+ * bin/autoupdate.in, bin/autoscan.in: Improve error messages accuracy.
+ * bin/autoupdate.in (File::Compare, File::Copy): Use them instead of
+ system to run `mv', `rm', and `cmp'.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm (&unique): New.
+ * bin/autoscan.in (&output): Use it to issue trace requests once.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * lib/Autom4te/General.pm: New.
+ * bin/autom4te.in (Autom4te::General): Use it.
+ ($me, $tmp, $verbose, $debug, &mktmpdir, &verbose, &xsystem)
+ (&find_configure_ac, &find_slave): Remove.
+ * bin/autoscan.in: Likewise.
+ * bin/autoupdate.in: Likewise.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in, autom4te.in, autoscan.in, ifnames.in,
+ * autoheader.in, autoreconf.in, autoupdate.in: Move to...
+ * bin: here, new directory.
+ * lib/Autoconf: Rename as...
+ * lib/Autom4te: this, to please case insensitive junkie OSes.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * autom4te.in ($m4): Handle the --nesting-limit.
+ * autoconf.in (M4): Remove.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in ($AWK): Remove, no longer used.
+ * test/tools.at: Use AT_CHECK_AUTOCONF.
+ (AWK portability): Remove, for autoconf no longer uses AWK.
+ (Syntax of the Perl scripts): New.
+ * configure.ac: autoconf no longer needs an AWK with a good
+ regexp engine.
+ Use a static test on AC_PACKAGE_VERSION.
+ * autom4te.in (&up_to_date_p): Output depends on the arguments.
+ * lib/autoconf/Makefile.am: Ship version.m4, maintainer file.
+ * tests/atconfig.in (PERL): New.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * lib/autoconf/lang.m4 (AC_LANG(C), AC_LANG_C, _AC_LANG_ABBREV(C))
+ (AC_LANG(C++), AC_LANG_CPLUSPLUS, _AC_LANG_ABBREV(C++))
+ (AC_LANG_SOURCE(C), AC_LANG_PROGRAM(C), AC_LANG_CALL(C))
+ (AC_LANG_FUNC_LINK_TRY(C), AC_LANG_BOOL_COMPILE_TRY(C))
+ (AC_LANG_INT_SAVE(C), _AC_ARG_VAR_CPPFLAGS, _AC_ARG_VAR_LDFLAGS)
+ (AC_LANG_PREPROC(C), _AC_PROG_PREPROC_WORKS_IFELSE, AC_PROG_CPP)
+ (AC_LANG_COMPILER(C), ac_cv_prog_gcc, AC_PROG_CC, _AC_PROG_CC_G)
+ (AC_PROG_GCC_TRADITIONAL, AC_PROG_CC_C_O, AC_LANG_PREPROC(C++))
+ (AC_PROG_CXXCPP, AC_LANG_COMPILER(C++), ac_cv_prog_gxx)
+ (AC_PROG_CXX, _AC_PROG_CXX_G, _AC_PROG_CXX_EXIT_DECLARATION)
+ (AC_PROG_CC_STDC, AC_C_CROSS, AC_C_CHAR_UNSIGNED, AC_C_LONG_DOUBLE)
+ (AC_C_BIGENDIAN, AC_C_INLINE, AC_C_CONST, AC_C_VOLATILE)
+ (AC_C_STRINGIZE, AC_C_PROTOTYPES): Move to...
+ * lib/autoconf/c.m4: here, new file.
+
+ * lib/autoconf/lang.m4 (AC_LANG(Fortran 77), AC_LANG_FORTRAN77)
+ (_AC_LANG_ABBREV(Fortran 77), AC_LANG_SOURCE(Fortran 77))
+ (AC_LANG_PROGRAM(Fortran 77), AC_LANG_CALL(Fortran 77))
+ (AC_LANG_PREPROC(Fortran 77), AC_LANG_COMPILER(Fortran 77))
+ (ac_cv_prog_g77, AC_PROG_F77, _AC_PROG_F77_G, AC_PROG_F77_C_O)
+ (_AC_PROG_F77_V_OUTPUT, _AC_PROG_F77_V, AC_F77_LIBRARY_LDFLAGS)
+ (AC_F77_DUMMY_MAIN, _AC_LANG_PROGRAM_C_F77_HOOKS, AC_F77_MAIN)
+ (_AC_F77_NAME_MANGLING, AC_F77_NAME_MANGLING, AC_F77_WRAPPERS)
+ (AC_F77_FUNC): Move to...
+ * lib/autoconf/fortran.m4: here, new file.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4: Rename as...
+ * lib/autoconf/functions.m4: this.
+ * acgeneral.m4: Rename as...
+ * lib/autoconf/general.m4: this.
+ * acheaders.m4: Rename as...
+ * lib/autoconf/headers.m4: this.
+ * aclang.m4: Rename as...
+ * lib/autoconf/lang.m4: this.
+ * acoldnames.m4: Rename as...
+ * lib/autoconf/oldnames.m4: this.
+ * acspecific.m4: Rename as...
+ * lib/autoconf/specific.m4: this.
+ * actypes.m4: Rename as...
+ * lib/autoconf/types.m4: this.
+ * autoconf.m4: Rename as...
+ * lib/autoconf/autoconf.m4: this.
+
+ * m4sugar.m4: Rename as...
+ * lib/m4sugar/m4sugar.m4: this.
+ * m4sh.m4: Rename as...
+ * lib/m4sugar/m4sh.m4: this.
+
+ * tests/atgeneral.m4: Rename as...
+ * lib/autotest/general.m4: this.
+
+ * acfunctions: Rename as...
+ * lib/autoscan/functions: this.
+ * acheaders: Rename as...
+ * lib/autoscan/headers: this.
+ * acidentifiers: Rename as...
+ * lib/autoscan/identifiers: this.
+ * aclibraries: Rename as...
+ * lib/autoscan/libraries: this.
+ * acmakevars: Rename as...
+ * lib/autoscan/makevars: this.
+ * acprograms: Rename as...
+ * lib/autoscan/programs: this.
+
+2001-08-01 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi: Moving/deleting open files is not portable.
+ Portability issues for `.' (source), and more information about sed.
+
+2001-07-25 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_LIBRARY_LDFLAGS): Ignore -libmil (on Solaris),
+ which has a special meaning and is not a reference to libibmil.a.
+ Reported by Matteo Frigo.
+
+2001-07-25 Pavel Roskin <proski@gnu.org>
+
+ * autom4te.in (mktmpdir): Strip trailing newline from mktemp
+ output.
+
+2001-07-25 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in: Try to define the variables before using them.
+ * autom4te.in ($perllibdir): Use `$autom4te_perllibdir' as envvar
+ instead of `$perllibdir'.
+ * tests/atconfig.in ($autom4te_perllibdir): Export it.
+
+2001-07-25 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in (ac_LF_and_DOT): Remove, unused.
+
+2001-07-24 Akim Demaille <akim@epita.fr>
+
+ Let autoconf use autom4te for traces.
+
+ * autoconf.in ($task, task trace): Remove, merely pass --trace to
+ autom4te.
+ * autoheader.in: Don't pass `-' to autoconf, rather, a tmp file.
+ (Because I found no way for autom4te to accept `-').
+ * autom4te.in (&Request::request): Beware of M4 builtins.
+ (END): Don't try to remove the content of an empty dir.
+ (&parse_args): Default is `$f:$l:$n:$%', not `$f:$l:$n:$*'.
+ (&handle_output): Set a default value to `$forbidden'.
+ * autoupdate.in (&verbose, &xsystem): New, from autom4te.in.
+ ($autoconf): Pass --debug and --verbose.
+ * tests/atspecific.m4 (AT_CHECK_AUTOCONF): Clean up autom4te's
+ cache.
+
+2001-07-24 Akim Demaille <akim@epita.fr>
+
+ Let autoconf use autom4te to create configure.
+
+ * autoconf.in ($automate): New var.
+ (task script): Use autom4te.
+ * autom4te.in (File::Spec): Use it.
+ (&find_file): New.
+ (&parse_args): --warning is -W, not -w.
+ Find the top level files.
+ (&handle_m4): Pass the warnings flags.
+ Don't report verbosely m4's failures, unless requested.
+ (&handle_output): Don't complain for forbidden tokens in comments.
+ Be sure to report all the forbidden tokens within a single line.
+ (&trace_format_to_m4): Preserve `$_'.
+ (&handle_traces): Sort the output macros.
+ (&up_to_date_p): Find the files before trying to get its time stamp.
+
+2001-07-24 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am: Ship, build and install Autom4te.
+ (SUBDIRS): Add lib.
+ * lib/Autoconf/Struct.pm: New, from Automake 1.5.
+ * configure.in: Require Perl.
+ * man/autom4te.in: New.
+
+2001-07-19 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi (Cache Checkpointing): Use AC_MSG_ERROR in
+ example, rather than (exit 1); exit (which isn't portable).
+
+2001-07-18 Akim Demaille <akim@epita.fr>
+
+ Version 2.52.
+
+2001-07-18 Akim Demaille <akim@epita.fr>
+
+ The C-Fortran 77 hooks are available only once AC_F77_DUMMY_MAIN
+ was run, while they are needed also when it is expanded.
+ Reported by Nicolas Joly.
+
+ * aclang.m4 (AC_F77_DUMMY_MAIN): Define _AC_LANG_PROGRAM_C_F77_HOOKS.
+ (AC_LANG_PROGRAM(C)): Use it instead of depending upon
+ AC_F77_DUMMY_MAIN being expanded.
+
+2001-07-18 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.51a.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ Version 2.51.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_F77_DUMMY_MAIN): Let the interface be more
+ Autoconfy: $1 = action-if-found, $2 = action-if-not-found.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ The runtime test for AC_FUNC_GETPGRP fails when prototypes are
+ used. Well, then use the prototypes when you can, and runtime as
+ a last resort.
+ Reported by Artur Frysiak
+
+ * acfunctions.m4 (_AC_FUNC_GETPGRP_TEST): New.
+ (AC_FUNC_GETPGRP): Use it.
+ First try to compile with 0-ary or 1-ary calls.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * actypes.m4 (_AC_CHECK_TYPE_REPLACEMENT_TYPE_P): `foo_t' is a
+ replacement type.
+ From Paul Eggert.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint: Sync. with cppi 1.10.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_LANG_PROGRAM(C)): Output F77_DUMMY_MAIN only when
+ AC_F77_DUMMY_MAIN has been run.
+ From Pavel Roskin and Steven G. Johnson.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Rename as...
+ * configure.ac: this.
+
+2001-07-17 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (INSTALL.txt): Don't use $@ and $< in non suffix
+ rules.
+ From Marc Espie.
+ * Makefile.maint (release-archive-dir): Rename as...
+ (release_archive_dir): this, so that it can be specialized in
+ Makefile.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.50d.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ Version 2.50c.
+ * Makefile.maint (alpha): Typo.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Make): Macro names and underscore.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * config/config.guess, config/config.sub, config/texinfo.tex
+ * doc/standards.texi, doc/make-stds.texi: Update.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint (cvs-check, cvs-tag-check, cvs-diff-check): New.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint (maintainer-check): Rename as...
+ (maintainer-distcheck): this.
+ (changelog-check, static-check): New.
+ Use them.
+
+2001-07-14 Kevin Ryde <user42@zip.com.au>
+
+ * doc/autoconf.texi (C++ Compilers Characteristics): Last resort
+ for CXX is g++, not gcc.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Files): New subsection.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (C Compiler, Fortran 77 Compiler): Be subsections
+ of...
+ (Generic Compiler Characteristics): this.
+ (C++ Compiler): New subsection.
+
+2001-07-14 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in: Use IO::File.
+ Adjust all the routines to use it.
+ ($log): New file (autoscan.log).
+ (output): Dump detailed logs into $log, and a shortened version to
+ stderr.
+ (&scan_makefile): Refine the regexp catching tokens in the code.
+ * doc/autoconf.texi (autoscan Invocation): Document `autoscan.log'
+ and the `configure.ac' checking feature.
+
+2001-07-12 Akim Demaille <akim@epita.fr>
+
+ For some AWK, such as on HPUX 11, `xfoo' does not match `foo|^bar'.
+ Reported by Michael Elizabeth Chastain.
+
+ * autoconf.in: Refuse such AWK.
+ * configure.in: Likewise.
+ * Makefile.am (acversion.m4): Do not use move-if-change this file
+ has dependencies.
+ * doc/autoconf.texi (Fortran 77 Compiler): Some typos.
+
+2001-07-10 Jens Petersen <petersen@redhat.com>
+
+ * autoscan.in (&scan_makefile): Improve programs regexp to parse
+ things like "g++", "file.c" and "some-conf" as tokens.
+ (&scan_file): Match C++ files extensions.
+ If the filename extension is C++ then ask for c++.
+
+2001-07-05 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_F77_DUMMY_MAIN): Use AC_TRY_LINK, not
+ AC_TRY_LINK_FUNC, to check whether defining a dummy
+ main-like routine is needed for linking with F77 libs.
+
+2001-07-05 Pavel Roskin <proski@gnu.org>
+
+ * aclocal.m4 (_AC_PROG_CXX_EXIT_DECLARATION): Remove conftest*
+ after using break.
+ (_AC_PROG_F77_V_OUTPUT): Remove conftest*, not conftest.* after
+ linking.
+
+2001-07-05 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (move_if_change): New. Use it instead of `mv'.
+ (acversion.m4): Name it `$(srcdir)/acversion.m4' to ease broken
+ Makes' lives.
+ Reported by Nicolas Joly.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_RUN_IFELSE): Remove conftest.o when cleaning
+ up.
+ * acfunctions.m4 (AC_FUNC_WAIT3): Use `break' to silent some
+ warnings from compilers.
+ * aclang.m4 (_AC_LANG_COMPILER_GNU): Log the version information
+ for all the compilers, not only GNU. Hence move from here...
+ (AC_PROG_CC, AC_PROG_CXX, AC_PROG_F77): to here.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_STRTOD, AC_FUNC_STRERROR_R)
+ (AC_FUNC_STRCOLL, AC_FUNC_WAIT3): Use AC_RUN_IFELSE and
+ AC_COMPILE_IFELSE.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): Actually apply
+ the ``strings.h'' change claimed below.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_COMPILER_GNU): s/-dumpspecs/-v/.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): Include
+ strings.h if usable with string.h.
+ Suggested by Paul Eggert.
+
+2001-07-04 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (&scan_file): Skip FILE if there is FILE.in.
+ From Jens Petersen.
+
+2001-07-03 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Specify CONFIG_FILES
+ etc. in the log.
+
+2001-07-03 Akim Demaille <akim@epita.fr>
+
+ * acheaders.m4 (AC_CHECK_HEADER): When INCLUDES are set, use the
+ compiler, not the preprocessor.
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): No longer use
+ dedicated code to check for inttypes.h, as AC_CHECK_HEADERS does
+ the right thing.
+ * Makefile.am (.m4.m4f): Emphasize M4 error messages and fail
+ earlier if there are.
+
+2001-07-03 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in ($initfile): Remove.
+ (&find_file): Rename as...
+ (&scan_file): this.
+ Immediately scan the current file, instead of gathering them, and
+ later having them handled by &scan_files.
+ (&scan_files): Merely invoke Find::File.
+ Adjust.
+
+2001-07-02 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in: Formatting changes, matching the invocation order.
+ (File::Find): Use it instead of Perl 4's `find.pl'.
+ (&wanted): Rename as...
+ (&find_file): this.
+
+2001-07-01 Pavel Roskin <proski@gnu.org>
+
+ * aclang.m4 (AC_F77_DUMMY_MAIN): Remove conftest* after using
+ break in the argument to AC_TRY_LINK_FUNC.
+ (AC_F77_MAIN): Remove conftest* after using break in the
+ argument to AC_TRY_LINK.
+
+2001-07-01 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ Add alternate 'main' routine detection for linking C/C++ with Fortran,
+ fixing link failures for e.g. AC_F77_WRAPPERS on NetBSD.
+
+ * aclang.m4 (AC_F77_DUMMY_MAIN): New macro to detect whether a
+ dummy alternate main is required even if the user provides her own
+ 'main'.
+ (AC_F77_MAIN): New macro to detect whether it is possible to
+ provide an alternate 'main' function name, using the 'main' from
+ the Fortran libraries.
+ (AC_LANG_PROGRAM(C)): Use F77_DUMMY_MAIN, if it is defined, so that
+ cross-language link tests can be performed successfully.
+ (_AC_F77_NAME_MANGLING): Require AC_F77_DUMMY_MAIN. Also put $FLIBS
+ after $LIBS, for consistency; this should be the general rule since
+ the user may want to link to Fortran libraries that require $FLIBS.
+ * doc/autoconf.texi: Document AC_F77_DUMMY_MAIN and AC_F77_MAIN.
+
+2001-06-29 Pavel Roskin <proski@gnu.org>
+
+ * atgeneral.m4 (AT_CHECK): Add a newline to the end of
+ at-stdout and at-stderr instead of removing the newline
+ from the echo output, which is not guaranteed to work.
+
+2001-06-28 Jens Petersen <petersen@redhat.com>
+
+ * aclang.m4 (_AC_PROG_CXX_EXIT_DECLARATION): Only add declaration to
+ confdefs.h when non-zero.
+
+2001-06-28 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.50c.
+
+2001-06-26 Akim Demaille <akim@epita.fr>
+
+ Version 2.50b.
+
+2001-06-26 Akim Demaille <akim@epita.fr>
+
+ Version 2.50a.
+
+2001-06-25 Pavel Roskin <proski@gnu.org>
+
+ * tests/atspecific.m4 (AT_CHECK_MACRO): Accept one more
+ argument, AUTOCONF-FLAGS.
+ * tests/mktests.sh (update_exclude_list): Add
+ AC_SYS_RESTARTABLE_SYSCALLS and AC_FUNC_WAIT3.
+ * tests/semantics.at: Test AC_SYS_RESTARTABLE_SYSCALLS and
+ AC_FUNC_WAIT3 with "-W no-obsolete".
+
+2001-06-25 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (libtool): Fix the `libtoolize --version' decoding.
+
+2001-06-25 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (%macro): Now maps from word to list of macros.
+ (&init_tables): Die when a word which is already handled by
+ explicit macros is mapped to the default macro.
+ (&print_unique): Remove, inlined in...
+ (&output_kind): here.
+ (File::Basename): Use it.
+ (&output): Sort the CONFIG_FILES.
+ * acheaders: Normalize.
+ * acfunctions: Likewise.
+
+2001-06-25 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_LANG_COMPILER_GNU): If GNU, dump the compiler
+ characteristics in the logs.
+ Suggested by Mo DeJong.
+
+2001-06-24 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AM_FUNC_ERROR_AT_LINE, AM_FUNC_FNMATCH)
+ (AM_FUNC_MKTIME, AM_FUNC_OBSTACK, AM_FUNC_STRTOD): Reactivated.
+ * doc/autoconf.texi (Autoconf 2.13): New section.
+
+2001-06-24 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in (Task traces): Separate the error messages from the
+ traces to improve robustness.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (AC_ARG_VAR): Make it a single test instead of
+ three as failures are unlikely, and speed matters.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Redefined M4 Macros): New.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): Consider
+ inttypes.h is missing if it conflicts with sys/types.h, as on IRIX
+ 5.3.
+
+2001-06-23 Paolo Bonzini <bonzini@gnu.org>
+
+ * acgeneral.m4 (_AC_OUTPUT_CONFIG_STATUS): Defer parsing of
+ config.status targets to after the evaluation of the INIT-CMDS.
+ Double quote config.status targets (used to be single quoted).
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/torture.at (CONFIG_FILES, HEADERS, LINKS and COMMANDS):
+ Check the content of the created file.
+ Check the ./config.status command line invocation.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * tests/foreign.at (Libtool): Reject prehistoric versions.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (_AC_COMPILER_EXEEXT_DEFAULT): Try to be robust to
+ preexisting files matching a.*.
+
+2001-06-23 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_ARG_VAR_VALIDATE): Output error messages on
+ stderr.
+ * doc/autoconf.texi (AC_ARG_VAR): Update.
+
+2001-06-21 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_ARG_VAR_VALIDATE): Die instead of warning when
+ precious variables have changed.
+ * tests/torture.at (AC_ARG_VAR): Adjust.
+
+2001-06-21 Akim Demaille <akim@epita.fr>
+
+ ./configure --program-suffix=foo produces `transform=s,$$,foo,;',
+ but some sed choke on multiple `;', and other tools (e.g.,
+ Automake), include the separator themselves.
+
+ * acgeneral.m4 (AC_ARG_VAR): Be sure not to leave extra `;'.
+
+2001-06-19 Tim Van Holder <tim.van.holder@pandora.be>
+
+ * doc/autoconf.texi (Functions Portability): Rename as...
+ (Function Portability): this.
+ (Function Portability): Document potential problems with unlink().
+
+2001-06-19 Paul Eggert <eggert@twinsun.com>
+
+ * NEWS, doc/autoconf.texi: Document quadrigraphs.
+
+2001-06-18 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_FORK): Fix typos.
+
+2001-06-18 Ruediger Kuhlmann <info@ruediger-kuhlmann.de>
+
+ * acfunctions.m4: (AC_FUNC_VFORK) rename as...
+ (_AC_FUNC_VFORK): this.
+ Remove AC_DEFINEs and don't guess cross-compilation values.
+ (_AC_FUNC_FORK): New, check whether fork() isn't just a stub.
+ (AC_FUNC_FORK): New, use _AC_FUNC_VFORK and _AC_FUNC_FORK to
+ define HAVE_WORKING_FORK, HAVE_WORKING_VFORK; and vfork to fork if
+ vfork doesn't work.
+ Guess values if cross-compiling, but warn.
+ * acfunctions: Add AC_FUNC_FORK.
+ * doc/autoconf.texi: Document AC_FUNC_FORK. Give example to define
+ and vfork appropriately.
+
+2001-06-18 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Functions Portability): New section.
+
+2001-06-18 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in (M4): Pass --nesting-limit=1024, unless already set
+ in $M4.
+ Suggested by Andreas Schwab.
+
+2001-06-18 Akim Demaille <akim@epita.fr>
+
+ * acfunctions.m4 (AC_FUNC_CHOWN, AC_FUNC_CLOSEDIR_VOID)
+ (AC_FUNC_GETPGRP, AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK)
+ (AC_FUNC_MMAP, AC_FUNC_SELECT_ARGTYPES, _AC_FUNC_STAT)
+ (AC_FUNC_UTIME_NULL): Use AC_INCLUDES_DEFAULT.
+ Don't use AC_TRY_RUN, which double quotes, prefer AC_RUN_IFELSE,
+ and either AC_LANG_SOURCE or AC_LANG_PROGRAM.
+ (AC_FUNC_CLOSEDIR_VOID): Protect C++ from `int closedir ();' (or
+ the converse).
+
+2001-06-18 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (ms): New index.
+ (Macro Index): Rename as...
+ (Autoconf Macro Index): this.
+ (M4 Macro Index): New appendix.
+ (Programming in M4): New chapter.
+ Define M4sugar, M4sh, m4_pattern_forbid, and m4_pattern_allow.
+ (Quoting): Rename as...
+ (M$ Quotation): this.
+ Be part of `Programming in M4).
+
+2001-06-18 Nicolas Joly <njoly@pasteur.fr>
+
+ * tests/torture.at (AC_ARG_VAR): Set variables and export them
+ in separate statements for compatibility with Tru64 v5.1.
+
+2001-06-17 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_ARG_VAR_VALIDATE): Be sure to cache the
+ current values of the precious variables, not the previously
+ cached values.
+ Pass precious variables which are set to config.status.
+ * doc/autoconf.texi (Setting Output Variables): Document AC_ARG_VAR.
+ * tests/torture.at (AC_ARG_VAR): New.
+
+2001-06-15 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi: Move AC_FUNC_WAIT3 and
+ AC_SYS_RESTARTABLE_SYSCALLS to the obsolete section,
+ and explain why and how to replace them.
+ * acfunctions.m4 (AC_FUNC_WAIT3): Warn as obsolete.
+ * acspecific.m4 (AC_SYS_RESTARTABLE_SYSCALLS): Likewise.
+
+2001-06-15 Akim Demaille <akim@epita.fr>
+
+ `build_alias', `host_alias', and `target_alias' are not AC_SUBST'd.
+ Reported by Bruno Haible.
+
+ * acgeneral.m4 (AC_ARG_VAR): Move the AC_SUBST, from here...
+ (_AC_ARG_VAR_PRECIOUS): to here.
+
+2001-06-15 Pavel Roskin <proski@gnu.org>
+
+ * acheaders.m4 (_AC_CHECK_HEADER_DIRENT): Instead of defining
+ an unused pointer use cast to this type and `if' statement to
+ avoid warnings from the compiler.
+ (AC_HEADER_TIME): Likewise.
+ * actypes.m4 (AC_CHECK_MEMBER): s/foo/ac_aggr/. Use the member
+ in `if' statement to avoid warnings from the compiler. Declare
+ ac_aggr static to avoid the need to initialize it.
+
+2001-06-14 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Portable Shell): Move to follow `Writing
+ Macros'.
+
+2001-06-13 Akim Demaille <akim@epita.fr>
+
+ * m4/missing.m4, config/missing: Updated to Automake 1.4g's.
+ Suggested by Alexander Mai.
+
+2001-06-13 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): Guard
+ sys/types.h and sys/stat.h, and check for them.
+
+2001-06-13 Akim Demaille <akim@epita.fr>
+
+ * acheaders.m4 (AC_CHECK_HEADER, AC_CHECK_HEADERS): Support $4 =
+ INCLUDES.
+
+2001-06-12 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
+
+ * acspecific.m4 (AC_PATH_XTRA): Check if linking against libX11
+ succeeds and only try adding libdnet upon a failure.
+
+2001-06-12 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (&output_kind): Output the comment only if it exists.
+ (%kind_comment): Add entry for `programs'.
+ (&output_programs): Use &output_kind.
+ (&output_functions, &output_identifiers, &output_headers)
+ (&output_programs): Inline, and remove.
+
+2001-06-12 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (%kind_comment): New.
+ (output_kind): New.
+ (output_functions, output_identifiers, output_headers): Use it.
+
+2001-06-12 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (&print_unique): Take `$kind' and `$word' as
+ arguments, to factor indirections into `%macro' and `%used'.
+ (%generic_macro): Fix a typo.
+
+2001-06-12 Akim Demaille <akim@epita.fr>
+
+ * aclibraries: New.
+ * autoscan.in (@kinds): Add `libraries'.
+ Use `@kinds' instead of hard coded lists.
+ (%programs, %headers, %identifiers, %makevars, %libraries, %functions):
+ Remove, replaced by...
+ (%used): this.
+
+2001-06-12 Akim Demaille <akim@epita.fr>
+
+ * autoscan.in (%functions_macros %headers_macros)
+ (%identifiers_macros %programs_macros %makevars_macros): Remove,
+ replaced by...
+ (%macro): New.
+
+2001-06-11 Raja R Harinath <harinath@cs.umn.edu>
+
+ * aclang.m4 (AC_NO_EXECUTABLES): Override
+ _AC_COMPILER_EXEEXT_WORKS, not _AC_LANG_COMPILER_WORKS.
+
+2001-06-11 Akim Demaille <akim@epita.fr>
+
+ * aclang.m4 (AC_NO_EXECUTABLES): Define the macros with their
+ trailing new line.
+ Reported by Andreas Schwab.
+
+2001-06-11 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am, Makefile.maint: Typos.
+
+2001-06-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Here-Documents): New section, gathering
+ documentation about here-documents.
+ Use `href', not `uref', and other changes.
+
+2001-06-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Portable Shell Programming): Promoted as a
+ chapter.
+
+2001-06-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Limitations of Builtins): Complete the
+ description of the here-docs penalties with Alexandre Oliva's
+ explanations.
+
+2001-06-01 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi: Talk about here documents and speedups.
+ Do not use "echo" on arbitrary strings.
+ Spell "here-documents" consistently with the standard.
+
+2001-06-09 Akim Demaille <akim@epita.fr>
+
+ * doc/autoconf.texi (Concept Index): Introduce it.
+ Regenerate the menus.
+
+2001-06-09 Akim Demaille <akim@epita.fr>
+
+ * Makefile.maint, GNUmakefile: New, from Jim Meyering.
+ * config/prev-version.txt: New.
+ * config/move-if-change: New, for GNU libc.
+
+2001-06-06 Pavel Roskin <proski@gnu.org>
+
+ * tests/atgeneral.m4 (AT_INIT): Remove "/bin/sh" after $SHELL.
+
+2001-06-06 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_CHECK_LIB): Fix the cache var name to work
+ properly when $1 is not a literal.
+ Fixes PR Autoconf/187, reported by Bram Moolenaar.
+
+2001-06-06 Akim Demaille <akim@epita.fr>
+
+ Invoking AC_COPYRIGHT before AC_INIT fails.
+
+ * Makefile.am (.m4.m4f): Pass --fatal-warnings to m4.
+ * acgeneral.m4 (_m4_divert(VERSION_FSF))
+ (_m4_divert(VERSION_USER)): New.
+ (AC_COPYRIGHT): $2 is the diversion to use.
+ (_AC_INIT_COPYRIGHT): Use the FSF diversion.
+ (AC_INIT): Remove dead comments as now it's commutative.
+
+2001-06-06 Akim Demaille <akim@epita.fr>
+
+ * tests/semantics.at (AC_CHECK_LIB): Strengthen to reflect
+ PR autoconf/187.
+
+2001-06-05 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INIT_PARSE_ARGS): `prefix' and `exec_prefix'
+ can be empty.
+ `*dir' variables cannot be NONE.
+ Reported by Mark Kettenis.
+
+2001-06-05 Paul Eggert <eggert@twinsun.com>
+
+ * doc/autoconf.texi: Fix references to Solaris and SunOS versions.
+
+2001-06-04 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (AC_VAR_SET, AC_VAR_GET, AC_VAR_TEST_SET)
+ (AC_VAR_SET_IFELSE, AC_VAR_PUSHDEF and AC_VAR_POPDEF, AC_TR_CPP)
+ (AC_TR_SH): Move as...
+ * m4sh.m4 (AS_VAR_SET, AS_VAR_GET, AS_VAR_TEST_SET)
+ (AS_VAR_SET_IF, AC_VAR_PUSHDEF, AS_VAR_POPDEF, AS_TR_CPP)
+ (AS_TR_SH): these.
+ (_AS_TR_PREPARE, _AS_CR_PREPARE, _AS_TR_CPP_PREPARE)
+ (_AS_TR_SH_PREPARE): New.
+ (AS_SHELL_SANITIZE): Invoke _AS_TR_PREPARE.
+ * tests/aclocal.m4 (AC_STATE_SAVE): `as_' vars can be modified.
+
+2001-06-02 Akim Demaille <akim@epita.fr>
+
+ * Makefile.am (.m4.m4f): Pass the options first.
+ Fixes PR autoconf/182.
+
+2001-06-02 Nathan Sidwell <nathan@codesourcery.com>
+
+ GNU getopt, when POSIXLY_CORRECT does not permute options and
+ arguments. So pass the options first.
+ Fixes PR autoconf/184.
+
+ * autoconf.sh (m4_prefiles, m4f_prefiles): New variables.
+ (run_m4): Remove files.
+ (run_m4f): Remove.
+ Update remainder of script to use them.
+ (for warning in): Do not use a literal comma as it will not be
+ split by IFS.
+
+2001-06-02 Christian Marquardt <marq@gfz-potsdam.de>
+
+ * aclang.m4 (AC_PROG_F77): Add Fujitsu's "frt" to the list of
+ Fortran compilers to check.
+ (_AC_PROG_F77_V): Add '-###' as a possible option to print
+ information on library and object files.
+ (AC_PROG_CXX): Add Fujitsu's "FCC" to the list of C++ compilers
+ to check.
+
+2001-06-02 Akim Demaille <akim@epita.fr>
+
+ * autom4te.in (Request::@request): Declare with `vars', not `my',
+ as it prevents updates via `do FILENAME'.
+
+2001-06-02 Akim Demaille <akim@epita.fr>
+
+ * configure.in (standards_texi): Remove, dead code.
+
+2001-06-02 Akim Demaille <akim@epita.fr>
+
+ * autom4te.in: New.
+
+2001-06-02 Pavel Roskin <proski@gnu.org>
+
+ * acgeneral.m4 (_AC_INIT_PREPARE): Don't rely on $? in the traps
+ for signals other than 0 - exit with code 1.
+ * m4sh.m4 (AS_TMPDIR): Likewise.
+ * autoconf.in: Likewise. Also don't rely on exit == exit $?.
+ * autoheader.in: Likewise.
+ * autoreconf.in: Likewise.
+ * tests/torture.at (Signal handling): New test for the above.
+
+2001-06-01 Akim Demaille <akim@epita.fr>
+
+ * m4sugar.m4 (m4_defn, m4_undefine, m4_popdef): Clarify the error
+ message.
+
+2001-05-31 Akim Demaille <akim@epita.fr>
+
+ * acfunctions, acheaders, acidentifiers, acmakevars, acprograms:
+ Add copyright and comments.
+ * acheaders: Add stdint.h.
+ Suggested by Paul Eggert.
+
+2001-05-31 Akim Demaille <akim@epita.fr>
+
+ * atgeneral.m4 (AT_INIT): Use $SHELL.
+ * atspecific.m4 (AT_CHECK_DEFINES): Skip HAVE_STDINT_H.
+
+2001-05-31 Akim Demaille <akim@epita.fr>
+
+ * acgeneral.m4 (_AC_INCLUDES_DEFAULT_REQUIREMENTS): Include
+ stdint.h.
+ From Paul Eggert and Lars Hecking.
+
+2001-05-31 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at: Adjust line numbers in error messages.
+
+2001-05-31 Akim Demaille <akim@epita.fr>
+
+ * tests/base.at, tests/m4sh.at: When using AC_PLAIN_SCRIPT be sure
+ to emit the bangshe line.
+ Reported by David Carter.
+
+2001-05-30 Steven G. Johnson <stevenj@alum.mit.edu>
+
+ * aclang.m4 (AC_PROG_F77): Add Compaq's "fort" to the list of
+ Fortran (95) compilers to check.
+
+2001-05-29 Alexandre Duret-Lutz <duret_g@epita.fr>
+
+ * doc/autoconf.texi (Introduction, Pointers): Update the Autoconf
+ Macro Archive URL.
+
+2001-05-23 Pavel Roskin <proski@gnu.org>
+
+ * aclang.m4 (AC_PROG_CPP): Use `break' instead of `break 2' since
+ _AC_PROG_PREPROC_WORKS_IFELSE expands arguments outside the loop.
+ (AC_PROG_CXXCPP): Likewise.
+
+2001-05-22 Akim Demaille <akim@epita.fr>
+
+ * config: New directory.
+ * configure.in: AC_CONFIG_AUX_DIR it.
+ * tests/atspecific.m4 (AT_CONFIGURE_AC): Adjust.
+
+2001-05-22 Akim Demaille <akim@epita.fr>
+
+ * autoconf.in, autoreconf.in, autoheader.in, autoscan.in, ifnames.in,
+ * autoupdate.in: Specify the Emacs mode.
+ * acversion.m4.in: Rename as...
+ * acversion.m4: this.
+ * tests/Makefile.am (CLEANFILES): More garbage.
+
+2001-05-22 Akim Demaille <akim@epita.fr>
+
+ * autoconf.sh, autoreconf.sh, autoheader.sh, autoscan.pl, ifnames.sh:
+ Rename as...
+ * autoconf.in, autoreconf.in, autoheader.in, autoscan.in, ifnames.in:
+ these.
+
+2001-05-21 Akim Demaille <akim@epita.fr>
+
+ * configure.in: Bump to 2.50a.
+
+
+ -----
+
+ Local Variables:
+ coding: utf-8
+ End:
+
+ Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..58f2ead
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,127 @@
+# Having a separate GNUmakefile lets me 'include' the dynamically
+# generated rules created via cfg.mk (package-local configuration)
+# as well as maint.mk (generic maintainer rules).
+# This makefile is used only if you run GNU Make.
+# It is necessary if you want to build targets usually of interest
+# only to the maintainer.
+
+# Copyright (C) 2001, 2003, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# If the user runs GNU make but has not yet run ./configure,
+# give them a diagnostic.
+_gl-Makefile := $(wildcard [M]akefile)
+ifneq ($(_gl-Makefile),)
+
+# Make tar archive easier to reproduce.
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
+
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
+include Makefile
+
+# Some projects override e.g., _autoreconf here.
+-include $(srcdir)/cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include $(srcdir)/maint.mk
+
+# Ensure that $(VERSION) is up to date for dist-related targets, but not
+# for others: rerunning autoreconf and recompiling everything isn't cheap.
+_have-git-version-gen := \
+ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
+ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
+ _is-dist-target ?= $(filter-out %clean, \
+ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS)))
+ _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
+ ifneq (,$(_is-dist-target)$(_is-install-target))
+ _curr-ver := $(shell cd $(srcdir) \
+ && $(_build-aux)/git-version-gen \
+ .tarball-version \
+ $(git-version-gen-tag-sed-script))
+ ifneq ($(_curr-ver),$(VERSION))
+ ifeq ($(_curr-ver),UNKNOWN)
+ $(info WARNING: unable to verify if $(VERSION) is the correct version)
+ else
+ ifneq (,$(_is-install-target))
+ # GNU Coding Standards state that 'make install' should not cause
+ # recompilation after 'make all'. But as long as changing the version
+ # string alters config.h, the cost of having 'make all' always have an
+ # up-to-date version is prohibitive. So, as a compromise, we merely
+ # warn when installing a version string that is out of date; the user
+ # should run 'autoreconf' (or something like 'make distcheck') to
+ # fix the version, 'make all' to propagate it, then 'make install'.
+ $(info WARNING: version string $(VERSION) is out of date;)
+ $(info run '$(MAKE) _version' to fix it)
+ else
+ $(info INFO: running autoreconf for new version string: $(_curr-ver))
+GNUmakefile: _version
+ touch GNUmakefile
+ endif
+ endif
+ endif
+ endif
+endif
+
+.PHONY: _version
+_version:
+ cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
+ $(MAKE) $(AM_MAKEFLAGS) Makefile
+
+else
+
+.DEFAULT_GOAL := abort-due-to-no-makefile
+srcdir = .
+
+# The package can override .DEFAULT_GOAL to run actions like autoreconf.
+-include ./cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include ./maint.mk
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+$(MAKECMDGOALS): abort-due-to-no-makefile
+endif
+
+abort-due-to-no-makefile:
+ @echo There seems to be no Makefile in this directory. 1>&2
+ @echo "You must run ./configure before running 'make'." 1>&2
+ @exit 1
+
+endif
+
+# Tell version 3.79 and up of GNU make to not build goals in this
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+ dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
+.NOTPARALLEL:
+endif
+endif
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..d60e29a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands './configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the 'README' file for
+instructions specific to this package. Some packages provide this
+'INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions. Finally, it creates a shell script 'config.status' that
+you can run in the future to recreate the current configuration, and a
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
+
+ It can also use an optional file (typically called 'config.cache'
+and enabled with '--cache-file=config.cache' or simply '-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
+be considered for the next release. If you are using the cache, and at
+some point 'config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file 'configure.ac' (or 'configure.in') is used to create
+'configure' by a program called 'autoconf'. You need 'configure.ac' if
+you want to change it or regenerate 'configure' using a newer version
+of 'autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. 'cd' to the directory containing the package's source code and type
+ './configure' to configure the package for your system.
+
+ Running 'configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type 'make' to compile the package.
+
+ 3. Optionally, type 'make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type 'make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the 'make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type 'make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior 'make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing 'make clean'. To also remove the
+ files that 'configure' created (so you can compile the package for
+ a different kind of computer), type 'make distclean'. There is
+ also a 'make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type 'make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like 'make install' and 'make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the 'configure' script does not know about. Run './configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give 'configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU 'make'. 'cd' to the
+directory where you want the object files and executables to go and run
+the 'configure' script. 'configure' automatically checks for the
+source code in the directory that 'configure' is in and in '..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU 'make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use 'make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple '-arch' options to the
+compiler but only a single '-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the 'lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, 'make install' installs the package's commands under
+'/usr/local/bin', include files under '/usr/local/include', etc. You
+can specify an installation prefix other than '/usr/local' by giving
+'configure' the option '--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like '--bindir=DIR' to specify different values for particular
+kinds of files. Run 'configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of '${prefix}', so that
+specifying just '--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to 'configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+'make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+'${prefix}'. Any directories that were specified during 'configure',
+but not in terms of '${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the 'DESTDIR' variable. For
+example, 'make install DESTDIR=/alternate/directory' will prepend
+'/alternate/directory' before all installation names. The approach of
+'DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of '${prefix}'
+at 'configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
+
+ Some packages pay attention to '--enable-FEATURE' options to
+'configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to '--with-PACKAGE' options, where PACKAGE
+is something like 'gnu-as' or 'x' (for the X Window System). The
+'README' should mention any '--enable-' and '--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, 'configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the 'configure' options '--x-includes=DIR' and
+'--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of 'make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with 'make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with 'make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX 'make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as 'configure' are involved. Use GNU 'make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its '<wchar.h>' header file. The option '-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
+in your 'PATH', put it _after_ '/usr/bin'.
+
+ On Haiku, software installed for all users goes in '/boot/common',
+not '/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features 'configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, 'configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+'--build=TYPE' option. TYPE can either be a short name for the system
+type, such as 'sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file 'config.sub' for the possible values of each field. If
+'config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option '--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with '--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for 'configure' scripts to share,
+you can create a site shell script called 'config.site' that gives
+default values for variables like 'CC', 'cache_file', and 'prefix'.
+'configure' looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists. Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all 'configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to 'configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the 'configure' command line, using 'VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified 'gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+'configure' Invocation
+======================
+
+ 'configure' recognizes the following options to control how it
+operates.
+
+'--help'
+'-h'
+ Print a summary of all of the options to 'configure', and exit.
+
+'--help=short'
+'--help=recursive'
+ Print a summary of the options unique to this package's
+ 'configure', and exit. The 'short' variant lists options used
+ only in the top level, while the 'recursive' variant lists options
+ also present in any nested packages.
+
+'--version'
+'-V'
+ Print the version of Autoconf used to generate the 'configure'
+ script, and exit.
+
+'--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally 'config.cache'. FILE defaults to '/dev/null' to
+ disable caching.
+
+'--config-cache'
+'-C'
+ Alias for '--cache-file=config.cache'.
+
+'--quiet'
+'--silent'
+'-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to '/dev/null' (any error
+ messages will still be shown).
+
+'--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ 'configure' can determine that directory automatically.
+
+'--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+'--no-create'
+'-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+'configure' also accepts some other, not widely useful, options. Run
+'configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..bed0b6c
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,132 @@
+# Make Autoconf.
+
+# Copyright (C) 1999-2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# bin/ must be run first, as it builds executables needed for tests.
+# autom4te uses autotest.m4f to generate `testsuite', so build tests last.
+# Rules in man/ use scripts from both bin/ and tests/, so *it* goes last.
+SUBDIRS = bin . lib doc tests man
+
+ACLOCAL_AMFLAGS = -I m4
+
+EXTRA_DIST = ChangeLog.0 ChangeLog.1 ChangeLog.2 ChangeLog.3 \
+ BUGS COPYINGv3 COPYING.EXCEPTION \
+ GNUmakefile maint.mk cfg.mk \
+ build-aux/gendocs.sh \
+ build-aux/git-version-gen \
+ build-aux/announce-gen build-aux/gnupload \
+ build-aux/gitlog-to-changelog \
+ .prev-version .version
+
+## --------- ##
+## INSTALL. ##
+## --------- ##
+
+AM_MAKEINFOFLAGS = --no-headers --no-validate --no-split
+
+if MAKE_CASE_SENSITIVE
+pkgdata_DATA = $(srcdir)/INSTALL
+MAINTAINERCLEANFILES = $(srcdir)/INSTALL
+
+# Don't leave blank line at end of file.
+OMIT_TRAILING_EMPTY_LINES = '/^$$/H; /^$$/d; x; s/\n//p; s/\n*//; x'
+# Prefer 'plain quotes' over `makeinfo quotes'.
+CONVERT_QUOTES = "s/\`\([^']*\)'/'\1'/g"
+
+$(srcdir)/INSTALL: $(top_srcdir)/doc/install.texi
+ echo @firstparagraphindent insert \
+ | cat - $(top_srcdir)/doc/install.texi > tmp.texi
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+ --plaintext tmp.texi \
+ | sed -e $(CONVERT_QUOTES) -e $(OMIT_TRAILING_EMPTY_LINES) \
+ > $@-t && mv $@-t $@
+ rm -f tmp.texi
+endif
+
+# Generate the ChangeLog from git history.
+gen_start_date = 2012-01-15 18:00:00 UTC
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ if test -d $(top_srcdir)/.git; then \
+ $(top_srcdir)/build-aux/gitlog-to-changelog \
+ --since='$(gen_start_date)' > $(distdir)/cl-t \
+ && rm -f $(distdir)/ChangeLog \
+ && mv $(distdir)/cl-t $(distdir)/ChangeLog; \
+ fi
+
+# Dummy rule, to pacify automake "gnu" strictness and allow a clean
+# bootstrap. Creates a dummy ChangeLog (unless one is already present,
+# as might be the case for users of vc-dwim) that will be overridden
+# with a proper one at distribution time.
+ChangeLog:
+ @echo dummy > $@
+
+# Version string management. There are two files to be aware of:
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+# .version - present in a checked-out repository and in a distribution
+# tarball. At least as current as the most recent .tarball-version
+# creation. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+BUILT_SOURCES = $(top_srcdir)/.version
+$(top_srcdir)/.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+
+# Arrange so that .tarball-version appears only in distribution tarballs,
+# never in a checked-out repository.
+dist-hook: gen-ChangeLog
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+# Arrange to remove the symlink to GNUmakefile in VPATH builds.
+# TODO remove this once automake vs. AC_CONFIG_LINKS issue is fixed.
+distclean-local:
+ if test x"$(VPATH)" != x ; then rm -f GNUmakefile ; fi
+
+# Perl coverage statistics.
+PERL_COVERAGE_DB = `pwd`/cover_db
+PERL_COVERAGE_FLAGS = -MDevel::Cover=-db,$(PERL_COVERAGE_DB),-silent,on,-summary,off
+PERL_COVER = cover
+
+check-coverage-run: all
+ $(mkinstalldirs) $(PERL_COVERAGE_DB)
+ PERL5OPT="$(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \
+ $(MAKE) $(AM_MAKEFLAGS) check
+
+check-coverage-report:
+ @if test ! -d $(PERL_COVERAGE_DB); then \
+ echo "No coverage database found in \`$(PERL_COVERAGE_DB)'." >&2; \
+ echo "Please run \`make check-coverage' first" >&2; \
+ exit 1; \
+ fi
+ $(PERL_COVER) $(PERL_COVERAGE_DB) $(PERL_COVER_FLAGS)
+
+# We don't use direct dependencies here because we'd like to be able
+# to invoke the report even after interrupted check-coverage.
+check-coverage: check-coverage-run
+ $(MAKE) $(AM_MAKEFLAGS) check-coverage-report
+
+clean-local: clean-coverage
+clean-coverage:
+ rm -rf $(PERL_COVERAGE_DB)
+
+.PHONY: check-coverage check-coverage-run check-coverage-report clean-coverage
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..b77d939
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,853 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf.
+
+# Copyright (C) 1999-2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
+ ChangeLog INSTALL NEWS THANKS TODO build-aux/config.guess \
+ build-aux/config.sub build-aux/elisp-comp build-aux/install-sh \
+ build-aux/mdate-sh build-aux/missing build-aux/texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+DATA = $(pkgdata_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d "$(distdir)" \
+ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr "$(distdir)"; }; }
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# bin/ must be run first, as it builds executables needed for tests.
+# autom4te uses autotest.m4f to generate `testsuite', so build tests last.
+# Rules in man/ use scripts from both bin/ and tests/, so *it* goes last.
+SUBDIRS = bin . lib doc tests man
+ACLOCAL_AMFLAGS = -I m4
+EXTRA_DIST = ChangeLog.0 ChangeLog.1 ChangeLog.2 ChangeLog.3 \
+ BUGS COPYINGv3 COPYING.EXCEPTION \
+ GNUmakefile maint.mk cfg.mk \
+ build-aux/gendocs.sh \
+ build-aux/git-version-gen \
+ build-aux/announce-gen build-aux/gnupload \
+ build-aux/gitlog-to-changelog \
+ .prev-version .version
+
+AM_MAKEINFOFLAGS = --no-headers --no-validate --no-split
+@MAKE_CASE_SENSITIVE_TRUE@pkgdata_DATA = $(srcdir)/INSTALL
+@MAKE_CASE_SENSITIVE_TRUE@MAINTAINERCLEANFILES = $(srcdir)/INSTALL
+
+# Don't leave blank line at end of file.
+@MAKE_CASE_SENSITIVE_TRUE@OMIT_TRAILING_EMPTY_LINES = '/^$$/H; /^$$/d; x; s/\n//p; s/\n*//; x'
+# Prefer 'plain quotes' over `makeinfo quotes'.
+@MAKE_CASE_SENSITIVE_TRUE@CONVERT_QUOTES = "s/\`\([^']*\)'/'\1'/g"
+
+# Generate the ChangeLog from git history.
+gen_start_date = 2012-01-15 18:00:00 UTC
+
+# Version string management. There are two files to be aware of:
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+# .version - present in a checked-out repository and in a distribution
+# tarball. At least as current as the most recent .tarball-version
+# creation. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+BUILT_SOURCES = $(top_srcdir)/.version
+
+# Perl coverage statistics.
+PERL_COVERAGE_DB = `pwd`/cover_db
+PERL_COVERAGE_FLAGS = -MDevel::Cover=-db,$(PERL_COVERAGE_DB),-silent,on,-summary,off
+PERL_COVER = cover
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+install-pkgdataDATA: $(pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+ @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @$(am__cd) '$(distuninstallcheck_dir)' \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-local mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgdataDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgdataDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am am--refresh check check-am clean clean-generic \
+ clean-local ctags ctags-recursive dist dist-all dist-bzip2 \
+ dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-generic distclean-local \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-pkgdataDATA install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+ tags-recursive uninstall uninstall-am uninstall-pkgdataDATA
+
+
+@MAKE_CASE_SENSITIVE_TRUE@$(srcdir)/INSTALL: $(top_srcdir)/doc/install.texi
+@MAKE_CASE_SENSITIVE_TRUE@ echo @firstparagraphindent insert \
+@MAKE_CASE_SENSITIVE_TRUE@ | cat - $(top_srcdir)/doc/install.texi > tmp.texi
+@MAKE_CASE_SENSITIVE_TRUE@ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+@MAKE_CASE_SENSITIVE_TRUE@ --plaintext tmp.texi \
+@MAKE_CASE_SENSITIVE_TRUE@ | sed -e $(CONVERT_QUOTES) -e $(OMIT_TRAILING_EMPTY_LINES) \
+@MAKE_CASE_SENSITIVE_TRUE@ > $@-t && mv $@-t $@
+@MAKE_CASE_SENSITIVE_TRUE@ rm -f tmp.texi
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ if test -d $(top_srcdir)/.git; then \
+ $(top_srcdir)/build-aux/gitlog-to-changelog \
+ --since='$(gen_start_date)' > $(distdir)/cl-t \
+ && rm -f $(distdir)/ChangeLog \
+ && mv $(distdir)/cl-t $(distdir)/ChangeLog; \
+ fi
+
+# Dummy rule, to pacify automake "gnu" strictness and allow a clean
+# bootstrap. Creates a dummy ChangeLog (unless one is already present,
+# as might be the case for users of vc-dwim) that will be overridden
+# with a proper one at distribution time.
+ChangeLog:
+ @echo dummy > $@
+$(top_srcdir)/.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+
+# Arrange so that .tarball-version appears only in distribution tarballs,
+# never in a checked-out repository.
+dist-hook: gen-ChangeLog
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+# Arrange to remove the symlink to GNUmakefile in VPATH builds.
+# TODO remove this once automake vs. AC_CONFIG_LINKS issue is fixed.
+distclean-local:
+ if test x"$(VPATH)" != x ; then rm -f GNUmakefile ; fi
+
+check-coverage-run: all
+ $(mkinstalldirs) $(PERL_COVERAGE_DB)
+ PERL5OPT="$(PERL_COVERAGE_FLAGS)"; export PERL5OPT; \
+ $(MAKE) $(AM_MAKEFLAGS) check
+
+check-coverage-report:
+ @if test ! -d $(PERL_COVERAGE_DB); then \
+ echo "No coverage database found in \`$(PERL_COVERAGE_DB)'." >&2; \
+ echo "Please run \`make check-coverage' first" >&2; \
+ exit 1; \
+ fi
+ $(PERL_COVER) $(PERL_COVERAGE_DB) $(PERL_COVER_FLAGS)
+
+# We don't use direct dependencies here because we'd like to be able
+# to invoke the report even after interrupted check-coverage.
+check-coverage: check-coverage-run
+ $(MAKE) $(AM_MAKEFLAGS) check-coverage-report
+
+clean-local: clean-coverage
+clean-coverage:
+ rm -rf $(PERL_COVERAGE_DB)
+
+.PHONY: check-coverage check-coverage-run check-coverage-report clean-coverage
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..86f728a
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,2114 @@
+GNU Autoconf NEWS - User visible changes.
+
+* Noteworthy changes in release 2.69 (2012-04-24) [stable]
+
+** Autoconf now requires perl 5.6 or better (but generated configure
+ scripts continue to run without perl).
+
+* Noteworthy changes in release 2.68b (2012-03-01) [beta]
+ Released by Eric Blake, based on git versions 2.68.*.
+
+** Autoconf-generated configure scripts now unconditionally re-execute
+ themselves with $CONFIG_SHELL, if that's set in the environment.
+
+** The texinfo documentation no longer specifies "front-cover" or
+ "back-cover" texts, so that it may now be included in Debian's
+ "main" section.
+
+** Support for the Go programming language has been added. The new macro
+ AC_LANG_GO sets variables GOC and GOFLAGS.
+
+** AS_LITERAL_IF again treats '=' as a literal. Regression introduced in
+ 2.66.
+
+** The macro AS_EXECUTABLE_P, present since 2.50, is now documented.
+
+** Macros
+
+- AC_PROG_LN_S and AS_LN_S now fall back on 'cp -pR' (not 'cp -p') if 'ln -s'
+ does not work. This works better for symlinks to directories.
+
+- New macro AC_HEADER_CHECK_STDBOOL.
+
+- New and updated macros for Fortran support:
+
+ AC_FC_CHECK_BOUNDS to enable array bounds checking
+ AC_F77_IMPLICIT_NONE and AC_FC_IMPLICIT_NONE to disable implicit integer
+ AC_FC_MODULE_EXTENSION to compute the Fortran 90 module name extension
+ AC_FC_MODULE_FLAG for the Fortran 90 module search path flag
+ AC_FC_MODULE_OUTPUT_FLAG for the Fortran 90 module output directory flag
+ AC_FC_PP_SRCEXT for preprocessed Fortran source files extensions
+ AC_FC_PP_DEFINE for the Fortran preprocessor define flag
+
+* Noteworthy changes in release 2.68 (2010-09-22) [stable]
+ Released by Eric Blake, based on git versions 2.67.*.
+
+** AC_MSG_ERROR (and AS_ERROR) can once again be followed immediately by
+ `dnl'. Regression introduced in 2.66.
+
+** AC_INIT again allows URLs with '?' for its BUG-REPORT argument.
+ Regression introduced in 2.66.
+
+** AC_REPLACE_FUNCS again allows a non-literal argument, such as a shell
+ variable that expands to a list of functions to check. Regression
+ introduced in 2.66.
+
+** AT_BANNER() with empty argument will cause visual separation from previous
+ test category.
+
+** The macros AC_PREPROC_IFELSE, AC_COMPILE_IFELSE, AC_LINK_IFELSE, and
+ AC_RUN_IFELSE now warn if the first argument failed to use
+ AC_LANG_SOURCE or AC_LANG_PROGRAM to generate the conftest file
+ contents. A new macro AC_LANG_DEFINES_PROVIDED exists if you have
+ a compelling reason why you cannot use AC_LANG_SOURCE but must
+ avoid the warning.
+
+** The macro m4_define_default is now documented.
+
+** Symlinked config.cache files are supported; configure now tries to
+ update non-symlinked cache files atomically, so that concurrent configure
+ runs do not leave behind broken cache files. It is still unspecified
+ which subset or union of results is cached though.
+
+** Autotest testsuites should not contain long text lines any more, and be
+ portable even when very many test groups are used.
+
+** AT_CHECK semantics with respect to the Autotest variable $at_status and
+ shell execution environment of the arguments are documented now.
+
+** AC_FC_LIBRARY_LDFLAGS now tolerates output from newer gfortran.
+
+** Newly obsolete macros
+ The following macros have been marked obsolete. New programs
+ should use the corresponding Gnulib modules. Gnulib not only
+ detects a larger set of portability problems with these functions,
+ but also provides complete workarounds.
+
+ AC_FUNC_ERROR_AT_LINE AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+ AC_FUNC_MKTIME AC_FUNC_STRTOD
+
+
+* Major changes in Autoconf 2.67 (2010-07-21) [stable]
+ Released by Eric Blake, based on git versions 2.66.*.
+
+** AC_CONFIG_SUBDIRS with more than one subdirectory at a time works again.
+ Regression introduced in 2.66.
+
+** AC_CHECK_SIZEOF of a pointer type works again. Regression introduced in
+ 2.66.
+
+** New macro AC_FC_LINE_LENGTH to accept long Fortran source code lines.
+
+** AC_PREPROC_IFELSE now keeps the preprocessed output in the conftest.i
+ file for inspection by the commands in the ACTION-IF-TRUE argument.
+
+** AC_INIT again allows parentheses and other characters that are literal
+ in single- or double-quoted strings, and in quoted and unquoted
+ here-documents, for its PACKAGE and VERSION arguments. Regression
+ introduced in 2.66.
+
+** autoreconf passes warning flags to new enough versions of aclocal.
+
+** Running an Autotest testsuite in parallel mode no longer triggers a
+ race condition that could cause the testsuite run to end early,
+ fixing a sporadic failure in autoconf's own testsuite. Bug present
+ since introduction of parallel tests in 2.63b.
+
+
+* Major changes in Autoconf 2.66 (2010-07-02) [stable]
+ Released by Eric Blake, based on git versions 2.65.*.
+
+** AC_FUNC_MMAP works in C++ mode again. Regression introduced in 2.65.
+
+** Use of m4_divert without a named diversion now issues a syntax warning,
+ since it is seldom right to change diversions behind autoconf's back.
+
+** The macros AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, and
+ AC_TYPE_INT64_T work again. Regression introduced in 2.65.
+
+** AC_PROG_INSTALL correctly uses `shtool' again. Regression introduced
+ in 2.64.
+
+** Autoconf should work on EBCDIC hosts.
+
+** AC_CHECK_DECL and AC_CHECK_DECLS accept optional function argument types
+ for overloaded C++ functions.
+
+** AS_SET_CATFILE accepts nonliterals in its variable name argument now.
+
+** Autotest testsuites accept an option --recheck to rerun tests that
+ failed or passed unexpectedly during the last non-debug testsuite run.
+
+** AC_ARG_ENABLE and AC_ARG_WITH now also accept `+' signs in `--enable-*'
+ and `--with-*' arguments, converting them to underscores for the variable
+ names.
+
+** In configure scripts, loading CONFIG_SITE no longer searches PATH,
+ and problems in loading the configuration site files are diagnosed.
+
+** Autotest testsuites may optionally provide colored test results.
+
+** The previously undocumented Autotest macros AT_ARG_OPTION and
+ AT_ARG_OPTION_ARG have seen bug fixes and are documented now.
+ AT_ARG_OPTION has been changed in that the negative of a long option
+ --OPTION is now --no-OPTION rather than --noOPTION.
+
+** The macro AS_LITERAL_IF is slightly more conservative; text
+ containing shell quotes are no longer treated as literals.
+ Furthermore, a new macro, AS_LITERAL_WORD_IF, adds an additional
+ level of checking that no whitespace occurs in literals.
+
+** The macros AS_TR_SH and AS_TR_CPP no longer expand their results.
+
+** The following macros are now documented:
+ AS_BOX
+
+** New macro AC_FC_FIXEDFORM to accept fixed-form Fortran.
+
+
+* Major changes in Autoconf 2.65 (2009-11-21) [stable]
+ Released by Eric Blake, based on git versions 2.64.*.
+
+** Autoconf is now licensed under the General Public License version 3
+ or later (GPLv3+). As with earlier versions, the license includes
+ an exception clause so that you may release a configure script
+ generated by autoconf under the license of your own program.
+
+** New macros to support Objective C++.
+ AC_PROG_OBJCXX AC_PROG_OBJCXXCPP
+
+** The following undocumented autoconf macros, removed in Autoconf 2.64,
+ have been reinstated:
+ AH_CHECK_HEADERS
+
+ These macros are present only for backwards compatibility purposes.
+
+** The macro AC_LANG_COMPILER no longer fails on embedded systems that
+ lack fopen in the C library, such as AVR or RTEMS (regression
+ introduced in 2.64).
+
+** The AC_FC_FREEFORM macro no longer suffers from a whitespace bug that
+ made it fail with some Fortran compilers (regression introduced in
+ 2.64).
+
+** The AC_TYPE_UINT64_T and AC_TYPE_INT64_T macros have been fixed to no
+ longer mistakenly select a 32-bit type on some compilers (bug present
+ since macros were introduced in 2.59c).
+
+** The AC_FUNC_MMAP macro has been fixed to be portable to systems like
+ Cygwin (bug present since macro was introduced in 2.0).
+
+** The following documented autotest macros are new:
+ AT_CHECK_EUNIT
+
+** The following m4sugar macros now quote their expansion:
+ m4_toupper m4_tolower
+
+** The following m4sugar macros are new:
+ m4_escape
+
+** The m4sugar macro m4_text_wrap now copes with embedded quoting without
+ requiring quadrigraphs. For uses like AC_ARG_VAR([a], [[b c]]),
+ this gives the intuitive behavior of "[b c]" in the output (2.63
+ gave the output of "[b], [c]", and 2.64 encountered a failure).
+
+** The `$tmp' temporary directory used in config.status is documented for
+ public use now.
+
+** config.status now provides a --config option to produce the configuration.
+
+** Many cache variables used by Autoconf's macros are now documented.
+
+** Configure scripts work better on DJGPP by avoiding a bug present in
+ the DJGPP port of bash 2.04 in handling 'return' in a shell
+ function (regression introduced in 2.64).
+
+* Major changes in Autoconf 2.64 (2009-07-26) [stable]
+ Released by Eric Blake, based on git versions 2.63b.*.
+
+** Autoconf now requires GNU M4 1.4.6 or later. Earlier versions of M4
+ have a bug in regular expression handling that interferes with some
+ of the speedups provided since Autoconf 2.63. GNU M4 1.4.13 or
+ later is recommended.
+
+** AS_IF and AS_CASE have been taught to avoid syntax errors even when
+ given arguments that expand to just whitespace.
+
+** The following documented autoconf macros are new:
+ AC_ERLANG_SUBST_ERTS_VER
+
+** The autoheader tool now understands m4 macro arguments passed to
+ AC_DEFINE and AC_DEFINE_UNQUOTED.
+
+** Ensure AT_CHECK can support commands that include a # given with
+ proper m4 quoting. For shell comments, this is a new feature; for
+ non-shell comments, this fixes a regression introduced in 2.63b.
+ Additionally, AT_CHECK correctly supplies shell escapes for
+ metacharacters occurring in m4 macro expansions within the expected
+ stdout and stderr parameters.
+
+** The macro AT_CHECK now understands the concept of hard failure. If
+ a test exits with an unexpected status 99, cleanup actions for the
+ test are inhibited and the test is treated as a failure regardless
+ of AT_XFAIL_IF. It also understands the new directives
+ ignore-nolog, stdout-nolog, and stderr-nolog.
+
+** The following documented autotest macros are new:
+ AT_CHECK_UNQUOTED AT_FAIL_IF AT_SKIP_IF
+
+** The following documented m4sugar macros are new:
+ m4_argn m4_copy_force m4_default_nblank m4_default_nblank_quoted
+ m4_ifblank m4_ifnblank m4_rename_force
+
+** The autoconf testsuite now exercises all Erlang macros.
+
+* Major changes in Autoconf 2.63b (2009-03-31) [beta]
+ Released by Eric Blake, based on git versions 2.63.*.
+
+** The manual is now shipped under the terms of the GNU FDL 1.3.
+
+** AC_REQUIRE now detects the case of an outer macro which first expands
+ then later indirectly requires the same inner macro. Previously,
+ this case led to silent out-of-order expansion (bug present since
+ 2.50); it now issues a syntax warning, and duplicates the expansion
+ of the inner macro to guarantee dependencies have been met. See
+ the manual for advice on how to refactor macros in order to avoid
+ the bug in earlier autoconf versions and avoid increased script
+ size in the current version.
+
+** AC_DEFUN_ONCE has improved semantics. Previously, a macro declared
+ with AC_DEFUN_ONCE warned on a second invocation; and out-of-order
+ expansion was still possible. Now, dependencies are guaranteed,
+ and subsequent invocations are a silent no-op. This makes
+ AC_DEFUN_ONCE an ideal macro for silencing AC_REQUIRE warnings.
+
+** The following macros are now defined with AC_DEFUN_ONCE. This means
+ a subtle change in semantics; previously, an AC_DEFUN macro could
+ expand one of these macros multiple times or surround the macro
+ inside shell conditional text to bypass the effects of these
+ macros, but now the macro will expand exactly once, and prior to
+ the start of any enclosing AC_DEFUN macro:
+ AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_CANONICAL_TARGET
+ AC_HEADER_ASSERT AC_PROG_INSTALL AC_PROG_MKDIR_P
+ AC_USE_SYSTEM_EXTENSIONS
+
+** AC_LANG_ERLANG works once again (regression introduced in 2.61a).
+
+** AC_HEADER_ASSERT is fixed so that './configure --enable-assert' no
+ longer mistakenly disables assertions.
+
+** AC_INIT now takes an optional fifth parameter that can be used to
+ set AC_PACKAGE_URL, a URL for the package's home page; the URL is
+ used in `configure --help' and is also available via AC_DEFINE.
+
+** Autotest testsuites accept an option --jobs[=N] for parallel testing.
+ This feature is still in testing, and may not work on every
+ platform, help in improving it would be appreciated.
+
+** Autotest testsuites do not attempt to write startup error messages
+ to the log file before that is opened (regression introduced in 2.63).
+
+** Configure scripts now use shell functions. This feature leads to
+ smaller configure files and faster execution.
+
+** Present But Cannot Be Compiled: Autoconf will now proceed with
+ the compiler's result if a header is present but cannot be compiled.
+ The warning is still printed, and you should really fix it by
+ providing a fourth parameter to AC_CHECK_HEADER/AC_CHECK_HEADERS.
+
+** Autoreconf added aclocal to the set of programs affected by the
+ `autoreconf -I dir' option.
+
+** The following documented m4sugar macros are new:
+ m4_chomp m4_chomp_all m4_cleardivert m4_curry m4_default_quoted
+ m4_esyscmd_s m4_map_args m4_map_args_pair m4_map_args_sep
+ m4_map_args_w m4_set_map m4_set_map_sep m4_stack_foreach
+ m4_stack_foreach_lifo m4_stack_foreach_sep
+ m4_stack_foreach_sep_lifo
+
+** The following m4sugar macros are documented now, but in some cases
+ with slightly different semantics than what the previous
+ undocumented version had:
+ m4_copy m4_dumpdefs m4_rename m4_version_prereq
+
+** The m4sugar macro m4_expand has been taught to handle unterminated
+ comments and shell case statements. As a result, it is used
+ internally in more places, such as AC_DEFINE and AT_CHECK. Most
+ uses of AC_DEFINE and AT_CHECK should not behave any differently;
+ however, it may be necessary to add double-quoting around
+ unbalanced `(' where single-quoting used to be sufficient.
+
+** The following documented m4sh macros are new:
+ AS_INIT_GENERATED AS_LINENO_PREPARE AS_ME_PREPARE AS_SET_STATUS
+ AS_VAR_APPEND AS_VAR_ARITH AS_VAR_COPY
+
+** The following m4sh macros are documented now, but in some cases
+ with slightly different semantics than what the previous
+ undocumented version had:
+ AS_ECHO AS_ECHO_N AS_ESCAPE AS_EXIT AS_LITERAL_IF AS_UNSET
+ AS_VAR_IF AS_VAR_POPDEF AS_VAR_PUSHDEF AS_VAR_SET AS_VAR_SET_IF
+ AS_VAR_TEST_SET AS_VERSION_COMPARE
+
+** The m4sh macros AS_IF and AS_CASE can now be used in shell lists.
+ The responsibility for supplying a trailing newline now belongs to
+ the call site, but since most users did not add dnl, this generally
+ results in fewer empty lines in configure.
+
+
+* Major changes in Autoconf 2.63 (2008-09-09) [stable]
+ Released by Eric Blake, based on git versions 2.62.*.
+
+** AC_C_BIGENDIAN does not mistakenly report "universal" for some
+ bigendian hosts, a regression introduced with universal binary
+ support in 2.62.
+
+** AC_PATH_X now includes /lib64 and /usr/lib64 in its list of default
+ library directories.
+
+** AC_USE_SYSTEM_EXTENSIONS no longer conflicts with an external
+ AC_DEFINE([__EXTENSIONS__]). This fixes a regression introduced in
+ 2.62 when using macros such as AC_AIX that were made obsolete in
+ favor of the more portable AC_USE_SYSTEM_EXTENSIONS.
+
+** AC_CHECK_TARGET_TOOLS is usable in the non-cross-compile case.
+
+** Newly obsolete macros
+ The following macro has been marked obsolete, since current porting
+ targets can safely assume C89 semantics that signal handlers return
+ void. We have no current plans to remove the macro.
+
+ AC_TYPE_SIGNAL
+
+** The macros m4_map and m4_map_sep now ignore any list elements
+ consisting of just empty quotes, and m4_map_sep now expands its
+ separator. This fixes a regression in 2.62 when these macros were
+ first documented, for the sake of clients expecting the semantics
+ that these macros had prior to that time. The new macros m4_mapall
+ and m4_mapall_sep, along with extra quoting of the separator, can
+ be used to get the semantics that m4_map_sep had in 2.62.
+
+** Clients of m4_expand, such as AS_HELP_STRING and AT_SETUP, can now
+ handle properly quoted but otherwise unbalanced parentheses (for
+ some macros, this fixes a regression in 2.62).
+
+** Two new quadrigraphs have been introduced: @{:@ for (, and @:}@ for ),
+ allowing the output of unbalanced parentheses in more contexts.
+
+** The following m4sugar macros are new:
+ m4_cleardivert m4_joinall m4_mapall m4_mapall_sep m4_reverse
+ m4_set_add m4_set_add_all m4_set_contains m4_set_contents
+ m4_set_delete m4_set_difference m4_set_dump m4_set_empty
+ m4_set_foreach m4_set_intersection m4_set_list m4_set_listc
+ m4_set_remove m4_set_size m4_set_union
+
+** The following m4sugar macros now accept multiple arguments, as is the
+ case with underlying m4:
+ m4_defn m4_popdef m4_undefine
+
+** The following m4sugar macros now guarantee linear scaling; they
+ previously had linear scaling with m4 1.6 but quadratic scaling
+ when using m4 1.4.x. All macros built on top of these also gain
+ the scaling improvements.
+ m4_bmatch m4_bpatsubsts m4_case m4_cond m4_do m4_dquote_elt
+ m4_foreach m4_join m4_list_cmp m4_map m4_map_sep m4_max
+ m4_min m4_shiftn
+
+** AT_KEYWORDS once again performs expansion on its argument, such that
+ AT_KEYWORDS([m4_if([$1], [], [default])]) no longer complains about
+ the possibly unexpanded m4_if [regression introduced in 2.62].
+
+** Config header templates `#undef UNDEFINED /* comment */' do not lead to
+ nested comments any more; regression introduced in 2.62.
+
+
+* Major changes in Autoconf 2.62 (2008-04-05) [stable]
+ Released by Eric Blake, based on git versions 2.61a.*.
+
+** Many optimizations have been applied to make overall execution faster.
+
+** Autotest now makes use of shell functions.
+
+** config.status now uses awk instead of sed also for config headers.
+
+ - As a side effect, AC_DEFINE and AC_DEFINE_UNQUOTED now handle multi-line
+ values, i.e., backslash-newline combinations are handled correctly.
+ Further, for config headers, the total size of values is not limited by
+ the POSIX length limit of text lines any more, only each single line.
+
+** New config variable `top_build_prefix'.
+
+** New Autoconf macros:
+ AC_AUTOCONF_VERSION AC_OPENMP AC_PATH_PROGS_FEATURE_CHECK
+
+** AC_C_BIGENDIAN now supports universal binaries a la Mac OS X.
+
+** AC_C_RESTRICT now prefers to #define 'restrict' to a variant spelling
+ like '__restrict' if the variant spelling is available, as this is
+ more likely to work when mixing C and C++ code.
+
+** AC_CHECK_ALIGNOF's type argument T is now documented better: it must
+ be a string of tokens such that "T y;" is a valid member declaration
+ in a struct.
+
+** AC_CHECK_SIZEOF now accepts objects as well as types: the general rule
+ is that sizeof (X) works, then AC_CHECK_SIZEOF (X) should work.
+
+** AC_CHECK_TYPE and AC_CHECK_TYPES now work on any C type-name; formerly,
+ they did not work for function types. In C++, they now work on any
+ type-id that can be the operand of sizeof; this is similar to C,
+ except it excludes anonymous struct and union types. Formerly,
+ some (but not all) C++ types involving anonymous struct and union
+ were accepted, though this was not documented.
+
+** AC_CONFIG_LINKS now prefers to link against files in the build tree
+ if found, and it works to link against a file of the same name in
+ the source tree, even if both trees coincide.
+
+** AC_INIT no longer alters $@; regression introduced in 2.60.
+
+** AC_USE_SYSTEM_EXTENSIONS now defines _ALL_SOURCE for Interix platforms.
+
+** AS_HELP_STRING no longer underquotes its first argument; it also handles
+ the case where the first argument contains single-quoted commas.
+ For example, "AS_HELP_STRING([-a, [--arg[=foo]]], [bar])" produces:
+ " -a, --arg[=foo] bar"
+ Additionally, the macro now takes two additional arguments,
+ indent-column and wrap-column; these should not normally be needed,
+ but can be used to fine-tune how the output text is wrapped.
+
+** AC_PROG_INSTALL now requires an install program that can install multiple
+ files into a target directory.
+
+** The command 'autoconf -' now correctly processes a file from stdin.
+
+** 'autoreconf -m' now honors $MAKE.
+
+** For all of the directory arguments for 'configure', such as '--prefix'
+ or '--bindir', trailing slashes are stripped. As an example, if
+ tab completion in the user's shell appends trailing slashes, the
+ command './configure --prefix=/usr/' will still result in an
+ expanded libdir value of /usr/lib, not /usr//lib.
+
+** `configure --help=recursive' now works in read-only trees and from
+ unconfigured build trees.
+
+** If precious variables differ only in whitespace, then the cache consistency
+ check warns instead of fails, and reuses the old value.
+
+** AT_BANNER is now documented.
+
+** AT_SETUP now handles macro expansions properly when calculating line
+ length.
+
+** Autotest now determines $srcdir correctly.
+
+** Testsuites built by autotest now accept a -C/--directory=DIR option
+ to adjust the working directory prior to creating files.
+
+** Autoconf now requires GNU M4 1.4.5 or later. Earlier versions of M4 have
+ a bug in macro tracing that interferes with the interaction between
+ Autoconf and Automake. GNU M4 1.4.11 or later is recommended. The
+ configure search for a working M4 is improved.
+
+** For portability with the eventual M4 2.0, macros should no longer use
+ anything larger than $9 to refer to arguments.
+
+** Documentation for m4sugar is improved.
+
+ - The following macros were previously available as undocumented
+ interfaces; the macros are now documented as stable interfaces.
+
+ __oline__ m4_assert m4_bmatch m4_bpatsubsts m4_car m4_case
+ m4_cdr m4_default m4_divert_once m4_divert_pop m4_divert_push
+ m4_divert_text m4_do m4_errprintn m4_fatal m4_flatten
+ m4_ifndef m4_ifset m4_ifval m4_ifvaln m4_location
+ m4_n m4_shiftn m4_strip m4_warn
+
+ - The following macros were previously available as undocumented
+ interfaces, but had bug fixes or semantic changes as part of this
+ release. Packages that relied on the undocumented behavior
+ should be analyzed to make sure they will still work with the
+ new documented behavior.
+
+ m4_cmp m4_list_cmp m4_join m4_map m4_map_sep m4_sign
+ m4_text_box m4_text_wrap m4_version_compare
+
+ - The m4_wrap macro used to have unspecified order, but now
+ guarantees FIFO order. m4_wrap_lifo was added to guarantee LIFO
+ order.
+
+ - Packages using the undocumented m4sugar macro m4_PACKAGE_VERSION
+ should consider using the new AC_AUTOCONF_VERSION instead.
+
+ - m4sugar macros that are not documented in the manual are still
+ deemed experimental, and should not be used outside of Autoconf.
+
+** The m4sugar macros m4_append and m4_append_uniq, first documented in
+ 2.60, have been fixed to treat both the string and the separator
+ arguments consistently with regards to quoting. Prior to this fix,
+ m4_append_uniq could mistakenly duplicate entries if the expansion
+ of the separator resulted in a different string (for example, if it
+ contained quotes, a comma, or a macro name). However, it means
+ that programs previously using
+ m4_append([name], [string], [[, ]])
+ are now using a four-character separator instead of the intended
+ comma and space. If you need portability to earlier versions of
+ Autoconf, you can insert the following snippet after AC_INIT but
+ before any other macro expansions, to enforce the new semantics:
+ m4_pushdef([m4_append], [m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+ Additionally, m4_append_uniq now takes optional parameters that can
+ be used to take action depending on whether anything was appended,
+ and warns if a non-empty separator occurs within the string being
+ appended, since that can lead to duplicates.
+
+** The following m4sugar macros are new:
+ m4_append_uniq_w m4_apply m4_combine m4_cond m4_count
+ m4_dquote_elt m4_echo m4_expand m4_ignore m4_make_list m4_max
+ m4_min m4_newline m4_shift2 m4_shift3 m4_unquote m4_wrap_lifo
+
+** Warnings are now generated by default when an installer invokes
+ 'configure' with an unknown --enable-* or --with-* option.
+ These warnings can be disabled with the new AC_DISABLE_OPTION_CHECKING
+ macro, or by invoking 'configure' with --disable-option-checking.
+
+** Existing obsolete macros
+ The documentation for the following macros is adjusted to make it
+ more clear that they have previously been marked obsolete, as their
+ functionality can be accomplished by other macros. We have no
+ current plans to remove them from Autoconf.
+
+ AC_ENABLE AC_STRUCT_ST_BLKSIZE AC_STRUCT_ST_RDEV AC_WITH
+
+** Newly obsolete macros
+ The following macros have been marked obsolete, as they only
+ perform a subset of AC_USE_SYSTEM_EXTENSIONS. We have no current
+ plans to remove them.
+
+ AC_AIX AC_GNU_SOURCE AC_ISC_POSIX AC_MINIX
+
+** AC_C_LONG_DOUBLE is obsolescent.
+ The documentation now says that AC_C_LONG_DOUBLE is obsolescent: it
+ tests for problems that are so old that it is no longer of
+ practical importance on current systems. New programs need not use
+ AC_C_LONG_DOUBLE. We have no current plans to remove it.
+
+** AC_DIAGNOSE, AC_WARNING, and AC_FATAL are obsolescent.
+ The documentation now favors the use of M4sugar macros m4_warn and
+ m4_fatal, since the naming makes it more obvious that the
+ diagnostics are associated with M4 expansion (ie. when running
+ `autoconf'), and offers less confusion with the AC_MSG_ERROR,
+ AC_MSG_FAILURE, and AC_MSG_WARN macros which manage diagnostics
+ when running `configure'. We have no current plans to remove these
+ macros.
+
+
+* Major changes in Autoconf 2.61a (2006-12-11)
+
+** AC_FUNC_FSEEKO was broken in 2.61; it didn't make fseeko and ftello visible
+ on many platforms. This has been fixed.
+
+** AC_FUNC_SETVBUF_REVERSED is now obsolete. It is still defined for backward
+ compatibility but it does nothing. The macro was already
+ obsolescent, as the last systems to have the problem were those
+ based on SVR2, which became obsolete in 1987. The macro had bugs
+ on some modern systems and could no longer be maintained reliably
+ due to lack of ancient systems to test it on.
+
+** config.status now uses awk instead of sed for most substitutions, for speed.
+
+ - As a side effect multi-line values of substituted variables no
+ longer have a small limit in total size, though for portability
+ each line should not exceed the POSIX length limit for text lines.
+
+ - It is now documented that Makefile.in should not contain
+ overlapping variable occurrences, e.g., @VAR1@VAR2@.
+ Autoconf's behavior was always iffy in such cases, and the
+ awk implementation has changed the behavior.
+
+** Many uses of 'echo' have been rewritten so that Autoconf-generated
+ scripts have fewer problems with strings or file names containing
+ embedded special characters such as backslash or leading "-". This
+ was implemented by using `printf '%s\n' "$foo"' instead of `echo
+ "$foo"' when printf works. Due to the implementation technique
+ used, Autoconf-generated scripts now run considerably more slowly
+ on ancient implementations lacking printf. However, this should
+ not be a problem, since Autoconf-generated scripts in practice
+ invariably find a more-modern shell these days.
+
+
+* Major changes in Autoconf 2.61 (2006-11-17)
+
+** New macros AC_C_FLEXIBLE_ARRAY_MEMBER, AC_C_VARARRAYS.
+
+** AC_ARG_ENABLE and AC_ARG_WITH now allow '.' in feature and package names.
+
+
+* Major changes in Autoconf 2.60b (2006-10-22)
+
+** BIN_SH
+ Autoconf-generated shell scripts no longer export BIN_SH, due to
+ configuration hassles with this. Installers who need BIN_SH in
+ their environment should set it before invoking 'configure' and
+ 'make'. As far as we know, this affects only Unixware installations.
+
+** Obsolescent macros
+ The documentation now says that the following macros are obsolescent,
+ as they are superseded by Gnulib:
+
+ AC_FUNC_FNMATCH AC_FUNC_FNMATCH_GNU AC_FUNC_GETLOADVG AC_REPLACE_FNMATCH
+
+ New programs should use the Gnulib counterparts of these macros.
+ We have no current plans to remove them from Autoconf.
+
+** AC_COMPUTE_INT no longer caches or reports results.
+
+** AC_CHECK_DECL now also works with aggregate objects.
+
+** AC_USE_SYSTEM_EXTENSIONS now defines _TANDEM_SOURCE for NonStop platforms.
+
+** GNU M4 1.4.7 or later is now recommended.
+
+** m4_mkstemp
+ New M4sugar macro, which is more secure than the POSIX M4 maketemp.
+
+** m4_maketemp
+ Now an alias for m4_mkstemp.
+
+* Major changes in Autoconf 2.60a (2006-08-25)
+
+** GNU M4 1.4.6 or later is now recommended.
+
+** The check for C99 now tests for varargs macros, as documented.
+ It also tests that the preprocessor supports 64-bit integers.
+
+** Autoconf now uses constructs like "#ifdef HAVE_STDLIB_H" rather than
+ "#if HAVE_STDLIB_H", so that it now works with "gcc -Wundef -Werror".
+
+** The functionality of the undocumented _AC_COMPUTE_INT is now provided
+ by a public and documented macro, AC_COMPUTE_INT. The parameters to the
+ two macros are different, so autoupdate will not change the old private name
+ to the new one. _AC_COMPUTE_INT may be removed in a future release.
+
+** AC_TYPE_LONG_LONG_INT and AC_TYPE_UNSIGNED_LONG_LONG_INT now require
+ that long long types be at least 64 bits wide, as C99 and tradition
+ requires. Formerly, they accepted implementations of any width.
+
+
+* Major changes in Autoconf 2.60
+
+ Released 2006-06-23, by Ralf Wildenhues.
+
+** Autoconf no longer depends on whether m4wrap is FIFO (as Posix requires)
+ or LIFO (as in GNU M4 1.4.x). GNU M4 2.0 is expected to conform to Posix
+ here, so m4wrap/m4_wrap users should no longer depend on LIFO behavior.
+
+** Provide a way to turn off warnings about the changed directory variables.
+
+* Major changes in Autoconf 2.59d
+
+ Released 2006-06-05, by Ralf Wildenhues.
+
+** GNU make now recommended for VPATH builds
+ INSTALL now suggests VPATH builds (e.g., "sh ../srcdir/configure")
+ only if you use GNU make. In practice, other 'make' implementations
+ have too many subtle incompatibilities in their support for VPATH.
+ Many packages (including Autoconf itself) are portable to other
+ 'make' implementations, but some packages are not, and recommending
+ GNU make keeps the installation instructions simpler.
+
+** Even more safety checks for the new Directory variables:
+ Warn about suspicious `${datarootdir}' found in config files output.
+
+** AC_TRY_COMMAND, AC_TRY_EVAL, ac_config_guess, ac_config_sub, ac_configure
+ These never-documented macros and variables have been marked with
+ comments saying that they may be removed in a future release,
+ because their use can lead to unintended code being executed.
+ If you need functionality that only these macros or variables
+ currently supply, please write bug-autoconf@gnu.org.
+
+** AC_SUBST, AC_DEFINE
+ Literal arguments to these are passed to m4_pattern_allow now.
+
+** AC_PROG_CC_STDC
+ Passing 'ac_cv_prog_cc_stdc=no' to 'configure' now sets ac_cv_prog_cc_c99
+ and ac_cv_prog_cc_c89 to 'no' as well, for backward compatibility with
+ obsolete K&R tests in the Automake test suite.
+
+** AC_PROG_CXX_C_O
+ New macro.
+
+** AC_PROG_MKDIR_P
+ New macro.
+
+** AS_MKDIR_P
+ Now more robust with special characters in file names, or when
+ multiple processes create the same directory at the same time.
+
+** Obsolescent macros
+ The documentation now says that the following macros are obsolescent:
+ they test for problems that are so old that they are no longer of
+ practical importance on current systems.
+
+ AC_C_BACKSLASH_A AC_FUNC_MEMCMP AC_HEADER_DIRENT
+ AC_C_CONST AC_FUNC_SELECT_ARGTYPES AC_HEADER_STAT
+ AC_C_PROTOTYPES AC_FUNC_SETPGRP AC_HEADER_STDC
+ AC_C_STRINGIZE AC_FUNC_SETVBUF_REVERSED AC_HEADER_SYS_WAIT
+ AC_C_VOLATILE AC_FUNC_STAT AC_HEADER_TIME
+ AC_FUNC_CLOSEDIR_VOID AC_FUNC_STRFTIME AC_ISC_POSIX
+ AC_FUNC_GETPGRP AC_FUNC_UTIME_NULL AC_PROG_GCC_TRADITIONAL
+ AC_FUNC_LSTAT AC_FUNC_VPRINTF AC_STRUCT_TM
+
+ New programs need not use these macros. We have no current plans to
+ remove them.
+
+** autoreconf
+ For compatibility with future Libtool 2.0, autoreconf will invoke
+ libtoolize with the option `--ltdl' now, if LT_CONFIG_LTDL_DIR is
+ used.
+
+* Major changes in Autoconf 2.59c
+
+ Released 2006-04-12, by Ralf Wildenhues.
+
+** The configure command now redirects standard input from /dev/null,
+ to help avoid problems with subsidiary commands that might mistakenly
+ read standard input. AS_ORIGINAL_STDIN_FD points to the original
+ standard input before this redirection, if you really want configure to
+ read from standard input.
+
+** Directory variables adjusted to recent changes in the GNU Coding Standards.
+ The following directory variables are new:
+
+ datarootdir read-only architecture-independent data root [PREFIX/share]
+ localedir locale-specific message catalogs [DATAROOTDIR/locale]
+ docdir documentation root [DATAROOTDIR/doc/PACKAGE]
+ htmldir html documentation [DOCDIR]
+ dvidir dvi documentation [DOCDIR]
+ pdfdir pdf documentation [DOCDIR]
+ psdir ps documentation [DOCDIR]
+
+ The following variables have new default values:
+
+ datadir read-only architecture-independent data [DATAROOTDIR]
+ infodir info documentation [DATAROOTDIR/info]
+ mandir man documentation [DATAROOTDIR/man]
+
+ This means that if you use any of `@datadir@', `@infodir@', or
+ `@mandir@' in a file, you will have to ensure `${datarootdir}' is
+ defined in this file. As a temporary measure, if any of those are
+ found but no mention of `datarootdir', the substitutions will be
+ replaced with values that do not contain `${datarootdir}', and a
+ warning will be issued.
+
+** @top_builddir@ is now a dir name: it is always nonempty and doesn't have
+ a trailing slash. Similar change will be made to ac_top_builddir in a
+ future release; the old style value, which matches (../)*, is (and will
+ continue to be) available as ac_top_build_prefix.
+
+** AC_C_TYPEOF
+ New macro to check for support of 'typeof' syntax a la GNU C.
+
+** AC_CHECK_DECLS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_HEADERS_ONCE
+ New "once-only" variants of commonly-used macros, to make 'configure'
+ smaller and faster in common cases.
+
+** AC_FUNC_STRTOLD
+ New macro to check for strtold with C99 semantics.
+
+** AC_HEADER_ASSERT
+ New macro that lets builder disable assertions at 'configure'-time.
+
+** AC_PATH_X
+ Now checks for X11/Xlib.h and XrmInitialize (X proper) rather than
+ X11/Intrinsic.h and XtMalloc (Xt).
+
+** AC_PRESERVE_HELP_ORDER
+ New macro that causes `configure' to display help strings for AC_ARG_ENABLE
+ and AC_ARG_WITH arguments in one region, in the order defined. The default
+ behavior is to group options of each classes separately.
+
+** AC_PROG_CC, AC_PROG_CXX
+ No longer automatically arrange to declare the 'exit' function of C,
+ when a C++ compiler is used. Standard Autoconf macros no longer use
+ 'exit', so this is no longer an issue for them. If you use C++, and
+ want to call 'exit', you'll have to arrange for its declaration
+ yourself. But we now suggest you return from 'main' instead.
+
+** AC_PROG_CC_C89, AC_PROG_CC_C99
+ New macros for ISO C99 support. AC_PROG_CC_C89 and AC_PROG_CC_C99
+ check for ANSI C89 and ISO C99 support respectively.
+
+** AC_PROG_CC_STDC
+ Has been unobsoleted, and will check if the compiler supports ISO
+ C99, falling back to ANSI C89 if not. ac_cv_prog_cc_stdc is
+ retained for backwards compatibility, assuming the value of
+ ac_cv_prog_cc_c99 or ac_cv_prog_cc_c89 (whichever is valid, in
+ that order).
+
+** AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE
+ New macros for checking commonly-used members of struct dirent.
+
+** AC_SUBST
+ The substituted value can now contain newlines.
+
+** AC_SUBST_FILE
+ The substitution now occurs only when @variable@ is on a line by itself,
+ optionally surrounded by spaces and tabs. The whole line is replaced.
+
+** AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER
+ New macros to check for long double, and whether it is wider than double.
+ The old macro AC_C_TYPE_LONG_DOUBLE has been marked as obsolete;
+ applications should switch to the new macro.
+
+** AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T,
+ AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_LONG_INT, AC_TYPE_SSIZE_T,
+ AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T,
+ AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT
+ New macros to check for C99 and POSIX types.
+
+** AC_USE_SYSTEM_EXTENSIONS
+ New macro to enable extensions to Posix.
+
+** AH_HEADER
+ New macro which is defined to the name of the first declared config header
+ or undefined if no config headers have been declared yet.
+
+** AS_HELP_STRING
+ The macro correctly handles quadrigraphs now.
+
+** AS_BOURNE_COMPATIBLE, AS_SHELL_SANITIZE, AS_CASE
+ These macros are new or published now.
+
+** AT_COPYRIGHT
+ New macro for copyright notices in testsuite files.
+
+** ALLOCA, LIBOBJS, LTLIBOBJS
+ Object names added to these variables are now prefixed with `${LIBOBJDIR}',
+ as in `${LIBOBJDIR}alloca.o'. LIBOBJDIR is meant to be defined from
+ `Makefile.in' in case the object files lie in a different directory.
+ The LIBOBJDIR feature is experimental.
+
+** autoreconf
+ Supports --no-recursive now.
+
+** New macros to support Erlang/OTP.
+ New macros for configuring paths to Erlang tools and libraries:
+ AC_ERLANG_PATH_ERLC, AC_ERLANG_NEED_ERLC, AC_ERLANG_PATH_ERL,
+ AC_ERLANG_NEED_ERL, AC_ERLANG_CHECK_LIB, AC_ERLANG_SUBST_ROOT_DIR,
+ AC_ERLANG_SUBST_LIB_DIR.
+
+ New macros for configuring installation of Erlang libraries:
+ AC_ERLANG_SUBST_INSTALL_LIB_DIR, AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR.
+
+** The manual now mentions Gnulib more prominently.
+
+** New macros to support Objective C.
+ AC_PROG_OBJC, AC_PROG_OBJCPP.
+
+* Major changes in Autoconf 2.59b
+
+ Released 2004-08-20, by Paul Eggert.
+
+** AC_CHECK_ALIGNOF
+ New macro that computes the default alignment of a type.
+
+** AC_CHECK_TOOL, AC_PATH_TOOL, AC_CHECK_TOOLS
+ When cross-compiling, these macros will give a warning if the tool
+ is not prefixed. In the future, unprefixed cross tools will not
+ be detected; please consult the info documentation for information
+ about the reason of this change.
+
+** AC_CHECK_TARGET_TOOL, AC_PATH_TARGET_TOOL, AC_CHECK_TARGET_TOOLS
+ New macros that detect programs whose name is prefixed with the
+ target type, if the build type and target type are different.
+
+** AC_REQUIRE_AUX_FILE
+ New trace macro that declares expected auxiliary files.
+
+** AC_PROG_GREP
+ New macro that tests for a grep program that accepts as a long a line
+ as possible.
+
+** AC_PROG_EGREP, AC_PROG_FGREP
+ These macros now require AC_PROG_GREP, and try EGREP="$GREP -E" and
+ FGREP="$GREP -F" respectively if possible, or else run a path search for
+ a program that accepts as long a line as possible.
+
+** AC_PROG_SED
+ New macro that tests for a sed program that truncates as few characters
+ as possible.
+
+* Major changes in Autoconf 2.59
+
+ Released 2003-11-04, by Akim Demaille
+
+** ac_abs_builddir etc.
+ Absolute file names were actually relative in 2.58.
+
+* Major changes in Autoconf 2.58
+
+ Released 2003-11-04, by Akim Demaille
+
+** core.*
+ core.* files are no longer removed, as they may be valid user files.
+
+** autoreconf and auxiliary directory
+ Autoreconf creates the auxiliary directory if needed. This is
+ especially useful for initial "bootstrapping" of fresh CVS checkouts.
+
+** AC_CONFIG_MACRO_DIR
+ Use this macro to declare the directory for local M4 macros for aclocal.
+
+** AC_LIBOBJS
+ No longer includes twice the same file in LIBOBJS if invoked
+ multiple times.
+
+** AC_CONFIG_COMMANDS
+ The directory for its first argument is automatically created. For
+ instance, with
+
+ AC_CONFIG_COMMANDS([src/modules.hh], [...])
+
+ $top_builddir/src/ is created if needed.
+
+** Autotest and local.at
+ The optional file local.at is always included in Autotest test suites.
+
+** Warnings
+ The warnings are always issued, including with cached runs.
+ This became a significant problem since aclocal and automake can
+ run autoconf behind the scene.
+
+** autoheader warnings
+ The warnings of autoheader can be turned off, using --warning.
+ For instance, -Wno-obsolete disables the complaints about acconfig.h
+ and other deprecated constructs.
+
+** New macros
+ AC_C_RESTRICT, AC_INCLUDES_DEFAULT, AC_LANG_ASSERT, AC_LANG_WERROR,
+ AS_SET_CATFILE.
+
+** AC_DECL_SYS_SIGLIST
+ Works again.
+
+** AC_FUNC_MKTIME
+ Now checks that mktime is the inverse of localtime.
+
+** Improve DJGPP portability
+ The Autoconf tools and configure behave better under DJGPP.
+
+** Present But Cannot Be Compiled
+ New FAQ section dedicated to the mystic
+
+ configure: WARNING: pi.h: present but cannot be compiled
+ configure: WARNING: pi.h: check for missing prerequisite headers?
+ configure: WARNING: pi.h: proceeding with the preprocessor's result
+ messages.
+
+** Concurrent executions of autom4te
+ autom4te now locks its internal files, which enables concurrent
+ executions of autom4te, likely to happen if automake, autoconf,
+ autoheader etc. are run simultaneously.
+
+** Libtool
+ Use of Libtool 1.5 and higher is encouraged. Compatibility with
+ Libtool pre-1.4 is not checked.
+
+** Autotest
+ Testsuites no longer rerun failed tests in verbose mode; instead,
+ failures are logged while the test is run.
+
+ In addition, expected failures can be marked as such.
+
+* Major changes in Autoconf 2.57
+
+ Released 2002-12-03 by Paul Eggert.
+
+Bug fixes for problems with AIX linker, with freestanding C compilers,
+with GNU M4 limitations, and with obsolete copies of GNU documents.
+
+The Free Documentation License has been upgraded from 1.1 to 1.2.
+
+* Major changes in Autoconf 2.56
+
+ Released 2002-11-15 by Akim Demaille.
+
+One packaging problem fixed (config/install-sh was not executable).
+
+* Major changes in Autoconf 2.55
+
+ Released 2002-11-14 by Akim Demaille.
+
+Release tips:
+
+ Have your configure.ac checked by autoscan ("autoscan").
+ Try the warning options ("autoreconf -fv -Wall").
+
+** Documentation
+
+- AC_CHECK_HEADER, AC_CHECK_HEADERS
+ More information on proper use.
+
+- Writing Test Programs
+
+ This sections explains how to write good test sources to use with
+ AC_COMPILE_IFELSE etc. It documents AC_LANG_PROGRAM and so forth.
+
+- AC_FOO_IFELSE vs. AC_TRY_FOO
+
+ Explains why Autoconf moves from AC_TRY_COMPILE etc. to
+ AC_COMPILE_IFELSE and AC_LANG_PROGRAM etc.
+
+** autoreconf
+
+- Is more robust to different Gettext installations.
+
+- Produces messages (when --verbose) to be understood by Emacs'
+ compile mode.
+
+- Supports -W/--warnings.
+
+- -m/--make
+ Once the GNU Build System reinstalled, run `./config.status
+ --recheck && ./config.status && make' if possible.
+
+** autom4te
+
+- Supports --cache, and --no-cache.
+
+- ~/.autom4te.cfg makes it possible to disable the caching mechanism
+ (autom4te.cache). See `Customizing autom4te' in the documentation.
+
+** config.status
+ Supports --quiet.
+
+** Obsolete options
+
+ Support for the obsoleted options -m, --macrodir, -l, --localdir is
+ dropped in favor of the safer --include/--prepend-include scheme.
+
+** Macros
+
+- New macros
+ AC_COMPILER_IFELSE, AC_FUNC_MBRTOWC, AC_HEADER_STDBOOL,
+ AC_LANG_CONFTEST, AC_LANG_SOURCE, AC_LANG_PROGRAM, AC_LANG_CALL,
+ AC_LANG_FUNC_TRY_LINK, AC_MSG_FAILURE, AC_PREPROC_IFELSE.
+
+- Obsoleted
+ Obsoleted macros are kept for Autoconf backward compatibility, but
+ should be avoided in configure.ac. Running autoupdate is advised.
+ AC_DECL_SYS_SIGLIST.
+
+- AC_DEFINE/AC_DEFINE_UNQUOTED
+
+ We have to stop using the old compatibility scheme --that tried to
+ avoid useless backslashes-- because Libtool 1.4.3 contains a
+
+ AC_DEFINE([error_t], [int],
+ [Define to a type to use for \`error_t' if it is not
+ otherwise available.])
+
+ We have to quote the single quotes and backslashes with \. The old
+ compatibility scheme saw that ` was backslashed, and therefore did
+ not quote the single quote... Failure. Hence, Autoconf 2.54 is not
+ compatible with Libtool. Autoconf 2.55 is, but in some cases might
+ produce more \ than wanted.
+
+ Please, note that in the future the same problem will happen with
+ AC_MSG_*: use `autoreconf -f -Wall'.
+
+** Bug Fixes
+
+- Portability of the Autoconf package to Solaris.
+
+- Spurious warnings caused by config.status.
+ This bug is benign, but painful: on some systems (typically
+ FreeBSD), warnings such as:
+
+ config.status: creating Makefile
+ mv: Makefile: set owner/group (was: 1357/0): Operation not permitted
+
+ could be issued. This is fixed.
+
+- Parallel Builds
+ Simultaneous executions of config.status are possible again.
+
+- Precious variables accumulation
+
+ config.status could stack several copies of the precious variables
+ assignments.
+
+
+** Plans for later versions
+
+- ./configure <host>
+
+ The compatibility hooks with the old scheme will be completely
+ removed. Please, advice/use `--build', `--host', and `--target'
+ only.
+
+- AC_CHECK_HEADER, AC_CHECK_HEADERS
+
+ The tests will be stricter, please make sure your invocations are
+ valid.
+
+- shell functions
+
+ Shell functions will gradually be introduced, probably starting with
+ Autotest. If you know machines which are in use that you suspect
+ *not* to support shell functions, please run the test suite of
+ Autoconf 2.55 on it, and report the results to
+ bug-autoconf@gnu.org.
+
+- AC_MSG_*
+
+ Special characters in AC_MSG_* need not be quoted. Currently,
+ Autoconf has heuristics to decide when a string is escaped, or has
+ to be escaped. This scheme is fragile, and will be removed; the
+ only risk is uglified messages. Please, run `autoreconf -f -Wall'
+ to find occurrences that will be affected.
+
+* Major changes in Autoconf 2.54
+
+ Released 2002-09-13 by Akim Demaille.
+
+** Executables
+
+- autoreconf no longer changes the version of the gettext/po/intl
+ support files. It now adds the files the correspond to the
+ AM_GNU_GETTEXT_VERSION declared in configure.ac.
+
+ Warning: It now relies on the 'autopoint' program, which is part
+ of GNU gettext 0.11.4 and newer.
+
+ Please note that you need to have a GNU gettext version that
+ corresponds at least to the AM_GNU_GETTEXT_VERSION declared
+ in configure.ac. You can upgrade to newer GNU gettext versions,
+ though, without needing to change configure.ac.
+
+- The -I DIR or --include=DIR option now appends DIR to the include path
+ instead of prepending; this is for consistency with other GNU tools.
+ The new -B DIR or --prepend-include=DIR option has the old behavior.
+
+** Macros
+
+- AC_OUTPUT
+ Now handles all the gory details about LIBOBJS and LTLIBOBJS.
+ Please, remove lines such as
+
+ # This is necessary so that .o files in LIBOBJS are also
+ # built via the ANSI2KNR-filtering rules.
+ LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+
+ and read the `AC_LIBOBJ vs LIBOBJS' section. Do not define U in
+ your Makefiles either.
+
+- AC_CONFIG_LINKS now makes copies if it can't make links.
+
+- AC_FUNC_FNMATCH now tests only for POSIX compatibility, reverting to
+ Autoconf 2.13 behavior. The new macro AC_FUNC_FNMATCH_GNU also
+ tests for GNU extensions to fnmatch, and replaces fnmatch if needed.
+
+- AC_FUNC_SETVBUF_REVERSED no longer fails when cross-compiling.
+
+- AC_PROG_CC_STDC is integrated into AC_PROG_CC.
+
+- AC_PROG_F77 default search no longer includes cf77 and cfg77.
+
+- New macros
+
+ AC_C_BACKSLASH_A, AC_CONFIG_LIBOBJ_DIR, AC_GNU_SOURCE,
+ AC_PROG_EGREP, AC_PROG_FGREP, AC_REPLACE_FNMATCH,
+ AC_FUNC_FNMATCH_GNU, AC_FUNC_REALLOC, AC_TYPE_MBSTATE_T.
+
+- AC_FUNC_GETLOADAVG
+ looks for getloadavg.c in the CONFIG_LIBOBJ_DIR.
+
+- AC_FUNC_MALLOC
+ Now defines HAVE_MALLOC to 0 if `malloc' does not work, and asks
+ for an AC_LIBOBJ replacement.
+
+** Bug fixes
+
+- Spurious complaints from `m4_bmatch' about invalid regular
+ expressions are suppressed.
+
+- Empty top_builddirs are properly handled.
+
+- AC_CHECK_MEMBER works correctly when the member is an aggregate.
+
+- AC_PATH_PROG
+ Now colon in the optional path arguments are properly handled.
+
+** Improved portability
+
+- Both Autoconf the package, and the scripts it produces, should run
+ more reliably with Zsh. Bear in mind it is the default Bourne shell
+ on Darwin.
+
+- Autoconf and the scripts it produces no longer assume the existence of
+ the obsolescent commands egrep and fgrep.
+
+** Documentation
+
+- Limitations of Make
+ More of them.
+
+- GNATS
+ The GNATS base moved to
+ http://bugs.gnu.org/cgi-bin/gnatsweb.pl?database=autoconf
+ (It is no longer available, though.)
+
+** Misc.
+
+- config.log
+ Now contains the list of output variables and files (AC_SUBST,
+ AC_SUBST_FILES).
+
+* Major changes in Autoconf 2.53
+
+ Released 2002-03-08 by Akim Demaille.
+
+** Requirements
+
+ Perl 5.005_03 or later is required: autom4te is written in Perl and is
+ needed by autoconf. autoheader, autoreconf, ifnames, and autoscan are
+ rewritten in Perl.
+
+** Documentation
+
+- AC_INIT
+ Argument requirements, output variables, defined macros.
+- M4sugar, M4sh, Autotest
+ First sketch.
+- Double quoting macros
+ AC_TRY_CPP, AC_TRY_COMPILE, AC_TRY_LINK and AC_TRY_RUN.
+- Licensing
+ The Autoconf manual is now distributed under the terms of the GNU FDL.
+- Section `Hosts and Cross-Compilation'
+ Explains the rationale for the 2.5x changes in the cross-compilation
+ chain, and in the relationships between build, host, and target
+ types.
+ Emphasizes that `cross-compilation' == `--host is given'.
+ If you are working on compilers etc., be sure to read this section.
+- Section `AC_LIBOBJ vs. LIBOBJS'
+ Explains why assigning LIBOBJS directly is now an error.
+ Details how to update the code.
+
+** configure
+
+- $LINENO
+ Now used instead of hard coded line numbers.
+ This eases the comparison of `configure's, and diminishes the
+ pressure over control version archives.
+ Automatic replacement for shells that don't support this feature.
+- New output variables
+ @builddir@, @top_builddir@, @abs_srcdir@, @abs_top_srcdir@, @abs_builddir@,
+ @abs_top_builddir@.
+
+** Emacs
+
+ Autoconf and Autotest modes are provided.
+
+** Executables
+
+- autom4te
+ New, used by the Autoconf suite to cache and speed up most processing.
+- --force, -f
+ Supported by autom4te, autoconf and autoheader.
+- --include, -I
+ Replaces --autoconf-dir and --localdir in autoconf, autoheader,
+ autoupdate, and autoreconf.
+- autoreconf
+ No longer passes --cygnus, --foreign, --gnits, --gnu, --include-deps:
+ automake options are to be given via AUTOMAKE_OPTIONS.
+- autoreconf
+ Runs gettextize and libtoolize when appropriate.
+- autoreconf
+ --m4dir is no longer supported.
+- autoreconf
+ Now runs only in the specified directories, defaulting to `.',
+ but understands AC_CONFIG_SUBDIRS for dependent directories.
+ Before, it used to run on all the `configure.ac' found in the
+ current tree.
+ Independent packages are properly updated.
+
+** Bug fixes
+
+- The top level $prefix is propagated to the AC_CONFIG_SUBDIRS configures.
+- AC_TRY_RUN
+ Under the user pressure, $? is finally available. Probably a mistake.
+- AC_F77_LIBRARY_LDFLAGS now supports the HP/UX f90 compiler.
+- Precious variables accumulation
+ config.status could stack several copies of the precious variables
+ assignments.
+- AC_PATH_PROG and family.
+ Works properly when given a literal path.
+- AC_FUNC_SETPGRP
+ Somewhere since 2.13, the result had been reversed.
+
+** C Macros
+
+- AC_C_BIGENDIAN supports the cross-compiling case.
+- AC_C_BIGENDIAN accepts ACTION-IF-TRUE, ACTION-IF-FALSE, and
+ ACTION-IF-UNKNOWN arguments. All are optional, and the default
+ for ACTION-IF-TRUE is to define WORDS_BIGENDIAN like AC_C_BIGENDIAN
+ always did.
+- AC_C_LONG_DOUBLE now succeeds only if `long double' has more range or
+ precision than `double'.
+
+** Generic macros
+
+- AC_INIT
+ It now defines the preprocessor symbols PACKAGE_NAME,
+ PACKAGE_TARNAME, PACKAGE_VERSION, PACKAGE_STRING, and
+ PACKAGE_BUGREPORT.
+
+- AC_INIT
+ Admits a fourth optional parameter: the tar name.
+
+- AC_CONFIG_COMMANDS, HEADERS, FILES, LINKS.
+ Provide the user with srcdir, ac_srcdir, ac_top_srcdir, ac_builddir,
+ ac_top_builddir, ac_abs_srcdir, ac_abs_top_srcdir, ac_abs_builddir,
+ ac_abs_top_builddir.
+
+- AC_CONFIG_COMMANDS, HEADERS, FILES, LINKS and AC_OUTPUT.
+ Are much less expensive when using long lists of files.
+
+- AC_PREFIX_PROGRAM
+ Works with shell variables, and non alphanumeric names.
+
+** Library macros
+
+- AC_FUNC_STRERROR_R now sets STRERROR_R_CHAR_P, not HAVE_WORKING_STRERROR_R,
+ because POSIX 1003.1-200x draft 7 says strerror_r returns int, not char *.
+
+- AC_FUNC_STRTOD substitutes POW_LIB.
+
+- AC_FUNC_STRNLEN
+ New.
+
+* Major changes in Autoconf 2.52
+
+ Released 2001-07-18 by Akim Demaille.
+
+** Documentation
+- AC_ARG_VAR
+- Quadrigraphs
+ This feature was present in autoconf 2.50 but was not documented.
+ For example, `@<:@' is translated to `[' just before output. This
+ is useful when writing strings that contain unbalanced quotes, or
+ other hard-to-quote constructs.
+- m4_pattern_forbid, m4_pattern_allow
+- Tips for upgrading from 2.13.
+- Using autoscan to maintain a configure.ac.
+
+** Default includes
+- Now include stdint.h.
+- sys/types.h and sys/stat.h are guarded.
+- strings.h is included if available, and not conflicting with string.h.
+
+** Bug fixes
+- The test suite is more robust and presents less false failures.
+- Invocation of GNU M4 now robust to POSIXLY_CORRECT.
+- configure accepts --prefix='' again.
+- AC_CHECK_LIB works properly when its first argument is not a
+ literal.
+- HAVE_INTTYPES_H is defined only if not conflicting with sys/types.h.
+- build_, host_, and target_alias are AC_SUBST as in 2.13.
+- AC_ARG_VAR properly propagates precious variables inherited from the
+ environment to ./config.status.
+- Using --program-suffix/--program-prefix is portable.
+- Failures to detect the default compiler's output extension are less
+ likely.
+- `config.status foo' works properly when `foo' depends on variables
+ set in an AC_CONFIG_THING INIT-CMD.
+- autoheader is more robust to broken input.
+- Fixed Fortran name-mangling and link tests on a number of systems,
+ e.g. NetBSD; see AC_F77_DUMMY_MAIN, below.
+
+** Generic macros
+- AC_CHECK_HEADER and AC_CHECK_HEADERS support a fourth argument to
+ specify pre-includes. In this case, the headers are compiled with
+ cc, not merely preprocessed by cpp. Therefore it is the _usability_
+ of a header which is checked for, not just its availability.
+- AC_ARG_VAR refuses to run configure when precious variables have
+ changed.
+- Versions of compilers are dumped in the logs.
+- AC_CHECK_TYPE recognizes use of `foo_t' as a replacement type.
+
+** Specific Macros
+- AC_PATH_XTRA only adds -ldnet to $LIBS if it's needed to link.
+- AC_FUNC_WAIT3 and AC_SYS_RESTARTABLE_SYSCALLS are obsoleted.
+- AM_FUNC_ERROR_AT_LINE, AM_FUNC_FNMATCH, AM_FUNC_MKTIME,
+ AM_FUNC_OBSTACK, and AM_FUNC_STRTOD are now activated.
+ Be sure to read `Upgrading from Version 2.13' to understand why
+ running `autoupdate' is needed.
+- AC_F77_DUMMY_MAIN, AC_F77_MAIN: new macros to detect whether
+ a main-like routine is required/possible when linking C/C++ with
+ Fortran. Users of e.g. AC_F77_WRAPPERS should be aware of these.
+- AC_FUNC_GETPGRG behaves better when cross-compiling.
+
+* Major changes in Autoconf 2.51
+There was no release of Autoconf 2.51 since some packagers had used
+this version number without permission to ship intermediary versions
+of 2.50. The version was skipped to avoid confusion.
+
+* Major changes in Autoconf 2.50
+
+ Released 2001-05-21 by Akim Demaille.
+
+** Lots of bug fixes
+There have been far too many to enumerate them here. Check out
+ChangeLog if you really want to know more.
+
+** Improved documentation
+In particular, portability issues are better covered.
+
+** Use of Automake
+All the standard GNU Makefile targets are supported. The layout has
+changed: m4/ holds the M4 extensions Autoconf needs for its
+configuration, doc/ contains the documentation, and tests/ contains
+the test suite.
+
+** Man pages are provided
+For autoconf, autoreconf, autoupdate, autoheader, autoscan, ifnames,
+config.guess, config.sub.
+
+** autoconf
+- --trace
+ Provides a safe and powerful means to trace the macro uses. This
+ provide the parsing layer for tools which need to `study'
+ configure.in.
+
+- --warnings
+ Specify what category of warnings should be enabled.
+
+- When recursing into subdirectories, try for configure.gnu before
+ configure to adapt for packages not using autoconf on case-insensitive
+ file systems.
+
+- Diagnostics
+ More errors are now caught (circular AC_REQUIRE dependencies,
+ AC_DEFINE in the action part of an AC_CACHE_CHECK, too many pops
+ etc.). In addition, their location and call stack are given.
+
+** autoupdate
+autoupdate is much more powerful, and is able to provide the glue code
+which might be needed to move from an old macro to its newer
+equivalent.
+
+You are strongly encouraged to use it to modernize both your
+`configure.in' and your .m4 extension files.
+
+** autoheader
+The internal machinery of autoheader has completely changed. As a
+result, using `acconfig.h' should be considered to be obsoleted, and
+you are encouraged to get rid of it using the AH macros.
+
+** autoreconf
+Extensive overhaul.
+
+** Fortran 77 compilers
+Globally, the support for Fortran 77 is considerably improved.
+
+Support for automatically determining a Fortran 77 compiler's
+name-mangling scheme. New CPP macros F77_FUNC and F77_FUNC_ are
+provided to wrap C/C++ identifiers, thus making it easier and more
+transparent for C/C++ to call Fortran 77 routines, and Fortran 77 to
+call C/C++ routines. See the Texinfo documentation for details.
+
+** Test suite
+The test suite no longer uses DejaGNU. It should be easy to submit
+test cases in this new framework.
+
+** configure
+- --help, --help=long, -hl
+ no longer dumps useless items.
+- --help=short, -hs
+ lists only specific options.
+- --help=recursive, -hr
+ displays the help of all the embedded packages.
+- Remembers environment variables when reconfiguring.
+ The previous scheme to set envvar before running configure was
+ ENV=VAL ./configure
+ what prevented configure from remembering the environment in which
+ it was run, therefore --recheck was run in an inconsistent
+ environment. Now, one should run
+ ./configure ENV=VAR
+ and then --recheck will work properly. Variables declared with
+ AC_ARG_VAR are also preserved.
+- cross-compilation
+ $build defaults to `config.guess`, $host to $build, and then $target
+ to $host.
+ Cross-compilation is a global status of the package, it no longer
+ depends upon the current language.
+ Cross compilation is enabled iff the user specified `--host'.
+ `configure' now fails if it can't run the executables it compiles,
+ unless cross-compilation is enabled.
+- Cache file
+ The cache file is disabled by default. The new options
+ `--config-cache', `-C' set the cache to `config.cache'.
+
+** config.status
+- faster
+ Much faster on most architectures.
+- concurrent executions
+ It is safe to use `make -j' with config.status.
+- human interface improved
+ It is possible to invoke
+ ./config.status foobar
+ instead of the former form (still valid)
+ CONFIG_COMMANDS= CONFIG_HEADERS= CONFIG_LINKS= \
+ CONFIG_FILES=foobar:foo.in:bar.in \
+ ./config.status
+ The same holds for configuration headers and links.
+ You can instantiate unknown files and headers:
+ ./config.status --header foo.h:foo.h.in --file bar:baz
+- has a useful --help
+- accepts special file name "-" for stdin/stdout
+
+
+** Identity Macros
+- AC_COPYRIGHT
+ Specify additional copyright information.
+
+- AC_INIT
+ Now expects the identity of the package as argument.
+
+** General changes.
+- Uniform quotation
+ Most macros, if not all, now strictly follow the `one quotation
+ level' rule. This results in a more predictable expansion.
+
+- AC_REQUIRE
+ A sly bug in the AC_REQUIRE machinery, which could produce incorrect
+ configure scripts, was fixed by Axel Thimm.
+
+** Setup Macros
+- AC_ARG_VAR
+ Document and ask for the registration of an envvar.
+
+- AC_CONFIG_SRCDIR
+ Specifies the file which `configure' should look for when trying to
+ find the source tree (used to be handled by AC_INIT).
+
+- AC_CONFIG_COMMANDS
+ To add new actions to config.status. Should be used instead of
+ AC_OUTPUT_COMMANDS.
+
+- AC_CONFIG_LINKS
+ Replaces AC_LINK_FILES.
+
+- AC_CONFIG_HEADERS, AC_CONFIG_COMMANDS, AC_CONFIG_SUBDIRS,
+ AC_CONFIG_LINKS, and AC_CONFIG_FILES
+ They now obey sh: you should no longer use shell variables as
+ argument. Instead of
+
+ test "$package_foo_enabled" = yes && $my_subdirs="$my_subdirs foo"
+ AC_CONFIG_SUBDIRS($my_subdirs)
+
+ write
+
+ if test "$package_foo_enabled" = yes; then
+ AC_CONFIG_SUBDIRS(foo)
+ fi
+
+- AC_HELP_STRING
+ To format an Autoconf macro's help string so that it looks pretty
+ when the user executes `configure --help'.
+
+
+** Generic Test Macros
+- AC_CHECK families
+ The interface of the AC_CHECK families of macros (decl, header,
+ type, member, func) is now uniform. They support the same set of
+ default includes.
+
+- AC_CHECK_DECL, AC_CHECK_DECLS
+ To check whether a symbol is declared.
+
+- AC_CHECK_SIZEOF, AC_C_CHAR_UNSIGNED.
+ No longer need a cross-compilation default.
+
+- AC_CHECK_TYPE
+ The test it performs is much more robust than previously, and makes
+ it possible to test builtin types in addition to typedefs.
+ It is now schizophrenic:
+ - AC_CHECK_TYPE(TYPE, REPLACEMENT)
+ remains for backward compatibility, but its use is discouraged.
+ - AC_CHECK_TYPE(TYPE, IF-FOUND, IF-NOT-FOUND, INCLUDES)
+ behaves exactly like the other AC_CHECK macros.
+
+- AC_CHECK_TYPES
+ Checks whether given types are supported by the system.
+
+- AC_CHECK_MEMBER, AC_CHECK_MEMBERS
+ Check for given members in aggregates (e.g., pw_gecos in struct
+ passwd).
+
+- AC_PROG_CC_STDC
+ Checks if the compiler supports ISO C, included when needs special
+ options.
+
+- AC_PROG_CPP
+ Checking whether the preprocessor indicates missing includes by the
+ error code. stderr is checked by AC_TRY_CPP only as a fallback.
+
+- AC_LANG
+ Takes a language as argument and replaces AC_LANG_C,
+ AC_LANG_CPLUSPLUS and AC_LANG_FORTRAN77.
+
+- AC_LANG_PUSH, AC_LANG_POP
+ Are preferred to AC_LANG_SAVE, AC_LANG_RESTORE.
+
+** Specific Macros
+- AC_FUNC_CHOWN, AC_FUNC_MALLOC, AC_FUNC_STRERROR_R,
+ AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK, AC_FUNC_STAT, AC_FUNC_LSTAT,
+ AC_FUNC_ERROR_AT_LINE, AC_FUNC_OBSTACK, AC_FUNC_STRTOD, AC_FUNC_FSEEKO.
+ New.
+
+- AC_FUNC_GETGROUPS
+ Sets GETGROUPS_LIBS.
+
+- AC_FUNC_GETLOADAVG
+ Defines `HAVE_STRUCT_NLIST_N_UN_N_NAME' instead of `NLIST_NAME_UNION'.
+
+- AC_PROG_LEX
+ Now integrates `AC_DECL_YYTEXT' which is obsoleted.
+
+- AC_SYS_LARGEFILE
+ Arrange for large-file support.
+
+- AC_EXEEXT, AC_OBJEXT
+ You are no longer expected to use them: their computation is
+ performed by default.
+
+** C++ compatibility
+ Every macro has been revisited in order to support at best CC=c++.
+
+Major changes in Autoconf 2.14:
+ There was no release of GNU Autoconf 2.14.
+
+Major changes in Autoconf 2.13:
+
+ Released 1999-05-01 by Ben Elliston.
+
+* Support for building on 32-bit Windows systems where the only available C or
+ C++ compiler is the Microsoft Visual C++ command line compiler
+ (`cl'). Additional support for building on 32-bit Windows systems which are
+ using the Cygwin or Mingw32 environments.
+* Support for alternative object file and executable file extensions.
+ On 32-bit Windows, for example, these are .obj and .exe. These are discovered
+ using AC_OBJEXT and AC_EXEEXT, which substitute @OBJEXT@ and
+ @EXEEXT@ in the output, respectively.
+* New macros: AC_CACHE_LOAD, AC_CACHE_SAVE, AC_FUNC_SELECT_ARGTYPES,
+ AC_VALIDATE_CACHED_SYSTEM_TUPLE, AC_SEARCH_LIBS, AC_TRY_LINK_FUNC,
+ AC_C_STRINGIZE, AC_CHECK_FILE(S), AC_PROG_F77 (and friends).
+* AC_DEFINE now has an optional third argument for a description to be
+ placed in the config header input file (e.g. config.h.in).
+* The C++ code fragment compiled for the C++ compiler test had to be
+ improved to include an explicit return type for main(). This was
+ causing failures on systems using recent versions of the EGCS C++
+ compiler.
+* Fixed an important bug in AC_CHECK_TYPE that would cause a configure
+ script to report that `sometype_t' was present when only `type_t'
+ was defined.
+* Merge of the FSF version of config.guess and config.sub to modernize
+ these scripts. Add support for a few new hosts in config.guess.
+ Incorporate latest versions of install-sh, mkinstalldirs and
+ texinfo.tex from the FSF.
+* autoreconf is capable of running automake if necessary (and
+ applicable).
+* Support for Fortran 77. See the Texinfo documentation for details.
+* Bug fixes and workarounds for quirky bugs in vendor utilities.
+
+Major changes in Autoconf 2.12:
+
+ Released 1996-11-26 by David J. MacKenzie
+
+* AC_OUTPUT and AC_CONFIG_HEADER can create output files by
+ concatenating multiple input files separated by colons, like so:
+ AC_CONFIG_HEADER(config.h:conf.pre:config.h.in:conf.post)
+ AC_OUTPUT(Makefile:Makefile.in:Makefile.rules)
+ The arguments may be shell variables, to compute the lists on the fly.
+* AC_LINK_FILES and AC_CONFIG_SUBDIRS may be called multiple times.
+* New macro AC_OUTPUT_COMMANDS adds more commands to run in config.status.
+* Bug fixes.
+
+Major changes in Autoconf 2.11:
+
+ Released November 18th, 1996, by David J. MacKenzie
+
+* AC_PROG_CC and AC_PROG_CXX check whether the compiler works.
+ They also default CFLAGS/CXXFLAGS to "-g -O2" for gcc, instead of "-g -O".
+* AC_REPLACE_FUNCS defines HAVE_foo if the system has the function `foo'.
+* AC_CONFIG_HEADER expands shell variables in its argument.
+* New macros: AC_FUNC_FNMATCH, AC_FUNC_SETPGRP.
+* The "checking..." messages and the source code for test programs that
+ fail are saved in config.log.
+* Another workaround has been added for seds with small command length limits.
+* config.sub and config.guess recognize more system types.
+* Bug fixes.
+
+Major changes in Autoconf 2.10:
+
+ Released May 7th, 1996, by Roland McGrath
+
+* Bug fixes.
+* The cache variable names used by `AC_CHECK_LIB(LIB, FUNC, ...)' has
+ changed: now $ac_cv_lib_LIB_FUNC, previously $ac_cv_lib_LIB.
+
+Major changes in Autoconf 2.9:
+
+ Released March 16th, 1996, by Roland McGrath
+
+* Bug fixes.
+
+Major changes in Autoconf 2.8:
+
+ Released March 8th, 1996, by Roland McGrath
+
+* Bug fixes.
+
+Major changes in Autoconf 2.7:
+
+ Released November 22nd, 1995, by David J. MacKenzie
+
+* Bug fixes.
+
+Major changes in Autoconf 2.6:
+
+ Released November 20th, 1995, by David J. MacKenzie
+
+* Bug fixes.
+
+Major changes in Autoconf 2.5:
+
+ Released November 17th, 1995, by Roland McGrath
+
+* New configure options --bindir, --libdir, --datadir, etc., with
+ corresponding output variables.
+* New macro: AC_CACHE_CHECK, to make using the cache easier.
+* config.log contains the command being run as well as any output from it.
+* AC_CHECK_LIB can check for libraries with "." or "/" or "+" in their name.
+* AC_PROG_INSTALL doesn't cache a name for install-sh, for sharing caches.
+* AC_CHECK_PROG, AC_PATH_PROG, AC_CHECK_PROGS, AC_PATH_PROGS, and
+ AC_CHECK_TOOL can search a path other than $PATH.
+* AC_CHECK_SIZEOF takes an optional size to use when cross-compiling.
+
+Major changes in Autoconf 2.4:
+
+ Released June 14th, 1995, by David J. MacKenzie
+
+* Fix a few bugs found by Emacs testers.
+
+Major changes in Autoconf 2.3:
+
+ Released March 27th, 1995, by David J. MacKenzie
+
+* Fix the cleanup trap in several ways.
+* Handle C compilers that are picky about option placement.
+* ifnames gets the version number from the right directory.
+
+Major changes in Autoconf 2.2:
+
+ Released March 8th, 1995, by David J. MacKenzie
+
+* The ifnames utility is much faster but requires a "new awk" interpreter.
+* AC_CHECK_LIB and AC_HAVE_LIBRARY check and add the new
+ library before existing libs, not after, in case it uses them.
+* New macros: AC_FUNC_GETPGRP, AC_CHECK_TOOL.
+* Lots of bug fixes.
+* Many additions to the TODO file :-)
+
+Major changes in Autoconf 2.1:
+
+ Released November 4th, 1994, by David J. MacKenzie
+
+* Fix C++ problems.
+* More explanations in the manual.
+* Fix a spurious failure in the testsuite.
+* Clarify some warning messages.
+* autoreconf by default only rebuilds configure and config.h.in files
+ that are older than any of their particular input files; there is a
+ --force option to use after installing a new version of Autoconf.
+
+Thanks to everybody who's submitted changes and additions to Autoconf!
+I've incorporated many of them, and am still considering others for
+future releases -- but I didn't want to postpone this release indefinitely.
+
+Caution: don't indiscriminately rebuild configure scripts with
+Autoconf version 2. Some configure.in files need minor adjustments to
+work with it; the documentation has a chapter on upgrading. A few
+configure.in files, including those for GNU Emacs and the GNU C
+Library, need major changes because they relied on undocumented
+internals of version 1. Future releases of those packages will have
+updated configure.in files.
+
+It's best to use GNU M4 1.3 (or later) with Autoconf version 2.
+Autoconf now makes heavy use of M4 diversions, which were implemented
+inefficiently in GNU M4 releases before 1.3.
+
+Major changes in Autoconf 2.0:
+
+ Released October 26th, 1994, by David J. MacKenzie
+
+** New copyright terms:
+* There are no restrictions on distribution or use of configure scripts.
+
+** Documentation:
+* Autoconf manual is reorganized to make information easier to find
+ and has several new indexes.
+* INSTALL is reorganized and clearer and is now made from Texinfo source.
+
+** New utilities:
+* autoscan to generate a preliminary configure.in for a package by
+ scanning its source code for commonly used nonportable functions,
+ programs, and header files.
+* ifnames to list the symbols used in #if and #ifdef directives in a
+ source tree.
+* autoupdate to update a configure.in to use the version 2 macro names.
+* autoreconf to recursively remake configure and configuration header
+ files in a source tree.
+
+** Changed utilities:
+* autoheader can take pieces of acconfig.h to replace config.h.{top,bot}.
+* autoconf and autoheader can look for package-local definition files
+ in an alternate directory.
+
+** New macros:
+* AC_CACHE_VAL to share results of tests between configure runs.
+* AC_DEFUN to define macros, automatically AC_PROVIDE them, and ensure
+ that macros invoked with AC_REQUIRE don't interrupt other macros.
+* AC_CONFIG_AUX_DIR, AC_CANONICAL_SYSTEM, AC_CANONICAL_HOST, AC_LINK_FILES to
+ support deciding unguessable features based on the host and target types.
+* AC_CONFIG_SUBDIRS to recursively configure a source tree.
+* AC_ARG_PROGRAM to use the options --program-prefix,
+ --program-suffix, and --program-transform-name to change the names
+ of programs being installed.
+* AC_PREFIX_DEFAULT to change the default installation prefix.
+* AC_TRY_COMPILE to compile a test program without linking it.
+* AC_CHECK_TYPE to check whether sys/types.h or stdlib.h defines a given type.
+* AC_CHECK_LIB to check for a particular function and library.
+* AC_MSG_CHECKING and AC_MSG_RESULT to print test results, on a single line,
+ whether or not the test succeeds. They obsolete AC_CHECKING and AC_VERBOSE.
+* AC_SUBST_FILE to insert one file into another.
+* AC_FUNC_MEMCMP to check whether memcmp is 8-bit clean.
+* AC_FUNC_STRFTIME to find strftime even if it's in -lintl.
+* AC_FUNC_GETMNTENT to find getmntent even if it's in -lsun or -lseq.
+* AC_HEADER_SYS_WAIT to check whether sys/wait.h is POSIX.1 compatible.
+
+** Changed macros:
+* Many macros renamed systematically, but old names are accepted for
+ backward compatibility.
+* AC_OUTPUT adds the "automatically generated" comment to
+ non-Makefiles where it finds @configure_input@ in an input file, to
+ support files with various comment syntaxes.
+* AC_OUTPUT does not replace "prefix" and "exec_prefix" in generated
+ files when they are not enclosed in @ signs.
+* AC_OUTPUT allows the optional environment variable CONFIG_STATUS to
+ override the file name "config.status".
+* AC_OUTPUT takes an optional argument for passing variables from
+ configure to config.status.
+* AC_OUTPUT and AC_CONFIG_HEADER allow you to override the input-file names.
+* AC_OUTPUT automatically substitutes the values of CFLAGS, CXXFLAGS,
+ CPPFLAGS, and LDFLAGS from the environment.
+* AC_PROG_CC and AC_PROG_CXX now set CFLAGS and CXXFLAGS, respectively.
+* AC_PROG_INSTALL looks for install-sh or install.sh in the directory
+ specified by AC_CONFIG_AUXDIR, or srcdir or srcdir/.. or
+ srcdir/../.. by default.
+* AC_DEFINE, AC_DEFINE_UNQUOTED, and AC_SUBST are more robust and smaller.
+* AC_DEFINE no longer prints anything, because of the new result reporting
+ mechanism (AC_MSG_CHECKING and AC_MSG_RESULT).
+* AC_VERBOSE pays attention to --quiet/--silent, not --verbose.
+* AC_ARG_ENABLE and AC_ARG_WITH support whitespace in the arguments to
+ --enable- and --with- options.
+* AC_CHECK_FUNCS and AC_CHECK_HEADERS take optional shell commands to
+ execute on success or failure.
+* Checking for C functions in C++ works.
+
+** Removed macros:
+* AC_REMOTE_TAPE and AC_RSH removed; too specific to tar and cpio, and
+ better maintained with them.
+* AC_ARG_ARRAY removed because no one was likely using it.
+* AC_HAVE_POUNDBANG replaced with AC_SYS_INTERPRETER, which doesn't
+ take arguments, for consistency with all of the other specific checks.
+
+** New files:
+* Comes with config.sub and config.guess, and uses them optionally.
+* Uses config.cache to cache test results. An alternate cache file
+ can be selected with the --cache-file=FILE option.
+* Uses optional shell scripts $prefix/share/config.site and
+ $prefix/etc/config.site to perform site or system specific initializations.
+* configure saves compiler output to ./config.log for debugging.
+* New files autoconf.m4 and autoheader.m4 load the other Autoconf macros.
+* acsite.m4 is the new name for the system-wide aclocal.m4.
+* Has a DejaGnu test suite.
+
+Major changes in Autoconf 1.11:
+
+* AC_PROG_INSTALL calls install.sh with the -c option.
+* AC_SET_MAKE cleans up after itself.
+* AC_OUTPUT sets prefix and exec_prefix if they weren't set already.
+* AC_OUTPUT prevents shells from looking in PATH for config.status.
+
+Plus a few other bug fixes.
+
+Major changes in Autoconf 1.10:
+
+* autoheader uses config.h.bot if present, analogous to config.h.top.
+* AC_PROG_INSTALL looks for install.sh in srcdir or srcdir/.. and
+ never uses cp.
+* AC_PROG_CXX looks for cxx as a C++ compiler.
+
+Plus several bugs fixed.
+
+Major changes in Autoconf 1.9:
+
+* AC_YYTEXT_POINTER replaces AC_DECLARE_YYTEXT.
+* AC_SIZEOF_TYPE generates the cpp symbol name automatically,
+ and autoheader generates entries for those names automatically.
+* AC_FIND_X gets the result from xmkmf correctly.
+* AC_FIND_X assumes no X if --without-x was given.
+* AC_FIND_XTRA adds libraries to the variable X_EXTRA_LIBS.
+* AC_PROG_INSTALL finds OSF/1 installbsd.
+
+Major changes in Autoconf 1.8:
+
+** New macros:
+* New macros AC_LANG_C, AC_LANG_CPLUSPLUS, AC_LANG_SAVE, AC_LANG_RESTORE,
+ AC_PROG_CXX, AC_PROG_CXXCPP, AC_REQUIRE_CPP
+ for checking both C++ and C features in one configure script.
+* New macros AC_CHECKING, AC_VERBOSE, AC_WARN, AC_ERROR for printing messages.
+* New macros AC_FIND_XTRA, AC_MMAP, AC_SIZEOF_TYPE, AC_PREREQ,
+ AC_SET_MAKE, AC_ENABLE.
+
+** Changed macros:
+* AC_FIND_X looks for X in more places.
+* AC_PROG_INSTALL defaults to install.sh instead of cp, if it's in srcdir.
+ install.sh is distributed with Autoconf.
+* AC_DECLARE_YYTEXT has been removed because it can't work, pending
+ a rewrite of quoting in AC_DEFINE.
+* AC_OUTPUT adds its comments in C format when substituting in C files.
+* AC_COMPILE_CHECK protects its ECHO-TEXT argument with double quotes.
+
+** New or changed command line options:
+* configure accepts --enable-FEATURE[=ARG] and --disable-FEATURE options.
+* configure accepts --without-PACKAGE, which sets withval=no.
+* configure accepts --x-includes=DIR and --x-libraries=DIR.
+* Giving --with-PACKAGE no argument sets withval=yes instead of withval=1.
+* configure accepts --help, --version, --silent/--quiet, --no-create options.
+* configure accepts and ignores most other Cygnus configure options, and
+ warns about unknown options.
+* config.status accepts --help, --version options.
+
+** File names and other changes:
+* Relative srcdir values are not made absolute.
+* The values of @prefix@ and @exec_prefix@ and @top_srcdir@ get substituted.
+* Autoconf library files are installed in ${datadir}/autoconf, not ${datadir}.
+* autoheader optionally copies config.h.top to the beginning of config.h.in.
+* The example Makefile dependencies for configure et al. work better.
+* Namespace cleanup: all shell variables used internally by Autoconf
+ have names beginning with `ac_'.
+
+More big improvements are in process for future releases, but have not
+yet been (variously) finished, integrated, tested, or documented enough
+to release yet.
+
+Major changes in Autoconf 1.7:
+
+* New macro AC_OBSOLETE.
+* Bugs in Makefile.in fixed.
+* AC_LONG_FILE_NAMES improved.
+
+Major changes in Autoconf 1.6:
+
+* New macro AC_LONG_64_BITS.
+* Multiple .h files can be created.
+* AC_FIND_X looks for X files directly if it doesn't find xmkmf.
+* AC_ALLOCA defines C_ALLOCA if using alloca.c.
+* --with-NAME can take a value, e.g., --with-targets=sun4,hp300bsd.
+* Unused --no-create option to configure removed.
+* autoheader doesn't change the timestamp of its output file if
+ the file didn't change.
+* All macros that look for libraries now use AC_HAVE_LIBRARY.
+* config.status checks three optional environment variables to
+ modify its behavior.
+* The usual bug fixes.
+
+Major changes in Autoconf 1.5:
+
+* New macros AC_FIND_X, AC_OFF_T, AC_STAT_MACROS_BROKEN, AC_REVISION.
+* autoconf and autoheader scripts have GNU standards conforming
+ --version and --help options (they print their message and exit).
+* Many bug fixes.
+
+Major changes in Autoconf 1.4:
+
+* New macros AC_HAVE_POUNDBANG, AC_TIME_WITH_SYS_TIME, AC_LONG_DOUBLE,
+ AC_GETGROUPS_T, AC_DEFINE_UNQUOTED.
+* autoconf and autoheader use the M4 environment variable to determine the
+ name of the M4 program to use.
+* The --macrodir option to autoconf and autoheader specifies the directory
+ in which acspecific.m4, acgeneral.m4, etc. reside if not the default.
+* autoconf and autoheader can take `-' as their file names, which means to
+ read stdin as input.
+* Resulting configure scripts can take a --verbose option which causes them
+ to print the results of their tests.
+* AC_DEFINE quotes its second argument in such a way that spaces, magic
+ shell characters, etc. will be preserved during various stages of
+ expansion done by the shell. If you don't want this, use
+ AC_DEFINE_UNQUOTED instead.
+* Much textual processing done with external calls to tr and sed have been
+ internalized with builtin M4 `patsubst' and `translit' calls.
+* AC_OUTPUT doesn't hardwire the file names it outputs. Instead, you can
+ set the shell variables `gen_files' and `gen_config' to the list of
+ file names to output.
+* AC_DECLARE_YYTEXT does an AC_SUBST of `LEX_OUTPUT_ROOT', which may be
+ "lex.yy" or "lexyy", depending on the system.
+* AC_PROGRAMS_CHECK takes an optional third arg. If given, it is used as
+ the default value.
+* If AC_ALLOCA chooses alloca.c, it also defines STACK_DIRECTION.
+* AC_CONST works much more reliably on more systems.
+* Many bug fixes.
+
+Major changes in Autoconf 1.3:
+
+configure no longer requires awk for packages that use a config.h.
+Support handling --with-PACKAGE options.
+New `autoheader' script to create `config.h.in' from `configure.in'.
+Ignore troublesome -lucb and -lPW when searching for alloca.
+Rename --exec_prefix to --exec-prefix for GNU standards conformance.
+Improve detection of STDC library.
+Add AC_HAVE_LIBRARY to check for non-default libraries.
+Function checking should work with future GNU libc releases.
+
+Major changes in Autoconf 1.2:
+
+The --srcdir option is now usually unnecessary.
+Add a file containing sample comments describing CPP macros.
+A comment in config.status tells which host it was configured on.
+Substituted variable values can now contain commas.
+Fix bugs in various feature checks.
+
+Major changes in Autoconf 1.1:
+
+Added AC_STRCOLL macro.
+Made AC_GETLOADAVG check for more things.
+AC_OUTPUT argument is now optional.
+Various bug fixes.
+
+-----
+
+Copyright (C) 1993-1996, 1998-2012 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Local Variables:
+mode: outline
+End:
diff --git a/README b/README
new file mode 100644
index 0000000..6fb53a9
--- /dev/null
+++ b/README
@@ -0,0 +1,65 @@
+-*- text -*-
+
+Autoconf
+
+Autoconf is an extensible package of M4 macros that produce shell
+scripts to automatically configure software source code packages.
+These scripts can adapt the packages to many kinds of UNIX-like
+systems without manual user intervention. Autoconf creates a
+configuration script for a package from a template file that lists the
+operating system features that the package can use, in the form of M4
+macro calls.
+
+Producing configuration scripts using Autoconf requires GNU M4 and
+Perl. You should install GNU M4 (version 1.4.6 or later is required;
+1.4.14 or later is recommended) and Perl (5.006 or later) before
+configuring Autoconf, so that Autoconf's configure script can find
+them. The configuration scripts produced by Autoconf are
+self-contained, so their users do not need to have Autoconf (or GNU
+M4, Perl, etc.).
+
+You can get GNU M4 here:
+
+ftp://ftp.gnu.org/gnu/m4/
+
+The file INSTALL should be distributed with packages that use
+Autoconf-generated configure scripts and Makefiles that conform to the
+GNU coding standards. The package's README can just give an overview
+of the package, where to report bugs, and a pointer to INSTALL for
+instructions on compilation and installation. This removes the need
+to maintain many similar sets of installation instructions.
+
+Be sure to read BUGS and INSTALL.
+
+Mail suggestions to autoconf@gnu.org, report bugs to
+bug-autoconf@gnu.org, and submit patches to autoconf-patches@gnu.org.
+All changes can be tracked at the read-only autoconf-commit@gnu.org.
+Always include the Autoconf version number, which you can get by
+running `autoconf --version'. Archives of bug-autoconf@gnu.org can be
+found in <http://lists.gnu.org/archive/html/bug-autoconf/>, and
+similarly for the other mailing lists.
+
+Licensing
+
+Autoconf is released under the General Public License version 3 (GPLv3+).
+Additionally, Autoconf includes a licensing exception in some of its
+source files; see the respective copyright notices for how your
+project is impacted by including scripts generated by Autoconf, and the
+COPYING.EXCEPTION file for the exception in terms of the Additional
+Permissions as described in section 7 of GPLv3.
+
+For more licensing information, see
+<http://www.gnu.org/licenses/gpl-faq.html> and
+<http://www.gnu.org/licenses/exceptions.html>.
+
+For any copyright year range specified as YYYY-ZZZZ in this package
+note that the range specifies every single year in that closed interval.
+
+-----
+
+Copyright (C) 1992-1994, 1998, 2000-2012 Free Software Foundation, Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..c3abc72
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,464 @@
+GNU Autoconf THANKS file
+
+GNU Autoconf was originally written by David J. MacKenzie. It would
+not be what it is today without the invaluable help of these people,
+who have reported problems, suggested improvements, or submitted
+actual code. Please help us keep this list complete and free from
+errors. Also see the AUTHORS file for the list of people with
+contributions significant enough to warrant copyright assignment.
+
+Aaron Crane aaronc@pobox.com
+Aaron M. Ucko amu@alum.mit.edu
+Aaron W. LaFramboise aaronenvelope277@aaronwl.com
+Adam J. Richter adam@yggdrasil.com
+Adrian Bunk bunk-gnu@fs.tum.de
+Aharon Robbins arnold@gnu.org
+Akim Demaille akim@freefriends.org
+Akinori Musha knu@iDaemons.org
+Alain Knaff Alain.Knaff@imag.fr
+Albert Chin-A-Young china@thewrittenword.com
+Alec Wolman wolman@cs.washington.edu
+Alex Unleashed unledev@gmail.com
+Alexander Kurz alexander.kurz@qsc.de
+Alexander Mai ?
+Alexander Pletzer pletzer@txcorp.com
+Alexandre Duret-Lutz duret_g@epita.fr
+Alexandre Julliard ?
+Alexandre Oliva oliva@lsd.ic.unicamp.br
+Alfred G. de Wijn dwijn@iluvatar.eu.org
+Alfred M. Szmidt ams@gnu.org
+Allan Caffee allan.caffee@gmail.com
+Allan Clark allanc@chickenandporn.com
+Anders Kaseorg andersk@MIT.EDU
+Andreas Buening andreas.buening@nexgo.de
+Andreas Jaeger aj@suse.de
+Andreas Schott schott@rzg.mpg.de
+Andreas Schwab schwab@issan.informatik.uni-dortmund.de
+Andreas Waechter andreasw@watson.ibm.com
+Andrej Borsenkow borsenkow.msk@sni.de
+Andrew Belov ?
+Andrew Church achurch@achurch.org
+Andrey Simonenko simon@comsys.ntu-kpi.kiev.ua
+Andris Pavenis andris.pavenis@iki.fi
+Anthony N. Frasso afrasso@yahoo.com
+Arkadiusz Miskiewicz arekm@maven.pl
+Art Haas ahaas@neosoft.com
+Arto C. Nirkko ?
+Artur Frysiak wiget@pld.org.pl
+Assar Westerlund assar@sics.se
+Axel Thimm Axel.Thimm@physik.fu-berlin.de
+Bart Oldeman bartoldeman@users.sourceforge.net
+Ben Elliston bje@redhat.com
+Ben Pfaff pfaffben@debian.org
+Benoit Sigoure tsunanet@gmail.com
+Bill Moseley moseley@hank.org
+Bill Northcott w.northcott@unsw.edu.au
+Bill Sommerfeld sommerfeld@apollo.hp.com
+BJ Terry bjterry@gmail.com
+Bob Friesenhahn bfriesen@simple.dallas.tx.us
+Bob Proulx bob@proulx.com
+Bob Rossi bob_rossi@cox.net
+Bob Wilson bwilson@tensilica.com
+Brad Walker me@bradmwalker.com
+Braden McDaniel braden@endoframe.com
+Bram Moolenaar bram@vim.org
+Brian Gough bjg@network-theory.co.uk
+Brian J. Murrell brian@sun.com
+Bruce Dugan bld0401@gmail.com
+Bruce Korb bkorb@gnu.org
+Bruce Lilly ?
+Bruno Haible haible@ilog.fr
+Björn Lindqvist bjourne@gmail.com
+Carl Edman cedman@princeton.edu
+Carlos Velasco carlosev@newipnet.com
+Chad R. Larson chad@anasazi.com
+Charles 'Buck' Krasic krasic@cs.ubc.ca
+Chikama Masaki masaki.chikama@gmail.com
+Chris P. Ross cross@uu.net
+Chris Pickett chris.pickett@mail.mcgill.ca
+Chris Provenzano proven@cygnus.com
+Chris Torek torek@bsdi.com
+Christian Cornelssen ccorn@cs.tu-berlin.de
+Christian Krackowizer ckrackowiz@std.schuler-ag.com
+Christian Krone krischan@sql.de
+Christian Rössel christian.roessel@gmx.de
+Christophe Jarry christophe.jarry@ouvaton.org
+Christopher Hulbert cchgroupmail@gmail.com
+Christopher Lee chrislee@ri.cmu.edu
+Clinton Roy clinton.roy@gmail.com
+Colin Watson cjwatson@debian.org
+Corinna Vinschen corinna-cygwin@cygwin.com
+Cort Dougan cort@cs.nmt.edu
+D'Arcy A MacIsaac ?
+Dalibor Topic robilad@kaffe.org
+Dan Manthey dan_manthey@partech.com
+Daniel Carroll dan@mesastate.edu
+Daniel Jacobowitz drow@mvista.com
+Daniel Reed ?
+Daniele Arena daniele@ripe.net
+Dave Adams adams@hpesdwa.fc.hp.com
+Dave Erickson retrorandomaccess@hotmail.com
+Dave Korn dave.korn.cygwin@googlemail.com
+Dave Love fx@gnu.org
+David Byron dbyron@hheld.com
+David Carter david@carter.net
+David Cournapeau david@ar.media.kyoto-u.ac.jp
+David Fang fang@csl.cornell.edu
+David J. MacKenzie djm@uunet.uu.net
+David M. Lloyd dmlloyd@tds.net
+David Morgan dmorgan@symark.com
+Davie Reiss dreiss@facebook.com
+David Relson relson@osagesoftware.com
+Dennis J. Linse ?
+Derek R. Price derek.price@openavenue.com
+Didier Desseaux didess@infonie.fr
+Didier Verna didier@xemacs.org
+Dieter Jurzitza dieter.jurzitza@t-online.de
+Dietmar P. Schindler schd@mra.man.de
+Dmitry Grebeniuk gdsfh1@gmail.com
+Doug Evans dje@canuck.cygnus.com
+Dries Kimpe ?
+Dustin J. Mitchell dustin@zmanda.com
+Edouard Bechetoille ebecheto@ens-lyon.fr
+Elbert Pol elbert.pol@gmail.com
+Eli Zaretskii eliz@gnu.org
+Elias Pipping pipping@macports.org
+Enrique Robledo Arnuncio enrique.robledo@wanadoo.es
+Erez Zadok ezk@cs.columbia.edu
+Eric Backus ericb@lsid.hp.com
+Eric Blake ebb9@byu.net
+Eric Lemings lemings@roguewave.com
+Eric Mumpower nocturne@mit.edu
+Eric Paire ?
+Eric Sunshine sunshine@sunshineco.com
+Ezra Peisach epeisach@zif.mit.edu
+Fedor Sergeev ?
+Felix Lee flee@cygnus.com
+Fernando Carrijo fcarrijo@freedesktop.org
+Franceseco Romani fromani@gmail.com
+Frank Denis j@jedi.claranet.fr
+François Pinard pinard@iro.umontreal.ca
+Fred Kreek Fred.Kreek@kadaster.nl
+Frederik Fouvry fouvry@CoLi.Uni-SB.DE
+Gareth McCaughan gareth.mccaughan@pobox.com
+Gary V. Vaughan gvaughan@oranda.demon.co.uk
+Geir Ove Myhr myhr@stud.fim.ntnu.no
+Gerrit P. Haase gp@familiehaase.de
+Gideon Go gideon.go@gmail.com
+Giorgos Keramidas gkeramidas@gmail.com
+Giuseppe Guerrini guisguerrini@racine.ra.it
+Glenn P. Davis davis@unidata.ucar.edu
+Godmar Back gback@cs.utah.edu
+Gordon Matzigkeit gord@trick.fig.org
+Graham Jenkins c714553@vus415.telstra.com.au
+Greg A. Woods woods@weird.com
+Greg Schafer gschafer@zip.com.au
+Gregorio Guidi ?
+Gregory Giannoni sand@narguile.org
+Giulio Paci giuliopaci@interfree.it
+Guido Draheim Guido.Draheim@gmx.de
+Guido Flohr gufl0000@stud.uni-sb.de
+Guido van Rossum ?
+Guillermo Gomez gomez@mi.uni-erlangen.de
+H. Merijn Brand h.m.brand@hccnet.nl
+H. Peter Anvin ?
+H.J. Lu hjl@gnu.org
+Hallvard B Furuseth h.b.furuseth@usit.uio.no
+Hans Aberg haberg@math.su.se
+Hans Olsson Hans.Olsson@dna.lth.se
+Hans Ulrich Niedermann hun@n-dimensional.de
+Harlan Stenn stenn@whimsy.udel.edu
+Heiko Schlichting inn-workers@fu-berlin.de
+Henk Krus h.krus@cyclone.nl
+Howard Chu hyc@highlandsun.com
+Ian Lance Taylor ian@cygnus.com
+Ian Macdonald iamacdo@telkomsa.net
+Ian Redfern Ian.Redfern@logicacmg.com
+Ilya Bobir ilya.bobir@gmail.com
+Ilya Zakharevich ilya@Math.Berkeley.EDU
+Ineiev ineiev@yahoo.co.uk
+Iohannes m zmoelnig zmoelnig@iem.at
+J C Fitzgerald v7022@wave.co.nz
+Jaap Haitsma jaap@haitsma.org
+James A. Lupo lupoja@feynman.ml.wpafb.af.mil
+Jan Madzik jmadzik@gmail.com
+Jason Molenda jsm@cygnus.com
+Jeff Garzik jgarzik@pobox.com
+Jeff Painter ?
+Jeff Squyres jsquyres@cisco.com
+Jeffrey A Law law@cygnus.com
+Jeffrey J. Barteet ?
+Jennis Pruett ?
+Jens Petersen petersen@redhat.com
+Jens Schmidt jens.schmidt35@arcor.de
+Jeremy Yallop jeremy@yallop.org
+Jerker Bäck jerker.back@home.se
+Jim Blandy jimb@wookumz.gnu.ai.mit.edu
+Jim Meyering meyering@ascend.com
+Jim Warhol jrw@jwarhol.com
+Jiro Takabatake jiro@din.or.jp
+Jochen Friedrich jochen@scram.de
+Joel E. Denny jdenny@ces.clemson.edu
+Joel James Adamson joel@chondestes.bio.unc.edu
+Joey Mingrone joey@mingrone.org
+Johan Danielsson joda@pdc.kth.se
+John Calcote john.calcote@gmail.com
+John David Anglin dave@hiauly1.hia.nrc.ca
+John Fortin fortinj@attglobal.net
+John Interrante interran@uluru.stanford.edu
+John R. Cary cary@txcorp.com
+John W. Eaton jwe@bevo.che.wisc.edu
+Jonathan Kamens jik@kamens.brookline.ma.us
+Josef Tran josef@timetrackertechnology.com
+Josef Vukovic josefvukovic@googlemail.com
+Joseph S. Myers jsm28@cam.ac.uk
+Joshua G. Hale jgh.emc@gmail.com
+Juan Carlos Hurtado adso.lists@gmail.com
+Jules Colding colding@42tools.com
+Julian C. Cummings cummings@cacr.caltech.edu
+Julian Onions j.onions@nexor.co.uk
+Julien Danjou acid@debian.org
+Julien Élie julien@trigofacile.com
+Julio Garvia ?
+Justace Clutter ?
+Jörn Rennecke amylaar@cygnus.co.uk
+Karl Berry karl@cs.umb.edu
+Karl Heuer kwzh@gnu.org
+Karsten Hopp karsten@redhat.com
+Kate Hedstrom ?
+Kathryn Hargreaves kathryn@deas.harvard.edu
+Kaveh R. Ghazi ghazi@caip.rutgers.edu
+Keith Bostic bostic@abyssinian.sleepycat.com
+Keith Marshall keith.marshall@total.com
+Kelly Anderson tgcorp@attglobal.net
+Ken Pizzini ken@halcyon.com
+Ken Raeburn raeburn@cygnus.com
+Kevin Ryde user42@zip.com.au
+Klee Dienes kdienes@apple.com
+Koji Arai JCA02266@nifty.ne.jp
+Kristian Kvilekval kris@cs.ucsb.edu
+Křištof Želechovski giecrilj@stegny.2a.pl
+Kurt D. Zeilenga kurt@openldap.org
+Larry Jones larry.jones@sdrc.com
+Larry Schmitt larry@mail.haleakalawebdesigns.com
+Larry Schwimmer rosebud@cyclone.stanford.edu
+Lars Hecking lhecking@nmrc.ucc.ie
+Lars J. Aas larsa@sim.no
+Laurence Darbe ldarby@tuffmail.com
+Leo Moisio leo.moisio@gmail.com
+Loulou Pouchet loulou@lrde.epita.fr
+Luc Maisonobe luc@spaceroots.org
+Ludovic Courtes ?
+Luke Dalessandro luked@cs.rochester.edu
+Magnus Therning therning@gforge.natlab.research.philips.com
+Manu manubee@wanadoo.fr
+Marc Espie Marc.Espie@liafa.jussieu.fr
+Marcus Brinkmann ?
+Marcus Daniels marcus@sysc.pdx.edu
+Marcus Thiessel marcus@xemacs.org
+Mark Cave-Ayland ?
+Mark D. Baushke ?
+Mark D. Roth ?
+Mark Elbrecht snowball3@usa.net
+Mark Hessling mark@rexx.org
+Mark Kettenis kettenis@gnu.org
+Markku Savela msa@msa.tte.vtt.fi
+Markus Oberhumer markus.oberhumer@jk.uni-linz.ac.at
+Markus Geimer m.geimer@fz-juelich.de
+Martin Buchholz martin@xemacs.org
+Martin Costabel costabel@wanadoo.fr
+Martin Frydl martin@systinet.com
+Martin Koeppe mkoeppe@gmx.de
+Martin Mokrejs mmokrejs@natur.cuni.cz
+Martin Wilck martin@tropos.de
+Martyn Johnson Martyn.Johnson@cl.cam.ac.uk
+Matěj Týč matej.tyc@gmail.com
+Matt Kraai kraai@ftbfs.org
+Matteo Frigo ?
+Matthew D. Langston langston@SLAC.Stanford.EDU
+Matthew Mueller donut@azstarnet.com
+Matthew Woehlke mw_triad@users.sourceforge.net
+Matthias Andree matthias.andree@gmx.de
+Michal Čihař nijel@debian.org
+Michael Elizabeth Chastain chastain@cygnus.com
+Michael Jenning ?
+Michael Matz matz@kde.org
+Michael Schoene mrs@mlc.de
+Michael Wardle ?
+Mike Frysinger vapier@gentoo.org
+Mike Hopkirk hops@sco.com
+Mike Stump mrs@wrs.com
+Mikulas Patocka ?
+Miles Bader miles@gnu.ai.mit.edu
+Mo DeJong mdejong@cygnus.com
+Momchil Velkov velco@fadata.bg
+Monty Taylor mordred@inaugust.com
+Morten Eriksen mortene@sim.no
+Mostafa mostafa_working_away@yahoo.com
+Motoyuki Kasahara m-kasahr@sra.co.jp
+Nathan Schulte reklipz@gmail.com
+Nathanael Nerode neroden@gcc.gnu.org
+Nelson H. F. Beebe beebe@math.utah.edu
+Nicolas Joly njoly@pasteur.fr
+Nicolás Lichtmaier jnl@synapsis-sa.com.ar
+Nick Bowler nbowler@elliptictech.com
+NightStrike nightstrike@gmail.com
+Nishio Futoshi fut_nis@d3.dion.ne.jp
+Noah Elliott elliott@hera.llnl.gov
+Noah Friedman friedman@gnu.ai.mit.edu
+Noah Misch noah@cs.caltech.edu
+Norman Gray ?
+Olaf Lenz olenz@fias.uni-frankfurt.de
+Ole Holm Nielsen Ole.H.Nielsen@fysik.dtu.dk
+Oliver Kiddle opk@zsh.org
+Olly Betts olly@survex.com
+Ossama Othman ossama@debian.org
+Pallav Gupta pallavgupta@gmail.com
+Paolo Bonzini bonzini@gnu.org
+Patrick Tullmann tullmann@cs.utah.edu
+Patrick Welche prlw1@newn.cam.ac.uk
+Paul Berrevoets paul@swi.com
+Paul D. Smith psmith@gnu.org
+Paul Eggert eggert@cs.ucla.edu
+Paul Gampe paulg@apnic.net
+Paul Jarc prj@po.cwru.edu
+Paul Martinolich martinol@datasync.com
+Paul Pogonyshev ?
+Paul Townsend ?
+Pavel Roskin pavel_roskin@geocities.com
+Pádraig Brady P@draigbrady.com
+Per Øyvind Karlsen peroyvind@mandriva.org
+Peter Breitenlohner peb@mppmu.mpg.de
+Peter Eisentraut peter_e@gmx.net
+Peter Hendrickson pdh@wiredyne.com
+Peter Johansson trojkan@gmail.com
+Peter O'Gorman peter@pogma.com
+Peter Palfrader weasel@debian.org
+Peter Simons simons@cryp.to
+Peter Stephenson pws@csr.com
+Philipp Thomas kthomas@gwdg.de
+Philippe De Muyter ?
+Pierre pierre42d@9online.fr
+Pierre Ynard linkfanel@yahoo.fr
+Pontus Skoeld pont@soua.net
+Rainer Orth ro@TechFak.Uni-Bielefeld.DE
+Raja R Harinath harinath@cs.umn.edu
+Ralf Corsepius corsepiu@faw.uni-ulm.de
+Ralf Menzel menzel@ls6.cs.uni-dortmund.de
+Ralf S. Engelschall rse@engelschall.com
+Ralf Wildenhues Ralf.Wildenhues@gmx.de
+Randall Cotton recotton@earthlink.net
+Reuben Thomas rrt@sc3d.org
+Richard Dawe rich@phekda.freeserve.co.uk
+Richard Stallman rms@gnu.org
+Robert Lipe robertlipe@usa.net
+Robert S. Maier rsm@math.arizona.edu
+Roberto Bagnara bagnara@cs.unipr.it
+Rochan rochan@ices.utexas.edu
+Roger Leigh rleigh@whinlatter.ukfsn.org
+Roland McGrath roland@gnu.org
+Rolf Ebert rolf.ebert.gcc@gmx.de
+Rolf Vandevaart Rolf.Vandevaart@sun.com
+Romain Lenglet romain.lenglet@laposte.net
+Ruediger Kuhlmann info@ruediger-kuhlmann.de
+Rugxulo rugxulo@gmail.com
+Ruslan Babayev ruslan@babayev.com
+Russ Allbery rra@stanford.edu
+Russ Boylan ross@biostat.ucsf.edu
+Ryuji Abe raeva@t3.rim.or.jp
+Sam Sexton Sam.Sexton@reuters.com
+Sam Sirlin sam@kalessin.jpl.nasa.gov
+Sam Steingold sds@gnu.org
+Sam Varshavchik mrsam@courier-mta.com
+Sander Niemeijer niemeijer@science-and-technology.nl
+santilín listas@gestiong.org
+Scott Bambrough scottb@corelcomputer.com
+Scott McCreary scottmc2@gmail.com
+Scott Stanton stanton@scriptics.com
+Sebastian Freundt hroptatyr@gna.org
+Sergey Poznyakoff ?
+Simon Josefsson jas@extundo.com
+Simon Leinen simon@lia.di.epfl.ch
+Slava Sysoltsev Viatcheslav.Sysoltsev@h-d-gmbh.de
+Stefan Seefeld stefan@codesourcery.com
+Stefan `Sec' Zehl ?
+Stefano Lattarini stefano.lattarini@gmail.com
+Stepan Kasal kasal@ucw.cz
+Stéphane Chazelas Stephane_Chazelas@yahoo.fr
+Stephen Gildea filtered@against.spam
+Stephen Rasku srasku@mail.tantalus-systems.com
+Stephen P. Schaefer sschaefer@acm.org
+Steve Chamberlain sac@cygnus.com
+Steve Goetze goetze@dovetail.com
+Steve Huston shuston@riverace.com
+Steve Robbins steve@nyongwa.montreal.qc.ca
+Steven G. Johnson stevenj@alum.mit.edu
+Steven R. Loomis srl@icu-project.org
+Stu Grossman grossman@cygnus.com
+Sumit Pandya sumit@elitecore.com
+Syd Polk spolk@cygnus.com
+T.E. Dickey dickey@clark.net
+Ted Bullock tbullock@canada.com
+Theodore Ts'o tytso@mit.edu
+Thien-Thi Nguyen ttn@gnu.org
+Thomas Jahns jahns@dkrz.de
+Thomas Winder tom@vlsivie.tuwien.ac.at
+Tim Freeman tim@fungible.com
+Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu
+Tim Rice tim@multitalents.net
+Tim Van Holder tim.van.holder@pandora.be
+Tobias Burnus burnus@net-b.de
+Tom Browder tom.browder@gmail.com
+Tom Epperly tepperly@llnl.gov
+Tom Lane tgl@sss.pgh.pa.us
+Tom Purcell Tom.Purcell@wang.com
+Tom Tromey tromey@cygnus.com
+Tom Yu tlyu@mit.edu
+Tomohiro Suzuki ?
+Tony Leneis tony@plaza.ds.adp.com
+Toshio Kuratomi ?
+Uwe Seimet us@orbacus.com
+Václav Haisman v.haisman@sh.cvut.cz
+Vance Shipley vances@motivity.ca
+Viktor Dukhovni viktor@anaheim.esm.com
+Ville Karaila karaila@iki.fi
+Vincent Lefèvre vincent@vinc17.org
+Vincent Torri vtorri at univ-evry.fr
+Vladimir Volovich vvv@vsu.ru
+Volker Borchert bt@teknon.de
+Wayne Chapeskie waynec@spinnaker.com
+Werner Lemberg wl@gnu.org
+Wilfredo Sanchez wsanchez@apple.com
+William Pursell bill.pursell@gmail.com
+Wiseman Jun junwiseman@gmail.com
+Wolfgang Mueller Wolfgang.Mueller@cui.unige.ch
+Yaakov Selkowitz yselkowitz@users.sourceforge.net
+Yavor Doganov yavor@gnu.org
+Yury Puhalsky pooh@cryptopro.ru
+Zack Weinberg zack@codesourcery.com
+? Seanster@Seanster.com
+
+Many people are not named here because we lost track of them. We
+thank them! Please, help us keep this list up to date.
+
+================
+
+Local Variables:
+mode: text
+coding: utf-8
+End:
+
+Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..cb124b2
--- /dev/null
+++ b/TODO
@@ -0,0 +1,601 @@
+-*- outline -*-
+
+Things it might be nice to do someday. I haven't evaluated all of
+these suggestions... their presence here doesn't imply my endorsement.
+-djm & his successors.
+
+
+------------------------------------------------------------------------------
+
+* Soon
+
+** AC_CHECK_HEADERS
+and the like, don't have a consistent way to handle multi-line
+arguments. Fix, test, and document.
+
+** --target & AC_ARG_PROGRAM
+Shouldn't *any* `program' be installed as `$target_alias-program' even
+if AC_ARG_PROGRAM is not called? That would be much more predictable.
+Ian?
+
+** AC_CHECK_TOOL...
+Write a test that checks that it honors the values set by the user.
+
+** autom4te and warnings.
+Decide what must be done.
+
+** AC_DEFINE(func, rpl_func)
+This scheme causes problems: if for instance, #define malloc
+rpl_malloc, then the rest of configure will use an undefined malloc.
+Hence some tests fail. Up to now we simply #undef these functions
+where we had a problem (cf. AC_FUNC_MKTIME and AC_FUNC_MMAP for
+instance). This is _bad_. Maybe the #define func rpl_malloc should
+be performed in another file than confdefs.h, say confh.h, which is
+used for config.h generation, but not used in configure's own tests.
+
+** AC_PROG_CC
+Currently it tries to put the C compiler in ANSI C mode by default.
+We should change this spec so that AC_PROG_CC tries to change the
+compiler to be the "nicest" mode, i.e. support for the latest standard
+features (currently ISO C99) plus support for all vendor extensions,
+even if they are slightly incompatible with C99. The basic idea here
+is that AC_PROG_CC should disable pedanticisms and should enable
+extensions.
+
+Have a way to specify different default flags to try; see this thread
+for more information:
+<http://lists.gnu.org/archive/html/bug-autoconf/2008-08/msg00009.html>.
+
+
+* Later
+
+** config.site
+This guy is really a problem. It's contents should be read before
+handling the options, so that the latter properly override the latter,
+but most people would want a means to have a config.site that depends
+on $prefix for instance.
+
+Some other would like config.site to be looked for in the current
+directory.
+
+Harlan:
+
+ I'll go further.
+
+ I'd like to see several layers of config.site available.
+
+ I'm starting to use "modules" at more places to handle software
+ installation, and it would be helpful to set general things like:
+
+ prefix=/opt/pkg/@PACKAGE@/@VERSION@
+
+ once at a global level, and then, for example, have things like:
+
+ --with-etcdir=$prefix/etc
+
+ stuffed "above" the various versions of SSH so I wouldn't have to hunt for
+ these things every time it was time to recompile a new version of a
+ previously installed package.
+
+ Something like:
+
+ src/config.site Global stuff
+ ...
+ src/ssh/config.site package-specific stuff
+ src/ssh/ssh-1.2.27/ the actual source code
+
+ I'd like to see automake/autoconf better support packaging tools (like
+ modules, the *BSD ports/ stuff, and others would like hooks for RPMs).
+
+
+** Languages
+Integrate other Fortrans etc.
+
+** AC_CHECK_FUNCS and AC_TRY_LINK_FUNC
+I have still not understood what's the difference between the two
+which requires to have two different sources: AC_LANG_CALL and
+AC_LANG_FUNC_LINK_TRY (which names seem to be inappropriate).
+Wouldn't one be enough?
+
+** Libtool
+Define once for all the hooks they need, any redefinition of
+AC_PROG_CC etc. is way too dangerous and too limiting. The GCC team
+certainly has requirements too.
+
+** AC_SEARCH_LIBS
+From: Tom Tromey <tromey@cygnus.com>
+Subject: AC_SEARCH_LIBS
+
+I think AC_SEARCH_LIBS has an unfortunate interface.
+
+ACTION-IF-FOUND is run in addition to the default action. Most
+autoconf macros don't work this way. This is confusing.
+
+In my case I can't use this macro because it always appends to LIBS.
+I don't want that. Instead I want to use ACTION-IF-FOUND to set my
+own macro.
+
+Also there is no documentation on the format of library names expected
+by the macro. Even a reference to some other function (e.g., "the
+library name can have the same forms as with AC_HAVE_LIBRARY" (if that
+is true, which I haven't looked up) would be fine.
+
+** Revamp the language support
+We should probably have a language for C89, and C99. We must give the
+means to the users to specify some needs over the compilers, and
+actually look for a good compiler, instead of stopping at the first
+compiler we find.
+
+In fact, the AC_CHECK_PROG macro and variations have proved their
+limitation: we really need something more powerful and simpler too.
+
+We must take into account the specific problems of the GCC team. We
+must extend AC_CHECK_FUNCS in order to use the headers instead of fake
+declarations as we currently do. Default headers could be triggered
+on when C99, but not with the other languages?
+
+At the end, we should have a simple macro, such as AC_LANG_COMPILER
+for instance, which is built over simpler macros. Each language
+support should come with these simpler macros, but each language
+should follow the same process.
+
+We also need to check the srcext which are supported by the compiler.
+In fact, this macro is also probably the right place to check for
+objext and exeext.
+
+** AC_PROG_CC_STDC
+Should be: AC_PROG_CC_ISO? Or even more specific for the ISO version?
+Should include more tests (e.g., AC_C_CONST etc.)? See Peter for very
+useful comments on the technology. Should we make this a new
+language? AC_LANG(ISO C). It would be great to introduce
+AC_LANG_COMPILER in this release too.
+
+** autoupdate
+We should probably install the files which do not depend upon the
+user, just the Autoconf library files. But conversely autoupdate must
+be opened to user macros, i.e., for instance libtool itself must be
+able to say that AM_PROG_LIBTOOL is now AC_PROG_LIBTOOL, and have
+autoupdate do its job on old configure.ac.
+
+* Even later
+
+** Pentateuch
+Heck, there is nothing after `Deuteronomy'! We're stuck, but we
+_must_ update the `history' section. Can't go to `New testament', we
+might hurt feelings? In addition, it means that the Messiah has come,
+which might be slightly presumptuous :). Still, someone fluent in
+English should write it.
+
+** AC_PATH_X
+Hi Robert,
+
+> Hi, autoconf people. While packaging plotutils-2.2 (just released),
+> I noticed what looks like a small error in the autoconf-2.13 texinfo
+> documentation, the entry for AC_PATH_XTRA, in particular.
+
+> The documentation says that AC_PATH_XTRA
+> ... adds the C compiler flags that X needs to output variable
+> `X_CFLAGS', and the X linker flags to `X_LIBS'. If X is not
+> available, adds `-DX_DISPLAY_MISSING' to `X_CFLAGS'.
+
+> It doesn't seem to add -DX_DISPLAY_MISSING to X_CFLAGS. X_DISPLAY_MISSING
+> ends up defined in config.h, instead.
+
+That's only because you're no doubt using AC_CONFIG_HEADER(..) to send
+your defines to a config.h-style file. If you were to not use
+AC_CONFIG_HEADER and X was not available, then you would see
+-DX_DISPLAY_MISSING being added to @DEFS@ as your output files were being
+generated.
+
+But you are right--the documentation is not clear about this. I'll change
+it.
+
+> In fact it looks to me as if right now, X_CFLAGS is used only for
+> specifying directories where X include files are stored, via the `-I' option.
+> Maybe it should really be called X_CPPFLAGS?
+
+Well, perhaps. If you feel strongly about this, feel free to submit a
+change-request. There is a hyperlink to the bug tracking database from
+http://sourceware.cygnus.com/autoconf/. With the way it reads in the
+manual right now, it's designed to allow the user to set additional flags
+in the environment prior to running configure--and these don't need to be
+limited to just -I flags. Nevertheless, I can see a few clean ways to
+improve this.
+
+** AC_SYS_INTERPRETER
+Defines $interpval. This is not a standard name. Do we want to keep
+this? Clarify our policy on those names.
+
+** Allow --recursive to config.status
+So that --recheck does not pass --no-recursive to configure.
+
+* autoconf.texi
+Move the specific macro documentation blocks into the source files,
+and use a doc-block extraction/merge technique to get documentation
+into texi-file. This should help avoid bit-rot in the doc, and make
+the doc easier to update when people add/change macros. The name
+"autodoc" is probably already taken so we probably need another one.
+
+------------------------------------------------------------------------------
+
+* m4
+
+** I18n
+The error messages for indir and dumpdef are uselessly different. Fix
+this for translators.
+
+** Tracing `builtin'
+F**k! --trace FOO does not catch indir([FOO], $@)!
+Fixed in M4 1.6, but we can't rely on it yet.
+
+** m4 loops
+As of 2.63, m4_for has a fixed iteration count for speed in the common
+usage case. But it used to allow the user to alter iteration count by
+reassigning the iterator, allowing a break-like functionality (or even
+infloops). Does this need a new (but maybe slower) macro? Should we
+also provide something like m4_while([TEST], [EXPR])? Maybe an
+m4_break() that works inside a looping construct?
+http://lists.gnu.org/archive/html/autoconf-patches/2008-08/msg00121.html
+
+* Autoconf 3
+
+** Cache name spaces.
+Cf the discussion with Kaveh. One would like to
+AC_CHECK_FUNCS(bar)
+# Do something that changes the environment
+AC_CACHE_PUSH(foo)
+AC_CHECK_FUNCS(bar)
+AC_CACHE_POP
+in order not to erase the results of a check with another.
+
+** Cache var names
+should depend upon the current language.
+
+** Use m4 lists?
+I think one sad decision in Autoconf was to use white space separated
+lists for some arguments. For instance AC_CHECK_FUNCS(foo bar). I
+tend to think that, even if it is not as nice, we should use m4 lists,
+i.e., AC_CHECK_FUNCS([foo, bar]) in this case. This would ease
+specializing loops, and more importantly, make them much more robust.
+
+A typical example of things that can be performed if we use m4 lists
+instead of white space separated lists is the case of things that have
+a space in their names, eg, structures.
+
+With the current scheme it would be extremely difficult to loop over
+AC_CHECK_STRUCTS(struct foo struct bar), while it natural and well
+defined for m4 lists: AC_CHECK_STRUCTS([struct foo, struct bar]).
+
+I know that makes a huge difference in syntax, but a major release
+should be ready to settle a new world. We *can* provide helping tools
+for the transition. Considering the benefits, I really think it is
+worth thinking. --akim
+
+** Forbid shell variables as main arguments
+The fact that we have to support shell variables as main argument
+forbids many interesting constructions (specialization are not always
+possible, equally for AC_REQUIRE'ing macros *with their arguments*).
+Any loop should be handled by m4 itself, and nothing should be hidden
+to it. As a consequence, shell variables on the main arguments become
+useless (the main reason we support shell variables is to allow the
+loop versions of single argument macros, eg, to go from AC_CHECK_FUNC
+to AC_CHECK_FUNCS). --akim
+
+** Use the @SUBST@ technology also for headers instead of #undef.
+This requires that acconfig.h becomes completely obsolete: autoheader
+should generate all the templates.
+
+** Specializing loops.
+For instance, make AC_CHECK_FUNC[S] automatically use any particular
+macros for the listed functions.
+This requires to obsolete the feature `break' in ACTION-IF, since all
+the loops are to be handled by m4, not sh.
+
+** Faces of a test
+Each macro can potentially come with several faces: of course the
+configure snippet (AC_foo), a config.h snippet (AH_foo), a system.h
+snippet (AS_foo), documentation (AD_foo) and, why not, the some C code
+for instance to replace a function.
+
+The motivation for the `faces' is to encapsulate. It is abnormal that
+once one has a configure macro, then she has to read somewhere to find
+the piece of system.h to use etc. The macros should come in a
+self-contained way, or, said it another way, PnP.
+
+A major issue is that of specialization. AC_CHECK_HEADER (or another
+name) for instance, will have as an effect, via system.h to include
+the header. But if the test for the header is specific, the generic
+AS_CHECK_HEADER will still be used. Conversely, some headers may not
+require a specific AC_ tests, but a specialized AS_ macro.
+
+------------------------------------------------------------------------------
+
+* Make AC_CHECK_LIB check whether the function is already available
+ before checking for the library. This might involve adding another
+ kind of cache variable to indicate whether a given function needs a
+ given library. The current ac_cv_func_ variables are intended to
+ indicate whether the function is in the default libraries, but
+ actually also take into account whatever value LIBS had when they
+ were checked for.
+
+ Isn't this the issue of AC_SEARCH_LIB? --akim
+ How come the list of libraries to browse not an additional parameter
+ of AC_CHECK_FUNC, exactly like for the headers? --akim
+
+------------------------------------------------------------------------------
+
+* Select the right CONFIG_SHELL automatically (for Ultrix, Lynx especially.)
+
+------------------------------------------------------------------------------
+
+* Doc: Centralize information on POSIX, MS-DOS, cross-compiling, and
+ other important topics.
+
+------------------------------------------------------------------------------
+
+* Mike Haertel's suggestions:
+
+** Cross compiling:
+
+*** Error messages include instructions for overriding defaults using
+config.site.
+
+*** Distribute a config.site corresponding to a hypothetical bare POSIX system with c89.
+
+** Site defaults:
+
+*** Convention for consistency checking of env vars and options in config.site so config.site can print obnoxious messages if it doesn't like options or env vars that users use.
+
+------------------------------------------------------------------------------
+
+* Look at user contributed macros:
+ IEEE double precision math
+ more
+
+------------------------------------------------------------------------------
+
+* Provide a way to create a config.h *and* set the DEFS variable from within
+the same configure script.
+
+------------------------------------------------------------------------------
+
+In config.status comment, put the host/target/build types, if used.
+
+------------------------------------------------------------------------------
+
+It would be nice if I could (in the Makefile.in files) set the
+relative name of config.h. You have config.h ../config.h
+../../config.h's all over the place, in the findutils-4.1 directory.
+From: "Randall S. Winchester" <rsw@eng.umd.edu>
+
+------------------------------------------------------------------------------
+
+ ls -lt configure configure.in | sort
+doesn't work right if configure.in is from a symlink farm, where the
+symlink has either a timestamp of its own, or under BSD 4.4, it has
+the timestamp of the current directory, neither of which
+helps. Changing it to
+ ls -Llt configure configure.in | sort
+works for me, though I don't know how portable that is
+_Mark_ <eichin@cygnus.com>
+
+------------------------------------------------------------------------------
+
+Here is the thing I would like the most;
+AC_PKG_WITH(PACKAGE, HELP_STRING, PACKAGE-ROOT, PACKAGE-LIBS, PACKAGE-DEFS,
+ PACKAGE-CCPFLAGS)
+like
+
+AC_PKG_WITH(kerberos,,/usr/local/athena,-lkrb -ldes,[KERBEROS KRB4
+CRYPT],include)
+AC_PKG_WITH(hesiod,
+[if hesiod is not in kerberos-root add --with-hesiod-root=somewhere]
+,,-lhesiod,HESIOD,,)
+AC_PKG_WITH(glue,,,-lglue,GLUE,,)
+AC_PKG_WITH(bind,,/usr/local/bind, [lib/resolv.a lib/lib44bsd.a], ,include)
+After the appropriate checks, the existence of the files, and libs and such
+LIBS=$LIBS $PKG-LIBS
+DEFS=$DEFS $PKG-DEFS
+CPPFLAGS=$PKG-CPPFLAGS $CPPFLAGS
+$PKG-ROOT=$PKG-ROOT
+The cppflags should reverse the order so that you can have;
+-I/usr/local/bind/include -I/usr/local/athena/include
+and
+-L/usr/local/athena/lib -lkrb -ldes /usr/local/bind/lib/libresolv.a
+as order matters.
+
+also an AC_PKG_CHK_HEADER
+and an AC_PKG_CHK_FUNCTION
+so one can give alternate names to check for stuff ($PKG-ROOT/lib for
+example)
+From: Randall Winchester
+
+------------------------------------------------------------------------------
+
+AC_C_CROSS assumes that configure was called like 'CC=target-gcc;
+./configure'. I want to write a package that has target dependent
+libraries and host dependent tools. So I don't like to lose the
+distinction between CC and [G]CC_FOR_TARGET. AC_C_CROSS should check
+for equality of target and host.
+
+It would be great if
+
+GCC_FOR_TARGET
+AR_FOR_TARGET
+RANLIB_FOR_TARGET
+
+would be set automatically if host != target.
+AC_LANG_CROSS_C would be nice too, to check header files
+etc. with GCC_FOR_TARGET instead of CC
+
+Here is one simple test
+
+if test "x$host" != "x$target"; then
+AC_CHECK_PROGS(AR_FOR_TARGET,
+ [$target-ar, $prefix/$target/bin/ar], $target-ar)
+AC_CHECK_PROGS(RANLIB_FOR_TARGET, $target-ranlib, $target-ranlib)
+ [$target-ranlib, $prefix/$target/bin/ranlib], $target-ranlib)
+AC_CHECK_PROGS(GCC_FOR_TARGET, $target-gcc, $target-gcc)
+ [$target-gcc, $prefix/$target/bin/gcc], $target-gcc)
+fi
+
+From: nennker@cs.tu-berlin.DE (Axel Nennker)
+
+(also look in the autoconf mailing list archives for the proposed
+CHECK_TARGET_TOOL macro from Natanael Nerode, a gcc configury guru).
+
+------------------------------------------------------------------------------
+
+The problem occurs with the following libc functions in SunOS 5.4:
+
+ fnmatch glob globfree regcomp regexec regerror regfree wordexp wordfree
+
+It also occurs with a bunch more libposix4 functions that most people
+probably aren't worried about yet, e.g. shm_open.
+
+All these functions fail with errno set to ENOSYS (89)
+``Operation not applicable''.
+
+Perhaps Autoconf should have a specific macro for fnmatch, another for
+glob+globfree, another for regcomp+regexec+regerror+regfree, and
+another for wordexp+wordfree. This wouldn't solve the problem in
+general, but it should work for Solaris 2.4. Or Autoconf could limit
+itself to fnmatch and regcomp, the only two functions that I know have
+been a problem so far.
+
+From Paul Eggert.
+
+------------------------------------------------------------------------------
+
+Make easy macros for checking for X functions and libraries, such as Motif.
+
+------------------------------------------------------------------------------
+
+There are basically three ways to lock files
+ lockf, fnctl, flock
+I'd be interested in adding a macro to pick the "right one" if you're
+interested.
+
+From: Rich Salz <rsalz@osf.org>
+
+------------------------------------------------------------------------------
+
+Timezone calculations checks.
+
+------------------------------------------------------------------------------
+
+Support different default file system layouts, e.g. SVR4, Linux.
+Of course, this can be done locally with config.site.
+
+------------------------------------------------------------------------------
+
+I wonder if it is possible to get the name of X11's app-defaults
+directory by autoconf. Moreover, I'd like to have a general way of
+accessing imake variables by autoconf, something like
+
+AC_DEFINE(WINE_APP_DEFAULTS, AC_IMAKE_VAR(XAPPLOADDIR))
+
+Slaven Rezic <eserte@cabulja.herceg.de>
+
+------------------------------------------------------------------------------
+
+Every user running X11 usually has a directory like *X11* in his PATH
+variable. By replacing bin by include, you can find good places to
+look for the include files or libraries.
+
+From: rcb5@win.tue.nl (Richard Verhoeven)
+
+------------------------------------------------------------------------------
+
+In most cases, when autoscan suggests something, using the search or
+index command into the Info reader for autoconf manual quickly
+explains me what the test is about. However, for header files and
+functions, the search might fail, because the test is not of the
+specific kind. The Autoconf manual should reflect somewhere all
+header files or functions (non-specific features, generally)
+triggering autoscan to generate tests, and tell in a few words what is
+the problem, and the suggested approach for a solution; that is, how
+one should use the result of testing the feature.
+
+From: pinard@iro.umontreal.ca
+
+------------------------------------------------------------------------------
+
+It would be nice if the configure script would handle an option such as
+--x-libraries="/usr/openwin/lib /usr/dt/lib".
+
+Rick Boykin <rboykin@cscsun3.larc.nasa.gov>
+
+Under Solaris 2.4, the regular X includes and libs and the Motif
+includes and libs are in different places. The Emacs configure script
+actually allows dir1:dir2:dir3 --
+
+ if test "${x_libraries}" != NONE && test -n "${x_libraries}"; then
+ LD_SWITCH_X_SITE=-L`echo ${x_libraries} | sed -e "s/:/ -L/g"`
+ LD_SWITCH_X_SITE_AUX=-R`echo ${x_libraries} | sed -e "s/:/ -R/g"`
+ fi
+ if test "${x_includes}" != NONE && test -n "${x_includes}"; then
+ C_SWITCH_X_SITE=-I`echo ${x_includes} | sed -e "s/:/ -I/g"`
+ fi
+
+------------------------------------------------------------------------------
+
+ What messages should be produced by default, if any?
+
+Probably only the few most important ones, like which configuration
+name was used, whether X or Xt are in use, etc. The specific
+decisions, and progress messages, should be recorded on the terminal
+only if --verbose is used.
+
+ --silent just suppresses the "checking for...result"
+ messages, not the "creating FOO" messages.
+
+I think the default should be to suppress both.
+From: Richard Stallman <rms@gnu.ai.mit.edu>
+
+There is no distinction now between
+important decisions (we have X) vs minor decisions (we have lstat).
+However, there are probably only a few things you deem important enough to
+announce and only those few things will need to be changed.
+Perhaps config.status could be written with comments saying what was
+decided.
+From: Roland McGrath <roland@gnu.ai.mit.edu>
+
+------------------------------------------------------------------------------
+
+Another thing I wish for is a macro which figures out which libraries are
+needed for BSD-style sockets. AC_PATH_X already detects this
+correctly...so it's just a matter of separating out the socket-related code.
+From: "Joel N. Weber II" <nemo@koa.iolani.honolulu.hi.us>
+
+------------------------------------------------------------------------------
+
+in order to use the AC_CANONICAL_SYSTEM macro, I have to have
+install-sh somewhere nearby --- why is this? I have no real reason to
+distribute install-sh, other than that its absence breaks this code.
+
+Shouldn't the above loop be looking for config.sub and config.guess?
+From: jimb@totoro.bio.indiana.edu (Jim Blandy)
+
+adding AC_CANONICAL_HOST to my configure.in script caused
+all sorts of odd/unexplained errors. Obviously, I had to go
+get copies of config.guess, config.sub and install-sh from the
+autoconf distribution, but the error messages and autoconf docs
+didn't explain that very well.
+From: bostic@bsdi.com (Keith Bostic)
+
+------------------------------------------------------------------------------
+
+Perhaps also have AC_TRY_COMPILER try to link an invalid program, and
+die if the compiler seemed to succeed--in which case it's not usable
+with autoconf scripts.
+
+------------------------------------------------------------------------------
+
+Copyright (C) 1994-1996, 1999-2002, 2007-2012 Free Software Foundation,
+Inc.
+
+Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..bf6339b
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,691 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES(OBJC)],
+ [define([AC_PROG_OBJC],
+ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+# 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 10
+
+# AM_PATH_LISPDIR
+# ---------------
+AC_DEFUN([AM_PATH_LISPDIR],
+[AC_PREREQ([2.60])dnl
+ # If set to t, that means we are running in a shell under Emacs.
+ # If you have an Emacs named "t", then use the full path.
+ test x"$EMACS" = xt && EMACS=
+ AC_CHECK_PROGS([EMACS], [emacs xemacs], [no])
+ AC_ARG_VAR([EMACS], [the Emacs editor command])
+ AC_ARG_VAR([EMACSLOADPATH], [the Emacs library search path])
+ AC_ARG_WITH([lispdir],
+ [ --with-lispdir override the default lisp directory],
+ [ lispdir="$withval"
+ AC_MSG_CHECKING([where .elc files should go])
+ AC_MSG_RESULT([$lispdir])],
+ [
+ AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [
+ if test $EMACS != "no"; then
+ if test x${lispdir+set} != xset; then
+ # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly
+ # Some emacsen will start up in interactive mode, requiring C-x C-c to exit,
+ # which is non-obvious for non-emacs users.
+ # Redirecting /dev/null should help a bit; pity we can't detect "broken"
+ # emacsen earlier and avoid running this altogether.
+ AC_RUN_LOG([$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out])
+ am_cv_lispdir=`sed -n \
+ -e 's,/$,,' \
+ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \
+ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \
+ conftest.out`
+ rm conftest.out
+ fi
+ fi
+ test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp'
+ ])
+ lispdir="$am_cv_lispdir"
+])
+AC_SUBST([lispdir])
+])# AM_PATH_LISPDIR
+
+AU_DEFUN([ud_PATH_LISPDIR], [AM_PATH_LISPDIR])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/autobuild.m4])
+m4_include([m4/m4.m4])
+m4_include([m4/make-case.m4])
diff --git a/bin/Makefile.am b/bin/Makefile.am
new file mode 100644
index 0000000..a6e3b22
--- /dev/null
+++ b/bin/Makefile.am
@@ -0,0 +1,103 @@
+# Make Autoconf commands.
+
+# Copyright (C) 1999-2007, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+include ../lib/freeze.mk
+
+bin_SCRIPTS = autom4te \
+ autoconf autoheader autoreconf ifnames autoscan autoupdate
+
+EXTRA_DIST = autoconf.as autoheader.in autoreconf.in autoupdate.in ifnames.in \
+ autoscan.in autom4te.in
+
+# Files that should be removed, but which Automake does not know.
+MOSTLYCLEANFILES = $(bin_SCRIPTS) autoconf.in *.tmp
+
+# Get the release year from ../ChangeLog.
+RELEASE_YEAR = \
+ `sed 's/^\([0-9][0-9][0-9][0-9]\).*/\1/;q' $(top_srcdir)/ChangeLog`
+
+## ------------- ##
+## The scripts. ##
+## ------------- ##
+
+edit = sed \
+ -e 's|@SHELL[@]|$(SHELL)|g' \
+ -e 's|@PERL[@]|$(PERL)|g' \
+ -e 's|@PERL_FLOCK[@]|$(PERL_FLOCK)|g' \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \
+ -e 's|@prefix[@]|$(prefix)|g' \
+ -e 's|@autoconf-name[@]|'`echo autoconf | sed '$(transform)'`'|g' \
+ -e 's|@autoheader-name[@]|'`echo autoheader | sed '$(transform)'`'|g' \
+ -e 's|@autom4te-name[@]|'`echo autom4te | sed '$(transform)'`'|g' \
+ -e 's|@M4[@]|$(M4)|g' \
+ -e 's|@M4_DEBUGFILE[@]|$(M4_DEBUGFILE)|g' \
+ -e 's|@M4_GNU[@]|$(M4_GNU)|g' \
+ -e 's|@AWK[@]|$(AWK)|g' \
+ -e 's|@RELEASE_YEAR[@]|'$(RELEASE_YEAR)'|g' \
+ -e 's|@VERSION[@]|$(VERSION)|g' \
+ -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
+ -e 's|@configure_input[@]|Generated from $@.in; do not edit by hand.|g'
+
+$(top_builddir)/bin/autom4te: autom4te
+
+# autoconf is written in M4sh.
+# FIXME: this target should depend on the frozen files below lib/m4sugar,
+# otherwise autom4te may pick up a frozen m4sh.m4f from an earlier
+# installation below the same $(prefix); work around this with --melt.
+autoconf.in: $(srcdir)/autoconf.as $(m4sh_m4f_dependencies)
+ $(MY_AUTOM4TE) --language M4sh --cache '' --melt $(srcdir)/autoconf.as -o $@
+
+## All the scripts depend on Makefile so that they are rebuilt when the
+## prefix etc. changes. It took quite a while to have the rule correct,
+## don't break it!
+## Use chmod -w to prevent people from editing the wrong file by accident.
+$(bin_SCRIPTS): Makefile
+ rm -f $@ $@.tmp
+ srcdir=''; \
+ test -f ./$@.in || srcdir=$(srcdir)/; \
+ $(edit) $${srcdir}$@.in >$@.tmp
+ chmod +x $@.tmp
+ chmod a-w $@.tmp
+ mv $@.tmp $@
+
+autoconf: autoconf.in
+autoheader: $(srcdir)/autoheader.in
+autom4te: $(srcdir)/autom4te.in
+autoreconf: $(srcdir)/autoreconf.in
+autoscan: $(srcdir)/autoscan.in
+autoupdate: $(srcdir)/autoupdate.in
+ifnames: $(srcdir)/ifnames.in
+
+
+## --------------- ##
+## Building TAGS. ##
+## --------------- ##
+
+TAGS_DEPENDENCIES = $(EXTRA_DIST)
+
+letters = abcdefghijklmnopqrstuvwxyz
+LETTERS = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+DIGITS = 0123456789
+WORD_REGEXP = [$(LETTERS)$(letters)_][$(LETTERS)$(letters)$(DIGITS)_]*
+ETAGS_PERL = --lang=perl \
+ autoheader.in autoreconf.in autoupdate.in autoscan.in autom4te.in \
+ ifnames.in
+ETAGS_SH = --lang=none --regex='/\($(WORD_REGEXP)\)=/\1/' \
+ autoconf.in
+
+ETAGS_ARGS = $(ETAGS_PERL) $(ETAGS_SH)
diff --git a/bin/Makefile.in b/bin/Makefile.in
new file mode 100644
index 0000000..4201b5a
--- /dev/null
+++ b/bin/Makefile.in
@@ -0,0 +1,662 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf commands.
+
+# Copyright (C) 1999-2007, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/../lib/freeze.mk $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+subdir = bin
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(bindir)"
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+bin_SCRIPTS = autom4te \
+ autoconf autoheader autoreconf ifnames autoscan autoupdate
+
+EXTRA_DIST = autoconf.as autoheader.in autoreconf.in autoupdate.in ifnames.in \
+ autoscan.in autom4te.in
+
+
+# Files that should be removed, but which Automake does not know.
+MOSTLYCLEANFILES = $(bin_SCRIPTS) autoconf.in *.tmp
+
+# Get the release year from ../ChangeLog.
+RELEASE_YEAR = \
+ `sed 's/^\([0-9][0-9][0-9][0-9]\).*/\1/;q' $(top_srcdir)/ChangeLog`
+
+edit = sed \
+ -e 's|@SHELL[@]|$(SHELL)|g' \
+ -e 's|@PERL[@]|$(PERL)|g' \
+ -e 's|@PERL_FLOCK[@]|$(PERL_FLOCK)|g' \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \
+ -e 's|@prefix[@]|$(prefix)|g' \
+ -e 's|@autoconf-name[@]|'`echo autoconf | sed '$(transform)'`'|g' \
+ -e 's|@autoheader-name[@]|'`echo autoheader | sed '$(transform)'`'|g' \
+ -e 's|@autom4te-name[@]|'`echo autom4te | sed '$(transform)'`'|g' \
+ -e 's|@M4[@]|$(M4)|g' \
+ -e 's|@M4_DEBUGFILE[@]|$(M4_DEBUGFILE)|g' \
+ -e 's|@M4_GNU[@]|$(M4_GNU)|g' \
+ -e 's|@AWK[@]|$(AWK)|g' \
+ -e 's|@RELEASE_YEAR[@]|'$(RELEASE_YEAR)'|g' \
+ -e 's|@VERSION[@]|$(VERSION)|g' \
+ -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
+ -e 's|@configure_input[@]|Generated from $@.in; do not edit by hand.|g'
+
+TAGS_DEPENDENCIES = $(EXTRA_DIST)
+letters = abcdefghijklmnopqrstuvwxyz
+LETTERS = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+DIGITS = 0123456789
+WORD_REGEXP = [$(LETTERS)$(letters)_][$(LETTERS)$(letters)$(DIGITS)_]*
+ETAGS_PERL = --lang=perl \
+ autoheader.in autoreconf.in autoupdate.in autoscan.in autom4te.in \
+ ifnames.in
+
+ETAGS_SH = --lang=none --regex='/\($(WORD_REGEXP)\)=/\1/' \
+ autoconf.in
+
+ETAGS_ARGS = $(ETAGS_PERL) $(ETAGS_SH)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../lib/freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu bin/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+installcheck-binSCRIPTS: $(bin_SCRIPTS)
+ bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-binSCRIPTS
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ ctags distclean distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binSCRIPTS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am \
+ installcheck-binSCRIPTS installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-binSCRIPTS
+
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+$(top_builddir)/bin/autom4te: autom4te
+
+# autoconf is written in M4sh.
+# FIXME: this target should depend on the frozen files below lib/m4sugar,
+# otherwise autom4te may pick up a frozen m4sh.m4f from an earlier
+# installation below the same $(prefix); work around this with --melt.
+autoconf.in: $(srcdir)/autoconf.as $(m4sh_m4f_dependencies)
+ $(MY_AUTOM4TE) --language M4sh --cache '' --melt $(srcdir)/autoconf.as -o $@
+
+$(bin_SCRIPTS): Makefile
+ rm -f $@ $@.tmp
+ srcdir=''; \
+ test -f ./$@.in || srcdir=$(srcdir)/; \
+ $(edit) $${srcdir}$@.in >$@.tmp
+ chmod +x $@.tmp
+ chmod a-w $@.tmp
+ mv $@.tmp $@
+
+autoconf: autoconf.in
+autoheader: $(srcdir)/autoheader.in
+autom4te: $(srcdir)/autom4te.in
+autoreconf: $(srcdir)/autoreconf.in
+autoscan: $(srcdir)/autoscan.in
+autoupdate: $(srcdir)/autoupdate.in
+ifnames: $(srcdir)/ifnames.in
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/bin/autoconf.as b/bin/autoconf.as
new file mode 100644
index 0000000..aa85394
--- /dev/null
+++ b/bin/autoconf.as
@@ -0,0 +1,191 @@
+AS_INIT[]dnl -*- shell-script -*-
+m4_divert_push([HEADER-COPYRIGHT])dnl
+# @configure_input@
+# autoconf -- create `configure' using m4 macros
+
+# Copyright (C) 1992-1994, 1996, 1999-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+m4_divert_pop([HEADER-COPYRIGHT])dnl back to BODY
+AS_ME_PREPARE[]dnl
+
+usage=["\
+Usage: $0 [OPTION]... [TEMPLATE-FILE]
+
+Generate a configuration script from a TEMPLATE-FILE if given, or
+\`configure.ac' if present, or else \`configure.in'. Output is sent
+to the standard output if TEMPLATE-FILE is given, else into
+\`configure'.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don't remove temporary files
+ -f, --force consider all files obsolete
+ -o, --output=FILE save output in FILE (stdout is the default)
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax]
+
+Warning categories include:
+ \`cross' cross compilation issues
+ \`obsolete' obsolete constructs
+ \`syntax' dubious syntactic constructs
+ \`all' all the warnings
+ \`no-CATEGORY' turn off the warnings on CATEGORY
+ \`none' turn off all the warnings
+ \`error' warnings are error
+
+The environment variables \`M4' and \`WARNINGS' are honored.
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+Tracing:
+ -t, --trace=MACRO[:FORMAT] report the list of calls to MACRO
+ -i, --initialization also trace Autoconf's initialization process
+
+In tracing mode, no configuration script is created. FORMAT defaults
+to \`\$f:\$l:\$n:\$%'; see \`autom4te --help' for information about FORMAT.
+
+Report bugs to <bug-autoconf@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."]
+
+version=["\
+autoconf (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by David J. MacKenzie and Akim Demaille."]
+
+help="\
+Try \`$as_me --help' for more information."
+
+exit_missing_arg='
+ m4_bpatsubst([AS_ERROR([option `$[1]' requires an argument$as_nl$help])],
+ ['], ['\\''])'
+# restore font-lock: '
+
+# Variables.
+: ${AUTOM4TE='@bindir@/@autom4te-name@'}
+autom4te_options=
+outfile=
+verbose=false
+
+# Parse command line.
+while test $# -gt 0 ; do
+ option=[`expr "x$1" : 'x\(--[^=]*\)' \| \
+ "x$1" : 'x\(-.\)'`]
+ optarg=[`expr "x$1" : 'x--[^=]*=\(.*\)' \| \
+ "x$1" : 'x-.\(.*\)'`]
+ case $1 in
+ --version | -V )
+ echo "$version" ; exit ;;
+ --help | -h )
+ AS_ECHO(["$usage"]); exit ;;
+
+ --verbose | -v )
+ verbose=:
+ autom4te_options="$autom4te_options $1"; shift ;;
+
+ # Arguments passed as is to autom4te.
+ --debug | -d | \
+ --force | -f | \
+ --include=* | -I?* | \
+ --prepend-include=* | -B?* | \
+ --warnings=* | -W?* )
+ case $1 in
+ *\'*) arg=`AS_ECHO(["$1"]) | sed "s/'/'\\\\\\\\''/g"` ;; #'
+ *) arg=$1 ;;
+ esac
+ autom4te_options="$autom4te_options '$arg'"; shift ;;
+ # Options with separated arg passed as is to autom4te.
+ --include | -I | \
+ --prepend-include | -B | \
+ --warnings | -W )
+ test $# = 1 && eval "$exit_missing_arg"
+ case $2 in
+ *\'*) arg=`AS_ECHO(["$2"]) | sed "s/'/'\\\\\\\\''/g"` ;; #'
+ *) arg=$2 ;;
+ esac
+ autom4te_options="$autom4te_options $option '$arg'"
+ shift; shift ;;
+
+ --trace=* | -t?* )
+ traces="$traces --trace='"`AS_ECHO(["$optarg"]) | sed "s/'/'\\\\\\\\''/g"`"'"
+ shift ;;
+ --trace | -t )
+ test $# = 1 && eval "$exit_missing_arg"
+ traces="$traces --trace='"`AS_ECHO(["$[2]"]) | sed "s/'/'\\\\\\\\''/g"`"'"
+ shift; shift ;;
+ --initialization | -i )
+ autom4te_options="$autom4te_options --melt"
+ shift;;
+
+ --output=* | -o?* )
+ outfile=$optarg
+ shift ;;
+ --output | -o )
+ test $# = 1 && eval "$exit_missing_arg"
+ outfile=$2
+ shift; shift ;;
+
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ exec >&2
+ AS_ERROR([invalid option `$[1]'$as_nl$help]) ;; #`
+ * )
+ break ;;
+ esac
+done
+
+# Find the input file.
+case $# in
+ 0)
+ if test -f configure.ac; then
+ if test -f configure.in; then
+ AS_ECHO(["$as_me: warning: both \`configure.ac' and \`configure.in' are present."]) >&2
+ AS_ECHO(["$as_me: warning: proceeding with \`configure.ac'."]) >&2
+ fi
+ infile=configure.ac
+ elif test -f configure.in; then
+ infile=configure.in
+ else
+ AS_ERROR([no input file])
+ fi
+ test -z "$traces" && test -z "$outfile" && outfile=configure;;
+ 1)
+ infile=$1 ;;
+ *) exec >&2
+ AS_ERROR([invalid number of arguments$as_nl$help]) ;;
+esac
+
+# Unless specified, the output is stdout.
+test -z "$outfile" && outfile=-
+
+# Run autom4te with expansion.
+eval set x "$autom4te_options" \
+ --language=autoconf --output=\"\$outfile\" "$traces" \"\$infile\"
+shift
+$verbose && AS_ECHO(["$as_me: running $AUTOM4TE $*"]) >&2
+exec "$AUTOM4TE" "$@"
diff --git a/bin/autoheader.in b/bin/autoheader.in
new file mode 100644
index 0000000..d81a313
--- /dev/null
+++ b/bin/autoheader.in
@@ -0,0 +1,303 @@
+#! @PERL@
+# -*- Perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# autoheader -- create `config.h.in' from `configure.ac'
+
+# Copyright (C) 1992-1994, 1996, 1998-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Roland McGrath.
+# Rewritten in Perl by Akim Demaille.
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, "$pkgdatadir";
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::ChannelDefs;
+use Autom4te::Channels;
+use Autom4te::Configure_ac;
+use Autom4te::FileUtils;
+use Autom4te::General;
+use Autom4te::XFile;
+use strict;
+
+# Using `do FILE', we need `local' vars.
+use vars qw ($config_h %verbatim %symbol);
+
+# Lib files.
+my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@';
+local $config_h;
+my $config_h_in;
+my @prepend_include;
+my @include;
+
+
+# $HELP
+# -----
+$help = "Usage: $0 [OPTION]... [TEMPLATE-FILE]
+
+Create a template file of C \`\#define\' statements for \`configure\' to
+use. To this end, scan TEMPLATE-FILE, or \`configure.ac\' if present,
+or else \`configure.in\'.
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don\'t remove temporary files
+ -f, --force consider all files obsolete
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY
+
+" . Autom4te::ChannelDefs::usage () . "
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+
+# $VERSION
+# --------
+$version = "autoheader (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Roland McGrath and Akim Demaille.
+";
+
+
+## ---------- ##
+## Routines. ##
+## ---------- ##
+
+
+# parse_args ()
+# -------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ my $srcdir;
+
+ parse_WARNINGS;
+ getopt ('I|include=s' => \@include,
+ 'B|prepend-include=s' => \@prepend_include,
+ 'W|warnings=s' => \&parse_warnings);
+
+ if (! @ARGV)
+ {
+ my $configure_ac = require_configure_ac;
+ push @ARGV, $configure_ac;
+ }
+}
+
+
+## -------------- ##
+## Main program. ##
+## -------------- ##
+
+mktmpdir ('ah');
+switch_warning 'obsolete';
+parse_args;
+
+# Preach.
+my $config_h_top = find_file ("config.h.top?",
+ reverse (@prepend_include), @include);
+my $config_h_bot = find_file ("config.h.bot?",
+ reverse (@prepend_include), @include);
+my $acconfig_h = find_file ("acconfig.h?",
+ reverse (@prepend_include), @include);
+if ($config_h_top || $config_h_bot || $acconfig_h)
+ {
+ my $msg = << "END";
+ Using auxiliary files such as \`acconfig.h\', \`config.h.bot\'
+ and \`config.h.top\', to define templates for \`config.h.in\'
+ is deprecated and discouraged.
+
+ Using the third argument of \`AC_DEFINE\' and
+ \`AC_DEFINE_UNQUOTED\' allows one to define a template without
+ \`acconfig.h\':
+
+ AC_DEFINE([NEED_FUNC_MAIN], 1,
+ [Define if a function \`main\' is needed.])
+
+ More sophisticated templates can also be produced, see the
+ documentation.
+END
+ $msg =~ s/^ /WARNING: /gm;
+ msg 'obsolete', $msg;
+ }
+
+# Set up autoconf.
+my $autoconf = "'$autom4te' --language=autoconf ";
+$autoconf .= join (' --include=', '', map { shell_quote ($_) } @include);
+$autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+$autoconf .= ' --debug' if $debug;
+$autoconf .= ' --force' if $force;
+$autoconf .= ' --verbose' if $verbose;
+
+# ----------------------- #
+# Real work starts here. #
+# ----------------------- #
+
+# Source what the traces are trying to tell us.
+verb "$me: running $autoconf to trace from $ARGV[0]";
+my $quoted_tmp = shell_quote ($tmp);
+xsystem ("$autoconf"
+ # If you change this list, update the
+ # `Autoheader-preselections' section of autom4te.in.
+ . ' --trace AC_CONFIG_HEADERS:\'$$config_h ||= \'"\'"\'$1\'"\'"\';\''
+ . ' --trace AH_OUTPUT:\'$$verbatim{\'"\'"\'$1\'"\'"\'} = \'"\'"\'$2\'"\'"\';\''
+ . ' --trace AC_DEFINE_TRACE_LITERAL:\'$$symbol{\'"\'"\'$1\'"\'"\'} = 1;\''
+ . " " . shell_quote ($ARGV[0]) . " >$quoted_tmp/traces.pl");
+
+local (%verbatim, %symbol);
+debug "$me: \`do'ing $tmp/traces.pl:\n" . `sed 's/^/| /' $quoted_tmp/traces.pl`;
+do "$tmp/traces.pl";
+warn "couldn't parse $tmp/traces.pl: $@" if $@;
+unless ($config_h)
+ {
+ error "error: AC_CONFIG_HEADERS not found in $ARGV[0]";
+ exit 1;
+ }
+
+# We template only the first CONFIG_HEADER.
+$config_h =~ s/ .*//;
+# Support "outfile[:infile]", defaulting infile="outfile.in".
+($config_h, $config_h_in) = split (':', $config_h, 2);
+$config_h_in ||= "$config_h.in";
+
+# %SYMBOL might contain things like `F77_FUNC(name,NAME)', but we keep
+# only the name of the macro.
+%symbol = map { s/\(.*//; $_ => 1 } keys %symbol;
+
+my $out = new Autom4te::XFile ("> " . open_quote ("$tmp/config.hin"));
+
+# Don't write "do not edit" -- it will get copied into the
+# config.h, which it's ok to edit.
+print $out "/* $config_h_in. Generated from $ARGV[0] by autoheader. */\n";
+
+# Dump the top.
+if ($config_h_top)
+ {
+ my $in = new Autom4te::XFile ("< " . open_quote ($config_h_top));
+ while ($_ = $in->getline)
+ {
+ print $out $_;
+ }
+ }
+
+# Dump `acconfig.h', except for its bottom portion.
+if ($acconfig_h)
+ {
+ my $in = new Autom4te::XFile ("< " . open_quote ($acconfig_h));
+ while ($_ = $in->getline)
+ {
+ last if /\@BOTTOM\@/;
+ next if /\@TOP\@/;
+ print $out $_;
+ }
+ }
+
+# Dump the templates from `configure.ac'.
+foreach (sort keys %verbatim)
+ {
+ print $out "\n$verbatim{$_}\n";
+ }
+
+# Dump bottom portion of `acconfig.h'.
+if ($acconfig_h)
+ {
+ my $in = new Autom4te::XFile ("< " . open_quote ($acconfig_h));
+ my $dump = 0;
+ while ($_ = $in->getline)
+ {
+ print $out $_ if $dump;
+ $dump = 1 if /\@BOTTOM\@/;
+ }
+ }
+
+# Dump the bottom.
+if ($config_h_bot)
+ {
+ my $in = new Autom4te::XFile ("< " . open_quote ($config_h_bot));
+ while ($_ = $in->getline)
+ {
+ print $out $_;
+ }
+ }
+
+$out->close;
+
+# Check that all the symbols have a template.
+{
+ my $in = new Autom4te::XFile ("< " . open_quote ("$tmp/config.hin"));
+ my $suggest_ac_define = 1;
+ while ($_ = $in->getline)
+ {
+ my ($symbol) = /^\#\s*\w+\s+(\w+)/
+ or next;
+ delete $symbol{$symbol};
+ }
+ foreach (sort keys %symbol)
+ {
+ msg 'syntax', "warning: missing template: $_";
+ if ($suggest_ac_define)
+ {
+ msg 'syntax', "Use AC_DEFINE([$_], [], [Description])";
+ $suggest_ac_define = 0;
+ }
+
+ }
+ exit 1
+ if keys %symbol;
+}
+
+update_file ("$tmp/config.hin", "$config_h_in", $force);
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/autom4te.in b/bin/autom4te.in
new file mode 100644
index 0000000..11773c9
--- /dev/null
+++ b/bin/autom4te.in
@@ -0,0 +1,1074 @@
+#! @PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# autom4te - Wrapper around M4 libraries.
+# Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, $pkgdatadir;
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::C4che;
+use Autom4te::ChannelDefs;
+use Autom4te::Channels;
+use Autom4te::FileUtils;
+use Autom4te::General;
+use Autom4te::XFile;
+use File::Basename;
+use strict;
+
+# Data directory.
+my $pkgdatadir = $ENV{'AC_MACRODIR'} || '@pkgdatadir@';
+
+# $LANGUAGE{LANGUAGE} -- Automatic options for LANGUAGE.
+my %language;
+
+my $output = '-';
+
+# Mode of the output file except for traces.
+my $mode = "0666";
+
+# If melt, don't use frozen files.
+my $melt = 0;
+
+# Names of the cache directory, cache directory index, trace cache
+# prefix, and output cache prefix. And the IO object for the index.
+my $cache;
+my $icache;
+my $tcache;
+my $ocache;
+my $icache_file;
+
+my $flock_implemented = '@PERL_FLOCK@';
+
+# The macros to trace mapped to their format, as specified by the
+# user.
+my %trace;
+
+# The macros the user will want to trace in the future.
+# We need `include' to get the included file, `m4_pattern_forbid' and
+# `m4_pattern_allow' to check the output.
+#
+# FIXME: What about `sinclude'?
+my @preselect = ('include',
+ 'm4_pattern_allow', 'm4_pattern_forbid',
+ '_m4_warn');
+
+# M4 include path.
+my @include;
+
+# Do we freeze?
+my $freeze = 0;
+
+# $M4.
+my $m4 = $ENV{"M4"} || '@M4@';
+# Some non-GNU m4's don't reject the --help option, so give them /dev/null.
+fatal "need GNU m4 1.4 or later: $m4"
+ if system "$m4 --help </dev/null 2>&1 | grep reload-state >/dev/null";
+
+# Set some high recursion limit as the default limit, 250, has already
+# been hit with AC_OUTPUT. Don't override the user's choice.
+$m4 .= ' --nesting-limit=1024'
+ if " $m4 " !~ / (--nesting-limit(=[0-9]+)?|-L[0-9]*) /;
+
+
+# @M4_BUILTIN -- M4 builtins and a useful comment.
+my @m4_builtin = `echo dumpdef | $m4 2>&1 >/dev/null`;
+map { s/:.*//;s/\W// } @m4_builtin;
+
+
+# %M4_BUILTIN_ALTERNATE_NAME
+# --------------------------
+# The builtins are renamed, e.g., `define' is renamed `m4_define'.
+# So map `define' to `m4_define' and conversely.
+# Some macros don't follow this scheme: be sure to properly map to their
+# alternate name too.
+#
+# FIXME: Trace status of renamed builtins was fixed in M4 1.4.5, which
+# we now depend on; do we still need to do this mapping?
+#
+# So we will merge them, i.e., tracing `BUILTIN' or tracing
+# `m4_BUILTIN' will be the same: tracing both, but honoring the
+# *last* trace specification.
+#
+# FIXME: This is not enough: in the output `$0' will be `BUILTIN'
+# sometimes and `m4_BUILTIN' at others. We should return a unique name,
+# the one specified by the user.
+#
+# FIXME: To be absolutely rigorous, I would say that given that we
+# _redefine_ divert (instead of _copying_ it), divert and the like
+# should not be part of this list.
+my %m4_builtin_alternate_name;
+@m4_builtin_alternate_name{"$_", "m4_$_"} = ("m4_$_", "$_")
+ foreach (grep { !/m4wrap|m4exit|dnl|ifelse|__.*__/ } @m4_builtin);
+@m4_builtin_alternate_name{"ifelse", "m4_if"} = ("m4_if", "ifelse");
+@m4_builtin_alternate_name{"m4exit", "m4_exit"} = ("m4_exit", "m4exit");
+@m4_builtin_alternate_name{"m4wrap", "m4_wrap"} = ("m4_wrap", "m4wrap");
+
+
+# $HELP
+# -----
+$help = "Usage: $0 [OPTION]... [FILES]
+
+Run GNU M4 on the FILES, avoiding useless runs. Output the traces if tracing,
+the frozen file if freezing, otherwise the expansion of the FILES.
+
+If some of the FILES are named \`FILE.m4f\' they are considered to be M4
+frozen files of all the previous files (which are therefore not loaded).
+If \`FILE.m4f\' is not found, then \`FILE.m4\' will be used, together with
+all the previous files.
+
+Some files may be optional, i.e., will only be processed if found in the
+include path, but then must end in \`.m4?\'; the question mark is not part of
+the actual file name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don\'t remove temporary files
+ -o, --output=FILE save output in FILE (defaults to \`-\', stdout)
+ -f, --force don\'t rely on cached values
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY
+ -l, --language=LANG specify the set of M4 macros to use
+ -C, --cache=DIRECTORY preserve results for future runs in DIRECTORY
+ --no-cache disable the cache
+ -m, --mode=OCTAL change the non trace output file mode (0666)
+ -M, --melt don\'t use M4 frozen files
+
+Languages include:
+ \`Autoconf\' create Autoconf configure scripts
+ \`Autotest\' create Autotest test suites
+ \`M4sh\' create M4sh shell scripts
+ \`M4sugar\' create M4sugar output
+
+" . Autom4te::ChannelDefs::usage . "
+
+The environment variables \`M4\' and \`WARNINGS\' are honored.
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+Tracing:
+ -t, --trace=MACRO[:FORMAT] report the MACRO invocations
+ -p, --preselect=MACRO prepare to trace MACRO in a future run
+
+Freezing:
+ -F, --freeze produce an M4 frozen state file for FILES
+
+FORMAT defaults to \`\$f:\$l:\$n:\$%\', and can use the following escapes:
+ \$\$ literal \$
+ \$f file where macro was called
+ \$l line where macro was called
+ \$d nesting depth of macro call
+ \$n name of the macro
+ \$NUM argument NUM, unquoted and with newlines
+ \$SEP\@ all arguments, with newlines, quoted, and separated by SEP
+ \$SEP* all arguments, with newlines, unquoted, and separated by SEP
+ \$SEP% all arguments, without newlines, unquoted, and separated by SEP
+SEP can be empty for the default (comma for \@ and *, colon for %),
+a single character for that character, or {STRING} to use a string.
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+# $VERSION
+# --------
+$version = <<"EOF";
+autom4te (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by Akim Demaille.
+EOF
+
+
+## ---------- ##
+## Routines. ##
+## ---------- ##
+
+
+# $OPTION
+# files_to_options (@FILE)
+# ------------------------
+# Transform Autom4te conventions (e.g., using foo.m4f to designate a frozen
+# file) into a suitable command line for M4 (e.g., using --reload-state).
+# parse_args guarantees that we will see at most one frozen file, and that
+# if a frozen file is present, it is the first argument.
+sub files_to_options (@)
+{
+ my (@file) = @_;
+ my @res;
+ foreach my $file (@file)
+ {
+ my $arg = shell_quote ($file);
+ if ($file =~ /\.m4f$/)
+ {
+ $arg = "--reload-state=$arg";
+ # If the user downgraded M4 from 1.6 to 1.4.x after freezing
+ # the file, then we ensure the frozen __m4_version__ will
+ # not cause m4_init to make the wrong decision about the
+ # current M4 version.
+ $arg .= " --undefine=__m4_version__"
+ unless grep {/__m4_version__/} @m4_builtin;
+ }
+ push @res, $arg;
+ }
+ return join ' ', @res;
+}
+
+
+# load_configuration ($FILE)
+# --------------------------
+# Load the configuration $FILE.
+sub load_configuration ($)
+{
+ my ($file) = @_;
+ use Text::ParseWords;
+
+ my $cfg = new Autom4te::XFile ("< " . open_quote ($file));
+ my $lang;
+ while ($_ = $cfg->getline)
+ {
+ chomp;
+ # Comments.
+ next
+ if /^\s*(\#.*)?$/;
+
+ my @words = shellwords ($_);
+ my $type = shift @words;
+ if ($type eq 'begin-language:')
+ {
+ fatal "$file:$.: end-language missing for: $lang"
+ if defined $lang;
+ $lang = lc $words[0];
+ }
+ elsif ($type eq 'end-language:')
+ {
+ error "$file:$.: end-language mismatch: $lang"
+ if $lang ne lc $words[0];
+ $lang = undef;
+ }
+ elsif ($type eq 'args:')
+ {
+ fatal "$file:$.: no current language"
+ unless defined $lang;
+ push @{$language{$lang}}, @words;
+ }
+ else
+ {
+ error "$file:$.: unknown directive: $type";
+ }
+ }
+}
+
+
+# parse_args ()
+# -------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ # We want to look for the early options, which should not be found
+ # in the configuration file. Prepend to the user arguments.
+ # Perform this repeatedly so that we can use --language in language
+ # definitions. Beware that there can be several --language
+ # invocations.
+ my @language;
+ do {
+ @language = ();
+ use Getopt::Long;
+ Getopt::Long::Configure ("pass_through", "permute");
+ GetOptions ("l|language=s" => \@language);
+
+ foreach (@language)
+ {
+ error "unknown language: $_"
+ unless exists $language{lc $_};
+ unshift @ARGV, @{$language{lc $_}};
+ }
+ } while @language;
+
+ # --debug is useless: it is parsed below.
+ if (exists $ENV{'AUTOM4TE_DEBUG'})
+ {
+ print STDERR "$me: concrete arguments:\n";
+ foreach my $arg (@ARGV)
+ {
+ print STDERR "| $arg\n";
+ }
+ }
+
+ # Process the arguments for real this time.
+ my @trace;
+ my @prepend_include;
+ parse_WARNINGS;
+ getopt
+ (
+ # Operation modes:
+ "o|output=s" => \$output,
+ "W|warnings=s" => \&parse_warnings,
+ "m|mode=s" => \$mode,
+ "M|melt" => \$melt,
+
+ # Library directories:
+ "B|prepend-include=s" => \@prepend_include,
+ "I|include=s" => \@include,
+
+ # Tracing:
+ # Using a hash for traces is seducing. Unfortunately, upon `-t FOO',
+ # instead of mapping `FOO' to undef, Getopt maps it to `1', preventing
+ # us from distinguishing `-t FOO' from `-t FOO=1'. So let's do it
+ # by hand.
+ "t|trace=s" => \@trace,
+ "p|preselect=s" => \@preselect,
+
+ # Freezing.
+ "F|freeze" => \$freeze,
+
+ # Caching.
+ "C|cache=s" => \$cache,
+ "no-cache" => sub { $cache = undef; },
+ );
+
+ fatal "too few arguments
+Try `$me --help' for more information."
+ unless @ARGV;
+
+ # Freezing:
+ # We cannot trace at the same time (well, we can, but it sounds insane).
+ # And it implies melting: there is risk not to update properly using
+ # old frozen files, and worse yet: we could load a frozen file and
+ # refreeze it! A sort of caching :)
+ fatal "cannot freeze and trace"
+ if $freeze && @trace;
+ $melt = 1
+ if $freeze;
+
+ # Names of the cache directory, cache directory index, trace cache
+ # prefix, and output cache prefix. If the cache is not to be
+ # preserved, default to a temporary directory (automatically removed
+ # on exit).
+ $cache = $tmp
+ unless $cache;
+ $icache = "$cache/requests";
+ $tcache = "$cache/traces.";
+ $ocache = "$cache/output.";
+
+ # Normalize the includes: the first occurrence is enough, several is
+ # a pain since it introduces a useless difference in the path which
+ # invalidates the cache. And strip `.' which is implicit and always
+ # first.
+ @include = grep { !/^\.$/ } uniq (reverse(@prepend_include), @include);
+
+ # Convert @trace to %trace, and work around the M4 builtins tracing
+ # problem.
+ # The default format is `$f:$l:$n:$%'.
+ foreach (@trace)
+ {
+ /^([^:]+)(?::(.*))?$/ms;
+ $trace{$1} = defined $2 ? $2 : '$f:$l:$n:$%';
+ $trace{$m4_builtin_alternate_name{$1}} = $trace{$1}
+ if exists $m4_builtin_alternate_name{$1};
+ }
+
+ # Work around the M4 builtins tracing problem for @PRESELECT.
+ # FIXME: Is this still needed, now that we rely on M4 1.4.5?
+ push (@preselect,
+ map { $m4_builtin_alternate_name{$_} }
+ grep { exists $m4_builtin_alternate_name{$_} } @preselect);
+
+ # If we find frozen files, then all the files before it are
+ # discarded: the frozen file is supposed to include them all.
+ #
+ # We don't want to depend upon m4's --include to find the top level
+ # files, so we use `find_file' here. Try to get a canonical name,
+ # as it's part of the key for caching. And some files are optional
+ # (also handled by `find_file').
+ my @argv;
+ foreach (@ARGV)
+ {
+ if ($_ eq '-')
+ {
+ push @argv, $_;
+ }
+ elsif (/\.m4f$/)
+ {
+ # Frozen files are optional => pass a `?' to `find_file'.
+ my $file = find_file ("$_?", @include);
+ if (!$melt && $file)
+ {
+ @argv = ($file);
+ }
+ else
+ {
+ s/\.m4f$/.m4/;
+ push @argv, find_file ($_, @include);
+ }
+ }
+ else
+ {
+ my $file = find_file ($_, @include);
+ push @argv, $file
+ if $file;
+ }
+ }
+ @ARGV = @argv;
+}
+
+
+# handle_m4 ($REQ, @MACRO)
+# ------------------------
+# Run m4 on the input files, and save the traces on the @MACRO.
+sub handle_m4 ($@)
+{
+ my ($req, @macro) = @_;
+
+ # GNU m4 appends when using --debugfile/--error-output.
+ unlink ($tcache . $req->id . "t");
+
+ # Run m4.
+ #
+ # We don't output directly to the cache files, to avoid problems
+ # when we are interrupted (that leaves corrupted files).
+ xsystem ("$m4 @M4_GNU@"
+ . join (' --include=', '', map { shell_quote ($_) } @include)
+ . ' --debug=aflq'
+ . (!exists $ENV{'AUTOM4TE_NO_FATAL'} ? ' --fatal-warning' : '')
+ . " @M4_DEBUGFILE@=" . shell_quote ("$tcache" . $req->id . "t")
+ . join (' --trace=', '', map { shell_quote ($_) } sort @macro)
+ . " " . files_to_options (@ARGV)
+ . " > " . shell_quote ("$ocache" . $req->id . "t"));
+
+ # Everything went ok: preserve the outputs.
+ foreach my $file (map { $_ . $req->id } ($tcache, $ocache))
+ {
+ use File::Copy;
+ move ("${file}t", "$file")
+ or fatal "cannot rename ${file}t as $file: $!";
+ }
+}
+
+
+# warn_forbidden ($WHERE, $WORD, %FORBIDDEN)
+# ------------------------------------------
+# $WORD is forbidden. Warn with a dedicated error message if in
+# %FORBIDDEN, otherwise a simple `error: possibly undefined macro'
+# will do.
+my $first_warn_forbidden = 1;
+sub warn_forbidden ($$%)
+{
+ my ($where, $word, %forbidden) = @_;
+ my $message;
+
+ for my $re (sort keys %forbidden)
+ {
+ if ($word =~ $re)
+ {
+ $message = $forbidden{$re};
+ last;
+ }
+ }
+ $message ||= "possibly undefined macro: $word";
+ warn "$where: error: $message\n";
+ if ($first_warn_forbidden)
+ {
+ warn <<EOF;
+ If this token and others are legitimate, please use m4_pattern_allow.
+ See the Autoconf documentation.
+EOF
+ $first_warn_forbidden = 0;
+ }
+}
+
+
+# handle_output ($REQ, $OUTPUT)
+# -----------------------------
+# Run m4 on the input files, perform quadrigraphs substitution, check for
+# forbidden tokens, and save into $OUTPUT.
+sub handle_output ($$)
+{
+ my ($req, $output) = @_;
+
+ verb "creating $output";
+
+ # Load the forbidden/allowed patterns.
+ handle_traces ($req, "$tmp/patterns",
+ ('m4_pattern_forbid' => 'forbid:$1:$2',
+ 'm4_pattern_allow' => 'allow:$1'));
+ my @patterns = new Autom4te::XFile ("< " . open_quote ("$tmp/patterns"))->getlines;
+ chomp @patterns;
+ my %forbidden =
+ map { /^forbid:([^:]+):.+$/ => /^forbid:[^:]+:(.+)$/ } @patterns;
+ my $forbidden = join ('|', map { /^forbid:([^:]+)/ } @patterns) || "^\$";
+ my $allowed = join ('|', map { /^allow:([^:]+)/ } @patterns) || "^\$";
+
+ verb "forbidden tokens: $forbidden";
+ verb "forbidden token : $_ => $forbidden{$_}"
+ foreach (sort keys %forbidden);
+ verb "allowed tokens: $allowed";
+
+ # Read the (cached) raw M4 output, produce the actual result. We
+ # have to use the 2nd arg to have Autom4te::XFile honor the third, but then
+ # stdout is to be handled by hand :(. Don't use fdopen as it means
+ # we will close STDOUT, which we already do in END.
+ my $out = new Autom4te::XFile;
+ if ($output eq '-')
+ {
+ $out->open (">$output");
+ }
+ else
+ {
+ $out->open($output, O_CREAT | O_WRONLY | O_TRUNC, oct ($mode));
+ }
+ fatal "cannot create $output: $!"
+ unless $out;
+ my $in = new Autom4te::XFile ("< " . open_quote ($ocache . $req->id));
+
+ my %prohibited;
+ my $res;
+ while ($_ = $in->getline)
+ {
+ s/\s+$//;
+ s/__oline__/$./g;
+ s/\@<:\@/[/g;
+ s/\@:>\@/]/g;
+ s/\@\{:\@/(/g;
+ s/\@:\}\@/)/g;
+ s/\@S\|\@/\$/g;
+ s/\@%:\@/#/g;
+
+ $res = $_;
+
+ # Don't complain in comments. Well, until we have something
+ # better, don't consider `#include' etc. are comments.
+ s/\#.*//
+ unless /^\#\s*(if|include|endif|ifdef|ifndef|define)\b/;
+ foreach (split (/\W+/))
+ {
+ $prohibited{$_} = $.
+ if !/^$/ && /$forbidden/o && !/$allowed/o && ! exists $prohibited{$_};
+ }
+
+ # Performed *last*: the empty quadrigraph.
+ $res =~ s/\@&t\@//g;
+
+ print $out "$res\n";
+ }
+
+ $out->close();
+
+ # If no forbidden words, we're done.
+ return
+ if ! %prohibited;
+
+ # Locate the forbidden words in the last input file.
+ # This is unsatisfying but...
+ $exit_code = 1;
+ if ($ARGV[$#ARGV] ne '-')
+ {
+ my $prohibited = '\b(' . join ('|', keys %prohibited) . ')\b';
+ my $file = new Autom4te::XFile ("< " . open_quote ($ARGV[$#ARGV]));
+
+ while ($_ = $file->getline)
+ {
+ # Don't complain in comments. Well, until we have something
+ # better, don't consider `#include' etc. to be comments.
+ s/\#.*//
+ unless /^\#(if|include|endif|ifdef|ifndef|define)\b/;
+
+ # Complain once per word, but possibly several times per line.
+ while (/$prohibited/)
+ {
+ my $word = $1;
+ warn_forbidden ("$ARGV[$#ARGV]:$.", $word, %forbidden);
+ delete $prohibited{$word};
+ # If we're done, exit.
+ return
+ if ! %prohibited;
+ $prohibited = '\b(' . join ('|', keys %prohibited) . ')\b';
+ }
+ }
+ }
+ warn_forbidden ("$output:$prohibited{$_}", $_, %forbidden)
+ foreach (sort { $prohibited{$a} <=> $prohibited{$b} } keys %prohibited);
+}
+
+
+## --------------------- ##
+## Handling the traces. ##
+## --------------------- ##
+
+
+# $M4_MACRO
+# trace_format_to_m4 ($FORMAT)
+# ----------------------------
+# Convert a trace $FORMAT into a M4 trace processing macro's body.
+sub trace_format_to_m4 ($)
+{
+ my ($format) = @_;
+ my $underscore = $_;
+ my %escape = (# File name.
+ 'f' => '$1',
+ # Line number.
+ 'l' => '$2',
+ # Depth.
+ 'd' => '$3',
+ # Name (also available as $0).
+ 'n' => '$4',
+ # Escaped dollar.
+ '$' => '$');
+
+ my $res = '';
+ $_ = $format;
+ while ($_)
+ {
+ # $n -> $(n + 4)
+ if (s/^\$(\d+)//)
+ {
+ $res .= "\$" . ($1 + 4);
+ }
+ # $x, no separator given.
+ elsif (s/^\$([fldn\$])//)
+ {
+ $res .= $escape{$1};
+ }
+ # $.x or ${sep}x.
+ elsif (s/^\$\{([^}]*)\}([@*%])//
+ || s/^\$(.?)([@*%])//)
+ {
+ # $@, list of quoted effective arguments.
+ if ($2 eq '@')
+ {
+ $res .= ']at_at([' . ($1 ? $1 : ',') . '], $@)[';
+ }
+ # $*, list of unquoted effective arguments.
+ elsif ($2 eq '*')
+ {
+ $res .= ']at_star([' . ($1 ? $1 : ',') . '], $@)[';
+ }
+ # $%, list of flattened unquoted effective arguments.
+ elsif ($2 eq '%')
+ {
+ $res .= ']at_percent([' . ($1 ? $1 : ':') . '], $@)[';
+ }
+ }
+ elsif (/^(\$.)/)
+ {
+ error "invalid escape: $1";
+ }
+ else
+ {
+ s/^([^\$]+)//;
+ $res .= $1;
+ }
+ }
+
+ $_ = $underscore;
+ return '[[' . $res . ']]';
+}
+
+
+# handle_traces($REQ, $OUTPUT, %TRACE)
+# ------------------------------------
+# We use M4 itself to process the traces. But to avoid name clashes when
+# processing the traces, the builtins are disabled, and moved into `at_'.
+# Actually, all the low level processing macros are in `at_' (and `_at_').
+# To avoid clashes between user macros and `at_' macros, the macros which
+# implement tracing are in `AT_'.
+#
+# Having $REQ is needed to neutralize the macros which have been traced,
+# but are not wanted now.
+sub handle_traces ($$%)
+{
+ my ($req, $output, %trace) = @_;
+
+ verb "formatting traces for `$output': " . join (', ', sort keys %trace);
+
+ # Processing the traces.
+ my $trace_m4 = new Autom4te::XFile ("> " . open_quote ("$tmp/traces.m4"));
+
+ $_ = <<'EOF';
+ divert(-1)
+ changequote([, ])
+ # _at_MODE(SEPARATOR, ELT1, ELT2...)
+ # ----------------------------------
+ # List the elements, separating then with SEPARATOR.
+ # MODE can be:
+ # `at' -- the elements are enclosed in brackets.
+ # `star' -- the elements are listed as are.
+ # `percent' -- the elements are `flattened': spaces are singled out,
+ # and no new line remains.
+ define([_at_at],
+ [at_ifelse([$#], [1], [],
+ [$#], [2], [[[$2]]],
+ [[[$2]][$1]$0([$1], at_shift(at_shift($@)))])])
+
+ define([_at_percent],
+ [at_ifelse([$#], [1], [],
+ [$#], [2], [at_flatten([$2])],
+ [at_flatten([$2])[$1]$0([$1], at_shift(at_shift($@)))])])
+
+ define([_at_star],
+ [at_ifelse([$#], [1], [],
+ [$#], [2], [[$2]],
+ [[$2][$1]$0([$1], at_shift(at_shift($@)))])])
+
+ # FLATTEN quotes its result.
+ # Note that the second pattern is `newline, tab or space'. Don't lose
+ # the tab!
+ define([at_flatten],
+ [at_patsubst(at_patsubst([[[$1]]], [\\\n]), [[\n\t ]+], [ ])])
+
+ define([at_args], [at_shift(at_shift(at_shift(at_shift(at_shift($@)))))])
+ define([at_at], [_$0([$1], at_args($@))])
+ define([at_percent], [_$0([$1], at_args($@))])
+ define([at_star], [_$0([$1], at_args($@))])
+
+EOF
+ s/^ //mg;s/\\t/\t/mg;s/\\n/\n/mg;
+ print $trace_m4 $_;
+
+ # If you trace `define', then on `define([m4_exit], defn([m4exit])' you
+ # will produce
+ #
+ # AT_define([m4sugar.m4], [115], [1], [define], [m4_exit], <m4exit>)
+ #
+ # Since `<m4exit>' is not quoted, the outer m4, when processing
+ # `trace.m4' will exit prematurely. Hence, move all the builtins to
+ # the `at_' name space.
+
+ print $trace_m4 "# Copy the builtins.\n";
+ map { print $trace_m4 "define([at_$_], defn([$_]))\n" } @m4_builtin;
+ print $trace_m4 "\n";
+
+ print $trace_m4 "# Disable them.\n";
+ map { print $trace_m4 "at_undefine([$_])\n" } @m4_builtin;
+ print $trace_m4 "\n";
+
+
+ # Neutralize traces: we don't want traces of cached requests (%REQUEST).
+ print $trace_m4
+ "## -------------------------------------- ##\n",
+ "## By default neutralize all the traces. ##\n",
+ "## -------------------------------------- ##\n",
+ "\n";
+ print $trace_m4 "at_define([AT_$_], [at_dnl])\n"
+ foreach (sort keys %{$req->macro});
+ print $trace_m4 "\n";
+
+ # Implement traces for current requests (%TRACE).
+ print $trace_m4
+ "## ------------------------- ##\n",
+ "## Trace processing macros. ##\n",
+ "## ------------------------- ##\n",
+ "\n";
+ foreach (sort keys %trace)
+ {
+ # Trace request can be embed \n.
+ (my $comment = "Trace $_:$trace{$_}") =~ s/^/\# /;
+ print $trace_m4 "$comment\n";
+ print $trace_m4 "at_define([AT_$_],\n";
+ print $trace_m4 trace_format_to_m4 ($trace{$_}) . ")\n\n";
+ }
+ print $trace_m4 "\n";
+
+ # Reenable output.
+ print $trace_m4 "at_divert(0)at_dnl\n";
+
+ # Transform the traces from m4 into an m4 input file.
+ # Typically, transform:
+ #
+ # | m4trace:configure.ac:3: -1- AC_SUBST([exec_prefix], [NONE])
+ #
+ # into
+ #
+ # | AT_AC_SUBST([configure.ac], [3], [1], [AC_SUBST], [exec_prefix], [NONE])
+ #
+ # Pay attention that the file name might include colons, if under DOS
+ # for instance, so we don't use `[^:]+'.
+ my $traces = new Autom4te::XFile ("< " . open_quote ($tcache . $req->id));
+ while ($_ = $traces->getline)
+ {
+ # Trace with arguments, as the example above. We don't try
+ # to match the trailing parenthesis as it might be on a
+ # separate line.
+ s{^m4trace:(.+):(\d+): -(\d+)- ([^(]+)\((.*)$}
+ {AT_$4([$1], [$2], [$3], [$4], $5};
+ # Traces without arguments, always on a single line.
+ s{^m4trace:(.+):(\d+): -(\d+)- ([^)]*)\n$}
+ {AT_$4([$1], [$2], [$3], [$4])\n};
+ print $trace_m4 "$_";
+ }
+ $trace_m4->close;
+
+ my $in = new Autom4te::XFile ("$m4 " . shell_quote ("$tmp/traces.m4") . " |");
+ my $out = new Autom4te::XFile ("> " . open_quote ($output));
+
+ # This is dubious: should we really transform the quadrigraphs in
+ # traces? It might break balanced [ ] etc. in the output. The
+ # consensus seems to be that traces are more useful this way.
+ while ($_ = $in->getline)
+ {
+ # It makes no sense to try to transform __oline__.
+ s/\@<:\@/[/g;
+ s/\@:>\@/]/g;
+ s/\@\{:\@/(/g;
+ s/\@:\}\@/)/g;
+ s/\@S\|\@/\$/g;
+ s/\@%:\@/#/g;
+ s/\@&t\@//g;
+ print $out $_;
+ }
+}
+
+
+# $BOOL
+# up_to_date ($REQ)
+# -----------------
+# Are the cache files of $REQ up to date?
+# $REQ is `valid' if it corresponds to the request and exists, which
+# does not mean it is up to date. It is up to date if, in addition,
+# its files are younger than its dependencies.
+sub up_to_date ($)
+{
+ my ($req) = @_;
+
+ return 0
+ if ! $req->valid;
+
+ my $tfile = $tcache . $req->id;
+ my $ofile = $ocache . $req->id;
+
+ # We can't answer properly if the traces are not computed since we
+ # need to know what other files were included. Actually, if any of
+ # the cache files is missing, we are not up to date.
+ return 0
+ if ! -f $tfile || ! -f $ofile;
+
+ # The youngest of the cache files must be older than the oldest of
+ # the dependencies.
+ my $tmtime = mtime ($tfile);
+ my $omtime = mtime ($ofile);
+ my ($file, $mtime) = ($tmtime < $omtime
+ ? ($ofile, $omtime) : ($tfile, $tmtime));
+
+ # We depend at least upon the arguments.
+ my @dep = @ARGV;
+
+ # stdin is always out of date.
+ if (grep { $_ eq '-' } @dep)
+ { return 0 }
+
+ # Files may include others. We can use traces since we just checked
+ # if they are available.
+ handle_traces ($req, "$tmp/dependencies",
+ ('include' => '$1',
+ 'm4_include' => '$1'));
+ my $deps = new Autom4te::XFile ("< " . open_quote ("$tmp/dependencies"));
+ while ($_ = $deps->getline)
+ {
+ chomp;
+ my $file = find_file ("$_?", @include);
+ # If a file which used to be included is no longer there, then
+ # don't say it's missing (it might no longer be included). But
+ # of course, that causes the output to be outdated (as if the
+ # time stamp of that missing file was newer).
+ return 0
+ if ! $file;
+ push @dep, $file;
+ }
+
+ # If $FILE is younger than one of its dependencies, it is outdated.
+ return up_to_date_p ($file, @dep);
+}
+
+
+## ---------- ##
+## Freezing. ##
+## ---------- ##
+
+# freeze ($OUTPUT)
+# ----------------
+sub freeze ($)
+{
+ my ($output) = @_;
+
+ # When processing the file with diversion disabled, there must be no
+ # output but comments and empty lines.
+ my $result = xqx ("$m4"
+ . ' --fatal-warning'
+ . join (' --include=', '', map { shell_quote ($_) } @include)
+ . ' --define=divert'
+ . " " . files_to_options (@ARGV)
+ . ' </dev/null');
+ $result =~ s/#.*\n//g;
+ $result =~ s/^\n//mg;
+
+ fatal "freezing produced output:\n$result"
+ if $result;
+
+ # If freezing produces output, something went wrong: a bad `divert',
+ # or an improper paren etc.
+ xsystem ("$m4"
+ . ' --fatal-warning'
+ . join (' --include=', '', map { shell_quote ($_) } @include)
+ . " --freeze-state=" . shell_quote ($output)
+ . " " . files_to_options (@ARGV)
+ . ' </dev/null');
+}
+
+## -------------- ##
+## Main program. ##
+## -------------- ##
+
+mktmpdir ('am4t');
+load_configuration ($ENV{'AUTOM4TE_CFG'} || "$pkgdatadir/autom4te.cfg");
+load_configuration ("$ENV{'HOME'}/.autom4te.cfg")
+ if exists $ENV{'HOME'} && -f "$ENV{'HOME'}/.autom4te.cfg";
+load_configuration (".autom4te.cfg")
+ if -f ".autom4te.cfg";
+parse_args;
+
+# Freezing does not involve the cache.
+if ($freeze)
+ {
+ freeze ($output);
+ exit $exit_code;
+ }
+
+# We need our cache directory. Don't fail with parallel creation.
+if (! -d "$cache")
+ {
+ mkdir "$cache", 0755
+ or -d "$cache"
+ or fatal "cannot create $cache: $!";
+ }
+
+# Open the index for update, and lock it. autom4te handles several
+# files, but the index is the first and last file to be updated, so
+# locking it is sufficient.
+$icache_file = new Autom4te::XFile $icache, O_RDWR|O_CREAT;
+$icache_file->lock (LOCK_EX)
+ if ($flock_implemented eq "yes");
+
+# Read the cache index if available and older than autom4te itself.
+# If autom4te is younger, then some structures such as C4che might
+# have changed, which would corrupt its processing.
+Autom4te::C4che->load ($icache_file)
+ if -f $icache && mtime ($icache) > mtime ($0);
+
+# Add the new trace requests.
+my $req = Autom4te::C4che->request ('input' => \@ARGV,
+ 'path' => \@include,
+ 'macro' => [keys %trace, @preselect]);
+
+# If $REQ's cache files are not up to date, or simply if the user
+# discarded them (-f), declare it invalid.
+$req->valid (0)
+ if $force || ! up_to_date ($req);
+
+# We now know whether we can trust the Request object. Say it.
+verb "the trace request object is:\n" . $req->marshall;
+
+# We need to run M4 if (i) the user wants it (--force), (ii) $REQ is
+# invalid.
+handle_m4 ($req, keys %{$req->macro})
+ if $force || ! $req->valid;
+
+# Issue the warnings each time autom4te was run.
+my $separator = "\n" . ('-' x 25) . " END OF WARNING " . ('-' x 25) . "\n\n";
+handle_traces ($req, "$tmp/warnings",
+ ('_m4_warn' => "\$1::\$f:\$l::\$2::\$3$separator"));
+# Swallow excessive newlines.
+for (split (/\n*$separator\n*/o, contents ("$tmp/warnings")))
+{
+ # The message looks like:
+ # | syntax::input.as:5::ouch
+ # | ::input.as:4: baz is expanded from...
+ # | input.as:2: bar is expanded from...
+ # | input.as:3: foo is expanded from...
+ # | input.as:5: the top level
+ # In particular, m4_warn guarantees that either $stackdump is empty, or
+ # it consists of lines where only the last line ends in "top level".
+ my ($cat, $loc, $msg, $stacktrace) = split ('::', $_, 4);
+ msg $cat, $loc, "warning: $msg",
+ partial => ($stacktrace =~ /top level$/) + 0;
+ for (split /\n/, $stacktrace)
+ {
+ my ($loc, $trace) = split (': ', $_, 2);
+ msg $cat, $loc, $trace, partial => ($trace !~ /top level$/) + 0;
+ }
+}
+
+# Now output...
+if (%trace)
+ {
+ # Always produce traces, since even if the output is young enough,
+ # there is no guarantee that the traces use the same *format*
+ # (e.g., `-t FOO:foo' and `-t FOO:bar' are both using the same M4
+ # traces, hence the M4 traces cache is usable, but its formatting
+ # will yield different results).
+ handle_traces ($req, $output, %trace);
+ }
+else
+ {
+ # Actual M4 expansion, if the user wants it, or if $output is old
+ # (STDOUT is pretty old).
+ handle_output ($req, $output)
+ if $force || mtime ($output) < mtime ($ocache . $req->id);
+ }
+
+# If we ran up to here, the cache is valid.
+$req->valid (1);
+Autom4te::C4che->save ($icache_file);
+
+exit $exit_code;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/autoreconf.in b/bin/autoreconf.in
new file mode 100644
index 0000000..acf25d4
--- /dev/null
+++ b/bin/autoreconf.in
@@ -0,0 +1,717 @@
+#! @PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# autoreconf - install the GNU Build System in a directory tree
+# Copyright (C) 1994, 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David J. MacKenzie.
+# Extended and rewritten in Perl by Akim Demaille.
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, $pkgdatadir;
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::ChannelDefs;
+use Autom4te::Channels;
+use Autom4te::Configure_ac;
+use Autom4te::FileUtils;
+use Autom4te::General;
+use Autom4te::XFile;
+# Do not use Cwd::chdir, since it might hang.
+use Cwd 'cwd';
+use strict;
+
+## ----------- ##
+## Variables. ##
+## ----------- ##
+
+# $HELP
+# -----
+$help = "Usage: $0 [OPTION]... [DIRECTORY]...
+
+Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint'
+(formerly `gettextize'), and `libtoolize' where appropriate)
+repeatedly to remake the GNU Build System files in specified
+DIRECTORIES and their subdirectories (defaulting to `.').
+
+By default, it only remakes those files that are older than their
+sources. If you install new versions of the GNU Build System,
+you can make `autoreconf' remake all of the files by giving it the
+`--force' option.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don't remove temporary files
+ -f, --force consider all files obsolete
+ -i, --install copy missing auxiliary files
+ --no-recursive don't rebuild sub-packages
+ -s, --symlink with -i, install symbolic links instead of copies
+ -m, --make when applicable, re-run ./configure && make
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [syntax]
+
+" . Autom4te::ChannelDefs::usage . "
+
+The environment variable \`WARNINGS\' is honored. Some subtools might
+support other warning types, using \`all' is encouraged.
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+The environment variables AUTOM4TE, AUTOCONF, AUTOHEADER, AUTOMAKE,
+ACLOCAL, AUTOPOINT, LIBTOOLIZE, M4, and MAKE are honored.
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+# $VERSION
+# --------
+$version = "autoreconf (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by David J. MacKenzie and Akim Demaille.
+";
+
+# Lib files.
+my $autoconf = $ENV{'AUTOCONF'} || '@bindir@/@autoconf-name@';
+my $autoheader = $ENV{'AUTOHEADER'} || '@bindir@/@autoheader-name@';
+my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@';
+my $automake = $ENV{'AUTOMAKE'} || 'automake';
+my $aclocal = $ENV{'ACLOCAL'} || 'aclocal';
+my $libtoolize = $ENV{'LIBTOOLIZE'} || 'libtoolize';
+my $autopoint = $ENV{'AUTOPOINT'} || 'autopoint';
+my $make = $ENV{'MAKE'} || 'make';
+
+# --install -- as --add-missing in other tools.
+my $install = 0;
+# symlink -- when --install, use symlinks instead.
+my $symlink = 0;
+# Does aclocal support --force?
+my $aclocal_supports_force = 0;
+# Does aclocal support -Wfoo?
+my $aclocal_supports_warnings = 0;
+# Does automake support --force-missing?
+my $automake_supports_force_missing = 0;
+# Does automake support -Wfoo?
+my $automake_supports_warnings = 0;
+
+my @prepend_include;
+my @include;
+
+# List of command line warning requests.
+my @warning;
+
+# Rerun `./configure && make'?
+my $run_make = 0;
+
+# Recurse into subpackages
+my $recursive = 1;
+
+## ---------- ##
+## Routines. ##
+## ---------- ##
+
+
+# parse_args ()
+# -------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ my $srcdir;
+
+ getopt ("W|warnings=s" => \@warning,
+ 'I|include=s' => \@include,
+ 'B|prepend-include=s' => \@prepend_include,
+ 'i|install' => \$install,
+ 's|symlink' => \$symlink,
+ 'm|make' => \$run_make,
+ 'recursive!' => \$recursive);
+
+ # Split the warnings as a list of elements instead of a list of
+ # lists.
+ @warning = map { split /,/ } @warning;
+ parse_WARNINGS;
+ parse_warnings '--warnings', @warning;
+
+ # Even if the user specified a configure.ac, trim to get the
+ # directory, and look for configure.ac again. Because (i) the code
+ # is simpler, and (ii) we are still able to diagnose simultaneous
+ # presence of configure.ac and configure.in.
+ @ARGV = map { /configure\.(ac|in)$/ ? dirname ($_) : $_ } @ARGV;
+ push @ARGV, '.' unless @ARGV;
+
+ if ($verbose && $debug)
+ {
+ for my $prog ($autoconf, $autoheader,
+ $automake, $aclocal,
+ $autopoint,
+ $libtoolize)
+ {
+ xsystem ("$prog --version | sed 1q >&2");
+ print STDERR "\n";
+ }
+ }
+
+ my $aclocal_help = `$aclocal --help 2>/dev/null`;
+ my $automake_help = `$automake --help 2>/dev/null`;
+ $aclocal_supports_force = $aclocal_help =~ /--force/;
+ $aclocal_supports_warnings = $aclocal_help =~ /--warnings/;
+ $automake_supports_force_missing = $automake_help =~ /--force-missing/;
+ $automake_supports_warnings = $automake_help =~ /--warnings/;
+
+ # Dispatch autoreconf's option to the tools.
+ # --include;
+ $aclocal .= join (' -I ', '', map { shell_quote ($_) } @include);
+ $autoconf .= join (' --include=', '', map { shell_quote ($_) } @include);
+ $autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+ $autoheader .= join (' --include=', '', map { shell_quote ($_) } @include);
+ $autoheader .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+
+ # --install and --symlink;
+ if ($install)
+ {
+ $automake .= ' --add-missing';
+ $automake .= ' --copy' unless $symlink;
+ $libtoolize .= ' --copy' unless $symlink;
+ }
+ # --force;
+ if ($force)
+ {
+ $aclocal .= ' --force'
+ if $aclocal_supports_force;
+ $autoconf .= ' --force';
+ $autoheader .= ' --force';
+ $automake .= ' --force-missing'
+ if $automake_supports_force_missing;
+ $autopoint .= ' --force';
+ $libtoolize .= ' --force';
+ }
+ else
+ {
+ # The implementation of --no-force is bogus in all implementations
+ # of Automake up to 1.8, so we avoid it in these cases. (Automake
+ # 1.8 is the first version where aclocal supports force, hence
+ # the condition.)
+ $automake .= ' --no-force'
+ if $aclocal_supports_force;
+ }
+ # --verbose --verbose or --debug;
+ if ($verbose > 1 || $debug)
+ {
+ $autoconf .= ' --verbose';
+ $autoheader .= ' --verbose';
+ $automake .= ' --verbose';
+ $aclocal .= ' --verbose';
+ }
+ if ($debug)
+ {
+ $autoconf .= ' --debug';
+ $autoheader .= ' --debug';
+ $libtoolize .= ' --debug';
+ }
+ # --warnings;
+ if (@warning)
+ {
+ my $warn = ' --warnings=' . join (',', @warning);
+ $autoconf .= $warn;
+ $autoheader .= $warn;
+ $automake .= $warn
+ if $automake_supports_warnings;
+ $aclocal .= $warn
+ if $aclocal_supports_warnings;
+ }
+}
+
+
+# &run_aclocal ($ACLOCAL, $FLAGS)
+# -------------------------------
+# Update aclocal.m4 as lazily as possible, as aclocal pre-1.8 always
+# overwrites aclocal.m4, hence triggers autoconf, autoheader, automake
+# etc. uselessly. aclocal 1.8+ does not need this.
+sub run_aclocal ($$)
+{
+ my ($aclocal, $flags) = @_;
+
+ # aclocal 1.8+ does all this for free. It can be recognized by its
+ # --force support.
+ if ($aclocal_supports_force)
+ {
+ xsystem ("$aclocal $flags");
+ }
+ else
+ {
+ xsystem ("$aclocal $flags --output=aclocal.m4t");
+ # aclocal may produce no output.
+ if (-f 'aclocal.m4t')
+ {
+ update_file ('aclocal.m4t', 'aclocal.m4');
+ # Make sure that the local m4 files are older than
+ # aclocal.m4.
+ #
+ # Why is not always the case? Because we already run
+ # aclocal at first (before tracing), which, for instance,
+ # can find Gettext's macros in .../share/aclocal, so we may
+ # have had the right aclocal.m4 already. Then autopoint is
+ # run, and installs locally these M4 files. Then
+ # autoreconf, via update_file, sees it is the _same_
+ # aclocal.m4, and doesn't change its timestamp. But later,
+ # Automake's Makefile expresses that aclocal.m4 depends on
+ # these local files, which are newer, so it triggers aclocal
+ # again.
+ #
+ # To make sure aclocal.m4 is no older, we change the
+ # modification times of the local M4 files to be not newer
+ # than it.
+ #
+ # First, where are the local files?
+ my $aclocal_local_dir = '.';
+ if ($flags =~ /-I\s+(\S+)/)
+ {
+ $aclocal_local_dir = $1;
+ }
+ # All the local files newer than aclocal.m4 are to be
+ # made not newer than it.
+ my $aclocal_m4_mtime = mtime ('aclocal.m4');
+ for my $file (glob ("$aclocal_local_dir/*.m4"), 'acinclude.m4')
+ {
+ if ($aclocal_m4_mtime < mtime ($file))
+ {
+ debug "aging $file to be not newer than aclocal.m4";
+ utime $aclocal_m4_mtime, $aclocal_m4_mtime, $file;
+ }
+ }
+ }
+ }
+}
+
+# &autoreconf_current_directory
+# -----------------------------
+sub autoreconf_current_directory ()
+{
+ my $configure_ac = find_configure_ac;
+
+ # ---------------------- #
+ # Is it using Autoconf? #
+ # ---------------------- #
+
+ my $uses_autoconf;
+ my $uses_gettext;
+ if (-f $configure_ac)
+ {
+ my $configure_ac_file = new Autom4te::XFile "< $configure_ac";
+ while ($_ = $configure_ac_file->getline)
+ {
+ s/#.*//;
+ s/dnl.*//;
+ $uses_autoconf = 1 if /AC_INIT/;
+ # See below for why we look for gettext here.
+ $uses_gettext = 1 if /^AM_GNU_GETTEXT_VERSION/;
+ }
+ }
+ if (!$uses_autoconf)
+ {
+ verb "$configure_ac: not using Autoconf";
+ return;
+ }
+
+
+ # ------------------- #
+ # Running autopoint. #
+ # ------------------- #
+
+ # Gettext is a bit of a problem: its macros are not necessarily
+ # visible to aclocal, so if we start with a completely striped down
+ # package (think of a fresh CVS checkout), running `aclocal' first
+ # will fail: the Gettext macros are missing.
+ #
+ # Therefore, we can't use the traces to decide if we use Gettext or
+ # not. I guess that once Gettext move to 2.5x we will be able to,
+ # but in the meanwhile forget it.
+ #
+ # We can only grep for AM_GNU_GETTEXT_VERSION in configure.ac. You
+ # might think this approach is naive, and indeed it is, as it
+ # prevents one to embed AM_GNU_GETTEXT_VERSION in another *.m4, but
+ # anyway we don't limit the generality, since... that's what
+ # autopoint does. Actually, it is even more restrictive, as it
+ # greps for `^AM_GNU_GETTEXT_VERSION('. We did this above, while
+ # scanning configure.ac.
+ if (!$uses_gettext)
+ {
+ verb "$configure_ac: not using Gettext";
+ }
+ elsif (!$install)
+ {
+ verb "$configure_ac: not running autopoint: --install not given";
+ }
+ else
+ {
+ xsystem_hint ("autopoint is needed because this package uses Gettext", "$autopoint");
+ }
+
+
+ # ----------------- #
+ # Running aclocal. #
+ # ----------------- #
+
+ # Run it first: it might discover new macros to add, e.g.,
+ # AC_PROG_LIBTOOL, which we will trace later to see if Libtool is
+ # used.
+ #
+ # Always run it. Tracking its sources for up-to-dateness is too
+ # complex and too error prone. The best we can do is avoiding
+ # nuking the time stamp.
+ my $uses_aclocal = 1;
+
+ # Nevertheless, if aclocal.m4 exists and is not made by aclocal,
+ # don't run aclocal.
+
+ if (-f 'aclocal.m4')
+ {
+ my $aclocal_m4 = new Autom4te::XFile 'aclocal.m4';
+ $_ = $aclocal_m4->getline;
+ $uses_aclocal = 0
+ unless defined ($_) && /generated.*by aclocal/;
+ }
+
+ # If there are flags for aclocal in Makefile.am, use them.
+ my $aclocal_flags = '';
+ if ($uses_aclocal && -f 'Makefile.am')
+ {
+ my $makefile = new Autom4te::XFile 'Makefile.am';
+ while ($_ = $makefile->getline)
+ {
+ if (/^ACLOCAL_[A-Z_]*FLAGS\s*=\s*(.*)/)
+ {
+ $aclocal_flags = $1;
+ last;
+ }
+ }
+ }
+
+ if (!$uses_aclocal)
+ {
+ verb "$configure_ac: not using aclocal";
+ }
+ else
+ {
+ # Some file systems have sub-second time stamps, and if so we may
+ # run into trouble later, after we rerun autoconf and set the
+ # time stamps of input files to be no greater than aclocal.m4,
+ # because the time-stamp-setting operation (utime) has a
+ # resolution of only 1 second. Work around the problem by
+ # ensuring that there is at least a one-second window before the
+ # time stamp of aclocal.m4t in which no file time stamps can
+ # fall.
+ sleep 1;
+
+ run_aclocal ($aclocal, $aclocal_flags);
+ }
+
+ # We might have to rerun aclocal if Libtool (or others) imports new
+ # macros.
+ my $rerun_aclocal = 0;
+
+
+
+ # ------------------------------- #
+ # See what tools will be needed. #
+ # ------------------------------- #
+
+ # Perform a single trace reading to avoid --force forcing a rerun
+ # between two --trace, that's useless. If there is no AC_INIT, then
+ # we are not interested: it looks like a Cygnus thingy.
+ my $aux_dir;
+ my $uses_gettext_via_traces;
+ my $uses_libtool;
+ my $uses_libltdl;
+ my $uses_autoheader;
+ my $uses_automake;
+ my @subdir;
+ verb "$configure_ac: tracing";
+ my $traces = new Autom4te::XFile
+ ("$autoconf"
+ . join (' ',
+ map { ' --trace=' . $_ . ':\$n::\${::}%' }
+ # If you change this list, update the
+ # `Autoreconf-preselections' section of autom4te.in.
+ 'AC_CONFIG_AUX_DIR',
+ 'AC_CONFIG_HEADERS',
+ 'AC_CONFIG_SUBDIRS',
+ 'AC_INIT',
+ 'AC_PROG_LIBTOOL',
+ 'LT_INIT',
+ 'LT_CONFIG_LTDL_DIR',
+ 'AM_GNU_GETTEXT',
+ 'AM_INIT_AUTOMAKE',
+ )
+ . ' |');
+ while ($_ = $traces->getline)
+ {
+ chomp;
+ my ($macro, @args) = split (/::/);
+ $aux_dir = $args[0] if $macro eq "AC_CONFIG_AUX_DIR";
+ $uses_autoconf = 1 if $macro eq "AC_INIT";
+ $uses_gettext_via_traces = 1 if $macro eq "AM_GNU_GETTEXT";
+ $uses_libtool = 1 if $macro eq "AC_PROG_LIBTOOL"
+ || $macro eq "LT_INIT";
+ $uses_libltdl = 1 if $macro eq "LT_CONFIG_LTDL_DIR";
+ $uses_autoheader = 1 if $macro eq "AC_CONFIG_HEADERS";
+ $uses_automake = 1 if $macro eq "AM_INIT_AUTOMAKE";
+ push @subdir, split (' ', $args[0])
+ if $macro eq "AC_CONFIG_SUBDIRS" && $recursive;
+ }
+
+ # The subdirs are *optional*, they may not exist.
+ foreach (@subdir)
+ {
+ if (-d)
+ {
+ verb "$configure_ac: adding subdirectory $_ to autoreconf";
+ autoreconf ($_);
+ }
+ else
+ {
+ verb "$configure_ac: subdirectory $_ not present";
+ }
+ }
+
+ # Gettext consistency checks...
+ error "$configure_ac: AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION"
+ if $uses_gettext_via_traces && ! $uses_gettext;
+ error "$configure_ac: AM_GNU_GETTEXT_VERSION is used, but not AM_GNU_GETTEXT"
+ if $uses_gettext && ! $uses_gettext_via_traces;
+
+
+ # ---------------------------- #
+ # Setting up the source tree. #
+ # ---------------------------- #
+
+ # libtoolize, automake --add-missing etc. will drop files in the
+ # $AUX_DIR. But these tools fail to install these files if the
+ # directory itself does not exist, which valid: just imagine a CVS
+ # repository with hand written code only (there is not even a need
+ # for a Makefile.am!).
+
+ if (defined $aux_dir && ! -d $aux_dir)
+ {
+ verb "$configure_ac: creating directory $aux_dir";
+ mkdir $aux_dir, 0755
+ or error "cannot create $aux_dir: $!";
+ }
+
+
+ # -------------------- #
+ # Running libtoolize. #
+ # -------------------- #
+
+ if (!$uses_libtool)
+ {
+ verb "$configure_ac: not using Libtool";
+ }
+ elsif ($install)
+ {
+ if ($uses_libltdl)
+ {
+ $libtoolize .= " --ltdl";
+ }
+ xsystem_hint ("libtoolize is needed because this package uses Libtool", $libtoolize);
+ $rerun_aclocal = 1;
+ }
+ else
+ {
+ verb "$configure_ac: not running libtoolize: --install not given";
+ }
+
+
+
+ # ------------------- #
+ # Rerunning aclocal. #
+ # ------------------- #
+
+ # If we re-installed Libtool or Gettext, the macros might have changed.
+ # Automake also needs an up-to-date aclocal.m4.
+ if ($rerun_aclocal)
+ {
+ if (!$uses_aclocal)
+ {
+ verb "$configure_ac: not using aclocal";
+ }
+ else
+ {
+ run_aclocal ($aclocal, $aclocal_flags);
+ }
+ }
+
+
+ # ------------------ #
+ # Running autoconf. #
+ # ------------------ #
+
+ # Don't try to be smarter than `autoconf', which does its own up to
+ # date checks.
+ #
+ # We prefer running autoconf before autoheader, because (i) the
+ # latter runs the former, and (ii) autoconf is stricter than
+ # autoheader. So all in all, autoconf should give better error
+ # messages.
+ xsystem ($autoconf);
+
+
+ # -------------------- #
+ # Running autoheader. #
+ # -------------------- #
+
+ # We now consider that if AC_CONFIG_HEADERS is used, then autoheader
+ # is used too.
+ #
+ # Just as for autoconf, up to date ness is performed by the tool
+ # itself.
+ #
+ # Run it before automake, since the latter checks the presence of
+ # config.h.in when it sees an AC_CONFIG_HEADERS.
+ if (!$uses_autoheader)
+ {
+ verb "$configure_ac: not using Autoheader";
+ }
+ else
+ {
+ xsystem ($autoheader);
+ }
+
+
+ # ------------------ #
+ # Running automake. #
+ # ------------------ #
+
+ if (!$uses_automake)
+ {
+ verb "$configure_ac: not using Automake";
+ }
+ else
+ {
+ # We should always run automake, and let it decide whether it shall
+ # update the file or not. In fact, the effect of `$force' is already
+ # included in `$automake' via `--no-force'.
+ xsystem ($automake);
+ }
+
+
+ # -------------- #
+ # Running make. #
+ # -------------- #
+
+ if ($run_make)
+ {
+ if (!-f "config.status")
+ {
+ verb "no config.status: cannot re-make";
+ }
+ else
+ {
+ xsystem ("./config.status --recheck");
+ xsystem ("./config.status");
+ if (!-f "Makefile")
+ {
+ verb "no Makefile: cannot re-make";
+ }
+ else
+ {
+ xsystem ("$make");
+ }
+ }
+ }
+}
+
+
+# &autoreconf ($DIRECTORY)
+# ------------------------
+# Reconf the $DIRECTORY.
+sub autoreconf ($)
+{
+ my ($directory) = @_;
+ my $cwd = cwd;
+
+ # The format for this message is not free: taken from Emacs, itself
+ # using GNU Make's format.
+ verb "Entering directory `$directory'";
+ chdir $directory
+ or error "cannot chdir to $directory: $!";
+
+ autoreconf_current_directory;
+
+ # The format is not free: taken from Emacs, itself using GNU Make's
+ # format.
+ verb "Leaving directory `$directory'";
+ chdir $cwd
+ or error "cannot chdir to $cwd: $!";
+}
+
+
+## ------ ##
+## Main. ##
+## ------ ##
+
+# When debugging, it is convenient that all the related temporary
+# files be at the same place.
+mktmpdir ('ar');
+$ENV{'TMPDIR'} = $tmp;
+parse_args;
+
+# Autoreconf all the given configure.ac. Unless `--no-recursive' is passed,
+# AC_CONFIG_SUBDIRS will be traversed in &autoreconf_current_directory.
+$ENV{'AUTOM4TE'} = $autom4te;
+for my $directory (@ARGV)
+ {
+ require_configure_ac ($directory);
+ autoreconf ($directory);
+ }
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/autoscan.in b/bin/autoscan.in
new file mode 100644
index 0000000..a67c48d
--- /dev/null
+++ b/bin/autoscan.in
@@ -0,0 +1,678 @@
+#! @PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+# autoscan - Create configure.scan (a preliminary configure.ac) for a package.
+# Copyright (C) 1994, 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie <djm@gnu.ai.mit.edu>.
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, $pkgdatadir;
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::ChannelDefs;
+use Autom4te::Configure_ac;
+use Autom4te::General;
+use Autom4te::FileUtils;
+use Autom4te::XFile;
+use File::Basename;
+use File::Find;
+use strict;
+
+use vars qw(@cfiles @makefiles @shfiles @subdirs %printed);
+
+# The kind of the words we are looking for.
+my @kinds = qw (function header identifier program
+ makevar librarie);
+
+# For each kind, the default macro.
+my %generic_macro =
+ (
+ 'function' => 'AC_CHECK_FUNCS',
+ 'header' => 'AC_CHECK_HEADERS',
+ 'identifier' => 'AC_CHECK_TYPES',
+ 'program' => 'AC_CHECK_PROGS',
+ 'library' => 'AC_CHECK_LIB'
+ );
+
+my %kind_comment =
+ (
+ 'function' => 'Checks for library functions.',
+ 'header' => 'Checks for header files.',
+ 'identifier' => 'Checks for typedefs, structures, and compiler characteristics.',
+ 'program' => 'Checks for programs.',
+ );
+
+# $USED{KIND}{ITEM} is the list of locations where the ITEM (of KIND) was used
+# in the user package.
+# For instance $USED{function}{alloca} is the list of `file:line' where
+# `alloca (...)' appears.
+my %used = ();
+
+# $MACRO{KIND}{ITEM} is the list of macros to use to test ITEM.
+# Initialized from lib/autoscan/*. E.g., $MACRO{function}{alloca} contains
+# the singleton AC_FUNC_ALLOCA. Some require several checks.
+my %macro = ();
+
+# $NEEDED_MACROS{MACRO} is an array of locations requiring MACRO.
+# E.g., $NEEDED_MACROS{AC_FUNC_ALLOC} the list of `file:line' containing
+# `alloca (...)'.
+my %needed_macros =
+ (
+ 'AC_PREREQ' => [$me],
+ );
+
+my $configure_scan = 'configure.scan';
+my $log;
+
+# Autoconf and lib files.
+my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@';
+my $autoconf = "$autom4te --language=autoconf";
+my @prepend_include;
+my @include = ('@pkgdatadir@');
+
+# $help
+# -----
+$help = "Usage: $0 [OPTION]... [SRCDIR]
+
+Examine source files in the directory tree rooted at SRCDIR, or the
+current directory if none is given. Search the source files for
+common portability problems, check for incompleteness of
+`configure.ac', and create a file `$configure_scan' which is a
+preliminary `configure.ac' for that package.
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don't remove temporary files
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+# $version
+# --------
+$version = "autoscan (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by David J. MacKenzie and Akim Demaille.
+";
+
+
+
+
+## ------------------------ ##
+## Command line interface. ##
+## ------------------------ ##
+
+# parse_args ()
+# -------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ getopt ('I|include=s' => \@include,
+ 'B|prepend-include=s' => \@prepend_include);
+
+ die "$me: too many arguments
+Try `$me --help' for more information.\n"
+ if @ARGV > 1;
+
+ my $srcdir = $ARGV[0] || ".";
+
+ verb "srcdir = $srcdir";
+ chdir $srcdir || error "cannot cd to $srcdir: $!";
+}
+
+
+# init_tables ()
+# --------------
+# Put values in the tables of what to do with each token.
+sub init_tables ()
+{
+ # The data file format supports only one line of macros per function.
+ # If more than that is required for a common portability problem,
+ # a new Autoconf macro should probably be written for that case,
+ # instead of duplicating the code in lots of configure.ac files.
+ my $file = find_file ("autoscan/autoscan.list",
+ reverse (@prepend_include), @include);
+ my $table = new Autom4te::XFile "< " . open_quote ($file);
+ my $tables_are_consistent = 1;
+
+ while ($_ = $table->getline)
+ {
+ # Ignore blank lines and comments.
+ next
+ if /^\s*$/ || /^\s*\#/;
+
+ # '<kind>: <word> <macro invocation>' or...
+ # '<kind>: <word> warn: <message>'.
+ if (/^(\S+):\s+(\S+)\s+(\S.*)$/)
+ {
+ my ($kind, $word, $macro) = ($1, $2, $3);
+ error "$file:$.: invalid kind: $_"
+ unless grep { $_ eq $kind } @kinds;
+ push @{$macro{$kind}{$word}}, $macro;
+ }
+ else
+ {
+ error "$file:$.: invalid definition: $_";
+ }
+ }
+
+ if ($debug)
+ {
+ foreach my $kind (@kinds)
+ {
+ foreach my $word (sort keys %{$macro{$kind}})
+ {
+ print "$kind: $word: @{$macro{$kind}{$word}}\n";
+ }
+ }
+
+ }
+}
+
+
+# used ($KIND, $WORD, [$WHERE])
+# -----------------------------
+# $WORD is used as a $KIND.
+sub used ($$;$)
+{
+ my ($kind, $word, $where) = @_;
+ $where ||= "$File::Find::name:$.";
+ if (
+ # Check for all the libraries. But `-links' is certainly a
+ # `find' argument, and `-le', a `test' argument.
+ ($kind eq 'library' && $word !~ /^(e|inks)$/)
+ # Other than libraries are to be checked only if listed in
+ # the Autoscan library files.
+ || defined $macro{$kind}{$word}
+ )
+ {
+ push (@{$used{$kind}{$word}}, $where);
+ }
+}
+
+
+
+## ----------------------- ##
+## Scanning source files. ##
+## ----------------------- ##
+
+
+# scan_c_file ($FILE-NAME)
+# ------------------------
+sub scan_c_file ($)
+{
+ my ($file_name) = @_;
+ push @cfiles, $File::Find::name;
+
+ # Nonzero if in a multiline comment.
+ my $in_comment = 0;
+
+ my $file = new Autom4te::XFile "< " . open_quote ($file_name);
+
+ while ($_ = $file->getline)
+ {
+ # Strip out comments.
+ if ($in_comment && s,^.*?\*/,,)
+ {
+ $in_comment = 0;
+ }
+ # The whole line is inside a comment.
+ next if $in_comment;
+ # All on one line.
+ s,/\*.*?\*/,,g;
+
+ # Starting on this line.
+ if (s,/\*.*$,,)
+ {
+ $in_comment = 1;
+ }
+
+ # Preprocessor directives.
+ if (s/^\s*\#\s*//)
+ {
+ if (/^include\s*<([^>]*)>/)
+ {
+ used ('header', $1);
+ }
+ if (s/^(if|ifdef|ifndef|elif)\s+//)
+ {
+ foreach my $word (split (/\W+/))
+ {
+ used ('identifier', $word)
+ unless $word eq 'defined' || $word !~ /^[a-zA-Z_]/;
+ }
+ }
+ # Ignore other preprocessor directives.
+ next;
+ }
+
+ # Remove string and character constants.
+ s,\"[^\"]*\",,g;
+ s,\'[^\']*\',,g;
+
+ # Tokens in the code.
+ # Maybe we should ignore function definitions (in column 0)?
+ while (s/\b([a-zA-Z_]\w*)\s*\(/ /)
+ {
+ used ('function', $1);
+ }
+ while (s/\b([a-zA-Z_]\w*)\b/ /)
+ {
+ used ('identifier', $1);
+ }
+ }
+
+ $file->close;
+}
+
+
+# scan_makefile($MAKEFILE-NAME)
+# -----------------------------
+sub scan_makefile ($)
+{
+ my ($file_name) = @_;
+ push @makefiles, $File::Find::name;
+
+ my $file = new Autom4te::XFile "< " . open_quote ($file_name);
+
+ while ($_ = $file->getline)
+ {
+ # Strip out comments.
+ s/#.*//;
+
+ # Variable assignments.
+ while (s/\b([a-zA-Z_]\w*)\s*=/ /)
+ {
+ used ('makevar', $1);
+ }
+ # Be sure to catch a whole word. For instance `lex$U.$(OBJEXT)'
+ # is a single token. Otherwise we might believe `lex' is needed.
+ foreach my $word (split (/\s+/))
+ {
+ # Libraries.
+ if ($word =~ /^-l([a-zA-Z_]\w*)$/)
+ {
+ used ('library', $1);
+ }
+ # Tokens in the code.
+ # We allow some additional characters, e.g., `+', since
+ # autoscan/programs includes `c++'.
+ if ($word =~ /^[a-zA-Z_][\w+]*$/)
+ {
+ used ('program', $word);
+ }
+ }
+ }
+
+ $file->close;
+}
+
+
+# scan_sh_file($SHELL-SCRIPT-NAME)
+# --------------------------------
+sub scan_sh_file ($)
+{
+ my ($file_name) = @_;
+ push @shfiles, $File::Find::name;
+
+ my $file = new Autom4te::XFile "< " . open_quote ($file_name);
+
+ while ($_ = $file->getline)
+ {
+ # Strip out comments and variable references.
+ s/#.*//;
+ s/\${[^\}]*}//g;
+ s/@[^@]*@//g;
+
+ # Tokens in the code.
+ while (s/\b([a-zA-Z_]\w*)\b/ /)
+ {
+ used ('program', $1);
+ }
+ }
+
+ $file->close;
+}
+
+
+# scan_file ()
+# ------------
+# Called by &find on each file. $_ contains the current file name with
+# the current directory of the walk through.
+sub scan_file ()
+{
+ # Wanted only if there is no corresponding FILE.in.
+ return
+ if -f "$_.in";
+
+ # Save $_ as Find::File requires it to be preserved.
+ local $_ = $_;
+
+ # Strip a useless leading `./'.
+ $File::Find::name =~ s,^\./,,;
+
+ if ($_ ne '.' and -d $_ and
+ -f "$_/configure.in" ||
+ -f "$_/configure.ac" ||
+ -f "$_/configure.gnu" ||
+ -f "$_/configure")
+ {
+ $File::Find::prune = 1;
+ push @subdirs, $File::Find::name;
+ }
+ if (/\.[chlym](\.in)?$/)
+ {
+ used 'program', 'cc', $File::Find::name;
+ scan_c_file ($_);
+ }
+ elsif (/\.(cc|cpp|cxx|CC|C|hh|hpp|hxx|HH|H|yy|ypp|ll|lpp)(\.in)?$/)
+ {
+ used 'program', 'c++', $File::Find::name;
+ scan_c_file ($_);
+ }
+ elsif ((/^((?:GNUm|M|m)akefile)(\.in)?$/ && ! -f "$1.am")
+ || /^(?:GNUm|M|m)akefile(\.am)?$/)
+ {
+ scan_makefile ($_);
+ }
+ elsif (/\.sh(\.in)?$/)
+ {
+ scan_sh_file ($_);
+ }
+}
+
+
+# scan_files ()
+# -------------
+# Read through the files and collect lists of tokens in them
+# that might create nonportabilities.
+sub scan_files ()
+{
+ find (\&scan_file, '.');
+
+ if ($verbose)
+ {
+ print "cfiles: @cfiles\n";
+ print "makefiles: @makefiles\n";
+ print "shfiles: @shfiles\n";
+
+ foreach my $kind (@kinds)
+ {
+ print "\n$kind:\n";
+ foreach my $word (sort keys %{$used{$kind}})
+ {
+ print "$word: @{$used{$kind}{$word}}\n";
+ }
+ }
+ }
+}
+
+
+## ----------------------- ##
+## Output configure.scan. ##
+## ----------------------- ##
+
+
+# output_kind ($FILE, $KIND)
+# --------------------------
+sub output_kind ($$)
+{
+ my ($file, $kind) = @_;
+ # Lists of words to be checked with the generic macro.
+ my @have;
+
+ print $file "\n# $kind_comment{$kind}\n"
+ if exists $kind_comment{$kind};
+ foreach my $word (sort keys %{$used{$kind}})
+ {
+ # Output the needed macro invocations in $configure_scan if not
+ # already printed, and remember these macros are needed.
+ foreach my $macro (@{$macro{$kind}{$word}})
+ {
+ if ($macro =~ /^warn:\s+(.*)/)
+ {
+ my $message = $1;
+ foreach my $location (@{$used{$kind}{$word}})
+ {
+ warn "$location: warning: $message\n";
+ }
+ }
+ elsif (exists $generic_macro{$kind}
+ && $macro eq $generic_macro{$kind})
+ {
+ push (@have, $word);
+ push (@{$needed_macros{"$generic_macro{$kind}([$word])"}},
+ @{$used{$kind}{$word}});
+ }
+ else
+ {
+ if (! $printed{$macro})
+ {
+ print $file "$macro\n";
+ $printed{$macro} = 1;
+ }
+ push (@{$needed_macros{$macro}},
+ @{$used{$kind}{$word}});
+ }
+ }
+ }
+ print $file "$generic_macro{$kind}([" . join(' ', sort(@have)) . "])\n"
+ if @have;
+}
+
+
+# output_libraries ($FILE)
+# ------------------------
+sub output_libraries ($)
+{
+ my ($file) = @_;
+
+ print $file "\n# Checks for libraries.\n";
+ foreach my $word (sort keys %{$used{'library'}})
+ {
+ print $file "# FIXME: Replace `main' with a function in `-l$word':\n";
+ print $file "AC_CHECK_LIB([$word], [main])\n";
+ }
+}
+
+
+# output ($CONFIGURE_SCAN)
+# ------------------------
+# Print a proto configure.ac.
+sub output ($)
+{
+ my $configure_scan = shift;
+ my %unique_makefiles;
+
+ my $file = new Autom4te::XFile "> " . open_quote ($configure_scan);
+
+ print $file
+ ("# -*- Autoconf -*-\n" .
+ "# Process this file with autoconf to produce a configure script.\n" .
+ "\n" .
+ "AC_PREREQ([@VERSION@])\n" .
+ "AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])\n");
+ if (defined $cfiles[0])
+ {
+ print $file "AC_CONFIG_SRCDIR([$cfiles[0]])\n";
+ print $file "AC_CONFIG_HEADERS([config.h])\n";
+ }
+
+ output_kind ($file, 'program');
+ output_kind ($file, 'makevar');
+ output_libraries ($file);
+ output_kind ($file, 'header');
+ output_kind ($file, 'identifier');
+ output_kind ($file, 'function');
+
+ print $file "\n";
+ if (@makefiles)
+ {
+ # Change DIR/Makefile.in to DIR/Makefile.
+ foreach my $m (@makefiles)
+ {
+ $m =~ s/\.(?:in|am)$//;
+ $unique_makefiles{$m}++;
+ }
+ print $file ("AC_CONFIG_FILES([",
+ join ("\n ",
+ sort keys %unique_makefiles), "])\n");
+ }
+ if (@subdirs)
+ {
+ print $file ("AC_CONFIG_SUBDIRS([",
+ join ("\n ",
+ sort @subdirs), "])\n");
+ }
+ print $file "AC_OUTPUT\n";
+
+ $file->close;
+}
+
+
+
+## --------------------------------------- ##
+## Checking the accuracy of configure.ac. ##
+## --------------------------------------- ##
+
+
+# &check_configure_ac ($CONFIGURE_AC)
+# -----------------------------------
+# Use autoconf to check if all the suggested macros are included
+# in CONFIGURE_AC.
+sub check_configure_ac ($)
+{
+ my ($configure_ac) = @_;
+
+ # Find what needed macros are invoked in CONFIGURE_AC.
+ # I'd be very happy if someone could explain to me why sort (uniq ...)
+ # doesn't work properly: I need `uniq (sort ...)'. --akim
+ my $trace_option =
+ join (' --trace=', '',
+ uniq (sort (map { s/\(.*//; $_ } keys %needed_macros)));
+
+ verb "running: $autoconf $trace_option $configure_ac";
+ my $traces =
+ new Autom4te::XFile "$autoconf $trace_option $configure_ac |";
+
+ while ($_ = $traces->getline)
+ {
+ chomp;
+ my ($file, $line, $macro, @args) = split (/:/, $_);
+ if ($macro =~ /^AC_CHECK_(HEADER|FUNC|TYPE|MEMBER)S$/)
+ {
+ # To be rigorous, we should distinguish between space and comma
+ # separated macros. But there is no point.
+ foreach my $word (split (/\s|,/, $args[0]))
+ {
+ # AC_CHECK_MEMBERS wants `struct' or `union'.
+ if ($macro eq "AC_CHECK_MEMBERS"
+ && $word =~ /^stat.st_/)
+ {
+ $word = "struct " . $word;
+ }
+ delete $needed_macros{"$macro([$word])"};
+ }
+ }
+ else
+ {
+ delete $needed_macros{$macro};
+ }
+ }
+
+ $traces->close;
+
+ # Report the missing macros.
+ foreach my $macro (sort keys %needed_macros)
+ {
+ warn ("$configure_ac: warning: missing $macro wanted by: "
+ . (${$needed_macros{$macro}}[0])
+ . "\n");
+ print $log "$me: warning: missing $macro wanted by: \n";
+ foreach my $need (@{$needed_macros{$macro}})
+ {
+ print $log "\t$need\n";
+ }
+ }
+}
+
+
+## -------------- ##
+## Main program. ##
+## -------------- ##
+
+parse_args;
+$log = new Autom4te::XFile "> " . open_quote ("$me.log");
+
+$autoconf .= " --debug" if $debug;
+$autoconf .= " --verbose" if $verbose;
+$autoconf .= join (' --include=', '', map { shell_quote ($_) } @include);
+$autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+
+my $configure_ac = find_configure_ac;
+init_tables;
+scan_files;
+output ('configure.scan');
+if (-f $configure_ac)
+ {
+ check_configure_ac ($configure_ac);
+ }
+# This close is really needed. For some reason, probably best named
+# a bug, it seems that the dtor of $LOG is not called automatically
+# at END. It results in a truncated file.
+$log->close;
+exit 0;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/autoupdate.in b/bin/autoupdate.in
new file mode 100644
index 0000000..9737d49
--- /dev/null
+++ b/bin/autoupdate.in
@@ -0,0 +1,1063 @@
+#! @PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+# autoupdate - modernize an Autoconf file.
+# Copyright (C) 1994, 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Originally written by David MacKenzie <djm@gnu.ai.mit.edu>.
+# Rewritten by Akim Demaille <akim@freefriends.org>.
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, $pkgdatadir;
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::ChannelDefs;
+use Autom4te::Channels;
+use Autom4te::Configure_ac;
+use Autom4te::FileUtils;
+use Autom4te::General;
+use Autom4te::XFile;
+use File::Basename;
+use strict;
+
+# Lib files.
+my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@';
+my $autoconf = "$autom4te --language=autoconf";
+# We need to find m4sugar.
+my @prepend_include;
+my @include = ('@pkgdatadir@');
+my $force = 0;
+# m4.
+my $m4 = $ENV{"M4"} || '@M4@';
+
+
+# $HELP
+# -----
+$help = "Usage: $0 [OPTION]... [TEMPLATE-FILE]...
+
+Update each TEMPLATE-FILE if given, or `configure.ac' if present,
+or else `configure.in', to the syntax of the current version of
+Autoconf. The original files are backed up.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -v, --verbose verbosely report processing
+ -d, --debug don't remove temporary files
+ -f, --force consider all files obsolete
+
+Library directories:
+ -B, --prepend-include=DIR prepend directory DIR to search path
+ -I, --include=DIR append directory DIR to search path
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+# $VERSION
+# --------
+$version = "autoupdate (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by David J. MacKenzie and Akim Demaille.
+";
+
+## ---------- ##
+## Routines. ##
+## ---------- ##
+
+
+# parse_args ()
+# -------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ my $srcdir;
+
+ getopt ('I|include=s' => \@include,
+ 'B|prepend-include=s' => \@prepend_include,
+ 'f|force' => \$force);
+
+ if (! @ARGV)
+ {
+ my $configure_ac = require_configure_ac;
+ push @ARGV, $configure_ac;
+ }
+}
+
+
+
+# ----------------- #
+# Autoconf macros. #
+# ----------------- #
+
+my (%ac_macros, %au_macros, %m4_builtins);
+
+# HANDLE_AUTOCONF_MACROS ()
+# -------------------------
+# @M4_BUILTINS -- M4 builtins and a useful comment.
+sub handle_autoconf_macros ()
+{
+ # Get the builtins.
+ xsystem ("echo dumpdef | $m4 2>" . shell_quote ("$tmp/m4.defs") . " >/dev/null");
+ my $m4_defs = new Autom4te::XFile "< " . open_quote ("$tmp/m4.defs");
+ while ($_ = $m4_defs->getline)
+ {
+ $m4_builtins{$1} = 1
+ if /^(\w+):/;
+ }
+ $m4_defs->close;
+
+ my $macros = new Autom4te::XFile ("$autoconf"
+ . " --trace AU_DEFINE:'AU:\$f:\$1'"
+ . " --trace define:'AC:\$f:\$1'"
+ . " --melt /dev/null |");
+ while ($_ = $macros->getline)
+ {
+ chomp;
+ my ($domain, $file, $macro) = /^(AC|AU):(.*):([^:]*)$/ or next;
+ if ($domain eq "AU")
+ {
+ $au_macros{$macro} = 1;
+ }
+ elsif ($file =~ /(^|\/)m4sugar\/(m4sugar|version)\.m4$/)
+ {
+ # Add the m4sugar macros to m4_builtins.
+ $m4_builtins{$macro} = 1;
+ }
+ else
+ {
+ # Autoconf, aclocal, and m4sh macros.
+ $ac_macros{$macro} = 1;
+ }
+ }
+ $macros->close;
+
+
+ # Don't keep AU macros in @AC_MACROS.
+ delete $ac_macros{$_}
+ foreach (keys %au_macros);
+ # Don't keep M4sugar macros which are redefined by Autoconf,
+ # such as `builtin', `changequote' etc. See autoconf/autoconf.m4.
+ delete $ac_macros{$_}
+ foreach (keys %m4_builtins);
+ error "no current Autoconf macros found"
+ unless keys %ac_macros;
+ error "no obsolete Autoconf macros found"
+ unless keys %au_macros;
+
+ if ($debug)
+ {
+ print STDERR "Current Autoconf macros:\n";
+ print STDERR join (' ', sort keys %ac_macros) . "\n\n";
+ print STDERR "Obsolete Autoconf macros:\n";
+ print STDERR join (' ', sort keys %au_macros) . "\n\n";
+ }
+
+ # ac.m4 -- autoquoting definitions of the AC macros (M4sugar excluded).
+ # unac.m4 -- undefine the AC macros.
+ my $ac_m4 = new Autom4te::XFile "> " . open_quote ("$tmp/ac.m4");
+ print $ac_m4 "# ac.m4 -- autoquoting definitions of the AC macros.\n";
+ my $unac_m4 = new Autom4te::XFile "> " . open_quote ("$tmp/unac.m4");
+ print $unac_m4 "# unac.m4 -- undefine the AC macros.\n";
+ foreach (sort keys %ac_macros)
+ {
+ print $ac_m4 "_au_m4_define([$_], [m4_if(\$#, 0, [[\$0]], [[\$0(\$\@)]])])\n";
+ print $unac_m4 "_au_m4_undefine([$_])\n";
+ }
+
+ # m4save.m4 -- save the m4 builtins.
+ # unm4.m4 -- disable the m4 builtins.
+ # m4.m4 -- enable the m4 builtins.
+ my $m4save_m4 = new Autom4te::XFile "> " . open_quote ("$tmp/m4save.m4");
+ print $m4save_m4 "# m4save.m4 -- save the m4 builtins.\n";
+ my $unm4_m4 = new Autom4te::XFile "> " . open_quote ("$tmp/unm4.m4");
+ print $unm4_m4 "# unm4.m4 -- disable the m4 builtins.\n";
+ my $m4_m4 = new Autom4te::XFile "> " . open_quote ("$tmp/m4.m4");
+ print $m4_m4 "# m4.m4 -- enable the m4 builtins.\n";
+ foreach (sort keys %m4_builtins)
+ {
+ print $m4save_m4 "_au__save([$_])\n";
+ print $unm4_m4 "_au__undefine([$_])\n";
+ print $m4_m4 "_au__restore([$_])\n";
+ }
+}
+
+
+## -------------- ##
+## Main program. ##
+## -------------- ##
+
+parse_args;
+$autoconf .= " --debug" if $debug;
+$autoconf .= " --force" if $force;
+$autoconf .= " --verbose" if $verbose;
+$autoconf .= join (' --include=', '', map { shell_quote ($_) } @include);
+$autoconf .= join (' --prepend-include=', '', map { shell_quote ($_) } @prepend_include);
+
+mktmpdir ('au');
+handle_autoconf_macros;
+
+# $au_changequote -- enable the quote `[', `]' right before any AU macro.
+my $au_changequote =
+ 's/\b(' . join ('|', keys %au_macros) . ')\b/_au_m4_changequote([,])$1/g';
+
+# au.m4 -- definitions the AU macros.
+xsystem ("$autoconf --trace AU_DEFINE:'_au_defun(\@<:\@\$1\@:>\@,
+\@<:\@\$2\@:>\@)' --melt /dev/null "
+ . ">" . shell_quote ("$tmp/au.m4"));
+
+
+
+## ------------------- ##
+## Process the files. ##
+## ------------------- ##
+
+foreach my $file (@ARGV)
+ {
+ # We need an actual file.
+ if ($file eq '-')
+ {
+ $file = "$tmp/stdin";
+ system "cat >" . shell_quote ($file);
+ }
+ elsif (! -r "$file")
+ {
+ die "$me: $file: No such file or directory";
+ }
+
+ # input.m4 -- m4 program to produce the updated file.
+ # Load the values, the dispatcher, neutralize m4, and the prepared
+ # input file.
+ my $input_m4 = <<\EOF;
+ divert(-1) -*- Autoconf -*-
+ changequote([,])
+
+ # Define our special macros:
+ define([_au__defn], defn([defn]))
+ define([_au__divert], defn([divert]))
+ define([_au__ifdef], defn([ifdef]))
+ define([_au__include], defn([include]))
+ define([_au___undefine], defn([undefine]))
+ define([_au__undefine], [_au__ifdef([$1], [_au___undefine([$1])])])
+ define([_au__save], [m4_ifdef([$1],
+ [m4_define([_au_$1], _m4_defn([$1]))])])
+ define([_au__restore],
+ [_au_m4_ifdef([_au_$1],
+ [_au_m4_define([$1], _au__defn([_au_$1]))])])
+
+ # Set up m4sugar.
+ include(m4sugar/m4sugar.m4)
+
+ # Redefine __file__ to make warnings nicer; $file is replaced below.
+ m4_define([__file__], [$file])
+
+ # Redefine m4_location to fix the line number.
+ m4_define([m4_location], [__file__:m4_eval(__line__ - _au__first_line)])
+
+ # Move all the builtins into the `_au_' pseudo namespace
+ m4_include([m4save.m4])
+
+ # _au_defun(NAME, BODY)
+ # ---------------------
+ # Define NAME to BODY, plus AU activation/deactivation.
+ _au_m4_define([_au_defun],
+ [_au_m4_define([$1],
+ [_au_enable()dnl
+ $2[]dnl
+ _au_disable()])])
+
+ # Import the definition of the obsolete macros.
+ _au__include([au.m4])
+
+
+ ## ------------------------ ##
+ ## _au_enable/_au_disable. ##
+ ## ------------------------ ##
+
+ # They work by pair: each time an AU macro is activated, it runs
+ # _au_enable, and at its end its runs _au_disable (see _au_defun
+ # above). AU macros might use AU macros, which should
+ # enable/disable only for the outer AU macros.
+ #
+ # `_au_enabled' is used to this end, determining whether we really
+ # enable/disable.
+
+
+ # __au_enable
+ # -----------
+ # Reenable the builtins, m4sugar, and the autoquoting AC macros.
+ _au_m4_define([__au_enable],
+ [_au__divert(-1)
+ # Enable special characters.
+ _au_m4_changecom([#])
+
+ _au__include([m4.m4])
+ _au__include([ac.m4])
+
+ _au__divert(0)])
+
+ # _au_enable
+ # ----------
+ # Called at the beginning of all the obsolete macros. If this is the
+ # outermost level, call __au_enable.
+ _au_m4_define([_au_enable],
+ [_au_m4_ifdef([_au_enabled],
+ [],
+ [__au_enable()])_au_dnl
+ _au_m4_pushdef([_au_enabled])])
+
+
+ # __au_disable
+ # ------------
+ # Disable the AC autoquoting macros, m4sugar, and m4.
+ _au_m4_define([__au_disable],
+ [_au__divert(-1)
+ _au__include([unac.m4])
+ _au__include([unm4.m4])
+
+ # Disable special characters.
+ _au_m4_changequote()
+ _au_m4_changecom()
+
+ _au__divert(0)])
+
+ # _au_disable
+ # -----------
+ # Called at the end of all the obsolete macros. If we are at the
+ # outermost level, call __au_disable.
+ _au_m4_define([_au_disable],
+ [_au_m4_popdef([_au_enabled])_au_dnl
+ _au_m4_ifdef([_au_enabled],
+ [],
+ [__au_disable()])])
+
+
+ ## ------------------------------- ##
+ ## Disable, and process the file. ##
+ ## ------------------------------- ##
+ # The AC autoquoting macros are not loaded yet, hence invoking
+ # `_au_disable' would be wrong.
+ _au__include([unm4.m4])
+
+ # Disable special characters, and set the first line number.
+ _au_m4_changequote()
+ _au_m4_changecom()
+
+ _au_m4_define(_au__first_line, _au___line__)_au__divert(0)_au_dnl
+EOF
+
+ $input_m4 =~ s/^ //mg;
+ $input_m4 =~ s/\$file/$file/g;
+
+ # prepared input -- input, but reenables the quote before each AU macro.
+ open INPUT_M4, "> " . open_quote ("$tmp/input.m4")
+ or error "cannot open: $!";
+ open FILE, "< " . open_quote ($file)
+ or error "cannot open: $!";
+ print INPUT_M4 "$input_m4";
+ while (<FILE>)
+ {
+ eval $au_changequote;
+ print INPUT_M4;
+ }
+ close FILE
+ or error "cannot close $file: $!";
+ close INPUT_M4
+ or error "cannot close $tmp/input.m4: $!";
+
+ # Now ask m4 to perform the update.
+ xsystem ("$m4 --include=" . shell_quote ($tmp)
+ . join (' --include=', '', map { shell_quote ($_) } reverse (@prepend_include))
+ . join (' --include=', '', map { shell_quote ($_) } @include)
+ . " " . shell_quote ("$tmp/input.m4") . " > " . shell_quote ("$tmp/updated"));
+ update_file ("$tmp/updated",
+ "$file" eq "$tmp/stdin" ? '-' : "$file");
+ }
+exit 0;
+
+
+# ## ---------------------------- ##
+# ## How `autoupdate' functions. ##
+# ## ---------------------------- ##
+#
+# The task of `autoupdate' is not trivial: the biggest difficulty being
+# that you must limit the changes to the parts that really need to be
+# updated. Finding a satisfying implementation proved to be quite hard,
+# as this is the fifth implementation of `autoupdate'.
+#
+# Below, we will use a simple example of an obsolete macro:
+#
+# AU_DEFUN([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))])
+# AC_DEFUN([NEW], [echo "sum($1) = $2"])
+#
+# the input file contains
+#
+# dnl The Unbelievable Truth
+# OLD(1, 2)
+# NEW([0, 0], [0])
+#
+# Of course the expected output is
+#
+# dnl The Unbelievable Truth
+# NEW([1, 2], [3])
+# NEW([0, 0], [0])
+#
+#
+# # First implementation: sed
+# # =========================
+#
+# The first implementation was only able to change the name of obsolete
+# macros.
+#
+# The file `acoldnames.m4' defined the old names based on the new names.
+# It was simple then to produce a sed script such as:
+#
+# s/OLD/NEW/g
+#
+# Updating merely consisted in running this script on the file to
+# update.
+#
+# This scheme suffers from an obvious limitation: that `autoupdate' was
+# unable to cope with new macros that just swap some of its arguments
+# compared to the old macro. Fortunately, that was enough to upgrade
+# from Autoconf 1 to Autoconf 2. (But I have no idea whether the
+# changes in Autoconf 2 were precisely limited by this constraint.)
+#
+#
+# # Second implementation: hooks
+# # ============================
+#
+# The version 2.15 of Autoconf brought a vast number of changes compared
+# to 2.13, so a solution was needed. One could think of extending the
+# `sed' scripts with specialized code for complex macros. However, this
+# approach is of course full of flaws:
+#
+# a. the Autoconf maintainers have to write these snippets, which we
+# just don't want to,
+#
+# b. I really don't think you'll ever manage to handle the quoting of
+# m4 with a sed script.
+#
+# To satisfy a., let's remark that the code which implements the old
+# features in term of the new feature is exactly the code which should
+# replace the old code.
+#
+# To answer point b, as usual in the history of Autoconf, the answer, at
+# least on the paper, is simple: m4 is the best tool to parse m4, so
+# let's use m4.
+#
+# Therefore the specification is:
+#
+# I want to be able to tell Autoconf, well, m4, that the macro I
+# am currently defining is an obsolete macro (so that the user is
+# warned), and its code is the code to use when running autoconf,
+# but that the very same code has to be used when running
+# autoupdate. To summarize, the interface I want is
+# `AU_DEFUN(OLD-NAME, NEW-CODE)'.
+#
+#
+# Now for the technical details.
+#
+# When running autoconf, except for the warning, AU_DEFUN is basically
+# AC_DEFUN.
+#
+# When running autoupdate, we want *only* OLD-NAMEs to be expanded.
+# This obviously means that acgeneral.m4 and acspecific.m4 must not be
+# loaded. Nonetheless, because we want to use a rich set of m4
+# features, m4sugar.m4 is needed. Please note that the fact that
+# Autoconf's macros are not loaded is positive on two points:
+#
+# - we do get an updated `configure.ac', not a `configure'!
+#
+# - the old macros are replaced by *calls* to the new-macros, not the
+# body of the new macros, since their body is not defined!!!
+# (Whoa, that's really beautiful!).
+#
+# Additionally we need to disable the quotes when reading the input for
+# two reasons: first because otherwise `m4' will swallow the quotes of
+# other macros:
+#
+# NEW([1, 2], 3)
+# => NEW(1, 2, 3)
+#
+# and second, because we want to update the macro calls which are
+# quoted, i.e., we want
+#
+# FOO([OLD(1, 2)])
+# => FOO([NEW([1, 2], [3])])
+#
+# If we don't disable the quotes, only the macros called at the top
+# level would be updated.
+#
+# So, let's disable the quotes.
+#
+# Well, not quite: m4sugar.m4 still needs to use quotes for some macros.
+# Well, in this case, when running in autoupdate code, each macro first
+# reestablishes the quotes, expands itself, and disables the quotes.
+#
+# Thinking a bit more, you realize that in fact, people may use `define',
+# `ifelse' etc. in their files, and you certainly don't want to process
+# them. Another example is `dnl': you don't want to remove the
+# comments. You then realize you don't want exactly to import m4sugar:
+# you want to specify when it is enabled (macros active), and disabled.
+# m4sugar provides m4_disable/m4_enable to this end.
+#
+# You're getting close to it. Now remains one task: how to handle
+# twofold definitions?
+#
+# Remember that the same AU_DEFUN must be understood in two different
+# ways, the AC way, and the AU way.
+#
+# One first solution is to check whether acgeneral.m4 was loaded. But
+# that's definitely not cute. Another is simply to install `hooks',
+# that is to say, to keep in some place m4 knows, late `define' to be
+# triggered *only* in AU mode.
+#
+# You first think of designing AU_DEFUN like this:
+#
+# 1. AC_DEFUN(OLD-NAME,
+# [Warn the user OLD-NAME is obsolete.
+# NEW-CODE])
+#
+# 2. Store for late AU binding([define(OLD_NAME,
+# [Reestablish the quotes.
+# NEW-CODE
+# Disable the quotes.])])
+#
+# but this will not work: NEW-CODE probably uses $1, $2 etc. and these
+# guys will be replaced with the argument of `Store for late AU binding'
+# when you call it.
+#
+# I don't think there is a means to avoid this using this technology
+# (remember that $1 etc. are *always* expanded in m4). You may also try
+# to replace them with $[1] to preserve them for a later evaluation, but
+# if `Store for late AU binding' is properly written, it will remain
+# quoted till the end...
+#
+# You have to change technology. Since the problem is that `$1'
+# etc. should be `consumed' right away, one solution is to define now a
+# second macro, `AU_OLD-NAME', and to install a hook than binds OLD-NAME
+# to AU_OLD-NAME. Then, autoupdate.m4 just need to run the hooks. By
+# the way, the same method was used in autoheader.
+#
+#
+# # Third implementation: m4 namespaces by m4sugar
+# # ==============================================
+#
+# Actually, this implementation was just a clean up of the previous
+# implementation: instead of defining hooks by hand, m4sugar was equipped
+# with `namespaces'. What are they?
+#
+# Sometimes we want to disable some *set* of macros, and restore them
+# later. We provide support for this via namespaces.
+#
+# There are basically three characters playing this scene: defining a
+# macro in a namespace, disabling a namespace, and restoring a namespace
+# (i.e., all the definitions it holds).
+#
+# Technically, to define a MACRO in NAMESPACE means to define the macro
+# named `NAMESPACE::MACRO' to the VALUE. At the same time, we append
+# `undefine(NAME)' in the macro named `m4_disable(NAMESPACE)', and
+# similarly a binding of NAME to the value of `NAMESPACE::MACRO' in
+# `m4_enable(NAMESPACE)'. These mechanisms allow to bind the macro of
+# NAMESPACE and to unbind them at will.
+#
+# Of course this implementation is really inefficient: m4 has to grow
+# strings which can become quickly huge, which slows it significantly.
+#
+# In particular one should avoid as much as possible to use `define' for
+# temporaries. Now that `define' has quite a complex meaning, it is an
+# expensive operations that should be limited to macros. Use
+# `m4_define' for temporaries.
+#
+# Private copies of the macros we used in entering / exiting the m4sugar
+# namespace. It is much more convenient than fighting with the renamed
+# version of define etc.
+#
+#
+#
+# Those two implementations suffered from serious problems:
+#
+# - namespaces were really expensive, and incurred a major performance
+# loss on `autoconf' itself, not only `autoupdate'. One solution
+# would have been the limit the use of namespaces to `autoupdate', but
+# that's again some complications on m4sugar, which really doesn't need
+# this. So we wanted to get rid of the namespaces.
+#
+# - since the quotes were disabled, autoupdate was sometimes making
+# wrong guesses, for instance on:
+#
+# foo([1, 2])
+#
+# m4 saw 2 arguments: `[1'and `2]'. A simple solution, somewhat
+# fragile, is to reestablish the quotes right before all the obsolete
+# macros, i.e., to use sed so that the previous text becomes
+#
+# changequote([, ])foo([1, 2])
+#
+# To this end, one wants to trace the definition of obsolete macros.
+#
+# It was there that the limitations of the namespace approach became
+# painful: because it was a complex machinery playing a lot with the
+# builtins of m4 (hence, quite fragile), tracing was almost impossible.
+#
+#
+# So this approach was dropped.
+#
+#
+# # The fourth implementation: two steps
+# # ====================================
+#
+# If you drop the uses of namespaces, you no longer can compute the
+# updated value, and replace the old call with it simultaneously.
+#
+# Obviously you will use m4 to compute the updated values, but you may
+# use some other tool to achieve the replacement. Personally, I trust
+# nobody but m4 to parse m4, so below, m4 will perform the two tasks.
+#
+# How can m4 be used to replace *some* macros calls with newer values.
+# Well, that's dead simple: m4 should learn the definitions of obsolete
+# macros, forget its builtins, disable the quotes, and then run on the
+# input file, which amounts to doing this:
+#
+# divert(-1)dnl
+# changequote([, ])
+# define([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))changequote()])
+# undefine([dnl])
+# undefine([m4_eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# NEW([0, 0],
+# 0)
+#
+# which will result in
+#
+# dnl The Unbelievable Truth
+# NEW(1, 2, m4_eval(1 + 2))
+# NEW([0, 0],
+# 0)
+#
+# Grpmh. Two problems. A minor problem: it would have been much better
+# to have the `m4_eval' computed, and a major problem: you lost the
+# quotation in the result.
+#
+# Let's address the big problem first. One solution is to define any
+# modern macro to rewrite its calls with the proper quotation, thanks to
+# `$@'. Again, tracing the `define's makes it possible to know which
+# are these macros, so you input is:
+#
+# divert(-1)dnl
+# changequote([, ])
+# define([OLD], [NEW([$1, $2], m4_eval([$1 + $2]))changequote()])
+# define([NEW], [[NEW($@)]changequote()])
+# undefine([dnl])
+# undefine([m4_eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# changequote([, ])NEW([0, 0],
+# 0)
+#
+# which results in
+#
+# dnl The Unbelievable Truth
+# NEW([1, 2],[m4_eval(1 + 2)])
+# NEW([0, 0],[0])
+#
+# Our problem is solved, i.e., the first call to `NEW' is properly
+# quoted, but introduced another problem: we changed the layout of the
+# second calls, which can be a drama in the case of huge macro calls
+# (think of `AC_TRY_RUN' for instance). This example didn't show it,
+# but we also introduced parens to macros which did not have some:
+#
+# AC_INIT
+# => AC_INIT()
+#
+# No big deal for the semantics (unless the macro depends upon $#, which
+# is bad), but the users would not be happy.
+#
+# Additionally, we introduced quotes that were not there before, which is
+# OK in most cases, but could change the semantics of the file.
+#
+# Cruel dilemma: we do want the auto-quoting definition of `NEW' when
+# evaluating `OLD', but we don't when we evaluate the second `NEW'.
+# Back to namespaces?
+#
+# No.
+#
+#
+# # Second step: replacement
+# # ------------------------
+#
+# No, as announced above, we will work in two steps: in a first step we
+# compute the updated values, and in a second step we replace them. Our
+# goal is something like this:
+#
+# divert(-1)dnl
+# changequote([, ])
+# define([OLD], [NEW([1, 2], [3])changequote()])
+# undefine([dnl])
+# undefine([m4_eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# NEW([0, 0],
+# 0)
+#
+# i.e., the new value of `OLD' is precomputed using the auto-quoting
+# definition of `NEW' and the m4 builtins. We'll see how afterwards,
+# let's finish with the replacement.
+#
+# Of course the solution above is wrong: if there were other calls to
+# `OLD' with different values, we would smash them to the same value.
+# But it is quite easy to generalize the scheme above:
+#
+# divert(-1)dnl
+# changequote([, ])
+# define([OLD([1],[2])], [NEW([1, 2], [3])])
+# define([OLD], [defn([OLD($@)])changequote()])
+# undefine([dnl])
+# undefine([m4_eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# NEW([0, 0],
+# 0)
+#
+# i.e., for each call to obsolete macros, we build an array `call =>
+# value', and use a macro to dispatch these values. This results in:
+#
+# dnl The Unbelievable Truth
+# NEW([1, 2], [3])
+# NEW([0, 0],
+# 0)
+#
+# In French, we say `Youpi !', which you might roughly translate as
+# `Yippee!'.
+#
+#
+# # First step: computation
+# # -----------------------
+#
+# Let's study the anatomy of the file, and name its sections:
+#
+# prologue
+# divert(-1)dnl
+# changequote([, ])
+# values
+# define([OLD([1],[2])], [NEW([1, 2], [3])])
+# dispatcher
+# define([OLD], [defn([OLD($@)])changequote()])
+# disabler
+# undefine([dnl])
+# undefine([m4_eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# input
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# NEW([0, 0],
+# 0)
+#
+#
+# # Computing the `values' section
+# # ..............................
+#
+# First we need to get the list of all the AU macro uses. To this end,
+# first get the list of all the AU macros names by tracing `AU_DEFUN' in
+# the initialization of autoconf. This list is computed in the file
+# `au.txt' below.
+#
+# Then use this list to trace all the AU macro uses in the input. The
+# goal is obtain in the case of our example:
+#
+# [define([OLD([1],[2])],]@<<@OLD([1],[2])@>>@[)]
+#
+# This is the file `values.in' below.
+#
+# We want to evaluate this with only the builtins (in fact m4sugar), the
+# auto-quoting definitions of the new macros (`new.m4'), and the
+# definition of the old macros (`old.m4'). Computing these last two
+# files is easy: it's just a matter of using the right `--trace' option.
+#
+# So the content of `values.in' is:
+#
+# include($autoconf_dir/m4sugar.m4)
+# m4_include(new.m4)
+# m4_include(old.m4)
+# divert(0)dnl
+# [define([OLD([1],[2])],]@<<@OLD([1],[2])@>>@[)]
+#
+# We run m4 on it, which yields:
+#
+# define([OLD([1],[2])],@<<@NEW([1, 2], [3])@>>@)
+#
+# Transform `@<<@' and `@>>@' into quotes and we get
+#
+# define([OLD([1],[2])],[NEW([1, 2], [3])])
+#
+# This is `values.m4'.
+#
+#
+# # Computing the `dispatcher' section
+# # ..................................
+#
+# The `prologue', and the `disabler' are simple and need no commenting.
+#
+# To compute the `dispatcher' (`dispatch.m4'), again, it is a simple
+# matter of using the right `--trace'.
+#
+# Finally, the input is not exactly the input file, rather it is the
+# input file with the added `changequote'. To this end, we build
+# `quote.sed'.
+#
+#
+# # Putting it all together
+# # .......................
+#
+# We build the file `input.m4' which contains:
+#
+# divert(-1)dnl
+# changequote([, ])
+# include(values.m4)
+# include(dispatch.m4)
+# undefine([dnl])
+# undefine([eval])
+# # Some more undefines...
+# changequote()
+# divert(0)dnl
+# dnl The Unbelievable Truth
+# changequote([, ])OLD(1, 2)
+# NEW([0, 0],
+# 0)
+#
+# And we just run m4 on it. Et voila`, Monsieur ! Mais oui, mais oui.
+#
+# Well, there are a few additional technicalities. For instance, we
+# rely on `changequote', `ifelse' and `defn', but we don't want to
+# interpret the changequotes of the user, so we simply use another name:
+# `_au_changequote' etc.
+#
+#
+# # Failure of the fourth approach
+# # ------------------------------
+#
+# This approach is heavily based on traces, but then there is an obvious
+# problem: non expanded code will never be seen. In particular, the body
+# of a `define' definition is not seen, so on the input
+#
+# define([idem], [OLD(0, [$1])])
+#
+# autoupdate would never see the `OLD', and wouldn't have updated it.
+# Worse yet, if `idem(0)' was used later, then autoupdate sees that
+# `OLD' is used, computes the result for `OLD(0, 0)' and sets up a
+# dispatcher for `OLD'. Since there was no computed value for `OLD(0,
+# [$1])', the dispatcher would have replaced with... nothing, leading
+# to
+#
+# define([idem], [])
+#
+# With some more thinking, you see that the two step approach is wrong,
+# the namespace approach was much saner.
+#
+# But you learned a lot, in particular you realized that using traces
+# can make it possible to simulate namespaces!
+#
+#
+#
+# # The fifth implementation: m4 namespaces by files
+# # ================================================
+#
+# The fourth implementation demonstrated something unsurprising: you
+# cannot precompute, i.e., the namespace approach was the right one.
+# Still, we no longer want them, they're too expensive. Let's have a
+# look at the way it worked.
+#
+# When updating
+#
+# dnl The Unbelievable Truth
+# OLD(1, 2)
+# NEW([0, 0], [0])
+#
+# you evaluate `input.m4':
+#
+# divert(-1)
+# changequote([, ])
+# define([OLD],
+# [m4_enable()NEW([$1, $2], m4_eval([$1 + $2]))m4_disable()])
+# ...
+# m4_disable()
+# dnl The Unbelievable Truth
+# OLD(1, 2)
+# NEW([0, 0], [0])
+#
+# where `m4_disable' undefines the m4 and m4sugar, and disables the quotes
+# and comments:
+#
+# define([m4_disable],
+# [undefine([__file__])
+# ...
+# changecom(#)
+# changequote()])
+#
+# `m4_enable' does the converse: reestablish quotes and comments
+# --easy--, reestablish m4sugar --easy: just load `m4sugar.m4' again-- and
+# reenable the builtins. This later task requires that you first save
+# the builtins. And BTW, the definition above of `m4_disable' cannot
+# work: you undefined `changequote' before using it! So you need to use
+# your privates copies of the builtins. Let's introduce three files for
+# this:
+#
+# `m4save.m4'
+# moves the m4 builtins into the `_au_' pseudo namespace,
+# `unm4.m4'
+# undefines the builtins,
+# `m4.m4'
+# restores them.
+#
+# So `input.m4' is:
+#
+# divert(-1)
+# changequote([, ])
+#
+# include([m4save.m4])
+#
+# # Import AU.
+# define([OLD],
+# [m4_enable()NEW([$1, $2], m4_eval([$1 + $2]))m4_disable()])
+#
+# define([_au_enable],
+# [_au_changecom([#])
+# _au_include([m4.m4])
+# _au_include(m4sugar.m4)])
+#
+# define([_au_disable],
+# [# Disable m4sugar.
+# # Disable the m4 builtins.
+# _au_include([unm4.m4])
+# # 1. Disable special characters.
+# _au_changequote()
+# _au_changecom()])
+#
+# m4_disable()
+# dnl The Unbelievable Truth
+# OLD(1, 2)
+# NEW([0, 0], [0])
+#
+# Based on what we learned in the fourth implementation we know that we
+# have to enable the quotes *before* any AU macro, and we know we need
+# to build autoquoting versions of the AC macros. But the autoquoting
+# AC definitions must be disabled in the rest of the file, and enabled
+# inside AU macros.
+#
+# Using `autoconf --trace' it is easy to build the files
+#
+# `ac.m4'
+# define the autoquoting AC fake macros
+# `disable.m4'
+# undefine the m4sugar and AC autoquoting macros.
+# `au.m4'
+# definitions of the AU macros (such as `OLD' above).
+#
+# Now, `input.m4' is:
+#
+# divert(-1)
+# changequote([, ])
+#
+# include([m4save.m4])
+# # Import AU.
+# include([au.m4])
+#
+# define([_au_enable],
+# [_au_changecom([#])
+# _au_include([m4.m4])
+# _au_include(m4sugar.m4)
+# _au_include(ac.m4)])
+#
+# define([_au_disable],
+# [_au_include([disable.m4])
+# _au_include([unm4.m4])
+# # 1. Disable special characters.
+# _au_changequote()
+# _au_changecom()])
+#
+# m4_disable()
+# dnl The Unbelievable Truth
+# _au_changequote([, ])OLD(1, 2)
+# NEW([0, 0], [0])
+#
+# Finally, version V is ready.
+#
+# Well... almost.
+#
+# There is a slight problem that remains: if an AU macro OUTER includes
+# an AU macro INNER, then _au_enable will be run when entering OUTER
+# and when entering INNER (not good, but not too bad yet). But when
+# getting out of INNER, _au_disable will disable everything while we
+# were still in OUTER. Badaboom.
+#
+# Therefore _au_enable and _au_disable have to be written to work by
+# pairs: each _au_enable pushdef's _au_enabled, and each _au_disable
+# popdef's _au_enabled. And of course _au_enable and _au_disable are
+# effective when _au_enabled is *not* defined.
+#
+# Finally, version V' is ready. And there is much rejoicing. (And I
+# have free time again. I think. Yeah, right.)
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/bin/ifnames.in b/bin/ifnames.in
new file mode 100644
index 0000000..ba2cd05
--- /dev/null
+++ b/bin/ifnames.in
@@ -0,0 +1,153 @@
+#! @PERL@ -w
+# -*- perl -*-
+# @configure_input@
+
+eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac'
+ if 0;
+
+# ifnames - print the identifiers used in C preprocessor conditionals
+
+# Copyright (C) 1994-1995, 1999-2003, 2005-2012 Free Software
+# Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Reads from stdin if no files are given.
+# Writes to stdout.
+
+# Written by David MacKenzie <djm@gnu.ai.mit.edu>
+# and Paul Eggert <eggert@twinsun.com>.
+
+BEGIN
+{
+ my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@';
+ unshift @INC, $pkgdatadir;
+
+ # Override SHELL. On DJGPP SHELL may not be set to a shell
+ # that can handle redirection and quote arguments correctly,
+ # e.g.: COMMAND.COM. For DJGPP always use the shell that configure
+ # has detected.
+ $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos');
+}
+
+use Autom4te::General;
+use Autom4te::XFile;
+use Autom4te::FileUtils;
+
+# $HELP
+# -----
+$help = "Usage: $0 [OPTION]... [FILE]...
+
+Scan all of the C source FILES (or the standard input, if none are
+given) and write to the standard output a sorted list of all the
+identifiers that appear in those files in `#if', `#elif', `#ifdef', or
+`#ifndef' directives. Print each identifier on a line, followed by a
+space-separated list of the files in which that identifier occurs.
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+
+Report bugs to <bug-autoconf\@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+";
+
+
+# $VERSION
+# --------
+$version = "ifnames (@PACKAGE_NAME@) @VERSION@
+Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by David J. MacKenzie and Paul Eggert.
+";
+
+
+# &parse_args ()
+# --------------
+# Process any command line arguments.
+sub parse_args ()
+{
+ getopt ();
+}
+
+
+# %OCCURRENCE
+# -----------
+my %occurrence;
+
+
+# &scan_file ($FILE-NAME)
+# -----------------------
+sub scan_file ($)
+{
+ my ($file_name) = @_;
+ my $file = new Autom4te::XFile ("< " . open_quote ($file_name));
+ while ($_ = $file->getline)
+ {
+ # Continuation lines.
+ $_ .= $file->getline
+ while (s/\\$//);
+
+ # Preprocessor directives.
+ if (s/^\s*\#\s*(if|ifdef|ifndef|elif)\s+//)
+ {
+ # Remove comments. Not perfect, but close enough.
+ s(/\*.*?\*/)();
+ s(/\*.*)();
+ s(//.*)();
+ foreach my $word (split (/\W+/))
+ {
+ next
+ if $word eq 'defined' || $word !~ /^[a-zA-Z_]/;
+ $occurrence{$word}{$file_name} = 1;
+ }
+ }
+ }
+}
+
+
+## ------ ##
+## Main. ##
+## ------ ##
+
+parse_args();
+foreach (@ARGV)
+ {
+ scan_file ($_);
+ }
+foreach (sort keys %occurrence)
+ {
+ print "$_ ", join (' ', sort keys %{$occurrence{$_}}), "\n";
+ }
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/build-aux/announce-gen b/build-aux/announce-gen
new file mode 100755
index 0000000..8c6ed36
--- /dev/null
+++ b/build-aux/announce-gen
@@ -0,0 +1,542 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+ & eval 'exec perl -wS "$0" $argv:q'
+ if 0;
+# Generate a release announcement message.
+
+my $VERSION = '2012-04-19 14:36'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+
+use Getopt::Long;
+use Digest::MD5;
+eval { require Digest::SHA; }
+ or eval 'use Digest::SHA1';
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
+my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz');
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ my @types = sort keys %valid_release_types;
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS]
+Generate an announcement message.
+
+OPTIONS:
+
+These options must be specified:
+
+ --release-type=TYPE TYPE must be one of @types
+ --package-name=PACKAGE_NAME
+ --previous-version=VER
+ --current-version=VER
+ --gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs
+ --url-directory=URL_DIR
+
+The following are optional:
+
+ --news=NEWS_FILE
+ --bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g.,
+ autoconf,automake,bison,gnulib
+ --gnulib-version=VERSION report VERSION as the gnulib version, where
+ VERSION is the result of running git describe
+ in the gnulib source directory.
+ required if gnulib is in TOOL_LIST.
+ --no-print-checksums do not emit MD5 or SHA1 checksums
+ --archive-suffix=SUF add SUF to the list of archive suffixes
+ --mail-headers=HEADERS a space-separated list of mail headers, e.g.,
+ To: x\@example.com Cc: y-announce\@example.com,...
+
+ --help display this help and exit
+ --version output version information and exit
+
+EOF
+ }
+ exit $exit_code;
+}
+
+
+=item C<%size> = C<sizes (@file)>
+
+Compute the sizes of the C<@file> and return them as a hash. Return
+C<undef> if one of the computation failed.
+
+=cut
+
+sub sizes (@)
+{
+ my (@file) = @_;
+
+ my $fail = 0;
+ my %res;
+ foreach my $f (@file)
+ {
+ my $cmd = "du --human $f";
+ my $t = `$cmd`;
+ # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
+ $@
+ and (warn "$ME: command failed: '$cmd'\n"), $fail = 1;
+ chomp $t;
+ $t =~ s/^([\d.]+[MkK]).*/${1}B/;
+ $res{$f} = $t;
+ }
+ return $fail ? undef : %res;
+}
+
+=item C<print_locations ($title, \@url, \%size, @file)
+
+Print a section C<$title> dedicated to the list of <@file>, which
+sizes are stored in C<%size>, and which are available from the C<@url>.
+
+=cut
+
+sub print_locations ($\@\%@)
+{
+ my ($title, $url, $size, @file) = @_;
+ print "Here are the $title:\n";
+ foreach my $url (@{$url})
+ {
+ for my $file (@file)
+ {
+ print " $url/$file";
+ print " (", $$size{$file}, ")"
+ if exists $$size{$file};
+ print "\n";
+ }
+ }
+ print "\n";
+}
+
+=item C<print_checksums (@file)
+
+Print the MD5 and SHA1 signature section for each C<@file>.
+
+=cut
+
+sub print_checksums (@)
+{
+ my (@file) = @_;
+
+ print "Here are the MD5 and SHA1 checksums:\n";
+ print "\n";
+
+ foreach my $meth (qw (md5 sha1))
+ {
+ foreach my $f (@file)
+ {
+ open IN, '<', $f
+ or die "$ME: $f: cannot open for reading: $!\n";
+ binmode IN;
+ my $dig =
+ ($meth eq 'md5'
+ ? Digest::MD5->new->addfile(*IN)->hexdigest
+ : Digest::SHA1->new->addfile(*IN)->hexdigest);
+ close IN;
+ print "$dig $f\n";
+ }
+ }
+ print "\n";
+}
+
+=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
+
+Print the section of the NEWS file C<$news_file> addressing changes
+between versions C<$prev_version> and C<$curr_version>.
+
+=cut
+
+sub print_news_deltas ($$$)
+{
+ my ($news_file, $prev_version, $curr_version) = @_;
+
+ my $news_name = $news_file;
+ $news_name =~ s|^\./||;
+
+ print "\n$news_name\n\n";
+
+ # Print all lines from $news_file, starting with the first one
+ # that mentions $curr_version up to but not including
+ # the first occurrence of $prev_version.
+ my $in_items;
+
+ my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
+
+ my $found_news;
+ open NEWS, '<', $news_file
+ or die "$ME: $news_file: cannot open for reading: $!\n";
+ while (defined (my $line = <NEWS>))
+ {
+ if ( ! $in_items)
+ {
+ # Match lines like these:
+ # * Major changes in release 5.0.1:
+ # * Noteworthy changes in release 6.6 (2006-11-22) [stable]
+ $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
+ or next;
+ $in_items = 1;
+ print $line;
+ }
+ else
+ {
+ # This regexp must not match version numbers in NEWS items.
+ # For example, they might well say "introduced in 4.5.5",
+ # and we don't want that to match.
+ $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
+ and last;
+ print $line;
+ $line =~ /\S/
+ and $found_news = 1;
+ }
+ }
+ close NEWS;
+
+ $in_items
+ or die "$ME: $news_file: no matching lines for '$curr_version'\n";
+ $found_news
+ or die "$ME: $news_file: no news item found for '$curr_version'\n";
+}
+
+sub print_changelog_deltas ($$)
+{
+ my ($package_name, $prev_version) = @_;
+
+ # Print new ChangeLog entries.
+
+ # First find all CVS-controlled ChangeLog files.
+ use File::Find;
+ my @changelog;
+ find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
+ and push @changelog, $File::Find::name}},
+ '.');
+
+ # If there are no ChangeLog files, we're done.
+ @changelog
+ or return;
+ my %changelog = map {$_ => 1} @changelog;
+
+ # Reorder the list of files so that if there are ChangeLog
+ # files in the specified directories, they're listed first,
+ # in this order:
+ my @dir = qw ( . src lib m4 config doc );
+
+ # A typical @changelog array might look like this:
+ # ./ChangeLog
+ # ./po/ChangeLog
+ # ./m4/ChangeLog
+ # ./lib/ChangeLog
+ # ./doc/ChangeLog
+ # ./config/ChangeLog
+ my @reordered;
+ foreach my $d (@dir)
+ {
+ my $dot_slash = $d eq '.' ? $d : "./$d";
+ my $target = "$dot_slash/ChangeLog";
+ delete $changelog{$target}
+ and push @reordered, $target;
+ }
+
+ # Append any remaining ChangeLog files.
+ push @reordered, sort keys %changelog;
+
+ # Remove leading './'.
+ @reordered = map { s!^\./!!; $_ } @reordered;
+
+ print "\nChangeLog entries:\n\n";
+ # print join ("\n", @reordered), "\n";
+
+ $prev_version =~ s/\./_/g;
+ my $prev_cvs_tag = "\U$package_name\E-$prev_version";
+
+ my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
+ open DIFF, '-|', $cmd
+ or die "$ME: cannot run '$cmd': $!\n";
+ # Print two types of lines, making minor changes:
+ # Lines starting with '+++ ', e.g.,
+ # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247
+ # and those starting with '+'.
+ # Don't print the others.
+ my $prev_printed_line_empty = 1;
+ while (defined (my $line = <DIFF>))
+ {
+ if ($line =~ /^\+\+\+ /)
+ {
+ my $separator = "*"x70 ."\n";
+ $line =~ s///;
+ $line =~ s/\s.*//;
+ $prev_printed_line_empty
+ or print "\n";
+ print $separator, $line, $separator;
+ }
+ elsif ($line =~ /^\+/)
+ {
+ $line =~ s///;
+ print $line;
+ $prev_printed_line_empty = ($line =~ /^$/);
+ }
+ }
+ close DIFF;
+
+ # The exit code should be 1.
+ # Allow in case there are no modified ChangeLog entries.
+ $? == 256 || $? == 128
+ or warn "$ME: warning: '$cmd' had unexpected exit code or signal ($?)\n";
+}
+
+sub get_tool_versions ($$)
+{
+ my ($tool_list, $gnulib_version) = @_;
+ @$tool_list
+ or return ();
+
+ my $fail;
+ my @tool_version_pair;
+ foreach my $t (@$tool_list)
+ {
+ if ($t eq 'gnulib')
+ {
+ push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
+ next;
+ }
+ # Assume that the last "word" on the first line of
+ # 'tool --version' output is the version string.
+ my ($first_line, undef) = split ("\n", `$t --version`);
+ if ($first_line =~ /.* (\d[\w.-]+)$/)
+ {
+ $t = ucfirst $t;
+ push @tool_version_pair, "$t $1";
+ }
+ else
+ {
+ defined $first_line
+ and $first_line = '';
+ warn "$ME: $t: unexpected --version output\n:$first_line";
+ $fail = 1;
+ }
+ }
+
+ $fail
+ and exit 1;
+
+ return @tool_version_pair;
+}
+
+{
+ # Neutralize the locale, so that, for instance, "du" does not
+ # issue "1,2" instead of "1.2", what confuses our regexps.
+ $ENV{LC_ALL} = "C";
+
+ my $mail_headers;
+ my $release_type;
+ my $package_name;
+ my $prev_version;
+ my $curr_version;
+ my $gpg_key_id;
+ my @url_dir_list;
+ my @news_file;
+ my $bootstrap_tools;
+ my $gnulib_version;
+ my $print_checksums_p = 1;
+
+ GetOptions
+ (
+ 'mail-headers=s' => \$mail_headers,
+ 'release-type=s' => \$release_type,
+ 'package-name=s' => \$package_name,
+ 'previous-version=s' => \$prev_version,
+ 'current-version=s' => \$curr_version,
+ 'gpg-key-id=s' => \$gpg_key_id,
+ 'url-directory=s' => \@url_dir_list,
+ 'news=s' => \@news_file,
+ 'bootstrap-tools=s' => \$bootstrap_tools,
+ 'gnulib-version=s' => \$gnulib_version,
+ 'print-checksums!' => \$print_checksums_p,
+ 'archive-suffix=s' => \@archive_suffixes,
+
+ help => sub { usage 0 },
+ version => sub { print "$ME version $VERSION\n"; exit },
+ ) or usage 1;
+
+ my $fail = 0;
+ # Ensure that sure each required option is specified.
+ $release_type
+ or (warn "$ME: release type not specified\n"), $fail = 1;
+ $package_name
+ or (warn "$ME: package name not specified\n"), $fail = 1;
+ $prev_version
+ or (warn "$ME: previous version string not specified\n"), $fail = 1;
+ $curr_version
+ or (warn "$ME: current version string not specified\n"), $fail = 1;
+ $gpg_key_id
+ or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1;
+ @url_dir_list
+ or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1;
+
+ my @tool_list = split ',', $bootstrap_tools;
+
+ grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version
+ and (warn "$ME: when specifying gnulib as a tool, you must also specify\n"
+ . "--gnulib-version=V, where V is the result of running git describe\n"
+ . "in the gnulib source directory.\n"), $fail = 1;
+
+ exists $valid_release_types{$release_type}
+ or (warn "$ME: '$release_type': invalid release type\n"), $fail = 1;
+
+ @ARGV
+ and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
+ $fail = 1;
+ $fail
+ and usage 1;
+
+ my $my_distdir = "$package_name-$curr_version";
+
+ my $xd = "$package_name-$prev_version-$curr_version.xdelta";
+
+ my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
+ my @tarballs = grep {-f $_} @candidates;
+
+ @tarballs
+ or die "$ME: none of " . join(', ', @candidates) . " were found\n";
+ my @sizable = @tarballs;
+ -f $xd
+ and push @sizable, $xd;
+ my %size = sizes (@sizable);
+ %size
+ or exit 1;
+
+ my $headers = '';
+ if (defined $mail_headers)
+ {
+ ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g;
+ $headers .= "\n";
+ }
+
+ # The markup is escaped as <\# so that when this script is sent by
+ # mail (or part of a diff), Gnus is not triggered.
+ print <<EOF;
+
+${headers}Subject: $my_distdir released [$release_type]
+
+<\#secure method=pgpmime mode=sign>
+
+FIXME: put comments here
+
+EOF
+
+ if (@url_dir_list == 1 && @tarballs == 1)
+ {
+ # When there's only one tarball and one URL, use a more concise form.
+ my $m = "$url_dir_list[0]/$tarballs[0]";
+ print "Here are the compressed sources and a GPG detached signature[*]:\n"
+ . " $m\n"
+ . " $m.sig\n\n";
+ }
+ else
+ {
+ print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
+ -f $xd
+ and print_locations ("xdelta diffs (useful? if so, "
+ . "please tell bug-gnulib\@gnu.org)",
+ @url_dir_list, %size, $xd);
+ my @sig_files = map { "$_.sig" } @tarballs;
+ print_locations ("GPG detached signatures[*]", @url_dir_list, %size,
+ @sig_files);
+ }
+
+ if ($url_dir_list[0] =~ "gnu\.org")
+ {
+ print "Use a mirror for higher download bandwidth:\n";
+ if (@tarballs == 1 && $url_dir_list[0] =~ m!http://ftp\.gnu\.org/gnu/!)
+ {
+ (my $m = "$url_dir_list[0]/$tarballs[0]")
+ =~ s!http://ftp\.gnu\.org/gnu/!http://ftpmirror\.gnu\.org/!;
+ print " $m\n"
+ . " $m.sig\n\n";
+
+ }
+ else
+ {
+ print " http://www.gnu.org/order/ftp.html\n\n";
+ }
+ }
+
+ $print_checksums_p
+ and print_checksums (@sizable);
+
+ print <<EOF;
+[*] Use a .sig file to verify that the corresponding file (without the
+.sig suffix) is intact. First, be sure to download both the .sig file
+and the corresponding tarball. Then, run a command like this:
+
+ gpg --verify $tarballs[0].sig
+
+If that command fails because you don't have the required public key,
+then run this command to import it:
+
+ gpg --keyserver keys.gnupg.net --recv-keys $gpg_key_id
+
+and rerun the 'gpg --verify' command.
+EOF
+
+ my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version);
+ @tool_versions
+ and print "\nThis release was bootstrapped with the following tools:",
+ join ('', map {"\n $_"} @tool_versions), "\n";
+
+ print_news_deltas ($_, $prev_version, $curr_version)
+ foreach @news_file;
+
+ $release_type eq 'stable'
+ or print_changelog_deltas ($package_name, $prev_version);
+
+ exit 0;
+}
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## mode: perl
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## perl-extra-newline-before-brace: t
+## perl-merge-trailing-else: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755
index 0000000..d622a44
--- /dev/null
+++ b/build-aux/config.guess
@@ -0,0 +1,1530 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-02-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner. Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ LIBC=gnu
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-gnu
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ case $UNAME_PROCESSOR in
+ i386)
+ eval $set_cc_for_build
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ UNAME_PROCESSOR="x86_64"
+ fi
+ fi ;;
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755
index 0000000..59bb593
--- /dev/null
+++ b/build-aux/config.sub
@@ -0,0 +1,1779 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011, 2012 Free Software Foundation, Inc.
+
+timestamp='2012-04-18'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>. Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | open8 \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i386-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/elisp-comp b/build-aux/elisp-comp
new file mode 100755
index 0000000..7766db4
--- /dev/null
+++ b/build-aux/elisp-comp
@@ -0,0 +1,93 @@
+#!/bin/sh
+# Copyright (C) 1995-2012 Free Software Foundation, Inc.
+
+scriptversion=2010-02-06.18; # UTC
+
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No files. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: elisp-comp [--help] [--version] FILES...
+
+This script byte-compiles all '.el' files listed as FILES using GNU
+Emacs, and put the resulting '.elc' files into the current directory,
+so disregarding the original directories used in '.el' arguments.
+
+This script manages in such a way that all Emacs LISP files to
+be compiled are made visible between themselves, in the event
+they require or load-library one another.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "elisp-comp $scriptversion"
+ exit $?
+ ;;
+esac
+
+if test -z "$EMACS" || test "$EMACS" = "t"; then
+ # Value of "t" means we are running in a shell under Emacs.
+ # Just assume Emacs is called "emacs".
+ EMACS=emacs
+fi
+
+tempdir=elc.$$
+
+# Cleanup the temporary directory on exit.
+trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
+do_exit='(exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+
+mkdir $tempdir
+cp "$@" $tempdir
+
+(
+ cd $tempdir
+ echo "(setq load-path (cons nil load-path))" > script
+ $EMACS -batch -q -l script -f batch-byte-compile *.el || exit $?
+ mv *.elc ..
+) || exit $?
+
+(exit 0); exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
new file mode 100755
index 0000000..c8abd55
--- /dev/null
+++ b/build-aux/gendocs.sh
@@ -0,0 +1,385 @@
+#!/bin/sh -e
+# gendocs.sh -- generate a GNU manual in many formats. This script is
+# mentioned in maintain.texi. See the help message below for usage details.
+
+scriptversion=2011-04-08.14
+
+# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
+#
+# The latest version of this script, and the companion template, is
+# available from Texinfo CVS:
+# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh
+# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template
+#
+# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DVIPS="dvips"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2PS="docbook2ps"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+version="gendocs.sh $scriptversion
+
+Copyright 2010 Free Software Foundation, Inc.
+There is NO warranty. You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
+See the GNU Maintainers document for a more extensive discussion:
+ http://www.gnu.org/prep/maintain_toc.html
+
+Options:
+ -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
+ -o OUTDIR write files into OUTDIR, instead of manual/.
+ --email ADR use ADR as contact in generated web pages.
+ --docbook convert to DocBook too (xml, txt, html, pdf and ps).
+ --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets.
+ --texi2html use texi2html to generate HTML targets.
+ --help display this help and exit successfully.
+ --version display version information and exit successfully.
+
+Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+ cd PACKAGESOURCE/doc
+ wget \"$scripturl\"
+ wget \"$templateurl\"
+ $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
+to override). Move all the new files into your web CVS tree, as
+explained in the Web Pages node of maintain.texi.
+
+Please use the --email ADDRESS option to specify your bug-reporting
+address in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file. It should include the name of the package being
+documented. manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time. Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and
+DVIPS to control the programs that get executed, and
+GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
+looked for. With --docbook, the environment variables DOCBOOK2HTML,
+DOCBOOK2PDF, DOCBOOK2PS, and DOCBOOK2TXT are also respected.
+
+By default, makeinfo and texi2dvi are run in the default (English)
+locale, since that's the language of most Texinfo manuals. If you
+happen to have a non-English manual and non-English web site, see the
+SETLANG setting in the source.
+
+Email bug reports or enhancement requests to bug-texinfo@gnu.org.
+"
+
+calcsize()
+{
+ size=`ls -ksl $1 | awk '{print $1}'`
+ echo $size
+}
+
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org # please override with --email
+htmlarg=
+outdir=manual
+srcfile=
+
+while test $# -gt 0; do
+ case $1 in
+ --email) shift; EMAIL=$1;;
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ -s) shift; srcfile=$1;;
+ -o) shift; outdir=$1;;
+ --docbook) docbook=yes;;
+ --html) shift; htmlarg=$1;;
+ --texi2html) use_texi2html=1;;
+ -*)
+ echo "$0: Unknown option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *)
+ if test -z "$PACKAGE"; then
+ PACKAGE=$1
+ elif test -z "$MANUAL_TITLE"; then
+ MANUAL_TITLE=$1
+ else
+ echo "$0: extra non-option argument \`$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+# For most of the following, the base name is just $PACKAGE
+base=$PACKAGE
+
+if test -n "$srcfile"; then
+ # but here, we use the basename of $srcfile
+ base=`basename "$srcfile"`
+ case $base in
+ *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
+ esac
+ PACKAGE=$base
+elif test -s "$srcdir/$PACKAGE.texinfo"; then
+ srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+ srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+ srcfile=$srcdir/$PACKAGE.txi
+else
+ echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+ exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+ echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+ echo "$0: it is available from $templateurl." >&2
+ exit 1
+fi
+
+case $outdir in
+ /*) abs_outdir=$outdir;;
+ *) abs_outdir=$srcdir/$outdir;;
+esac
+
+echo Generating output formats for $srcfile
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
+echo "Generating info files... ($cmd)"
+eval "$cmd"
+mkdir -p "$outdir/"
+tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
+info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
+# do not mv the info files, there's no point in having them available
+# separately on the web.
+
+cmd="$SETLANG ${TEXI2DVI} \"$srcfile\""
+echo "Generating dvi ... ($cmd)"
+eval "$cmd"
+
+# now, before we compress dvi:
+echo Generating postscript...
+${DVIPS} $PACKAGE -o
+gzip -f -9 $PACKAGE.ps
+ps_gz_size=`calcsize $PACKAGE.ps.gz`
+mv $PACKAGE.ps.gz "$outdir/"
+
+# compress/finish dvi:
+gzip -f -9 $PACKAGE.dvi
+dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+mv $PACKAGE.dvi.gz "$outdir/"
+
+cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\""
+echo "Generating pdf ... ($cmd)"
+eval "$cmd"
+pdf_size=`calcsize $PACKAGE.pdf`
+mv $PACKAGE.pdf "$outdir/"
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
+echo "Generating ASCII... ($cmd)"
+eval "$cmd"
+ascii_size=`calcsize $PACKAGE.txt`
+gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
+ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
+mv $PACKAGE.txt "$outdir/"
+
+html_split()
+{
+ opt="--split=$1 $htmlarg --node-files"
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+ echo "Generating html by $1... ($cmd)"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ ln -sf ${PACKAGE}.html index.html
+ tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
+ )
+ eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
+ rm -f "$outdir"/html_$1/*.html
+ mkdir -p "$outdir/html_$1/"
+ mv ${split_html_dir}/*.html "$outdir/html_$1/"
+ rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+ opt="--no-split --html -o $PACKAGE.html $htmlarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ echo "Generating monolithic html... ($cmd)"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ mv $PACKAGE.html "$outdir/"
+
+ cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\""
+ echo "Generating html by node... ($cmd)"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html
+ )
+ html_node_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node.tar.gz"`
+ rm -f "$outdir"/html_node/*.html
+ mkdir -p "$outdir/html_node/"
+ mv ${split_html_dir}/*.html "$outdir/html_node/"
+ rmdir ${split_html_dir}
+else
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\""
+ echo "Generating monolithic html... ($cmd)"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ mv $PACKAGE.html "$outdir/"
+
+ html_split node
+ html_split chapter
+ html_split section
+fi
+
+echo Making .tar.gz for sources...
+d=`dirname $srcfile`
+(
+ cd "$d"
+ srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true
+ tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+)
+texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
+
+if test -n "$docbook"; then
+ cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
+ echo "Generating docbook XML... ($cmd)"
+ eval "$cmd"
+ docbook_xml_size=`calcsize $PACKAGE-db.xml`
+ gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
+ docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
+ mv $PACKAGE-db.xml "$outdir/"
+
+ split_html_db_dir=html_node_db
+ cmd="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\""
+ echo "Generating docbook HTML... ($cmd)"
+ eval "$cmd"
+ (
+ cd ${split_html_db_dir} || exit 1
+ tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
+ )
+ html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
+ rm -f "$outdir"/html_node_db/*.html
+ mkdir -p "$outdir/html_node_db"
+ mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
+ rmdir ${split_html_db_dir}
+
+ cmd="${DOCBOOK2TXT} \"${outdir}/$PACKAGE-db.xml\""
+ echo "Generating docbook ASCII... ($cmd)"
+ eval "$cmd"
+ docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+ mv $PACKAGE-db.txt "$outdir/"
+
+ cmd="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\""
+ echo "Generating docbook PS... ($cmd)"
+ eval "$cmd"
+ gzip -f -9 -c $PACKAGE-db.ps >"$outdir/$PACKAGE-db.ps.gz"
+ docbook_ps_gz_size=`calcsize "$outdir/$PACKAGE-db.ps.gz"`
+ mv $PACKAGE-db.ps "$outdir/"
+
+ cmd="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\""
+ echo "Generating docbook PDF... ($cmd)"
+ eval "$cmd"
+ docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+ mv $PACKAGE-db.pdf "$outdir/"
+fi
+
+echo "Writing index file..."
+if test -z "$use_texi2html"; then
+ CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
+ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
+else
+ CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
+fi
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+ -e "s!%%EMAIL%%!$EMAIL!g" \
+ -e "s!%%PACKAGE%%!$PACKAGE!g" \
+ -e "s!%%DATE%%!$curdate!g" \
+ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+ -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+ -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
+ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+ -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
+ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+ -e "s,%%SCRIPTURL%%,$scripturl,g" \
+ -e "s!%%SCRIPTNAME%%!$prog!g" \
+ -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
new file mode 100755
index 0000000..0fa9063
--- /dev/null
+++ b/build-aux/git-version-gen
@@ -0,0 +1,220 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2012-03-18.17; # UTC
+
+# Copyright (C) 2007-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+# produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+# presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+# tarball. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+# Delete this file prior to any autoconf run where you want to rebuild
+# files to pick up a version string change; and leave it stale to
+# minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+# [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+# echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+# echo $(VERSION) > $(distdir)/.tarball-version
+
+
+me=$0
+
+version="git-version-gen $scriptversion
+
+Copyright 2011 Free Software Foundation, Inc.
+There is NO warranty. You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+ --prefix prefix of git tags (default 'v')
+
+ --help display this help and exit
+ --version output version information and exit
+
+Running without arguments will suffice in most cases."
+
+prefix=v
+
+while test $# -gt 0; do
+ case $1 in
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ --prefix) shift; prefix="$1";;
+ -*)
+ echo "$0: Unknown option '$1'." >&2
+ echo "$0: Try '--help' for more information." >&2
+ exit 1;;
+ *)
+ if test -z "$tarball_version_file"; then
+ tarball_version_file="$1"
+ elif test -z "$tag_sed_script"; then
+ tag_sed_script="$1"
+ else
+ echo "$0: extra non-option argument '$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+if test -z "$tarball_version_file"; then
+ echo "$usage"
+ exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+ v=`cat $tarball_version_file` || v=
+ case $v in
+ *$nl*) v= ;; # reject multi-line output
+ [0-9]*) ;;
+ *) v= ;;
+ esac
+ test -z "$v" \
+ && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test -n "$v"
+then
+ : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+ || git describe --abbrev=4 HEAD 2>/dev/null` \
+ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+ && case $v in
+ $prefix[0-9]*) ;;
+ *) (exit 1) ;;
+ esac
+then
+ # Is this a new git that lists number of commits since the last
+ # tag or the previous older version that did not?
+ # Newer: v6.10-77-g0f8faeb
+ # Older: v6.10-g0f8faeb
+ case $v in
+ *-*-*) : git describe is okay three part flavor ;;
+ *-*)
+ : git describe is older two part flavor
+ # Recreate the number of commits and rewrite such that the
+ # result is the same as if we were using the newer version
+ # of git describe.
+ vtag=`echo "$v" | sed 's/-.*//'`
+ commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+ || { commit_list=failed;
+ echo "$0: WARNING: git rev-list failed" 1>&2; }
+ numcommits=`echo "$commit_list" | wc -l`
+ v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+ test "$commit_list" = failed && v=UNKNOWN
+ ;;
+ esac
+
+ # Change the first '-' to a '.', so version-comparing tools work properly.
+ # Remove the "g" in git describe's output string, to save a byte.
+ v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+ v_from_git=1
+else
+ v=UNKNOWN
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test -n "$v_from_git"; then
+ # Don't declare a version "dirty" merely because a time stamp has changed.
+ git update-index --refresh > /dev/null 2>&1
+
+ dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+ case "$dirty" in
+ '') ;;
+ *) # Append the suffix only if there isn't one already.
+ case $v in
+ *-dirty) ;;
+ *) v="$v-dirty" ;;
+ esac ;;
+ esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+echo "$v" | tr -d "$nl"
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755
index 0000000..38c6f3a
--- /dev/null
+++ b/build-aux/gitlog-to-changelog
@@ -0,0 +1,385 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+ & eval 'exec perl -wS "$0" $argv:q'
+ if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2012-01-18 07:50'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+# Copyright (C) 2008-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+ defined fileno STDOUT or return;
+ close STDOUT and return;
+ warn "$ME: failed to close standard output: $!\n";
+ $? ||= 1;
+}
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format. If present, any ARGS
+are passed to "git log". To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+ --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+ makes a change to SHA1's commit log text or metadata.
+ --append-dot append a dot to the first line of each commit message if
+ there is no other punctuation or blank at the end.
+ --no-cluster never cluster commit messages under the same date/author
+ header; the default is to cluster adjacent commit messages
+ if their headers are the same and neither commit message
+ contains multiple paragraphs.
+ --since=DATE convert only the logs since DATE;
+ the default is to convert all log entries.
+ --format=FMT set format string for commit subject and body;
+ see 'man git-log' for the list of format metacharacters;
+ the default is '%s%n%b%n'
+
+ --help display this help and exit
+ --version output version information and exit
+
+EXAMPLE:
+
+ $ME --since=2008-01-01 > ChangeLog
+ $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line. They are not copied to the output.
+
+ Copyright-paperwork-exempt: Yes
+ Append the "(tiny change)" notation to the usual "date name email"
+ ChangeLog header to mark a change that does not require a copyright
+ assignment.
+ Co-authored-by: Joe User <user\@example.com>
+ List the specified name and email address on a second
+ ChangeLog header, denoting a co-author.
+ Signed-off-by: Joe User <user\@example.com>
+ These lines are simply elided.
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code. Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul. Note the escaped "@":
+s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
+
+EOF
+ }
+ exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m![^\w+/.,-]!)
+ {
+ # Convert each single quote to '\''
+ $s =~ s/\'/\'\\\'\'/g;
+ # Then single quote the string.
+ $s = "'$s'";
+ }
+ return $s;
+}
+
+sub quoted_cmd(@)
+{
+ return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+ my ($f) = @_;
+
+ open F, '<', $f
+ or die "$ME: $f: failed to open for reading: $!\n";
+
+ my $fail;
+ my $h = {};
+ my $in_code = 0;
+ my $sha;
+ while (defined (my $line = <F>))
+ {
+ $line =~ /^\#/
+ and next;
+ chomp $line;
+ $line eq ''
+ and $in_code = 0, next;
+
+ if (!$in_code)
+ {
+ $line =~ /^([0-9a-fA-F]{40})$/
+ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+ $fail = 1, next;
+ $sha = lc $1;
+ $in_code = 1;
+ exists $h->{$sha}
+ and (warn "$ME: $f:$.: duplicate SHA1\n"),
+ $fail = 1, next;
+ }
+ else
+ {
+ $h->{$sha} ||= '';
+ $h->{$sha} .= "$line\n";
+ }
+ }
+ close F;
+
+ $fail
+ and exit 1;
+
+ return $h;
+}
+
+{
+ my $since_date;
+ my $format_string = '%s%n%b%n';
+ my $amend_file;
+ my $append_dot = 0;
+ my $cluster = 1;
+ GetOptions
+ (
+ help => sub { usage 0 },
+ version => sub { print "$ME version $VERSION\n"; exit },
+ 'since=s' => \$since_date,
+ 'format=s' => \$format_string,
+ 'amend=s' => \$amend_file,
+ 'append-dot' => \$append_dot,
+ 'cluster!' => \$cluster,
+ ) or usage 1;
+
+
+ defined $since_date
+ and unshift @ARGV, "--since=$since_date";
+
+ # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+ # that makes a correction in the log or attribution of that commit.
+ my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+ my @cmd = (qw (git log --log-size),
+ '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
+ open PIPE, '-|', @cmd
+ or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
+ . "(Is your Git too old? Version 1.5.1 or later is required.)\n");
+
+ my $prev_multi_paragraph;
+ my $prev_date_line = '';
+ my @prev_coauthors = ();
+ while (1)
+ {
+ defined (my $in = <PIPE>)
+ or last;
+ $in =~ /^log size (\d+)$/
+ or die "$ME:$.: Invalid line (expected log size):\n$in";
+ my $log_nbytes = $1;
+
+ my $log;
+ my $n_read = read PIPE, $log, $log_nbytes;
+ $n_read == $log_nbytes
+ or die "$ME:$.: unexpected EOF\n";
+
+ # Extract leading hash.
+ my ($sha, $rest) = split ':', $log, 2;
+ defined $sha
+ or die "$ME:$.: malformed log entry\n";
+ $sha =~ /^[0-9a-fA-F]{40}$/
+ or die "$ME:$.: invalid SHA1: $sha\n";
+
+ # If this commit's log requires any transformation, do it now.
+ my $code = $amend_code->{$sha};
+ if (defined $code)
+ {
+ eval 'use Safe';
+ my $s = new Safe;
+ # Put the unpreprocessed entry into "$_".
+ $_ = $rest;
+
+ # Let $code operate on it, safely.
+ my $r = $s->reval("$code")
+ or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
+
+ # Note that we've used this entry.
+ delete $amend_code->{$sha};
+
+ # Update $rest upon success.
+ $rest = $_;
+ }
+
+ my @line = split "\n", $rest;
+ my $author_line = shift @line;
+ defined $author_line
+ or die "$ME:$.: unexpected EOF\n";
+ $author_line =~ /^(\d+) (.*>)$/
+ or die "$ME:$.: Invalid line "
+ . "(expected date/author/email):\n$author_line\n";
+
+ # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+ # `(tiny change)' annotation.
+ my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
+ ? ' (tiny change)' : '');
+
+ my $date_line = sprintf "%s %s$tiny\n",
+ strftime ("%F", localtime ($1)), $2;
+
+ my @coauthors = grep /^Co-authored-by:.*$/, @line;
+ # Omit meta-data lines we've already interpreted.
+ @line = grep !/^(?:Signed-off-by:[ ].*>$
+ |Co-authored-by:[ ]
+ |Copyright-paperwork-exempt:[ ]
+ )/x, @line;
+
+ # Remove leading and trailing blank lines.
+ if (@line)
+ {
+ while ($line[0] =~ /^\s*$/) { shift @line; }
+ while ($line[$#line] =~ /^\s*$/) { pop @line; }
+ }
+
+ # Record whether there are two or more paragraphs.
+ my $multi_paragraph = grep /^\s*$/, @line;
+
+ # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+ # standard multi-author ChangeLog format.
+ for (@coauthors)
+ {
+ s/^Co-authored-by:\s*/\t /;
+ s/\s*</ </;
+
+ /<.*?@.*\..*>/
+ or warn "$ME: warning: missing email address for "
+ . substr ($_, 5) . "\n";
+ }
+
+ # If clustering of commit messages has been disabled, if this header
+ # would be different from the previous date/name/email/coauthors header,
+ # or if this or the previous entry consists of two or more paragraphs,
+ # then print the header.
+ if ( ! $cluster
+ || $date_line ne $prev_date_line
+ || "@coauthors" ne "@prev_coauthors"
+ || $multi_paragraph
+ || $prev_multi_paragraph)
+ {
+ $prev_date_line eq ''
+ or print "\n";
+ print $date_line;
+ @coauthors
+ and print join ("\n", @coauthors), "\n";
+ }
+ $prev_date_line = $date_line;
+ @prev_coauthors = @coauthors;
+ $prev_multi_paragraph = $multi_paragraph;
+
+ # If there were any lines
+ if (@line == 0)
+ {
+ warn "$ME: warning: empty commit message:\n $date_line\n";
+ }
+ else
+ {
+ if ($append_dot)
+ {
+ # If the first line of the message has enough room, then
+ if (length $line[0] < 72)
+ {
+ # append a dot if there is no other punctuation or blank
+ # at the end.
+ $line[0] =~ /[[:punct:]\s]$/
+ or $line[0] .= '.';
+ }
+ }
+
+ # Prefix each non-empty line with a TAB.
+ @line = map { length $_ ? "\t$_" : '' } @line;
+
+ print "\n", join ("\n", @line), "\n";
+ }
+
+ defined ($in = <PIPE>)
+ or last;
+ $in ne "\n"
+ and die "$ME:$.: unexpected line:\n$in";
+ }
+
+ close PIPE
+ or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+ # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+ # Complain about any unused entry in the --amend=F specified file.
+ my $fail = 0;
+ foreach my $sha (keys %$amend_code)
+ {
+ warn "$ME:$amend_file: unused entry: $sha\n";
+ $fail = 1;
+ }
+
+ exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/gnupload b/build-aux/gnupload
new file mode 100755
index 0000000..b71ddfd
--- /dev/null
+++ b/build-aux/gnupload
@@ -0,0 +1,416 @@
+#!/bin/sh
+# Sign files and upload them.
+
+scriptversion=2012-01-15.15; # UTC
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
+# The master copy of this file is maintained in the gnulib Git repository.
+# Please send bug reports and feature requests to bug-gnulib@gnu.org.
+
+set -e
+
+GPG='gpg --batch --no-tty'
+conffile=.gnuploadrc
+to=
+dry_run=false
+symlink_files=
+delete_files=
+delete_symlinks=
+collect_var=
+dbg=
+nl='
+'
+
+usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
+
+Sign all FILES, and process them at selected destinations according to CMD.
+<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
+explains further.
+
+Commands:
+ --delete delete FILES from destination
+ --symlink create symbolic links
+ --rmsymlink remove symbolic links
+ -- treat the remaining arguments as files to upload
+
+Options:
+ --help print this help text and exit
+ --to DEST specify one destination for FILES
+ (multiple --to options are allowed)
+ --user NAME sign with key NAME
+ --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names
+ --dry-run do nothing, show what would have been done
+ --version output version information and exit
+
+If --symlink-regex is given without EXPR, then the link target name
+is created by replacing the version information with '-latest', e.g.:
+
+ foo-1.3.4.tar.gz -> foo-latest.tar.gz
+
+Recognized destinations are:
+ alpha.gnu.org:DIRECTORY
+ savannah.gnu.org:DIRECTORY
+ savannah.nongnu.org:DIRECTORY
+ ftp.gnu.org:DIRECTORY
+ build directive files and upload files by FTP
+ download.gnu.org.ua:{alpha|ftp}/DIRECTORY
+ build directive files and upload files by SFTP
+ [user@]host:DIRECTORY upload files with scp
+
+Options and commands are applied in order. If the file $conffile exists
+in the current working directory, its contents are prepended to the
+actual command line options. Use this to keep your defaults. Comments
+(#) and empty lines in $conffile are allowed.
+
+Examples:
+1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
+
+2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+3. Same as above, and also create symbolic links to foobar-latest.tar.*:
+ gnupload --to ftp.gnu.org:foobar \\
+ --symlink-regex \\
+ foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+4. Upload foobar-0.9.90.tar.gz to two sites:
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ foobar-0.9.90.tar.gz
+
+5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
+ (the -- terminates the list of files to delete):
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ --delete oopsbar-0.9.91.tar.gz \\
+ -- foobar-0.9.91.tar.gz
+
+gnupload uses the ncftpput program to do the transfers; if you don't
+happen to have an ncftp package installed, the ncftpput-ftp script in
+the build-aux/ directory of the gnulib package
+(http://savannah.gnu.org/projects/gnulib) may serve as a replacement.
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+
+# Read local configuration file
+if test -r "$conffile"; then
+ echo "$0: Reading configuration file $conffile"
+ conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '`
+ eval set x "$conf \"\$@\""
+ shift
+fi
+
+while test -n "$1"; do
+ case $1 in
+ -*)
+ collect_var=
+ case $1 in
+ --help)
+ echo "$usage"
+ exit $?
+ ;;
+ --to)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --to" 1>&2
+ exit 1
+ else
+ to="$to $2"
+ shift
+ fi
+ ;;
+ --user)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --user" 1>&2
+ exit 1
+ else
+ GPG="$GPG --local-user $2"
+ shift
+ fi
+ ;;
+ --delete)
+ collect_var=delete_files
+ ;;
+ --rmsymlink)
+ collect_var=delete_symlinks
+ ;;
+ --symlink-regex=*)
+ symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
+ ;;
+ --symlink-regex)
+ symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
+ ;;
+ --symlink)
+ collect_var=symlink_files
+ ;;
+ --dry-run|-n)
+ dry_run=:
+ ;;
+ --version)
+ echo "gnupload $scriptversion"
+ exit $?
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+ *)
+ if test -z "$collect_var"; then
+ break
+ else
+ eval "$collect_var=\"\$$collect_var $1\""
+ fi
+ ;;
+ esac
+ shift
+done
+
+dprint()
+{
+ echo "Running $* ..."
+}
+
+if $dry_run; then
+ dbg=dprint
+fi
+
+if test -z "$to"; then
+ echo "$0: Missing destination sites" >&2
+ exit 1
+fi
+
+if test -n "$symlink_files"; then
+ x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'`
+ if test -n "$x"; then
+ echo "$0: Odd number of symlink arguments" >&2
+ exit 1
+ fi
+fi
+
+if test $# = 0; then
+ if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
+ echo "$0: No file to upload" 1>&2
+ exit 1
+ fi
+else
+ # Make sure all files exist. We don't want to ask
+ # for the passphrase if the script will fail.
+ for file
+ do
+ if test ! -f $file; then
+ echo "$0: Cannot find '$file'" 1>&2
+ exit 1
+ elif test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ if test -z "$linkname"; then
+ echo "$0: symlink expression produces empty results" >&2
+ exit 1
+ elif test "$linkname" = $file; then
+ echo "$0: symlink expression does not alter file name" >&2
+ exit 1
+ fi
+ fi
+ done
+fi
+
+# Make sure passphrase is not exported in the environment.
+unset passphrase
+
+# Reset PATH to be sure that echo is a built-in. We will later use
+# 'echo $passphrase' to output the passphrase, so it is important that
+# it is a built-in (third-party programs tend to appear in 'ps'
+# listings with their arguments...).
+# Remember this script runs with 'set -e', so if echo is not built-in
+# it will exit now.
+PATH=/empty echo -n "Enter GPG passphrase: "
+stty -echo
+read -r passphrase
+stty echo
+echo
+
+if test $# -ne 0; then
+ for file
+ do
+ echo "Signing $file ..."
+ rm -f $file.sig
+ echo "$passphrase" | $dbg $GPG --passphrase-fd 0 -ba -o $file.sig $file
+ done
+fi
+
+
+# mkdirective DESTDIR BASE FILE STMT
+# Arguments: See upload, below
+mkdirective ()
+{
+ stmt="$4"
+ if test -n "$3"; then
+ stmt="
+filename: $3$stmt"
+ fi
+
+ cat >${2}.directive<<EOF
+version: 1.1
+directory: $1
+comment: gnupload v. $scriptversion$stmt
+EOF
+ if $dry_run; then
+ echo "File ${2}.directive:"
+ cat ${2}.directive
+ echo "File ${2}.directive:" | sed 's/./-/g'
+ fi
+}
+
+mksymlink ()
+{
+ while test $# -ne 0
+ do
+ echo "symlink: $1 $2"
+ shift
+ shift
+ done
+}
+
+# upload DEST DESTDIR BASE FILE STMT FILES
+# Arguments:
+# DEST Destination site;
+# DESTDIR Destination directory;
+# BASE Base name for the directive file;
+# FILE Name of the file to distribute (may be empty);
+# STMT Additional statements for the directive file;
+# FILES List of files to upload.
+upload ()
+{
+ dest=$1
+ destdir=$2
+ base=$3
+ file=$4
+ stmt=$5
+ files=$6
+
+ rm -f $base.directive $base.directive.asc
+ case $dest in
+ alpha.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
+ ;;
+ ftp.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
+ ;;
+ savannah.gnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+ ;;
+ savannah.nongnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+ ;;
+ download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
+ destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
+ destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
+ mkdirective "$destdir_p1" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive
+ for f in $files $base.directive.asc
+ do
+ echo put $f
+ done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir
+ ;;
+ /*)
+ dest_host=`echo "$dest" | sed 's,:.*,,'`
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive
+ $dbg cp $files $base.directive.asc $dest_host
+ ;;
+ *)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg scp $files $dest
+ ;;
+ esac
+ rm -f $base.directive $base.directive.asc
+}
+
+#####
+# Process any standalone directives
+stmt=
+if test -n "$symlink_files"; then
+ stmt="$stmt
+`mksymlink $symlink_files`"
+fi
+
+for file in $delete_files
+do
+ stmt="$stmt
+archive: $file"
+done
+
+for file in $delete_symlinks
+do
+ stmt="$stmt
+rmsymlink: $file"
+done
+
+if test -n "$stmt"; then
+ for dest in $to
+ do
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
+ done
+fi
+
+# Process actual uploads
+for dest in $to
+do
+ for file
+ do
+ echo "Uploading $file to $dest ..."
+ stmt=
+ files="$file $file.sig"
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ if test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ stmt="$stmt
+symlink: $file $linkname
+symlink: $file.sig $linkname.sig"
+ fi
+ upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
+ done
+done
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/build-aux/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
new file mode 100755
index 0000000..4614441
--- /dev/null
+++ b/build-aux/mdate-sh
@@ -0,0 +1,224 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2010-08-21.06; # UTC
+
+# Copyright (C) 1995-2012 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
+case $1 in
+ '')
+ echo "$0: No file. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume 'unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+ ls_command="$ls_command -n"
+fi
+
+# A 'ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ test $# -gt 0 || error "failed parsing '$ls_command /' output"
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755
index 0000000..9a55648
--- /dev/null
+++ b/build-aux/missing
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2012-01-06.18; # UTC
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, 'missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file 'aclocal.m4'
+ autoconf touch file 'configure'
+ autoheader touch file 'config.h.in'
+ autom4te touch the output file, or create a stub one
+ automake touch all 'Makefile.in' files
+ bison create 'y.tab.[ch]', if possible, from existing .[ch]
+ flex create 'lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create 'lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create 'y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+# Now exit if we have it, but it failed. Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program). This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+ lex*|yacc*)
+ # Not GNU programs, they don't have --version.
+ ;;
+
+ *)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+ # Could not run --version or --help. This is probably someone
+ # running '$TOOL --version' or '$TOOL --help' to check whether
+ # $TOOL exists and not knowing $TOOL uses missing.
+ exit 1
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+ aclocal*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acinclude.m4' or '${configure_ac}'. You might want
+ to install the Automake and Perl packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified '${configure_ac}'. You might want to install the
+ Autoconf and GNU m4 packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acconfig.h' or '${configure_ac}'. You might want
+ to install the Autoconf and GNU m4 packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case $f in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+ You might want to install the Automake and Perl packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te*)
+ echo 1>&2 "\
+WARNING: '$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get '$1' as part of Autoconf from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison*|yacc*)
+ echo 1>&2 "\
+WARNING: '$1' $msg. You should only need it if
+ you modified a '.y' file. You may need the Bison package
+ in order for those modifications to take effect. You can get
+ Bison from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f y.tab.h; then
+ echo >y.tab.h
+ fi
+ if test ! -f y.tab.c; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex*|flex*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.l' file. You may need the Flex package
+ in order for those modifications to take effect. You can get
+ Flex from any GNU archive site."
+ rm -f lex.yy.c
+ if test $# -ne 1; then
+ eval LASTARG=\${$#}
+ case $LASTARG in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if test -f "$SRCFILE"; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if test ! -f lex.yy.c; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ Help2man package in order for those modifications to take
+ effect. You can get Help2man from any GNU archive site."
+
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit $?
+ fi
+ ;;
+
+ makeinfo*)
+ echo 1>&2 "\
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.texi' or '.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy 'make' (AIX,
+ DU, IRIX). You might want to install the Texinfo package or
+ the GNU make package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
+ file=`echo "$*" | sed -n "$sed_output"`
+ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+ if test -z "$file"; then
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '
+ /^@setfilename/{
+ s/.* \([^ ]*\) *$/\1/
+ p
+ q
+ }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: '$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the 'README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing '$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
new file mode 100644
index 0000000..e4dca02
--- /dev/null
+++ b/build-aux/texinfo.tex
@@ -0,0 +1,10011 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2012-04-06.11}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software: you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\ampChar = `\&
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\hashChar = `\#
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page. The solution is
+% described on page 260 of The TeXbook. It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after. I won't pretend I can describe this better than DEK...
+\def\domark{%
+ \toks0=\expandafter{\lastchapterdefs}%
+ \toks2=\expandafter{\lastsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\lastcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2
+ \noexpand\or \the\toks4 \the\toks6
+ \noexpand\else \the\toks8
+ }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\tt \backslashcurfont }acronym}
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \indexdummies
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick. --kasal, 16nov03
+
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change). This command
+% is not documented, not supported, and doesn't work.
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+%
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+%
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent{%
+ \restorefirstparagraphindent
+ \indent
+ }%
+ \gdef\noindent{%
+ \restorefirstparagraphindent
+ \noindent
+ }%
+ \global\everypar = {%
+ \kern -\parindent
+ \restorefirstparagraphindent
+ }%
+}
+
+\gdef\restorefirstparagraphindent{%
+ \global \let \indent = \ptexindent
+ \global \let \noindent = \ptexnoindent
+ \global \everypar = {}%
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ \openin 1 texinfo.cnf
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\relax
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros based on pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % k sets the color for filling (usual text, etc.);
+ % K sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }}
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use a color that is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing.
+ \def\urlcolor{\rgbDarkRed}
+ \def\linkcolor{\rgbDarkRed}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \edef\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ \txiescapepdf\pdfoutlinedest
+ \fi
+ %
+ % Also escape PDF chars in the display string.
+ \edef\pdfoutlinetext{#1}%
+ \txiescapepdf\pdfoutlinetext
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold. Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
+% empty to omit).
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+% emacs-page end of cmaps
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. This is the default in
+% Texinfo.
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{27pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+ \csname markup#1true\endcsname
+ \def\currentmarkupstyle{#1}%
+ \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+ \expandafter\def\expandafter\markupstylesetup
+ \expandafter{\markupstylesetup #1}%
+ \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuplq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuprq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+
+\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ptexslash
+ \fi\fi\fi
+ \aftersmartic
+}
+
+% like \smartslanted except unconditionally uses \ttsl, and no ic.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}}
+
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% ctrl is no longer a Texinfo command.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setupmarkupstyle{code}%
+ % The following should really be moved into \setupmarkupstyle handlers.
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\realdash
+ \let_\realunder
+ \fi
+ \codex
+ }
+}
+
+\def\codex #1{\tclose{#1}\endgroup}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general. @allowcodebreaks provides a way to control this.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url.
+% (This \urefnobreak definition isn't used now, leaving it for a while
+% for comparison.)
+\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
+\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% This \urefbreak definition is the active one.
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode\ampChar=\active \catcode\dotChar=\active
+ \catcode\hashChar=\active \catcode\questChar=\active
+ \catcode\slashChar=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setupmarkupstyle{code}%
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's. The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprestretch \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpoststretch \fi
+ }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that. Also allow no breaking at all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+% Unless we're in typewriter, use \ecfont because the CM text fonts do
+% not have braces, and we don't want to switch into math.
+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\let\{=\mylbrace \let\lbracechar=\{
+\let\}=\myrbrace \let\rbracechar=\}
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux/toc files.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \selectfonts\lllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \leftline{\titlefonts\rmisbold #1}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rmisbold \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry. \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\- = \active \catcode`\_ = \active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\realdash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+ \escapechar = `\\ % use backslash in output files.
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ %
+ % Need these unexpandable (because we define \tt as a dummy)
+ % definitions when @{ or @} appear in index entry text. Also, more
+ % complicated, when \tex is in effect and \{ is a \delimiter again.
+ % We can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters. Perhaps we
+ % should define @lbrace and @rbrace commands a la @comma.
+ \def\{{{\tt\char123}}%
+ \def\}{{\tt\char125}}%
+ %
+ % I don't entirely understand this, but when an index entry is
+ % generated from a macro call, the \endinput which \scanmacro inserts
+ % causes processing to be prematurely terminated. This is,
+ % apparently, because \indexsorttmp is fully expanded, and \endinput
+ % is an expandable command. The redefinition below makes \endinput
+ % disappear altogether for that purpose -- although logging shows that
+ % processing continues to some further point. On the other hand, it
+ % seems \endinput does not hurt in the printed index arg, since that
+ % is still getting written without apparent harm.
+ %
+ % Sample source (mac-idx3.tex, reported by Graham Percival to
+ % help-texinfo, 22may06):
+ % @macro funindex {WORD}
+ % @findex xyz
+ % @end macro
+ % ...
+ % @funindex commtest
+ %
+ % The above is not enough to reproduce the bug, but it gives the flavor.
+ %
+ % Sample whatsit resulting:
+ % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+ %
+ % So:
+ \let\endinput = \empty
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux and toc files, @ is the escape character. So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files). When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % Do the redefinitions.
+ \commondummies
+ \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+ %
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
+ % preventing its expansion. This is used only for control words,
+ % not control letters, because the \space would be incorrect for
+ % control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
+ \def\definedummyletter##1{\def##1{\string##1}}%
+ \let\definedummyaccent\definedummyletter
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\arrow
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ %
+ \normalturnoffactive
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter\!%
+ \definedummyaccent\"%
+ \definedummyaccent\'%
+ \definedummyletter\*%
+ \definedummyaccent\,%
+ \definedummyletter\.%
+ \definedummyletter\/%
+ \definedummyletter\:%
+ \definedummyaccent\=%
+ \definedummyletter\?%
+ \definedummyaccent\^%
+ \definedummyaccent\`%
+ \definedummyaccent\~%
+ \definedummyword\u
+ \definedummyword\v
+ \definedummyword\H
+ \definedummyword\dotaccent
+ \definedummyword\ogonek
+ \definedummyword\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sansserif
+ \definedummyword\sc
+ \definedummyword\slanted
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\abbr
+ \definedummyword\acronym
+ \definedummyword\anchor
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\dmn
+ \definedummyword\email
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \definedummyword\image
+ \definedummyword\indicateurl
+ \definedummyword\inforef
+ \definedummyword\kbd
+ \definedummyword\key
+ \definedummyword\math
+ \definedummyword\option
+ \definedummyword\pxref
+ \definedummyword\ref
+ \definedummyword\samp
+ \definedummyword\strong
+ \definedummyword\tie
+ \definedummyword\uref
+ \definedummyword\url
+ \definedummyword\var
+ \definedummyword\verb
+ \definedummyword\w
+ \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\definedummyword\definedummyaccent
+ %
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ % Unfortunately, texindex is not prepared to handle braces in the
+ % content at all. So for index sorting, we map @{ and @} to strings
+ % starting with |, since that ASCII character is between ASCII { and }.
+ \def\{{|a}%
+ \def\lbracechar{|a}%
+ %
+ \def\}{|b}%
+ \def\rbracechar{|b}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\DH{DZZ}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\TH{ZZZ}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\dh{dzz}%
+ \def\exclamdown{!}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ \def\o{o}%
+ \def\questiondown{?}%
+ \def\ss{ss}%
+ \def\th{zzz}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\arrow{->}%
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\geq{>=}%
+ \def\guillemetleft{<<}%
+ \def\guillemetright{>>}%
+ \def\guilsinglleft{<}%
+ \def\guilsinglright{>}%
+ \def\leq{<=}%
+ \def\minus{-}%
+ \def\point{.}%
+ \def\pounds{pounds}%
+ \def\print{-|}%
+ \def\quotedblbase{"}%
+ \def\quotedblleft{"}%
+ \def\quotedblright{"}%
+ \def\quoteleft{`}%
+ \def\quoteright{'}%
+ \def\quotesinglbase{,}%
+ \def\registeredsymbol{R}%
+ \def\result{=>}%
+ \def\textdegree{o}%
+ %
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
+ \else \indexlquoteignore \fi
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+}
+
+% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
+% ignore left quotes in the sort term.
+{\catcode`\`=\active
+ \gdef\indexlquoteignore{\let`=\empty}}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \safewhatsit\dosubindwrite
+ }%
+ \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\backslashcurfont}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \nobreak
+ \vskip 0pt plus 3\baselineskip
+ \penalty 0
+ \vskip 0pt plus -3\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+% \def\entry#1#2{...
+% But this freezes the catcodes in the argument, and can cause problems to
+% @code, which sets - active. This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+% The right solution is to prevent \entry from swallowing the whole text.
+% --kasal, 21nov03
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus1pt
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}%
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+ % #1 is the page number.
+ %
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \setbox\boxA = \hbox{#1}%
+ \ifdim\wd\boxA = 0pt
+ \ %
+ \else
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#1.%
+ \ \the\toksA
+ \else
+ \ #1%
+ \fi
+ \fi
+ \par
+ \endgroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \pageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rmisbold #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ % Well, we could do the following in a group, but that would break
+ % an assumption that \chapmacro is called at the outermost level.
+ % Thus we are safer this way: --kasal, 24feb04
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\ptexraggedright
+ \rmisbold #1\hfill}}%
+ \bigskip \par\penalty 200\relax
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rmisbold
+ %
+ % Have to define \lastsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\lastsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\ptexraggedright
+ \rmisbold #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \checkenv{}% should not be in an environment.
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rmisbold
+ %
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\lastsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\lastsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \lastsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\lastsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\lastsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setupmarkupstyle{tex}%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+ \escapechar=`\\
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\*=\ptexstar
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing = t%
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setupmarkupstyle{example}%
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex.
+\envdef\raggedright{%
+ \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setupmarkupstyle{verb}%
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs. The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group. Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset. Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ % The \leavevmode here is for blank lines. Otherwise, we would
+ % never \starttabox and the \egroup would end verbatim mode.
+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
+ \tabexpand
+ \setupmarkupstyle{verbatim}%
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. Let's try @var for that.
+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\def\scanmacro#1{\begingroup
+ \newlinechar`\^^M
+ \let\xeatspaces\eatspaces
+ %
+ % Undo catcode changes of \startcontents and \doprintindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly. Previously, we had
+ % \catcode`\\=\other instead. We'll see whether a problem appears
+ % with macro expansion. --kasal, 19aug04
+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+ %
+ % ... and for \example:
+ \spaceisspace
+ %
+ % The \empty here causes a following catcode 5 newline to be eaten as
+ % part of reading whitespace after a control sequence. It does not
+ % eat a catcode 13 newline. There's no good way to handle the two
+ % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
+ % would then have different behavior). See the Macro Details node in
+ % the manual for the workaround we recommend for macros and
+ % line-oriented commands.
+ %
+ \scantokens{#1\empty}%
+\endgroup}
+
+\def\scanexp#1{%
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\@=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{% used when scanning invocations
+ \scanctxt
+ \catcode`\\=0
+}
+% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes"
+% for the single characters \ { }. Thus, we end up with the "commands"
+% that would be written @\ @{ @} in a Texinfo document.
+%
+% We already have @{ and @}. For @\, we define it here, and only for
+% this purpose, to produce a typewriter backslash (so, the @\ that we
+% define for @math can't be used with @macro calls):
+%
+\def\\{\normalbackslash}%
+%
+% We would like to do this for \, too, since that is what makeinfo does.
+% But it is not possible, because Texinfo already has a command @, for a
+% cedilla accent. Documents must use @comma{} instead.
+%
+% \anythingelse will almost certainly be an error of some kind.
+
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\definedummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\definedummyword \noexpand#1%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% For macro processing make @ a letter so that we can make Texinfo private macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH
+% in the params list to some hook where the argument si to be expanded. If
+% there are less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+%
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime underwhich the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, you need that no macro has more than 256 arguments, otherwise an
+% error is produced.
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ \let\xeatspaces\relax
+ \parsemargdefxxx#1,;,%
+ % In case that there are 10 or more arguments we parse again the arguments
+ % list to set new definitions for the \macarg.BLAH macros corresponding to
+ % each BLAH argument. It was anyhow needed to parse already once this list
+ % in order to count the arguments, and as macros with at most 9 arguments
+ % are by far more frequent than macro with 10 or more arguments, defining
+ % twice the \macarg.BLAH macros does not cost too much processing power.
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+%
+
+\catcode `\@\texiatcatcode
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\catcode `\@=11\relax
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+
+%
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+\def\macargexpandinbody@{%
+ %% Define the named-macro outside of this group and then close this group.
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
+
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Save the token stack pointer into macro #1
+\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
+% Restore the token stack pointer from number in macro #1
+\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
+% newtoks that can be used non \outer .
+\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
+
+% Tailing missing arguments are set to empty
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+% This defines a Texinfo @macro. There are eight cases: recursive and
+% nonrecursive macros of zero, one, up to nine, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+%
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else
+ \ifnum\paramno<10\relax % at most 9
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \else % 10 or more
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
+ \fi
+ \fi
+ \fi}
+
+\catcode `\@\texiatcatcode\relax
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg).
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \atdummies % preserve commands, but don't expand them
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\lastsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ {\indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \edef\pdfxrefdest{#1}%
+ \ifx\pdfxrefdest\empty
+ \def\pdfxrefdest{Top}% no empty targets
+ \else
+ \txiescapepdf\pdfxrefdest % escape PDF special chars
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% The node name might contain 8-bit characters, which in our current
+ % implementation are changed to commands like @'e. Don't let these
+ % mess up the control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
+ {%
+ \count1=128
+ \def\loop{%
+ \catcode\count1=\other
+ \advance\count1 by 1
+ \ifnum \count1<256 \loop \fi
+ }%
+ }%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \lastsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\lastsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \atdummies
+ %
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start floating, we have to issue warning
+ % whenever an insert appears inside a float which could possibly
+ % float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+ \let_=\normalunderscore % normal _ character for filenames
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore{#1_\finish}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+\endgroup}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\parseargdef\documentencoding{%
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \setnonasciicharscatcode\active
+ \utfeightchardefs
+ %
+ \else
+ \message{Unknown document encoding #1, ignoring.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\exclamdown}
+ \gdef^^a2{\missingcharmsg{CENT SIGN}}
+ \gdef^^a3{{\pounds}}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\missingcharmsg{YEN SIGN}}
+ \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\copyright}
+ \gdef^^aa{\ordf}
+ \gdef^^ab{\guillemetleft}
+ \gdef^^ac{$\lnot$}
+ \gdef^^ad{\-}
+ \gdef^^ae{\registeredsymbol}
+ \gdef^^af{\={}}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{$\pm$}
+ \gdef^^b2{$^2$}
+ \gdef^^b3{$^3$}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{$\mu$}
+ \gdef^^b6{\P}
+ %
+ \gdef^^b7{$^.$}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{$^1$}
+ \gdef^^ba{\ordm}
+ %
+ \gdef^^bb{\guillemetright}
+ \gdef^^bc{$1\over4$}
+ \gdef^^bd{$1\over2$}
+ \gdef^^be{$3\over4$}
+ \gdef^^bf{\questiondown}
+ %
+ \gdef^^c0{\`A}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\~A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\ringaccent A}
+ \gdef^^c6{\AE}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\`E}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\^E}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\`I}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\"I}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\~N}
+ \gdef^^d2{\`O}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\~O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\O}
+ \gdef^^d9{\`U}
+ \gdef^^da{\'U}
+ \gdef^^db{\^U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\TH}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\`a}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\~a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\ringaccent a}
+ \gdef^^e6{\ae}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\`e}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\^e}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\`{\dotless i}}
+ \gdef^^ed{\'{\dotless i}}
+ \gdef^^ee{\^{\dotless i}}
+ \gdef^^ef{\"{\dotless i}}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\~n}
+ \gdef^^f2{\`o}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\~o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\o}
+ \gdef^^f9{\`u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\^u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\th}
+ \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdef^^a4{\euro}
+ \gdef^^a6{\v S}
+ \gdef^^a8{\v s}
+ \gdef^^b4{\v Z}
+ \gdef^^b8{\v z}
+ \gdef^^bc{\OE}
+ \gdef^^bd{\oe}
+ \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\ogonek{A}}
+ \gdef^^a2{\u{}}
+ \gdef^^a3{\L}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\v L}
+ \gdef^^a6{\'S}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\v S}
+ \gdef^^aa{\cedilla S}
+ \gdef^^ab{\v T}
+ \gdef^^ac{\'Z}
+ \gdef^^ad{\-}
+ \gdef^^ae{\v Z}
+ \gdef^^af{\dotaccent Z}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{\ogonek{a}}
+ \gdef^^b2{\ogonek{ }}
+ \gdef^^b3{\l}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{\v l}
+ \gdef^^b6{\'s}
+ \gdef^^b7{\v{}}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{\v s}
+ \gdef^^ba{\cedilla s}
+ \gdef^^bb{\v t}
+ \gdef^^bc{\'z}
+ \gdef^^bd{\H{}}
+ \gdef^^be{\v z}
+ \gdef^^bf{\dotaccent z}
+ %
+ \gdef^^c0{\'R}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\u A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\'L}
+ \gdef^^c6{\'C}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\v C}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\ogonek{E}}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\v E}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\v D}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\'N}
+ \gdef^^d2{\v N}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\H O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\v R}
+ \gdef^^d9{\ringaccent U}
+ \gdef^^da{\'U}
+ \gdef^^db{\H U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\cedilla T}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\'r}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\u a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\'l}
+ \gdef^^e6{\'c}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\v c}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\ogonek{e}}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\v e}
+ \gdef^^ed{\'{\dotless{i}}}
+ \gdef^^ee{\^{\dotless{i}}}
+ \gdef^^ef{\v d}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\'n}
+ \gdef^^f2{\v n}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\H o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\v r}
+ \gdef^^f9{\ringaccent u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\H u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\cedilla t}
+ \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+\begingroup
+ \catcode`\~13
+ \catcode`\"12
+
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+ \UTFviiiLoop
+\endgroup
+
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+
+ \gdef\DeclareUnicodeCharacter#1#2{%
+ \countUTFz = "#1\relax
+ %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+ \begingroup
+ \parseXMLCharref
+ \def\UTFviiiTwoOctets##1##2{%
+ \csname u8:##1\string ##2\endcsname}%
+ \def\UTFviiiThreeOctets##1##2##3{%
+ \csname u8:##1\string ##2\string ##3\endcsname}%
+ \def\UTFviiiFourOctets##1##2##3##4{%
+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \gdef\UTFviiiTmp{#2}%
+ \endgroup}
+
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+ \fi\fi\fi
+ }
+
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz
+ \multiply\countUTFz by 64
+ \advance\countUTFx by -\countUTFz
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
+ \DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A8}{\"{ }}
+ \DeclareUnicodeCharacter{00A9}{\copyright}
+ \DeclareUnicodeCharacter{00AA}{\ordf}
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AD}{\-}
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+ \DeclareUnicodeCharacter{00AF}{\={ }}
+
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00BA}{\ordm}
+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+ \DeclareUnicodeCharacter{00C0}{\`A}
+ \DeclareUnicodeCharacter{00C1}{\'A}
+ \DeclareUnicodeCharacter{00C2}{\^A}
+ \DeclareUnicodeCharacter{00C3}{\~A}
+ \DeclareUnicodeCharacter{00C4}{\"A}
+ \DeclareUnicodeCharacter{00C5}{\AA}
+ \DeclareUnicodeCharacter{00C6}{\AE}
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+ \DeclareUnicodeCharacter{00C8}{\`E}
+ \DeclareUnicodeCharacter{00C9}{\'E}
+ \DeclareUnicodeCharacter{00CA}{\^E}
+ \DeclareUnicodeCharacter{00CB}{\"E}
+ \DeclareUnicodeCharacter{00CC}{\`I}
+ \DeclareUnicodeCharacter{00CD}{\'I}
+ \DeclareUnicodeCharacter{00CE}{\^I}
+ \DeclareUnicodeCharacter{00CF}{\"I}
+
+ \DeclareUnicodeCharacter{00D0}{\DH}
+ \DeclareUnicodeCharacter{00D1}{\~N}
+ \DeclareUnicodeCharacter{00D2}{\`O}
+ \DeclareUnicodeCharacter{00D3}{\'O}
+ \DeclareUnicodeCharacter{00D4}{\^O}
+ \DeclareUnicodeCharacter{00D5}{\~O}
+ \DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D8}{\O}
+ \DeclareUnicodeCharacter{00D9}{\`U}
+ \DeclareUnicodeCharacter{00DA}{\'U}
+ \DeclareUnicodeCharacter{00DB}{\^U}
+ \DeclareUnicodeCharacter{00DC}{\"U}
+ \DeclareUnicodeCharacter{00DD}{\'Y}
+ \DeclareUnicodeCharacter{00DE}{\TH}
+ \DeclareUnicodeCharacter{00DF}{\ss}
+
+ \DeclareUnicodeCharacter{00E0}{\`a}
+ \DeclareUnicodeCharacter{00E1}{\'a}
+ \DeclareUnicodeCharacter{00E2}{\^a}
+ \DeclareUnicodeCharacter{00E3}{\~a}
+ \DeclareUnicodeCharacter{00E4}{\"a}
+ \DeclareUnicodeCharacter{00E5}{\aa}
+ \DeclareUnicodeCharacter{00E6}{\ae}
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+ \DeclareUnicodeCharacter{00E8}{\`e}
+ \DeclareUnicodeCharacter{00E9}{\'e}
+ \DeclareUnicodeCharacter{00EA}{\^e}
+ \DeclareUnicodeCharacter{00EB}{\"e}
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{00F0}{\dh}
+ \DeclareUnicodeCharacter{00F1}{\~n}
+ \DeclareUnicodeCharacter{00F2}{\`o}
+ \DeclareUnicodeCharacter{00F3}{\'o}
+ \DeclareUnicodeCharacter{00F4}{\^o}
+ \DeclareUnicodeCharacter{00F5}{\~o}
+ \DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F8}{\o}
+ \DeclareUnicodeCharacter{00F9}{\`u}
+ \DeclareUnicodeCharacter{00FA}{\'u}
+ \DeclareUnicodeCharacter{00FB}{\^u}
+ \DeclareUnicodeCharacter{00FC}{\"u}
+ \DeclareUnicodeCharacter{00FD}{\'y}
+ \DeclareUnicodeCharacter{00FE}{\th}
+ \DeclareUnicodeCharacter{00FF}{\"y}
+
+ \DeclareUnicodeCharacter{0100}{\=A}
+ \DeclareUnicodeCharacter{0101}{\=a}
+ \DeclareUnicodeCharacter{0102}{\u{A}}
+ \DeclareUnicodeCharacter{0103}{\u{a}}
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+ \DeclareUnicodeCharacter{0106}{\'C}
+ \DeclareUnicodeCharacter{0107}{\'c}
+ \DeclareUnicodeCharacter{0108}{\^C}
+ \DeclareUnicodeCharacter{0109}{\^c}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+ \DeclareUnicodeCharacter{010C}{\v{C}}
+ \DeclareUnicodeCharacter{010D}{\v{c}}
+ \DeclareUnicodeCharacter{010E}{\v{D}}
+
+ \DeclareUnicodeCharacter{0112}{\=E}
+ \DeclareUnicodeCharacter{0113}{\=e}
+ \DeclareUnicodeCharacter{0114}{\u{E}}
+ \DeclareUnicodeCharacter{0115}{\u{e}}
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{011A}{\v{E}}
+ \DeclareUnicodeCharacter{011B}{\v{e}}
+ \DeclareUnicodeCharacter{011C}{\^G}
+ \DeclareUnicodeCharacter{011D}{\^g}
+ \DeclareUnicodeCharacter{011E}{\u{G}}
+ \DeclareUnicodeCharacter{011F}{\u{g}}
+
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0124}{\^H}
+ \DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0128}{\~I}
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+ \DeclareUnicodeCharacter{012A}{\=I}
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+ \DeclareUnicodeCharacter{012C}{\u{I}}
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
+ \DeclareUnicodeCharacter{0132}{IJ}
+ \DeclareUnicodeCharacter{0133}{ij}
+ \DeclareUnicodeCharacter{0134}{\^J}
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0139}{\'L}
+ \DeclareUnicodeCharacter{013A}{\'l}
+
+ \DeclareUnicodeCharacter{0141}{\L}
+ \DeclareUnicodeCharacter{0142}{\l}
+ \DeclareUnicodeCharacter{0143}{\'N}
+ \DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0147}{\v{N}}
+ \DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{014C}{\=O}
+ \DeclareUnicodeCharacter{014D}{\=o}
+ \DeclareUnicodeCharacter{014E}{\u{O}}
+ \DeclareUnicodeCharacter{014F}{\u{o}}
+
+ \DeclareUnicodeCharacter{0150}{\H{O}}
+ \DeclareUnicodeCharacter{0151}{\H{o}}
+ \DeclareUnicodeCharacter{0152}{\OE}
+ \DeclareUnicodeCharacter{0153}{\oe}
+ \DeclareUnicodeCharacter{0154}{\'R}
+ \DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0158}{\v{R}}
+ \DeclareUnicodeCharacter{0159}{\v{r}}
+ \DeclareUnicodeCharacter{015A}{\'S}
+ \DeclareUnicodeCharacter{015B}{\'s}
+ \DeclareUnicodeCharacter{015C}{\^S}
+ \DeclareUnicodeCharacter{015D}{\^s}
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+ \DeclareUnicodeCharacter{0160}{\v{S}}
+ \DeclareUnicodeCharacter{0161}{\v{s}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0164}{\v{T}}
+
+ \DeclareUnicodeCharacter{0168}{\~U}
+ \DeclareUnicodeCharacter{0169}{\~u}
+ \DeclareUnicodeCharacter{016A}{\=U}
+ \DeclareUnicodeCharacter{016B}{\=u}
+ \DeclareUnicodeCharacter{016C}{\u{U}}
+ \DeclareUnicodeCharacter{016D}{\u{u}}
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+ \DeclareUnicodeCharacter{0170}{\H{U}}
+ \DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0174}{\^W}
+ \DeclareUnicodeCharacter{0175}{\^w}
+ \DeclareUnicodeCharacter{0176}{\^Y}
+ \DeclareUnicodeCharacter{0177}{\^y}
+ \DeclareUnicodeCharacter{0178}{\"Y}
+ \DeclareUnicodeCharacter{0179}{\'Z}
+ \DeclareUnicodeCharacter{017A}{\'z}
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+ \DeclareUnicodeCharacter{017D}{\v{Z}}
+ \DeclareUnicodeCharacter{017E}{\v{z}}
+
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
+ \DeclareUnicodeCharacter{01C7}{LJ}
+ \DeclareUnicodeCharacter{01C8}{Lj}
+ \DeclareUnicodeCharacter{01C9}{lj}
+ \DeclareUnicodeCharacter{01CA}{NJ}
+ \DeclareUnicodeCharacter{01CB}{Nj}
+ \DeclareUnicodeCharacter{01CC}{nj}
+ \DeclareUnicodeCharacter{01CD}{\v{A}}
+ \DeclareUnicodeCharacter{01CE}{\v{a}}
+ \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+ \DeclareUnicodeCharacter{01D1}{\v{O}}
+ \DeclareUnicodeCharacter{01D2}{\v{o}}
+ \DeclareUnicodeCharacter{01D3}{\v{U}}
+ \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
+ \DeclareUnicodeCharacter{01E6}{\v{G}}
+ \DeclareUnicodeCharacter{01E7}{\v{g}}
+ \DeclareUnicodeCharacter{01E8}{\v{K}}
+ \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+ \DeclareUnicodeCharacter{01F1}{DZ}
+ \DeclareUnicodeCharacter{01F2}{Dz}
+ \DeclareUnicodeCharacter{01F3}{dz}
+ \DeclareUnicodeCharacter{01F4}{\'G}
+ \DeclareUnicodeCharacter{01F5}{\'g}
+ \DeclareUnicodeCharacter{01F8}{\`N}
+ \DeclareUnicodeCharacter{01F9}{\`n}
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+ \DeclareUnicodeCharacter{021E}{\v{H}}
+ \DeclareUnicodeCharacter{021F}{\v{h}}
+
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+ \DeclareUnicodeCharacter{0232}{\=Y}
+ \DeclareUnicodeCharacter{0233}{\=y}
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+ \DeclareUnicodeCharacter{1E20}{\=G}
+ \DeclareUnicodeCharacter{1E21}{\=g}
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+ \DeclareUnicodeCharacter{1E26}{\"H}
+ \DeclareUnicodeCharacter{1E27}{\"h}
+
+ \DeclareUnicodeCharacter{1E30}{\'K}
+ \DeclareUnicodeCharacter{1E31}{\'k}
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+ \DeclareUnicodeCharacter{1E3E}{\'M}
+ \DeclareUnicodeCharacter{1E3F}{\'m}
+
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+ \DeclareUnicodeCharacter{1E54}{\'P}
+ \DeclareUnicodeCharacter{1E55}{\'p}
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+ \DeclareUnicodeCharacter{1E7C}{\~V}
+ \DeclareUnicodeCharacter{1E7D}{\~v}
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+ \DeclareUnicodeCharacter{1E80}{\`W}
+ \DeclareUnicodeCharacter{1E81}{\`w}
+ \DeclareUnicodeCharacter{1E82}{\'W}
+ \DeclareUnicodeCharacter{1E83}{\'w}
+ \DeclareUnicodeCharacter{1E84}{\"W}
+ \DeclareUnicodeCharacter{1E85}{\"w}
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+ \DeclareUnicodeCharacter{1E8C}{\"X}
+ \DeclareUnicodeCharacter{1E8D}{\"x}
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+ \DeclareUnicodeCharacter{1E90}{\^Z}
+ \DeclareUnicodeCharacter{1E91}{\^z}
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+ \DeclareUnicodeCharacter{1E97}{\"t}
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+ \DeclareUnicodeCharacter{1EBC}{\~E}
+ \DeclareUnicodeCharacter{1EBD}{\~e}
+
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+ \DeclareUnicodeCharacter{1EF2}{\`Y}
+ \DeclareUnicodeCharacter{1EF3}{\`y}
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+ \DeclareUnicodeCharacter{1EF8}{\~Y}
+ \DeclareUnicodeCharacter{1EF9}{\~y}
+
+ \DeclareUnicodeCharacter{2013}{--}
+ \DeclareUnicodeCharacter{2014}{---}
+ \DeclareUnicodeCharacter{2018}{\quoteleft}
+ \DeclareUnicodeCharacter{2019}{\quoteright}
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
+ \DeclareUnicodeCharacter{201D}{\quotedblright}
+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
+ \DeclareUnicodeCharacter{2022}{\bullet}
+ \DeclareUnicodeCharacter{2026}{\dots}
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
+ \DeclareUnicodeCharacter{20AC}{\euro}
+
+ \DeclareUnicodeCharacter{2192}{\expansion}
+ \DeclareUnicodeCharacter{21D2}{\result}
+
+ \DeclareUnicodeCharacter{2212}{\minus}
+ \DeclareUnicodeCharacter{2217}{\point}
+ \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% The story here is that in math mode, the \char of \backslashcurfont
+% ends up printing the roman \ from the math symbol font (because \char
+% in math mode uses the \mathcode, and plain.tex sets
+% \mathcode`\\="026E). It seems better for @backslashchar{} to always
+% print a typewriter backslash, hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
+@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
+
+% On startup, @fixbackslash assigns:
+% @let \ = @normalbackslash
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other. We switch back and forth between these.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
+ @let"=@normaldoublequote
+ @let$=@normaldollar %$ font-lock fix
+ @let+=@normalplus
+ @let<=@normalless
+ @let>=@normalgreater
+ @let\=@normalbackslash
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let~=@normaltilde
+ @markupsetuplqdefault
+ @markupsetuprqdefault
+ @unsepspaces
+}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active
+ @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
+@def@normaldot{.}
+@def@normalquest{?}
+@def@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/cfg.mk b/cfg.mk
new file mode 100644
index 0000000..e79ff55
--- /dev/null
+++ b/cfg.mk
@@ -0,0 +1,141 @@
+# Customize maint.mk for Autoconf. -*- Makefile -*-
+# Copyright (C) 2003-2004, 2006, 2008-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file is '-include'd into GNUmakefile.
+
+# Build with our own versions of these tools, when possible.
+export PATH = $(shell echo "`pwd`/tests:$$PATH")
+
+# Remove the autoreconf-provided INSTALL, so that we regenerate it.
+_autoreconf = autoreconf -i -v && rm -f INSTALL
+
+# Used in maint.mk's web-manual rule
+manual_title = Creating Automatic Configuration Scripts
+
+# The local directory containing the checked-out copy of gnulib used
+# in this release (override the default). The $GNULIB_SRCDIR variable
+# is also honored by the gnulib-provided bootstrap script, so using it
+# here is consistent.
+gnulib_dir = $${GNULIB_SRCDIR-'$(abs_srcdir)'/../gnulib}
+
+# The bootstrap tools (override the default).
+bootstrap-tools = automake
+
+# Set preferred lists for announcements.
+
+announcement_Cc_ = $(PACKAGE_BUGREPORT), autotools-announce@gnu.org
+announcement_mail-alpha = autoconf@gnu.org
+announcement_mail-beta = autoconf@gnu.org
+announcement_mail-stable = info-gnu@gnu.org, autoconf@gnu.org
+announcement_mail_headers_ = \
+To: $(announcement_mail-$(RELEASE_TYPE)) \
+CC: $(announcement_Cc_) \
+Mail-Followup-To: autoconf@gnu.org
+
+# Update files from gnulib.
+.PHONY: fetch gnulib-update autom4te-update
+fetch: gnulib-update autom4te-update
+
+gnulib-update:
+ cp $(gnulib_dir)/build-aux/announce-gen $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/config.guess $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/config.sub $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/elisp-comp $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/gendocs.sh $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/git-version-gen $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/gitlog-to-changelog $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/gnupload $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/install-sh $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/mdate-sh $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/missing $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/move-if-change $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/texinfo.tex $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/update-copyright $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/useless-if-before-free $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/vc-list-files $(srcdir)/build-aux
+ cp $(gnulib_dir)/doc/fdl.texi $(srcdir)/doc
+ cp $(gnulib_dir)/doc/gendocs_template $(srcdir)/doc
+ cp $(gnulib_dir)/doc/gnu-oids.texi $(srcdir)/doc
+ cp $(gnulib_dir)/doc/make-stds.texi $(srcdir)/doc
+ cp $(gnulib_dir)/doc/standards.texi $(srcdir)/doc
+ cp $(gnulib_dir)/m4/autobuild.m4 $(srcdir)/m4
+ cp $(gnulib_dir)/top/GNUmakefile $(srcdir)
+ cp $(gnulib_dir)/top/maint.mk $(srcdir)
+
+WGET = wget
+WGETFLAGS = -C off
+
+## Fetch the latest versions of files we care about.
+automake_gitweb = \
+ http://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;hb=HEAD;
+autom4te_files = \
+ Autom4te/Configure_ac.pm \
+ Autom4te/Channels.pm \
+ Autom4te/FileUtils.pm \
+ Autom4te/Getopt.pm \
+ Autom4te/XFile.pm
+
+move_if_change = '$(abs_srcdir)'/build-aux/move-if-change
+
+autom4te-update:
+ rm -fr Fetchdir > /dev/null 2>&1
+ mkdir -p Fetchdir/Autom4te
+ for file in $(autom4te_files); do \
+ infile=`echo $$file | sed 's/Autom4te/Automake/g'`; \
+ $(WGET) $(WGET_FLAGS) \
+ "$(automake_gitweb)f=lib/$$infile" \
+ -O "Fetchdir/$$file" || exit; \
+ done
+ perl -pi -e 's/Automake::/Autom4te::/g' Fetchdir/Autom4te/*.pm
+ for file in $(autom4te_files); do \
+ $(move_if_change) Fetchdir/$$file $(srcdir)/lib/$$file || exit; \
+ done
+ rm -fr Fetchdir > /dev/null 2>&1
+
+# Tests not to run.
+local-checks-to-skip ?= \
+ changelog-check \
+ sc_GPL_version \
+ sc_cast_of_alloca_return_value \
+ sc_m4_quote_check \
+ sc_makefile_at_at_check \
+ sc_prohibit_HAVE_MBRTOWC \
+ sc_prohibit_always-defined_macros \
+ sc_prohibit_always_true_header_tests \
+ sc_prohibit_magic_number_exit \
+ sc_prohibit_stat_st_blocks \
+ sc_unmarked_diagnostics
+
+
+# Always use shorthand copyrights.
+update-copyright-env = \
+ UPDATE_COPYRIGHT_USE_INTERVALS=1 \
+ UPDATE_COPYRIGHT_MAX_LINE_LENGTH=72
+
+# Prevent incorrect NEWS edits.
+old_NEWS_hash = 54ad39275441a2a3fcbe6182da4f84fb
+
+exclude_file_name_regexp--sc_prohibit_undesirable_word_seq = \
+ ^(maint\.mk|build-aux/texinfo\.tex)$$
+exclude_file_name_regexp--sc_prohibit_test_minus_ao = \
+ ^(maint\.mk|doc/autoconf\.texi)$$
+exclude_file_name_regexp--sc_prohibit_atoi_atof = ^doc/autoconf\.texi$$
+exclude_file_name_regexp--sc_useless_cpp_parens = \
+ ^(build-aux/config\.guess|doc/standards\.texi)$$
+exclude_file_name_regexp--sc_trailing_blank = ^build-aux/texinfo\.tex$$
+exclude_file_name_regexp--sc_two_space_separator_in_usage = \
+ ^build-aux/gnupload$$
diff --git a/configure b/configure
new file mode 100755
index 0000000..402f0fb
--- /dev/null
+++ b/configure
@@ -0,0 +1,4390 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for GNU Autoconf 2.69.
+#
+# Report bugs to <bug-autoconf@gnu.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GNU Autoconf'
+PACKAGE_TARNAME='autoconf'
+PACKAGE_VERSION='2.69'
+PACKAGE_STRING='GNU Autoconf 2.69'
+PACKAGE_BUGREPORT='bug-autoconf@gnu.org'
+PACKAGE_URL='http://www.gnu.org/software/autoconf/'
+
+ac_unique_file="lib/autoconf/autoconf.m4"
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+MAKE_CASE_SENSITIVE_FALSE
+MAKE_CASE_SENSITIVE_TRUE
+SED
+EGREP
+GREP
+lispdir
+EMACSLOADPATH
+EMACS
+TEST_EMACS
+PERL_FLOCK
+PERL
+HELP2MAN
+M4_DEBUGFILE
+M4_GNU
+M4
+EXPR
+ac_cv_dir_trailing_space
+ac_cv_unsupported_fs_chars
+ac_cv_sh_n_works
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_lispdir
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+M4
+EMACS
+EMACSLOADPATH'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures GNU Autoconf 2.69 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/autoconf]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of GNU Autoconf 2.69:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-lispdir override the default lisp directory
+
+Some influential environment variables:
+ M4 Location of GNU M4 1.4.6 or later. Defaults to the first program
+ of `m4', `gm4', or `gnum4' on PATH that meets Autoconf needs.
+ EMACS the Emacs editor command
+ EMACSLOADPATH
+ the Emacs library search path
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-autoconf@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+GNU Autoconf configure 2.69
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU Autoconf $as_me 2.69, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+am__api_version='1.11'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='autoconf'
+ VERSION='2.69'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+
+
+ if test -z "$AB_PACKAGE"; then
+ AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE}
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5
+$as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;}
+
+ if test -z "$AB_VERSION"; then
+ AB_VERSION=${PACKAGE_VERSION:-$VERSION}
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5
+$as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;}
+
+ hostname=`hostname`
+ if test "$hostname"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5
+$as_echo "$as_me: autobuild hostname... $hostname" >&6;}
+ fi
+
+
+
+ date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ`
+ if test "$?" != 0; then
+ date=`date`
+ fi
+ if test "$date"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5
+$as_echo "$as_me: autobuild timestamp... $date" >&6;}
+ fi
+
+
+# We use `/bin/sh -n script' to check that there are no syntax errors
+# in the scripts. Although incredible, there are /bin/sh that go into
+# endless loops with `-n', e.g., SunOS's:
+#
+# $ uname -a
+# SunOS ondine 4.1.3 2 sun4m unknown
+# $ cat endless.sh
+# while false
+# do
+# :
+# done
+# exit 0
+# $ time sh endless.sh
+# sh endless.sh 0,02s user 0,03s system 78% cpu 0,064 total
+# $ time sh -nx endless.sh
+# ^Csh -nx endless.sh 3,67s user 0,03s system 63% cpu 5,868 total
+#
+# Also, some implementations of /bin/sh (e.g., Solaris 8) are soooo slow
+# that they are unusable on large scripts like our testsuite.
+
+# So before using `/bin/sh -n' to check our scripts, we first check
+# that `/bin/sh -n' is known to not have these problems.
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /bin/sh -n is known to work" >&5
+$as_echo_n "checking whether /bin/sh -n is known to work... " >&6; }
+if ${ac_cv_sh_n_works+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if (
+ unset BASH_VERSION ZSH_VERSION
+ /bin/sh -c '
+ test -n "${BASH_VERSION+set}" || # Bash
+ test -n "${KSH_VERSION+set}" || # pdksh
+ test -n "${ZSH_VERSION+set}" || # zsh
+ test -n "${.sh.version}" # ksh93; put this last since its syntax is dodgy
+ '
+ ) 2>/dev/null
+then ac_cv_sh_n_works=yes
+else ac_cv_sh_n_works=no
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sh_n_works" >&5
+$as_echo "$ac_cv_sh_n_works" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for characters that cannot appear in file names" >&5
+$as_echo_n "checking for characters that cannot appear in file names... " >&6; }
+if ${ac_cv_unsupported_fs_chars+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_unsupported_fs_chars=
+for c in '\\' \" '<' '>' '*' '?' '|'
+do
+ touch "conftest.t${c}t" 2>/dev/null
+ test -f "conftest.t${c}t" && rm -f "conftest.t${c}t" && continue
+ # $c cannot be used in a file name.
+ ac_cv_unsupported_fs_chars=$ac_cv_unsupported_fs_chars$c
+done
+
+fi
+
+if test -n "$ac_cv_unsupported_fs_chars"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_unsupported_fs_chars" >&5
+$as_echo "$ac_cv_unsupported_fs_chars" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether directories can have trailing spaces" >&5
+$as_echo_n "checking whether directories can have trailing spaces... " >&6; }
+if ${ac_cv_dir_trailing_space+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -rf 'conftest.d ' && mkdir 'conftest.d ' && touch 'conftest.d /tfile' 2>/dev/null
+stat=$?
+rm -rf 'conftest.d '
+case $stat$? in #(
+ 00) ac_cv_dir_trailing_space=yes ;; #(
+ *) ac_cv_dir_trailing_space=no ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_dir_trailing_space" >&5
+$as_echo "$ac_cv_dir_trailing_space" >&6; }
+
+
+# Initialize the test suite.
+ac_config_commands="$ac_config_commands tests/atconfig"
+
+ac_config_files="$ac_config_files tests/Makefile tests/atlocal"
+
+# Extract the first word of "expr", so it can be a program name with args.
+set dummy expr; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_EXPR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $EXPR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+EXPR=$ac_cv_path_EXPR
+if test -n "$EXPR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5
+$as_echo "$EXPR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+## ---- ##
+## M4. ##
+## ---- ##
+
+# We use an absolute name for GNU m4 so even if users have another m4 first in
+# their path, the installer can configure with a path that has GNU m4
+# on it and get that path embedded in the installed autoconf and
+# autoheader scripts.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU M4 that supports accurate traces" >&5
+$as_echo_n "checking for GNU M4 that supports accurate traces... " >&6; }
+if ${ac_cv_path_M4+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ rm -f conftest.m4f
+ac_had_posixly_correct=${POSIXLY_CORRECT:+yes}
+{ POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}
+if test -z "$M4"; then
+ ac_path_M4_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in m4 gm4 gnum4; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_M4="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_M4" || continue
+ # Root out GNU M4 1.4.5, as well as non-GNU m4 that ignore -t, -F.
+ # Root out GNU M4 1.4.15 with buggy false negative replacement strstr.
+ # Root out Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 with buggy
+ # false positive strstr.
+ ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)'
+ ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl
+ ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(..wi.d.,.d.),-1,bug)'
+ ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(;:11-:12-:12-:12-:12-:12-:12-:12-:12.:12.:12.:12.:12.:12.:12.:12.:12-,:12-:12-:12-:12-:12-:12-:12-:12-),-1,,strstr-bug2)'
+ test -z "`$ac_path_M4 -F conftest.m4f </dev/null 2>&1`" \
+ && test -z "`$as_echo $ac_snippet | $ac_path_M4 --trace=mac 2>&1`" \
+ && test -f conftest.m4f \
+ && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:
+ rm -f conftest.m4f
+ $ac_path_M4_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_M4"; then
+ as_fn_error $? "no acceptable m4 could be found in \$PATH.
+GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
+GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
+Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug." "$LINENO" 5
+ fi
+else
+ ac_cv_path_M4=$M4
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_M4" >&5
+$as_echo "$ac_cv_path_M4" >&6; }
+ M4=$ac_cv_path_M4
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $ac_cv_path_M4 accepts --gnu" >&5
+$as_echo_n "checking whether $ac_cv_path_M4 accepts --gnu... " >&6; }
+if ${ac_cv_prog_gnu_m4_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case `$M4 --help < /dev/null 2>&1` in
+ *--gnu*) ac_cv_prog_gnu_m4_gnu=yes ;;
+ *) ac_cv_prog_gnu_m4_gnu=no ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gnu_m4_gnu" >&5
+$as_echo "$ac_cv_prog_gnu_m4_gnu" >&6; }
+ if test "$ac_cv_prog_gnu_m4_gnu" = yes; then
+ M4_GNU=--gnu
+ else
+ M4_GNU=
+ fi
+
+ if test x$ac_had_posixly_correct = xyes; then
+ POSIXLY_CORRECT=:
+ if test $ac_cv_prog_gnu_m4_gnu = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: the version of M4 that was found does not support -g" >&5
+$as_echo "$as_me: WARNING: the version of M4 that was found does not support -g" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using it with POSIXLY_CORRECT set may cause problems" >&5
+$as_echo "$as_me: WARNING: using it with POSIXLY_CORRECT set may cause problems" >&2;}
+ fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how m4 supports trace files" >&5
+$as_echo_n "checking how m4 supports trace files... " >&6; }
+if ${ac_cv_prog_gnu_m4_debugfile+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case `$M4 --help < /dev/null 2>&1` in
+ *debugfile*) ac_cv_prog_gnu_m4_debugfile=--debugfile ;;
+ *) ac_cv_prog_gnu_m4_debugfile=--error-output ;;
+ esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gnu_m4_debugfile" >&5
+$as_echo "$ac_cv_prog_gnu_m4_debugfile" >&6; }
+ M4_DEBUGFILE=$ac_cv_prog_gnu_m4_debugfile
+
+
+
+## ----------- ##
+## Man pages. ##
+## ----------- ##
+
+ac_config_files="$ac_config_files man/Makefile"
+
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+
+
+## ------ ##
+## Perl. ##
+## ------ ##
+
+# We use an absolute name for perl so the #! line in autoscan will work.
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PERL+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PERL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
+ ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "$PERL" = no; then
+ as_fn_error $? "perl is not found" "$LINENO" 5
+fi
+$PERL -e 'require 5.006;' || {
+ as_fn_error $? "Perl 5.006 or better is required" "$LINENO" 5
+}
+
+# Find out whether the system supports flock
+# Note this test does not try to find out whether it works with this
+# particular file system. It merely avoids us running flock on systems
+# where that bails out.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PERL Fcntl::flock is implemented" >&5
+$as_echo_n "checking whether $PERL Fcntl::flock is implemented... " >&6; }
+if ${ac_cv_perl_flock_implemented+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ echo lock me > conftest.fil
+ if $PERL -e 'use Fcntl ":flock"; flock("conftest.fil", LOCK_EX); 1;'; then
+ ac_cv_perl_flock_implemented=yes
+ else
+ ac_cv_perl_flock_implemented=no
+ fi
+ rm -f conftest.fil
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_perl_flock_implemented" >&5
+$as_echo "$ac_cv_perl_flock_implemented" >&6; }
+PERL_FLOCK=$ac_cv_perl_flock_implemented
+
+
+
+## ------- ##
+## Emacs. ##
+## ------- ##
+
+ac_config_files="$ac_config_files lib/emacs/Makefile"
+
+TEST_EMACS=$EMACS
+test x"$TEST_EMACS" = xt && TEST_EMACS=
+for ac_prog in emacs xemacs
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_TEST_EMACS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$TEST_EMACS"; then
+ ac_cv_prog_TEST_EMACS="$TEST_EMACS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_TEST_EMACS="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+TEST_EMACS=$ac_cv_prog_TEST_EMACS
+if test -n "$TEST_EMACS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_EMACS" >&5
+$as_echo "$TEST_EMACS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$TEST_EMACS" && break
+done
+test -n "$TEST_EMACS" || TEST_EMACS="no"
+
+
+# autoconf-mode.el and autotest-mode.el do not work with older version of
+# Emacs (i.e. 18.x.x). During byte-compilation, Emacs complains:
+# "Variable (broken nil) seen on pass 2 of byte compiler but not pass 1"
+# We detect this problem here.
+if test "$TEST_EMACS" != no; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $TEST_EMACS is sufficiently recent" >&5
+$as_echo_n "checking whether $TEST_EMACS is sufficiently recent... " >&6; }
+if ${ac_cv_prog_emacs_ok+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Note: The quoted "EOF" is intentional. It protects the ` in the text.
+ cat >conftest.el << "EOF"
+ (defvar broken)
+ (defun broken-mode () (setq broken-defaults `(broken nil)))
+EOF
+ if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$TEST_EMACS -batch -q -f batch-byte-compile conftest.el 1>&2"; } >&5
+ ($TEST_EMACS -batch -q -f batch-byte-compile conftest.el 1>&2) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ ac_cv_prog_emacs_ok=yes
+else
+ ac_cv_prog_emacs_ok=no
+fi
+ rm -f conftest.el conftest.elc
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_emacs_ok" >&5
+$as_echo "$ac_cv_prog_emacs_ok" >&6; }
+ if test $ac_cv_prog_emacs_ok = no; then :
+ TEST_EMACS=no
+fi
+fi
+
+EMACS=$TEST_EMACS
+
+
+ # If set to t, that means we are running in a shell under Emacs.
+ # If you have an Emacs named "t", then use the full path.
+ test x"$EMACS" = xt && EMACS=
+ for ac_prog in emacs xemacs
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_EMACS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$EMACS"; then
+ ac_cv_prog_EMACS="$EMACS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_EMACS="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+EMACS=$ac_cv_prog_EMACS
+if test -n "$EMACS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EMACS" >&5
+$as_echo "$EMACS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$EMACS" && break
+done
+test -n "$EMACS" || EMACS="no"
+
+
+
+
+# Check whether --with-lispdir was given.
+if test "${with_lispdir+set}" = set; then :
+ withval=$with_lispdir; lispdir="$withval"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5
+$as_echo_n "checking where .elc files should go... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lispdir" >&5
+$as_echo "$lispdir" >&6; }
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking where .elc files should go" >&5
+$as_echo_n "checking where .elc files should go... " >&6; }
+if ${am_cv_lispdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+
+ if test $EMACS != "no"; then
+ if test x${lispdir+set} != xset; then
+ # If $EMACS isn't GNU Emacs or XEmacs, this can blow up pretty badly
+ # Some emacsen will start up in interactive mode, requiring C-x C-c to exit,
+ # which is non-obvious for non-emacs users.
+ # Redirecting /dev/null should help a bit; pity we can't detect "broken"
+ # emacsen earlier and avoid running this altogether.
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) \"\\n\")) (setq load-path (cdr load-path)))' </dev/null >conftest.out"; } >&5
+ ($EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' </dev/null >conftest.out) 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ am_cv_lispdir=`sed -n \
+ -e 's,/$,,' \
+ -e '/.*\/lib\/x*emacs\/site-lisp$/{s,.*/lib/\(x*emacs/site-lisp\)$,${libdir}/\1,;p;q;}' \
+ -e '/.*\/share\/x*emacs\/site-lisp$/{s,.*/share/\(x*emacs/site-lisp\),${datarootdir}/\1,;p;q;}' \
+ conftest.out`
+ rm conftest.out
+ fi
+ fi
+ test -z "$am_cv_lispdir" && am_cv_lispdir='${datadir}/emacs/site-lisp'
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_lispdir" >&5
+$as_echo "$am_cv_lispdir" >&6; }
+ lispdir="$am_cv_lispdir"
+
+fi
+
+
+
+
+
+## ------------ ##
+## Grep & sed. ##
+## ------------ ##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+
+## ----- ##
+## Make. ##
+## ----- ##
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} is case sensitive" >&5
+$as_echo_n "checking whether ${MAKE-make} is case sensitive... " >&6; }
+if eval \${ac_cv_prog_make_${ac_make}_case+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ echo all: >conftest.make
+if ${MAKE-make} -f conftest.make ALL >/dev/null 2>&1; then
+ ac_res=no
+else
+ ac_res=yes
+fi
+eval ac_cv_prog_make_${ac_make}_case=$ac_res
+rm -f conftest.make
+fi
+eval ac_res=\$ac_cv_prog_make_${ac_make}_case
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ if eval test \$ac_cv_prog_make_${ac_make}_case = yes; then
+ MAKE_CASE_SENSITIVE_TRUE=
+ MAKE_CASE_SENSITIVE_FALSE='#'
+else
+ MAKE_CASE_SENSITIVE_TRUE='#'
+ MAKE_CASE_SENSITIVE_FALSE=
+fi
+
+
+
+
+## ------------ ##
+## Conclusion. ##
+## ------------ ##
+
+GNUmakefile=GNUmakefile
+ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
+
+
+ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile lib/Autom4te/Makefile lib/autoscan/Makefile lib/m4sugar/Makefile lib/autoconf/Makefile lib/autotest/Makefile bin/Makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+if test -z "${MAKE_CASE_SENSITIVE_TRUE}" && test -z "${MAKE_CASE_SENSITIVE_FALSE}"; then
+ as_fn_error $? "conditional \"MAKE_CASE_SENSITIVE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU Autoconf $as_me 2.69, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>.
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+GNU Autoconf config.status 2.69
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+
+GNUmakefile=$GNUmakefile
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "tests/atconfig") CONFIG_COMMANDS="$CONFIG_COMMANDS tests/atconfig" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "tests/atlocal") CONFIG_FILES="$CONFIG_FILES tests/atlocal" ;;
+ "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
+ "lib/emacs/Makefile") CONFIG_FILES="$CONFIG_FILES lib/emacs/Makefile" ;;
+ "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "lib/Autom4te/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Autom4te/Makefile" ;;
+ "lib/autoscan/Makefile") CONFIG_FILES="$CONFIG_FILES lib/autoscan/Makefile" ;;
+ "lib/m4sugar/Makefile") CONFIG_FILES="$CONFIG_FILES lib/m4sugar/Makefile" ;;
+ "lib/autoconf/Makefile") CONFIG_FILES="$CONFIG_FILES lib/autoconf/Makefile" ;;
+ "lib/autotest/Makefile") CONFIG_FILES="$CONFIG_FILES lib/autotest/Makefile" ;;
+ "bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES :L $CONFIG_LINKS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+ :L)
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+
+ if test ! -r "$ac_source"; then
+ as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $ac_source in
+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+ fi
+ ;;
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "tests/atconfig":C) cat >tests/atconfig <<ATEOF
+# Configurable variable values for building test suites.
+# Generated by $0.
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# The test suite will define top_srcdir=$at_top_srcdir/../.. etc.
+at_testdir='tests'
+abs_builddir='$ac_abs_builddir'
+at_srcdir='$ac_srcdir'
+abs_srcdir='$ac_abs_srcdir'
+at_top_srcdir='$ac_top_srcdir'
+abs_top_srcdir='$ac_abs_top_srcdir'
+at_top_build_prefix='$ac_top_build_prefix'
+abs_top_builddir='$ac_abs_top_builddir'
+
+# Backward compatibility with Autotest <= 2.59b:
+at_top_builddir=\$at_top_build_prefix
+
+AUTOTEST_PATH='tests'
+
+SHELL=\${CONFIG_SHELL-'$SHELL'}
+ATEOF
+ ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+# Report the state of this version of Autoconf if this is a beta.
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..696e513
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,241 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# Copyright (C) 1992-1995, 1999-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# We need AC_CONFIG_TESTDIR, AC_PROG_SED, AC_PROG_GREP.
+AC_PREREQ([2.60])
+
+AC_INIT([GNU Autoconf],
+ m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+ [bug-autoconf@gnu.org])
+AC_CONFIG_SRCDIR([lib/autoconf/autoconf.m4])
+
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([1.11 dist-xz readme-alpha no-texinfo.tex std-options])
+
+AB_INIT
+
+# We use `/bin/sh -n script' to check that there are no syntax errors
+# in the scripts. Although incredible, there are /bin/sh that go into
+# endless loops with `-n', e.g., SunOS's:
+#
+# $ uname -a
+# SunOS ondine 4.1.3 2 sun4m unknown
+# $ cat endless.sh
+# while false
+# do
+# :
+# done
+# exit 0
+# $ time sh endless.sh
+# sh endless.sh 0,02s user 0,03s system 78% cpu 0,064 total
+# $ time sh -nx endless.sh
+# ^Csh -nx endless.sh 3,67s user 0,03s system 63% cpu 5,868 total
+#
+# Also, some implementations of /bin/sh (e.g., Solaris 8) are soooo slow
+# that they are unusable on large scripts like our testsuite.
+
+# So before using `/bin/sh -n' to check our scripts, we first check
+# that `/bin/sh -n' is known to not have these problems.
+
+AC_CACHE_CHECK([whether /bin/sh -n is known to work], [ac_cv_sh_n_works],
+[if (
+ unset BASH_VERSION ZSH_VERSION
+ /bin/sh -c '
+ test -n "${BASH_VERSION+set}" || # Bash
+ test -n "${KSH_VERSION+set}" || # pdksh
+ test -n "${ZSH_VERSION+set}" || # zsh
+ test -n "${.sh.version}" # ksh93; put this last since its syntax is dodgy
+ '
+ ) 2>/dev/null
+then ac_cv_sh_n_works=yes
+else ac_cv_sh_n_works=no
+fi
+])
+AC_SUBST([ac_cv_sh_n_works])
+
+AC_MSG_CHECKING([for characters that cannot appear in file names])
+AC_CACHE_VAL([ac_cv_unsupported_fs_chars],
+[ac_cv_unsupported_fs_chars=
+for c in '\\' \" '<' '>' '*' '?' '|'
+do
+ touch "conftest.t${c}t" 2>/dev/null
+ test -f "conftest.t${c}t" && rm -f "conftest.t${c}t" && continue
+ # $c cannot be used in a file name.
+ ac_cv_unsupported_fs_chars=$ac_cv_unsupported_fs_chars$c
+done
+])
+if test -n "$ac_cv_unsupported_fs_chars"; then
+ AC_MSG_RESULT([$ac_cv_unsupported_fs_chars])
+else
+ AC_MSG_RESULT([none])
+fi
+
+AC_SUBST([ac_cv_unsupported_fs_chars])
+
+AC_CACHE_CHECK([whether directories can have trailing spaces],
+ [ac_cv_dir_trailing_space],
+[rm -rf 'conftest.d ' && mkdir 'conftest.d ' && touch 'conftest.d /tfile' 2>/dev/null
+stat=$?
+rm -rf 'conftest.d '
+case $stat$? in #(
+ 00) ac_cv_dir_trailing_space=yes ;; #(
+ *) ac_cv_dir_trailing_space=no ;;
+esac
+])
+AC_SUBST([ac_cv_dir_trailing_space])
+
+# Initialize the test suite.
+AC_CONFIG_TESTDIR([tests])
+AC_CONFIG_FILES([tests/Makefile tests/atlocal])
+AC_PATH_PROG([EXPR], [expr])
+
+
+## ---- ##
+## M4. ##
+## ---- ##
+
+# We use an absolute name for GNU m4 so even if users have another m4 first in
+# their path, the installer can configure with a path that has GNU m4
+# on it and get that path embedded in the installed autoconf and
+# autoheader scripts.
+AC_PROG_GNU_M4
+
+## ----------- ##
+## Man pages. ##
+## ----------- ##
+
+AC_CONFIG_FILES([man/Makefile])
+AM_MISSING_PROG([HELP2MAN], [help2man])
+
+
+## ------ ##
+## Perl. ##
+## ------ ##
+
+# We use an absolute name for perl so the #! line in autoscan will work.
+AC_PATH_PROG([PERL], [perl], [no])
+AC_SUBST([PERL])dnl
+if test "$PERL" = no; then
+ AC_MSG_ERROR([perl is not found])
+fi
+$PERL -e 'require 5.006;' || {
+ AC_MSG_ERROR([Perl 5.006 or better is required])
+}
+
+# Find out whether the system supports flock
+# Note this test does not try to find out whether it works with this
+# particular file system. It merely avoids us running flock on systems
+# where that bails out.
+AC_CACHE_CHECK([whether $PERL Fcntl::flock is implemented],
+ [ac_cv_perl_flock_implemented],
+ [echo lock me > conftest.fil
+ if $PERL -e 'use Fcntl ":flock"; flock("conftest.fil", LOCK_EX); 1;'; then
+ ac_cv_perl_flock_implemented=yes
+ else
+ ac_cv_perl_flock_implemented=no
+ fi
+ rm -f conftest.fil
+ ])
+AC_SUBST([PERL_FLOCK], [$ac_cv_perl_flock_implemented])
+
+
+## ------- ##
+## Emacs. ##
+## ------- ##
+
+AC_CONFIG_FILES([lib/emacs/Makefile])
+TEST_EMACS=$EMACS
+test x"$TEST_EMACS" = xt && TEST_EMACS=
+AC_CHECK_PROGS([TEST_EMACS], [emacs xemacs], [no])
+
+# autoconf-mode.el and autotest-mode.el do not work with older version of
+# Emacs (i.e. 18.x.x). During byte-compilation, Emacs complains:
+# "Variable (broken nil) seen on pass 2 of byte compiler but not pass 1"
+# We detect this problem here.
+AS_IF([test "$TEST_EMACS" != no],
+ [AC_CACHE_CHECK([whether $TEST_EMACS is sufficiently recent],
+ [ac_cv_prog_emacs_ok],
+ [# Note: The quoted "EOF" is intentional. It protects the ` in the text.
+ cat >conftest.el << "EOF"
+ (defvar broken)
+ (defun broken-mode () (setq broken-defaults `(broken nil)))
+EOF
+ AS_IF([AC_RUN_LOG(
+ [$TEST_EMACS -batch -q -f batch-byte-compile conftest.el 1>&2])],
+ [ac_cv_prog_emacs_ok=yes], [ac_cv_prog_emacs_ok=no])
+ rm -f conftest.el conftest.elc])
+ AS_IF([test $ac_cv_prog_emacs_ok = no], [TEST_EMACS=no])])
+
+AC_SUBST([EMACS], [$TEST_EMACS])
+
+AM_PATH_LISPDIR
+
+
+## ------------ ##
+## Grep & sed. ##
+## ------------ ##
+AC_PROG_GREP
+AC_PROG_EGREP
+AC_PROG_SED
+
+
+## ----- ##
+## Make. ##
+## ----- ##
+AC_PROG_MAKE_CASE_SENSITIVE
+
+
+## ------------ ##
+## Conclusion. ##
+## ------------ ##
+
+dnl Allow maintainer rules under GNU make even in VPATH builds. This does
+dnl not work in autoconf 2.61 or earlier, but we don't want to require
+dnl unreleased autoconf during bootstrap, hence the version test.
+dnl TODO remove the version check once we depend on autoconf 2.62.
+dnl Meanwhile, we must use a shell variable so that we bypass automake's
+dnl attempts to remove the sole copy of GNUmakefile in a non-VPATH build
+dnl during 'make distclean'.
+dnl TODO avoid the shell variable once automake is fixed.
+GNUmakefile=GNUmakefile
+m4_if(m4_version_compare([2.61a.100],
+ m4_defn([m4_PACKAGE_VERSION])), [1], [],
+ [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
+ [GNUmakefile=$GNUmakefile])])
+
+AC_CONFIG_FILES([Makefile doc/Makefile
+ lib/Makefile lib/Autom4te/Makefile lib/autoscan/Makefile
+ lib/m4sugar/Makefile
+ lib/autoconf/Makefile lib/autotest/Makefile
+ bin/Makefile])
+
+AC_OUTPUT
+# Report the state of this version of Autoconf if this is a beta.
+m4_bmatch(m4_defn([AC_PACKAGE_VERSION]), [[-a-z]],
+[ cat <<EOF
+
+You are about to use an experimental version of Autoconf. Be sure to
+read the relevant mailing lists, most importantly <autoconf@gnu.org>.
+
+Below you will find information on the status of this version of Autoconf.
+
+EOF
+ sed -n '/^\* Status/,$p' $srcdir/BUGS
+echo
+])dnl
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..a3075ff
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,33 @@
+# Make Autoconf documentation.
+
+# Copyright (C) 2000-2003, 2007-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+AM_MAKEINFOFLAGS = --no-split
+TEXI2HTML_FLAGS = -split_chapter
+TEXINFO_TEX = ../build-aux/texinfo.tex
+
+info_TEXINFOS = autoconf.texi standards.texi
+autoconf_TEXINFOS = fdl.texi install.texi
+standards_TEXINFOS = fdl.texi gnu-oids.texi make-stds.texi
+
+EXTRA_DIST = gendocs_template
+
+# Files from texi2dvi that should be removed, but which Automake does
+# not know.
+CLEANFILES = autoconf.ACs autoconf.cvs autoconf.MSs autoconf.prs \
+ autoconf.ATs autoconf.evs autoconf.fns autoconf.ovs \
+ autoconf.ca autoconf.CA autoconf.cas autoconf.CAs \
+ autoconf.tmp
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..647c92c
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,665 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf documentation.
+
+# Copyright (C) 2000-2003, 2007-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(autoconf_TEXINFOS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/stamp-vti \
+ $(srcdir)/version.texi $(standards_TEXINFOS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = $(srcdir)/autoconf.info $(srcdir)/standards.info
+am__TEXINFO_TEX_DIR = $(srcdir)/../build-aux
+DVIS = autoconf.dvi standards.dvi
+PDFS = autoconf.pdf standards.pdf
+PSS = autoconf.ps standards.ps
+HTMLS = autoconf.html standards.html
+TEXINFOS = autoconf.texi standards.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__installdirs = "$(DESTDIR)$(infodir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_MAKEINFOFLAGS = --no-split
+TEXI2HTML_FLAGS = -split_chapter
+TEXINFO_TEX = ../build-aux/texinfo.tex
+info_TEXINFOS = autoconf.texi standards.texi
+autoconf_TEXINFOS = fdl.texi install.texi
+standards_TEXINFOS = fdl.texi gnu-oids.texi make-stds.texi
+EXTRA_DIST = gendocs_template
+
+# Files from texi2dvi that should be removed, but which Automake does
+# not know.
+CLEANFILES = autoconf.ACs autoconf.cvs autoconf.MSs autoconf.prs \
+ autoconf.ATs autoconf.evs autoconf.fns autoconf.ovs \
+ autoconf.ca autoconf.CA autoconf.cas autoconf.CAs \
+ autoconf.tmp
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+.texi.info:
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
+
+.texi.pdf:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $<
+
+.texi.html:
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/autoconf.info: autoconf.texi $(srcdir)/version.texi $(autoconf_TEXINFOS)
+autoconf.dvi: autoconf.texi $(srcdir)/version.texi $(autoconf_TEXINFOS)
+autoconf.pdf: autoconf.texi $(srcdir)/version.texi $(autoconf_TEXINFOS)
+autoconf.html: autoconf.texi $(srcdir)/version.texi $(autoconf_TEXINFOS)
+$(srcdir)/version.texi: $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: autoconf.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./autoconf.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/autoconf.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi"; \
+ cp vti.tmp $(srcdir)/version.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+$(srcdir)/standards.info: standards.texi $(standards_TEXINFOS)
+standards.dvi: standards.texi $(standards_TEXINFOS)
+standards.pdf: standards.texi $(standards_TEXINFOS)
+standards.html: standards.texi $(standards_TEXINFOS)
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && \
+ (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf autoconf.AC autoconf.ACs autoconf.AT autoconf.ATs autoconf.CA \
+ autoconf.CAs autoconf.MS autoconf.MSs autoconf.aux \
+ autoconf.cp autoconf.cps autoconf.cv autoconf.cvs \
+ autoconf.ev autoconf.evs autoconf.fn autoconf.fns \
+ autoconf.ky autoconf.kys autoconf.log autoconf.ov \
+ autoconf.ovs autoconf.pg autoconf.pgs autoconf.pr \
+ autoconf.prs autoconf.tmp autoconf.toc autoconf.tp \
+ autoconf.tps autoconf.vr standards.aux standards.cp \
+ standards.cps standards.fn standards.ky standards.log \
+ standards.pg standards.tmp standards.toc standards.tp \
+ standards.tps standards.vr
+
+clean-aminfo:
+ -test -z "autoconf.dvi autoconf.pdf autoconf.ps autoconf.html standards.dvi \
+ standards.pdf standards.ps standards.html" \
+ || rm -rf autoconf.dvi autoconf.pdf autoconf.ps autoconf.html standards.dvi \
+ standards.pdf standards.ps standards.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-aminfo clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ if test -d "$$d$$p"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d$$p"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
+ dist-info distclean distclean-generic distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-dvi-am uninstall-html-am \
+ uninstall-info-am uninstall-pdf-am uninstall-ps-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/autoconf.info b/doc/autoconf.info
new file mode 100644
index 0000000..1ba3bfd
--- /dev/null
+++ b/doc/autoconf.info
@@ -0,0 +1,25690 @@
+This is autoconf.info, produced by makeinfo version 4.13 from
+autoconf.texi.
+
+This manual (24 April 2012) is for GNU Autoconf (version 2.69), a
+package for creating scripts to configure source code packages using
+templates and an M4 macro package.
+
+ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License."
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Autoconf: (autoconf). Create source code configuration scripts.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* autoscan: (autoconf)autoscan Invocation.
+ Semi-automatic `configure.ac' writing
+* ifnames: (autoconf)ifnames Invocation. Listing conditionals in source.
+* autoconf-invocation: (autoconf)autoconf Invocation.
+ How to create configuration scripts
+* autoreconf: (autoconf)autoreconf Invocation.
+ Remaking multiple `configure' scripts
+* autoheader: (autoconf)autoheader Invocation.
+ How to create configuration templates
+* autom4te: (autoconf)autom4te Invocation.
+ The Autoconf executables backbone
+* configure: (autoconf)configure Invocation. Configuring a package.
+* autoupdate: (autoconf)autoupdate Invocation.
+ Automatic update of `configure.ac'
+* config.status: (autoconf)config.status Invocation. Recreating configurations.
+* testsuite: (autoconf)testsuite Invocation. Running an Autotest test suite.
+END-INFO-DIR-ENTRY
+
+
+File: autoconf.info, Node: Top, Next: Introduction, Up: (dir)
+
+Autoconf
+********
+
+This manual (24 April 2012) is for GNU Autoconf (version 2.69), a
+package for creating scripts to configure source code packages using
+templates and an M4 macro package.
+
+ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover texts, and
+ no Back-Cover Texts. A copy of the license is included in the
+ section entitled "GNU Free Documentation License."
+
+* Menu:
+
+* Introduction:: Autoconf's purpose, strengths, and weaknesses
+* The GNU Build System:: A set of tools for portable software packages
+* Making configure Scripts:: How to organize and produce Autoconf scripts
+* Setup:: Initialization and output
+* Existing Tests:: Macros that check for particular features
+* Writing Tests:: How to write new feature checks
+* Results:: What to do with results from feature checks
+* Programming in M4:: Layers on top of which Autoconf is written
+* Programming in M4sh:: Shell portability layer
+* Writing Autoconf Macros:: Adding new macros to Autoconf
+* Portable Shell:: Shell script portability pitfalls
+* Portable Make:: Makefile portability pitfalls
+* Portable C and C++:: C and C++ portability pitfalls
+* Manual Configuration:: Selecting features that can't be guessed
+* Site Configuration:: Local defaults for `configure'
+* Running configure Scripts:: How to use the Autoconf output
+* config.status Invocation:: Recreating a configuration
+* Obsolete Constructs:: Kept for backward compatibility
+* Using Autotest:: Creating portable test suites
+* FAQ:: Frequent Autoconf Questions, with answers
+* History:: History of Autoconf
+* GNU Free Documentation License:: License for copying this manual
+* Indices:: Indices of symbols, concepts, etc.
+
+ --- The Detailed Node Listing ---
+
+The GNU Build System
+
+* Automake:: Escaping makefile hell
+* Gnulib:: The GNU portability library
+* Libtool:: Building libraries portably
+* Pointers:: More info on the GNU build system
+
+Making `configure' Scripts
+
+* Writing Autoconf Input:: What to put in an Autoconf input file
+* autoscan Invocation:: Semi-automatic `configure.ac' writing
+* ifnames Invocation:: Listing the conditionals in source code
+* autoconf Invocation:: How to create configuration scripts
+* autoreconf Invocation:: Remaking multiple `configure' scripts
+
+Writing `configure.ac'
+
+* Shell Script Compiler:: Autoconf as solution of a problem
+* Autoconf Language:: Programming in Autoconf
+* Autoconf Input Layout:: Standard organization of `configure.ac'
+
+Initialization and Output Files
+
+* Initializing configure:: Option processing etc.
+* Versioning:: Dealing with Autoconf versions
+* Notices:: Copyright, version numbers in `configure'
+* Input:: Where Autoconf should find files
+* Output:: Outputting results from the configuration
+* Configuration Actions:: Preparing the output based on results
+* Configuration Files:: Creating output files
+* Makefile Substitutions:: Using output variables in makefiles
+* Configuration Headers:: Creating a configuration header file
+* Configuration Commands:: Running arbitrary instantiation commands
+* Configuration Links:: Links depending on the configuration
+* Subdirectories:: Configuring independent packages together
+* Default Prefix:: Changing the default installation prefix
+
+Substitutions in Makefiles
+
+* Preset Output Variables:: Output variables that are always set
+* Installation Directory Variables:: Other preset output variables
+* Changed Directory Variables:: Warnings about `datarootdir'
+* Build Directories:: Supporting multiple concurrent compiles
+* Automatic Remaking:: Makefile rules for configuring
+
+Configuration Header Files
+
+* Header Templates:: Input for the configuration headers
+* autoheader Invocation:: How to create configuration templates
+* Autoheader Macros:: How to specify CPP templates
+
+Existing Tests
+
+* Common Behavior:: Macros' standard schemes
+* Alternative Programs:: Selecting between alternative programs
+* Files:: Checking for the existence of files
+* Libraries:: Library archives that might be missing
+* Library Functions:: C library functions that might be missing
+* Header Files:: Header files that might be missing
+* Declarations:: Declarations that may be missing
+* Structures:: Structures or members that might be missing
+* Types:: Types that might be missing
+* Compilers and Preprocessors:: Checking for compiling programs
+* System Services:: Operating system services
+* Posix Variants:: Special kludges for specific Posix variants
+* Erlang Libraries:: Checking for the existence of Erlang libraries
+
+Common Behavior
+
+* Standard Symbols:: Symbols defined by the macros
+* Default Includes:: Includes used by the generic macros
+
+Alternative Programs
+
+* Particular Programs:: Special handling to find certain programs
+* Generic Programs:: How to find other programs
+
+Library Functions
+
+* Function Portability:: Pitfalls with usual functions
+* Particular Functions:: Special handling to find certain functions
+* Generic Functions:: How to find other functions
+
+Header Files
+
+* Header Portability:: Collected knowledge on common headers
+* Particular Headers:: Special handling to find certain headers
+* Generic Headers:: How to find other headers
+
+Declarations
+
+* Particular Declarations:: Macros to check for certain declarations
+* Generic Declarations:: How to find other declarations
+
+Structures
+
+* Particular Structures:: Macros to check for certain structure members
+* Generic Structures:: How to find other structure members
+
+Types
+
+* Particular Types:: Special handling to find certain types
+* Generic Types:: How to find other types
+
+Compilers and Preprocessors
+
+* Specific Compiler Characteristics:: Some portability issues
+* Generic Compiler Characteristics:: Language independent tests and features
+* C Compiler:: Checking its characteristics
+* C++ Compiler:: Likewise
+* Objective C Compiler:: Likewise
+* Objective C++ Compiler:: Likewise
+* Erlang Compiler and Interpreter:: Likewise
+* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
+
+Writing Tests
+
+* Language Choice:: Selecting which language to use for testing
+* Writing Test Programs:: Forging source files for compilers
+* Running the Preprocessor:: Detecting preprocessor symbols
+* Running the Compiler:: Detecting language or header features
+* Running the Linker:: Detecting library features
+* Runtime:: Testing for runtime features
+* Systemology:: A zoology of operating systems
+* Multiple Cases:: Tests for several possible values
+
+Writing Test Programs
+
+* Guidelines:: General rules for writing test programs
+* Test Functions:: Avoiding pitfalls in test programs
+* Generating Sources:: Source program boilerplate
+
+Results of Tests
+
+* Defining Symbols:: Defining C preprocessor symbols
+* Setting Output Variables:: Replacing variables in output files
+* Special Chars in Variables:: Characters to beware of in variables
+* Caching Results:: Speeding up subsequent `configure' runs
+* Printing Messages:: Notifying `configure' users
+
+Caching Results
+
+* Cache Variable Names:: Shell variables used in caches
+* Cache Files:: Files `configure' uses for caching
+* Cache Checkpointing:: Loading and saving the cache file
+
+Programming in M4
+
+* M4 Quotation:: Protecting macros from unwanted expansion
+* Using autom4te:: The Autoconf executables backbone
+* Programming in M4sugar:: Convenient pure M4 macros
+* Debugging via autom4te:: Figuring out what M4 was doing
+
+M4 Quotation
+
+* Active Characters:: Characters that change the behavior of M4
+* One Macro Call:: Quotation and one macro call
+* Quoting and Parameters:: M4 vs. shell parameters
+* Quotation and Nested Macros:: Macros calling macros
+* Changequote is Evil:: Worse than INTERCAL: M4 + changequote
+* Quadrigraphs:: Another way to escape special characters
+* Balancing Parentheses:: Dealing with unbalanced parentheses
+* Quotation Rule Of Thumb:: One parenthesis, one quote
+
+Using `autom4te'
+
+* autom4te Invocation:: A GNU M4 wrapper
+* Customizing autom4te:: Customizing the Autoconf package
+
+Programming in M4sugar
+
+* Redefined M4 Macros:: M4 builtins changed in M4sugar
+* Diagnostic Macros:: Diagnostic messages from M4sugar
+* Diversion support:: Diversions in M4sugar
+* Conditional constructs:: Conditions in M4
+* Looping constructs:: Iteration in M4
+* Evaluation Macros:: More quotation and evaluation control
+* Text processing Macros:: String manipulation in M4
+* Number processing Macros:: Arithmetic computation in M4
+* Set manipulation Macros:: Set manipulation in M4
+* Forbidden Patterns:: Catching unexpanded macros
+
+Programming in M4sh
+
+* Common Shell Constructs:: Portability layer for common shell constructs
+* Polymorphic Variables:: Support for indirect variable names
+* Initialization Macros:: Macros to establish a sane shell environment
+* File Descriptor Macros:: File descriptor macros for input and output
+
+Writing Autoconf Macros
+
+* Macro Definitions:: Basic format of an Autoconf macro
+* Macro Names:: What to call your new macros
+* Reporting Messages:: Notifying `autoconf' users
+* Dependencies Between Macros:: What to do when macros depend on other macros
+* Obsoleting Macros:: Warning about old ways of doing things
+* Coding Style:: Writing Autoconf macros a` la Autoconf
+
+Dependencies Between Macros
+
+* Prerequisite Macros:: Ensuring required information
+* Suggested Ordering:: Warning about possible ordering problems
+* One-Shot Macros:: Ensuring a macro is called only once
+
+Portable Shell Programming
+
+* Shellology:: A zoology of shells
+* Invoking the Shell:: Invoking the shell as a command
+* Here-Documents:: Quirks and tricks
+* File Descriptors:: FDs and redirections
+* Signal Handling:: Shells, signals, and headaches
+* File System Conventions:: File names
+* Shell Pattern Matching:: Pattern matching
+* Shell Substitutions:: Variable and command expansions
+* Assignments:: Varying side effects of assignments
+* Parentheses:: Parentheses in shell scripts
+* Slashes:: Slashes in shell scripts
+* Special Shell Variables:: Variables you should not change
+* Shell Functions:: What to look out for if you use them
+* Limitations of Builtins:: Portable use of not so portable /bin/sh
+* Limitations of Usual Tools:: Portable use of portable tools
+
+Portable Make Programming
+
+* $< in Ordinary Make Rules:: $< in ordinary rules
+* Failure in Make Rules:: Failing portably in rules
+* Special Chars in Names:: Special Characters in Macro Names
+* Backslash-Newline-Empty:: Empty lines after backslash-newline
+* Backslash-Newline Comments:: Spanning comments across line boundaries
+* Long Lines in Makefiles:: Line length limitations
+* Macros and Submakes:: `make macro=value' and submakes
+* The Make Macro MAKEFLAGS:: `$(MAKEFLAGS)' portability issues
+* The Make Macro SHELL:: `$(SHELL)' portability issues
+* Parallel Make:: Parallel `make' quirks
+* Comments in Make Rules:: Other problems with Make comments
+* Newlines in Make Rules:: Using literal newlines in rules
+* Comments in Make Macros:: Other problems with Make comments in macros
+* Trailing whitespace in Make Macros:: Macro substitution problems
+* Command-line Macros and whitespace:: Whitespace trimming of values
+* obj/ and Make:: Don't name a subdirectory `obj'
+* make -k Status:: Exit status of `make -k'
+* VPATH and Make:: `VPATH' woes
+* Single Suffix Rules:: Single suffix rules and separated dependencies
+* Timestamps and Make:: Subsecond timestamp resolution
+
+`VPATH' and Make
+
+* Variables listed in VPATH:: `VPATH' must be literal on ancient hosts
+* VPATH and Double-colon:: Problems with `::' on ancient hosts
+* $< in Explicit Rules:: `$<' does not work in ordinary rules
+* Automatic Rule Rewriting:: `VPATH' goes wild on Solaris
+* Tru64 Directory Magic:: `mkdir' goes wild on Tru64
+* Make Target Lookup:: More details about `VPATH' lookup
+
+Portable C and C++ Programming
+
+* Varieties of Unportability:: How to make your programs unportable
+* Integer Overflow:: When integers get too large
+* Preprocessor Arithmetic:: `#if' expression problems
+* Null Pointers:: Properties of null pointers
+* Buffer Overruns:: Subscript errors and the like
+* Volatile Objects:: `volatile' and signals
+* Floating Point Portability:: Portable floating-point arithmetic
+* Exiting Portably:: Exiting and the exit status
+
+Integer Overflow
+
+* Integer Overflow Basics:: Why integer overflow is a problem
+* Signed Overflow Examples:: Examples of code assuming wraparound
+* Optimization and Wraparound:: Optimizations that break uses of wraparound
+* Signed Overflow Advice:: Practical advice for signed overflow issues
+* Signed Integer Division:: `INT_MIN / -1' and `INT_MIN % -1'
+
+Manual Configuration
+
+* Specifying Target Triplets:: Specifying target triplets
+* Canonicalizing:: Getting the canonical system type
+* Using System Type:: What to do with the system type
+
+Site Configuration
+
+* Help Formatting:: Customizing `configure --help'
+* External Software:: Working with other optional software
+* Package Options:: Selecting optional features
+* Pretty Help Strings:: Formatting help string
+* Option Checking:: Controlling checking of `configure' options
+* Site Details:: Configuring site details
+* Transforming Names:: Changing program names when installing
+* Site Defaults:: Giving `configure' local defaults
+
+Transforming Program Names When Installing
+
+* Transformation Options:: `configure' options to transform names
+* Transformation Examples:: Sample uses of transforming names
+* Transformation Rules:: Makefile uses of transforming names
+
+Running `configure' Scripts
+
+* Basic Installation:: Instructions for typical cases
+* Compilers and Options:: Selecting compilers and optimization
+* Multiple Architectures:: Compiling for multiple architectures at once
+* Installation Names:: Installing in different directories
+* Optional Features:: Selecting optional features
+* Particular Systems:: Particular systems
+* System Type:: Specifying the system type
+* Sharing Defaults:: Setting site-wide defaults for `configure'
+* Defining Variables:: Specifying the compiler etc.
+* configure Invocation:: Changing how `configure' runs
+
+Obsolete Constructs
+
+* Obsolete config.status Use:: Obsolete convention for `config.status'
+* acconfig Header:: Additional entries in `config.h.in'
+* autoupdate Invocation:: Automatic update of `configure.ac'
+* Obsolete Macros:: Backward compatibility macros
+* Autoconf 1:: Tips for upgrading your files
+* Autoconf 2.13:: Some fresher tips
+
+Upgrading From Version 1
+
+* Changed File Names:: Files you might rename
+* Changed Makefiles:: New things to put in `Makefile.in'
+* Changed Macros:: Macro calls you might replace
+* Changed Results:: Changes in how to check test results
+* Changed Macro Writing:: Better ways to write your own macros
+
+Upgrading From Version 2.13
+
+* Changed Quotation:: Broken code which used to work
+* New Macros:: Interaction with foreign macros
+* Hosts and Cross-Compilation:: Bugward compatibility kludges
+* AC_LIBOBJ vs LIBOBJS:: LIBOBJS is a forbidden token
+* AC_ACT_IFELSE vs AC_TRY_ACT:: A more generic scheme for testing sources
+
+Generating Test Suites with Autotest
+
+* Using an Autotest Test Suite:: Autotest and the user
+* Writing Testsuites:: Autotest macros
+* testsuite Invocation:: Running `testsuite' scripts
+* Making testsuite Scripts:: Using autom4te to create `testsuite'
+
+Using an Autotest Test Suite
+
+* testsuite Scripts:: The concepts of Autotest
+* Autotest Logs:: Their contents
+
+Frequent Autoconf Questions, with answers
+
+* Distributing:: Distributing `configure' scripts
+* Why GNU M4:: Why not use the standard M4?
+* Bootstrapping:: Autoconf and GNU M4 require each other?
+* Why Not Imake:: Why GNU uses `configure' instead of Imake
+* Defining Directories:: Passing `datadir' to program
+* Autom4te Cache:: What is it? Can I remove it?
+* Present But Cannot Be Compiled:: Compiler and Preprocessor Disagree
+* Expanded Before Required:: Expanded Before Required
+* Debugging:: Debugging `configure' scripts
+
+History of Autoconf
+
+* Genesis:: Prehistory and naming of `configure'
+* Exodus:: The plagues of M4 and Perl
+* Leviticus:: The priestly code of portability arrives
+* Numbers:: Growth and contributors
+* Deuteronomy:: Approaching the promises of easy configuration
+
+Indices
+
+* Environment Variable Index:: Index of environment variables used
+* Output Variable Index:: Index of variables set in output files
+* Preprocessor Symbol Index:: Index of C preprocessor symbols defined
+* Cache Variable Index:: Index of documented cache variables
+* Autoconf Macro Index:: Index of Autoconf macros
+* M4 Macro Index:: Index of M4, M4sugar, and M4sh macros
+* Autotest Macro Index:: Index of Autotest macros
+* Program & Function Index:: Index of those with portability problems
+* Concept Index:: General index
+
+
+File: autoconf.info, Node: Introduction, Next: The GNU Build System, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+ A physicist, an engineer, and a computer scientist were discussing the
+ nature of God. "Surely a Physicist," said the physicist, "because
+ early in the Creation, God made Light; and you know, Maxwell's
+ equations, the dual nature of electromagnetic waves, the relativistic
+ consequences..." "An Engineer!," said the engineer, "because
+before making Light, God split the Chaos into Land and Water; it takes a
+ hell of an engineer to handle that big amount of mud, and orderly
+ separation of solids from liquids..." The computer scientist
+ shouted: "And the Chaos, where do you think it was coming from, hmm?"
+
+ --Anonymous
+
+ Autoconf is a tool for producing shell scripts that automatically
+configure software source code packages to adapt to many kinds of
+Posix-like systems. The configuration scripts produced by Autoconf are
+independent of Autoconf when they are run, so their users do not need
+to have Autoconf.
+
+ The configuration scripts produced by Autoconf require no manual user
+intervention when run; they do not normally even need an argument
+specifying the system type. Instead, they individually test for the
+presence of each feature that the software package they are for might
+need. (Before each check, they print a one-line message stating what
+they are checking for, so the user doesn't get too bored while waiting
+for the script to finish.) As a result, they deal well with systems
+that are hybrids or customized from the more common Posix variants.
+There is no need to maintain files that list the features supported by
+each release of each variant of Posix.
+
+ For each software package that Autoconf is used with, it creates a
+configuration script from a template file that lists the system features
+that the package needs or can use. After the shell code to recognize
+and respond to a system feature has been written, Autoconf allows it to
+be shared by many software packages that can use (or need) that feature.
+If it later turns out that the shell code needs adjustment for some
+reason, it needs to be changed in only one place; all of the
+configuration scripts can be regenerated automatically to take advantage
+of the updated code.
+
+ Those who do not understand Autoconf are condemned to reinvent it,
+poorly. The primary goal of Autoconf is making the _user's_ life
+easier; making the _maintainer's_ life easier is only a secondary goal.
+Put another way, the primary goal is not to make the generation of
+`configure' automatic for package maintainers (although patches along
+that front are welcome, since package maintainers form the user base of
+Autoconf); rather, the goal is to make `configure' painless, portable,
+and predictable for the end user of each "autoconfiscated" package.
+And to this degree, Autoconf is highly successful at its goal -- most
+complaints to the Autoconf list are about difficulties in writing
+Autoconf input, and not in the behavior of the resulting `configure'.
+Even packages that don't use Autoconf will generally provide a
+`configure' script, and the most common complaint about these
+alternative home-grown scripts is that they fail to meet one or more of
+the GNU Coding Standards (*note Configuration:
+(standards)Configuration.) that users have come to expect from
+Autoconf-generated `configure' scripts.
+
+ The Metaconfig package is similar in purpose to Autoconf, but the
+scripts it produces require manual user intervention, which is quite
+inconvenient when configuring large source trees. Unlike Metaconfig
+scripts, Autoconf scripts can support cross-compiling, if some care is
+taken in writing them.
+
+ Autoconf does not solve all problems related to making portable
+software packages--for a more complete solution, it should be used in
+concert with other GNU build tools like Automake and Libtool. These
+other tools take on jobs like the creation of a portable, recursive
+makefile with all of the standard targets, linking of shared libraries,
+and so on. *Note The GNU Build System::, for more information.
+
+ Autoconf imposes some restrictions on the names of macros used with
+`#if' in C programs (*note Preprocessor Symbol Index::).
+
+ Autoconf requires GNU M4 version 1.4.6 or later in order to generate
+the scripts. It uses features that some versions of M4, including GNU
+M4 1.3, do not have. Autoconf works better with GNU M4 version 1.4.14
+or later, though this is not required.
+
+ *Note Autoconf 1::, for information about upgrading from version 1.
+*Note History::, for the story of Autoconf's development. *Note FAQ::,
+for answers to some common questions about Autoconf.
+
+ See the Autoconf web page (http://www.gnu.org/software/autoconf/)
+for up-to-date information, details on the mailing lists, pointers to a
+list of known bugs, etc.
+
+ Mail suggestions to the Autoconf mailing list <autoconf@gnu.org>.
+Past suggestions are archived
+(http://lists.gnu.org/archive/html/autoconf/).
+
+ Mail bug reports to the Autoconf Bugs mailing list
+<bug-autoconf@gnu.org>. Past bug reports are archived
+(http://lists.gnu.org/archive/html/bug-autoconf/).
+
+ If possible, first check that your bug is not already solved in
+current development versions, and that it has not been reported yet.
+Be sure to include all the needed information and a short
+`configure.ac' that demonstrates the problem.
+
+ Autoconf's development tree is accessible via `git'; see the
+Autoconf Summary (http://savannah.gnu.org/projects/autoconf/) for
+details, or view the actual repository
+(http://git.sv.gnu.org/gitweb/?p=autoconf.git). Anonymous CVS access
+is also available, see `README' for more details. Patches relative to
+the current `git' version can be sent for review to the Autoconf
+Patches mailing list <autoconf-patches@gnu.org>, with discussion on
+prior patches archived
+(http://lists.gnu.org/archive/html/autoconf-patches/); and all commits
+are posted in the read-only Autoconf Commit mailing list
+<autoconf-commit@gnu.org>, which is also archived
+(http://lists.gnu.org/archive/html/autoconf-commit/).
+
+ Because of its mission, the Autoconf package itself includes only a
+set of often-used macros that have already demonstrated their
+usefulness. Nevertheless, if you wish to share your macros, or find
+existing ones, see the Autoconf Macro Archive
+(http://www.gnu.org/software/autoconf-archive/), which is kindly run by
+Peter Simons <simons@cryp.to>.
+
+
+File: autoconf.info, Node: The GNU Build System, Next: Making configure Scripts, Prev: Introduction, Up: Top
+
+2 The GNU Build System
+**********************
+
+Autoconf solves an important problem--reliable discovery of
+system-specific build and runtime information--but this is only one
+piece of the puzzle for the development of portable software. To this
+end, the GNU project has developed a suite of integrated utilities to
+finish the job Autoconf started: the GNU build system, whose most
+important components are Autoconf, Automake, and Libtool. In this
+chapter, we introduce you to those tools, point you to sources of more
+information, and try to convince you to use the entire GNU build system
+for your software.
+
+* Menu:
+
+* Automake:: Escaping makefile hell
+* Gnulib:: The GNU portability library
+* Libtool:: Building libraries portably
+* Pointers:: More info on the GNU build system
+
+
+File: autoconf.info, Node: Automake, Next: Gnulib, Up: The GNU Build System
+
+2.1 Automake
+============
+
+The ubiquity of `make' means that a makefile is almost the only viable
+way to distribute automatic build rules for software, but one quickly
+runs into its numerous limitations. Its lack of support for automatic
+dependency tracking, recursive builds in subdirectories, reliable
+timestamps (e.g., for network file systems), and so on, mean that
+developers must painfully (and often incorrectly) reinvent the wheel
+for each project. Portability is non-trivial, thanks to the quirks of
+`make' on many systems. On top of all this is the manual labor
+required to implement the many standard targets that users have come to
+expect (`make install', `make distclean', `make uninstall', etc.).
+Since you are, of course, using Autoconf, you also have to insert
+repetitive code in your `Makefile.in' to recognize `@CC@', `@CFLAGS@',
+and other substitutions provided by `configure'. Into this mess steps
+"Automake".
+
+ Automake allows you to specify your build needs in a `Makefile.am'
+file with a vastly simpler and more powerful syntax than that of a plain
+makefile, and then generates a portable `Makefile.in' for use with
+Autoconf. For example, the `Makefile.am' to build and install a simple
+"Hello world" program might look like:
+
+ bin_PROGRAMS = hello
+ hello_SOURCES = hello.c
+
+The resulting `Makefile.in' (~400 lines) automatically supports all the
+standard targets, the substitutions provided by Autoconf, automatic
+dependency tracking, `VPATH' building, and so on. `make' builds the
+`hello' program, and `make install' installs it in `/usr/local/bin' (or
+whatever prefix was given to `configure', if not `/usr/local').
+
+ The benefits of Automake increase for larger packages (especially
+ones with subdirectories), but even for small programs the added
+convenience and portability can be substantial. And that's not all...
+
+
+File: autoconf.info, Node: Gnulib, Next: Libtool, Prev: Automake, Up: The GNU Build System
+
+2.2 Gnulib
+==========
+
+GNU software has a well-deserved reputation for running on many
+different types of systems. While our primary goal is to write
+software for the GNU system, many users and developers have been
+introduced to us through the systems that they were already using.
+
+ Gnulib is a central location for common GNU code, intended to be
+shared among free software packages. Its components are typically
+shared at the source level, rather than being a library that gets built,
+installed, and linked against. The idea is to copy files from Gnulib
+into your own source tree. There is no distribution tarball; developers
+should just grab source modules from the repository. The source files
+are available online, under various licenses, mostly GNU GPL or GNU
+LGPL.
+
+ Gnulib modules typically contain C source code along with Autoconf
+macros used to configure the source code. For example, the Gnulib
+`stdbool' module implements a `stdbool.h' header that nearly conforms
+to C99, even on old-fashioned hosts that lack `stdbool.h'. This module
+contains a source file for the replacement header, along with an
+Autoconf macro that arranges to use the replacement header on
+old-fashioned systems.
+
+
+File: autoconf.info, Node: Libtool, Next: Pointers, Prev: Gnulib, Up: The GNU Build System
+
+2.3 Libtool
+===========
+
+Often, one wants to build not only programs, but libraries, so that
+other programs can benefit from the fruits of your labor. Ideally, one
+would like to produce _shared_ (dynamically linked) libraries, which
+can be used by multiple programs without duplication on disk or in
+memory and can be updated independently of the linked programs.
+Producing shared libraries portably, however, is the stuff of
+nightmares--each system has its own incompatible tools, compiler flags,
+and magic incantations. Fortunately, GNU provides a solution:
+"Libtool".
+
+ Libtool handles all the requirements of building shared libraries for
+you, and at this time seems to be the _only_ way to do so with any
+portability. It also handles many other headaches, such as: the
+interaction of Make rules with the variable suffixes of shared
+libraries, linking reliably with shared libraries before they are
+installed by the superuser, and supplying a consistent versioning system
+(so that different versions of a library can be installed or upgraded
+without breaking binary compatibility). Although Libtool, like
+Autoconf, can be used without Automake, it is most simply utilized in
+conjunction with Automake--there, Libtool is used automatically
+whenever shared libraries are needed, and you need not know its syntax.
+
+
+File: autoconf.info, Node: Pointers, Prev: Libtool, Up: The GNU Build System
+
+2.4 Pointers
+============
+
+Developers who are used to the simplicity of `make' for small projects
+on a single system might be daunted at the prospect of learning to use
+Automake and Autoconf. As your software is distributed to more and
+more users, however, you otherwise quickly find yourself putting lots
+of effort into reinventing the services that the GNU build tools
+provide, and making the same mistakes that they once made and overcame.
+(Besides, since you're already learning Autoconf, Automake is a piece
+of cake.)
+
+ There are a number of places that you can go to for more information
+on the GNU build tools.
+
+ - Web
+
+ The project home pages for Autoconf
+ (http://www.gnu.org/software/autoconf/), Automake
+ (http://www.gnu.org/software/automake/), Gnulib
+ (http://www.gnu.org/software/gnulib/), and Libtool
+ (http://www.gnu.org/software/libtool/).
+
+ - Automake Manual
+
+ *Note Automake: (automake)Top, for more information on Automake.
+
+ - Books
+
+ The book `GNU Autoconf, Automake and Libtool'(1) describes the
+ complete GNU build environment. You can also find the entire book
+ on-line (http://sources.redhat.com/autobook/).
+
+
+ ---------- Footnotes ----------
+
+ (1) `GNU Autoconf, Automake and Libtool', by G. V. Vaughan, B.
+Elliston, T. Tromey, and I. L. Taylor. SAMS (originally New Riders),
+2000, ISBN 1578701902.
+
+
+File: autoconf.info, Node: Making configure Scripts, Next: Setup, Prev: The GNU Build System, Up: Top
+
+3 Making `configure' Scripts
+****************************
+
+The configuration scripts that Autoconf produces are by convention
+called `configure'. When run, `configure' creates several files,
+replacing configuration parameters in them with appropriate values.
+The files that `configure' creates are:
+
+ - one or more `Makefile' files, usually one in each subdirectory of
+ the package (*note Makefile Substitutions::);
+
+ - optionally, a C header file, the name of which is configurable,
+ containing `#define' directives (*note Configuration Headers::);
+
+ - a shell script called `config.status' that, when run, recreates
+ the files listed above (*note config.status Invocation::);
+
+ - an optional shell script normally called `config.cache' (created
+ when using `configure --config-cache') that saves the results of
+ running many of the tests (*note Cache Files::);
+
+ - a file called `config.log' containing any messages produced by
+ compilers, to help debugging if `configure' makes a mistake.
+
+ To create a `configure' script with Autoconf, you need to write an
+Autoconf input file `configure.ac' (or `configure.in') and run
+`autoconf' on it. If you write your own feature tests to supplement
+those that come with Autoconf, you might also write files called
+`aclocal.m4' and `acsite.m4'. If you use a C header file to contain
+`#define' directives, you might also run `autoheader', and you can
+distribute the generated file `config.h.in' with the package.
+
+ Here is a diagram showing how the files that can be used in
+configuration are produced. Programs that are executed are suffixed by
+`*'. Optional files are enclosed in square brackets (`[]').
+`autoconf' and `autoheader' also read the installed Autoconf macro
+files (by reading `autoconf.m4').
+
+Files used in preparing a software package for distribution, when using
+just Autoconf:
+ your source files --> [autoscan*] --> [configure.scan] --> configure.ac
+
+ configure.ac --.
+ | .------> autoconf* -----> configure
+ [aclocal.m4] --+---+
+ | `-----> [autoheader*] --> [config.h.in]
+ [acsite.m4] ---'
+
+ Makefile.in
+
+Additionally, if you use Automake, the following additional productions
+come into play:
+
+ [acinclude.m4] --.
+ |
+ [local macros] --+--> aclocal* --> aclocal.m4
+ |
+ configure.ac ----'
+
+ configure.ac --.
+ +--> automake* --> Makefile.in
+ Makefile.am ---'
+
+Files used in configuring a software package:
+ .-------------> [config.cache]
+ configure* ------------+-------------> config.log
+ |
+ [config.h.in] -. v .-> [config.h] -.
+ +--> config.status* -+ +--> make*
+ Makefile.in ---' `-> Makefile ---'
+
+* Menu:
+
+* Writing Autoconf Input:: What to put in an Autoconf input file
+* autoscan Invocation:: Semi-automatic `configure.ac' writing
+* ifnames Invocation:: Listing the conditionals in source code
+* autoconf Invocation:: How to create configuration scripts
+* autoreconf Invocation:: Remaking multiple `configure' scripts
+
+
+File: autoconf.info, Node: Writing Autoconf Input, Next: autoscan Invocation, Up: Making configure Scripts
+
+3.1 Writing `configure.ac'
+==========================
+
+To produce a `configure' script for a software package, create a file
+called `configure.ac' that contains invocations of the Autoconf macros
+that test the system features your package needs or can use. Autoconf
+macros already exist to check for many features; see *note Existing
+Tests::, for their descriptions. For most other features, you can use
+Autoconf template macros to produce custom checks; see *note Writing
+Tests::, for information about them. For especially tricky or
+specialized features, `configure.ac' might need to contain some
+hand-crafted shell commands; see *note Portable Shell Programming:
+Portable Shell. The `autoscan' program can give you a good start in
+writing `configure.ac' (*note autoscan Invocation::, for more
+information).
+
+ Previous versions of Autoconf promoted the name `configure.in',
+which is somewhat ambiguous (the tool needed to process this file is not
+described by its extension), and introduces a slight confusion with
+`config.h.in' and so on (for which `.in' means "to be processed by
+`configure'"). Using `configure.ac' is now preferred.
+
+* Menu:
+
+* Shell Script Compiler:: Autoconf as solution of a problem
+* Autoconf Language:: Programming in Autoconf
+* Autoconf Input Layout:: Standard organization of `configure.ac'
+
+
+File: autoconf.info, Node: Shell Script Compiler, Next: Autoconf Language, Up: Writing Autoconf Input
+
+3.1.1 A Shell Script Compiler
+-----------------------------
+
+Just as for any other computer language, in order to properly program
+`configure.ac' in Autoconf you must understand _what_ problem the
+language tries to address and _how_ it does so.
+
+ The problem Autoconf addresses is that the world is a mess. After
+all, you are using Autoconf in order to have your package compile
+easily on all sorts of different systems, some of them being extremely
+hostile. Autoconf itself bears the price for these differences:
+`configure' must run on all those systems, and thus `configure' must
+limit itself to their lowest common denominator of features.
+
+ Naturally, you might then think of shell scripts; who needs
+`autoconf'? A set of properly written shell functions is enough to
+make it easy to write `configure' scripts by hand. Sigh!
+Unfortunately, even in 2008, where shells without any function support
+are far and few between, there are pitfalls to avoid when making use of
+them. Also, finding a Bourne shell that accepts shell functions is not
+trivial, even though there is almost always one on interesting porting
+targets.
+
+ So, what is really needed is some kind of compiler, `autoconf', that
+takes an Autoconf program, `configure.ac', and transforms it into a
+portable shell script, `configure'.
+
+ How does `autoconf' perform this task?
+
+ There are two obvious possibilities: creating a brand new language or
+extending an existing one. The former option is attractive: all sorts
+of optimizations could easily be implemented in the compiler and many
+rigorous checks could be performed on the Autoconf program (e.g.,
+rejecting any non-portable construct). Alternatively, you can extend
+an existing language, such as the `sh' (Bourne shell) language.
+
+ Autoconf does the latter: it is a layer on top of `sh'. It was
+therefore most convenient to implement `autoconf' as a macro expander:
+a program that repeatedly performs "macro expansions" on text input,
+replacing macro calls with macro bodies and producing a pure `sh'
+script in the end. Instead of implementing a dedicated Autoconf macro
+expander, it is natural to use an existing general-purpose macro
+language, such as M4, and implement the extensions as a set of M4
+macros.
+
+
+File: autoconf.info, Node: Autoconf Language, Next: Autoconf Input Layout, Prev: Shell Script Compiler, Up: Writing Autoconf Input
+
+3.1.2 The Autoconf Language
+---------------------------
+
+The Autoconf language differs from many other computer languages
+because it treats actual code the same as plain text. Whereas in C,
+for instance, data and instructions have different syntactic status, in
+Autoconf their status is rigorously the same. Therefore, we need a
+means to distinguish literal strings from text to be expanded:
+quotation.
+
+ When calling macros that take arguments, there must not be any white
+space between the macro name and the open parenthesis.
+
+ AC_INIT ([oops], [1.0]) # incorrect
+ AC_INIT([hello], [1.0]) # good
+
+ Arguments should be enclosed within the quote characters `[' and
+`]', and be separated by commas. Any leading blanks or newlines in
+arguments are ignored, unless they are quoted. You should always quote
+an argument that might contain a macro name, comma, parenthesis, or a
+leading blank or newline. This rule applies recursively for every macro
+call, including macros called from other macros. For more details on
+quoting rules, see *note Programming in M4::.
+
+ For instance:
+
+ AC_CHECK_HEADER([stdio.h],
+ [AC_DEFINE([HAVE_STDIO_H], [1],
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+
+is quoted properly. You may safely simplify its quotation to:
+
+ AC_CHECK_HEADER([stdio.h],
+ [AC_DEFINE([HAVE_STDIO_H], 1,
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+
+because `1' cannot contain a macro call. Here, the argument of
+`AC_MSG_ERROR' must be quoted; otherwise, its comma would be
+interpreted as an argument separator. Also, the second and third
+arguments of `AC_CHECK_HEADER' must be quoted, since they contain macro
+calls. The three arguments `HAVE_STDIO_H', `stdio.h', and `Define to 1
+if you have <stdio.h>.' do not need quoting, but if you unwisely
+defined a macro with a name like `Define' or `stdio' then they would
+need quoting. Cautious Autoconf users would keep the quotes, but many
+Autoconf users find such precautions annoying, and would rewrite the
+example as follows:
+
+ AC_CHECK_HEADER(stdio.h,
+ [AC_DEFINE(HAVE_STDIO_H, 1,
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+
+This is safe, so long as you adopt good naming conventions and do not
+define macros with names like `HAVE_STDIO_H', `stdio', or `h'. Though
+it is also safe here to omit the quotes around `Define to 1 if you have
+<stdio.h>.' this is not recommended, as message strings are more likely
+to inadvertently contain commas.
+
+ The following example is wrong and dangerous, as it is underquoted:
+
+ AC_CHECK_HEADER(stdio.h,
+ AC_DEFINE(HAVE_STDIO_H, 1,
+ Define to 1 if you have <stdio.h>.),
+ AC_MSG_ERROR([sorry, can't do anything for you]))
+
+ In other cases, you may have to use text that also resembles a macro
+call. You must quote that text even when it is not passed as a macro
+argument. For example, these two approaches in `configure.ac' (quoting
+just the potential problems, or quoting the entire line) will protect
+your script in case autoconf ever adds a macro `AC_DC':
+
+ echo "Hard rock was here! --[AC_DC]"
+ [echo "Hard rock was here! --AC_DC"]
+
+which results in this text in `configure':
+
+ echo "Hard rock was here! --AC_DC"
+ echo "Hard rock was here! --AC_DC"
+
+When you use the same text in a macro argument, you must therefore have
+an extra quotation level (since one is stripped away by the macro
+substitution). In general, then, it is a good idea to _use double
+quoting for all literal string arguments_, either around just the
+problematic portions, or over the entire argument:
+
+ AC_MSG_WARN([[AC_DC] stinks --Iron Maiden])
+ AC_MSG_WARN([[AC_DC stinks --Iron Maiden]])
+
+ However, the above example triggers a warning about a possibly
+unexpanded macro when running `autoconf', because it collides with the
+namespace of macros reserved for the Autoconf language. To be really
+safe, you can use additional escaping (either a quadrigraph, or
+creative shell constructs) to silence that particular warning:
+
+ echo "Hard rock was here! --AC""_DC"
+ AC_MSG_WARN([[AC@&t@_DC stinks --Iron Maiden]])
+
+ You are now able to understand one of the constructs of Autoconf that
+has been continually misunderstood... The rule of thumb is that
+_whenever you expect macro expansion, expect quote expansion_; i.e.,
+expect one level of quotes to be lost. For instance:
+
+ AC_COMPILE_IFELSE(AC_LANG_SOURCE([char b[10];]), [],
+ [AC_MSG_ERROR([you lose])])
+
+is incorrect: here, the first argument of `AC_LANG_SOURCE' is `char
+b[10];' and is expanded once, which results in `char b10;'; and the
+`AC_LANG_SOURCE' is also expanded prior to being passed to
+`AC_COMPILE_IFELSE'. (There was an idiom common in Autoconf's past to
+address this issue via the M4 `changequote' primitive, but do not use
+it!) Let's take a closer look: the author meant the first argument to
+be understood as a literal, and therefore it must be quoted twice;
+likewise, the intermediate `AC_LANG_SOURCE' macro should be quoted once
+so that it is only expanded after the rest of the body of
+`AC_COMPILE_IFELSE' is in place:
+
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char b[10];]])], [],
+ [AC_MSG_ERROR([you lose])])
+
+Voila`, you actually produce `char b[10];' this time!
+
+ On the other hand, descriptions (e.g., the last parameter of
+`AC_DEFINE' or `AS_HELP_STRING') are not literals--they are subject to
+line breaking, for example--and should not be double quoted. Even if
+these descriptions are short and are not actually broken, double
+quoting them yields weird results.
+
+ Some macros take optional arguments, which this documentation
+represents as [ARG] (not to be confused with the quote characters).
+You may just leave them empty, or use `[]' to make the emptiness of the
+argument explicit, or you may simply omit the trailing commas. The
+three lines below are equivalent:
+
+ AC_CHECK_HEADERS([stdio.h], [], [], [])
+ AC_CHECK_HEADERS([stdio.h],,,)
+ AC_CHECK_HEADERS([stdio.h])
+
+ It is best to put each macro call on its own line in `configure.ac'.
+Most of the macros don't add extra newlines; they rely on the newline
+after the macro call to terminate the commands. This approach makes
+the generated `configure' script a little easier to read by not
+inserting lots of blank lines. It is generally safe to set shell
+variables on the same line as a macro call, because the shell allows
+assignments without intervening newlines.
+
+ You can include comments in `configure.ac' files by starting them
+with the `#'. For example, it is helpful to begin `configure.ac' files
+with a line like this:
+
+ # Process this file with autoconf to produce a configure script.
+
+
+File: autoconf.info, Node: Autoconf Input Layout, Prev: Autoconf Language, Up: Writing Autoconf Input
+
+3.1.3 Standard `configure.ac' Layout
+------------------------------------
+
+The order in which `configure.ac' calls the Autoconf macros is not
+important, with a few exceptions. Every `configure.ac' must contain a
+call to `AC_INIT' before the checks, and a call to `AC_OUTPUT' at the
+end (*note Output::). Additionally, some macros rely on other macros
+having been called first, because they check previously set values of
+some variables to decide what to do. These macros are noted in the
+individual descriptions (*note Existing Tests::), and they also warn
+you when `configure' is created if they are called out of order.
+
+ To encourage consistency, here is a suggested order for calling the
+Autoconf macros. Generally speaking, the things near the end of this
+list are those that could depend on things earlier in it. For example,
+library functions could be affected by types and libraries.
+
+ Autoconf requirements
+ `AC_INIT(PACKAGE, VERSION, BUG-REPORT-ADDRESS)'
+ information on the package
+ checks for programs
+ checks for libraries
+ checks for header files
+ checks for types
+ checks for structures
+ checks for compiler characteristics
+ checks for library functions
+ checks for system services
+ `AC_CONFIG_FILES([FILE...])'
+ `AC_OUTPUT'
+
+
+File: autoconf.info, Node: autoscan Invocation, Next: ifnames Invocation, Prev: Writing Autoconf Input, Up: Making configure Scripts
+
+3.2 Using `autoscan' to Create `configure.ac'
+=============================================
+
+The `autoscan' program can help you create and/or maintain a
+`configure.ac' file for a software package. `autoscan' examines source
+files in the directory tree rooted at a directory given as a command
+line argument, or the current directory if none is given. It searches
+the source files for common portability problems and creates a file
+`configure.scan' which is a preliminary `configure.ac' for that
+package, and checks a possibly existing `configure.ac' for completeness.
+
+ When using `autoscan' to create a `configure.ac', you should
+manually examine `configure.scan' before renaming it to `configure.ac';
+it probably needs some adjustments. Occasionally, `autoscan' outputs a
+macro in the wrong order relative to another macro, so that `autoconf'
+produces a warning; you need to move such macros manually. Also, if
+you want the package to use a configuration header file, you must add a
+call to `AC_CONFIG_HEADERS' (*note Configuration Headers::). You might
+also have to change or add some `#if' directives to your program in
+order to make it work with Autoconf (*note ifnames Invocation::, for
+information about a program that can help with that job).
+
+ When using `autoscan' to maintain a `configure.ac', simply consider
+adding its suggestions. The file `autoscan.log' contains detailed
+information on why a macro is requested.
+
+ `autoscan' uses several data files (installed along with Autoconf)
+to determine which macros to output when it finds particular symbols in
+a package's source files. These data files all have the same format:
+each line consists of a symbol, one or more blanks, and the Autoconf
+macro to output if that symbol is encountered. Lines starting with `#'
+are comments.
+
+ `autoscan' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Print the names of the files it examines and the potentially
+ interesting symbols it finds in them. This output can be
+ voluminous.
+
+`--debug'
+`-d'
+ Don't remove temporary files.
+
+`--include=DIR'
+`-I DIR'
+ Append DIR to the include path. Multiple invocations accumulate.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend DIR to the include path. Multiple invocations accumulate.
+
+
+File: autoconf.info, Node: ifnames Invocation, Next: autoconf Invocation, Prev: autoscan Invocation, Up: Making configure Scripts
+
+3.3 Using `ifnames' to List Conditionals
+========================================
+
+`ifnames' can help you write `configure.ac' for a software package. It
+prints the identifiers that the package already uses in C preprocessor
+conditionals. If a package has already been set up to have some
+portability, `ifnames' can thus help you figure out what its
+`configure' needs to check for. It may help fill in some gaps in a
+`configure.ac' generated by `autoscan' (*note autoscan Invocation::).
+
+ `ifnames' scans all of the C source files named on the command line
+(or the standard input, if none are given) and writes to the standard
+output a sorted list of all the identifiers that appear in those files
+in `#if', `#elif', `#ifdef', or `#ifndef' directives. It prints each
+identifier on a line, followed by a space-separated list of the files
+in which that identifier occurs.
+
+`ifnames' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+
+File: autoconf.info, Node: autoconf Invocation, Next: autoreconf Invocation, Prev: ifnames Invocation, Up: Making configure Scripts
+
+3.4 Using `autoconf' to Create `configure'
+==========================================
+
+To create `configure' from `configure.ac', run the `autoconf' program
+with no arguments. `autoconf' processes `configure.ac' with the M4
+macro processor, using the Autoconf macros. If you give `autoconf' an
+argument, it reads that file instead of `configure.ac' and writes the
+configuration script to the standard output instead of to `configure'.
+If you give `autoconf' the argument `-', it reads from the standard
+input instead of `configure.ac' and writes the configuration script to
+the standard output.
+
+ The Autoconf macros are defined in several files. Some of the files
+are distributed with Autoconf; `autoconf' reads them first. Then it
+looks for the optional file `acsite.m4' in the directory that contains
+the distributed Autoconf macro files, and for the optional file
+`aclocal.m4' in the current directory. Those files can contain your
+site's or the package's own Autoconf macro definitions (*note Writing
+Autoconf Macros::, for more information). If a macro is defined in
+more than one of the files that `autoconf' reads, the last definition
+it reads overrides the earlier ones.
+
+ `autoconf' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Report processing steps.
+
+`--debug'
+`-d'
+ Don't remove the temporary files.
+
+`--force'
+`-f'
+ Remake `configure' even if newer than its input files.
+
+`--include=DIR'
+`-I DIR'
+ Append DIR to the include path. Multiple invocations accumulate.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend DIR to the include path. Multiple invocations accumulate.
+
+`--output=FILE'
+`-o FILE'
+ Save output (script or trace) to FILE. The file `-' stands for
+ the standard output.
+
+`--warnings=CATEGORY'
+`-W CATEGORY'
+ Report the warnings related to CATEGORY (which can actually be a
+ comma separated list). *Note Reporting Messages::, macro
+ `AC_DIAGNOSE', for a comprehensive list of categories. Special
+ values include:
+
+ `all'
+ report all the warnings
+
+ `none'
+ report none
+
+ `error'
+ treats warnings as errors
+
+ `no-CATEGORY'
+ disable warnings falling into CATEGORY
+
+ Warnings about `syntax' are enabled by default, and the environment
+ variable `WARNINGS', a comma separated list of categories, is
+ honored as well. Passing `-W CATEGORY' actually behaves as if you
+ had passed `--warnings syntax,$WARNINGS,CATEGORY'. To disable the
+ defaults and `WARNINGS', and then enable warnings about obsolete
+ constructs, use `-W none,obsolete'.
+
+ Because `autoconf' uses `autom4te' behind the scenes, it displays
+ a back trace for errors, but not for warnings; if you want them,
+ just pass `-W error'. *Note autom4te Invocation::, for some
+ examples.
+
+`--trace=MACRO[:FORMAT]'
+`-t MACRO[:FORMAT]'
+ Do not create the `configure' script, but list the calls to MACRO
+ according to the FORMAT. Multiple `--trace' arguments can be used
+ to list several macros. Multiple `--trace' arguments for a single
+ macro are not cumulative; instead, you should just make FORMAT as
+ long as needed.
+
+ The FORMAT is a regular string, with newlines if desired, and
+ several special escape codes. It defaults to `$f:$l:$n:$%'; see
+ *note autom4te Invocation::, for details on the FORMAT.
+
+`--initialization'
+`-i'
+ By default, `--trace' does not trace the initialization of the
+ Autoconf macros (typically the `AC_DEFUN' definitions). This
+ results in a noticeable speedup, but can be disabled by this
+ option.
+
+ It is often necessary to check the content of a `configure.ac' file,
+but parsing it yourself is extremely fragile and error-prone. It is
+suggested that you rely upon `--trace' to scan `configure.ac'. For
+instance, to find the list of variables that are substituted, use:
+
+ $ autoconf -t AC_SUBST
+ configure.ac:2:AC_SUBST:ECHO_C
+ configure.ac:2:AC_SUBST:ECHO_N
+ configure.ac:2:AC_SUBST:ECHO_T
+ More traces deleted
+
+The example below highlights the difference between `$@', `$*', and
+`$%'.
+
+ $ cat configure.ac
+ AC_DEFINE(This, is, [an
+ [example]])
+ $ autoconf -t 'AC_DEFINE:@: $@
+ *: $*
+ %: $%'
+ @: [This],[is],[an
+ [example]]
+ *: This,is,an
+ [example]
+ %: This:is:an [example]
+
+The FORMAT gives you a lot of freedom:
+
+ $ autoconf -t 'AC_SUBST:$$ac_subst{"$1"} = "$f:$l";'
+ $ac_subst{"ECHO_C"} = "configure.ac:2";
+ $ac_subst{"ECHO_N"} = "configure.ac:2";
+ $ac_subst{"ECHO_T"} = "configure.ac:2";
+ More traces deleted
+
+A long SEPARATOR can be used to improve the readability of complex
+structures, and to ease their parsing (for instance when no single
+character is suitable as a separator):
+
+ $ autoconf -t 'AM_MISSING_PROG:${|:::::|}*'
+ ACLOCAL|:::::|aclocal|:::::|$missing_dir
+ AUTOCONF|:::::|autoconf|:::::|$missing_dir
+ AUTOMAKE|:::::|automake|:::::|$missing_dir
+ More traces deleted
+
+
+File: autoconf.info, Node: autoreconf Invocation, Prev: autoconf Invocation, Up: Making configure Scripts
+
+3.5 Using `autoreconf' to Update `configure' Scripts
+====================================================
+
+Installing the various components of the GNU Build System can be
+tedious: running `autopoint' for Gettext, `automake' for `Makefile.in'
+etc. in each directory. It may be needed either because some tools
+such as `automake' have been updated on your system, or because some of
+the sources such as `configure.ac' have been updated, or finally,
+simply in order to install the GNU Build System in a fresh tree.
+
+ `autoreconf' runs `autoconf', `autoheader', `aclocal', `automake',
+`libtoolize', and `autopoint' (when appropriate) repeatedly to update
+the GNU Build System in the specified directories and their
+subdirectories (*note Subdirectories::). By default, it only remakes
+those files that are older than their sources. The environment
+variables `AUTOM4TE', `AUTOCONF', `AUTOHEADER', `AUTOMAKE', `ACLOCAL',
+`AUTOPOINT', `LIBTOOLIZE', `M4', and `MAKE' may be used to override the
+invocation of the respective tools.
+
+ If you install a new version of some tool, you can make `autoreconf'
+remake _all_ of the files by giving it the `--force' option.
+
+ *Note Automatic Remaking::, for Make rules to automatically rebuild
+`configure' scripts when their source files change. That method
+handles the timestamps of configuration header templates properly, but
+does not pass `--autoconf-dir=DIR' or `--localdir=DIR'.
+
+ Gettext supplies the `autopoint' command to add translation
+infrastructure to a source package. If you use `autopoint', your
+`configure.ac' should invoke both `AM_GNU_GETTEXT' and
+`AM_GNU_GETTEXT_VERSION(GETTEXT-VERSION)'. *Note Invoking the
+`autopoint' Program: (gettext)autopoint Invocation, for further details.
+
+`autoreconf' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Print the name of each directory `autoreconf' examines and the
+ commands it runs. If given two or more times, pass `--verbose' to
+ subordinate tools that support it.
+
+`--debug'
+`-d'
+ Don't remove the temporary files.
+
+`--force'
+`-f'
+ Remake even `configure' scripts and configuration headers that are
+ newer than their input files (`configure.ac' and, if present,
+ `aclocal.m4').
+
+`--install'
+`-i'
+ Install the missing auxiliary files in the package. By default,
+ files are copied; this can be changed with `--symlink'.
+
+ If deemed appropriate, this option triggers calls to `automake
+ --add-missing', `libtoolize', `autopoint', etc.
+
+`--no-recursive'
+ Do not rebuild files in subdirectories to configure (see *note
+ Subdirectories::, macro `AC_CONFIG_SUBDIRS').
+
+`--symlink'
+`-s'
+ When used with `--install', install symbolic links to the missing
+ auxiliary files instead of copying them.
+
+`--make'
+`-m'
+ When the directories were configured, update the configuration by
+ running `./config.status --recheck && ./config.status', and then
+ run `make'.
+
+`--include=DIR'
+`-I DIR'
+ Append DIR to the include path. Multiple invocations accumulate.
+ Passed on to `aclocal', `autoconf' and `autoheader' internally.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend DIR to the include path. Multiple invocations accumulate.
+ Passed on to `autoconf' and `autoheader' internally.
+
+`--warnings=CATEGORY'
+`-W CATEGORY'
+ Report the warnings related to CATEGORY (which can actually be a
+ comma separated list).
+
+ `cross'
+ related to cross compilation issues.
+
+ `obsolete'
+ report the uses of obsolete constructs.
+
+ `portability'
+ portability issues
+
+ `syntax'
+ dubious syntactic constructs.
+
+ `all'
+ report all the warnings
+
+ `none'
+ report none
+
+ `error'
+ treats warnings as errors
+
+ `no-CATEGORY'
+ disable warnings falling into CATEGORY
+
+ Warnings about `syntax' are enabled by default, and the environment
+ variable `WARNINGS', a comma separated list of categories, is
+ honored as well. Passing `-W CATEGORY' actually behaves as if you
+ had passed `--warnings syntax,$WARNINGS,CATEGORY'. To disable the
+ defaults and `WARNINGS', and then enable warnings about obsolete
+ constructs, use `-W none,obsolete'.
+
+ If you want `autoreconf' to pass flags that are not listed here on
+to `aclocal', set `ACLOCAL_AMFLAGS' in your `Makefile.am'. Due to a
+limitation in the Autoconf implementation these flags currently must be
+set on a single line in `Makefile.am', without any backslash-newlines.
+
+
+File: autoconf.info, Node: Setup, Next: Existing Tests, Prev: Making configure Scripts, Up: Top
+
+4 Initialization and Output Files
+*********************************
+
+Autoconf-generated `configure' scripts need some information about how
+to initialize, such as how to find the package's source files and about
+the output files to produce. The following sections describe the
+initialization and the creation of output files.
+
+* Menu:
+
+* Initializing configure:: Option processing etc.
+* Versioning:: Dealing with Autoconf versions
+* Notices:: Copyright, version numbers in `configure'
+* Input:: Where Autoconf should find files
+* Output:: Outputting results from the configuration
+* Configuration Actions:: Preparing the output based on results
+* Configuration Files:: Creating output files
+* Makefile Substitutions:: Using output variables in makefiles
+* Configuration Headers:: Creating a configuration header file
+* Configuration Commands:: Running arbitrary instantiation commands
+* Configuration Links:: Links depending on the configuration
+* Subdirectories:: Configuring independent packages together
+* Default Prefix:: Changing the default installation prefix
+
+
+File: autoconf.info, Node: Initializing configure, Next: Versioning, Up: Setup
+
+4.1 Initializing `configure'
+============================
+
+Every `configure' script must call `AC_INIT' before doing anything else
+that produces output. Calls to silent macros, such as `AC_DEFUN', may
+also occur prior to `AC_INIT', although these are generally used via
+`aclocal.m4', since that is implicitly included before the start of
+`configure.ac'. The only other required macro is `AC_OUTPUT' (*note
+Output::).
+
+ -- Macro: AC_INIT (PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL])
+ Process any command-line arguments and perform initialization and
+ verification.
+
+ Set the name of the PACKAGE and its VERSION. These are typically
+ used in `--version' support, including that of `configure'. The
+ optional argument BUG-REPORT should be the email to which users
+ should send bug reports. The package TARNAME differs from
+ PACKAGE: the latter designates the full package name (e.g., `GNU
+ Autoconf'), while the former is meant for distribution tar ball
+ names (e.g., `autoconf'). It defaults to PACKAGE with `GNU '
+ stripped, lower-cased, and all characters other than alphanumerics
+ and underscores are changed to `-'. If provided, URL should be
+ the home page for the package.
+
+ The arguments of `AC_INIT' must be static, i.e., there should not
+ be any shell computation, quotes, or newlines, but they can be
+ computed by M4. This is because the package information strings
+ are expanded at M4 time into several contexts, and must give the
+ same text at shell time whether used in single-quoted strings,
+ double-quoted strings, quoted here-documents, or unquoted
+ here-documents. It is permissible to use `m4_esyscmd' or
+ `m4_esyscmd_s' for computing a version string that changes with
+ every commit to a version control system (in fact, Autoconf does
+ just that, for all builds of the development tree made between
+ releases).
+
+ The following M4 macros (e.g., `AC_PACKAGE_NAME'), output variables
+ (e.g., `PACKAGE_NAME'), and preprocessor symbols (e.g.,
+ `PACKAGE_NAME'), are defined by `AC_INIT':
+
+ `AC_PACKAGE_NAME', `PACKAGE_NAME'
+ Exactly PACKAGE.
+
+ `AC_PACKAGE_TARNAME', `PACKAGE_TARNAME'
+ Exactly TARNAME, possibly generated from PACKAGE.
+
+ `AC_PACKAGE_VERSION', `PACKAGE_VERSION'
+ Exactly VERSION.
+
+ `AC_PACKAGE_STRING', `PACKAGE_STRING'
+ Exactly `PACKAGE VERSION'.
+
+ `AC_PACKAGE_BUGREPORT', `PACKAGE_BUGREPORT'
+ Exactly BUG-REPORT, if one was provided. Typically an email
+ address, or URL to a bug management web page.
+
+ `AC_PACKAGE_URL', `PACKAGE_URL'
+ Exactly URL, if one was provided. If URL was empty, but
+ PACKAGE begins with `GNU ', then this defaults to
+ `http://www.gnu.org/software/TARNAME/', otherwise, no URL is
+ assumed.
+
+ If your `configure' script does its own option processing, it should
+inspect `$@' or `$*' immediately after calling `AC_INIT', because other
+Autoconf macros liberally use the `set' command to process strings, and
+this has the side effect of updating `$@' and `$*'. However, we
+suggest that you use standard macros like `AC_ARG_ENABLE' instead of
+attempting to implement your own option processing. *Note Site
+Configuration::.
+
+
+File: autoconf.info, Node: Versioning, Next: Notices, Prev: Initializing configure, Up: Setup
+
+4.2 Dealing with Autoconf versions
+==================================
+
+The following optional macros can be used to help choose the minimum
+version of Autoconf that can successfully compile a given
+`configure.ac'.
+
+ -- Macro: AC_PREREQ (VERSION)
+ Ensure that a recent enough version of Autoconf is being used. If
+ the version of Autoconf being used to create `configure' is
+ earlier than VERSION, print an error message to the standard error
+ output and exit with failure (exit status is 63). For example:
+
+ AC_PREREQ([2.69])
+
+ This macro may be used before `AC_INIT'.
+
+ -- Macro: AC_AUTOCONF_VERSION
+ This macro was introduced in Autoconf 2.62. It identifies the
+ version of Autoconf that is currently parsing the input file, in a
+ format suitable for `m4_version_compare' (*note
+ m4_version_compare::); in other words, for this release of
+ Autoconf, its value is `2.69'. One potential use of this macro is
+ for writing conditional fallbacks based on when a feature was
+ added to Autoconf, rather than using `AC_PREREQ' to require the
+ newer version of Autoconf. However, remember that the Autoconf
+ philosophy favors feature checks over version checks.
+
+ You should not expand this macro directly; use
+ `m4_defn([AC_AUTOCONF_VERSION])' instead. This is because some
+ users might have a beta version of Autoconf installed, with
+ arbitrary letters included in its version string. This means it
+ is possible for the version string to contain the name of a
+ defined macro, such that expanding `AC_AUTOCONF_VERSION' would
+ trigger the expansion of that macro during rescanning, and change
+ the version string to be different than what you intended to check.
+
+
+File: autoconf.info, Node: Notices, Next: Input, Prev: Versioning, Up: Setup
+
+4.3 Notices in `configure'
+==========================
+
+The following macros manage version numbers for `configure' scripts.
+Using them is optional.
+
+ -- Macro: AC_COPYRIGHT (COPYRIGHT-NOTICE)
+ State that, in addition to the Free Software Foundation's
+ copyright on the Autoconf macros, parts of your `configure' are
+ covered by the COPYRIGHT-NOTICE.
+
+ The COPYRIGHT-NOTICE shows up in both the head of `configure' and
+ in `configure --version'.
+
+ -- Macro: AC_REVISION (REVISION-INFO)
+ Copy revision stamp REVISION-INFO into the `configure' script,
+ with any dollar signs or double-quotes removed. This macro lets
+ you put a revision stamp from `configure.ac' into `configure'
+ without RCS or CVS changing it when you check in `configure'.
+ That way, you can determine easily which revision of
+ `configure.ac' a particular `configure' corresponds to.
+
+ For example, this line in `configure.ac':
+
+ AC_REVISION([$Revision: 1.30 $])
+
+ produces this in `configure':
+
+ #!/bin/sh
+ # From configure.ac Revision: 1.30
+
+
+File: autoconf.info, Node: Input, Next: Output, Prev: Notices, Up: Setup
+
+4.4 Finding `configure' Input
+=============================
+
+ -- Macro: AC_CONFIG_SRCDIR (UNIQUE-FILE-IN-SOURCE-DIR)
+ UNIQUE-FILE-IN-SOURCE-DIR is some file that is in the package's
+ source directory; `configure' checks for this file's existence to
+ make sure that the directory that it is told contains the source
+ code in fact does. Occasionally people accidentally specify the
+ wrong directory with `--srcdir'; this is a safety check. *Note
+ configure Invocation::, for more information.
+
+ Packages that do manual configuration or use the `install' program
+might need to tell `configure' where to find some other shell scripts
+by calling `AC_CONFIG_AUX_DIR', though the default places it looks are
+correct for most cases.
+
+ -- Macro: AC_CONFIG_AUX_DIR (DIR)
+ Use the auxiliary build tools (e.g., `install-sh', `config.sub',
+ `config.guess', Cygnus `configure', Automake and Libtool scripts,
+ etc.) that are in directory DIR. These are auxiliary files used
+ in configuration. DIR can be either absolute or relative to
+ `SRCDIR'. The default is `SRCDIR' or `SRCDIR/..' or
+ `SRCDIR/../..', whichever is the first that contains `install-sh'.
+ The other files are not checked for, so that using
+ `AC_PROG_INSTALL' does not automatically require distributing the
+ other auxiliary files. It checks for `install.sh' also, but that
+ name is obsolete because some `make' have a rule that creates
+ `install' from it if there is no makefile.
+
+ The auxiliary directory is commonly named `build-aux'. If you
+ need portability to DOS variants, do not name the auxiliary
+ directory `aux'. *Note File System Conventions::.
+
+ -- Macro: AC_REQUIRE_AUX_FILE (FILE)
+ Declares that FILE is expected in the directory defined above. In
+ Autoconf proper, this macro does nothing: its sole purpose is to be
+ traced by third-party tools to produce a list of expected auxiliary
+ files. For instance it is called by macros like `AC_PROG_INSTALL'
+ (*note Particular Programs::) or `AC_CANONICAL_BUILD' (*note
+ Canonicalizing::) to register the auxiliary files they need.
+
+ Similarly, packages that use `aclocal' should declare where local
+macros can be found using `AC_CONFIG_MACRO_DIR'.
+
+ -- Macro: AC_CONFIG_MACRO_DIR (DIR)
+ Specify DIR as the location of additional local Autoconf macros.
+ This macro is intended for use by future versions of commands like
+ `autoreconf' that trace macro calls. It should be called directly
+ from `configure.ac' so that tools that install macros for
+ `aclocal' can find the macros' declarations.
+
+ Note that if you use `aclocal' from Automake to generate
+ `aclocal.m4', you must also set `ACLOCAL_AMFLAGS = -I DIR' in your
+ top-level `Makefile.am'. Due to a limitation in the Autoconf
+ implementation of `autoreconf', these include directives currently
+ must be set on a single line in `Makefile.am', without any
+ backslash-newlines.
+
+
+File: autoconf.info, Node: Output, Next: Configuration Actions, Prev: Input, Up: Setup
+
+4.5 Outputting Files
+====================
+
+Every Autoconf script, e.g., `configure.ac', should finish by calling
+`AC_OUTPUT'. That is the macro that generates and runs
+`config.status', which in turn creates the makefiles and any other
+files resulting from configuration. This is the only required macro
+besides `AC_INIT' (*note Input::).
+
+ -- Macro: AC_OUTPUT
+ Generate `config.status' and launch it. Call this macro once, at
+ the end of `configure.ac'.
+
+ `config.status' performs all the configuration actions: all the
+ output files (see *note Configuration Files::, macro
+ `AC_CONFIG_FILES'), header files (see *note Configuration
+ Headers::, macro `AC_CONFIG_HEADERS'), commands (see *note
+ Configuration Commands::, macro `AC_CONFIG_COMMANDS'), links (see
+ *note Configuration Links::, macro `AC_CONFIG_LINKS'),
+ subdirectories to configure (see *note Subdirectories::, macro
+ `AC_CONFIG_SUBDIRS') are honored.
+
+ The location of your `AC_OUTPUT' invocation is the exact point
+ where configuration actions are taken: any code afterwards is
+ executed by `configure' once `config.status' was run. If you want
+ to bind actions to `config.status' itself (independently of
+ whether `configure' is being run), see *note Running Arbitrary
+ Configuration Commands: Configuration Commands.
+
+ Historically, the usage of `AC_OUTPUT' was somewhat different.
+*Note Obsolete Macros::, for a description of the arguments that
+`AC_OUTPUT' used to support.
+
+ If you run `make' in subdirectories, you should run it using the
+`make' variable `MAKE'. Most versions of `make' set `MAKE' to the name
+of the `make' program plus any options it was given. (But many do not
+include in it the values of any variables set on the command line, so
+those are not passed on automatically.) Some old versions of `make' do
+not set this variable. The following macro allows you to use it even
+with those versions.
+
+ -- Macro: AC_PROG_MAKE_SET
+ If the Make command, `$MAKE' if set or else `make', predefines
+ `$(MAKE)', define output variable `SET_MAKE' to be empty.
+ Otherwise, define `SET_MAKE' to a macro definition that sets
+ `$(MAKE)', such as `MAKE=make'. Calls `AC_SUBST' for `SET_MAKE'.
+
+ If you use this macro, place a line like this in each `Makefile.in'
+that runs `MAKE' on other directories:
+
+ @SET_MAKE@
+
+
+File: autoconf.info, Node: Configuration Actions, Next: Configuration Files, Prev: Output, Up: Setup
+
+4.6 Performing Configuration Actions
+====================================
+
+`configure' is designed so that it appears to do everything itself, but
+there is actually a hidden slave: `config.status'. `configure' is in
+charge of examining your system, but it is `config.status' that
+actually takes the proper actions based on the results of `configure'.
+The most typical task of `config.status' is to _instantiate_ files.
+
+ This section describes the common behavior of the four standard
+instantiating macros: `AC_CONFIG_FILES', `AC_CONFIG_HEADERS',
+`AC_CONFIG_COMMANDS' and `AC_CONFIG_LINKS'. They all have this
+prototype:
+
+ AC_CONFIG_ITEMS(TAG..., [COMMANDS], [INIT-CMDS])
+
+where the arguments are:
+
+TAG...
+ A blank-or-newline-separated list of tags, which are typically the
+ names of the files to instantiate.
+
+ You are encouraged to use literals as TAGS. In particular, you
+ should avoid
+
+ ... && my_foos="$my_foos fooo"
+ ... && my_foos="$my_foos foooo"
+ AC_CONFIG_ITEMS([$my_foos])
+
+ and use this instead:
+
+ ... && AC_CONFIG_ITEMS([fooo])
+ ... && AC_CONFIG_ITEMS([foooo])
+
+ The macros `AC_CONFIG_FILES' and `AC_CONFIG_HEADERS' use special
+ TAG values: they may have the form `OUTPUT' or `OUTPUT:INPUTS'.
+ The file OUTPUT is instantiated from its templates, INPUTS
+ (defaulting to `OUTPUT.in').
+
+ `AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk])', for
+ example, asks for the creation of the file `Makefile' that
+ contains the expansion of the output variables in the
+ concatenation of `boiler/top.mk' and `boiler/bot.mk'.
+
+ The special value `-' might be used to denote the standard output
+ when used in OUTPUT, or the standard input when used in the
+ INPUTS. You most probably don't need to use this in
+ `configure.ac', but it is convenient when using the command line
+ interface of `./config.status', see *note config.status
+ Invocation::, for more details.
+
+ The INPUTS may be absolute or relative file names. In the latter
+ case they are first looked for in the build tree, and then in the
+ source tree. Input files should be text files, and a line length
+ below 2000 bytes should be safe.
+
+COMMANDS
+ Shell commands output literally into `config.status', and
+ associated with a tag that the user can use to tell `config.status'
+ which commands to run. The commands are run each time a TAG
+ request is given to `config.status', typically each time the file
+ `TAG' is created.
+
+ The variables set during the execution of `configure' are _not_
+ available here: you first need to set them via the INIT-CMDS.
+ Nonetheless the following variables are precomputed:
+
+ `srcdir'
+ The name of the top source directory, assuming that the
+ working directory is the top build directory. This is what
+ the `configure' option `--srcdir' sets.
+
+ `ac_top_srcdir'
+ The name of the top source directory, assuming that the
+ working directory is the current build directory.
+
+ `ac_top_build_prefix'
+ The name of the top build directory, assuming that the working
+ directory is the current build directory. It can be empty,
+ or else ends with a slash, so that you may concatenate it.
+
+ `ac_srcdir'
+ The name of the corresponding source directory, assuming that
+ the working directory is the current build directory.
+
+ `tmp'
+ The name of a temporary directory within the build tree,
+ which you can use if you need to create additional temporary
+ files. The directory is cleaned up when `config.status' is
+ done or interrupted. Please use package-specific file name
+ prefixes to avoid clashing with files that `config.status'
+ may use internally.
+
+ The "current" directory refers to the directory (or
+ pseudo-directory) containing the input part of TAGS. For
+ instance, running
+
+ AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [...], [...])
+
+ with `--srcdir=../package' produces the following values:
+
+ # Argument of --srcdir
+ srcdir='../package'
+ # Reversing deep/dir
+ ac_top_build_prefix='../../'
+ # Concatenation of $ac_top_build_prefix and srcdir
+ ac_top_srcdir='../../../package'
+ # Concatenation of $ac_top_srcdir and deep/dir
+ ac_srcdir='../../../package/deep/dir'
+
+ independently of `in/in.in'.
+
+INIT-CMDS
+ Shell commands output _unquoted_ near the beginning of
+ `config.status', and executed each time `config.status' runs
+ (regardless of the tag). Because they are unquoted, for example,
+ `$var' is output as the value of `var'. INIT-CMDS is typically
+ used by `configure' to give `config.status' some variables it
+ needs to run the COMMANDS.
+
+ You should be extremely cautious in your variable names: all the
+ INIT-CMDS share the same name space and may overwrite each other
+ in unpredictable ways. Sorry...
+
+ All these macros can be called multiple times, with different TAG
+values, of course!
+
+
+File: autoconf.info, Node: Configuration Files, Next: Makefile Substitutions, Prev: Configuration Actions, Up: Setup
+
+4.7 Creating Configuration Files
+================================
+
+Be sure to read the previous section, *note Configuration Actions::.
+
+ -- Macro: AC_CONFIG_FILES (FILE..., [CMDS], [INIT-CMDS])
+ Make `AC_OUTPUT' create each `FILE' by copying an input file (by
+ default `FILE.in'), substituting the output variable values. This
+ macro is one of the instantiating macros; see *note Configuration
+ Actions::. *Note Makefile Substitutions::, for more information
+ on using output variables. *Note Setting Output Variables::, for
+ more information on creating them. This macro creates the
+ directory that the file is in if it doesn't exist. Usually,
+ makefiles are created this way, but other files, such as
+ `.gdbinit', can be specified as well.
+
+ Typical calls to `AC_CONFIG_FILES' look like this:
+
+ AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
+ AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
+
+ You can override an input file name by appending to FILE a
+ colon-separated list of input files. Examples:
+
+ AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
+ [lib/Makefile:boiler/lib.mk])
+
+ Doing this allows you to keep your file names acceptable to DOS
+ variants, or to prepend and/or append boilerplate to the file.
+
+
+File: autoconf.info, Node: Makefile Substitutions, Next: Configuration Headers, Prev: Configuration Files, Up: Setup
+
+4.8 Substitutions in Makefiles
+==============================
+
+Each subdirectory in a distribution that contains something to be
+compiled or installed should come with a file `Makefile.in', from which
+`configure' creates a file `Makefile' in that directory. To create
+`Makefile', `configure' performs a simple variable substitution,
+replacing occurrences of `@VARIABLE@' in `Makefile.in' with the value
+that `configure' has determined for that variable. Variables that are
+substituted into output files in this way are called "output
+variables". They are ordinary shell variables that are set in
+`configure'. To make `configure' substitute a particular variable into
+the output files, the macro `AC_SUBST' must be called with that
+variable name as an argument. Any occurrences of `@VARIABLE@' for
+other variables are left unchanged. *Note Setting Output Variables::,
+for more information on creating output variables with `AC_SUBST'.
+
+ A software package that uses a `configure' script should be
+distributed with a file `Makefile.in', but no makefile; that way, the
+user has to properly configure the package for the local system before
+compiling it.
+
+ *Note Makefile Conventions: (standards)Makefile Conventions, for
+more information on what to put in makefiles.
+
+* Menu:
+
+* Preset Output Variables:: Output variables that are always set
+* Installation Directory Variables:: Other preset output variables
+* Changed Directory Variables:: Warnings about `datarootdir'
+* Build Directories:: Supporting multiple concurrent compiles
+* Automatic Remaking:: Makefile rules for configuring
+
+
+File: autoconf.info, Node: Preset Output Variables, Next: Installation Directory Variables, Up: Makefile Substitutions
+
+4.8.1 Preset Output Variables
+-----------------------------
+
+Some output variables are preset by the Autoconf macros. Some of the
+Autoconf macros set additional output variables, which are mentioned in
+the descriptions for those macros. *Note Output Variable Index::, for a
+complete list of output variables. *Note Installation Directory
+Variables::, for the list of the preset ones related to installation
+directories. Below are listed the other preset ones, many of which are
+precious variables (*note Setting Output Variables::, `AC_ARG_VAR').
+
+ The preset variables which are available during `config.status'
+(*note Configuration Actions::) may also be used during `configure'
+tests. For example, it is permissible to reference `$srcdir' when
+constructing a list of directories to pass via option `-I' during a
+compiler feature check. When used in this manner, coupled with the
+fact that `configure' is always run from the top build directory, it is
+sufficient to use just `$srcdir' instead of `$top_srcdir'.
+
+ -- Variable: CFLAGS
+ Debugging and optimization options for the C compiler. If it is
+ not set in the environment when `configure' runs, the default
+ value is set when you call `AC_PROG_CC' (or empty if you don't).
+ `configure' uses this variable when compiling or linking programs
+ to test for C features.
+
+ If a compiler option affects only the behavior of the preprocessor
+ (e.g., `-DNAME'), it should be put into `CPPFLAGS' instead. If it
+ affects only the linker (e.g., `-LDIRECTORY'), it should be put
+ into `LDFLAGS' instead. If it affects only the compiler proper,
+ `CFLAGS' is the natural home for it. If an option affects
+ multiple phases of the compiler, though, matters get tricky. One
+ approach to put such options directly into `CC', e.g., `CC='gcc
+ -m64''. Another is to put them into both `CPPFLAGS' and
+ `LDFLAGS', but not into `CFLAGS'.
+
+ However, remember that some `Makefile' variables are reserved by
+ the GNU Coding Standards for the use of the "user"--the person
+ building the package. For instance, `CFLAGS' is one such variable.
+
+ Sometimes package developers are tempted to set user variables
+ such as `CFLAGS' because it appears to make their job easier.
+ However, the package itself should never set a user variable,
+ particularly not to include switches that are required for proper
+ compilation of the package. Since these variables are documented
+ as being for the package builder, that person rightfully expects
+ to be able to override any of these variables at build time. If
+ the package developer needs to add switches without interfering
+ with the user, the proper way to do that is to introduce an
+ additional variable. Automake makes this easy by introducing
+ `AM_CFLAGS' (*note Flag Variables Ordering: (automake)Flag
+ Variables Ordering.), but the concept is the same even if Automake
+ is not used.
+
+ -- Variable: configure_input
+ A comment saying that the file was generated automatically by
+ `configure' and giving the name of the input file. `AC_OUTPUT'
+ adds a comment line containing this variable to the top of every
+ makefile it creates. For other files, you should reference this
+ variable in a comment at the top of each input file. For example,
+ an input shell script should begin like this:
+
+ #!/bin/sh
+ # @configure_input@
+
+ The presence of that line also reminds people editing the file
+ that it needs to be processed by `configure' in order to be used.
+
+ -- Variable: CPPFLAGS
+ Preprocessor options for the C, C++, Objective C, and Objective C++
+ preprocessors and compilers. If it is not set in the environment
+ when `configure' runs, the default value is empty. `configure'
+ uses this variable when preprocessing or compiling programs to
+ test for C, C++, Objective C, and Objective C++ features.
+
+ This variable's contents should contain options like `-I', `-D',
+ and `-U' that affect only the behavior of the preprocessor.
+ Please see the explanation of `CFLAGS' for what you can do if an
+ option affects other phases of the compiler as well.
+
+ Currently, `configure' always links as part of a single invocation
+ of the compiler that also preprocesses and compiles, so it uses
+ this variable also when linking programs. However, it is unwise to
+ depend on this behavior because the GNU Coding Standards do not
+ require it and many packages do not use `CPPFLAGS' when linking
+ programs.
+
+ *Note Special Chars in Variables::, for limitations that `CPPFLAGS'
+ might run into.
+
+ -- Variable: CXXFLAGS
+ Debugging and optimization options for the C++ compiler. It acts
+ like `CFLAGS', but for C++ instead of C.
+
+ -- Variable: DEFS
+ `-D' options to pass to the C compiler. If `AC_CONFIG_HEADERS' is
+ called, `configure' replaces `@DEFS@' with `-DHAVE_CONFIG_H'
+ instead (*note Configuration Headers::). This variable is not
+ defined while `configure' is performing its tests, only when
+ creating the output files. *Note Setting Output Variables::, for
+ how to check the results of previous tests.
+
+ -- Variable: ECHO_C
+ -- Variable: ECHO_N
+ -- Variable: ECHO_T
+ How does one suppress the trailing newline from `echo' for
+ question-answer message pairs? These variables provide a way:
+
+ echo $ECHO_N "And the winner is... $ECHO_C"
+ sleep 100000000000
+ echo "${ECHO_T}dead."
+
+ Some old and uncommon `echo' implementations offer no means to
+ achieve this, in which case `ECHO_T' is set to tab. You might not
+ want to use it.
+
+ -- Variable: ERLCFLAGS
+ Debugging and optimization options for the Erlang compiler. If it
+ is not set in the environment when `configure' runs, the default
+ value is empty. `configure' uses this variable when compiling
+ programs to test for Erlang features.
+
+ -- Variable: FCFLAGS
+ Debugging and optimization options for the Fortran compiler. If it
+ is not set in the environment when `configure' runs, the default
+ value is set when you call `AC_PROG_FC' (or empty if you don't).
+ `configure' uses this variable when compiling or linking programs
+ to test for Fortran features.
+
+ -- Variable: FFLAGS
+ Debugging and optimization options for the Fortran 77 compiler.
+ If it is not set in the environment when `configure' runs, the
+ default value is set when you call `AC_PROG_F77' (or empty if you
+ don't). `configure' uses this variable when compiling or linking
+ programs to test for Fortran 77 features.
+
+ -- Variable: LDFLAGS
+ Options for the linker. If it is not set in the environment when
+ `configure' runs, the default value is empty. `configure' uses
+ this variable when linking programs to test for C, C++, Objective
+ C, Objective C++, Fortran, and Go features.
+
+ This variable's contents should contain options like `-s' and `-L'
+ that affect only the behavior of the linker. Please see the
+ explanation of `CFLAGS' for what you can do if an option also
+ affects other phases of the compiler.
+
+ Don't use this variable to pass library names (`-l') to the
+ linker; use `LIBS' instead.
+
+ -- Variable: LIBS
+ `-l' options to pass to the linker. The default value is empty,
+ but some Autoconf macros may prepend extra libraries to this
+ variable if those libraries are found and provide necessary
+ functions, see *note Libraries::. `configure' uses this variable
+ when linking programs to test for C, C++, Objective C, Objective
+ C++, Fortran, and Go features.
+
+ -- Variable: OBJCFLAGS
+ Debugging and optimization options for the Objective C compiler.
+ It acts like `CFLAGS', but for Objective C instead of C.
+
+ -- Variable: OBJCXXFLAGS
+ Debugging and optimization options for the Objective C++ compiler.
+ It acts like `CXXFLAGS', but for Objective C++ instead of C++.
+
+ -- Variable: GOFLAGS
+ Debugging and optimization options for the Go compiler. It acts
+ like `CFLAGS', but for Go instead of C.
+
+ -- Variable: builddir
+ Rigorously equal to `.'. Added for symmetry only.
+
+ -- Variable: abs_builddir
+ Absolute name of `builddir'.
+
+ -- Variable: top_builddir
+ The relative name of the top level of the current build tree. In
+ the top-level directory, this is the same as `builddir'.
+
+ -- Variable: top_build_prefix
+ The relative name of the top level of the current build tree with
+ final slash if nonempty. This is the same as `top_builddir',
+ except that it contains zero or more runs of `../', so it should
+ not be appended with a slash for concatenation. This helps for
+ `make' implementations that otherwise do not treat `./file' and
+ `file' as equal in the toplevel build directory.
+
+ -- Variable: abs_top_builddir
+ Absolute name of `top_builddir'.
+
+ -- Variable: srcdir
+ The name of the directory that contains the source code for that
+ makefile.
+
+ -- Variable: abs_srcdir
+ Absolute name of `srcdir'.
+
+ -- Variable: top_srcdir
+ The name of the top-level source code directory for the package.
+ In the top-level directory, this is the same as `srcdir'.
+
+ -- Variable: abs_top_srcdir
+ Absolute name of `top_srcdir'.
+
+
+File: autoconf.info, Node: Installation Directory Variables, Next: Changed Directory Variables, Prev: Preset Output Variables, Up: Makefile Substitutions
+
+4.8.2 Installation Directory Variables
+--------------------------------------
+
+The following variables specify the directories for package
+installation, see *note Variables for Installation Directories:
+(standards)Directory Variables, for more information. Each variable
+corresponds to an argument of `configure'; trailing slashes are
+stripped so that expressions such as `${prefix}/lib' expand with only
+one slash between directory names. See the end of this section for
+details on when and how to use these variables.
+
+ -- Variable: bindir
+ The directory for installing executables that users run.
+
+ -- Variable: datadir
+ The directory for installing idiosyncratic read-only
+ architecture-independent data.
+
+ -- Variable: datarootdir
+ The root of the directory tree for read-only
+ architecture-independent data files.
+
+ -- Variable: docdir
+ The directory for installing documentation files (other than Info
+ and man).
+
+ -- Variable: dvidir
+ The directory for installing documentation files in DVI format.
+
+ -- Variable: exec_prefix
+ The installation prefix for architecture-dependent files. By
+ default it's the same as `prefix'. You should avoid installing
+ anything directly to `exec_prefix'. However, the default value for
+ directories containing architecture-dependent files should be
+ relative to `exec_prefix'.
+
+ -- Variable: htmldir
+ The directory for installing HTML documentation.
+
+ -- Variable: includedir
+ The directory for installing C header files.
+
+ -- Variable: infodir
+ The directory for installing documentation in Info format.
+
+ -- Variable: libdir
+ The directory for installing object code libraries.
+
+ -- Variable: libexecdir
+ The directory for installing executables that other programs run.
+
+ -- Variable: localedir
+ The directory for installing locale-dependent but
+ architecture-independent data, such as message catalogs. This
+ directory usually has a subdirectory per locale.
+
+ -- Variable: localstatedir
+ The directory for installing modifiable single-machine data.
+
+ -- Variable: mandir
+ The top-level directory for installing documentation in man format.
+
+ -- Variable: oldincludedir
+ The directory for installing C header files for non-GCC compilers.
+
+ -- Variable: pdfdir
+ The directory for installing PDF documentation.
+
+ -- Variable: prefix
+ The common installation prefix for all files. If `exec_prefix' is
+ defined to a different value, `prefix' is used only for
+ architecture-independent files.
+
+ -- Variable: psdir
+ The directory for installing PostScript documentation.
+
+ -- Variable: sbindir
+ The directory for installing executables that system
+ administrators run.
+
+ -- Variable: sharedstatedir
+ The directory for installing modifiable architecture-independent
+ data.
+
+ -- Variable: sysconfdir
+ The directory for installing read-only single-machine data.
+
+ Most of these variables have values that rely on `prefix' or
+`exec_prefix'. It is deliberate that the directory output variables
+keep them unexpanded: typically `@datarootdir@' is replaced by
+`${prefix}/share', not `/usr/local/share', and `@datadir@' is replaced
+by `${datarootdir}'.
+
+ This behavior is mandated by the GNU Coding Standards, so that when
+the user runs:
+
+`make'
+ she can still specify a different prefix from the one specified to
+ `configure', in which case, if needed, the package should hard
+ code dependencies corresponding to the make-specified prefix.
+
+`make install'
+ she can specify a different installation location, in which case
+ the package _must_ still depend on the location which was compiled
+ in (i.e., never recompile when `make install' is run). This is an
+ extremely important feature, as many people may decide to install
+ all the files of a package grouped together, and then install
+ links from the final locations to there.
+
+ In order to support these features, it is essential that
+`datarootdir' remains defined as `${prefix}/share', so that its value
+can be expanded based on the current value of `prefix'.
+
+ A corollary is that you should not use these variables except in
+makefiles. For instance, instead of trying to evaluate `datadir' in
+`configure' and hard-coding it in makefiles using e.g.,
+`AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])', you
+should add `-DDATADIR='$(datadir)'' to your makefile's definition of
+`CPPFLAGS' (`AM_CPPFLAGS' if you are also using Automake).
+
+ Similarly, you should not rely on `AC_CONFIG_FILES' to replace
+`bindir' and friends in your shell scripts and other files; instead,
+let `make' manage their replacement. For instance Autoconf ships
+templates of its shell scripts ending with `.in', and uses a makefile
+snippet similar to the following to build scripts like `autoheader' and
+`autom4te':
+
+ edit = sed \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \
+ -e 's|@prefix[@]|$(prefix)|g'
+
+ autoheader autom4te: Makefile
+ rm -f $@ $@.tmp
+ srcdir=''; \
+ test -f ./$@.in || srcdir=$(srcdir)/; \
+ $(edit) $${srcdir}$@.in >$@.tmp
+ chmod +x $@.tmp
+ chmod a-w $@.tmp
+ mv $@.tmp $@
+
+ autoheader: $(srcdir)/autoheader.in
+ autom4te: $(srcdir)/autom4te.in
+
+ Some details are noteworthy:
+
+`@bindir[@]'
+ The brackets prevent `configure' from replacing `@bindir@' in the
+ Sed expression itself. Brackets are preferable to a backslash
+ here, since Posix says `\@' is not portable.
+
+`$(bindir)'
+ Don't use `@bindir@'! Use the matching makefile variable instead.
+
+`$(pkgdatadir)'
+ The example takes advantage of the variable `$(pkgdatadir)'
+ provided by Automake; it is equivalent to `$(datadir)/$(PACKAGE)'.
+
+`/'
+ Don't use `/' in the Sed expressions that replace file names since
+ most likely the variables you use, such as `$(bindir)', contain
+ `/'. Use a shell metacharacter instead, such as `|'.
+
+special characters
+ File names, file name components, and the value of `VPATH' should
+ not contain shell metacharacters or white space. *Note Special
+ Chars in Variables::.
+
+dependency on `Makefile'
+ Since `edit' uses values that depend on the configuration specific
+ values (`prefix', etc.) and not only on `VERSION' and so forth,
+ the output depends on `Makefile', not `configure.ac'.
+
+`$@'
+ The main rule is generic, and uses `$@' extensively to avoid the
+ need for multiple copies of the rule.
+
+Separated dependencies and single suffix rules
+ You can't use them! The above snippet cannot be (portably)
+ rewritten as:
+
+ autoconf autoheader: Makefile
+ .in:
+ rm -f $@ $@.tmp
+ $(edit) $< >$@.tmp
+ chmod +x $@.tmp
+ mv $@.tmp $@
+
+ *Note Single Suffix Rules::, for details.
+
+`$(srcdir)'
+ Be sure to specify the name of the source directory, otherwise the
+ package won't support separated builds.
+
+ For the more specific installation of Erlang libraries, the
+following variables are defined:
+
+ -- Variable: ERLANG_INSTALL_LIB_DIR
+ The common parent directory of Erlang library installation
+ directories. This variable is set by calling the
+ `AC_ERLANG_SUBST_INSTALL_LIB_DIR' macro in `configure.ac'.
+
+ -- Variable: ERLANG_INSTALL_LIB_DIR_LIBRARY
+ The installation directory for Erlang library LIBRARY. This
+ variable is set by using the `AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR'
+ macro in `configure.ac'.
+
+ *Note Erlang Libraries::, for details.
+
+
+File: autoconf.info, Node: Changed Directory Variables, Next: Build Directories, Prev: Installation Directory Variables, Up: Makefile Substitutions
+
+4.8.3 Changed Directory Variables
+---------------------------------
+
+In Autoconf 2.60, the set of directory variables has changed, and the
+defaults of some variables have been adjusted (*note Installation
+Directory Variables::) to changes in the GNU Coding Standards.
+Notably, `datadir', `infodir', and `mandir' are now expressed in terms
+of `datarootdir'. If you are upgrading from an earlier Autoconf
+version, you may need to adjust your files to ensure that the directory
+variables are substituted correctly (*note Defining Directories::), and
+that a definition of `datarootdir' is in place. For example, in a
+`Makefile.in', adding
+
+ datarootdir = @datarootdir@
+
+is usually sufficient. If you use Automake to create `Makefile.in', it
+will add this for you.
+
+ To help with the transition, Autoconf warns about files that seem to
+use `datarootdir' without defining it. In some cases, it then expands
+the value of `$datarootdir' in substitutions of the directory
+variables. The following example shows such a warning:
+
+ $ cat configure.ac
+ AC_INIT
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+ $ cat Makefile.in
+ prefix = @prefix@
+ datadir = @datadir@
+ $ autoconf
+ $ configure
+ configure: creating ./config.status
+ config.status: creating Makefile
+ config.status: WARNING:
+ Makefile.in seems to ignore the --datarootdir setting
+ $ cat Makefile
+ prefix = /usr/local
+ datadir = ${prefix}/share
+
+ Usually one can easily change the file to accommodate both older and
+newer Autoconf releases:
+
+ $ cat Makefile.in
+ prefix = @prefix@
+ datarootdir = @datarootdir@
+ datadir = @datadir@
+ $ configure
+ configure: creating ./config.status
+ config.status: creating Makefile
+ $ cat Makefile
+ prefix = /usr/local
+ datarootdir = ${prefix}/share
+ datadir = ${datarootdir}
+
+ In some cases, however, the checks may not be able to detect that a
+suitable initialization of `datarootdir' is in place, or they may fail
+to detect that such an initialization is necessary in the output file.
+If, after auditing your package, there are still spurious `configure'
+warnings about `datarootdir', you may add the line
+
+ AC_DEFUN([AC_DATAROOTDIR_CHECKED])
+
+to your `configure.ac' to disable the warnings. This is an exception
+to the usual rule that you should not define a macro whose name begins
+with `AC_' (*note Macro Names::).
+
+
+File: autoconf.info, Node: Build Directories, Next: Automatic Remaking, Prev: Changed Directory Variables, Up: Makefile Substitutions
+
+4.8.4 Build Directories
+-----------------------
+
+You can support compiling a software package for several architectures
+simultaneously from the same copy of the source code. The object files
+for each architecture are kept in their own directory.
+
+ To support doing this, `make' uses the `VPATH' variable to find the
+files that are in the source directory. GNU Make can do this. Most
+other recent `make' programs can do this as well, though they may have
+difficulties and it is often simpler to recommend GNU `make' (*note
+VPATH and Make::). Older `make' programs do not support `VPATH'; when
+using them, the source code must be in the same directory as the object
+files.
+
+ If you are using GNU Automake, the remaining details in this section
+are already covered for you, based on the contents of your
+`Makefile.am'. But if you are using Autoconf in isolation, then
+supporting `VPATH' requires the following in your `Makefile.in':
+
+ srcdir = @srcdir@
+ VPATH = @srcdir@
+
+ Do not set `VPATH' to the value of another variable (*note Variables
+listed in VPATH::.
+
+ `configure' substitutes the correct value for `srcdir' when it
+produces `Makefile'.
+
+ Do not use the `make' variable `$<', which expands to the file name
+of the file in the source directory (found with `VPATH'), except in
+implicit rules. (An implicit rule is one such as `.c.o', which tells
+how to create a `.o' file from a `.c' file.) Some versions of `make'
+do not set `$<' in explicit rules; they expand it to an empty value.
+
+ Instead, Make command lines should always refer to source files by
+prefixing them with `$(srcdir)/'. For example:
+
+ time.info: time.texinfo
+ $(MAKEINFO) '$(srcdir)/time.texinfo'
+
+
+File: autoconf.info, Node: Automatic Remaking, Prev: Build Directories, Up: Makefile Substitutions
+
+4.8.5 Automatic Remaking
+------------------------
+
+You can put rules like the following in the top-level `Makefile.in' for
+a package to automatically update the configuration information when
+you change the configuration files. This example includes all of the
+optional files, such as `aclocal.m4' and those related to configuration
+header files. Omit from the `Makefile.in' rules for any of these files
+that your package does not use.
+
+ The `$(srcdir)/' prefix is included because of limitations in the
+`VPATH' mechanism.
+
+ The `stamp-' files are necessary because the timestamps of
+`config.h.in' and `config.h' are not changed if remaking them does not
+change their contents. This feature avoids unnecessary recompilation.
+You should include the file `stamp-h.in' in your package's
+distribution, so that `make' considers `config.h.in' up to date. Don't
+use `touch' (*note Limitations of Usual Tools: touch.); instead, use
+`echo' (using `date' would cause needless differences, hence CVS
+conflicts, etc.).
+
+ $(srcdir)/configure: configure.ac aclocal.m4
+ cd '$(srcdir)' && autoconf
+
+ # autoheader might not change config.h.in, so touch a stamp file.
+ $(srcdir)/config.h.in: stamp-h.in
+ $(srcdir)/stamp-h.in: configure.ac aclocal.m4
+ cd '$(srcdir)' && autoheader
+ echo timestamp > '$(srcdir)/stamp-h.in'
+
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+ ./config.status
+
+ Makefile: Makefile.in config.status
+ ./config.status
+
+ config.status: configure
+ ./config.status --recheck
+
+(Be careful if you copy these lines directly into your makefile, as you
+need to convert the indented lines to start with the tab character.)
+
+ In addition, you should use
+
+ AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
+
+so `config.status' ensures that `config.h' is considered up to date.
+*Note Output::, for more information about `AC_OUTPUT'.
+
+ *Note config.status Invocation::, for more examples of handling
+configuration-related dependencies.
+
+
+File: autoconf.info, Node: Configuration Headers, Next: Configuration Commands, Prev: Makefile Substitutions, Up: Setup
+
+4.9 Configuration Header Files
+==============================
+
+When a package contains more than a few tests that define C preprocessor
+symbols, the command lines to pass `-D' options to the compiler can get
+quite long. This causes two problems. One is that the `make' output
+is hard to visually scan for errors. More seriously, the command lines
+can exceed the length limits of some operating systems. As an
+alternative to passing `-D' options to the compiler, `configure'
+scripts can create a C header file containing `#define' directives.
+The `AC_CONFIG_HEADERS' macro selects this kind of output. Though it
+can be called anywhere between `AC_INIT' and `AC_OUTPUT', it is
+customary to call it right after `AC_INIT'.
+
+ The package should `#include' the configuration header file before
+any other header files, to prevent inconsistencies in declarations (for
+example, if it redefines `const').
+
+ To provide for VPATH builds, remember to pass the C compiler a `-I.'
+option (or `-I..'; whichever directory contains `config.h'). Even if
+you use `#include "config.h"', the preprocessor searches only the
+directory of the currently read file, i.e., the source directory, not
+the build directory.
+
+ With the appropriate `-I' option, you can use `#include <config.h>'.
+Actually, it's a good habit to use it, because in the rare case when
+the source directory contains another `config.h', the build directory
+should be searched first.
+
+ -- Macro: AC_CONFIG_HEADERS (HEADER ..., [CMDS], [INIT-CMDS])
+ This macro is one of the instantiating macros; see *note
+ Configuration Actions::. Make `AC_OUTPUT' create the file(s) in
+ the blank-or-newline-separated list HEADER containing C
+ preprocessor `#define' statements, and replace `@DEFS@' in
+ generated files with `-DHAVE_CONFIG_H' instead of the value of
+ `DEFS'. The usual name for HEADER is `config.h'.
+
+ If HEADER already exists and its contents are identical to what
+ `AC_OUTPUT' would put in it, it is left alone. Doing this allows
+ making some changes in the configuration without needlessly causing
+ object files that depend on the header file to be recompiled.
+
+ Usually the input file is named `HEADER.in'; however, you can
+ override the input file name by appending to HEADER a
+ colon-separated list of input files. For example, you might need
+ to make the input file name acceptable to DOS variants:
+
+ AC_CONFIG_HEADERS([config.h:config.hin])
+
+
+ -- Macro: AH_HEADER
+ This macro is defined as the name of the first declared config
+ header and undefined if no config headers have been declared up to
+ this point. A third-party macro may, for example, require use of
+ a config header without invoking AC_CONFIG_HEADERS twice, like
+ this:
+
+ AC_CONFIG_COMMANDS_PRE(
+ [m4_ifndef([AH_HEADER], [AC_CONFIG_HEADERS([config.h])])])
+
+
+ *Note Configuration Actions::, for more details on HEADER.
+
+* Menu:
+
+* Header Templates:: Input for the configuration headers
+* autoheader Invocation:: How to create configuration templates
+* Autoheader Macros:: How to specify CPP templates
+
+
+File: autoconf.info, Node: Header Templates, Next: autoheader Invocation, Up: Configuration Headers
+
+4.9.1 Configuration Header Templates
+------------------------------------
+
+Your distribution should contain a template file that looks as you want
+the final header file to look, including comments, with `#undef'
+statements which are used as hooks. For example, suppose your
+`configure.ac' makes these calls:
+
+ AC_CONFIG_HEADERS([conf.h])
+ AC_CHECK_HEADERS([unistd.h])
+
+Then you could have code like the following in `conf.h.in'. The
+`conf.h' created by `configure' defines `HAVE_UNISTD_H' to 1, if and
+only if the system has `unistd.h'.
+
+ /* Define as 1 if you have unistd.h. */
+ #undef HAVE_UNISTD_H
+
+ The format of the template file is stricter than what the C
+preprocessor is required to accept. A directive line should contain
+only whitespace, `#undef', and `HAVE_UNISTD_H'. The use of `#define'
+instead of `#undef', or of comments on the same line as `#undef', is
+strongly discouraged. Each hook should only be listed once. Other
+preprocessor lines, such as `#ifdef' or `#include', are copied verbatim
+from the template into the generated header.
+
+ Since it is a tedious task to keep a template header up to date, you
+may use `autoheader' to generate it, see *note autoheader Invocation::.
+
+ During the instantiation of the header, each `#undef' line in the
+template file for each symbol defined by `AC_DEFINE' is changed to an
+appropriate `#define'. If the corresponding `AC_DEFINE' has not been
+executed during the `configure' run, the `#undef' line is commented
+out. (This is important, e.g., for `_POSIX_SOURCE': on many systems,
+it can be implicitly defined by the compiler, and undefining it in the
+header would then break compilation of subsequent headers.)
+
+ Currently, _all_ remaining `#undef' lines in the header template are
+commented out, whether or not there was a corresponding `AC_DEFINE' for
+the macro name; but this behavior is not guaranteed for future releases
+of Autoconf.
+
+ Generally speaking, since you should not use `#define', and you
+cannot guarantee whether a `#undef' directive in the header template
+will be converted to a `#define' or commented out in the generated
+header file, the template file cannot be used for conditional
+definition effects. Consequently, if you need to use the construct
+
+ #ifdef THIS
+ # define THAT
+ #endif
+
+you must place it outside of the template. If you absolutely need to
+hook it to the config header itself, please put the directives to a
+separate file, and `#include' that file from the config header
+template. If you are using `autoheader', you would probably use
+`AH_BOTTOM' to append the `#include' directive.
+
+
+File: autoconf.info, Node: autoheader Invocation, Next: Autoheader Macros, Prev: Header Templates, Up: Configuration Headers
+
+4.9.2 Using `autoheader' to Create `config.h.in'
+------------------------------------------------
+
+The `autoheader' program can create a template file of C `#define'
+statements for `configure' to use. It searches for the first
+invocation of `AC_CONFIG_HEADERS' in `configure' sources to determine
+the name of the template. (If the first call of `AC_CONFIG_HEADERS'
+specifies more than one input file name, `autoheader' uses the first
+one.)
+
+ It is recommended that only one input file is used. If you want to
+append a boilerplate code, it is preferable to use `AH_BOTTOM([#include
+<conf_post.h>])'. File `conf_post.h' is not processed during the
+configuration then, which make things clearer. Analogically, `AH_TOP'
+can be used to prepend a boilerplate code.
+
+ In order to do its job, `autoheader' needs you to document all of
+the symbols that you might use. Typically this is done via an
+`AC_DEFINE' or `AC_DEFINE_UNQUOTED' call whose first argument is a
+literal symbol and whose third argument describes the symbol (*note
+Defining Symbols::). Alternatively, you can use `AH_TEMPLATE' (*note
+Autoheader Macros::), or you can supply a suitable input file for a
+subsequent configuration header file. Symbols defined by Autoconf's
+builtin tests are already documented properly; you need to document
+only those that you define yourself.
+
+ You might wonder why `autoheader' is needed: after all, why would
+`configure' need to "patch" a `config.h.in' to produce a `config.h'
+instead of just creating `config.h' from scratch? Well, when
+everything rocks, the answer is just that we are wasting our time
+maintaining `autoheader': generating `config.h' directly is all that is
+needed. When things go wrong, however, you'll be thankful for the
+existence of `autoheader'.
+
+ The fact that the symbols are documented is important in order to
+_check_ that `config.h' makes sense. The fact that there is a
+well-defined list of symbols that should be defined (or not) is also
+important for people who are porting packages to environments where
+`configure' cannot be run: they just have to _fill in the blanks_.
+
+ But let's come back to the point: the invocation of `autoheader'...
+
+ If you give `autoheader' an argument, it uses that file instead of
+`configure.ac' and writes the header file to the standard output
+instead of to `config.h.in'. If you give `autoheader' an argument of
+`-', it reads the standard input instead of `configure.ac' and writes
+the header file to the standard output.
+
+ `autoheader' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Report processing steps.
+
+`--debug'
+`-d'
+ Don't remove the temporary files.
+
+`--force'
+`-f'
+ Remake the template file even if newer than its input files.
+
+`--include=DIR'
+`-I DIR'
+ Append DIR to the include path. Multiple invocations accumulate.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend DIR to the include path. Multiple invocations accumulate.
+
+`--warnings=CATEGORY'
+`-W CATEGORY'
+ Report the warnings related to CATEGORY (which can actually be a
+ comma separated list). Current categories include:
+
+ `obsolete'
+ report the uses of obsolete constructs
+
+ `all'
+ report all the warnings
+
+ `none'
+ report none
+
+ `error'
+ treats warnings as errors
+
+ `no-CATEGORY'
+ disable warnings falling into CATEGORY
+
+
+
+File: autoconf.info, Node: Autoheader Macros, Prev: autoheader Invocation, Up: Configuration Headers
+
+4.9.3 Autoheader Macros
+-----------------------
+
+`autoheader' scans `configure.ac' and figures out which C preprocessor
+symbols it might define. It knows how to generate templates for
+symbols defined by `AC_CHECK_HEADERS', `AC_CHECK_FUNCS' etc., but if
+you `AC_DEFINE' any additional symbol, you must define a template for
+it. If there are missing templates, `autoheader' fails with an error
+message.
+
+ The template for a SYMBOL is created by `autoheader' from the
+DESCRIPTION argument to an `AC_DEFINE'; see *note Defining Symbols::.
+
+ For special needs, you can use the following macros.
+
+ -- Macro: AH_TEMPLATE (KEY, DESCRIPTION)
+ Tell `autoheader' to generate a template for KEY. This macro
+ generates standard templates just like `AC_DEFINE' when a
+ DESCRIPTION is given.
+
+ For example:
+
+ AH_TEMPLATE([CRAY_STACKSEG_END],
+ [Define to one of _getb67, GETB67, getb67
+ for Cray-2 and Cray-YMP systems. This
+ function is required for alloca.c support
+ on those systems.])
+
+ generates the following template, with the description properly
+ justified.
+
+ /* Define to one of _getb67, GETB67, getb67 for Cray-2 and
+ Cray-YMP systems. This function is required for alloca.c
+ support on those systems. */
+ #undef CRAY_STACKSEG_END
+
+ -- Macro: AH_VERBATIM (KEY, TEMPLATE)
+ Tell `autoheader' to include the TEMPLATE as-is in the header
+ template file. This TEMPLATE is associated with the KEY, which is
+ used to sort all the different templates and guarantee their
+ uniqueness. It should be a symbol that can be defined via
+ `AC_DEFINE'.
+
+ -- Macro: AH_TOP (TEXT)
+ Include TEXT at the top of the header template file.
+
+ -- Macro: AH_BOTTOM (TEXT)
+ Include TEXT at the bottom of the header template file.
+
+ Please note that TEXT gets included "verbatim" to the template file,
+not to the resulting config header, so it can easily get mangled when
+the template is processed. There is rarely a need for something other
+than
+
+ AH_BOTTOM([#include <custom.h>])
+
+
+File: autoconf.info, Node: Configuration Commands, Next: Configuration Links, Prev: Configuration Headers, Up: Setup
+
+4.10 Running Arbitrary Configuration Commands
+=============================================
+
+You can execute arbitrary commands before, during, and after
+`config.status' is run. The three following macros accumulate the
+commands to run when they are called multiple times.
+`AC_CONFIG_COMMANDS' replaces the obsolete macro `AC_OUTPUT_COMMANDS';
+see *note Obsolete Macros::, for details.
+
+ -- Macro: AC_CONFIG_COMMANDS (TAG..., [CMDS], [INIT-CMDS])
+ Specify additional shell commands to run at the end of
+ `config.status', and shell commands to initialize any variables
+ from `configure'. Associate the commands with TAG. Since
+ typically the CMDS create a file, TAG should naturally be the name
+ of that file. If needed, the directory hosting TAG is created.
+ This macro is one of the instantiating macros; see *note
+ Configuration Actions::.
+
+ Here is an unrealistic example:
+ fubar=42
+ AC_CONFIG_COMMANDS([fubar],
+ [echo this is extra $fubar, and so on.],
+ [fubar=$fubar])
+
+ Here is a better one:
+ AC_CONFIG_COMMANDS([timestamp], [date >timestamp])
+
+ The following two macros look similar, but in fact they are not of
+the same breed: they are executed directly by `configure', so you
+cannot use `config.status' to rerun them.
+
+ -- Macro: AC_CONFIG_COMMANDS_PRE (CMDS)
+ Execute the CMDS right before creating `config.status'.
+
+ This macro presents the last opportunity to call `AC_SUBST',
+ `AC_DEFINE', or `AC_CONFIG_ITEMS' macros.
+
+ -- Macro: AC_CONFIG_COMMANDS_POST (CMDS)
+ Execute the CMDS right after creating `config.status'.
+
+
+File: autoconf.info, Node: Configuration Links, Next: Subdirectories, Prev: Configuration Commands, Up: Setup
+
+4.11 Creating Configuration Links
+=================================
+
+You may find it convenient to create links whose destinations depend
+upon results of tests. One can use `AC_CONFIG_COMMANDS' but the
+creation of relative symbolic links can be delicate when the package is
+built in a directory different from the source directory.
+
+ -- Macro: AC_CONFIG_LINKS (DEST:SOURCE..., [CMDS], [INIT-CMDS])
+ Make `AC_OUTPUT' link each of the existing files SOURCE to the
+ corresponding link name DEST. Makes a symbolic link if possible,
+ otherwise a hard link if possible, otherwise a copy. The DEST and
+ SOURCE names should be relative to the top level source or build
+ directory. This macro is one of the instantiating macros; see
+ *note Configuration Actions::.
+
+ For example, this call:
+
+ AC_CONFIG_LINKS([host.h:config/$machine.h
+ object.h:config/$obj_format.h])
+
+ creates in the current directory `host.h' as a link to
+ `SRCDIR/config/$machine.h', and `object.h' as a link to
+ `SRCDIR/config/$obj_format.h'.
+
+ The tempting value `.' for DEST is invalid: it makes it impossible
+ for `config.status' to guess the links to establish.
+
+ One can then run:
+ ./config.status host.h object.h
+ to create the links.
+
+
+File: autoconf.info, Node: Subdirectories, Next: Default Prefix, Prev: Configuration Links, Up: Setup
+
+4.12 Configuring Other Packages in Subdirectories
+=================================================
+
+In most situations, calling `AC_OUTPUT' is sufficient to produce
+makefiles in subdirectories. However, `configure' scripts that control
+more than one independent package can use `AC_CONFIG_SUBDIRS' to run
+`configure' scripts for other packages in subdirectories.
+
+ -- Macro: AC_CONFIG_SUBDIRS (DIR ...)
+ Make `AC_OUTPUT' run `configure' in each subdirectory DIR in the
+ given blank-or-newline-separated list. Each DIR should be a
+ literal, i.e., please do not use:
+
+ if test "x$package_foo_enabled" = xyes; then
+ my_subdirs="$my_subdirs foo"
+ fi
+ AC_CONFIG_SUBDIRS([$my_subdirs])
+
+ because this prevents `./configure --help=recursive' from
+ displaying the options of the package `foo'. Instead, you should
+ write:
+
+ if test "x$package_foo_enabled" = xyes; then
+ AC_CONFIG_SUBDIRS([foo])
+ fi
+
+ If a given DIR is not found at `configure' run time, a warning is
+ reported; if the subdirectory is optional, write:
+
+ if test -d "$srcdir/foo"; then
+ AC_CONFIG_SUBDIRS([foo])
+ fi
+
+ If a given DIR contains `configure.gnu', it is run instead of
+ `configure'. This is for packages that might use a non-Autoconf
+ script `Configure', which can't be called through a wrapper
+ `configure' since it would be the same file on case-insensitive
+ file systems. Likewise, if a DIR contains `configure.in' but no
+ `configure', the Cygnus `configure' script found by
+ `AC_CONFIG_AUX_DIR' is used.
+
+ The subdirectory `configure' scripts are given the same command
+ line options that were given to this `configure' script, with minor
+ changes if needed, which include:
+
+ - adjusting a relative name for the cache file;
+
+ - adjusting a relative name for the source directory;
+
+ - propagating the current value of `$prefix', including if it
+ was defaulted, and if the default values of the top level and
+ of the subdirectory `configure' differ.
+
+ This macro also sets the output variable `subdirs' to the list of
+ directories `DIR ...'. Make rules can use this variable to
+ determine which subdirectories to recurse into.
+
+ This macro may be called multiple times.
+
+
+File: autoconf.info, Node: Default Prefix, Prev: Subdirectories, Up: Setup
+
+4.13 Default Prefix
+===================
+
+By default, `configure' sets the prefix for files it installs to
+`/usr/local'. The user of `configure' can select a different prefix
+using the `--prefix' and `--exec-prefix' options. There are two ways
+to change the default: when creating `configure', and when running it.
+
+ Some software packages might want to install in a directory other
+than `/usr/local' by default. To accomplish that, use the
+`AC_PREFIX_DEFAULT' macro.
+
+ -- Macro: AC_PREFIX_DEFAULT (PREFIX)
+ Set the default installation prefix to PREFIX instead of
+ `/usr/local'.
+
+ It may be convenient for users to have `configure' guess the
+installation prefix from the location of a related program that they
+have already installed. If you wish to do that, you can call
+`AC_PREFIX_PROGRAM'.
+
+ -- Macro: AC_PREFIX_PROGRAM (PROGRAM)
+ If the user did not specify an installation prefix (using the
+ `--prefix' option), guess a value for it by looking for PROGRAM in
+ `PATH', the way the shell does. If PROGRAM is found, set the
+ prefix to the parent of the directory containing PROGRAM, else
+ default the prefix as described above (`/usr/local' or
+ `AC_PREFIX_DEFAULT'). For example, if PROGRAM is `gcc' and the
+ `PATH' contains `/usr/local/gnu/bin/gcc', set the prefix to
+ `/usr/local/gnu'.
+
+
+File: autoconf.info, Node: Existing Tests, Next: Writing Tests, Prev: Setup, Up: Top
+
+5 Existing Tests
+****************
+
+These macros test for particular system features that packages might
+need or want to use. If you need to test for a kind of feature that
+none of these macros check for, you can probably do it by calling
+primitive test macros with appropriate arguments (*note Writing
+Tests::).
+
+ These tests print messages telling the user which feature they're
+checking for, and what they find. They cache their results for future
+`configure' runs (*note Caching Results::).
+
+ Some of these macros set output variables. *Note Makefile
+Substitutions::, for how to get their values. The phrase "define NAME"
+is used below as a shorthand to mean "define the C preprocessor symbol
+NAME to the value 1". *Note Defining Symbols::, for how to get those
+symbol definitions into your program.
+
+* Menu:
+
+* Common Behavior:: Macros' standard schemes
+* Alternative Programs:: Selecting between alternative programs
+* Files:: Checking for the existence of files
+* Libraries:: Library archives that might be missing
+* Library Functions:: C library functions that might be missing
+* Header Files:: Header files that might be missing
+* Declarations:: Declarations that may be missing
+* Structures:: Structures or members that might be missing
+* Types:: Types that might be missing
+* Compilers and Preprocessors:: Checking for compiling programs
+* System Services:: Operating system services
+* Posix Variants:: Special kludges for specific Posix variants
+* Erlang Libraries:: Checking for the existence of Erlang libraries
+
+
+File: autoconf.info, Node: Common Behavior, Next: Alternative Programs, Up: Existing Tests
+
+5.1 Common Behavior
+===================
+
+Much effort has been expended to make Autoconf easy to learn. The most
+obvious way to reach this goal is simply to enforce standard interfaces
+and behaviors, avoiding exceptions as much as possible. Because of
+history and inertia, unfortunately, there are still too many exceptions
+in Autoconf; nevertheless, this section describes some of the common
+rules.
+
+* Menu:
+
+* Standard Symbols:: Symbols defined by the macros
+* Default Includes:: Includes used by the generic macros
+
+
+File: autoconf.info, Node: Standard Symbols, Next: Default Includes, Up: Common Behavior
+
+5.1.1 Standard Symbols
+----------------------
+
+All the generic macros that `AC_DEFINE' a symbol as a result of their
+test transform their ARGUMENT values to a standard alphabet. First,
+ARGUMENT is converted to upper case and any asterisks (`*') are each
+converted to `P'. Any remaining characters that are not alphanumeric
+are converted to underscores.
+
+ For instance,
+
+ AC_CHECK_TYPES([struct $Expensive*])
+
+defines the symbol `HAVE_STRUCT__EXPENSIVEP' if the check succeeds.
+
+
+File: autoconf.info, Node: Default Includes, Prev: Standard Symbols, Up: Common Behavior
+
+5.1.2 Default Includes
+----------------------
+
+Several tests depend upon a set of header files. Since these headers
+are not universally available, tests actually have to provide a set of
+protected includes, such as:
+
+ #ifdef TIME_WITH_SYS_TIME
+ # include <sys/time.h>
+ # include <time.h>
+ #else
+ # ifdef HAVE_SYS_TIME_H
+ # include <sys/time.h>
+ # else
+ # include <time.h>
+ # endif
+ #endif
+
+Unless you know exactly what you are doing, you should avoid using
+unconditional includes, and check the existence of the headers you
+include beforehand (*note Header Files::).
+
+ Most generic macros use the following macro to provide the default
+set of includes:
+
+ -- Macro: AC_INCLUDES_DEFAULT ([INCLUDE-DIRECTIVES])
+ Expand to INCLUDE-DIRECTIVES if defined, otherwise to:
+
+ #include <stdio.h>
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+ #ifdef STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ # endif
+ #endif
+ #ifdef HAVE_STRING_H
+ # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+ # include <memory.h>
+ # endif
+ # include <string.h>
+ #endif
+ #ifdef HAVE_STRINGS_H
+ # include <strings.h>
+ #endif
+ #ifdef HAVE_INTTYPES_H
+ # include <inttypes.h>
+ #endif
+ #ifdef HAVE_STDINT_H
+ # include <stdint.h>
+ #endif
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+
+ If the default includes are used, then check for the presence of
+ these headers and their compatibility, i.e., you don't need to run
+ `AC_HEADER_STDC', nor check for `stdlib.h' etc.
+
+ These headers are checked for in the same order as they are
+ included. For instance, on some systems `string.h' and
+ `strings.h' both exist, but conflict. Then `HAVE_STRING_H' is
+ defined, not `HAVE_STRINGS_H'.
+
+
+File: autoconf.info, Node: Alternative Programs, Next: Files, Prev: Common Behavior, Up: Existing Tests
+
+5.2 Alternative Programs
+========================
+
+These macros check for the presence or behavior of particular programs.
+They are used to choose between several alternative programs and to
+decide what to do once one has been chosen. If there is no macro
+specifically defined to check for a program you need, and you don't need
+to check for any special properties of it, then you can use one of the
+general program-check macros.
+
+* Menu:
+
+* Particular Programs:: Special handling to find certain programs
+* Generic Programs:: How to find other programs
+
+
+File: autoconf.info, Node: Particular Programs, Next: Generic Programs, Up: Alternative Programs
+
+5.2.1 Particular Program Checks
+-------------------------------
+
+These macros check for particular programs--whether they exist, and in
+some cases whether they support certain features.
+
+ -- Macro: AC_PROG_AWK
+ Check for `gawk', `mawk', `nawk', and `awk', in that order, and
+ set output variable `AWK' to the first one that is found. It
+ tries `gawk' first because that is reported to be the best
+ implementation. The result can be overridden by setting the
+ variable `AWK' or the cache variable `ac_cv_prog_AWK'.
+
+ Using this macro is sufficient to avoid the pitfalls of traditional
+ `awk' (*note Limitations of Usual Tools: awk.).
+
+ -- Macro: AC_PROG_GREP
+ Look for the best available `grep' or `ggrep' that accepts the
+ longest input lines possible, and that supports multiple `-e'
+ options. Set the output variable `GREP' to whatever is chosen.
+ *Note Limitations of Usual Tools: grep, for more information about
+ portability problems with the `grep' command family. The result
+ can be overridden by setting the `GREP' variable and is cached in
+ the `ac_cv_path_GREP' variable.
+
+ -- Macro: AC_PROG_EGREP
+ Check whether `$GREP -E' works, or else look for the best available
+ `egrep' or `gegrep' that accepts the longest input lines possible.
+ Set the output variable `EGREP' to whatever is chosen. The result
+ can be overridden by setting the `EGREP' variable and is cached in
+ the `ac_cv_path_EGREP' variable.
+
+ -- Macro: AC_PROG_FGREP
+ Check whether `$GREP -F' works, or else look for the best available
+ `fgrep' or `gfgrep' that accepts the longest input lines possible.
+ Set the output variable `FGREP' to whatever is chosen. The result
+ can be overridden by setting the `FGREP' variable and is cached in
+ the `ac_cv_path_FGREP' variable.
+
+ -- Macro: AC_PROG_INSTALL
+ Set output variable `INSTALL' to the name of a BSD-compatible
+ `install' program, if one is found in the current `PATH'.
+ Otherwise, set `INSTALL' to `DIR/install-sh -c', checking the
+ directories specified to `AC_CONFIG_AUX_DIR' (or its default
+ directories) to determine DIR (*note Output::). Also set the
+ variables `INSTALL_PROGRAM' and `INSTALL_SCRIPT' to `${INSTALL}'
+ and `INSTALL_DATA' to `${INSTALL} -m 644'.
+
+ `@INSTALL@' is special, as its value may vary for different
+ configuration files.
+
+ This macro screens out various instances of `install' known not to
+ work. It prefers to find a C program rather than a shell script,
+ for speed. Instead of `install-sh', it can also use `install.sh',
+ but that name is obsolete because some `make' programs have a rule
+ that creates `install' from it if there is no makefile. Further,
+ this macro requires `install' to be able to install multiple files
+ into a target directory in a single invocation.
+
+ Autoconf comes with a copy of `install-sh' that you can use. If
+ you use `AC_PROG_INSTALL', you must include either `install-sh' or
+ `install.sh' in your distribution; otherwise `configure' produces
+ an error message saying it can't find them--even if the system
+ you're on has a good `install' program. This check is a safety
+ measure to prevent you from accidentally leaving that file out,
+ which would prevent your package from installing on systems that
+ don't have a BSD-compatible `install' program.
+
+ If you need to use your own installation program because it has
+ features not found in standard `install' programs, there is no
+ reason to use `AC_PROG_INSTALL'; just put the file name of your
+ program into your `Makefile.in' files.
+
+ The result of the test can be overridden by setting the variable
+ `INSTALL' or the cache variable `ac_cv_path_install'.
+
+ -- Macro: AC_PROG_MKDIR_P
+ Set output variable `MKDIR_P' to a program that ensures that for
+ each argument, a directory named by this argument exists, creating
+ it and its parent directories if needed, and without race
+ conditions when two instances of the program attempt to make the
+ same directory at nearly the same time.
+
+ This macro uses the `mkdir -p' command if possible. Otherwise, it
+ falls back on invoking `install-sh' with the `-d' option, so your
+ package should contain `install-sh' as described under
+ `AC_PROG_INSTALL'. An `install-sh' file that predates Autoconf
+ 2.60 or Automake 1.10 is vulnerable to race conditions, so if you
+ want to support parallel installs from different packages into the
+ same directory you need to make sure you have an up-to-date
+ `install-sh'. In particular, be careful about using `autoreconf
+ -if' if your Automake predates Automake 1.10.
+
+ This macro is related to the `AS_MKDIR_P' macro (*note Programming
+ in M4sh::), but it sets an output variable intended for use in
+ other files, whereas `AS_MKDIR_P' is intended for use in scripts
+ like `configure'. Also, `AS_MKDIR_P' does not accept options, but
+ `MKDIR_P' supports the `-m' option, e.g., a makefile might invoke
+ `$(MKDIR_P) -m 0 dir' to create an inaccessible directory, and
+ conversely a makefile should use `$(MKDIR_P) -- $(FOO)' if FOO
+ might yield a value that begins with `-'. Finally, `AS_MKDIR_P'
+ does not check for race condition vulnerability, whereas
+ `AC_PROG_MKDIR_P' does.
+
+ `@MKDIR_P@' is special, as its value may vary for different
+ configuration files.
+
+ The result of the test can be overridden by setting the variable
+ `MKDIR_P' or the cache variable `ac_cv_path_mkdir'.
+
+ -- Macro: AC_PROG_LEX
+ If `flex' is found, set output variable `LEX' to `flex' and
+ `LEXLIB' to `-lfl', if that library is in a standard place.
+ Otherwise set `LEX' to `lex' and `LEXLIB' to `-ll', if found. If
+ neither variant is available, set `LEX' to `:'; for packages that
+ ship the generated `file.yy.c' alongside the source `file.l', this
+ default allows users without a lexer generator to still build the
+ package even if the timestamp for `file.l' is inadvertently
+ changed.
+
+ Define `YYTEXT_POINTER' if `yytext' defaults to `char *' instead
+ of to `char []'. Also set output variable `LEX_OUTPUT_ROOT' to
+ the base of the file name that the lexer generates; usually
+ `lex.yy', but sometimes something else. These results vary
+ according to whether `lex' or `flex' is being used.
+
+ You are encouraged to use Flex in your sources, since it is both
+ more pleasant to use than plain Lex and the C source it produces
+ is portable. In order to ensure portability, however, you must
+ either provide a function `yywrap' or, if you don't use it (e.g.,
+ your scanner has no `#include'-like feature), simply include a
+ `%noyywrap' statement in the scanner's source. Once this done,
+ the scanner is portable (unless _you_ felt free to use nonportable
+ constructs) and does not depend on any library. In this case, and
+ in this case only, it is suggested that you use this Autoconf
+ snippet:
+
+ AC_PROG_LEX
+ if test "x$LEX" != xflex; then
+ LEX="$SHELL $missing_dir/missing flex"
+ AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
+ AC_SUBST([LEXLIB], [''])
+ fi
+
+ The shell script `missing' can be found in the Automake
+ distribution.
+
+ Remember that the user may have supplied an alternate location in
+ `LEX', so if Flex is required, it is better to check that the user
+ provided something sufficient by parsing the output of `$LEX
+ --version' than by simply relying on `test "x$LEX" = xflex'.
+
+ To ensure backward compatibility, Automake's `AM_PROG_LEX' invokes
+ (indirectly) this macro twice, which causes an annoying but benign
+ "`AC_PROG_LEX' invoked multiple times" warning. Future versions
+ of Automake will fix this issue; meanwhile, just ignore this
+ message.
+
+ As part of running the test, this macro may delete any file in the
+ configuration directory named `lex.yy.c' or `lexyy.c'.
+
+ The result of this test can be influenced by setting the variable
+ `LEX' or the cache variable `ac_cv_prog_LEX'.
+
+ -- Macro: AC_PROG_LN_S
+ If `ln -s' works on the current file system (the operating system
+ and file system support symbolic links), set the output variable
+ `LN_S' to `ln -s'; otherwise, if `ln' works, set `LN_S' to `ln',
+ and otherwise set it to `cp -pR'.
+
+ If you make a link in a directory other than the current
+ directory, its meaning depends on whether `ln' or `ln -s' is used.
+ To safely create links using `$(LN_S)', either find out which form
+ is used and adjust the arguments, or always invoke `ln' in the
+ directory where the link is to be created.
+
+ In other words, it does not work to do:
+ $(LN_S) foo /x/bar
+
+ Instead, do:
+
+ (cd /x && $(LN_S) foo bar)
+
+ -- Macro: AC_PROG_RANLIB
+ Set output variable `RANLIB' to `ranlib' if `ranlib' is found, and
+ otherwise to `:' (do nothing).
+
+ -- Macro: AC_PROG_SED
+ Set output variable `SED' to a Sed implementation that conforms to
+ Posix and does not have arbitrary length limits. Report an error
+ if no acceptable Sed is found. *Note Limitations of Usual Tools:
+ sed, for more information about portability problems with Sed.
+
+ The result of this test can be overridden by setting the `SED'
+ variable and is cached in the `ac_cv_path_SED' variable.
+
+ -- Macro: AC_PROG_YACC
+ If `bison' is found, set output variable `YACC' to `bison -y'.
+ Otherwise, if `byacc' is found, set `YACC' to `byacc'. Otherwise
+ set `YACC' to `yacc'. The result of this test can be influenced
+ by setting the variable `YACC' or the cache variable
+ `ac_cv_prog_YACC'.
+
+
+File: autoconf.info, Node: Generic Programs, Prev: Particular Programs, Up: Alternative Programs
+
+5.2.2 Generic Program and File Checks
+-------------------------------------
+
+These macros are used to find programs not covered by the "particular"
+test macros. If you need to check the behavior of a program as well as
+find out whether it is present, you have to write your own test for it
+(*note Writing Tests::). By default, these macros use the environment
+variable `PATH'. If you need to check for a program that might not be
+in the user's `PATH', you can pass a modified path to use instead, like
+this:
+
+ AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd],
+ [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl
+ [/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
+
+ You are strongly encouraged to declare the VARIABLE passed to
+`AC_CHECK_PROG' etc. as precious. *Note Setting Output Variables::,
+`AC_ARG_VAR', for more details.
+
+ -- Macro: AC_CHECK_PROG (VARIABLE, PROG-TO-CHECK-FOR, VALUE-IF-FOUND,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'], [REJECT])
+ Check whether program PROG-TO-CHECK-FOR exists in PATH. If it is
+ found, set VARIABLE to VALUE-IF-FOUND, otherwise to
+ VALUE-IF-NOT-FOUND, if given. Always pass over REJECT (an
+ absolute file name) even if it is the first found in the search
+ path; in that case, set VARIABLE using the absolute file name of
+ the PROG-TO-CHECK-FOR found that is not REJECT. If VARIABLE was
+ already set, do nothing. Calls `AC_SUBST' for VARIABLE. The
+ result of this test can be overridden by setting the VARIABLE
+ variable or the cache variable `ac_cv_prog_VARIABLE'.
+
+ -- Macro: AC_CHECK_PROGS (VARIABLE, PROGS-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Check for each program in the blank-separated list
+ PROGS-TO-CHECK-FOR existing in the PATH. If one is found, set
+ VARIABLE to the name of that program. Otherwise, continue
+ checking the next program in the list. If none of the programs in
+ the list are found, set VARIABLE to VALUE-IF-NOT-FOUND; if
+ VALUE-IF-NOT-FOUND is not specified, the value of VARIABLE is not
+ changed. Calls `AC_SUBST' for VARIABLE. The result of this test
+ can be overridden by setting the VARIABLE variable or the cache
+ variable `ac_cv_prog_VARIABLE'.
+
+ -- Macro: AC_CHECK_TARGET_TOOL (VARIABLE, PROG-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_PROG', but first looks for PROG-TO-CHECK-FOR with a
+ prefix of the target type as determined by `AC_CANONICAL_TARGET',
+ followed by a dash (*note Canonicalizing::). If the tool cannot
+ be found with a prefix, and if the build and target types are
+ equal, then it is also searched for without a prefix.
+
+ As noted in *note Specifying Target Triplets::, the target is
+ rarely specified, because most of the time it is the same as the
+ host: it is the type of system for which any compiler tool in the
+ package produces code. What this macro looks for is, for example,
+ _a tool (assembler, linker, etc.) that the compiler driver (`gcc'
+ for the GNU C Compiler) uses to produce objects, archives or
+ executables_.
+
+ -- Macro: AC_CHECK_TOOL (VARIABLE, PROG-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_PROG', but first looks for PROG-TO-CHECK-FOR with a
+ prefix of the host type as specified by `--host', followed by a
+ dash. For example, if the user runs `configure --build=x86_64-gnu
+ --host=i386-gnu', then this call:
+ AC_CHECK_TOOL([RANLIB], [ranlib], [:])
+ sets `RANLIB' to `i386-gnu-ranlib' if that program exists in PATH,
+ or otherwise to `ranlib' if that program exists in PATH, or to `:'
+ if neither program exists.
+
+ When cross-compiling, this macro will issue a warning if no program
+ prefixed with the host type could be found. For more information,
+ see *note Specifying Target Triplets::.
+
+ -- Macro: AC_CHECK_TARGET_TOOLS (VARIABLE, PROGS-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_TARGET_TOOL', each of the tools in the list
+ PROGS-TO-CHECK-FOR are checked with a prefix of the target type as
+ determined by `AC_CANONICAL_TARGET', followed by a dash (*note
+ Canonicalizing::). If none of the tools can be found with a
+ prefix, and if the build and target types are equal, then the
+ first one without a prefix is used. If a tool is found, set
+ VARIABLE to the name of that program. If none of the tools in the
+ list are found, set VARIABLE to VALUE-IF-NOT-FOUND; if
+ VALUE-IF-NOT-FOUND is not specified, the value of VARIABLE is not
+ changed. Calls `AC_SUBST' for VARIABLE.
+
+ -- Macro: AC_CHECK_TOOLS (VARIABLE, PROGS-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_TOOL', each of the tools in the list
+ PROGS-TO-CHECK-FOR are checked with a prefix of the host type as
+ determined by `AC_CANONICAL_HOST', followed by a dash (*note
+ Canonicalizing::). If none of the tools can be found with a
+ prefix, then the first one without a prefix is used. If a tool is
+ found, set VARIABLE to the name of that program. If none of the
+ tools in the list are found, set VARIABLE to VALUE-IF-NOT-FOUND; if
+ VALUE-IF-NOT-FOUND is not specified, the value of VARIABLE is not
+ changed. Calls `AC_SUBST' for VARIABLE.
+
+ When cross-compiling, this macro will issue a warning if no program
+ prefixed with the host type could be found. For more information,
+ see *note Specifying Target Triplets::.
+
+ -- Macro: AC_PATH_PROG (VARIABLE, PROG-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_PROG', but set VARIABLE to the absolute name of
+ PROG-TO-CHECK-FOR if found. The result of this test can be
+ overridden by setting the VARIABLE variable. A positive result of
+ this test is cached in the `ac_cv_path_VARIABLE' variable.
+
+ -- Macro: AC_PATH_PROGS (VARIABLE, PROGS-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_PROGS', but if any of PROGS-TO-CHECK-FOR are found,
+ set VARIABLE to the absolute name of the program found. The
+ result of this test can be overridden by setting the VARIABLE
+ variable. A positive result of this test is cached in the
+ `ac_cv_path_VARIABLE' variable.
+
+ -- Macro: AC_PATH_PROGS_FEATURE_CHECK (VARIABLE, PROGS-TO-CHECK-FOR,
+ FEATURE-TEST, [ACTION-IF-NOT-FOUND], [PATH = `$PATH'])
+ This macro was introduced in Autoconf 2.62. If VARIABLE is not
+ empty, then set the cache variable `ac_cv_path_VARIABLE' to its
+ value. Otherwise, check for each program in the blank-separated
+ list PROGS-TO-CHECK-FOR existing in PATH. For each program found,
+ execute FEATURE-TEST with `ac_path_VARIABLE' set to the absolute
+ name of the candidate program. If no invocation of FEATURE-TEST
+ sets the shell variable `ac_cv_path_VARIABLE', then
+ ACTION-IF-NOT-FOUND is executed. FEATURE-TEST will be run even
+ when `ac_cv_path_VARIABLE' is set, to provide the ability to
+ choose a better candidate found later in PATH; to accept the
+ current setting and bypass all further checks, FEATURE-TEST can
+ execute `ac_path_VARIABLE_found=:'.
+
+ Note that this macro has some subtle differences from
+ `AC_CHECK_PROGS'. It is designed to be run inside `AC_CACHE_VAL',
+ therefore, it should have no side effects. In particular,
+ VARIABLE is not set to the final value of `ac_cv_path_VARIABLE',
+ nor is `AC_SUBST' automatically run. Also, on failure, any action
+ can be performed, whereas `AC_CHECK_PROGS' only performs
+ `VARIABLE=VALUE-IF-NOT-FOUND'.
+
+ Here is an example, similar to what Autoconf uses in its own
+ configure script. It will search for an implementation of `m4'
+ that supports the `indir' builtin, even if it goes by the name
+ `gm4' or is not the first implementation on `PATH'.
+
+ AC_CACHE_CHECK([for m4 that supports indir], [ac_cv_path_M4],
+ [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4],
+ [[m4out=`echo 'changequote([,])indir([divnum])' | $ac_path_M4`
+ test "x$m4out" = x0 \
+ && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]],
+ [AC_MSG_ERROR([could not find m4 that supports indir])])])
+ AC_SUBST([M4], [$ac_cv_path_M4])
+
+ -- Macro: AC_PATH_TARGET_TOOL (VARIABLE, PROG-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_TARGET_TOOL', but set VARIABLE to the absolute name
+ of the program if it is found.
+
+ -- Macro: AC_PATH_TOOL (VARIABLE, PROG-TO-CHECK-FOR,
+ [VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Like `AC_CHECK_TOOL', but set VARIABLE to the absolute name of the
+ program if it is found.
+
+ When cross-compiling, this macro will issue a warning if no program
+ prefixed with the host type could be found. For more information,
+ see *note Specifying Target Triplets::.
+
+
+File: autoconf.info, Node: Files, Next: Libraries, Prev: Alternative Programs, Up: Existing Tests
+
+5.3 Files
+=========
+
+You might also need to check for the existence of files. Before using
+these macros, ask yourself whether a runtime test might not be a better
+solution. Be aware that, like most Autoconf macros, they test a feature
+of the host machine, and therefore, they die when cross-compiling.
+
+ -- Macro: AC_CHECK_FILE (FILE, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ Check whether file FILE exists on the native system. If it is
+ found, execute ACTION-IF-FOUND, otherwise do ACTION-IF-NOT-FOUND,
+ if given. The result of this test is cached in the
+ `ac_cv_file_FILE' variable, with characters not suitable for a
+ variable name mapped to underscores.
+
+ -- Macro: AC_CHECK_FILES (FILES, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ Executes `AC_CHECK_FILE' once for each file listed in FILES.
+ Additionally, defines `HAVE_FILE' (*note Standard Symbols::) for
+ each file found. The results of each test are cached in the
+ `ac_cv_file_FILE' variable, with characters not suitable for a
+ variable name mapped to underscores.
+
+
+File: autoconf.info, Node: Libraries, Next: Library Functions, Prev: Files, Up: Existing Tests
+
+5.4 Library Files
+=================
+
+The following macros check for the presence of certain C, C++, Fortran,
+or Go library archive files.
+
+ -- Macro: AC_CHECK_LIB (LIBRARY, FUNCTION, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES])
+ Test whether the library LIBRARY is available by trying to link a
+ test program that calls function FUNCTION with the library.
+ FUNCTION should be a function provided by the library. Use the
+ base name of the library; e.g., to check for `-lmp', use `mp' as
+ the LIBRARY argument.
+
+ ACTION-IF-FOUND is a list of shell commands to run if the link
+ with the library succeeds; ACTION-IF-NOT-FOUND is a list of shell
+ commands to run if the link fails. If ACTION-IF-FOUND is not
+ specified, the default action prepends `-lLIBRARY' to `LIBS' and
+ defines `HAVE_LIBLIBRARY' (in all capitals). This macro is
+ intended to support building `LIBS' in a right-to-left
+ (least-dependent to most-dependent) fashion such that library
+ dependencies are satisfied as a natural side effect of consecutive
+ tests. Linkers are sensitive to library ordering so the order in
+ which `LIBS' is generated is important to reliable detection of
+ libraries.
+
+ If linking with LIBRARY results in unresolved symbols that would
+ be resolved by linking with additional libraries, give those
+ libraries as the OTHER-LIBRARIES argument, separated by spaces:
+ e.g., `-lXt -lX11'. Otherwise, this macro may fail to detect that
+ LIBRARY is present, because linking the test program can fail with
+ unresolved symbols. The OTHER-LIBRARIES argument should be
+ limited to cases where it is desirable to test for one library in
+ the presence of another that is not already in `LIBS'.
+
+ `AC_CHECK_LIB' requires some care in usage, and should be avoided
+ in some common cases. Many standard functions like `gethostbyname'
+ appear in the standard C library on some hosts, and in special
+ libraries like `nsl' on other hosts. On some hosts the special
+ libraries contain variant implementations that you may not want to
+ use. These days it is normally better to use
+ `AC_SEARCH_LIBS([gethostbyname], [nsl])' instead of
+ `AC_CHECK_LIB([nsl], [gethostbyname])'.
+
+ The result of this test is cached in the
+ `ac_cv_lib_LIBRARY_FUNCTION' variable.
+
+ -- Macro: AC_SEARCH_LIBS (FUNCTION, SEARCH-LIBS, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES])
+ Search for a library defining FUNCTION if it's not already
+ available. This equates to calling
+ `AC_LINK_IFELSE([AC_LANG_CALL([], [FUNCTION])])' first with no
+ libraries, then for each library listed in SEARCH-LIBS.
+
+ Prepend `-lLIBRARY' to `LIBS' for the first library found to
+ contain FUNCTION, and run ACTION-IF-FOUND. If the function is not
+ found, run ACTION-IF-NOT-FOUND.
+
+ If linking with LIBRARY results in unresolved symbols that would
+ be resolved by linking with additional libraries, give those
+ libraries as the OTHER-LIBRARIES argument, separated by spaces:
+ e.g., `-lXt -lX11'. Otherwise, this macro fails to detect that
+ FUNCTION is present, because linking the test program always fails
+ with unresolved symbols.
+
+ The result of this test is cached in the `ac_cv_search_FUNCTION'
+ variable as `none required' if FUNCTION is already available, as
+ `no' if no library containing FUNCTION was found, otherwise as the
+ `-lLIBRARY' option that needs to be prepended to `LIBS'.
+
+
+File: autoconf.info, Node: Library Functions, Next: Header Files, Prev: Libraries, Up: Existing Tests
+
+5.5 Library Functions
+=====================
+
+The following macros check for particular C library functions. If
+there is no macro specifically defined to check for a function you need,
+and you don't need to check for any special properties of it, then you
+can use one of the general function-check macros.
+
+* Menu:
+
+* Function Portability:: Pitfalls with usual functions
+* Particular Functions:: Special handling to find certain functions
+* Generic Functions:: How to find other functions
+
+
+File: autoconf.info, Node: Function Portability, Next: Particular Functions, Up: Library Functions
+
+5.5.1 Portability of C Functions
+--------------------------------
+
+Most usual functions can either be missing, or be buggy, or be limited
+on some architectures. This section tries to make an inventory of these
+portability issues. By definition, this list always requires
+additions. A much more complete list is maintained by the Gnulib
+project (*note Gnulib::), covering *note Current Posix Functions:
+(gnulib)Function Substitutes, *note Legacy Functions: (gnulib)Legacy
+Function Substitutes, and *note Glibc Functions: (gnulib)Glibc Function
+Substitutes. Please help us keep the gnulib list as complete as
+possible.
+
+`exit'
+ On ancient hosts, `exit' returned `int'. This is because `exit'
+ predates `void', and there was a long tradition of it returning
+ `int'.
+
+ On current hosts, the problem more likely is that `exit' is not
+ declared, due to C++ problems of some sort or another. For this
+ reason we suggest that test programs not invoke `exit', but return
+ from `main' instead.
+
+`free'
+ The C standard says a call `free (NULL)' does nothing, but some
+ old systems don't support this (e.g., NextStep).
+
+`isinf'
+`isnan'
+ The C99 standard says that `isinf' and `isnan' are macros. On
+ some systems just macros are available (e.g., HP-UX and Solaris
+ 10), on some systems both macros and functions (e.g., glibc
+ 2.3.2), and on some systems only functions (e.g., IRIX 6 and
+ Solaris 9). In some cases these functions are declared in
+ nonstandard headers like `<sunmath.h>' and defined in non-default
+ libraries like `-lm' or `-lsunmath'.
+
+ The C99 `isinf' and `isnan' macros work correctly with `long
+ double' arguments, but pre-C99 systems that use functions
+ typically assume `double' arguments. On such a system, `isinf'
+ incorrectly returns true for a finite `long double' argument that
+ is outside the range of `double'.
+
+ The best workaround for these issues is to use gnulib modules
+ `isinf' and `isnan' (*note Gnulib::). But a lighter weight
+ solution involves code like the following.
+
+ #include <math.h>
+
+ #ifndef isnan
+ # define isnan(x) \
+ (sizeof (x) == sizeof (long double) ? isnan_ld (x) \
+ : sizeof (x) == sizeof (double) ? isnan_d (x) \
+ : isnan_f (x))
+ static inline int isnan_f (float x) { return x != x; }
+ static inline int isnan_d (double x) { return x != x; }
+ static inline int isnan_ld (long double x) { return x != x; }
+ #endif
+
+ #ifndef isinf
+ # define isinf(x) \
+ (sizeof (x) == sizeof (long double) ? isinf_ld (x) \
+ : sizeof (x) == sizeof (double) ? isinf_d (x) \
+ : isinf_f (x))
+ static inline int isinf_f (float x)
+ { return !isnan (x) && isnan (x - x); }
+ static inline int isinf_d (double x)
+ { return !isnan (x) && isnan (x - x); }
+ static inline int isinf_ld (long double x)
+ { return !isnan (x) && isnan (x - x); }
+ #endif
+
+ Use `AC_C_INLINE' (*note C Compiler::) so that this code works on
+ compilers that lack the `inline' keyword. Some optimizing
+ compilers mishandle these definitions, but systems with that bug
+ typically have many other floating point corner-case compliance
+ problems anyway, so it's probably not worth worrying about.
+
+`malloc'
+ The C standard says a call `malloc (0)' is implementation
+ dependent. It can return either `NULL' or a new non-null pointer.
+ The latter is more common (e.g., the GNU C Library) but is by no
+ means universal. `AC_FUNC_MALLOC' can be used to insist on
+ non-`NULL' (*note Particular Functions::).
+
+`putenv'
+ Posix prefers `setenv' to `putenv'; among other things, `putenv'
+ is not required of all Posix implementations, but `setenv' is.
+
+ Posix specifies that `putenv' puts the given string directly in
+ `environ', but some systems make a copy of it instead (e.g., glibc
+ 2.0, or BSD). And when a copy is made, `unsetenv' might not free
+ it, causing a memory leak (e.g., FreeBSD 4).
+
+ On some systems `putenv ("FOO")' removes `FOO' from the
+ environment, but this is not standard usage and it dumps core on
+ some systems (e.g., AIX).
+
+ On MinGW, a call `putenv ("FOO=")' removes `FOO' from the
+ environment, rather than inserting it with an empty value.
+
+`realloc'
+ The C standard says a call `realloc (NULL, size)' is equivalent to
+ `malloc (size)', but some old systems don't support this (e.g.,
+ NextStep).
+
+`signal' handler
+ Normally `signal' takes a handler function with a return type of
+ `void', but some old systems required `int' instead. Any actual
+ `int' value returned is not used; this is only a difference in the
+ function prototype demanded.
+
+ All systems we know of in current use return `void'. The `int'
+ was to support K&R C, where of course `void' is not available.
+ The obsolete macro `AC_TYPE_SIGNAL' (*note AC_TYPE_SIGNAL::) can
+ be used to establish the correct type in all cases.
+
+ In most cases, it is more robust to use `sigaction' when it is
+ available, rather than `signal'.
+
+`snprintf'
+ The C99 standard says that if the output array isn't big enough
+ and if no other errors occur, `snprintf' and `vsnprintf' truncate
+ the output and return the number of bytes that ought to have been
+ produced. Some older systems return the truncated length (e.g.,
+ GNU C Library 2.0.x or IRIX 6.5), some a negative value (e.g.,
+ earlier GNU C Library versions), and some the buffer length
+ without truncation (e.g., 32-bit Solaris 7). Also, some buggy
+ older systems ignore the length and overrun the buffer (e.g.,
+ 64-bit Solaris 7).
+
+`sprintf'
+ The C standard says `sprintf' and `vsprintf' return the number of
+ bytes written. On some ancient systems (SunOS 4 for instance)
+ they return the buffer pointer instead, but these no longer need
+ to be worried about.
+
+`sscanf'
+ On various old systems, e.g., HP-UX 9, `sscanf' requires that its
+ input string be writable (though it doesn't actually change it).
+ This can be a problem when using `gcc' since it normally puts
+ constant strings in read-only memory (*note Incompatibilities of
+ GCC: (gcc)Incompatibilities.). Apparently in some cases even
+ having format strings read-only can be a problem.
+
+`strerror_r'
+ Posix specifies that `strerror_r' returns an `int', but many
+ systems (e.g., GNU C Library version 2.2.4) provide a different
+ version returning a `char *'. `AC_FUNC_STRERROR_R' can detect
+ which is in use (*note Particular Functions::).
+
+`strnlen'
+ AIX 4.3 provides a broken version which produces the following
+ results:
+
+ strnlen ("foobar", 0) = 0
+ strnlen ("foobar", 1) = 3
+ strnlen ("foobar", 2) = 2
+ strnlen ("foobar", 3) = 1
+ strnlen ("foobar", 4) = 0
+ strnlen ("foobar", 5) = 6
+ strnlen ("foobar", 6) = 6
+ strnlen ("foobar", 7) = 6
+ strnlen ("foobar", 8) = 6
+ strnlen ("foobar", 9) = 6
+
+`sysconf'
+ `_SC_PAGESIZE' is standard, but some older systems (e.g., HP-UX 9)
+ have `_SC_PAGE_SIZE' instead. This can be tested with `#ifdef'.
+
+`unlink'
+ The Posix spec says that `unlink' causes the given file to be
+ removed only after there are no more open file handles for it.
+ Some non-Posix hosts have trouble with this requirement, though,
+ and some DOS variants even corrupt the file system.
+
+`unsetenv'
+ On MinGW, `unsetenv' is not available, but a variable `FOO' can be
+ removed with a call `putenv ("FOO=")', as described under `putenv'
+ above.
+
+`va_copy'
+ The C99 standard provides `va_copy' for copying `va_list'
+ variables. It may be available in older environments too, though
+ possibly as `__va_copy' (e.g., `gcc' in strict pre-C99 mode).
+ These can be tested with `#ifdef'. A fallback to `memcpy (&dst,
+ &src, sizeof (va_list))' gives maximum portability.
+
+`va_list'
+ `va_list' is not necessarily just a pointer. It can be a `struct'
+ (e.g., `gcc' on Alpha), which means `NULL' is not portable. Or it
+ can be an array (e.g., `gcc' in some PowerPC configurations),
+ which means as a function parameter it can be effectively
+ call-by-reference and library routines might modify the value back
+ in the caller (e.g., `vsnprintf' in the GNU C Library 2.1).
+
+Signed `>>'
+ Normally the C `>>' right shift of a signed type replicates the
+ high bit, giving a so-called "arithmetic" shift. But care should
+ be taken since Standard C doesn't require that behavior. On those
+ few processors without a native arithmetic shift (for instance Cray
+ vector systems) zero bits may be shifted in, the same as a shift
+ of an unsigned type.
+
+Integer `/'
+ C divides signed integers by truncating their quotient toward zero,
+ yielding the same result as Fortran. However, before C99 the
+ standard allowed C implementations to take the floor or ceiling of
+ the quotient in some cases. Hardly any implementations took
+ advantage of this freedom, though, and it's probably not worth
+ worrying about this issue nowadays.
+
+
+File: autoconf.info, Node: Particular Functions, Next: Generic Functions, Prev: Function Portability, Up: Library Functions
+
+5.5.2 Particular Function Checks
+--------------------------------
+
+These macros check for particular C functions--whether they exist, and
+in some cases how they respond when given certain arguments.
+
+ -- Macro: AC_FUNC_ALLOCA
+ Check how to get `alloca'. Tries to get a builtin version by
+ checking for `alloca.h' or the predefined C preprocessor macros
+ `__GNUC__' and `_AIX'. If this macro finds `alloca.h', it defines
+ `HAVE_ALLOCA_H'.
+
+ If those attempts fail, it looks for the function in the standard C
+ library. If any of those methods succeed, it defines
+ `HAVE_ALLOCA'. Otherwise, it sets the output variable `ALLOCA' to
+ `${LIBOBJDIR}alloca.o' and defines `C_ALLOCA' (so programs can
+ periodically call `alloca (0)' to garbage collect). This variable
+ is separate from `LIBOBJS' so multiple programs can share the
+ value of `ALLOCA' without needing to create an actual library, in
+ case only some of them use the code in `LIBOBJS'. The
+ `${LIBOBJDIR}' prefix serves the same purpose as in `LIBOBJS'
+ (*note AC_LIBOBJ vs LIBOBJS::).
+
+ This macro does not try to get `alloca' from the System V R3
+ `libPW' or the System V R4 `libucb' because those libraries
+ contain some incompatible functions that cause trouble. Some
+ versions do not even contain `alloca' or contain a buggy version.
+ If you still want to use their `alloca', use `ar' to extract
+ `alloca.o' from them instead of compiling `alloca.c'.
+
+ Source files that use `alloca' should start with a piece of code
+ like the following, to declare it properly.
+
+ #ifdef STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ # endif
+ #endif
+ #ifdef HAVE_ALLOCA_H
+ # include <alloca.h>
+ #elif !defined alloca
+ # ifdef __GNUC__
+ # define alloca __builtin_alloca
+ # elif defined _AIX
+ # define alloca __alloca
+ # elif defined _MSC_VER
+ # include <malloc.h>
+ # define alloca _alloca
+ # elif !defined HAVE_ALLOCA
+ # ifdef __cplusplus
+ extern "C"
+ # endif
+ void *alloca (size_t);
+ # endif
+ #endif
+
+ -- Macro: AC_FUNC_CHOWN
+ If the `chown' function is available and works (in particular, it
+ should accept `-1' for `uid' and `gid'), define `HAVE_CHOWN'. The
+ result of this macro is cached in the `ac_cv_func_chown_works'
+ variable.
+
+ -- Macro: AC_FUNC_CLOSEDIR_VOID
+ If the `closedir' function does not return a meaningful value,
+ define `CLOSEDIR_VOID'. Otherwise, callers ought to check its
+ return value for an error indicator.
+
+ Currently this test is implemented by running a test program. When
+ cross compiling the pessimistic assumption that `closedir' does not
+ return a meaningful value is made.
+
+ The result of this macro is cached in the
+ `ac_cv_func_closedir_void' variable.
+
+ This macro is obsolescent, as `closedir' returns a meaningful value
+ on current systems. New programs need not use this macro.
+
+ -- Macro: AC_FUNC_ERROR_AT_LINE
+ If the `error_at_line' function is not found, require an
+ `AC_LIBOBJ' replacement of `error'.
+
+ The result of this macro is cached in the `ac_cv_lib_error_at_line'
+ variable.
+
+ The `AC_FUNC_ERROR_AT_LINE' macro is obsolescent. New programs
+ should use Gnulib's `error' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_FNMATCH
+ If the `fnmatch' function conforms to Posix, define
+ `HAVE_FNMATCH'. Detect common implementation bugs, for example,
+ the bugs in Solaris 2.4.
+
+ Unlike the other specific `AC_FUNC' macros, `AC_FUNC_FNMATCH' does
+ not replace a broken/missing `fnmatch'. This is for historical
+ reasons. See `AC_REPLACE_FNMATCH' below.
+
+ The result of this macro is cached in the
+ `ac_cv_func_fnmatch_works' variable.
+
+ This macro is obsolescent. New programs should use Gnulib's
+ `fnmatch-posix' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_FNMATCH_GNU
+ Behave like `AC_REPLACE_FNMATCH' (_replace_) but also test whether
+ `fnmatch' supports GNU extensions. Detect common implementation
+ bugs, for example, the bugs in the GNU C Library 2.1.
+
+ The result of this macro is cached in the `ac_cv_func_fnmatch_gnu'
+ variable.
+
+ This macro is obsolescent. New programs should use Gnulib's
+ `fnmatch-gnu' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_FORK
+ This macro checks for the `fork' and `vfork' functions. If a
+ working `fork' is found, define `HAVE_WORKING_FORK'. This macro
+ checks whether `fork' is just a stub by trying to run it.
+
+ If `vfork.h' is found, define `HAVE_VFORK_H'. If a working
+ `vfork' is found, define `HAVE_WORKING_VFORK'. Otherwise, define
+ `vfork' to be `fork' for backward compatibility with previous
+ versions of `autoconf'. This macro checks for several known
+ errors in implementations of `vfork' and considers the system to
+ not have a working `vfork' if it detects any of them. It is not
+ considered to be an implementation error if a child's invocation
+ of `signal' modifies the parent's signal handler, since child
+ processes rarely change their signal handlers.
+
+ Since this macro defines `vfork' only for backward compatibility
+ with previous versions of `autoconf' you're encouraged to define it
+ yourself in new code:
+ #ifndef HAVE_WORKING_VFORK
+ # define vfork fork
+ #endif
+
+ The results of this macro are cached in the `ac_cv_func_fork_works'
+ and `ac_cv_func_vfork_works' variables. In order to override the
+ test, you also need to set the `ac_cv_func_fork' and
+ `ac_cv_func_vfork' variables.
+
+ -- Macro: AC_FUNC_FSEEKO
+ If the `fseeko' function is available, define `HAVE_FSEEKO'.
+ Define `_LARGEFILE_SOURCE' if necessary to make the prototype
+ visible on some systems (e.g., glibc 2.2). Otherwise linkage
+ problems may occur when compiling with `AC_SYS_LARGEFILE' on
+ largefile-sensitive systems where `off_t' does not default to a
+ 64bit entity. All systems with `fseeko' also supply `ftello'.
+
+ -- Macro: AC_FUNC_GETGROUPS
+ If the `getgroups' function is available and works (unlike on
+ Ultrix 4.3, where `getgroups (0, 0)' always fails), define
+ `HAVE_GETGROUPS'. Set `GETGROUPS_LIBS' to any libraries needed to
+ get that function. This macro runs `AC_TYPE_GETGROUPS'.
+
+ -- Macro: AC_FUNC_GETLOADAVG
+ Check how to get the system load averages. To perform its tests
+ properly, this macro needs the file `getloadavg.c'; therefore, be
+ sure to set the `AC_LIBOBJ' replacement directory properly (see
+ *note Generic Functions::, `AC_CONFIG_LIBOBJ_DIR').
+
+ If the system has the `getloadavg' function, define
+ `HAVE_GETLOADAVG', and set `GETLOADAVG_LIBS' to any libraries
+ necessary to get that function. Also add `GETLOADAVG_LIBS' to
+ `LIBS'. Otherwise, require an `AC_LIBOBJ' replacement for
+ `getloadavg' with source code in `DIR/getloadavg.c', and possibly
+ define several other C preprocessor macros and output variables:
+
+ 1. Define `C_GETLOADAVG'.
+
+ 2. Define `SVR4', `DGUX', `UMAX', or `UMAX4_3' if on those
+ systems.
+
+ 3. If `nlist.h' is found, define `HAVE_NLIST_H'.
+
+ 4. If `struct nlist' has an `n_un.n_name' member, define
+ `HAVE_STRUCT_NLIST_N_UN_N_NAME'. The obsolete symbol
+ `NLIST_NAME_UNION' is still defined, but do not depend upon
+ it.
+
+ 5. Programs may need to be installed set-group-ID (or
+ set-user-ID) for `getloadavg' to work. In this case, define
+ `GETLOADAVG_PRIVILEGED', set the output variable `NEED_SETGID'
+ to `true' (and otherwise to `false'), and set `KMEM_GROUP' to
+ the name of the group that should own the installed program.
+
+ The `AC_FUNC_GETLOADAVG' macro is obsolescent. New programs should
+ use Gnulib's `getloadavg' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_GETMNTENT
+ Check for `getmntent' in the standard C library, and then in the
+ `sun', `seq', and `gen' libraries, for UNICOS, IRIX 4, PTX, and
+ UnixWare, respectively. Then, if `getmntent' is available, define
+ `HAVE_GETMNTENT' and set `ac_cv_func_getmntent' to `yes'.
+ Otherwise set `ac_cv_func_getmntent' to `no'.
+
+ The result of this macro can be overridden by setting the cache
+ variable `ac_cv_search_getmntent'.
+
+ -- Macro: AC_FUNC_GETPGRP
+ Define `GETPGRP_VOID' if it is an error to pass 0 to `getpgrp';
+ this is the Posix behavior. On older BSD systems, you must pass 0
+ to `getpgrp', as it takes an argument and behaves like Posix's
+ `getpgid'.
+
+ #ifdef GETPGRP_VOID
+ pid = getpgrp ();
+ #else
+ pid = getpgrp (0);
+ #endif
+
+ This macro does not check whether `getpgrp' exists at all; if you
+ need to work in that situation, first call `AC_CHECK_FUNC' for
+ `getpgrp'.
+
+ The result of this macro is cached in the `ac_cv_func_getpgrp_void'
+ variable.
+
+ This macro is obsolescent, as current systems have a `getpgrp'
+ whose signature conforms to Posix. New programs need not use this
+ macro.
+
+ -- Macro: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+ If `link' is a symbolic link, then `lstat' should treat `link/'
+ the same as `link/.'. However, many older `lstat' implementations
+ incorrectly ignore trailing slashes.
+
+ It is safe to assume that if `lstat' incorrectly ignores trailing
+ slashes, then other symbolic-link-aware functions like `unlink'
+ also incorrectly ignore trailing slashes.
+
+ If `lstat' behaves properly, define
+ `LSTAT_FOLLOWS_SLASHED_SYMLINK', otherwise require an `AC_LIBOBJ'
+ replacement of `lstat'.
+
+ The result of this macro is cached in the
+ `ac_cv_func_lstat_dereferences_slashed_symlink' variable.
+
+ The `AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' macro is obsolescent.
+ New programs should use Gnulib's `lstat' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_MALLOC
+ If the `malloc' function is compatible with the GNU C library
+ `malloc' (i.e., `malloc (0)' returns a valid pointer), define
+ `HAVE_MALLOC' to 1. Otherwise define `HAVE_MALLOC' to 0, ask for
+ an `AC_LIBOBJ' replacement for `malloc', and define `malloc' to
+ `rpl_malloc' so that the native `malloc' is not used in the main
+ project.
+
+ Typically, the replacement file `malloc.c' should look like (note
+ the `#undef malloc'):
+
+ #include <config.h>
+ #undef malloc
+
+ #include <sys/types.h>
+
+ void *malloc ();
+
+ /* Allocate an N-byte block of memory from the heap.
+ If N is zero, allocate a 1-byte block. */
+
+ void *
+ rpl_malloc (size_t n)
+ {
+ if (n == 0)
+ n = 1;
+ return malloc (n);
+ }
+
+ The result of this macro is cached in the
+ `ac_cv_func_malloc_0_nonnull' variable.
+
+ -- Macro: AC_FUNC_MBRTOWC
+ Define `HAVE_MBRTOWC' to 1 if the function `mbrtowc' and the type
+ `mbstate_t' are properly declared.
+
+ The result of this macro is cached in the `ac_cv_func_mbrtowc'
+ variable.
+
+ -- Macro: AC_FUNC_MEMCMP
+ If the `memcmp' function is not available, or does not work on
+ 8-bit data (like the one on SunOS 4.1.3), or fails when comparing
+ 16 bytes or more and with at least one buffer not starting on a
+ 4-byte boundary (such as the one on NeXT x86 OpenStep), require an
+ `AC_LIBOBJ' replacement for `memcmp'.
+
+ The result of this macro is cached in the
+ `ac_cv_func_memcmp_working' variable.
+
+ This macro is obsolescent, as current systems have a working
+ `memcmp'. New programs need not use this macro.
+
+ -- Macro: AC_FUNC_MKTIME
+ If the `mktime' function is not available, or does not work
+ correctly, require an `AC_LIBOBJ' replacement for `mktime'. For
+ the purposes of this test, `mktime' should conform to the Posix
+ standard and should be the inverse of `localtime'.
+
+ The result of this macro is cached in the
+ `ac_cv_func_working_mktime' variable.
+
+ The `AC_FUNC_MKTIME' macro is obsolescent. New programs should
+ use Gnulib's `mktime' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_MMAP
+ If the `mmap' function exists and works correctly, define
+ `HAVE_MMAP'. This checks only private fixed mapping of
+ already-mapped memory.
+
+ The result of this macro is cached in the
+ `ac_cv_func_mmap_fixed_mapped' variable.
+
+ -- Macro: AC_FUNC_OBSTACK
+ If the obstacks are found, define `HAVE_OBSTACK', else require an
+ `AC_LIBOBJ' replacement for `obstack'.
+
+ The result of this macro is cached in the `ac_cv_func_obstack'
+ variable.
+
+ -- Macro: AC_FUNC_REALLOC
+ If the `realloc' function is compatible with the GNU C library
+ `realloc' (i.e., `realloc (NULL, 0)' returns a valid pointer),
+ define `HAVE_REALLOC' to 1. Otherwise define `HAVE_REALLOC' to 0,
+ ask for an `AC_LIBOBJ' replacement for `realloc', and define
+ `realloc' to `rpl_realloc' so that the native `realloc' is not
+ used in the main project. See `AC_FUNC_MALLOC' for details.
+
+ The result of this macro is cached in the
+ `ac_cv_func_realloc_0_nonnull' variable.
+
+ -- Macro: AC_FUNC_SELECT_ARGTYPES
+ Determines the correct type to be passed for each of the `select'
+ function's arguments, and defines those types in
+ `SELECT_TYPE_ARG1', `SELECT_TYPE_ARG234', and `SELECT_TYPE_ARG5'
+ respectively. `SELECT_TYPE_ARG1' defaults to `int',
+ `SELECT_TYPE_ARG234' defaults to `int *', and `SELECT_TYPE_ARG5'
+ defaults to `struct timeval *'.
+
+ This macro is obsolescent, as current systems have a `select' whose
+ signature conforms to Posix. New programs need not use this macro.
+
+ -- Macro: AC_FUNC_SETPGRP
+ If `setpgrp' takes no argument (the Posix version), define
+ `SETPGRP_VOID'. Otherwise, it is the BSD version, which takes two
+ process IDs as arguments. This macro does not check whether
+ `setpgrp' exists at all; if you need to work in that situation,
+ first call `AC_CHECK_FUNC' for `setpgrp'.
+
+ The result of this macro is cached in the `ac_cv_func_setpgrp_void'
+ variable.
+
+ This macro is obsolescent, as current systems have a `setpgrp'
+ whose signature conforms to Posix. New programs need not use this
+ macro.
+
+ -- Macro: AC_FUNC_STAT
+ -- Macro: AC_FUNC_LSTAT
+ Determine whether `stat' or `lstat' have the bug that it succeeds
+ when given the zero-length file name as argument. The `stat' and
+ `lstat' from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do this.
+
+ If it does, then define `HAVE_STAT_EMPTY_STRING_BUG' (or
+ `HAVE_LSTAT_EMPTY_STRING_BUG') and ask for an `AC_LIBOBJ'
+ replacement of it.
+
+ The results of these macros are cached in the
+ `ac_cv_func_stat_empty_string_bug' and the
+ `ac_cv_func_lstat_empty_string_bug' variables, respectively.
+
+ These macros are obsolescent, as no current systems have the bug.
+ New programs need not use these macros.
+
+ -- Macro: AC_FUNC_STRCOLL
+ If the `strcoll' function exists and works correctly, define
+ `HAVE_STRCOLL'. This does a bit more than
+ `AC_CHECK_FUNCS(strcoll)', because some systems have incorrect
+ definitions of `strcoll' that should not be used.
+
+ The result of this macro is cached in the
+ `ac_cv_func_strcoll_works' variable.
+
+ -- Macro: AC_FUNC_STRERROR_R
+ If `strerror_r' is available, define `HAVE_STRERROR_R', and if it
+ is declared, define `HAVE_DECL_STRERROR_R'. If it returns a `char
+ *' message, define `STRERROR_R_CHAR_P'; otherwise it returns an
+ `int' error number. The Thread-Safe Functions option of Posix
+ requires `strerror_r' to return `int', but many systems
+ (including, for example, version 2.2.4 of the GNU C Library)
+ return a `char *' value that is not necessarily equal to the
+ buffer argument.
+
+ The result of this macro is cached in the
+ `ac_cv_func_strerror_r_char_p' variable.
+
+ -- Macro: AC_FUNC_STRFTIME
+ Check for `strftime' in the `intl' library, for SCO Unix. Then,
+ if `strftime' is available, define `HAVE_STRFTIME'.
+
+ This macro is obsolescent, as no current systems require the `intl'
+ library for `strftime'. New programs need not use this macro.
+
+ -- Macro: AC_FUNC_STRTOD
+ If the `strtod' function does not exist or doesn't work correctly,
+ ask for an `AC_LIBOBJ' replacement of `strtod'. In this case,
+ because `strtod.c' is likely to need `pow', set the output
+ variable `POW_LIB' to the extra library needed.
+
+ This macro caches its result in the `ac_cv_func_strtod' variable
+ and depends upon the result in the `ac_cv_func_pow' variable.
+
+ The `AC_FUNC_STRTOD' macro is obsolescent. New programs should
+ use Gnulib's `strtod' module. *Note Gnulib::.
+
+ -- Macro: AC_FUNC_STRTOLD
+ If the `strtold' function exists and conforms to C99, define
+ `HAVE_STRTOLD'.
+
+ This macro caches its result in the `ac_cv_func_strtold' variable.
+
+ -- Macro: AC_FUNC_STRNLEN
+ If the `strnlen' function is not available, or is buggy (like the
+ one from AIX 4.3), require an `AC_LIBOBJ' replacement for it.
+
+ This macro caches its result in the `ac_cv_func_strnlen_working'
+ variable.
+
+ -- Macro: AC_FUNC_UTIME_NULL
+ If `utime (FILE, NULL)' sets FILE's timestamp to the present,
+ define `HAVE_UTIME_NULL'.
+
+ This macro caches its result in the `ac_cv_func_utime_null'
+ variable.
+
+ This macro is obsolescent, as all current systems have a `utime'
+ that behaves this way. New programs need not use this macro.
+
+ -- Macro: AC_FUNC_VPRINTF
+ If `vprintf' is found, define `HAVE_VPRINTF'. Otherwise, if
+ `_doprnt' is found, define `HAVE_DOPRNT'. (If `vprintf' is
+ available, you may assume that `vfprintf' and `vsprintf' are also
+ available.)
+
+ This macro is obsolescent, as all current systems have `vprintf'.
+ New programs need not use this macro.
+
+ -- Macro: AC_REPLACE_FNMATCH
+ If the `fnmatch' function does not conform to Posix (see
+ `AC_FUNC_FNMATCH'), ask for its `AC_LIBOBJ' replacement.
+
+ The files `fnmatch.c', `fnmatch_loop.c', and `fnmatch_.h' in the
+ `AC_LIBOBJ' replacement directory are assumed to contain a copy of
+ the source code of GNU `fnmatch'. If necessary, this source code
+ is compiled as an `AC_LIBOBJ' replacement, and the `fnmatch_.h'
+ file is linked to `fnmatch.h' so that it can be included in place
+ of the system `<fnmatch.h>'.
+
+ This macro caches its result in the `ac_cv_func_fnmatch_works'
+ variable.
+
+ This macro is obsolescent, as it assumes the use of particular
+ source files. New programs should use Gnulib's `fnmatch-posix'
+ module, which provides this macro along with the source files.
+ *Note Gnulib::.
+
+
+File: autoconf.info, Node: Generic Functions, Prev: Particular Functions, Up: Library Functions
+
+5.5.3 Generic Function Checks
+-----------------------------
+
+These macros are used to find functions not covered by the "particular"
+test macros. If the functions might be in libraries other than the
+default C library, first call `AC_CHECK_LIB' for those libraries. If
+you need to check the behavior of a function as well as find out
+whether it is present, you have to write your own test for it (*note
+Writing Tests::).
+
+ -- Macro: AC_CHECK_FUNC (FUNCTION, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ If C function FUNCTION is available, run shell commands
+ ACTION-IF-FOUND, otherwise ACTION-IF-NOT-FOUND. If you just want
+ to define a symbol if the function is available, consider using
+ `AC_CHECK_FUNCS' instead. This macro checks for functions with C
+ linkage even when `AC_LANG(C++)' has been called, since C is more
+ standardized than C++. (*note Language Choice::, for more
+ information about selecting the language for checks.)
+
+ This macro caches its result in the `ac_cv_func_FUNCTION' variable.
+
+ -- Macro: AC_CHECK_FUNCS (FUNCTION..., [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ For each FUNCTION enumerated in the blank-or-newline-separated
+ argument list, define `HAVE_FUNCTION' (in all capitals) if it is
+ available. If ACTION-IF-FOUND is given, it is additional shell
+ code to execute when one of the functions is found. You can give
+ it a value of `break' to break out of the loop on the first match.
+ If ACTION-IF-NOT-FOUND is given, it is executed when one of the
+ functions is not found.
+
+ Results are cached for each FUNCTION as in `AC_CHECK_FUNC'.
+
+ -- Macro: AC_CHECK_FUNCS_ONCE (FUNCTION...)
+ For each FUNCTION enumerated in the blank-or-newline-separated
+ argument list, define `HAVE_FUNCTION' (in all capitals) if it is
+ available. This is a once-only variant of `AC_CHECK_FUNCS'. It
+ generates the checking code at most once, so that `configure' is
+ smaller and faster; but the checks cannot be conditionalized and
+ are always done once, early during the `configure' run.
+
+
+ Autoconf follows a philosophy that was formed over the years by those
+who have struggled for portability: isolate the portability issues in
+specific files, and then program as if you were in a Posix environment.
+Some functions may be missing or unfixable, and your package must be
+ready to replace them.
+
+ Suitable replacements for many such problem functions are available
+from Gnulib (*note Gnulib::).
+
+ -- Macro: AC_LIBOBJ (FUNCTION)
+ Specify that `FUNCTION.c' must be included in the executables to
+ replace a missing or broken implementation of FUNCTION.
+
+ Technically, it adds `FUNCTION.$ac_objext' to the output variable
+ `LIBOBJS' if it is not already in, and calls `AC_LIBSOURCE' for
+ `FUNCTION.c'. You should not directly change `LIBOBJS', since
+ this is not traceable.
+
+ -- Macro: AC_LIBSOURCE (FILE)
+ Specify that FILE might be needed to compile the project. If you
+ need to know what files might be needed by a `configure.ac', you
+ should trace `AC_LIBSOURCE'. FILE must be a literal.
+
+ This macro is called automatically from `AC_LIBOBJ', but you must
+ call it explicitly if you pass a shell variable to `AC_LIBOBJ'. In
+ that case, since shell variables cannot be traced statically, you
+ must pass to `AC_LIBSOURCE' any possible files that the shell
+ variable might cause `AC_LIBOBJ' to need. For example, if you
+ want to pass a variable `$foo_or_bar' to `AC_LIBOBJ' that holds
+ either `"foo"' or `"bar"', you should do:
+
+ AC_LIBSOURCE([foo.c])
+ AC_LIBSOURCE([bar.c])
+ AC_LIBOBJ([$foo_or_bar])
+
+ There is usually a way to avoid this, however, and you are
+ encouraged to simply call `AC_LIBOBJ' with literal arguments.
+
+ Note that this macro replaces the obsolete `AC_LIBOBJ_DECL', with
+ slightly different semantics: the old macro took the function name,
+ e.g., `foo', as its argument rather than the file name.
+
+ -- Macro: AC_LIBSOURCES (FILES)
+ Like `AC_LIBSOURCE', but accepts one or more FILES in a
+ comma-separated M4 list. Thus, the above example might be
+ rewritten:
+
+ AC_LIBSOURCES([foo.c, bar.c])
+ AC_LIBOBJ([$foo_or_bar])
+
+ -- Macro: AC_CONFIG_LIBOBJ_DIR (DIRECTORY)
+ Specify that `AC_LIBOBJ' replacement files are to be found in
+ DIRECTORY, a name relative to the top level of the source tree.
+ The replacement directory defaults to `.', the top level
+ directory, and the most typical value is `lib', corresponding to
+ `AC_CONFIG_LIBOBJ_DIR([lib])'.
+
+ `configure' might need to know the replacement directory for the
+ following reasons: (i) some checks use the replacement files, (ii)
+ some macros bypass broken system headers by installing links to the
+ replacement headers (iii) when used in conjunction with Automake,
+ within each makefile, DIRECTORY is used as a relative path from
+ `$(top_srcdir)' to each object named in `LIBOBJS' and `LTLIBOBJS',
+ etc.
+
+
+ It is common to merely check for the existence of a function, and ask
+for its `AC_LIBOBJ' replacement if missing. The following macro is a
+convenient shorthand.
+
+ -- Macro: AC_REPLACE_FUNCS (FUNCTION...)
+ Like `AC_CHECK_FUNCS', but uses `AC_LIBOBJ(FUNCTION)' as
+ ACTION-IF-NOT-FOUND. You can declare your replacement function by
+ enclosing the prototype in `#ifndef HAVE_FUNCTION'. If the system
+ has the function, it probably declares it in a header file you
+ should be including, so you shouldn't redeclare it lest your
+ declaration conflict.
+
+
+File: autoconf.info, Node: Header Files, Next: Declarations, Prev: Library Functions, Up: Existing Tests
+
+5.6 Header Files
+================
+
+The following macros check for the presence of certain C header files.
+If there is no macro specifically defined to check for a header file
+you need, and you don't need to check for any special properties of it,
+then you can use one of the general header-file check macros.
+
+* Menu:
+
+* Header Portability:: Collected knowledge on common headers
+* Particular Headers:: Special handling to find certain headers
+* Generic Headers:: How to find other headers
+
+
+File: autoconf.info, Node: Header Portability, Next: Particular Headers, Up: Header Files
+
+5.6.1 Portability of Headers
+----------------------------
+
+This section documents some collected knowledge about common headers,
+and the problems they cause. By definition, this list always requires
+additions. A much more complete list is maintained by the Gnulib
+project (*note Gnulib::), covering *note Posix Headers: (gnulib)Header
+File Substitutes. and *note Glibc Headers: (gnulib)Glibc Header File
+Substitutes. Please help us keep the gnulib list as complete as
+possible.
+
+`limits.h'
+ C99 says that `limits.h' defines `LLONG_MIN', `LLONG_MAX', and
+ `ULLONG_MAX', but many almost-C99 environments (e.g., default GCC
+ 4.0.2 + glibc 2.4) do not define them.
+
+`inttypes.h' vs. `stdint.h'
+ The C99 standard says that `inttypes.h' includes `stdint.h', so
+ there's no need to include `stdint.h' separately in a standard
+ environment. Some implementations have `inttypes.h' but not
+ `stdint.h' (e.g., Solaris 7), but we don't know of any
+ implementation that has `stdint.h' but not `inttypes.h'.
+
+`linux/irda.h'
+ It requires `linux/types.h' and `sys/socket.h'.
+
+`linux/random.h'
+ It requires `linux/types.h'.
+
+`net/if.h'
+ On Darwin, this file requires that `sys/socket.h' be included
+ beforehand. One should run:
+
+ AC_CHECK_HEADERS([sys/socket.h])
+ AC_CHECK_HEADERS([net/if.h], [], [],
+ [#include <stdio.h>
+ #ifdef STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ # endif
+ #endif
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ])
+
+`netinet/if_ether.h'
+ On Darwin, this file requires that `stdio.h' and `sys/socket.h' be
+ included beforehand. One should run:
+
+ AC_CHECK_HEADERS([sys/socket.h])
+ AC_CHECK_HEADERS([netinet/if_ether.h], [], [],
+ [#include <stdio.h>
+ #ifdef STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+ # ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ # endif
+ #endif
+ #ifdef HAVE_SYS_SOCKET_H
+ # include <sys/socket.h>
+ #endif
+ ])
+
+`stdint.h'
+ See above, item `inttypes.h' vs. `stdint.h'.
+
+`stdlib.h'
+ On many systems (e.g., Darwin), `stdio.h' is a prerequisite.
+
+`sys/mount.h'
+ On FreeBSD 4.8 on ia32 and using gcc version 2.95.4,
+ `sys/params.h' is a prerequisite.
+
+`sys/ptem.h'
+ On Solaris 8, `sys/stream.h' is a prerequisite.
+
+`sys/socket.h'
+ On Darwin, `stdlib.h' is a prerequisite.
+
+`sys/ucred.h'
+ On Tru64 5.1, `sys/types.h' is a prerequisite.
+
+`X11/extensions/scrnsaver.h'
+ Using XFree86, this header requires `X11/Xlib.h', which is probably
+ so required that you might not even consider looking for it.
+
+ AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [],
+ [[#include <X11/Xlib.h>
+ ]])
+
+
+File: autoconf.info, Node: Particular Headers, Next: Generic Headers, Prev: Header Portability, Up: Header Files
+
+5.6.2 Particular Header Checks
+------------------------------
+
+These macros check for particular system header files--whether they
+exist, and in some cases whether they declare certain symbols.
+
+ -- Macro: AC_CHECK_HEADER_STDBOOL
+ Check whether `stdbool.h' exists and conforms to C99, and cache the
+ result in the `ac_cv_header_stdbool_h' variable. If the type
+ `_Bool' is defined, define `HAVE__BOOL' to 1.
+
+ This macro is intended for use by Gnulib (*note Gnulib::) and other
+ packages that supply a substitute `stdbool.h' on platforms lacking
+ a conforming one. The `AC_HEADER_STDBOOL' macro is better for code
+ that explicitly checks for `stdbool.h'.
+
+ -- Macro: AC_HEADER_ASSERT
+ Check whether to enable assertions in the style of `assert.h'.
+ Assertions are enabled by default, but the user can override this
+ by invoking `configure' with the `--disable-assert' option.
+
+ -- Macro: AC_HEADER_DIRENT
+ Check for the following header files. For the first one that is
+ found and defines `DIR', define the listed C preprocessor macro:
+
+ `dirent.h' `HAVE_DIRENT_H'
+ `sys/ndir.h' `HAVE_SYS_NDIR_H'
+ `sys/dir.h' `HAVE_SYS_DIR_H'
+ `ndir.h' `HAVE_NDIR_H'
+
+ The directory-library declarations in your source code should look
+ something like the following:
+
+ #include <sys/types.h>
+ #ifdef HAVE_DIRENT_H
+ # include <dirent.h>
+ # define NAMLEN(dirent) strlen ((dirent)->d_name)
+ #else
+ # define dirent direct
+ # define NAMLEN(dirent) ((dirent)->d_namlen)
+ # ifdef HAVE_SYS_NDIR_H
+ # include <sys/ndir.h>
+ # endif
+ # ifdef HAVE_SYS_DIR_H
+ # include <sys/dir.h>
+ # endif
+ # ifdef HAVE_NDIR_H
+ # include <ndir.h>
+ # endif
+ #endif
+
+ Using the above declarations, the program would declare variables
+ to be of type `struct dirent', not `struct direct', and would
+ access the length of a directory entry name by passing a pointer
+ to a `struct dirent' to the `NAMLEN' macro.
+
+ This macro also checks for the SCO Xenix `dir' and `x' libraries.
+
+ This macro is obsolescent, as all current systems with directory
+ libraries have `<dirent.h>'. New programs need not use this macro.
+
+ Also see `AC_STRUCT_DIRENT_D_INO' and `AC_STRUCT_DIRENT_D_TYPE'
+ (*note Particular Structures::).
+
+ -- Macro: AC_HEADER_MAJOR
+ If `sys/types.h' does not define `major', `minor', and `makedev',
+ but `sys/mkdev.h' does, define `MAJOR_IN_MKDEV'; otherwise, if
+ `sys/sysmacros.h' does, define `MAJOR_IN_SYSMACROS'.
+
+ -- Macro: AC_HEADER_RESOLV
+ Checks for header `resolv.h', checking for prerequisites first.
+ To properly use `resolv.h', your code should contain something like
+ the following:
+
+ #ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+ #ifdef HAVE_NETINET_IN_H
+ # include <netinet/in.h> /* inet_ functions / structs */
+ #endif
+ #ifdef HAVE_ARPA_NAMESER_H
+ # include <arpa/nameser.h> /* DNS HEADER struct */
+ #endif
+ #ifdef HAVE_NETDB_H
+ # include <netdb.h>
+ #endif
+ #include <resolv.h>
+
+ -- Macro: AC_HEADER_STAT
+ If the macros `S_ISDIR', `S_ISREG', etc. defined in `sys/stat.h'
+ do not work properly (returning false positives), define
+ `STAT_MACROS_BROKEN'. This is the case on Tektronix UTekV, Amdahl
+ UTS and Motorola System V/88.
+
+ This macro is obsolescent, as no current systems have the bug.
+ New programs need not use this macro.
+
+ -- Macro: AC_HEADER_STDBOOL
+ If `stdbool.h' exists and conforms to C99, define `HAVE_STDBOOL_H'
+ to 1; if the type `_Bool' is defined, define `HAVE__BOOL' to 1.
+ To fulfill the C99 requirements, your program could contain the
+ following code:
+
+ #ifdef HAVE_STDBOOL_H
+ # include <stdbool.h>
+ #else
+ # ifndef HAVE__BOOL
+ # ifdef __cplusplus
+ typedef bool _Bool;
+ # else
+ # define _Bool signed char
+ # endif
+ # endif
+ # define bool _Bool
+ # define false 0
+ # define true 1
+ # define __bool_true_false_are_defined 1
+ #endif
+
+ Alternatively you can use the `stdbool' package of Gnulib (*note
+ Gnulib::). It simplifies your code so that it can say just
+ `#include <stdbool.h>', and it adds support for less-common
+ platforms.
+
+ This macro caches its result in the `ac_cv_header_stdbool_h'
+ variable.
+
+ This macro differs from `AC_CHECK_HEADER_STDBOOL' only in that it
+ defines `HAVE_STDBOOL_H' whereas `AC_CHECK_HEADER_STDBOOL' does
+ not.
+
+ -- Macro: AC_HEADER_STDC
+ Define `STDC_HEADERS' if the system has C header files conforming
+ to ANSI C89 (ISO C90). Specifically, this macro checks for
+ `stdlib.h', `stdarg.h', `string.h', and `float.h'; if the system
+ has those, it probably has the rest of the C89 header files. This
+ macro also checks whether `string.h' declares `memchr' (and thus
+ presumably the other `mem' functions), whether `stdlib.h' declare
+ `free' (and thus presumably `malloc' and other related functions),
+ and whether the `ctype.h' macros work on characters with the high
+ bit set, as the C standard requires.
+
+ If you use this macro, your code can refer to `STDC_HEADERS' to
+ determine whether the system has conforming header files (and
+ probably C library functions).
+
+ This macro caches its result in the `ac_cv_header_stdc' variable.
+
+ This macro is obsolescent, as current systems have conforming
+ header files. New programs need not use this macro.
+
+ Nowadays `string.h' is part of the C standard and declares
+ functions like `strcpy', and `strings.h' is standardized by Posix
+ and declares BSD functions like `bcopy'; but historically, string
+ functions were a major sticking point in this area. If you still
+ want to worry about portability to ancient systems without
+ standard headers, there is so much variation that it is probably
+ easier to declare the functions you use than to figure out exactly
+ what the system header files declare. Some ancient systems
+ contained a mix of functions from the C standard and from BSD;
+ some were mostly standard but lacked `memmove'; some defined the
+ BSD functions as macros in `string.h' or `strings.h'; some had
+ only the BSD functions but `string.h'; some declared the memory
+ functions in `memory.h', some in `string.h'; etc. It is probably
+ sufficient to check for one string function and one memory
+ function; if the library had the standard versions of those then
+ it probably had most of the others. If you put the following in
+ `configure.ac':
+
+ # This example is obsolescent.
+ # Nowadays you can omit these macro calls.
+ AC_HEADER_STDC
+ AC_CHECK_FUNCS([strchr memcpy])
+
+ then, in your code, you can use declarations like this:
+
+ /* This example is obsolescent.
+ Nowadays you can just #include <string.h>. */
+ #ifdef STDC_HEADERS
+ # include <string.h>
+ #else
+ # ifndef HAVE_STRCHR
+ # define strchr index
+ # define strrchr rindex
+ # endif
+ char *strchr (), *strrchr ();
+ # ifndef HAVE_MEMCPY
+ # define memcpy(d, s, n) bcopy ((s), (d), (n))
+ # define memmove(d, s, n) bcopy ((s), (d), (n))
+ # endif
+ #endif
+
+ If you use a function like `memchr', `memset', `strtok', or
+ `strspn', which have no BSD equivalent, then macros don't suffice
+ to port to ancient hosts; you must provide an implementation of
+ each function. An easy way to incorporate your implementations
+ only when needed (since the ones in system C libraries may be hand
+ optimized) is to, taking `memchr' for example, put it in
+ `memchr.c' and use `AC_REPLACE_FUNCS([memchr])'.
+
+ -- Macro: AC_HEADER_SYS_WAIT
+ If `sys/wait.h' exists and is compatible with Posix, define
+ `HAVE_SYS_WAIT_H'. Incompatibility can occur if `sys/wait.h' does
+ not exist, or if it uses the old BSD `union wait' instead of `int'
+ to store a status value. If `sys/wait.h' is not Posix compatible,
+ then instead of including it, define the Posix macros with their
+ usual interpretations. Here is an example:
+
+ #include <sys/types.h>
+ #ifdef HAVE_SYS_WAIT_H
+ # include <sys/wait.h>
+ #endif
+ #ifndef WEXITSTATUS
+ # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+ #endif
+ #ifndef WIFEXITED
+ # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+ #endif
+
+ This macro caches its result in the `ac_cv_header_sys_wait_h'
+ variable.
+
+ This macro is obsolescent, as current systems are compatible with
+ Posix. New programs need not use this macro.
+
+ `_POSIX_VERSION' is defined when `unistd.h' is included on Posix
+systems. If there is no `unistd.h', it is definitely not a Posix
+system. However, some non-Posix systems do have `unistd.h'.
+
+ The way to check whether the system supports Posix is:
+
+ #ifdef HAVE_UNISTD_H
+ # include <sys/types.h>
+ # include <unistd.h>
+ #endif
+
+ #ifdef _POSIX_VERSION
+ /* Code for Posix systems. */
+ #endif
+
+ -- Macro: AC_HEADER_TIME
+ If a program may include both `time.h' and `sys/time.h', define
+ `TIME_WITH_SYS_TIME'. On some ancient systems, `sys/time.h'
+ included `time.h', but `time.h' was not protected against multiple
+ inclusion, so programs could not explicitly include both files.
+ This macro is useful in programs that use, for example, `struct
+ timeval' as well as `struct tm'. It is best used in conjunction
+ with `HAVE_SYS_TIME_H', which can be checked for using
+ `AC_CHECK_HEADERS([sys/time.h])'.
+
+ #ifdef TIME_WITH_SYS_TIME
+ # include <sys/time.h>
+ # include <time.h>
+ #else
+ # ifdef HAVE_SYS_TIME_H
+ # include <sys/time.h>
+ # else
+ # include <time.h>
+ # endif
+ #endif
+
+ This macro caches its result in the `ac_cv_header_time' variable.
+
+ This macro is obsolescent, as current systems can include both
+ files when they exist. New programs need not use this macro.
+
+ -- Macro: AC_HEADER_TIOCGWINSZ
+ If the use of `TIOCGWINSZ' requires `<sys/ioctl.h>', then define
+ `GWINSZ_IN_SYS_IOCTL'. Otherwise `TIOCGWINSZ' can be found in
+ `<termios.h>'.
+
+ Use:
+
+ #ifdef HAVE_TERMIOS_H
+ # include <termios.h>
+ #endif
+
+ #ifdef GWINSZ_IN_SYS_IOCTL
+ # include <sys/ioctl.h>
+ #endif
+
+
+File: autoconf.info, Node: Generic Headers, Prev: Particular Headers, Up: Header Files
+
+5.6.3 Generic Header Checks
+---------------------------
+
+These macros are used to find system header files not covered by the
+"particular" test macros. If you need to check the contents of a header
+as well as find out whether it is present, you have to write your own
+test for it (*note Writing Tests::).
+
+ -- Macro: AC_CHECK_HEADER (HEADER-FILE, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES])
+ If the system header file HEADER-FILE is compilable, execute shell
+ commands ACTION-IF-FOUND, otherwise execute ACTION-IF-NOT-FOUND.
+ If you just want to define a symbol if the header file is
+ available, consider using `AC_CHECK_HEADERS' instead.
+
+ INCLUDES is decoded to determine the appropriate include
+ directives. If omitted or empty, `configure' will check for both
+ header existence (with the preprocessor) and usability (with the
+ compiler), using `AC_INCLUDES_DEFAULT' for the compile test. If
+ there is a discrepancy between the results, a warning is issued to
+ the user, and the compiler results are favored (*note Present But
+ Cannot Be Compiled::). In general, favoring the compiler results
+ means that a header will be treated as not found even though the
+ file exists, because you did not provide enough prerequisites.
+
+ Providing a non-empty INCLUDES argument allows the code to provide
+ any prerequisites prior to including the header under test; it is
+ common to use the argument `AC_INCLUDES_DEFAULT' (*note Default
+ Includes::). With an explicit fourth argument, no preprocessor
+ test is needed. As a special case, an INCLUDES of exactly `-'
+ triggers the older preprocessor check, which merely determines
+ existence of the file in the preprocessor search path; this should
+ only be used as a last resort (it is safer to determine the actual
+ prerequisites and perform a compiler check, or else use
+ `AC_PREPROC_IFELSE' to make it obvious that only a preprocessor
+ check is desired).
+
+ This macro caches its result in the `ac_cv_header_HEADER-FILE'
+ variable, with characters not suitable for a variable name mapped
+ to underscores.
+
+ -- Macro: AC_CHECK_HEADERS (HEADER-FILE..., [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES])
+ For each given system header file HEADER-FILE in the
+ blank-separated argument list that exists, define
+ `HAVE_HEADER-FILE' (in all capitals). If ACTION-IF-FOUND is
+ given, it is additional shell code to execute when one of the
+ header files is found. You can give it a value of `break' to
+ break out of the loop on the first match. If ACTION-IF-NOT-FOUND
+ is given, it is executed when one of the header files is not found.
+
+ INCLUDES is interpreted as in `AC_CHECK_HEADER', in order to
+ choose the set of preprocessor directives supplied before the
+ header under test.
+
+ This macro caches its result in the `ac_cv_header_HEADER-FILE'
+ variable, with characters not suitable for a variable name mapped
+ to underscores.
+
+ Previous versions of Autoconf merely checked whether the header was
+accepted by the preprocessor. This was changed because the old test was
+inappropriate for typical uses. Headers are typically used to compile,
+not merely to preprocess, and the old behavior sometimes accepted
+headers that clashed at compile-time (*note Present But Cannot Be
+Compiled::). If you need to check whether a header is preprocessable,
+you can use `AC_PREPROC_IFELSE' (*note Running the Preprocessor::).
+
+ Actually requiring a header to compile improves the robustness of the
+test, but it also requires that you make sure that headers that must be
+included before the HEADER-FILE be part of the INCLUDES, (*note Default
+Includes::). If looking for `bar.h', which requires that `foo.h' be
+included before if it exists, we suggest the following scheme:
+
+AC_CHECK_HEADERS([foo.h])
+AC_CHECK_HEADERS([bar.h], [], [],
+[#ifdef HAVE_FOO_H
+# include <foo.h>
+#endif
+])
+
+ The following variant generates smaller, faster `configure' files if
+you do not need the full power of `AC_CHECK_HEADERS'.
+
+ -- Macro: AC_CHECK_HEADERS_ONCE (HEADER-FILE...)
+ For each given system header file HEADER-FILE in the
+ blank-separated argument list that exists, define
+ `HAVE_HEADER-FILE' (in all capitals). This is a once-only variant
+ of `AC_CHECK_HEADERS'. It generates the checking code at most
+ once, so that `configure' is smaller and faster; but the checks
+ cannot be conditionalized and are always done once, early during
+ the `configure' run. Thus, this macro is only safe for checking
+ headers that do not have prerequisites beyond what
+ `AC_INCLUDES_DEFAULT' provides.
+
+
+File: autoconf.info, Node: Declarations, Next: Structures, Prev: Header Files, Up: Existing Tests
+
+5.7 Declarations
+================
+
+The following macros check for the declaration of variables and
+functions. If there is no macro specifically defined to check for a
+symbol you need, then you can use the general macros (*note Generic
+Declarations::) or, for more complex tests, you may use
+`AC_COMPILE_IFELSE' (*note Running the Compiler::).
+
+* Menu:
+
+* Particular Declarations:: Macros to check for certain declarations
+* Generic Declarations:: How to find other declarations
+
+
+File: autoconf.info, Node: Particular Declarations, Next: Generic Declarations, Up: Declarations
+
+5.7.1 Particular Declaration Checks
+-----------------------------------
+
+There are no specific macros for declarations.
+
+
+File: autoconf.info, Node: Generic Declarations, Prev: Particular Declarations, Up: Declarations
+
+5.7.2 Generic Declaration Checks
+--------------------------------
+
+These macros are used to find declarations not covered by the
+"particular" test macros.
+
+ -- Macro: AC_CHECK_DECL (SYMBOL, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ If SYMBOL (a function, variable, or constant) is not declared in
+ INCLUDES and a declaration is needed, run the shell commands
+ ACTION-IF-NOT-FOUND, otherwise ACTION-IF-FOUND. INCLUDES is a
+ series of include directives, defaulting to `AC_INCLUDES_DEFAULT'
+ (*note Default Includes::), which are used prior to the
+ declaration under test.
+
+ This macro actually tests whether SYMBOL is defined as a macro or
+ can be used as an r-value, not whether it is really declared,
+ because it is much safer to avoid introducing extra declarations
+ when they are not needed. In order to facilitate use of C++ and
+ overloaded function declarations, it is possible to specify
+ function argument types in parentheses for types which can be
+ zero-initialized:
+
+ AC_CHECK_DECL([basename(char *)])
+
+ This macro caches its result in the `ac_cv_have_decl_SYMBOL'
+ variable, with characters not suitable for a variable name mapped
+ to underscores.
+
+ -- Macro: AC_CHECK_DECLS (SYMBOLS, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ For each of the SYMBOLS (_comma_-separated list with optional
+ function argument types for C++ overloads), define
+ `HAVE_DECL_SYMBOL' (in all capitals) to `1' if SYMBOL is declared,
+ otherwise to `0'. If ACTION-IF-NOT-FOUND is given, it is
+ additional shell code to execute when one of the function
+ declarations is needed, otherwise ACTION-IF-FOUND is executed.
+
+ INCLUDES is a series of include directives, defaulting to
+ `AC_INCLUDES_DEFAULT' (*note Default Includes::), which are used
+ prior to the declarations under test.
+
+ This macro uses an M4 list as first argument:
+ AC_CHECK_DECLS([strdup])
+ AC_CHECK_DECLS([strlen])
+ AC_CHECK_DECLS([malloc, realloc, calloc, free])
+ AC_CHECK_DECLS([j0], [], [], [[#include <math.h>]])
+ AC_CHECK_DECLS([[basename(char *)], [dirname(char *)]])
+
+ Unlike the other `AC_CHECK_*S' macros, when a SYMBOL is not
+ declared, `HAVE_DECL_SYMBOL' is defined to `0' instead of leaving
+ `HAVE_DECL_SYMBOL' undeclared. When you are _sure_ that the check
+ was performed, use `HAVE_DECL_SYMBOL' in `#if':
+
+ #if !HAVE_DECL_SYMBOL
+ extern char *symbol;
+ #endif
+
+ If the test may have not been performed, however, because it is
+ safer _not_ to declare a symbol than to use a declaration that
+ conflicts with the system's one, you should use:
+
+ #if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
+ void *malloc (size_t *s);
+ #endif
+
+ You fall into the second category only in extreme situations:
+ either your files may be used without being configured, or they
+ are used during the configuration. In most cases the traditional
+ approach is enough.
+
+ This macro caches its results in `ac_cv_have_decl_SYMBOL'
+ variables, with characters not suitable for a variable name mapped
+ to underscores.
+
+ -- Macro: AC_CHECK_DECLS_ONCE (SYMBOLS)
+ For each of the SYMBOLS (_comma_-separated list), define
+ `HAVE_DECL_SYMBOL' (in all capitals) to `1' if SYMBOL is declared
+ in the default include files, otherwise to `0'. This is a
+ once-only variant of `AC_CHECK_DECLS'. It generates the checking
+ code at most once, so that `configure' is smaller and faster; but
+ the checks cannot be conditionalized and are always done once,
+ early during the `configure' run.
+
+
+File: autoconf.info, Node: Structures, Next: Types, Prev: Declarations, Up: Existing Tests
+
+5.8 Structures
+==============
+
+The following macros check for the presence of certain members in C
+structures. If there is no macro specifically defined to check for a
+member you need, then you can use the general structure-member macros
+(*note Generic Structures::) or, for more complex tests, you may use
+`AC_COMPILE_IFELSE' (*note Running the Compiler::).
+
+* Menu:
+
+* Particular Structures:: Macros to check for certain structure members
+* Generic Structures:: How to find other structure members
+
+
+File: autoconf.info, Node: Particular Structures, Next: Generic Structures, Up: Structures
+
+5.8.1 Particular Structure Checks
+---------------------------------
+
+The following macros check for certain structures or structure members.
+
+ -- Macro: AC_STRUCT_DIRENT_D_INO
+ Perform all the actions of `AC_HEADER_DIRENT' (*note Particular
+ Headers::). Then, if `struct dirent' contains a `d_ino' member,
+ define `HAVE_STRUCT_DIRENT_D_INO'.
+
+ `HAVE_STRUCT_DIRENT_D_INO' indicates only the presence of `d_ino',
+ not whether its contents are always reliable. Traditionally, a
+ zero `d_ino' indicated a deleted directory entry, though current
+ systems hide this detail from the user and never return zero
+ `d_ino' values. Many current systems report an incorrect `d_ino'
+ for a directory entry that is a mount point.
+
+ -- Macro: AC_STRUCT_DIRENT_D_TYPE
+ Perform all the actions of `AC_HEADER_DIRENT' (*note Particular
+ Headers::). Then, if `struct dirent' contains a `d_type' member,
+ define `HAVE_STRUCT_DIRENT_D_TYPE'.
+
+ -- Macro: AC_STRUCT_ST_BLOCKS
+ If `struct stat' contains an `st_blocks' member, define
+ `HAVE_STRUCT_STAT_ST_BLOCKS'. Otherwise, require an `AC_LIBOBJ'
+ replacement of `fileblocks'. The former name, `HAVE_ST_BLOCKS' is
+ to be avoided, as its support will cease in the future.
+
+ This macro caches its result in the
+ `ac_cv_member_struct_stat_st_blocks' variable.
+
+ -- Macro: AC_STRUCT_TM
+ If `time.h' does not define `struct tm', define `TM_IN_SYS_TIME',
+ which means that including `sys/time.h' had better define `struct
+ tm'.
+
+ This macro is obsolescent, as `time.h' defines `struct tm' in
+ current systems. New programs need not use this macro.
+
+ -- Macro: AC_STRUCT_TIMEZONE
+ Figure out how to get the current timezone. If `struct tm' has a
+ `tm_zone' member, define `HAVE_STRUCT_TM_TM_ZONE' (and the
+ obsoleted `HAVE_TM_ZONE'). Otherwise, if the external array
+ `tzname' is found, define `HAVE_TZNAME'; if it is declared, define
+ `HAVE_DECL_TZNAME'.
+
+
+File: autoconf.info, Node: Generic Structures, Prev: Particular Structures, Up: Structures
+
+5.8.2 Generic Structure Checks
+------------------------------
+
+These macros are used to find structure members not covered by the
+"particular" test macros.
+
+ -- Macro: AC_CHECK_MEMBER (AGGREGATE.MEMBER, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ Check whether MEMBER is a member of the aggregate AGGREGATE. If
+ no INCLUDES are specified, the default includes are used (*note
+ Default Includes::).
+
+ AC_CHECK_MEMBER([struct passwd.pw_gecos], [],
+ [AC_MSG_ERROR([we need `passwd.pw_gecos'])],
+ [[#include <pwd.h>]])
+
+ You can use this macro for submembers:
+
+ AC_CHECK_MEMBER(struct top.middle.bot)
+
+ This macro caches its result in the
+ `ac_cv_member_AGGREGATE_MEMBER' variable, with characters not
+ suitable for a variable name mapped to underscores.
+
+ -- Macro: AC_CHECK_MEMBERS (MEMBERS, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ Check for the existence of each `AGGREGATE.MEMBER' of MEMBERS
+ using the previous macro. When MEMBER belongs to AGGREGATE,
+ define `HAVE_AGGREGATE_MEMBER' (in all capitals, with spaces and
+ dots replaced by underscores). If ACTION-IF-FOUND is given, it is
+ executed for each of the found members. If ACTION-IF-NOT-FOUND is
+ given, it is executed for each of the members that could not be
+ found.
+
+ INCLUDES is a series of include directives, defaulting to
+ `AC_INCLUDES_DEFAULT' (*note Default Includes::), which are used
+ prior to the members under test.
+
+ This macro uses M4 lists:
+ AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
+
+
+File: autoconf.info, Node: Types, Next: Compilers and Preprocessors, Prev: Structures, Up: Existing Tests
+
+5.9 Types
+=========
+
+The following macros check for C types, either builtin or typedefs. If
+there is no macro specifically defined to check for a type you need, and
+you don't need to check for any special properties of it, then you can
+use a general type-check macro.
+
+* Menu:
+
+* Particular Types:: Special handling to find certain types
+* Generic Types:: How to find other types
+
+
+File: autoconf.info, Node: Particular Types, Next: Generic Types, Up: Types
+
+5.9.1 Particular Type Checks
+----------------------------
+
+These macros check for particular C types in `sys/types.h', `stdlib.h',
+`stdint.h', `inttypes.h' and others, if they exist.
+
+ The Gnulib `stdint' module is an alternate way to define many of
+these symbols; it is useful if you prefer your code to assume a
+C99-or-better environment. *Note Gnulib::.
+
+ -- Macro: AC_TYPE_GETGROUPS
+ Define `GETGROUPS_T' to be whichever of `gid_t' or `int' is the
+ base type of the array argument to `getgroups'.
+
+ This macro caches the base type in the `ac_cv_type_getgroups'
+ variable.
+
+ -- Macro: AC_TYPE_INT8_T
+ If `stdint.h' or `inttypes.h' does not define the type `int8_t',
+ define `int8_t' to a signed integer type that is exactly 8 bits
+ wide and that uses two's complement representation, if such a type
+ exists. If you are worried about porting to hosts that lack such
+ a type, you can use the results of this macro in C89-or-later code
+ as follows:
+
+ #if HAVE_STDINT_H
+ # include <stdint.h>
+ #endif
+ #if defined INT8_MAX || defined int8_t
+ _code using int8_t_
+ #else
+ _complicated alternative using >8-bit 'signed char'_
+ #endif
+
+ This macro caches the type in the `ac_cv_c_int8_t' variable.
+
+ -- Macro: AC_TYPE_INT16_T
+ This is like `AC_TYPE_INT8_T', except for 16-bit integers.
+
+ -- Macro: AC_TYPE_INT32_T
+ This is like `AC_TYPE_INT8_T', except for 32-bit integers.
+
+ -- Macro: AC_TYPE_INT64_T
+ This is like `AC_TYPE_INT8_T', except for 64-bit integers.
+
+ -- Macro: AC_TYPE_INTMAX_T
+ If `stdint.h' or `inttypes.h' defines the type `intmax_t', define
+ `HAVE_INTMAX_T'. Otherwise, define `intmax_t' to the widest
+ signed integer type.
+
+ -- Macro: AC_TYPE_INTPTR_T
+ If `stdint.h' or `inttypes.h' defines the type `intptr_t', define
+ `HAVE_INTPTR_T'. Otherwise, define `intptr_t' to a signed integer
+ type wide enough to hold a pointer, if such a type exists.
+
+ -- Macro: AC_TYPE_LONG_DOUBLE
+ If the C compiler supports a working `long double' type, define
+ `HAVE_LONG_DOUBLE'. The `long double' type might have the same
+ range and precision as `double'.
+
+ This macro caches its result in the `ac_cv_type_long_double'
+ variable.
+
+ This macro is obsolescent, as current C compilers support `long
+ double'. New programs need not use this macro.
+
+ -- Macro: AC_TYPE_LONG_DOUBLE_WIDER
+ If the C compiler supports a working `long double' type with more
+ range or precision than the `double' type, define
+ `HAVE_LONG_DOUBLE_WIDER'.
+
+ This macro caches its result in the `ac_cv_type_long_double_wider'
+ variable.
+
+ -- Macro: AC_TYPE_LONG_LONG_INT
+ If the C compiler supports a working `long long int' type, define
+ `HAVE_LONG_LONG_INT'. However, this test does not test `long long
+ int' values in preprocessor `#if' expressions, because too many
+ compilers mishandle such expressions. *Note Preprocessor
+ Arithmetic::.
+
+ This macro caches its result in the `ac_cv_type_long_long_int'
+ variable.
+
+ -- Macro: AC_TYPE_MBSTATE_T
+ Define `HAVE_MBSTATE_T' if `<wchar.h>' declares the `mbstate_t'
+ type. Also, define `mbstate_t' to be a type if `<wchar.h>' does
+ not declare it.
+
+ This macro caches its result in the `ac_cv_type_mbstate_t'
+ variable.
+
+ -- Macro: AC_TYPE_MODE_T
+ Define `mode_t' to a suitable type, if standard headers do not
+ define it.
+
+ This macro caches its result in the `ac_cv_type_mode_t' variable.
+
+ -- Macro: AC_TYPE_OFF_T
+ Define `off_t' to a suitable type, if standard headers do not
+ define it.
+
+ This macro caches its result in the `ac_cv_type_off_t' variable.
+
+ -- Macro: AC_TYPE_PID_T
+ Define `pid_t' to a suitable type, if standard headers do not
+ define it.
+
+ This macro caches its result in the `ac_cv_type_pid_t' variable.
+
+ -- Macro: AC_TYPE_SIZE_T
+ Define `size_t' to a suitable type, if standard headers do not
+ define it.
+
+ This macro caches its result in the `ac_cv_type_size_t' variable.
+
+ -- Macro: AC_TYPE_SSIZE_T
+ Define `ssize_t' to a suitable type, if standard headers do not
+ define it.
+
+ This macro caches its result in the `ac_cv_type_ssize_t' variable.
+
+ -- Macro: AC_TYPE_UID_T
+ Define `uid_t' and `gid_t' to suitable types, if standard headers
+ do not define them.
+
+ This macro caches its result in the `ac_cv_type_uid_t' variable.
+
+ -- Macro: AC_TYPE_UINT8_T
+ If `stdint.h' or `inttypes.h' does not define the type `uint8_t',
+ define `uint8_t' to an unsigned integer type that is exactly 8
+ bits wide, if such a type exists. This is like `AC_TYPE_INT8_T',
+ except for unsigned integers.
+
+ -- Macro: AC_TYPE_UINT16_T
+ This is like `AC_TYPE_UINT8_T', except for 16-bit integers.
+
+ -- Macro: AC_TYPE_UINT32_T
+ This is like `AC_TYPE_UINT8_T', except for 32-bit integers.
+
+ -- Macro: AC_TYPE_UINT64_T
+ This is like `AC_TYPE_UINT8_T', except for 64-bit integers.
+
+ -- Macro: AC_TYPE_UINTMAX_T
+ If `stdint.h' or `inttypes.h' defines the type `uintmax_t', define
+ `HAVE_UINTMAX_T'. Otherwise, define `uintmax_t' to the widest
+ unsigned integer type.
+
+ -- Macro: AC_TYPE_UINTPTR_T
+ If `stdint.h' or `inttypes.h' defines the type `uintptr_t', define
+ `HAVE_UINTPTR_T'. Otherwise, define `uintptr_t' to an unsigned
+ integer type wide enough to hold a pointer, if such a type exists.
+
+ -- Macro: AC_TYPE_UNSIGNED_LONG_LONG_INT
+ If the C compiler supports a working `unsigned long long int' type,
+ define `HAVE_UNSIGNED_LONG_LONG_INT'. However, this test does not
+ test `unsigned long long int' values in preprocessor `#if'
+ expressions, because too many compilers mishandle such expressions.
+ *Note Preprocessor Arithmetic::.
+
+ This macro caches its result in the
+ `ac_cv_type_unsigned_long_long_int' variable.
+
+
+File: autoconf.info, Node: Generic Types, Prev: Particular Types, Up: Types
+
+5.9.2 Generic Type Checks
+-------------------------
+
+These macros are used to check for types not covered by the "particular"
+test macros.
+
+ -- Macro: AC_CHECK_TYPE (TYPE, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ Check whether TYPE is defined. It may be a compiler builtin type
+ or defined by the INCLUDES. INCLUDES is a series of include
+ directives, defaulting to `AC_INCLUDES_DEFAULT' (*note Default
+ Includes::), which are used prior to the type under test.
+
+ In C, TYPE must be a type-name, so that the expression `sizeof
+ (TYPE)' is valid (but `sizeof ((TYPE))' is not). The same test is
+ applied when compiling for C++, which means that in C++ TYPE
+ should be a type-id and should not be an anonymous `struct' or
+ `union'.
+
+ This macro caches its result in the `ac_cv_type_TYPE' variable,
+ with `*' mapped to `p' and other characters not suitable for a
+ variable name mapped to underscores.
+
+ -- Macro: AC_CHECK_TYPES (TYPES, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ For each TYPE of the TYPES that is defined, define `HAVE_TYPE' (in
+ all capitals). Each TYPE must follow the rules of
+ `AC_CHECK_TYPE'. If no INCLUDES are specified, the default
+ includes are used (*note Default Includes::). If ACTION-IF-FOUND
+ is given, it is additional shell code to execute when one of the
+ types is found. If ACTION-IF-NOT-FOUND is given, it is executed
+ when one of the types is not found.
+
+ This macro uses M4 lists:
+ AC_CHECK_TYPES([ptrdiff_t])
+ AC_CHECK_TYPES([unsigned long long int, uintmax_t])
+ AC_CHECK_TYPES([float_t], [], [], [[#include <math.h>]])
+
+
+ Autoconf, up to 2.13, used to provide to another version of
+`AC_CHECK_TYPE', broken by design. In order to keep backward
+compatibility, a simple heuristic, quite safe but not totally, is
+implemented. In case of doubt, read the documentation of the former
+`AC_CHECK_TYPE', see *note Obsolete Macros::.
+
+
+File: autoconf.info, Node: Compilers and Preprocessors, Next: System Services, Prev: Types, Up: Existing Tests
+
+5.10 Compilers and Preprocessors
+================================
+
+All the tests for compilers (`AC_PROG_CC', `AC_PROG_CXX',
+`AC_PROG_F77') define the output variable `EXEEXT' based on the output
+of the compiler, typically to the empty string if Posix and `.exe' if a
+DOS variant.
+
+ They also define the output variable `OBJEXT' based on the output of
+the compiler, after `.c' files have been excluded, typically to `o' if
+Posix, `obj' if a DOS variant.
+
+ If the compiler being used does not produce executables, the tests
+fail. If the executables can't be run, and cross-compilation is not
+enabled, they fail too. *Note Manual Configuration::, for more on
+support for cross compiling.
+
+* Menu:
+
+* Specific Compiler Characteristics:: Some portability issues
+* Generic Compiler Characteristics:: Language independent tests and features
+* C Compiler:: Checking its characteristics
+* C++ Compiler:: Likewise
+* Objective C Compiler:: Likewise
+* Objective C++ Compiler:: Likewise
+* Erlang Compiler and Interpreter:: Likewise
+* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
+
+
+File: autoconf.info, Node: Specific Compiler Characteristics, Next: Generic Compiler Characteristics, Up: Compilers and Preprocessors
+
+5.10.1 Specific Compiler Characteristics
+----------------------------------------
+
+Some compilers exhibit different behaviors.
+
+Static/Dynamic Expressions
+ Autoconf relies on a trick to extract one bit of information from
+ the C compiler: using negative array sizes. For instance the
+ following excerpt of a C source demonstrates how to test whether
+ `int' objects are 4 bytes wide:
+
+ static int test_array[sizeof (int) == 4 ? 1 : -1];
+
+ To our knowledge, there is a single compiler that does not support
+ this trick: the HP C compilers (the real ones, not only the
+ "bundled") on HP-UX 11.00. They incorrectly reject the above
+ program with the diagnostic "Variable-length arrays cannot have
+ static storage." This bug comes from HP compilers' mishandling of
+ `sizeof (int)', not from the `? 1 : -1', and Autoconf works around
+ this problem by casting `sizeof (int)' to `long int' before
+ comparing it.
+
+
+File: autoconf.info, Node: Generic Compiler Characteristics, Next: C Compiler, Prev: Specific Compiler Characteristics, Up: Compilers and Preprocessors
+
+5.10.2 Generic Compiler Characteristics
+---------------------------------------
+
+ -- Macro: AC_CHECK_SIZEOF (TYPE-OR-EXPR, [UNUSED], [INCLUDES =
+ `AC_INCLUDES_DEFAULT'])
+ Define `SIZEOF_TYPE-OR-EXPR' (*note Standard Symbols::) to be the
+ size in bytes of TYPE-OR-EXPR, which may be either a type or an
+ expression returning a value that has a size. If the expression
+ `sizeof (TYPE-OR-EXPR)' is invalid, the result is 0. INCLUDES is
+ a series of include directives, defaulting to
+ `AC_INCLUDES_DEFAULT' (*note Default Includes::), which are used
+ prior to the expression under test.
+
+ This macro now works even when cross-compiling. The UNUSED
+ argument was used when cross-compiling.
+
+ For example, the call
+
+ AC_CHECK_SIZEOF([int *])
+
+ defines `SIZEOF_INT_P' to be 8 on DEC Alpha AXP systems.
+
+ This macro caches its result in the `ac_cv_sizeof_TYPE-OR-EXPR'
+ variable, with `*' mapped to `p' and other characters not suitable
+ for a variable name mapped to underscores.
+
+ -- Macro: AC_CHECK_ALIGNOF (TYPE, [INCLUDES = `AC_INCLUDES_DEFAULT'])
+ Define `ALIGNOF_TYPE' (*note Standard Symbols::) to be the
+ alignment in bytes of TYPE. `TYPE y;' must be valid as a
+ structure member declaration. If `type' is unknown, the result is
+ 0. If no INCLUDES are specified, the default includes are used
+ (*note Default Includes::).
+
+ This macro caches its result in the `ac_cv_alignof_TYPE-OR-EXPR'
+ variable, with `*' mapped to `p' and other characters not suitable
+ for a variable name mapped to underscores.
+
+ -- Macro: AC_COMPUTE_INT (VAR, EXPRESSION, [INCLUDES =
+ `AC_INCLUDES_DEFAULT'], [ACTION-IF-FAILS])
+ Store into the shell variable VAR the value of the integer
+ EXPRESSION. The value should fit in an initializer in a C
+ variable of type `signed long'. To support cross compilation (in
+ which case, the macro only works on hosts that use twos-complement
+ arithmetic), it should be possible to evaluate the expression at
+ compile-time. If no INCLUDES are specified, the default includes
+ are used (*note Default Includes::).
+
+ Execute ACTION-IF-FAILS if the value cannot be determined
+ correctly.
+
+ -- Macro: AC_LANG_WERROR
+ Normally Autoconf ignores warnings generated by the compiler,
+ linker, and preprocessor. If this macro is used, warnings count
+ as fatal errors for the current language. This macro is useful
+ when the results of configuration are used where warnings are
+ unacceptable; for instance, if parts of a program are built with
+ the GCC `-Werror' option. If the whole program is built using
+ `-Werror' it is often simpler to put `-Werror' in the compiler
+ flags (`CFLAGS', etc.).
+
+ -- Macro: AC_OPENMP
+ OpenMP (http://www.openmp.org/) specifies extensions of C, C++,
+ and Fortran that simplify optimization of shared memory
+ parallelism, which is a common problem on multicore CPUs.
+
+ If the current language is C, the macro `AC_OPENMP' sets the
+ variable `OPENMP_CFLAGS' to the C compiler flags needed for
+ supporting OpenMP. `OPENMP_CFLAGS' is set to empty if the
+ compiler already supports OpenMP, if it has no way to activate
+ OpenMP support, or if the user rejects OpenMP support by invoking
+ `configure' with the `--disable-openmp' option.
+
+ `OPENMP_CFLAGS' needs to be used when compiling programs, when
+ preprocessing program source, and when linking programs.
+ Therefore you need to add `$(OPENMP_CFLAGS)' to the `CFLAGS' of C
+ programs that use OpenMP. If you preprocess OpenMP-specific C
+ code, you also need to add `$(OPENMP_CFLAGS)' to `CPPFLAGS'. The
+ presence of OpenMP support is revealed at compile time by the
+ preprocessor macro `_OPENMP'.
+
+ Linking a program with `OPENMP_CFLAGS' typically adds one more
+ shared library to the program's dependencies, so its use is
+ recommended only on programs that actually require OpenMP.
+
+ If the current language is C++, `AC_OPENMP' sets the variable
+ `OPENMP_CXXFLAGS', suitably for the C++ compiler. The same remarks
+ hold as for C.
+
+ If the current language is Fortran 77 or Fortran, `AC_OPENMP' sets
+ the variable `OPENMP_FFLAGS' or `OPENMP_FCFLAGS', respectively.
+ Similar remarks as for C hold, except that `CPPFLAGS' is not used
+ for Fortran, and no preprocessor macro signals OpenMP support.
+
+ For portability, it is best to avoid spaces between `#' and
+ `pragma omp'. That is, write `#pragma omp', not `# pragma omp'.
+ The Sun WorkShop 6.2 C compiler chokes on the latter.
+
+ This macro caches its result in the `ac_cv_prog_c_openmp',
+ `ac_cv_prog_cxx_openmp', `ac_cv_prog_f77_openmp', or
+ `ac_cv_prog_fc_openmp' variable, depending on the current language.
+
+
+File: autoconf.info, Node: C Compiler, Next: C++ Compiler, Prev: Generic Compiler Characteristics, Up: Compilers and Preprocessors
+
+5.10.3 C Compiler Characteristics
+---------------------------------
+
+The following macros provide ways to find and exercise a C Compiler.
+There are a few constructs that ought to be avoided, but do not deserve
+being checked for, since they can easily be worked around.
+
+Don't use lines containing solitary backslashes
+ They tickle a bug in the HP-UX C compiler (checked on HP-UX 10.20,
+ 11.00, and 11i). When given the following source:
+
+ #ifdef __STDC__
+ /\
+ * A comment with backslash-newlines in it. %{ %} *\
+ \
+ /
+ char str[] = "\\
+ " A string with backslash-newlines in it %{ %} \\
+ "";
+ char apostrophe = '\\
+ \
+ '\
+ ';
+ #endif
+
+ the compiler incorrectly fails with the diagnostics
+ "Non-terminating comment at end of file" and "Missing `#endif' at
+ end of file." Removing the lines with solitary backslashes solves
+ the problem.
+
+Don't compile several files at once if output matters to you
+ Some compilers, such as HP's, report names of files being compiled
+ when given more than one file operand. For instance:
+
+ $ cc a.c b.c
+ a.c:
+ b.c:
+
+ This can cause problems if you observe the output of the compiler
+ to detect failures. Invoking `cc -c a.c && cc -c b.c && cc -o c
+ a.o b.o' solves the issue.
+
+Don't rely on `#error' failing
+ The IRIX C compiler does not fail when #error is preprocessed; it
+ simply emits a diagnostic and continues, exiting successfully. So,
+ instead of an error directive like `#error "Unsupported word size"'
+ it is more portable to use an invalid directive like `#Unsupported
+ word size' in Autoconf tests. In ordinary source code, `#error' is
+ OK, since installers with inadequate compilers like IRIX can simply
+ examine these compilers' diagnostic output.
+
+Don't rely on correct `#line' support
+ On Solaris, `c89' (at least Sun C 5.3 through 5.8) diagnoses
+ `#line' directives whose line numbers are greater than 32767.
+ Nothing in Posix makes this invalid. That is why Autoconf stopped
+ issuing `#line' directives.
+
+ -- Macro: AC_PROG_CC ([COMPILER-SEARCH-LIST])
+ Determine a C compiler to use. If `CC' is not already set in the
+ environment, check for `gcc' and `cc', then for other C compilers.
+ Set output variable `CC' to the name of the compiler found.
+
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a blank-separated list of C compilers
+ to search for. This just gives the user an opportunity to specify
+ an alternative search list for the C compiler. For example, if
+ you didn't like the default order, then you could invoke
+ `AC_PROG_CC' like this:
+
+ AC_PROG_CC([gcc cl cc])
+
+ If the C compiler does not handle function prototypes correctly by
+ default, try to add an option to output variable `CC' to make it
+ so. This macro tries various options that select
+ standard-conformance modes on various systems.
+
+ After calling this macro you can check whether the C compiler has
+ been set to accept ANSI C89 (ISO C90); if not, the shell variable
+ `ac_cv_prog_cc_c89' is set to `no'. See also `AC_C_PROTOTYPES'
+ below.
+
+ If using the GNU C compiler, set shell variable `GCC' to `yes'.
+ If output variable `CFLAGS' was not already set, set it to `-g
+ -O2' for the GNU C compiler (`-O2' on systems where GCC does not
+ accept `-g'), or `-g' for other compilers. If your package does
+ not like this default, then it is acceptable to insert the line `:
+ ${CFLAGS=""}' after `AC_INIT' and before `AC_PROG_CC' to select an
+ empty default instead.
+
+ Many Autoconf macros use a compiler, and thus call
+ `AC_REQUIRE([AC_PROG_CC])' to ensure that the compiler has been
+ determined before the body of the outermost `AC_DEFUN' macro.
+ Although `AC_PROG_CC' is safe to directly expand multiple times, it
+ performs certain checks (such as the proper value of `EXEEXT') only
+ on the first invocation. Therefore, care must be used when
+ invoking this macro from within another macro rather than at the
+ top level (*note Expanded Before Required::).
+
+ -- Macro: AC_PROG_CC_C_O
+ If the C compiler does not accept the `-c' and `-o' options
+ simultaneously, define `NO_MINUS_C_MINUS_O'. This macro actually
+ tests both the compiler found by `AC_PROG_CC', and, if different,
+ the first `cc' in the path. The test fails if one fails. This
+ macro was created for GNU Make to choose the default C compilation
+ rule.
+
+ For the compiler COMPILER, this macro caches its result in the
+ `ac_cv_prog_cc_COMPILER_c_o' variable.
+
+ -- Macro: AC_PROG_CPP
+ Set output variable `CPP' to a command that runs the C
+ preprocessor. If `$CC -E' doesn't work, `/lib/cpp' is used. It
+ is only portable to run `CPP' on files with a `.c' extension.
+
+ Some preprocessors don't indicate missing include files by the
+ error status. For such preprocessors an internal variable is set
+ that causes other macros to check the standard error from the
+ preprocessor and consider the test failed if any warnings have
+ been reported. For most preprocessors, though, warnings do not
+ cause include-file tests to fail unless `AC_PROG_CPP_WERROR' is
+ also specified.
+
+ -- Macro: AC_PROG_CPP_WERROR
+ This acts like `AC_PROG_CPP', except it treats warnings from the
+ preprocessor as errors even if the preprocessor exit status
+ indicates success. This is useful for avoiding headers that
+ generate mandatory warnings, such as deprecation notices.
+
+ The following macros check for C compiler or machine architecture
+features. To check for characteristics not listed here, use
+`AC_COMPILE_IFELSE' (*note Running the Compiler::) or `AC_RUN_IFELSE'
+(*note Runtime::).
+
+ -- Macro: AC_PROG_CC_STDC
+ If the C compiler cannot compile ISO Standard C (currently C99),
+ try to add an option to output variable `CC' to make it work. If
+ the compiler does not support C99, fall back to supporting ANSI
+ C89 (ISO C90).
+
+ After calling this macro you can check whether the C compiler has
+ been set to accept Standard C; if not, the shell variable
+ `ac_cv_prog_cc_stdc' is set to `no'.
+
+ -- Macro: AC_PROG_CC_C89
+ If the C compiler is not in ANSI C89 (ISO C90) mode by default,
+ try to add an option to output variable `CC' to make it so. This
+ macro tries various options that select ANSI C89 on some system or
+ another, preferring extended functionality modes over strict
+ conformance modes. It considers the compiler to be in ANSI C89
+ mode if it handles function prototypes correctly.
+
+ After calling this macro you can check whether the C compiler has
+ been set to accept ANSI C89; if not, the shell variable
+ `ac_cv_prog_cc_c89' is set to `no'.
+
+ This macro is called automatically by `AC_PROG_CC'.
+
+ -- Macro: AC_PROG_CC_C99
+ If the C compiler is not in C99 mode by default, try to add an
+ option to output variable `CC' to make it so. This macro tries
+ various options that select C99 on some system or another,
+ preferring extended functionality modes over strict conformance
+ modes. It considers the compiler to be in C99 mode if it handles
+ `_Bool', `//' comments, flexible array members, `inline', signed
+ and unsigned `long long int', mixed code and declarations, named
+ initialization of structs, `restrict', `va_copy', varargs macros,
+ variable declarations in `for' loops, and variable length arrays.
+
+ After calling this macro you can check whether the C compiler has
+ been set to accept C99; if not, the shell variable
+ `ac_cv_prog_cc_c99' is set to `no'.
+
+ -- Macro: AC_C_BACKSLASH_A
+ Define `HAVE_C_BACKSLASH_A' to 1 if the C compiler understands
+ `\a'.
+
+ This macro is obsolescent, as current C compilers understand `\a'.
+ New programs need not use this macro.
+
+ -- Macro: AC_C_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE],
+ [ACTION-IF-UNKNOWN], [ACTION-IF-UNIVERSAL])
+ If words are stored with the most significant byte first (like
+ Motorola and SPARC CPUs), execute ACTION-IF-TRUE. If words are
+ stored with the least significant byte first (like Intel and VAX
+ CPUs), execute ACTION-IF-FALSE.
+
+ This macro runs a test-case if endianness cannot be determined
+ from the system header files. When cross-compiling, the test-case
+ is not run but grep'ed for some magic values. ACTION-IF-UNKNOWN
+ is executed if the latter case fails to determine the byte sex of
+ the host system.
+
+ In some cases a single run of a compiler can generate code for
+ multiple architectures. This can happen, for example, when
+ generating Mac OS X universal binary files, which work on both
+ PowerPC and Intel architectures. In this case, the different
+ variants might be for different architectures whose endiannesses
+ differ. If `configure' detects this, it executes
+ ACTION-IF-UNIVERSAL instead of ACTION-IF-UNKNOWN.
+
+ The default for ACTION-IF-TRUE is to define `WORDS_BIGENDIAN'.
+ The default for ACTION-IF-FALSE is to do nothing. The default for
+ ACTION-IF-UNKNOWN is to abort configure and tell the installer how
+ to bypass this test. And finally, the default for
+ ACTION-IF-UNIVERSAL is to ensure that `WORDS_BIGENDIAN' is defined
+ if and only if a universal build is detected and the current code
+ is big-endian; this default works only if `autoheader' is used
+ (*note autoheader Invocation::).
+
+ If you use this macro without specifying ACTION-IF-UNIVERSAL, you
+ should also use `AC_CONFIG_HEADERS'; otherwise `WORDS_BIGENDIAN'
+ may be set incorrectly for Mac OS X universal binary files.
+
+ -- Macro: AC_C_CONST
+ If the C compiler does not fully support the `const' keyword,
+ define `const' to be empty. Some C compilers that do not define
+ `__STDC__' do support `const'; some compilers that define
+ `__STDC__' do not completely support `const'. Programs can simply
+ use `const' as if every C compiler supported it; for those that
+ don't, the makefile or configuration header file defines it as
+ empty.
+
+ Occasionally installers use a C++ compiler to compile C code,
+ typically because they lack a C compiler. This causes problems
+ with `const', because C and C++ treat `const' differently. For
+ example:
+
+ const int foo;
+
+ is valid in C but not in C++. These differences unfortunately
+ cannot be papered over by defining `const' to be empty.
+
+ If `autoconf' detects this situation, it leaves `const' alone, as
+ this generally yields better results in practice. However, using a
+ C++ compiler to compile C code is not recommended or supported, and
+ installers who run into trouble in this area should get a C
+ compiler like GCC to compile their C code.
+
+ This macro caches its result in the `ac_cv_c_const' variable.
+
+ This macro is obsolescent, as current C compilers support `const'.
+ New programs need not use this macro.
+
+ -- Macro: AC_C_RESTRICT
+ If the C compiler recognizes a variant spelling for the `restrict'
+ keyword (`__restrict', `__restrict__', or `_Restrict'), then
+ define `restrict' to that; this is more likely to do the right
+ thing with compilers that support language variants where plain
+ `restrict' is not a keyword. Otherwise, if the C compiler
+ recognizes the `restrict' keyword, don't do anything. Otherwise,
+ define `restrict' to be empty. Thus, programs may simply use
+ `restrict' as if every C compiler supported it; for those that do
+ not, the makefile or configuration header defines it away.
+
+ Although support in C++ for the `restrict' keyword is not
+ required, several C++ compilers do accept the keyword. This macro
+ works for them, too.
+
+ This macro caches `no' in the `ac_cv_c_restrict' variable if
+ `restrict' is not supported, and a supported spelling otherwise.
+
+ -- Macro: AC_C_VOLATILE
+ If the C compiler does not understand the keyword `volatile',
+ define `volatile' to be empty. Programs can simply use `volatile'
+ as if every C compiler supported it; for those that do not, the
+ makefile or configuration header defines it as empty.
+
+ If the correctness of your program depends on the semantics of
+ `volatile', simply defining it to be empty does, in a sense, break
+ your code. However, given that the compiler does not support
+ `volatile', you are at its mercy anyway. At least your program
+ compiles, when it wouldn't before. *Note Volatile Objects::, for
+ more about `volatile'.
+
+ In general, the `volatile' keyword is a standard C feature, so you
+ might expect that `volatile' is available only when `__STDC__' is
+ defined. However, Ultrix 4.3's native compiler does support
+ volatile, but does not define `__STDC__'.
+
+ This macro is obsolescent, as current C compilers support
+ `volatile'. New programs need not use this macro.
+
+ -- Macro: AC_C_INLINE
+ If the C compiler supports the keyword `inline', do nothing.
+ Otherwise define `inline' to `__inline__' or `__inline' if it
+ accepts one of those, otherwise define `inline' to be empty.
+
+ -- Macro: AC_C_CHAR_UNSIGNED
+ If the C type `char' is unsigned, define `__CHAR_UNSIGNED__',
+ unless the C compiler predefines it.
+
+ These days, using this macro is not necessary. The same
+ information can be determined by this portable alternative, thus
+ avoiding the use of preprocessor macros in the namespace reserved
+ for the implementation.
+
+ #include <limits.h>
+ #if CHAR_MIN == 0
+ # define CHAR_UNSIGNED 1
+ #endif
+
+ -- Macro: AC_C_STRINGIZE
+ If the C preprocessor supports the stringizing operator, define
+ `HAVE_STRINGIZE'. The stringizing operator is `#' and is found in
+ macros such as this:
+
+ #define x(y) #y
+
+ This macro is obsolescent, as current C compilers support the
+ stringizing operator. New programs need not use this macro.
+
+ -- Macro: AC_C_FLEXIBLE_ARRAY_MEMBER
+ If the C compiler supports flexible array members, define
+ `FLEXIBLE_ARRAY_MEMBER' to nothing; otherwise define it to 1.
+ That way, a declaration like this:
+
+ struct s
+ {
+ size_t n_vals;
+ double val[FLEXIBLE_ARRAY_MEMBER];
+ };
+
+ will let applications use the "struct hack" even with compilers
+ that do not support flexible array members. To allocate and use
+ such an object, you can use code like this:
+
+ size_t i;
+ size_t n = compute_value_count ();
+ struct s *p =
+ malloc (offsetof (struct s, val)
+ + n * sizeof (double));
+ p->n_vals = n;
+ for (i = 0; i < n; i++)
+ p->val[i] = compute_value (i);
+
+ -- Macro: AC_C_VARARRAYS
+ If the C compiler supports variable-length arrays, define
+ `HAVE_C_VARARRAYS'. A variable-length array is an array of
+ automatic storage duration whose length is determined at run time,
+ when the array is declared.
+
+ -- Macro: AC_C_TYPEOF
+ If the C compiler supports GCC's `typeof' syntax either directly or
+ through a different spelling of the keyword (e.g., `__typeof__'),
+ define `HAVE_TYPEOF'. If the support is available only through a
+ different spelling, define `typeof' to that spelling.
+
+ -- Macro: AC_C_PROTOTYPES
+ If function prototypes are understood by the compiler (as
+ determined by `AC_PROG_CC'), define `PROTOTYPES' and
+ `__PROTOTYPES'. Defining `__PROTOTYPES' is for the benefit of
+ header files that cannot use macros that infringe on user name
+ space.
+
+ This macro is obsolescent, as current C compilers support
+ prototypes. New programs need not use this macro.
+
+ -- Macro: AC_PROG_GCC_TRADITIONAL
+ Add `-traditional' to output variable `CC' if using the GNU C
+ compiler and `ioctl' does not work properly without
+ `-traditional'. That usually happens when the fixed header files
+ have not been installed on an old system.
+
+ This macro is obsolescent, since current versions of the GNU C
+ compiler fix the header files automatically when installed.
+
+
+File: autoconf.info, Node: C++ Compiler, Next: Objective C Compiler, Prev: C Compiler, Up: Compilers and Preprocessors
+
+5.10.4 C++ Compiler Characteristics
+-----------------------------------
+
+ -- Macro: AC_PROG_CXX ([COMPILER-SEARCH-LIST])
+ Determine a C++ compiler to use. Check whether the environment
+ variable `CXX' or `CCC' (in that order) is set; if so, then set
+ output variable `CXX' to its value.
+
+ Otherwise, if the macro is invoked without an argument, then
+ search for a C++ compiler under the likely names (first `g++' and
+ `c++' then other names). If none of those checks succeed, then as
+ a last resort set `CXX' to `g++'.
+
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a blank-separated list of C++
+ compilers to search for. This just gives the user an opportunity
+ to specify an alternative search list for the C++ compiler. For
+ example, if you didn't like the default order, then you could
+ invoke `AC_PROG_CXX' like this:
+
+ AC_PROG_CXX([gcc cl KCC CC cxx cc++ xlC aCC c++ g++])
+
+ If using the GNU C++ compiler, set shell variable `GXX' to `yes'.
+ If output variable `CXXFLAGS' was not already set, set it to `-g
+ -O2' for the GNU C++ compiler (`-O2' on systems where G++ does not
+ accept `-g'), or `-g' for other compilers. If your package does
+ not like this default, then it is acceptable to insert the line `:
+ ${CXXFLAGS=""}' after `AC_INIT' and before `AC_PROG_CXX' to select
+ an empty default instead.
+
+
+ -- Macro: AC_PROG_CXXCPP
+ Set output variable `CXXCPP' to a command that runs the C++
+ preprocessor. If `$CXX -E' doesn't work, `/lib/cpp' is used. It
+ is portable to run `CXXCPP' only on files with a `.c', `.C',
+ `.cc', or `.cpp' extension.
+
+ Some preprocessors don't indicate missing include files by the
+ error status. For such preprocessors an internal variable is set
+ that causes other macros to check the standard error from the
+ preprocessor and consider the test failed if any warnings have
+ been reported. However, it is not known whether such broken
+ preprocessors exist for C++.
+
+ -- Macro: AC_PROG_CXX_C_O
+ Test whether the C++ compiler accepts the options `-c' and `-o'
+ simultaneously, and define `CXX_NO_MINUS_C_MINUS_O', if it does
+ not.
+
+
+File: autoconf.info, Node: Objective C Compiler, Next: Objective C++ Compiler, Prev: C++ Compiler, Up: Compilers and Preprocessors
+
+5.10.5 Objective C Compiler Characteristics
+-------------------------------------------
+
+ -- Macro: AC_PROG_OBJC ([COMPILER-SEARCH-LIST])
+ Determine an Objective C compiler to use. If `OBJC' is not already
+ set in the environment, check for Objective C compilers. Set
+ output variable `OBJC' to the name of the compiler found.
+
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a blank-separated list of Objective C
+ compilers to search for. This just gives the user an opportunity
+ to specify an alternative search list for the Objective C
+ compiler. For example, if you didn't like the default order, then
+ you could invoke `AC_PROG_OBJC' like this:
+
+ AC_PROG_OBJC([gcc objcc objc])
+
+ If using the GNU Objective C compiler, set shell variable `GOBJC'
+ to `yes'. If output variable `OBJCFLAGS' was not already set, set
+ it to `-g -O2' for the GNU Objective C compiler (`-O2' on systems
+ where `gcc' does not accept `-g'), or `-g' for other compilers.
+
+ -- Macro: AC_PROG_OBJCPP
+ Set output variable `OBJCPP' to a command that runs the Objective C
+ preprocessor. If `$OBJC -E' doesn't work, `/lib/cpp' is used.
+
+
+File: autoconf.info, Node: Objective C++ Compiler, Next: Erlang Compiler and Interpreter, Prev: Objective C Compiler, Up: Compilers and Preprocessors
+
+5.10.6 Objective C++ Compiler Characteristics
+---------------------------------------------
+
+ -- Macro: AC_PROG_OBJCXX ([COMPILER-SEARCH-LIST])
+ Determine an Objective C++ compiler to use. If `OBJCXX' is not
+ already set in the environment, check for Objective C++ compilers.
+ Set output variable `OBJCXX' to the name of the compiler found.
+
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a blank-separated list of Objective
+ C++ compilers to search for. This just gives the user an
+ opportunity to specify an alternative search list for the
+ Objective C++ compiler. For example, if you didn't like the
+ default order, then you could invoke `AC_PROG_OBJCXX' like this:
+
+ AC_PROG_OBJCXX([gcc g++ objcc++ objcxx])
+
+ If using the GNU Objective C++ compiler, set shell variable
+ `GOBJCXX' to `yes'. If output variable `OBJCXXFLAGS' was not
+ already set, set it to `-g -O2' for the GNU Objective C++ compiler
+ (`-O2' on systems where `gcc' does not accept `-g'), or `-g' for
+ other compilers.
+
+ -- Macro: AC_PROG_OBJCXXCPP
+ Set output variable `OBJCXXCPP' to a command that runs the
+ Objective C++ preprocessor. If `$OBJCXX -E' doesn't work,
+ `/lib/cpp' is used.
+
+
+File: autoconf.info, Node: Erlang Compiler and Interpreter, Next: Fortran Compiler, Prev: Objective C++ Compiler, Up: Compilers and Preprocessors
+
+5.10.7 Erlang Compiler and Interpreter Characteristics
+------------------------------------------------------
+
+Autoconf defines the following macros for determining paths to the
+essential Erlang/OTP programs:
+
+ -- Macro: AC_ERLANG_PATH_ERLC ([VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Determine an Erlang compiler to use. If `ERLC' is not already set
+ in the environment, check for `erlc'. Set output variable `ERLC'
+ to the complete path of the compiler command found. In addition,
+ if `ERLCFLAGS' is not set in the environment, set it to an empty
+ value.
+
+ The two optional arguments have the same meaning as the two last
+ arguments of macro `AC_PATH_PROG' for looking for the `erlc'
+ program. For example, to look for `erlc' only in the
+ `/usr/lib/erlang/bin' directory:
+
+ AC_ERLANG_PATH_ERLC([not found], [/usr/lib/erlang/bin])
+
+ -- Macro: AC_ERLANG_NEED_ERLC ([PATH = `$PATH'])
+ A simplified variant of the `AC_ERLANG_PATH_ERLC' macro, that
+ prints an error message and exits the `configure' script if the
+ `erlc' program is not found.
+
+ -- Macro: AC_ERLANG_PATH_ERL ([VALUE-IF-NOT-FOUND], [PATH = `$PATH'])
+ Determine an Erlang interpreter to use. If `ERL' is not already
+ set in the environment, check for `erl'. Set output variable
+ `ERL' to the complete path of the interpreter command found.
+
+ The two optional arguments have the same meaning as the two last
+ arguments of macro `AC_PATH_PROG' for looking for the `erl'
+ program. For example, to look for `erl' only in the
+ `/usr/lib/erlang/bin' directory:
+
+ AC_ERLANG_PATH_ERL([not found], [/usr/lib/erlang/bin])
+
+ -- Macro: AC_ERLANG_NEED_ERL ([PATH = `$PATH'])
+ A simplified variant of the `AC_ERLANG_PATH_ERL' macro, that
+ prints an error message and exits the `configure' script if the
+ `erl' program is not found.
+
+
+File: autoconf.info, Node: Fortran Compiler, Next: Go Compiler, Prev: Erlang Compiler and Interpreter, Up: Compilers and Preprocessors
+
+5.10.8 Fortran Compiler Characteristics
+---------------------------------------
+
+The Autoconf Fortran support is divided into two categories: legacy
+Fortran 77 macros (`F77'), and modern Fortran macros (`FC'). The
+former are intended for traditional Fortran 77 code, and have output
+variables like `F77', `FFLAGS', and `FLIBS'. The latter are for newer
+programs that can (or must) compile under the newer Fortran standards,
+and have output variables like `FC', `FCFLAGS', and `FCLIBS'.
+
+ Except for the macros `AC_FC_SRCEXT', `AC_FC_FREEFORM',
+`AC_FC_FIXEDFORM', and `AC_FC_LINE_LENGTH' (see below), the `FC' and
+`F77' macros behave almost identically, and so they are documented
+together in this section.
+
+ -- Macro: AC_PROG_F77 ([COMPILER-SEARCH-LIST])
+ Determine a Fortran 77 compiler to use. If `F77' is not already
+ set in the environment, then check for `g77' and `f77', and then
+ some other names. Set the output variable `F77' to the name of
+ the compiler found.
+
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a blank-separated list of Fortran 77
+ compilers to search for. This just gives the user an opportunity
+ to specify an alternative search list for the Fortran 77 compiler.
+ For example, if you didn't like the default order, then you could
+ invoke `AC_PROG_F77' like this:
+
+ AC_PROG_F77([fl32 f77 fort77 xlf g77 f90 xlf90])
+
+ If using `g77' (the GNU Fortran 77 compiler), then set the shell
+ variable `G77' to `yes'. If the output variable `FFLAGS' was not
+ already set in the environment, then set it to `-g -02' for `g77'
+ (or `-O2' where `g77' does not accept `-g'). Otherwise, set
+ `FFLAGS' to `-g' for all other Fortran 77 compilers.
+
+ The result of the GNU test is cached in the
+ `ac_cv_f77_compiler_gnu' variable, acceptance of `-g' in the
+ `ac_cv_prog_f77_g' variable.
+
+ -- Macro: AC_PROG_FC ([COMPILER-SEARCH-LIST], [DIALECT])
+ Determine a Fortran compiler to use. If `FC' is not already set in
+ the environment, then `dialect' is a hint to indicate what Fortran
+ dialect to search for; the default is to search for the newest
+ available dialect. Set the output variable `FC' to the name of
+ the compiler found.
+
+ By default, newer dialects are preferred over older dialects, but
+ if `dialect' is specified then older dialects are preferred
+ starting with the specified dialect. `dialect' can currently be
+ one of Fortran 77, Fortran 90, or Fortran 95. However, this is
+ only a hint of which compiler _name_ to prefer (e.g., `f90' or
+ `f95'), and no attempt is made to guarantee that a particular
+ language standard is actually supported. Thus, it is preferable
+ that you avoid the `dialect' option, and use AC_PROG_FC only for
+ code compatible with the latest Fortran standard.
+
+ This macro may, alternatively, be invoked with an optional first
+ argument which, if specified, must be a blank-separated list of
+ Fortran compilers to search for, just as in `AC_PROG_F77'.
+
+ If using `gfortran' or `g77' (the GNU Fortran compilers), then set
+ the shell variable `GFC' to `yes'. If the output variable
+ `FCFLAGS' was not already set in the environment, then set it to
+ `-g -02' for GNU `g77' (or `-O2' where `g77' does not accept
+ `-g'). Otherwise, set `FCFLAGS' to `-g' for all other Fortran
+ compilers.
+
+ The result of the GNU test is cached in the `ac_cv_fc_compiler_gnu'
+ variable, acceptance of `-g' in the `ac_cv_prog_fc_g' variable.
+
+ -- Macro: AC_PROG_F77_C_O
+ -- Macro: AC_PROG_FC_C_O
+ Test whether the Fortran compiler accepts the options `-c' and
+ `-o' simultaneously, and define `F77_NO_MINUS_C_MINUS_O' or
+ `FC_NO_MINUS_C_MINUS_O', respectively, if it does not.
+
+ The result of the test is cached in the `ac_cv_prog_f77_c_o' or
+ `ac_cv_prog_fc_c_o' variable, respectively.
+
+ The following macros check for Fortran compiler characteristics. To
+check for characteristics not listed here, use `AC_COMPILE_IFELSE'
+(*note Running the Compiler::) or `AC_RUN_IFELSE' (*note Runtime::),
+making sure to first set the current language to Fortran 77 or Fortran
+via `AC_LANG([Fortran 77])' or `AC_LANG(Fortran)' (*note Language
+Choice::).
+
+ -- Macro: AC_F77_LIBRARY_LDFLAGS
+ -- Macro: AC_FC_LIBRARY_LDFLAGS
+ Determine the linker flags (e.g., `-L' and `-l') for the "Fortran
+ intrinsic and runtime libraries" that are required to successfully
+ link a Fortran program or shared library. The output variable
+ `FLIBS' or `FCLIBS' is set to these flags (which should be
+ included after `LIBS' when linking).
+
+ This macro is intended to be used in those situations when it is
+ necessary to mix, e.g., C++ and Fortran source code in a single
+ program or shared library (*note Mixing Fortran 77 With C and C++:
+ (automake)Mixing Fortran 77 With C and C++.).
+
+ For example, if object files from a C++ and Fortran compiler must
+ be linked together, then the C++ compiler/linker must be used for
+ linking (since special C++-ish things need to happen at link time
+ like calling global constructors, instantiating templates,
+ enabling exception support, etc.).
+
+ However, the Fortran intrinsic and runtime libraries must be
+ linked in as well, but the C++ compiler/linker doesn't know by
+ default how to add these Fortran 77 libraries. Hence, this macro
+ was created to determine these Fortran libraries.
+
+ The macros `AC_F77_DUMMY_MAIN' and `AC_FC_DUMMY_MAIN' or
+ `AC_F77_MAIN' and `AC_FC_MAIN' are probably also necessary to link
+ C/C++ with Fortran; see below. Further, it is highly recommended
+ that you use `AC_CONFIG_HEADERS' (*note Configuration Headers::)
+ because the complex defines that the function wrapper macros create
+ may not work with C/C++ compiler drivers.
+
+ These macros internally compute the flag needed to verbose linking
+ output and cache it in `ac_cv_prog_f77_v' or `ac_cv_prog_fc_v'
+ variables, respectively. The computed linker flags are cached in
+ `ac_cv_f77_libs' or `ac_cv_fc_libs', respectively.
+
+ -- Macro: AC_F77_DUMMY_MAIN ([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND =
+ `AC_MSG_FAILURE'])
+ -- Macro: AC_FC_DUMMY_MAIN ([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND =
+ `AC_MSG_FAILURE'])
+ With many compilers, the Fortran libraries detected by
+ `AC_F77_LIBRARY_LDFLAGS' or `AC_FC_LIBRARY_LDFLAGS' provide their
+ own `main' entry function that initializes things like Fortran
+ I/O, and which then calls a user-provided entry function named
+ (say) `MAIN__' to run the user's program. The `AC_F77_DUMMY_MAIN'
+ and `AC_FC_DUMMY_MAIN' or `AC_F77_MAIN' and `AC_FC_MAIN' macros
+ figure out how to deal with this interaction.
+
+ When using Fortran for purely numerical functions (no I/O, etc.)
+ often one prefers to provide one's own `main' and skip the Fortran
+ library initializations. In this case, however, one may still
+ need to provide a dummy `MAIN__' routine in order to prevent
+ linking errors on some systems. `AC_F77_DUMMY_MAIN' or
+ `AC_FC_DUMMY_MAIN' detects whether any such routine is _required_
+ for linking, and what its name is; the shell variable
+ `F77_DUMMY_MAIN' or `FC_DUMMY_MAIN' holds this name, `unknown'
+ when no solution was found, and `none' when no such dummy main is
+ needed.
+
+ By default, ACTION-IF-FOUND defines `F77_DUMMY_MAIN' or
+ `FC_DUMMY_MAIN' to the name of this routine (e.g., `MAIN__') _if_
+ it is required. ACTION-IF-NOT-FOUND defaults to exiting with an
+ error.
+
+ In order to link with Fortran routines, the user's C/C++ program
+ should then include the following code to define the dummy main if
+ it is needed:
+
+ #ifdef F77_DUMMY_MAIN
+ # ifdef __cplusplus
+ extern "C"
+ # endif
+ int F77_DUMMY_MAIN () { return 1; }
+ #endif
+
+ (Replace `F77' with `FC' for Fortran instead of Fortran 77.)
+
+ Note that this macro is called automatically from `AC_F77_WRAPPERS'
+ or `AC_FC_WRAPPERS'; there is generally no need to call it
+ explicitly unless one wants to change the default actions.
+
+ The result of this macro is cached in the `ac_cv_f77_dummy_main' or
+ `ac_cv_fc_dummy_main' variable, respectively.
+
+ -- Macro: AC_F77_MAIN
+ -- Macro: AC_FC_MAIN
+ As discussed above, many Fortran libraries allow you to provide an
+ entry point called (say) `MAIN__' instead of the usual `main',
+ which is then called by a `main' function in the Fortran libraries
+ that initializes things like Fortran I/O. The `AC_F77_MAIN' and
+ `AC_FC_MAIN' macros detect whether it is _possible_ to utilize
+ such an alternate main function, and defines `F77_MAIN' and
+ `FC_MAIN' to the name of the function. (If no alternate main
+ function name is found, `F77_MAIN' and `FC_MAIN' are simply
+ defined to `main'.)
+
+ Thus, when calling Fortran routines from C that perform things
+ like I/O, one should use this macro and declare the "main"
+ function like so:
+
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ int F77_MAIN (int argc, char *argv[]);
+
+ (Again, replace `F77' with `FC' for Fortran instead of Fortran 77.)
+
+ The result of this macro is cached in the `ac_cv_f77_main' or
+ `ac_cv_fc_main' variable, respectively.
+
+ -- Macro: AC_F77_WRAPPERS
+ -- Macro: AC_FC_WRAPPERS
+ Defines C macros `F77_FUNC (name, NAME)', `FC_FUNC (name, NAME)',
+ `F77_FUNC_(name, NAME)', and `FC_FUNC_(name, NAME)' to properly
+ mangle the names of C/C++ identifiers, and identifiers with
+ underscores, respectively, so that they match the name-mangling
+ scheme used by the Fortran compiler.
+
+ Fortran is case-insensitive, and in order to achieve this the
+ Fortran compiler converts all identifiers into a canonical case
+ and format. To call a Fortran subroutine from C or to write a C
+ function that is callable from Fortran, the C program must
+ explicitly use identifiers in the format expected by the Fortran
+ compiler. In order to do this, one simply wraps all C identifiers
+ in one of the macros provided by `AC_F77_WRAPPERS' or
+ `AC_FC_WRAPPERS'. For example, suppose you have the following
+ Fortran 77 subroutine:
+
+ subroutine foobar (x, y)
+ double precision x, y
+ y = 3.14159 * x
+ return
+ end
+
+ You would then declare its prototype in C or C++ as:
+
+ #define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
+ #ifdef __cplusplus
+ extern "C" /* prevent C++ name mangling */
+ #endif
+ void FOOBAR_F77 (double *x, double *y);
+
+ Note that we pass both the lowercase and uppercase versions of the
+ function name to `F77_FUNC' so that it can select the right one.
+ Note also that all parameters to Fortran 77 routines are passed as
+ pointers (*note Mixing Fortran 77 With C and C++: (automake)Mixing
+ Fortran 77 With C and C++.).
+
+ (Replace `F77' with `FC' for Fortran instead of Fortran 77.)
+
+ Although Autoconf tries to be intelligent about detecting the
+ name-mangling scheme of the Fortran compiler, there may be Fortran
+ compilers that it doesn't support yet. In this case, the above
+ code generates a compile-time error, but some other behavior
+ (e.g., disabling Fortran-related features) can be induced by
+ checking whether `F77_FUNC' or `FC_FUNC' is defined.
+
+ Now, to call that routine from a C program, we would do something
+ like:
+
+ {
+ double x = 2.7183, y;
+ FOOBAR_F77 (&x, &y);
+ }
+
+ If the Fortran identifier contains an underscore (e.g., `foo_bar'),
+ you should use `F77_FUNC_' or `FC_FUNC_' instead of `F77_FUNC' or
+ `FC_FUNC' (with the same arguments). This is because some Fortran
+ compilers mangle names differently if they contain an underscore.
+
+ The name mangling scheme is encoded in the `ac_cv_f77_mangling' or
+ `ac_cv_fc_mangling' cache variable, respectively, and also used for
+ the `AC_F77_FUNC' and `AC_FC_FUNC' macros described below.
+
+ -- Macro: AC_F77_FUNC (NAME, [SHELLVAR])
+ -- Macro: AC_FC_FUNC (NAME, [SHELLVAR])
+ Given an identifier NAME, set the shell variable SHELLVAR to hold
+ the mangled version NAME according to the rules of the Fortran
+ linker (see also `AC_F77_WRAPPERS' or `AC_FC_WRAPPERS'). SHELLVAR
+ is optional; if it is not supplied, the shell variable is simply
+ NAME. The purpose of this macro is to give the caller a way to
+ access the name-mangling information other than through the C
+ preprocessor as above, for example, to call Fortran routines from
+ some language other than C/C++.
+
+ -- Macro: AC_FC_SRCEXT (EXT, [ACTION-IF-SUCCESS], [ACTION-IF-FAILURE =
+ `AC_MSG_FAILURE'])
+ -- Macro: AC_FC_PP_SRCEXT (EXT, [ACTION-IF-SUCCESS],
+ [ACTION-IF-FAILURE = `AC_MSG_FAILURE'])
+ By default, the `FC' macros perform their tests using a `.f'
+ extension for source-code files. Some compilers, however, only
+ enable newer language features for appropriately named files,
+ e.g., Fortran 90 features only for `.f90' files, or preprocessing
+ only with `.F' files or maybe other upper-case extensions. On the
+ other hand, some other compilers expect all source files to end in
+ `.f' and require special flags to support other file name
+ extensions. The `AC_FC_SRCEXT' and `AC_FC_PP_SRCEXT' macros deal
+ with these issues.
+
+ The `AC_FC_SRCEXT' macro tries to get the `FC' compiler to accept
+ files ending with the extension `.EXT' (i.e., EXT does _not_
+ contain the dot). If any special compiler flags are needed for
+ this, it stores them in the output variable `FCFLAGS_EXT'. This
+ extension and these flags are then used for all subsequent `FC'
+ tests (until `AC_FC_SRCEXT' or `AC_FC_PP_SRCEXT' is called another
+ time).
+
+ For example, you would use `AC_FC_SRCEXT(f90)' to employ the
+ `.f90' extension in future tests, and it would set the
+ `FCFLAGS_f90' output variable with any extra flags that are needed
+ to compile such files.
+
+ Similarly, the `AC_FC_PP_SRCEXT' macro tries to get the `FC'
+ compiler to preprocess and compile files with the extension
+ `.EXT'. When both `fpp' and `cpp' style preprocessing are
+ provided, the former is preferred, as the latter may treat
+ continuation lines, `//' tokens, and white space differently from
+ what some Fortran dialects expect. Conversely, if you do not want
+ files to be preprocessed, use only lower-case characters in the
+ file name extension. Like with `AC_FC_SRCEXT(f90)', any needed
+ flags are stored in the `FCFLAGS_EXT' variable.
+
+ The `FCFLAGS_EXT' flags can _not_ be simply absorbed into
+ `FCFLAGS', for two reasons based on the limitations of some
+ compilers. First, only one `FCFLAGS_EXT' can be used at a time,
+ so files with different extensions must be compiled separately.
+ Second, `FCFLAGS_EXT' must appear _immediately_ before the
+ source-code file name when compiling. So, continuing the example
+ above, you might compile a `foo.f90' file in your makefile with the
+ command:
+
+ foo.o: foo.f90
+ $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) '$(srcdir)/foo.f90'
+
+ If `AC_FC_SRCEXT' or `AC_FC_PP_SRCEXT' succeeds in compiling files
+ with the EXT extension, it calls ACTION-IF-SUCCESS (defaults to
+ nothing). If it fails, and cannot find a way to make the `FC'
+ compiler accept such files, it calls ACTION-IF-FAILURE (defaults
+ to exiting with an error message).
+
+ The `AC_FC_SRCEXT' and `AC_FC_PP_SRCEXT' macros cache their
+ results in `ac_cv_fc_srcext_EXT' and `ac_cv_fc_pp_srcext_EXT'
+ variables, respectively.
+
+ -- Macro: AC_FC_PP_DEFINE ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE =
+ `AC_MSG_FAILURE'])
+ Find a flag to specify defines for preprocessed Fortran. Not all
+ Fortran compilers use `-D'. Substitute `FC_DEFINE' with the
+ result and call ACTION-IF-SUCCESS (defaults to nothing) if
+ successful, and ACTION-IF-FAILURE (defaults to failing with an
+ error message) if not.
+
+ This macro calls `AC_FC_PP_SRCEXT([F])' in order to learn how to
+ preprocess a `conftest.F' file, but restores a previously used
+ Fortran source file extension afterwards again.
+
+ The result of this test is cached in the `ac_cv_fc_pp_define'
+ variable.
+
+ -- Macro: AC_FC_FREEFORM ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE =
+ `AC_MSG_FAILURE'])
+ Try to ensure that the Fortran compiler (`$FC') allows free-format
+ source code (as opposed to the older fixed-format style from
+ Fortran 77). If necessary, it may add some additional flags to
+ `FCFLAGS'.
+
+ This macro is most important if you are using the default `.f'
+ extension, since many compilers interpret this extension as
+ indicating fixed-format source unless an additional flag is
+ supplied. If you specify a different extension with
+ `AC_FC_SRCEXT', such as `.f90', then `AC_FC_FREEFORM' ordinarily
+ succeeds without modifying `FCFLAGS'. For extensions which the
+ compiler does not know about, the flag set by the `AC_FC_SRCEXT'
+ macro might let the compiler assume Fortran 77 by default, however.
+
+ If `AC_FC_FREEFORM' succeeds in compiling free-form source, it
+ calls ACTION-IF-SUCCESS (defaults to nothing). If it fails, it
+ calls ACTION-IF-FAILURE (defaults to exiting with an error
+ message).
+
+ The result of this test, or `none' or `unknown', is cached in the
+ `ac_cv_fc_freeform' variable.
+
+ -- Macro: AC_FC_FIXEDFORM ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE =
+ `AC_MSG_FAILURE'])
+ Try to ensure that the Fortran compiler (`$FC') allows the old
+ fixed-format source code (as opposed to free-format style). If
+ necessary, it may add some additional flags to `FCFLAGS'.
+
+ This macro is needed for some compilers alias names like `xlf95'
+ which assume free-form source code by default, and in case you
+ want to use fixed-form source with an extension like `.f90' which
+ many compilers interpret as free-form by default. If you specify
+ a different extension with `AC_FC_SRCEXT', such as `.f', then
+ `AC_FC_FIXEDFORM' ordinarily succeeds without modifying `FCFLAGS'.
+
+ If `AC_FC_FIXEDFORM' succeeds in compiling fixed-form source, it
+ calls ACTION-IF-SUCCESS (defaults to nothing). If it fails, it
+ calls ACTION-IF-FAILURE (defaults to exiting with an error
+ message).
+
+ The result of this test, or `none' or `unknown', is cached in the
+ `ac_cv_fc_fixedform' variable.
+
+ -- Macro: AC_FC_LINE_LENGTH ([LENGTH], [ACTION-IF-SUCCESS],
+ [ACTION-IF-FAILURE = `AC_MSG_FAILURE'])
+ Try to ensure that the Fortran compiler (`$FC') accepts long source
+ code lines. The LENGTH argument may be given as 80, 132, or
+ unlimited, and defaults to 132. Note that line lengths above 254
+ columns are not portable, and some compilers do not accept more
+ than 132 columns at least for fixed format source. If necessary,
+ it may add some additional flags to `FCFLAGS'.
+
+ If `AC_FC_LINE_LENGTH' succeeds in compiling fixed-form source, it
+ calls ACTION-IF-SUCCESS (defaults to nothing). If it fails, it
+ calls ACTION-IF-FAILURE (defaults to exiting with an error
+ message).
+
+ The result of this test, or `none' or `unknown', is cached in the
+ `ac_cv_fc_line_length' variable.
+
+ -- Macro: AC_FC_CHECK_BOUNDS ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE
+ = `AC_MSG_FAILURE'])
+ The `AC_FC_CHECK_BOUNDS' macro tries to enable array bounds
+ checking in the Fortran compiler. If successful, the
+ ACTION-IF-SUCCESS is called and any needed flags are added to
+ `FCFLAGS'. Otherwise, ACTION-IF-FAILURE is called, which defaults
+ to failing with an error message. The macro currently requires
+ Fortran 90 or a newer dialect.
+
+ The result of the macro is cached in the `ac_cv_fc_check_bounds'
+ variable.
+
+ -- Macro: AC_F77_IMPLICIT_NONE ([ACTION-IF-SUCCESS],
+ [ACTION-IF-FAILURE = `AC_MSG_FAILURE'])
+ -- Macro: AC_FC_IMPLICIT_NONE ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE
+ = `AC_MSG_FAILURE'])
+ Try to disallow implicit declarations in the Fortran compiler. If
+ successful, ACTION-IF-SUCCESS is called and any needed flags are
+ added to `FFLAGS' or `FCFLAGS', respectively. Otherwise,
+ ACTION-IF-FAILURE is called, which defaults to failing with an
+ error message.
+
+ The result of these macros are cached in the
+ `ac_cv_f77_implicit_none' and `ac_cv_fc_implicit_none' variables,
+ respectively.
+
+ -- Macro: AC_FC_MODULE_EXTENSION
+ Find the Fortran 90 module file name extension. Most Fortran 90
+ compilers store module information in files separate from the
+ object files. The module files are usually named after the name
+ of the module rather than the source file name, with characters
+ possibly turned to upper case, plus an extension, often `.mod'.
+
+ Not all compilers use module files at all, or by default. The Cray
+ Fortran compiler requires `-e m' in order to store and search
+ module information in `.mod' files rather than in object files.
+ Likewise, the Fujitsu Fortran compilers uses the `-Am' option to
+ indicate how module information is stored.
+
+ The `AC_FC_MODULE_EXTENSION' macro computes the module extension
+ without the leading dot, and stores that in the `FC_MODEXT'
+ variable. If the compiler does not produce module files, or the
+ extension cannot be determined, `FC_MODEXT' is empty. Typically,
+ the result of this macro may be used in cleanup `make' rules as
+ follows:
+
+ clean-modules:
+ -test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT)
+
+ The extension, or `unknown', is cached in the
+ `ac_cv_fc_module_ext' variable.
+
+ -- Macro: AC_FC_MODULE_FLAG ([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE =
+ `AC_MSG_FAILURE'])
+ Find the compiler flag to include Fortran 90 module information
+ from another directory, and store that in the `FC_MODINC' variable.
+ Call ACTION-IF-SUCCESS (defaults to nothing) if successful, and
+ set `FC_MODINC' to empty and call ACTION-IF-FAILURE (defaults to
+ exiting with an error message) if not.
+
+ Most Fortran 90 compilers provide a way to specify module
+ directories. Some have separate flags for the directory to write
+ module files to, and directories to search them in, whereas others
+ only allow writing to the current directory or to the first
+ directory specified in the include path. Further, with some
+ compilers, the module search path and the preprocessor search path
+ can only be modified with the same flag. Thus, for portability,
+ write module files to the current directory only and list that as
+ first directory in the search path.
+
+ There may be no whitespace between `FC_MODINC' and the following
+ directory name, but `FC_MODINC' may contain trailing white space.
+ For example, if you use Automake and would like to search `../lib'
+ for module files, you can use the following:
+
+ AM_FCFLAGS = $(FC_MODINC). $(FC_MODINC)../lib
+
+ Inside `configure' tests, you can use:
+
+ if test -n "$FC_MODINC"; then
+ FCFLAGS="$FCFLAGS $FC_MODINC. $FC_MODINC../lib"
+ fi
+
+ The flag is cached in the `ac_cv_fc_module_flag' variable. The
+ substituted value of `FC_MODINC' may refer to the `ac_empty' dummy
+ placeholder empty variable, to avoid losing the significant
+ trailing whitespace in a `Makefile'.
+
+ -- Macro: AC_FC_MODULE_OUTPUT_FLAG ([ACTION-IF-SUCCESS],
+ [ACTION-IF-FAILURE = `AC_MSG_FAILURE'])
+ Find the compiler flag to write Fortran 90 module information to
+ another directory, and store that in the `FC_MODOUT' variable.
+ Call ACTION-IF-SUCCESS (defaults to nothing) if successful, and
+ set `FC_MODOUT' to empty and call ACTION-IF-FAILURE (defaults to
+ exiting with an error message) if not.
+
+ Not all Fortran 90 compilers write module files, and of those that
+ do, not all allow writing to a directory other than the current
+ one, nor do all have separate flags for writing and reading; see
+ the description of `AC_FC_MODULE_FLAG' above. If you need to be
+ able to write to another directory, for maximum portability use
+ `FC_MODOUT' before any `FC_MODINC' and include both the current
+ directory and the one you write to in the search path:
+
+ AM_FCFLAGS = $(FC_MODOUT)../mod $(FC_MODINC)../mod $(FC_MODINC). ...
+
+ The flag is cached in the `ac_cv_fc_module_output_flag' variable.
+ The substituted value of `FC_MODOUT' may refer to the `ac_empty'
+ dummy placeholder empty variable, to avoid losing the significant
+ trailing whitespace in a `Makefile'.
+
+
+File: autoconf.info, Node: Go Compiler, Prev: Fortran Compiler, Up: Compilers and Preprocessors
+
+5.10.9 Go Compiler Characteristics
+----------------------------------
+
+Autoconf provides basic support for the Go programming language when
+using the `gccgo' compiler (there is currently no support for the `6g'
+and `8g' compilers).
+
+ -- Macro: AC_PROG_GO ([COMPILER-SEARCH-LIST])
+ Find the Go compiler to use. Check whether the environment
+ variable `GOC' is set; if so, then set output variable `GOC' to its
+ value.
+
+ Otherwise, if the macro is invoked without an argument, then
+ search for a Go compiler named `gccgo'. If it is not found, then
+ as a last resort set `GOC' to `gccgo'.
+
+ This macro may be invoked with an optional first argument which, if
+ specified, must be a blank-separated list of Go compilers to
+ search for.
+
+ If output variable `GOFLAGS' was not already set, set it to `-g
+ -O2'. If your package does not like this default, `GOFLAGS' may
+ be set before `AC_PROG_GO'.
+
+
+File: autoconf.info, Node: System Services, Next: Posix Variants, Prev: Compilers and Preprocessors, Up: Existing Tests
+
+5.11 System Services
+====================
+
+The following macros check for operating system services or
+capabilities.
+
+ -- Macro: AC_PATH_X
+ Try to locate the X Window System include files and libraries. If
+ the user gave the command line options `--x-includes=DIR' and
+ `--x-libraries=DIR', use those directories.
+
+ If either or both were not given, get the missing values by running
+ `xmkmf' (or an executable pointed to by the `XMKMF' environment
+ variable) on a trivial `Imakefile' and examining the makefile that
+ it produces. Setting `XMKMF' to `false' disables this method.
+
+ If this method fails to find the X Window System, `configure'
+ looks for the files in several directories where they often reside.
+ If either method is successful, set the shell variables
+ `x_includes' and `x_libraries' to their locations, unless they are
+ in directories the compiler searches by default.
+
+ If both methods fail, or the user gave the command line option
+ `--without-x', set the shell variable `no_x' to `yes'; otherwise
+ set it to the empty string.
+
+ -- Macro: AC_PATH_XTRA
+ An enhanced version of `AC_PATH_X'. It adds the C compiler flags
+ that X needs to output variable `X_CFLAGS', and the X linker flags
+ to `X_LIBS'. Define `X_DISPLAY_MISSING' if X is not available.
+
+ This macro also checks for special libraries that some systems
+ need in order to compile X programs. It adds any that the system
+ needs to output variable `X_EXTRA_LIBS'. And it checks for
+ special X11R6 libraries that need to be linked with before
+ `-lX11', and adds any found to the output variable `X_PRE_LIBS'.
+
+
+ -- Macro: AC_SYS_INTERPRETER
+ Check whether the system supports starting scripts with a line of
+ the form `#!/bin/sh' to select the interpreter to use for the
+ script. After running this macro, shell code in `configure.ac'
+ can check the shell variable `interpval'; it is set to `yes' if
+ the system supports `#!', `no' if not.
+
+ -- Macro: AC_SYS_LARGEFILE
+ Arrange for 64-bit file offsets, known as large-file support
+ (http://www.unix-systems.org/version2/whatsnew/lfs20mar.html). On
+ some hosts, one must use special compiler options to build
+ programs that can access large files. Append any such options to
+ the output variable `CC'. Define `_FILE_OFFSET_BITS' and
+ `_LARGE_FILES' if necessary.
+
+ Large-file support can be disabled by configuring with the
+ `--disable-largefile' option.
+
+ If you use this macro, check that your program works even when
+ `off_t' is wider than `long int', since this is common when
+ large-file support is enabled. For example, it is not correct to
+ print an arbitrary `off_t' value `X' with `printf ("%ld", (long
+ int) X)'.
+
+ The LFS introduced the `fseeko' and `ftello' functions to replace
+ their C counterparts `fseek' and `ftell' that do not use `off_t'.
+ Take care to use `AC_FUNC_FSEEKO' to make their prototypes
+ available when using them and large-file support is enabled.
+
+ -- Macro: AC_SYS_LONG_FILE_NAMES
+ If the system supports file names longer than 14 characters, define
+ `HAVE_LONG_FILE_NAMES'.
+
+ -- Macro: AC_SYS_POSIX_TERMIOS
+ Check to see if the Posix termios headers and functions are
+ available on the system. If so, set the shell variable
+ `ac_cv_sys_posix_termios' to `yes'. If not, set the variable to
+ `no'.
+
+
+File: autoconf.info, Node: Posix Variants, Next: Erlang Libraries, Prev: System Services, Up: Existing Tests
+
+5.12 Posix Variants
+===================
+
+The following macro makes it possible to use features of Posix that are
+extensions to C, as well as platform extensions not defined by Posix.
+
+ -- Macro: AC_USE_SYSTEM_EXTENSIONS
+ This macro was introduced in Autoconf 2.60. If possible, enable
+ extensions to C or Posix on hosts that normally disable the
+ extensions, typically due to standards-conformance namespace
+ issues. This should be called before any macros that run the C
+ compiler. The following preprocessor macros are defined where
+ appropriate:
+
+ `_GNU_SOURCE'
+ Enable extensions on GNU/Linux.
+
+ `__EXTENSIONS__'
+ Enable general extensions on Solaris.
+
+ `_POSIX_PTHREAD_SEMANTICS'
+ Enable threading extensions on Solaris.
+
+ `_TANDEM_SOURCE'
+ Enable extensions for the HP NonStop platform.
+
+ `_ALL_SOURCE'
+ Enable extensions for AIX 3, and for Interix.
+
+ `_POSIX_SOURCE'
+ Enable Posix functions for Minix.
+
+ `_POSIX_1_SOURCE'
+ Enable additional Posix functions for Minix.
+
+ `_MINIX'
+ Identify Minix platform. This particular preprocessor macro
+ is obsolescent, and may be removed in a future release of
+ Autoconf.
+
+
+File: autoconf.info, Node: Erlang Libraries, Prev: Posix Variants, Up: Existing Tests
+
+5.13 Erlang Libraries
+=====================
+
+The following macros check for an installation of Erlang/OTP, and for
+the presence of certain Erlang libraries. All those macros require the
+configuration of an Erlang interpreter and an Erlang compiler (*note
+Erlang Compiler and Interpreter::).
+
+ -- Macro: AC_ERLANG_SUBST_ERTS_VER
+ Set the output variable `ERLANG_ERTS_VER' to the version of the
+ Erlang runtime system (as returned by Erlang's
+ `erlang:system_info(version)' function). The result of this test
+ is cached if caching is enabled when running `configure'. The
+ `ERLANG_ERTS_VER' variable is not intended to be used for testing
+ for features of specific ERTS versions, but to be used for
+ substituting the ERTS version in Erlang/OTP release resource files
+ (`.rel' files), as shown below.
+
+ -- Macro: AC_ERLANG_SUBST_ROOT_DIR
+ Set the output variable `ERLANG_ROOT_DIR' to the path to the base
+ directory in which Erlang/OTP is installed (as returned by Erlang's
+ `code:root_dir/0' function). The result of this test is cached if
+ caching is enabled when running `configure'.
+
+ -- Macro: AC_ERLANG_SUBST_LIB_DIR
+ Set the output variable `ERLANG_LIB_DIR' to the path of the library
+ directory of Erlang/OTP (as returned by Erlang's `code:lib_dir/0'
+ function), which subdirectories each contain an installed
+ Erlang/OTP library. The result of this test is cached if caching
+ is enabled when running `configure'.
+
+ -- Macro: AC_ERLANG_CHECK_LIB (LIBRARY, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ Test whether the Erlang/OTP library LIBRARY is installed by
+ calling Erlang's `code:lib_dir/1' function. The result of this
+ test is cached if caching is enabled when running `configure'.
+ ACTION-IF-FOUND is a list of shell commands to run if the library
+ is installed; ACTION-IF-NOT-FOUND is a list of shell commands to
+ run if it is not. Additionally, if the library is installed, the
+ output variable `ERLANG_LIB_DIR_LIBRARY' is set to the path to the
+ library installation directory, and the output variable
+ `ERLANG_LIB_VER_LIBRARY' is set to the version number that is part
+ of the subdirectory name, if it is in the standard form
+ (`LIBRARY-VERSION'). If the directory name does not have a
+ version part, `ERLANG_LIB_VER_LIBRARY' is set to the empty string.
+ If the library is not installed, `ERLANG_LIB_DIR_LIBRARY' and
+ `ERLANG_LIB_VER_LIBRARY' are set to `"not found"'. For example,
+ to check if library `stdlib' is installed:
+
+ AC_ERLANG_CHECK_LIB([stdlib],
+ [echo "stdlib version \"$ERLANG_LIB_VER_stdlib\""
+ echo "is installed in \"$ERLANG_LIB_DIR_stdlib\""],
+ [AC_MSG_ERROR([stdlib was not found!])])
+
+ The `ERLANG_LIB_VER_LIBRARY' variables (set by
+ `AC_ERLANG_CHECK_LIB') and the `ERLANG_ERTS_VER' variable (set by
+ `AC_ERLANG_SUBST_ERTS_VER') are not intended to be used for
+ testing for features of specific versions of libraries or of the
+ Erlang runtime system. Those variables are intended to be
+ substituted in Erlang release resource files (`.rel' files). For
+ instance, to generate a `example.rel' file for an application
+ depending on the `stdlib' library, `configure.ac' could contain:
+
+ AC_ERLANG_SUBST_ERTS_VER
+ AC_ERLANG_CHECK_LIB([stdlib],
+ [],
+ [AC_MSG_ERROR([stdlib was not found!])])
+ AC_CONFIG_FILES([example.rel])
+
+ The `example.rel.in' file used to generate `example.rel' should
+ contain:
+
+ {release,
+ {"@PACKAGE@", "@VERSION@"},
+ {erts, "@ERLANG_ERTS_VER@"},
+ [{stdlib, "@ERLANG_LIB_VER_stdlib@"},
+ {@PACKAGE@, "@VERSION@"}]}.
+
+ In addition to the above macros, which test installed Erlang
+libraries, the following macros determine the paths to the directories
+into which newly built Erlang libraries are to be installed:
+
+ -- Macro: AC_ERLANG_SUBST_INSTALL_LIB_DIR
+ Set the `ERLANG_INSTALL_LIB_DIR' output variable to the directory
+ into which every built Erlang library should be installed in a
+ separate subdirectory. If this variable is not set in the
+ environment when `configure' runs, its default value is
+ `${libdir}/erlang/lib'.
+
+ -- Macro: AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR (LIBRARY, VERSION)
+ Set the `ERLANG_INSTALL_LIB_DIR_LIBRARY' output variable to the
+ directory into which the built Erlang library LIBRARY version
+ VERSION should be installed. If this variable is not set in the
+ environment when `configure' runs, its default value is
+ `$ERLANG_INSTALL_LIB_DIR/LIBRARY-VERSION', the value of the
+ `ERLANG_INSTALL_LIB_DIR' variable being set by the
+ `AC_ERLANG_SUBST_INSTALL_LIB_DIR' macro.
+
+
+File: autoconf.info, Node: Writing Tests, Next: Results, Prev: Existing Tests, Up: Top
+
+6 Writing Tests
+***************
+
+If the existing feature tests don't do something you need, you have to
+write new ones. These macros are the building blocks. They provide
+ways for other macros to check whether various kinds of features are
+available and report the results.
+
+ This chapter contains some suggestions and some of the reasons why
+the existing tests are written the way they are. You can also learn a
+lot about how to write Autoconf tests by looking at the existing ones.
+If something goes wrong in one or more of the Autoconf tests, this
+information can help you understand the assumptions behind them, which
+might help you figure out how to best solve the problem.
+
+ These macros check the output of the compiler system of the current
+language (*note Language Choice::). They do not cache the results of
+their tests for future use (*note Caching Results::), because they don't
+know enough about the information they are checking for to generate a
+cache variable name. They also do not print any messages, for the same
+reason. The checks for particular kinds of features call these macros
+and do cache their results and print messages about what they're
+checking for.
+
+ When you write a feature test that could be applicable to more than
+one software package, the best thing to do is encapsulate it in a new
+macro. *Note Writing Autoconf Macros::, for how to do that.
+
+* Menu:
+
+* Language Choice:: Selecting which language to use for testing
+* Writing Test Programs:: Forging source files for compilers
+* Running the Preprocessor:: Detecting preprocessor symbols
+* Running the Compiler:: Detecting language or header features
+* Running the Linker:: Detecting library features
+* Runtime:: Testing for runtime features
+* Systemology:: A zoology of operating systems
+* Multiple Cases:: Tests for several possible values
+
+
+File: autoconf.info, Node: Language Choice, Next: Writing Test Programs, Up: Writing Tests
+
+6.1 Language Choice
+===================
+
+Autoconf-generated `configure' scripts check for the C compiler and its
+features by default. Packages that use other programming languages
+(maybe more than one, e.g., C and C++) need to test features of the
+compilers for the respective languages. The following macros determine
+which programming language is used in the subsequent tests in
+`configure.ac'.
+
+ -- Macro: AC_LANG (LANGUAGE)
+ Do compilation tests using the compiler, preprocessor, and file
+ extensions for the specified LANGUAGE.
+
+ Supported languages are:
+
+ `C'
+ Do compilation tests using `CC' and `CPP' and use extension
+ `.c' for test programs. Use compilation flags: `CPPFLAGS'
+ with `CPP', and both `CPPFLAGS' and `CFLAGS' with `CC'.
+
+ `C++'
+ Do compilation tests using `CXX' and `CXXCPP' and use
+ extension `.C' for test programs. Use compilation flags:
+ `CPPFLAGS' with `CXXCPP', and both `CPPFLAGS' and `CXXFLAGS'
+ with `CXX'.
+
+ `Fortran 77'
+ Do compilation tests using `F77' and use extension `.f' for
+ test programs. Use compilation flags: `FFLAGS'.
+
+ `Fortran'
+ Do compilation tests using `FC' and use extension `.f' (or
+ whatever has been set by `AC_FC_SRCEXT') for test programs.
+ Use compilation flags: `FCFLAGS'.
+
+ `Erlang'
+ Compile and execute tests using `ERLC' and `ERL' and use
+ extension `.erl' for test Erlang modules. Use compilation
+ flags: `ERLCFLAGS'.
+
+ `Objective C'
+ Do compilation tests using `OBJC' and `OBJCPP' and use
+ extension `.m' for test programs. Use compilation flags:
+ `CPPFLAGS' with `OBJCPP', and both `CPPFLAGS' and `OBJCFLAGS'
+ with `OBJC'.
+
+ `Objective C++'
+ Do compilation tests using `OBJCXX' and `OBJCXXCPP' and use
+ extension `.mm' for test programs. Use compilation flags:
+ `CPPFLAGS' with `OBJCXXCPP', and both `CPPFLAGS' and
+ `OBJCXXFLAGS' with `OBJCXX'.
+
+ `Go'
+ Do compilation tests using `GOC' and use extension `.go' for
+ test programs. Use compilation flags `GOFLAGS'.
+
+ -- Macro: AC_LANG_PUSH (LANGUAGE)
+ Remember the current language (as set by `AC_LANG') on a stack, and
+ then select the LANGUAGE. Use this macro and `AC_LANG_POP' in
+ macros that need to temporarily switch to a particular language.
+
+ -- Macro: AC_LANG_POP ([LANGUAGE])
+ Select the language that is saved on the top of the stack, as set
+ by `AC_LANG_PUSH', and remove it from the stack.
+
+ If given, LANGUAGE specifies the language we just _quit_. It is a
+ good idea to specify it when it's known (which should be the
+ case...), since Autoconf detects inconsistencies.
+
+ AC_LANG_PUSH([Fortran 77])
+ # Perform some tests on Fortran 77.
+ # ...
+ AC_LANG_POP([Fortran 77])
+
+ -- Macro: AC_LANG_ASSERT (LANGUAGE)
+ Check statically that the current language is LANGUAGE. You
+ should use this in your language specific macros to avoid that
+ they be called with an inappropriate language.
+
+ This macro runs only at `autoconf' time, and incurs no cost at
+ `configure' time. Sadly enough and because Autoconf is a two
+ layer language (1), the macros `AC_LANG_PUSH' and `AC_LANG_POP'
+ cannot be "optimizing", therefore as much as possible you ought to
+ avoid using them to wrap your code, rather, require from the user
+ to run the macro with a correct current language, and check it
+ with `AC_LANG_ASSERT'. And anyway, that may help the user
+ understand she is running a Fortran macro while expecting a result
+ about her Fortran 77 compiler...
+
+ -- Macro: AC_REQUIRE_CPP
+ Ensure that whichever preprocessor would currently be used for
+ tests has been found. Calls `AC_REQUIRE' (*note Prerequisite
+ Macros::) with an argument of either `AC_PROG_CPP' or
+ `AC_PROG_CXXCPP', depending on which language is current.
+
+ ---------- Footnotes ----------
+
+ (1) Because M4 is not aware of Sh code, especially conditionals,
+some optimizations that look nice statically may produce incorrect
+results at runtime.
+
+
+File: autoconf.info, Node: Writing Test Programs, Next: Running the Preprocessor, Prev: Language Choice, Up: Writing Tests
+
+6.2 Writing Test Programs
+=========================
+
+Autoconf tests follow a common scheme: feed some program with some
+input, and most of the time, feed a compiler with some source file.
+This section is dedicated to these source samples.
+
+* Menu:
+
+* Guidelines:: General rules for writing test programs
+* Test Functions:: Avoiding pitfalls in test programs
+* Generating Sources:: Source program boilerplate
+
+
+File: autoconf.info, Node: Guidelines, Next: Test Functions, Up: Writing Test Programs
+
+6.2.1 Guidelines for Test Programs
+----------------------------------
+
+The most important rule to follow when writing testing samples is:
+
+ _Look for realism._
+
+ This motto means that testing samples must be written with the same
+strictness as real programs are written. In particular, you should
+avoid "shortcuts" and simplifications.
+
+ Don't just play with the preprocessor if you want to prepare a
+compilation. For instance, using `cpp' to check whether a header is
+functional might let your `configure' accept a header which causes some
+_compiler_ error. Do not hesitate to check a header with other headers
+included before, especially required headers.
+
+ Make sure the symbols you use are properly defined, i.e., refrain
+from simply declaring a function yourself instead of including the
+proper header.
+
+ Test programs should not write to standard output. They should exit
+with status 0 if the test succeeds, and with status 1 otherwise, so
+that success can be distinguished easily from a core dump or other
+failure; segmentation violations and other failures produce a nonzero
+exit status. Unless you arrange for `exit' to be declared, test
+programs should `return', not `exit', from `main', because on many
+systems `exit' is not declared by default.
+
+ Test programs can use `#if' or `#ifdef' to check the values of
+preprocessor macros defined by tests that have already run. For
+example, if you call `AC_HEADER_STDBOOL', then later on in
+`configure.ac' you can have a test program that includes `stdbool.h'
+conditionally:
+
+ #ifdef HAVE_STDBOOL_H
+ # include <stdbool.h>
+ #endif
+
+ Both `#if HAVE_STDBOOL_H' and `#ifdef HAVE_STDBOOL_H' will work with
+any standard C compiler. Some developers prefer `#if' because it is
+easier to read, while others prefer `#ifdef' because it avoids
+diagnostics with picky compilers like GCC with the `-Wundef' option.
+
+ If a test program needs to use or create a data file, give it a name
+that starts with `conftest', such as `conftest.data'. The `configure'
+script cleans up by running `rm -f -r conftest*' after running test
+programs and if the script is interrupted.
+
+
+File: autoconf.info, Node: Test Functions, Next: Generating Sources, Prev: Guidelines, Up: Writing Test Programs
+
+6.2.2 Test Functions
+--------------------
+
+These days it's safe to assume support for function prototypes
+(introduced in C89).
+
+ Functions that test programs declare should also be conditionalized
+for C++, which requires `extern "C"' prototypes. Make sure to not
+include any header files containing clashing prototypes.
+
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ void *valloc (size_t);
+
+ If a test program calls a function with invalid parameters (just to
+see whether it exists), organize the program to ensure that it never
+invokes that function. You can do this by calling it in another
+function that is never invoked. You can't do it by putting it after a
+call to `exit', because GCC version 2 knows that `exit' never returns
+and optimizes out any code that follows it in the same block.
+
+ If you include any header files, be sure to call the functions
+relevant to them with the correct number of arguments, even if they are
+just 0, to avoid compilation errors due to prototypes. GCC version 2
+has internal prototypes for several functions that it automatically
+inlines; for example, `memcpy'. To avoid errors when checking for
+them, either pass them the correct number of arguments or redeclare them
+with a different return type (such as `char').
+
+
+File: autoconf.info, Node: Generating Sources, Prev: Test Functions, Up: Writing Test Programs
+
+6.2.3 Generating Sources
+------------------------
+
+Autoconf provides a set of macros that can be used to generate test
+source files. They are written to be language generic, i.e., they
+actually depend on the current language (*note Language Choice::) to
+"format" the output properly.
+
+ -- Macro: AC_LANG_CONFTEST (SOURCE)
+ Save the SOURCE text in the current test source file:
+ `conftest.EXTENSION' where the EXTENSION depends on the current
+ language. As of Autoconf 2.63b, the source file also contains the
+ results of all of the `AC_DEFINE' performed so far.
+
+ Note that the SOURCE is evaluated exactly once, like regular
+ Autoconf macro arguments, and therefore (i) you may pass a macro
+ invocation, (ii) if not, be sure to double quote if needed.
+
+ This macro issues a warning during `autoconf' processing if SOURCE
+ does not include an expansion of the macro
+ `AC_LANG_DEFINES_PROVIDED' (note that both `AC_LANG_SOURCE' and
+ `AC_LANG_PROGRAM' call this macro, and thus avoid the warning).
+
+ This macro is seldom called directly, but is used under the hood
+ by more common macros such as `AC_COMPILE_IFELSE' and
+ `AC_RUN_IFELSE'.
+
+ -- Macro: AC_LANG_DEFINES_PROVIDED
+ This macro is called as a witness that the file
+ `conftest.EXTENSION' appropriate for the current language is
+ complete, including all previously determined results from
+ `AC_DEFINE'. This macro is seldom called directly, but exists if
+ you have a compelling reason to write a conftest file without using
+ `AC_LANG_SOURCE', yet still want to avoid a syntax warning from
+ `AC_LANG_CONFTEST'.
+
+ -- Macro: AC_LANG_SOURCE (SOURCE)
+ Expands into the SOURCE, with the definition of all the
+ `AC_DEFINE' performed so far. This macro includes an expansion of
+ `AC_LANG_DEFINES_PROVIDED'.
+
+ In many cases, you may find it more convenient to use the wrapper
+ `AC_LANG_PROGRAM'.
+
+ For instance, executing (observe the double quotation!):
+
+ AC_INIT([Hello], [1.0], [bug-hello@example.org], [],
+ [http://www.example.org/])
+ AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+ AC_LANG([C])
+ AC_LANG_CONFTEST(
+ [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
+ gcc -E -dD conftest.c
+
+on a system with `gcc' installed, results in:
+
+ ...
+ # 1 "conftest.c"
+
+ #define PACKAGE_NAME "Hello"
+ #define PACKAGE_TARNAME "hello"
+ #define PACKAGE_VERSION "1.0"
+ #define PACKAGE_STRING "Hello 1.0"
+ #define PACKAGE_BUGREPORT "bug-hello@example.org"
+ #define PACKAGE_URL "http://www.example.org/"
+ #define HELLO_WORLD "Hello, World\n"
+
+ const char hw[] = "Hello, World\n";
+
+ When the test language is Fortran, Erlang, or Go, the `AC_DEFINE'
+definitions are not automatically translated into constants in the
+source code by this macro.
+
+ -- Macro: AC_LANG_PROGRAM (PROLOGUE, BODY)
+ Expands into a source file which consists of the PROLOGUE, and
+ then BODY as body of the main function (e.g., `main' in C). Since
+ it uses `AC_LANG_SOURCE', the features of the latter are available.
+
+ For instance:
+
+ AC_INIT([Hello], [1.0], [bug-hello@example.org], [],
+ [http://www.example.org/])
+ AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+ AC_LANG_CONFTEST(
+ [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])])
+ gcc -E -dD conftest.c
+
+on a system with `gcc' installed, results in:
+
+ ...
+ # 1 "conftest.c"
+
+ #define PACKAGE_NAME "Hello"
+ #define PACKAGE_TARNAME "hello"
+ #define PACKAGE_VERSION "1.0"
+ #define PACKAGE_STRING "Hello 1.0"
+ #define PACKAGE_BUGREPORT "bug-hello@example.org"
+ #define PACKAGE_URL "http://www.example.org/"
+ #define HELLO_WORLD "Hello, World\n"
+
+ const char hw[] = "Hello, World\n";
+ int
+ main ()
+ {
+ fputs (hw, stdout);
+ ;
+ return 0;
+ }
+
+ In Erlang tests, the created source file is that of an Erlang module
+called `conftest' (`conftest.erl'). This module defines and exports at
+least one `start/0' function, which is called to perform the test. The
+PROLOGUE is optional code that is inserted between the module header and
+the `start/0' function definition. BODY is the body of the `start/0'
+function without the final period (*note Runtime::, about constraints
+on this function's behavior).
+
+ For instance:
+
+ AC_INIT([Hello], [1.0], [bug-hello@example.org])
+ AC_LANG(Erlang)
+ AC_LANG_CONFTEST(
+ [AC_LANG_PROGRAM([[-define(HELLO_WORLD, "Hello, world!").]],
+ [[io:format("~s~n", [?HELLO_WORLD])]])])
+ cat conftest.erl
+
+results in:
+
+ -module(conftest).
+ -export([start/0]).
+ -define(HELLO_WORLD, "Hello, world!").
+ start() ->
+ io:format("~s~n", [?HELLO_WORLD])
+ .
+
+ -- Macro: AC_LANG_CALL (PROLOGUE, FUNCTION)
+ Expands into a source file which consists of the PROLOGUE, and
+ then a call to the FUNCTION as body of the main function (e.g.,
+ `main' in C). Since it uses `AC_LANG_PROGRAM', the feature of the
+ latter are available.
+
+ This function will probably be replaced in the future by a version
+ which would enable specifying the arguments. The use of this
+ macro is not encouraged, as it violates strongly the typing system.
+
+ This macro cannot be used for Erlang tests.
+
+ -- Macro: AC_LANG_FUNC_LINK_TRY (FUNCTION)
+ Expands into a source file which uses the FUNCTION in the body of
+ the main function (e.g., `main' in C). Since it uses
+ `AC_LANG_PROGRAM', the features of the latter are available.
+
+ As `AC_LANG_CALL', this macro is documented only for completeness.
+ It is considered to be severely broken, and in the future will be
+ removed in favor of actual function calls (with properly typed
+ arguments).
+
+ This macro cannot be used for Erlang tests.
+
+
+File: autoconf.info, Node: Running the Preprocessor, Next: Running the Compiler, Prev: Writing Test Programs, Up: Writing Tests
+
+6.3 Running the Preprocessor
+============================
+
+Sometimes one might need to run the preprocessor on some source file.
+_Usually it is a bad idea_, as you typically need to _compile_ your
+project, not merely run the preprocessor on it; therefore you certainly
+want to run the compiler, not the preprocessor. Resist the temptation
+of following the easiest path.
+
+ Nevertheless, if you need to run the preprocessor, then use
+`AC_PREPROC_IFELSE'.
+
+ The macros described in this section cannot be used for tests in
+Erlang, Fortran, or Go, since those languages require no preprocessor.
+
+ -- Macro: AC_PREPROC_IFELSE (INPUT, [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+ Run the preprocessor of the current language (*note Language
+ Choice::) on the INPUT, run the shell commands ACTION-IF-TRUE on
+ success, ACTION-IF-FALSE otherwise. The INPUT can be made by
+ `AC_LANG_PROGRAM' and friends.
+
+ This macro uses `CPPFLAGS', but not `CFLAGS', because `-g', `-O',
+ etc. are not valid options to many C preprocessors.
+
+ It is customary to report unexpected failures with
+ `AC_MSG_FAILURE'. If needed, ACTION-IF-TRUE can further access
+ the preprocessed output in the file `conftest.i'.
+
+ For instance:
+
+ AC_INIT([Hello], [1.0], [bug-hello@example.org])
+ AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+ AC_PREPROC_IFELSE(
+ [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])],
+ [AC_MSG_RESULT([OK])],
+ [AC_MSG_FAILURE([unexpected preprocessor failure])])
+
+results in:
+
+ checking for gcc... gcc
+ checking for C compiler default output file name... a.out
+ checking whether the C compiler works... yes
+ checking whether we are cross compiling... no
+ checking for suffix of executables...
+ checking for suffix of object files... o
+ checking whether we are using the GNU C compiler... yes
+ checking whether gcc accepts -g... yes
+ checking for gcc option to accept ISO C89... none needed
+ checking how to run the C preprocessor... gcc -E
+ OK
+
+
+ The macro `AC_TRY_CPP' (*note Obsolete Macros::) used to play the
+role of `AC_PREPROC_IFELSE', but double quotes its argument, making it
+impossible to use it to elaborate sources. You are encouraged to get
+rid of your old use of the macro `AC_TRY_CPP' in favor of
+`AC_PREPROC_IFELSE', but, in the first place, are you sure you need to
+run the _preprocessor_ and not the compiler?
+
+ -- Macro: AC_EGREP_HEADER (PATTERN, HEADER-FILE, ACTION-IF-FOUND,
+ [ACTION-IF-NOT-FOUND])
+ If the output of running the preprocessor on the system header file
+ HEADER-FILE matches the extended regular expression PATTERN,
+ execute shell commands ACTION-IF-FOUND, otherwise execute
+ ACTION-IF-NOT-FOUND.
+
+ -- Macro: AC_EGREP_CPP (PATTERN, PROGRAM, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ PROGRAM is the text of a C or C++ program, on which shell
+ variable, back quote, and backslash substitutions are performed.
+ If the output of running the preprocessor on PROGRAM matches the
+ extended regular expression PATTERN, execute shell commands
+ ACTION-IF-FOUND, otherwise execute ACTION-IF-NOT-FOUND.
+
+
+File: autoconf.info, Node: Running the Compiler, Next: Running the Linker, Prev: Running the Preprocessor, Up: Writing Tests
+
+6.4 Running the Compiler
+========================
+
+To check for a syntax feature of the current language's (*note Language
+Choice::) compiler, such as whether it recognizes a certain keyword, or
+simply to try some library feature, use `AC_COMPILE_IFELSE' to try to
+compile a small program that uses that feature.
+
+ -- Macro: AC_COMPILE_IFELSE (INPUT, [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+ Run the compiler and compilation flags of the current language
+ (*note Language Choice::) on the INPUT, run the shell commands
+ ACTION-IF-TRUE on success, ACTION-IF-FALSE otherwise. The INPUT
+ can be made by `AC_LANG_PROGRAM' and friends.
+
+ It is customary to report unexpected failures with
+ `AC_MSG_FAILURE'. This macro does not try to link; use
+ `AC_LINK_IFELSE' if you need to do that (*note Running the
+ Linker::). If needed, ACTION-IF-TRUE can further access the
+ just-compiled object file `conftest.$OBJEXT'.
+
+ This macro uses `AC_REQUIRE' for the compiler associated with the
+ current language, which means that if the compiler has not yet been
+ determined, the compiler determination will be made prior to the
+ body of the outermost `AC_DEFUN' macro that triggered this macro to
+ expand (*note Expanded Before Required::).
+
+ For tests in Erlang, the INPUT must be the source code of a module
+named `conftest'. `AC_COMPILE_IFELSE' generates a `conftest.beam' file
+that can be interpreted by the Erlang virtual machine (`ERL'). It is
+recommended to use `AC_LANG_PROGRAM' to specify the test program, to
+ensure that the Erlang module has the right name.
+
+
+File: autoconf.info, Node: Running the Linker, Next: Runtime, Prev: Running the Compiler, Up: Writing Tests
+
+6.5 Running the Linker
+======================
+
+To check for a library, a function, or a global variable, Autoconf
+`configure' scripts try to compile and link a small program that uses
+it. This is unlike Metaconfig, which by default uses `nm' or `ar' on
+the C library to try to figure out which functions are available.
+Trying to link with the function is usually a more reliable approach
+because it avoids dealing with the variations in the options and output
+formats of `nm' and `ar' and in the location of the standard libraries.
+It also allows configuring for cross-compilation or checking a
+function's runtime behavior if needed. On the other hand, it can be
+slower than scanning the libraries once, but accuracy is more important
+than speed.
+
+ `AC_LINK_IFELSE' is used to compile test programs to test for
+functions and global variables. It is also used by `AC_CHECK_LIB' to
+check for libraries (*note Libraries::), by adding the library being
+checked for to `LIBS' temporarily and trying to link a small program.
+
+ -- Macro: AC_LINK_IFELSE (INPUT, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+ Run the compiler (and compilation flags) and the linker of the
+ current language (*note Language Choice::) on the INPUT, run the
+ shell commands ACTION-IF-TRUE on success, ACTION-IF-FALSE
+ otherwise. The INPUT can be made by `AC_LANG_PROGRAM' and
+ friends. If needed, ACTION-IF-TRUE can further access the
+ just-linked program file `conftest$EXEEXT'.
+
+ `LDFLAGS' and `LIBS' are used for linking, in addition to the
+ current compilation flags.
+
+ It is customary to report unexpected failures with
+ `AC_MSG_FAILURE'. This macro does not try to execute the program;
+ use `AC_RUN_IFELSE' if you need to do that (*note Runtime::).
+
+ The `AC_LINK_IFELSE' macro cannot be used for Erlang tests, since
+Erlang programs are interpreted and do not require linking.
+
+
+File: autoconf.info, Node: Runtime, Next: Systemology, Prev: Running the Linker, Up: Writing Tests
+
+6.6 Checking Runtime Behavior
+=============================
+
+Sometimes you need to find out how a system performs at runtime, such
+as whether a given function has a certain capability or bug. If you
+can, make such checks when your program runs instead of when it is
+configured. You can check for things like the machine's endianness when
+your program initializes itself.
+
+ If you really need to test for a runtime behavior while configuring,
+you can write a test program to determine the result, and compile and
+run it using `AC_RUN_IFELSE'. Avoid running test programs if possible,
+because this prevents people from configuring your package for
+cross-compiling.
+
+ -- Macro: AC_RUN_IFELSE (INPUT, [ACTION-IF-TRUE], [ACTION-IF-FALSE],
+ [ACTION-IF-CROSS-COMPILING = `AC_MSG_FAILURE'])
+ Run the compiler (and compilation flags) and the linker of the
+ current language (*note Language Choice::) on the INPUT, then
+ execute the resulting program. If the program returns an exit
+ status of 0 when executed, run shell commands ACTION-IF-TRUE.
+ Otherwise, run shell commands ACTION-IF-FALSE.
+
+ The INPUT can be made by `AC_LANG_PROGRAM' and friends. `LDFLAGS'
+ and `LIBS' are used for linking, in addition to the compilation
+ flags of the current language (*note Language Choice::).
+ Additionally, ACTION-IF-TRUE can run `./conftest$EXEEXT' for
+ further testing.
+
+ In the ACTION-IF-FALSE section, the failing exit status is
+ available in the shell variable `$?'. This exit status might be
+ that of a failed compilation, or it might be that of a failed
+ program execution.
+
+ If cross-compilation mode is enabled (this is the case if either
+ the compiler being used does not produce executables that run on
+ the system where `configure' is being run, or if the options
+ `--build' and `--host' were both specified and their values are
+ different), then the test program is not run. If the optional
+ shell commands ACTION-IF-CROSS-COMPILING are given, those commands
+ are run instead; typically these commands provide pessimistic
+ defaults that allow cross-compilation to work even if the guess
+ was wrong. If the fourth argument is empty or omitted, but
+ cross-compilation is detected, then `configure' prints an error
+ message and exits. If you want your package to be useful in a
+ cross-compilation scenario, you _should_ provide a non-empty
+ ACTION-IF-CROSS-COMPILING clause, as well as wrap the
+ `AC_RUN_IFELSE' compilation inside an `AC_CACHE_CHECK' (*note
+ Caching Results::) which allows the user to override the
+ pessimistic default if needed.
+
+ It is customary to report unexpected failures with
+ `AC_MSG_FAILURE'.
+
+ `autoconf' prints a warning message when creating `configure' each
+time it encounters a call to `AC_RUN_IFELSE' with no
+ACTION-IF-CROSS-COMPILING argument given. If you are not concerned
+about users configuring your package for cross-compilation, you may
+ignore the warning. A few of the macros distributed with Autoconf
+produce this warning message; but if this is a problem for you, please
+report it as a bug, along with an appropriate pessimistic guess to use
+instead.
+
+ To configure for cross-compiling you can also choose a value for
+those parameters based on the canonical system name (*note Manual
+Configuration::). Alternatively, set up a test results cache file with
+the correct values for the host system (*note Caching Results::).
+
+ To provide a default for calls of `AC_RUN_IFELSE' that are embedded
+in other macros, including a few of the ones that come with Autoconf,
+you can test whether the shell variable `cross_compiling' is set to
+`yes', and then use an alternate method to get the results instead of
+calling the macros.
+
+ It is also permissible to temporarily assign to `cross_compiling' in
+order to force tests to behave as though they are in a
+cross-compilation environment, particularly since this provides a way to
+test your ACTION-IF-CROSS-COMPILING even when you are not using a
+cross-compiler.
+
+ # We temporarily set cross-compile mode to force AC_COMPUTE_INT
+ # to use the slow link-only method
+ save_cross_compiling=$cross_compiling
+ cross_compiling=yes
+ AC_COMPUTE_INT([...])
+ cross_compiling=$save_cross_compiling
+
+ A C or C++ runtime test should be portable. *Note Portable C and
+C++::.
+
+ Erlang tests must exit themselves the Erlang VM by calling the
+`halt/1' function: the given status code is used to determine the
+success of the test (status is `0') or its failure (status is different
+than `0'), as explained above. It must be noted that data output
+through the standard output (e.g., using `io:format/2') may be
+truncated when halting the VM. Therefore, if a test must output
+configuration information, it is recommended to create and to output
+data into the temporary file named `conftest.out', using the functions
+of module `file'. The `conftest.out' file is automatically deleted by
+the `AC_RUN_IFELSE' macro. For instance, a simplified implementation
+of Autoconf's `AC_ERLANG_SUBST_LIB_DIR' macro is:
+
+ AC_INIT([LibdirTest], [1.0], [bug-libdirtest@example.org])
+ AC_ERLANG_NEED_ERL
+ AC_LANG(Erlang)
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ file:write_file("conftest.out", code:lib_dir()),
+ halt(0)])],
+ [echo "code:lib_dir() returned: `cat conftest.out`"],
+ [AC_MSG_FAILURE([test Erlang program execution failed])])
+
+
+File: autoconf.info, Node: Systemology, Next: Multiple Cases, Prev: Runtime, Up: Writing Tests
+
+6.7 Systemology
+===============
+
+This section aims at presenting some systems and pointers to
+documentation. It may help you addressing particular problems reported
+by users.
+
+ Posix-conforming systems (http://www.opengroup.org/susv3) are
+derived from the Unix operating system
+(http://www.bell-labs.com/history/unix/).
+
+ The Rosetta Stone for Unix (http://bhami.com/rosetta.html) contains
+a table correlating the features of various Posix-conforming systems.
+Unix History (http://www.levenez.com/unix/) is a simplified diagram of
+how many Unix systems were derived from each other.
+
+ The Heirloom Project (http://heirloom.sourceforge.net/) provides
+some variants of traditional implementations of Unix utilities.
+
+Darwin
+ Darwin is also known as Mac OS X. Beware that the file system
+ _can_ be case-preserving, but case insensitive. This can cause
+ nasty problems, since for instance the installation attempt for a
+ package having an `INSTALL' file can result in `make install'
+ report that nothing was to be done!
+
+ That's all dependent on whether the file system is a UFS (case
+ sensitive) or HFS+ (case preserving). By default Apple wants you
+ to install the OS on HFS+. Unfortunately, there are some pieces of
+ software which really need to be built on UFS. We may want to
+ rebuild Darwin to have both UFS and HFS+ available (and put the
+ /local/build tree on the UFS).
+
+QNX 4.25
+ QNX is a realtime operating system running on Intel architecture
+ meant to be scalable from the small embedded systems to the hundred
+ processor super-computer. It claims to be Posix certified. More
+ information is available on the QNX home page
+ (http://www.qnx.com/).
+
+Tru64
+ Documentation of several versions of Tru64
+ (http://h30097.www3.hp.com/docs/) is available in different
+ formats.
+
+Unix version 7
+ Officially this was called the "Seventh Edition" of "the UNIX
+ time-sharing system" but we use the more-common name "Unix version
+ 7". Documentation is available in the Unix Seventh Edition Manual
+ (http://plan9.bell-labs.com/7thEdMan/). Previous versions of Unix
+ are called "Unix version 6", etc., but they were not as widely
+ used.
+
+
+File: autoconf.info, Node: Multiple Cases, Prev: Systemology, Up: Writing Tests
+
+6.8 Multiple Cases
+==================
+
+Some operations are accomplished in several possible ways, depending on
+the OS variant. Checking for them essentially requires a "case
+statement". Autoconf does not directly provide one; however, it is
+easy to simulate by using a shell variable to keep track of whether a
+way to perform the operation has been found yet.
+
+ Here is an example that uses the shell variable `fstype' to keep
+track of whether the remaining cases need to be checked. Note that
+since the value of `fstype' is under our control, we don't have to use
+the longer `test "x$fstype" = xno'.
+
+ AC_MSG_CHECKING([how to get file system type])
+ fstype=no
+ # The order of these tests is important.
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
+ #include <sys/fstyp.h>]])],
+ [AC_DEFINE([FSTYPE_STATVFS], [1],
+ [Define if statvfs exists.])
+ fstype=SVR4])
+ if test $fstype = no; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
+ #include <sys/fstyp.h>]])],
+ [AC_DEFINE([FSTYPE_USG_STATFS], [1],
+ [Define if USG statfs.])
+ fstype=SVR3])
+ fi
+ if test $fstype = no; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
+ #include <sys/vmount.h>]])]),
+ [AC_DEFINE([FSTYPE_AIX_STATFS], [1],
+ [Define if AIX statfs.])
+ fstype=AIX])
+ fi
+ # (more cases omitted here)
+ AC_MSG_RESULT([$fstype])
+
+
+File: autoconf.info, Node: Results, Next: Programming in M4, Prev: Writing Tests, Up: Top
+
+7 Results of Tests
+******************
+
+Once `configure' has determined whether a feature exists, what can it
+do to record that information? There are four sorts of things it can
+do: define a C preprocessor symbol, set a variable in the output files,
+save the result in a cache file for future `configure' runs, and print
+a message letting the user know the result of the test.
+
+* Menu:
+
+* Defining Symbols:: Defining C preprocessor symbols
+* Setting Output Variables:: Replacing variables in output files
+* Special Chars in Variables:: Characters to beware of in variables
+* Caching Results:: Speeding up subsequent `configure' runs
+* Printing Messages:: Notifying `configure' users
+
+
+File: autoconf.info, Node: Defining Symbols, Next: Setting Output Variables, Up: Results
+
+7.1 Defining C Preprocessor Symbols
+===================================
+
+A common action to take in response to a feature test is to define a C
+preprocessor symbol indicating the results of the test. That is done by
+calling `AC_DEFINE' or `AC_DEFINE_UNQUOTED'.
+
+ By default, `AC_OUTPUT' places the symbols defined by these macros
+into the output variable `DEFS', which contains an option
+`-DSYMBOL=VALUE' for each symbol defined. Unlike in Autoconf version
+1, there is no variable `DEFS' defined while `configure' is running.
+To check whether Autoconf macros have already defined a certain C
+preprocessor symbol, test the value of the appropriate cache variable,
+as in this example:
+
+ AC_CHECK_FUNC([vprintf], [AC_DEFINE([HAVE_VPRINTF], [1],
+ [Define if vprintf exists.])])
+ if test "x$ac_cv_func_vprintf" != xyes; then
+ AC_CHECK_FUNC([_doprnt], [AC_DEFINE([HAVE_DOPRNT], [1],
+ [Define if _doprnt exists.])])
+ fi
+
+ If `AC_CONFIG_HEADERS' has been called, then instead of creating
+`DEFS', `AC_OUTPUT' creates a header file by substituting the correct
+values into `#define' statements in a template file. *Note
+Configuration Headers::, for more information about this kind of output.
+
+ -- Macro: AC_DEFINE (VARIABLE, VALUE, [DESCRIPTION])
+ -- Macro: AC_DEFINE (VARIABLE)
+ Define VARIABLE to VALUE (verbatim), by defining a C preprocessor
+ macro for VARIABLE. VARIABLE should be a C identifier, optionally
+ suffixed by a parenthesized argument list to define a C
+ preprocessor macro with arguments. The macro argument list, if
+ present, should be a comma-separated list of C identifiers,
+ possibly terminated by an ellipsis `...' if C99 syntax is employed.
+ VARIABLE should not contain comments, white space, trigraphs,
+ backslash-newlines, universal character names, or non-ASCII
+ characters.
+
+ VALUE may contain backslash-escaped newlines, which will be
+ preserved if you use `AC_CONFIG_HEADERS' but flattened if passed
+ via `@DEFS@' (with no effect on the compilation, since the
+ preprocessor sees only one line in the first place). VALUE should
+ not contain raw newlines. If you are not using
+ `AC_CONFIG_HEADERS', VALUE should not contain any `#' characters,
+ as `make' tends to eat them. To use a shell variable, use
+ `AC_DEFINE_UNQUOTED' instead.
+
+ DESCRIPTION is only useful if you are using `AC_CONFIG_HEADERS'.
+ In this case, DESCRIPTION is put into the generated `config.h.in'
+ as the comment before the macro define. The following example
+ defines the C preprocessor variable `EQUATION' to be the string
+ constant `"$a > $b"':
+
+ AC_DEFINE([EQUATION], ["$a > $b"],
+ [Equation string.])
+
+ If neither VALUE nor DESCRIPTION are given, then VALUE defaults to
+ 1 instead of to the empty string. This is for backwards
+ compatibility with older versions of Autoconf, but this usage is
+ obsolescent and may be withdrawn in future versions of Autoconf.
+
+ If the VARIABLE is a literal string, it is passed to
+ `m4_pattern_allow' (*note Forbidden Patterns::).
+
+ If multiple `AC_DEFINE' statements are executed for the same
+ VARIABLE name (not counting any parenthesized argument list), the
+ last one wins.
+
+ -- Macro: AC_DEFINE_UNQUOTED (VARIABLE, VALUE, [DESCRIPTION])
+ -- Macro: AC_DEFINE_UNQUOTED (VARIABLE)
+ Like `AC_DEFINE', but three shell expansions are
+ performed--once--on VARIABLE and VALUE: variable expansion (`$'),
+ command substitution (``'), and backslash escaping (`\'), as if in
+ an unquoted here-document. Single and double quote characters in
+ the value have no special meaning. Use this macro instead of
+ `AC_DEFINE' when VARIABLE or VALUE is a shell variable. Examples:
+
+ AC_DEFINE_UNQUOTED([config_machfile], ["$machfile"],
+ [Configuration machine file.])
+ AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
+ [getgroups return type.])
+ AC_DEFINE_UNQUOTED([$ac_tr_hdr], [1],
+ [Translated header name.])
+
+ Due to a syntactical bizarreness of the Bourne shell, do not use
+semicolons to separate `AC_DEFINE' or `AC_DEFINE_UNQUOTED' calls from
+other macro calls or shell code; that can cause syntax errors in the
+resulting `configure' script. Use either blanks or newlines. That is,
+do this:
+
+ AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
+
+or this:
+
+ AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4])
+ LIBS="-lelf $LIBS"])
+
+instead of this:
+
+ AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])
+
+
+File: autoconf.info, Node: Setting Output Variables, Next: Special Chars in Variables, Prev: Defining Symbols, Up: Results
+
+7.2 Setting Output Variables
+============================
+
+Another way to record the results of tests is to set "output
+variables", which are shell variables whose values are substituted into
+files that `configure' outputs. The two macros below create new output
+variables. *Note Preset Output Variables::, for a list of output
+variables that are always available.
+
+ -- Macro: AC_SUBST (VARIABLE, [VALUE])
+ Create an output variable from a shell variable. Make `AC_OUTPUT'
+ substitute the variable VARIABLE into output files (typically one
+ or more makefiles). This means that `AC_OUTPUT' replaces
+ instances of `@VARIABLE@' in input files with the value that the
+ shell variable VARIABLE has when `AC_OUTPUT' is called. The value
+ can contain any non-`NUL' character, including newline. If you
+ are using Automake 1.11 or newer, for newlines in values you might
+ want to consider using `AM_SUBST_NOTMAKE' to prevent `automake'
+ from adding a line `VARIABLE = @VARIABLE@' to the `Makefile.in'
+ files (*note Automake: (automake)Optional.).
+
+ Variable occurrences should not overlap: e.g., an input file should
+ not contain `@VAR1@VAR2@' if VAR1 and VAR2 are variable names.
+ The substituted value is not rescanned for more output variables;
+ occurrences of `@VARIABLE@' in the value are inserted literally
+ into the output file. (The algorithm uses the special marker
+ `|#_!!_#|' internally, so neither the substituted value nor the
+ output file may contain `|#_!!_#|'.)
+
+ If VALUE is given, in addition assign it to VARIABLE.
+
+ The string VARIABLE is passed to `m4_pattern_allow' (*note
+ Forbidden Patterns::).
+
+ -- Macro: AC_SUBST_FILE (VARIABLE)
+ Another way to create an output variable from a shell variable.
+ Make `AC_OUTPUT' insert (without substitutions) the contents of
+ the file named by shell variable VARIABLE into output files. This
+ means that `AC_OUTPUT' replaces instances of `@VARIABLE@' in
+ output files (such as `Makefile.in') with the contents of the file
+ that the shell variable VARIABLE names when `AC_OUTPUT' is called.
+ Set the variable to `/dev/null' for cases that do not have a file
+ to insert. This substitution occurs only when the `@VARIABLE@' is
+ on a line by itself, optionally surrounded by spaces and tabs. The
+ substitution replaces the whole line, including the spaces, tabs,
+ and the terminating newline.
+
+ This macro is useful for inserting makefile fragments containing
+ special dependencies or other `make' directives for particular host
+ or target types into makefiles. For example, `configure.ac' could
+ contain:
+
+ AC_SUBST_FILE([host_frag])
+ host_frag=$srcdir/conf/sun4.mh
+
+ and then a `Makefile.in' could contain:
+
+ @host_frag@
+
+ The string VARIABLE is passed to `m4_pattern_allow' (*note
+ Forbidden Patterns::).
+
+ Running `configure' in varying environments can be extremely
+dangerous. If for instance the user runs `CC=bizarre-cc ./configure',
+then the cache, `config.h', and many other output files depend upon
+`bizarre-cc' being the C compiler. If for some reason the user runs
+`./configure' again, or if it is run via `./config.status --recheck',
+(*Note Automatic Remaking::, and *note config.status Invocation::),
+then the configuration can be inconsistent, composed of results
+depending upon two different compilers.
+
+ Environment variables that affect this situation, such as `CC'
+above, are called "precious variables", and can be declared as such by
+`AC_ARG_VAR'.
+
+ -- Macro: AC_ARG_VAR (VARIABLE, DESCRIPTION)
+ Declare VARIABLE is a precious variable, and include its
+ DESCRIPTION in the variable section of `./configure --help'.
+
+ Being precious means that
+ - VARIABLE is substituted via `AC_SUBST'.
+
+ - The value of VARIABLE when `configure' was launched is saved
+ in the cache, including if it was not specified on the command
+ line but via the environment. Indeed, while `configure' can
+ notice the definition of `CC' in `./configure CC=bizarre-cc',
+ it is impossible to notice it in `CC=bizarre-cc ./configure',
+ which, unfortunately, is what most users do.
+
+ We emphasize that it is the _initial_ value of VARIABLE which
+ is saved, not that found during the execution of `configure'.
+ Indeed, specifying `./configure FOO=foo' and letting
+ `./configure' guess that `FOO' is `foo' can be two different
+ things.
+
+ - VARIABLE is checked for consistency between two `configure'
+ runs. For instance:
+
+ $ ./configure --silent --config-cache
+ $ CC=cc ./configure --silent --config-cache
+ configure: error: `CC' was not set in the previous run
+ configure: error: changes in the environment can compromise \
+ the build
+ configure: error: run `make distclean' and/or \
+ `rm config.cache' and start over
+
+ and similarly if the variable is unset, or if its content is
+ changed. If the content has white space changes only, then
+ the error is degraded to a warning only, but the old value is
+ reused.
+
+ - VARIABLE is kept during automatic reconfiguration (*note
+ config.status Invocation::) as if it had been passed as a
+ command line argument, including when no cache is used:
+
+ $ CC=/usr/bin/cc ./configure var=raboof --silent
+ $ ./config.status --recheck
+ running CONFIG_SHELL=/bin/sh /bin/sh ./configure var=raboof \
+ CC=/usr/bin/cc --no-create --no-recursion
+
+
+File: autoconf.info, Node: Special Chars in Variables, Next: Caching Results, Prev: Setting Output Variables, Up: Results
+
+7.3 Special Characters in Output Variables
+==========================================
+
+Many output variables are intended to be evaluated both by `make' and
+by the shell. Some characters are expanded differently in these two
+contexts, so to avoid confusion these variables' values should not
+contain any of the following characters:
+
+ " # $ & ' ( ) * ; < > ? [ \ ^ ` |
+
+ Also, these variables' values should neither contain newlines, nor
+start with `~', nor contain white space or `:' immediately followed by
+`~'. The values can contain nonempty sequences of white space
+characters like tabs and spaces, but each such sequence might
+arbitrarily be replaced by a single space during substitution.
+
+ These restrictions apply both to the values that `configure'
+computes, and to the values set directly by the user. For example, the
+following invocations of `configure' are problematic, since they
+attempt to use special characters within `CPPFLAGS' and white space
+within `$(srcdir)':
+
+ CPPFLAGS='-DOUCH="&\"#$*?"' '../My Source/ouch-1.0/configure'
+
+ '../My Source/ouch-1.0/configure' CPPFLAGS='-DOUCH="&\"#$*?"'
+
+
+File: autoconf.info, Node: Caching Results, Next: Printing Messages, Prev: Special Chars in Variables, Up: Results
+
+7.4 Caching Results
+===================
+
+To avoid checking for the same features repeatedly in various
+`configure' scripts (or in repeated runs of one script), `configure'
+can optionally save the results of many checks in a "cache file" (*note
+Cache Files::). If a `configure' script runs with caching enabled and
+finds a cache file, it reads the results of previous runs from the
+cache and avoids rerunning those checks. As a result, `configure' can
+then run much faster than if it had to perform all of the checks every
+time.
+
+ -- Macro: AC_CACHE_VAL (CACHE-ID, COMMANDS-TO-SET-IT)
+ Ensure that the results of the check identified by CACHE-ID are
+ available. If the results of the check were in the cache file
+ that was read, and `configure' was not given the `--quiet' or
+ `--silent' option, print a message saying that the result was
+ cached; otherwise, run the shell commands COMMANDS-TO-SET-IT. If
+ the shell commands are run to determine the value, the value is
+ saved in the cache file just before `configure' creates its output
+ files. *Note Cache Variable Names::, for how to choose the name
+ of the CACHE-ID variable.
+
+ The COMMANDS-TO-SET-IT _must have no side effects_ except for
+ setting the variable CACHE-ID, see below.
+
+ -- Macro: AC_CACHE_CHECK (MESSAGE, CACHE-ID, COMMANDS-TO-SET-IT)
+ A wrapper for `AC_CACHE_VAL' that takes care of printing the
+ messages. This macro provides a convenient shorthand for the most
+ common way to use these macros. It calls `AC_MSG_CHECKING' for
+ MESSAGE, then `AC_CACHE_VAL' with the CACHE-ID and COMMANDS
+ arguments, and `AC_MSG_RESULT' with CACHE-ID.
+
+ The COMMANDS-TO-SET-IT _must have no side effects_ except for
+ setting the variable CACHE-ID, see below.
+
+ It is common to find buggy macros using `AC_CACHE_VAL' or
+`AC_CACHE_CHECK', because people are tempted to call `AC_DEFINE' in the
+COMMANDS-TO-SET-IT. Instead, the code that _follows_ the call to
+`AC_CACHE_VAL' should call `AC_DEFINE', by examining the value of the
+cache variable. For instance, the following macro is broken:
+
+ AC_DEFUN([AC_SHELL_TRUE],
+ [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi])
+ ])
+
+This fails if the cache is enabled: the second time this macro is run,
+`TRUE_WORKS' _will not be defined_. The proper implementation is:
+
+ AC_DEFUN([AC_SHELL_TRUE],
+ [AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes])
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi
+ ])
+
+ Also, COMMANDS-TO-SET-IT should not print any messages, for example
+with `AC_MSG_CHECKING'; do that before calling `AC_CACHE_VAL', so the
+messages are printed regardless of whether the results of the check are
+retrieved from the cache or determined by running the shell commands.
+
+* Menu:
+
+* Cache Variable Names:: Shell variables used in caches
+* Cache Files:: Files `configure' uses for caching
+* Cache Checkpointing:: Loading and saving the cache file
+
+
+File: autoconf.info, Node: Cache Variable Names, Next: Cache Files, Up: Caching Results
+
+7.4.1 Cache Variable Names
+--------------------------
+
+The names of cache variables should have the following format:
+
+ PACKAGE-PREFIX_cv_VALUE-TYPE_SPECIFIC-VALUE_[ADDITIONAL-OPTIONS]
+
+for example, `ac_cv_header_stat_broken' or
+`ac_cv_prog_gcc_traditional'. The parts of the variable name are:
+
+PACKAGE-PREFIX
+ An abbreviation for your package or organization; the same prefix
+ you begin local Autoconf macros with, except lowercase by
+ convention. For cache values used by the distributed Autoconf
+ macros, this value is `ac'.
+
+`_cv_'
+ Indicates that this shell variable is a cache value. This string
+ _must_ be present in the variable name, including the leading
+ underscore.
+
+VALUE-TYPE
+ A convention for classifying cache values, to produce a rational
+ naming system. The values used in Autoconf are listed in *note
+ Macro Names::.
+
+SPECIFIC-VALUE
+ Which member of the class of cache values this test applies to.
+ For example, which function (`alloca'), program (`gcc'), or output
+ variable (`INSTALL').
+
+ADDITIONAL-OPTIONS
+ Any particular behavior of the specific member that this test
+ applies to. For example, `broken' or `set'. This part of the
+ name may be omitted if it does not apply.
+
+ The values assigned to cache variables may not contain newlines.
+Usually, their values are Boolean (`yes' or `no') or the names of files
+or functions; so this is not an important restriction. *note Cache
+Variable Index:: for an index of cache variables with documented
+semantics.
+
+
+File: autoconf.info, Node: Cache Files, Next: Cache Checkpointing, Prev: Cache Variable Names, Up: Caching Results
+
+7.4.2 Cache Files
+-----------------
+
+A cache file is a shell script that caches the results of configure
+tests run on one system so they can be shared between configure scripts
+and configure runs. It is not useful on other systems. If its contents
+are invalid for some reason, the user may delete or edit it, or override
+documented cache variables on the `configure' command line.
+
+ By default, `configure' uses no cache file, to avoid problems caused
+by accidental use of stale cache files.
+
+ To enable caching, `configure' accepts `--config-cache' (or `-C') to
+cache results in the file `config.cache'. Alternatively,
+`--cache-file=FILE' specifies that FILE be the cache file. The cache
+file is created if it does not exist already. When `configure' calls
+`configure' scripts in subdirectories, it uses the `--cache-file'
+argument so that they share the same cache. *Note Subdirectories::,
+for information on configuring subdirectories with the
+`AC_CONFIG_SUBDIRS' macro.
+
+ `config.status' only pays attention to the cache file if it is given
+the `--recheck' option, which makes it rerun `configure'.
+
+ It is wrong to try to distribute cache files for particular system
+types. There is too much room for error in doing that, and too much
+administrative overhead in maintaining them. For any features that
+can't be guessed automatically, use the standard method of the canonical
+system type and linking files (*note Manual Configuration::).
+
+ The site initialization script can specify a site-wide cache file to
+use, instead of the usual per-program cache. In this case, the cache
+file gradually accumulates information whenever someone runs a new
+`configure' script. (Running `configure' merges the new cache results
+with the existing cache file.) This may cause problems, however, if
+the system configuration (e.g., the installed libraries or compilers)
+changes and the stale cache file is not deleted.
+
+ If `configure' is interrupted at the right time when it updates a
+cache file outside of the build directory where the `configure' script
+is run, it may leave behind a temporary file named after the cache file
+with digits following it. You may safely delete such a file.
+
+
+File: autoconf.info, Node: Cache Checkpointing, Prev: Cache Files, Up: Caching Results
+
+7.4.3 Cache Checkpointing
+-------------------------
+
+If your configure script, or a macro called from `configure.ac', happens
+to abort the configure process, it may be useful to checkpoint the cache
+a few times at key points using `AC_CACHE_SAVE'. Doing so reduces the
+amount of time it takes to rerun the configure script with (hopefully)
+the error that caused the previous abort corrected.
+
+ -- Macro: AC_CACHE_LOAD
+ Loads values from existing cache file, or creates a new cache file
+ if a cache file is not found. Called automatically from `AC_INIT'.
+
+ -- Macro: AC_CACHE_SAVE
+ Flushes all cached values to the cache file. Called automatically
+ from `AC_OUTPUT', but it can be quite useful to call
+ `AC_CACHE_SAVE' at key points in `configure.ac'.
+
+ For instance:
+
+ ... AC_INIT, etc. ...
+ # Checks for programs.
+ AC_PROG_CC
+ AC_PROG_AWK
+ ... more program checks ...
+ AC_CACHE_SAVE
+
+ # Checks for libraries.
+ AC_CHECK_LIB([nsl], [gethostbyname])
+ AC_CHECK_LIB([socket], [connect])
+ ... more lib checks ...
+ AC_CACHE_SAVE
+
+ # Might abort...
+ AM_PATH_GTK([1.0.2], [], [AC_MSG_ERROR([GTK not in path])])
+ AM_PATH_GTKMM([0.9.5], [], [AC_MSG_ERROR([GTK not in path])])
+ ... AC_OUTPUT, etc. ...
+
+
+File: autoconf.info, Node: Printing Messages, Prev: Caching Results, Up: Results
+
+7.5 Printing Messages
+=====================
+
+`configure' scripts need to give users running them several kinds of
+information. The following macros print messages in ways appropriate
+for each kind. The arguments to all of them get enclosed in shell
+double quotes, so the shell performs variable and back-quote
+substitution on them.
+
+ These macros are all wrappers around the `echo' shell command. They
+direct output to the appropriate file descriptor (*note File Descriptor
+Macros::). `configure' scripts should rarely need to run `echo'
+directly to print messages for the user. Using these macros makes it
+easy to change how and when each kind of message is printed; such
+changes need only be made to the macro definitions and all the callers
+change automatically.
+
+ To diagnose static issues, i.e., when `autoconf' is run, see *note
+Diagnostic Macros::.
+
+ -- Macro: AC_MSG_CHECKING (FEATURE-DESCRIPTION)
+ Notify the user that `configure' is checking for a particular
+ feature. This macro prints a message that starts with `checking '
+ and ends with `...' and no newline. It must be followed by a call
+ to `AC_MSG_RESULT' to print the result of the check and the
+ newline. The FEATURE-DESCRIPTION should be something like
+ `whether the Fortran compiler accepts C++ comments' or `for c89'.
+
+ This macro prints nothing if `configure' is run with the `--quiet'
+ or `--silent' option.
+
+ -- Macro: AC_MSG_RESULT (RESULT-DESCRIPTION)
+ Notify the user of the results of a check. RESULT-DESCRIPTION is
+ almost always the value of the cache variable for the check,
+ typically `yes', `no', or a file name. This macro should follow a
+ call to `AC_MSG_CHECKING', and the RESULT-DESCRIPTION should be
+ the completion of the message printed by the call to
+ `AC_MSG_CHECKING'.
+
+ This macro prints nothing if `configure' is run with the `--quiet'
+ or `--silent' option.
+
+ -- Macro: AC_MSG_NOTICE (MESSAGE)
+ Deliver the MESSAGE to the user. It is useful mainly to print a
+ general description of the overall purpose of a group of feature
+ checks, e.g.,
+
+ AC_MSG_NOTICE([checking if stack overflow is detectable])
+
+ This macro prints nothing if `configure' is run with the `--quiet'
+ or `--silent' option.
+
+ -- Macro: AC_MSG_ERROR (ERROR-DESCRIPTION, [EXIT-STATUS = `$?/1'])
+ Notify the user of an error that prevents `configure' from
+ completing. This macro prints an error message to the standard
+ error output and exits `configure' with EXIT-STATUS (`$?' by
+ default, except that `0' is converted to `1'). ERROR-DESCRIPTION
+ should be something like `invalid value $HOME for \$HOME'.
+
+ The ERROR-DESCRIPTION should start with a lower-case letter, and
+ "cannot" is preferred to "can't".
+
+ -- Macro: AC_MSG_FAILURE (ERROR-DESCRIPTION, [EXIT-STATUS])
+ This `AC_MSG_ERROR' wrapper notifies the user of an error that
+ prevents `configure' from completing _and_ that additional details
+ are provided in `config.log'. This is typically used when
+ abnormal results are found during a compilation.
+
+ -- Macro: AC_MSG_WARN (PROBLEM-DESCRIPTION)
+ Notify the `configure' user of a possible problem. This macro
+ prints the message to the standard error output; `configure'
+ continues running afterward, so macros that call `AC_MSG_WARN'
+ should provide a default (back-up) behavior for the situations
+ they warn about. PROBLEM-DESCRIPTION should be something like `ln
+ -s seems to make hard links'.
+
+
+File: autoconf.info, Node: Programming in M4, Next: Programming in M4sh, Prev: Results, Up: Top
+
+8 Programming in M4
+*******************
+
+Autoconf is written on top of two layers: "M4sugar", which provides
+convenient macros for pure M4 programming, and "M4sh", which provides
+macros dedicated to shell script generation.
+
+ As of this version of Autoconf, these two layers still contain
+experimental macros, whose interface might change in the future. As a
+matter of fact, _anything that is not documented must not be used_.
+
+* Menu:
+
+* M4 Quotation:: Protecting macros from unwanted expansion
+* Using autom4te:: The Autoconf executables backbone
+* Programming in M4sugar:: Convenient pure M4 macros
+* Debugging via autom4te:: Figuring out what M4 was doing
+
+
+File: autoconf.info, Node: M4 Quotation, Next: Using autom4te, Up: Programming in M4
+
+8.1 M4 Quotation
+================
+
+The most common problem with existing macros is an improper quotation.
+This section, which users of Autoconf can skip, but which macro writers
+_must_ read, first justifies the quotation scheme that was chosen for
+Autoconf and then ends with a rule of thumb. Understanding the former
+helps one to follow the latter.
+
+* Menu:
+
+* Active Characters:: Characters that change the behavior of M4
+* One Macro Call:: Quotation and one macro call
+* Quoting and Parameters:: M4 vs. shell parameters
+* Quotation and Nested Macros:: Macros calling macros
+* Changequote is Evil:: Worse than INTERCAL: M4 + changequote
+* Quadrigraphs:: Another way to escape special characters
+* Balancing Parentheses:: Dealing with unbalanced parentheses
+* Quotation Rule Of Thumb:: One parenthesis, one quote
+
+
+File: autoconf.info, Node: Active Characters, Next: One Macro Call, Up: M4 Quotation
+
+8.1.1 Active Characters
+-----------------------
+
+To fully understand where proper quotation is important, you first need
+to know what the special characters are in Autoconf: `#' introduces a
+comment inside which no macro expansion is performed, `,' separates
+arguments, `[' and `]' are the quotes themselves(1), `(' and `)' (which
+M4 tries to match by pairs), and finally `$' inside a macro definition.
+
+ In order to understand the delicate case of macro calls, we first
+have to present some obvious failures. Below they are "obvious-ified",
+but when you find them in real life, they are usually in disguise.
+
+ Comments, introduced by a hash and running up to the newline, are
+opaque tokens to the top level: active characters are turned off, and
+there is no macro expansion:
+
+ # define([def], ine)
+ =># define([def], ine)
+
+ Each time there can be a macro expansion, there is a quotation
+expansion, i.e., one level of quotes is stripped:
+
+ int tab[10];
+ =>int tab10;
+ [int tab[10];]
+ =>int tab[10];
+
+ Without this in mind, the reader might try hopelessly to use her
+macro `array':
+
+ define([array], [int tab[10];])
+ array
+ =>int tab10;
+ [array]
+ =>array
+
+How can you correctly output the intended results(2)?
+
+ ---------- Footnotes ----------
+
+ (1) By itself, M4 uses ``' and `''; it is the M4sugar layer that
+sets up the preferred quotes of `[' and `]'.
+
+ (2) Using `defn'.
+
+
+File: autoconf.info, Node: One Macro Call, Next: Quoting and Parameters, Prev: Active Characters, Up: M4 Quotation
+
+8.1.2 One Macro Call
+--------------------
+
+Let's proceed on the interaction between active characters and macros
+with this small macro, which just returns its first argument:
+
+ define([car], [$1])
+
+The two pairs of quotes above are not part of the arguments of
+`define'; rather, they are understood by the top level when it tries to
+find the arguments of `define'. Therefore, assuming `car' is not
+already defined, it is equivalent to write:
+
+ define(car, $1)
+
+But, while it is acceptable for a `configure.ac' to avoid unnecessary
+quotes, it is bad practice for Autoconf macros which must both be more
+robust and also advocate perfect style.
+
+ At the top level, there are only two possibilities: either you quote
+or you don't:
+
+ car(foo, bar, baz)
+ =>foo
+ [car(foo, bar, baz)]
+ =>car(foo, bar, baz)
+
+ Let's pay attention to the special characters:
+
+ car(#)
+ error-->EOF in argument list
+
+ The closing parenthesis is hidden in the comment; with a hypothetical
+quoting, the top level understood it this way:
+
+ car([#)]
+
+Proper quotation, of course, fixes the problem:
+
+ car([#])
+ =>#
+
+ Here are more examples:
+
+ car(foo, bar)
+ =>foo
+ car([foo, bar])
+ =>foo, bar
+ car((foo, bar))
+ =>(foo, bar)
+ car([(foo], [bar)])
+ =>(foo
+ define([a], [b])
+ =>
+ car(a)
+ =>b
+ car([a])
+ =>b
+ car([[a]])
+ =>a
+ car([[[a]]])
+ =>[a]
+
+
+File: autoconf.info, Node: Quoting and Parameters, Next: Quotation and Nested Macros, Prev: One Macro Call, Up: M4 Quotation
+
+8.1.3 Quoting and Parameters
+----------------------------
+
+When M4 encounters `$' within a macro definition, followed immediately
+by a character it recognizes (`0'...`9', `#', `@', or `*'), it will
+perform M4 parameter expansion. This happens regardless of how many
+layers of quotes the parameter expansion is nested within, or even if
+it occurs in text that will be rescanned as a comment.
+
+ define([none], [$1])
+ =>
+ define([one], [[$1]])
+ =>
+ define([two], [[[$1]]])
+ =>
+ define([comment], [# $1])
+ =>
+ define([active], [ACTIVE])
+ =>
+ none([active])
+ =>ACTIVE
+ one([active])
+ =>active
+ two([active])
+ =>[active]
+ comment([active])
+ =># active
+
+ On the other hand, since autoconf generates shell code, you often
+want to output shell variable expansion, rather than performing M4
+parameter expansion. To do this, you must use M4 quoting to separate
+the `$' from the next character in the definition of your macro. If
+the macro definition occurs in single-quoted text, then insert another
+level of quoting; if the usage is already inside a double-quoted
+string, then split it into concatenated strings.
+
+ define([single], [a single-quoted $[]1 definition])
+ =>
+ define([double], [[a double-quoted $][1 definition]])
+ =>
+ single
+ =>a single-quoted $1 definition
+ double
+ =>a double-quoted $1 definition
+
+ Posix states that M4 implementations are free to provide
+implementation extensions when `${' is encountered in a macro
+definition. Autoconf reserves the longer sequence `${{' for use with
+planned extensions that will be available in the future GNU M4 2.0, but
+guarantees that all other instances of `${' will be output literally.
+Therefore, this idiom can also be used to output shell code parameter
+references:
+
+ define([first], [${1}])first
+ =>${1}
+
+ Posix also states that `$11' should expand to the first parameter
+concatenated with a literal `1', although some versions of GNU M4
+expand the eleventh parameter instead. For portability, you should
+only use single-digit M4 parameter expansion.
+
+ With this in mind, we can explore the cases where macros invoke
+macros...
+
+
+File: autoconf.info, Node: Quotation and Nested Macros, Next: Changequote is Evil, Prev: Quoting and Parameters, Up: M4 Quotation
+
+8.1.4 Quotation and Nested Macros
+---------------------------------
+
+The examples below use the following macros:
+
+ define([car], [$1])
+ define([active], [ACT, IVE])
+ define([array], [int tab[10]])
+
+ Each additional embedded macro call introduces other possible
+interesting quotations:
+
+ car(active)
+ =>ACT
+ car([active])
+ =>ACT, IVE
+ car([[active]])
+ =>active
+
+ In the first case, the top level looks for the arguments of `car',
+and finds `active'. Because M4 evaluates its arguments before applying
+the macro, `active' is expanded, which results in:
+
+ car(ACT, IVE)
+ =>ACT
+
+In the second case, the top level gives `active' as first and only
+argument of `car', which results in:
+
+ active
+ =>ACT, IVE
+
+i.e., the argument is evaluated _after_ the macro that invokes it. In
+the third case, `car' receives `[active]', which results in:
+
+ [active]
+ =>active
+
+exactly as we already saw above.
+
+ The example above, applied to a more realistic example, gives:
+
+ car(int tab[10];)
+ =>int tab10;
+ car([int tab[10];])
+ =>int tab10;
+ car([[int tab[10];]])
+ =>int tab[10];
+
+Huh? The first case is easily understood, but why is the second wrong,
+and the third right? To understand that, you must know that after M4
+expands a macro, the resulting text is immediately subjected to macro
+expansion and quote removal. This means that the quote removal occurs
+twice--first before the argument is passed to the `car' macro, and
+second after the `car' macro expands to the first argument.
+
+ As the author of the Autoconf macro `car', you then consider it to
+be incorrect that your users have to double-quote the arguments of
+`car', so you "fix" your macro. Let's call it `qar' for quoted car:
+
+ define([qar], [[$1]])
+
+and check that `qar' is properly fixed:
+
+ qar([int tab[10];])
+ =>int tab[10];
+
+Ahhh! That's much better.
+
+ But note what you've done: now that the result of `qar' is always a
+literal string, the only time a user can use nested macros is if she
+relies on an _unquoted_ macro call:
+
+ qar(active)
+ =>ACT
+ qar([active])
+ =>active
+
+leaving no way for her to reproduce what she used to do with `car':
+
+ car([active])
+ =>ACT, IVE
+
+Worse yet: she wants to use a macro that produces a set of `cpp' macros:
+
+ define([my_includes], [#include <stdio.h>])
+ car([my_includes])
+ =>#include <stdio.h>
+ qar(my_includes)
+ error-->EOF in argument list
+
+ This macro, `qar', because it double quotes its arguments, forces
+its users to leave their macro calls unquoted, which is dangerous.
+Commas and other active symbols are interpreted by M4 before they are
+given to the macro, often not in the way the users expect. Also,
+because `qar' behaves differently from the other macros, it's an
+exception that should be avoided in Autoconf.
+
+
+File: autoconf.info, Node: Changequote is Evil, Next: Quadrigraphs, Prev: Quotation and Nested Macros, Up: M4 Quotation
+
+8.1.5 `changequote' is Evil
+---------------------------
+
+The temptation is often high to bypass proper quotation, in particular
+when it's late at night. Then, many experienced Autoconf hackers
+finally surrender to the dark side of the force and use the ultimate
+weapon: `changequote'.
+
+ The M4 builtin `changequote' belongs to a set of primitives that
+allow one to adjust the syntax of the language to adjust it to one's
+needs. For instance, by default M4 uses ``' and `'' as quotes, but in
+the context of shell programming (and actually of most programming
+languages), that's about the worst choice one can make: because of
+strings and back-quoted expressions in shell code (such as `'this'' and
+``that`'), and because of literal characters in usual programming
+languages (as in `'0''), there are many unbalanced ``' and `''. Proper
+M4 quotation then becomes a nightmare, if not impossible. In order to
+make M4 useful in such a context, its designers have equipped it with
+`changequote', which makes it possible to choose another pair of
+quotes. M4sugar, M4sh, Autoconf, and Autotest all have chosen to use
+`[' and `]'. Not especially because they are unlikely characters, but
+_because they are characters unlikely to be unbalanced_.
+
+ There are other magic primitives, such as `changecom' to specify
+what syntactic forms are comments (it is common to see `changecom(<!--,
+-->)' when M4 is used to produce HTML pages), `changeword' and
+`changesyntax' to change other syntactic details (such as the character
+to denote the Nth argument, `$' by default, the parentheses around
+arguments, etc.).
+
+ These primitives are really meant to make M4 more useful for specific
+domains: they should be considered like command line options:
+`--quotes', `--comments', `--words', and `--syntax'. Nevertheless,
+they are implemented as M4 builtins, as it makes M4 libraries self
+contained (no need for additional options).
+
+ There lies the problem...
+
+
+ The problem is that it is then tempting to use them in the middle of
+an M4 script, as opposed to its initialization. This, if not carefully
+thought out, can lead to disastrous effects: _you are changing the
+language in the middle of the execution_. Changing and restoring the
+syntax is often not enough: if you happened to invoke macros in between,
+these macros are lost, as the current syntax is probably not the one
+they were implemented with.
+
+
+File: autoconf.info, Node: Quadrigraphs, Next: Balancing Parentheses, Prev: Changequote is Evil, Up: M4 Quotation
+
+8.1.6 Quadrigraphs
+------------------
+
+When writing an Autoconf macro you may occasionally need to generate
+special characters that are difficult to express with the standard
+Autoconf quoting rules. For example, you may need to output the regular
+expression `[^[]', which matches any character other than `['. This
+expression contains unbalanced brackets so it cannot be put easily into
+an M4 macro.
+
+ Additionally, there are a few m4sugar macros (such as `m4_split' and
+`m4_expand') which internally use special markers in addition to the
+regular quoting characters. If the arguments to these macros contain
+the literal strings `-=<{(' or `)}>=-', the macros might behave
+incorrectly.
+
+ You can work around these problems by using one of the following
+"quadrigraphs":
+
+`@<:@'
+ `['
+
+`@:>@'
+ `]'
+
+`@S|@'
+ `$'
+
+`@%:@'
+ `#'
+
+`@{:@'
+ `('
+
+`@:}@'
+ `)'
+
+`@&t@'
+ Expands to nothing.
+
+ Quadrigraphs are replaced at a late stage of the translation process,
+after `m4' is run, so they do not get in the way of M4 quoting. For
+example, the string `^@<:@', independently of its quotation, appears as
+`^[' in the output.
+
+ The empty quadrigraph can be used:
+
+ - to mark trailing spaces explicitly
+
+ Trailing spaces are smashed by `autom4te'. This is a feature.
+
+ - to produce quadrigraphs and other strings reserved by m4sugar
+
+ For instance `@<@&t@:@' produces `@<:@'. For a more contrived
+ example:
+
+ m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
+ m4_split([a )}>=- b -=<{( c])
+ =>[a], [], [B], [], [c]
+ m4_split([a )}@&t@>=- b -=<@&t@{( c])
+ =>[a], [)}>=-], [b], [-=<{(], [c]
+
+ - to escape _occurrences_ of forbidden patterns
+
+ For instance you might want to mention `AC_FOO' in a comment, while
+ still being sure that `autom4te' still catches unexpanded `AC_*'.
+ Then write `AC@&t@_FOO'.
+
+ The name `@&t@' was suggested by Paul Eggert:
+
+ I should give some credit to the `@&t@' pun. The `&' is my own
+ invention, but the `t' came from the source code of the ALGOL68C
+ compiler, written by Steve Bourne (of Bourne shell fame), and
+ which used `mt' to denote the empty string. In C, it would have
+ looked like something like:
+
+ char const mt[] = "";
+
+ but of course the source code was written in Algol 68.
+
+ I don't know where he got `mt' from: it could have been his own
+ invention, and I suppose it could have been a common pun around the
+ Cambridge University computer lab at the time.
+
+
+File: autoconf.info, Node: Balancing Parentheses, Next: Quotation Rule Of Thumb, Prev: Quadrigraphs, Up: M4 Quotation
+
+8.1.7 Dealing with unbalanced parentheses
+-----------------------------------------
+
+One of the pitfalls of portable shell programming is that `case'
+statements require unbalanced parentheses (*note Limitations of Shell
+Builtins: case.). With syntax highlighting editors, the presence of
+unbalanced `)' can interfere with editors that perform syntax
+highlighting of macro contents based on finding the matching `('.
+Another concern is how much editing must be done when transferring code
+snippets between shell scripts and macro definitions. But most
+importantly, the presence of unbalanced parentheses can introduce
+expansion bugs.
+
+ For an example, here is an underquoted attempt to use the macro
+`my_case', which happens to expand to a portable `case' statement:
+
+ AC_DEFUN([my_case],
+ [case $file_name in
+ *.c) echo "C source code";;
+ esac])
+ AS_IF(:, my_case)
+
+In the above example, the `AS_IF' call underquotes its arguments. As a
+result, the unbalanced `)' generated by the premature expansion of
+`my_case' results in expanding `AS_IF' with a truncated parameter, and
+the expansion is syntactically invalid:
+
+ if :; then
+ case $file_name in
+ *.c
+ fi echo "C source code";;
+ esac)
+
+ If nothing else, this should emphasize the importance of the quoting
+arguments to macro calls. On the other hand, there are several
+variations for defining `my_case' to be more robust, even when used
+without proper quoting, each with some benefits and some drawbacks.
+
+ Creative literal shell comment
+ AC_DEFUN([my_case],
+ [case $file_name in #(
+ *.c) echo "C source code";;
+ esac])
+ This version provides balanced parentheses to several editors, and
+ can be copied and pasted into a terminal as is. Unfortunately, it
+ is still unbalanced as an Autoconf argument, since `#(' is an M4
+ comment that masks the normal properties of `('.
+
+ Quadrigraph shell comment
+ AC_DEFUN([my_case],
+ [case $file_name in @%:@(
+ *.c) echo "C source code";;
+ esac])
+ This version provides balanced parentheses to even more editors,
+ and can be used as a balanced Autoconf argument. Unfortunately,
+ it requires some editing before it can be copied and pasted into a
+ terminal, and the use of the quadrigraph `@%:@' for `#' reduces
+ readability.
+
+ Quoting just the parenthesis
+ AC_DEFUN([my_case],
+ [case $file_name in
+ *.c[)] echo "C source code";;
+ esac])
+ This version quotes the `)', so that it can be used as a balanced
+ Autoconf argument. As written, this is not balanced to an editor,
+ but it can be coupled with `[#(]' to meet that need, too.
+ However, it still requires some edits before it can be copied and
+ pasted into a terminal.
+
+ Double-quoting the entire statement
+ AC_DEFUN([my_case],
+ [[case $file_name in #(
+ *.c) echo "C source code";;
+ esac]])
+ Since the entire macro is double-quoted, there is no problem with
+ using this as an Autoconf argument; and since the double-quoting
+ is over the entire statement, this code can be easily copied and
+ pasted into a terminal. However, the double quoting prevents the
+ expansion of any macros inside the case statement, which may cause
+ its own set of problems.
+
+ Using `AS_CASE'
+ AC_DEFUN([my_case],
+ [AS_CASE([$file_name],
+ [*.c], [echo "C source code"])])
+ This version avoids the balancing issue altogether, by relying on
+ `AS_CASE' (*note Common Shell Constructs::); it also allows for the
+ expansion of `AC_REQUIRE' to occur prior to the entire case
+ statement, rather than within a branch of the case statement that
+ might not be taken. However, the abstraction comes with a penalty
+ that it is no longer a quick copy, paste, and edit to get back to
+ shell code.
+
+
+File: autoconf.info, Node: Quotation Rule Of Thumb, Prev: Balancing Parentheses, Up: M4 Quotation
+
+8.1.8 Quotation Rule Of Thumb
+-----------------------------
+
+To conclude, the quotation rule of thumb is:
+
+ _One pair of quotes per pair of parentheses._
+
+ Never over-quote, never under-quote, in particular in the definition
+of macros. In the few places where the macros need to use brackets
+(usually in C program text or regular expressions), properly quote _the
+arguments_!
+
+ It is common to read Autoconf programs with snippets like:
+
+ AC_TRY_LINK(
+ changequote(<<, >>)dnl
+ <<#include <time.h>
+ #ifndef tzname /* For SGI. */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+ #endif>>,
+ changequote([, ])dnl
+ [atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
+
+which is incredibly useless since `AC_TRY_LINK' is _already_ double
+quoting, so you just need:
+
+ AC_TRY_LINK(
+ [#include <time.h>
+ #ifndef tzname /* For SGI. */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+ #endif],
+ [atoi (*tzname);],
+ [ac_cv_var_tzname=yes],
+ [ac_cv_var_tzname=no])
+
+The M4-fluent reader might note that these two examples are rigorously
+equivalent, since M4 swallows both the `changequote(<<, >>)' and `<<'
+`>>' when it "collects" the arguments: these quotes are not part of the
+arguments!
+
+ Simplified, the example above is just doing this:
+
+ changequote(<<, >>)dnl
+ <<[]>>
+ changequote([, ])dnl
+
+instead of simply:
+
+ [[]]
+
+ With macros that do not double quote their arguments (which is the
+rule), double-quote the (risky) literals:
+
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
+ [[#include <time.h>
+ #ifndef tzname /* For SGI. */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+ #endif]],
+ [atoi (*tzname);])],
+ [ac_cv_var_tzname=yes],
+ [ac_cv_var_tzname=no])
+
+ Please note that the macro `AC_TRY_LINK' is obsolete, so you really
+should be using `AC_LINK_IFELSE' instead.
+
+ *Note Quadrigraphs::, for what to do if you run into a hopeless case
+where quoting does not suffice.
+
+ When you create a `configure' script using newly written macros,
+examine it carefully to check whether you need to add more quotes in
+your macros. If one or more words have disappeared in the M4 output,
+you need more quotes. When in doubt, quote.
+
+ However, it's also possible to put on too many layers of quotes. If
+this happens, the resulting `configure' script may contain unexpanded
+macros. The `autoconf' program checks for this problem by looking for
+the string `AC_' in `configure'. However, this heuristic does not work
+in general: for example, it does not catch overquoting in `AC_DEFINE'
+descriptions.
+
+
+File: autoconf.info, Node: Using autom4te, Next: Programming in M4sugar, Prev: M4 Quotation, Up: Programming in M4
+
+8.2 Using `autom4te'
+====================
+
+The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
+to Autoconf per se, heavily rely on M4. All these different uses
+revealed common needs factored into a layer over M4: `autom4te'(1).
+
+ `autom4te' is a preprocessor that is like `m4'. It supports M4
+extensions designed for use in tools like Autoconf.
+
+* Menu:
+
+* autom4te Invocation:: A GNU M4 wrapper
+* Customizing autom4te:: Customizing the Autoconf package
+
+ ---------- Footnotes ----------
+
+ (1) Yet another great name from Lars J. Aas.
+
+
+File: autoconf.info, Node: autom4te Invocation, Next: Customizing autom4te, Up: Using autom4te
+
+8.2.1 Invoking `autom4te'
+-------------------------
+
+The command line arguments are modeled after M4's:
+
+ autom4te OPTIONS FILES
+
+where the FILES are directly passed to `m4'. By default, GNU M4 is
+found during configuration, but the environment variable `M4' can be
+set to tell `autom4te' where to look. In addition to the regular
+expansion, it handles the replacement of the quadrigraphs (*note
+Quadrigraphs::), and of `__oline__', the current line in the output.
+It supports an extended syntax for the FILES:
+
+`FILE.m4f'
+ This file is an M4 frozen file. Note that _all the previous files
+ are ignored_. See the option `--melt' for the rationale.
+
+`FILE?'
+ If found in the library path, the FILE is included for expansion,
+ otherwise it is ignored instead of triggering a failure.
+
+
+ Of course, it supports the Autoconf common subset of options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Report processing steps.
+
+`--debug'
+`-d'
+ Don't remove the temporary files and be even more verbose.
+
+`--include=DIR'
+`-I DIR'
+ Also look for input files in DIR. Multiple invocations accumulate.
+
+`--output=FILE'
+`-o FILE'
+ Save output (script or trace) to FILE. The file `-' stands for
+ the standard output.
+
+
+ As an extension of `m4', it includes the following options:
+
+`--warnings=CATEGORY'
+`-W CATEGORY'
+ Report the warnings related to CATEGORY (which can actually be a
+ comma separated list). *Note Reporting Messages::, macro
+ `AC_DIAGNOSE', for a comprehensive list of categories. Special
+ values include:
+
+ `all'
+ report all the warnings
+
+ `none'
+ report none
+
+ `error'
+ treats warnings as errors
+
+ `no-CATEGORY'
+ disable warnings falling into CATEGORY
+
+ Warnings about `syntax' are enabled by default, and the environment
+ variable `WARNINGS', a comma separated list of categories, is
+ honored. `autom4te -W CATEGORY' actually behaves as if you had
+ run:
+
+ autom4te --warnings=syntax,$WARNINGS,CATEGORY
+
+ For example, if you want to disable defaults and `WARNINGS' of
+ `autom4te', but enable the warnings about obsolete constructs, you
+ would use `-W none,obsolete'.
+
+ `autom4te' displays a back trace for errors, but not for warnings;
+ if you want them, just pass `-W error'.
+
+`--melt'
+`-M'
+ Do not use frozen files. Any argument `FILE.m4f' is replaced by
+ `FILE.m4'. This helps tracing the macros which are executed only
+ when the files are frozen, typically `m4_define'. For instance,
+ running:
+
+ autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
+
+ is roughly equivalent to running:
+
+ m4 1.m4 2.m4 3.m4 4.m4 input.m4
+
+ while
+
+ autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
+
+ is equivalent to:
+
+ m4 --reload-state=4.m4f input.m4
+
+`--freeze'
+`-F'
+ Produce a frozen state file. `autom4te' freezing is stricter than
+ M4's: it must produce no warnings, and no output other than empty
+ lines (a line with white space is _not_ empty) and comments
+ (starting with `#'). Unlike `m4''s similarly-named option, this
+ option takes no argument:
+
+ autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
+
+ corresponds to
+
+ m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
+
+`--mode=OCTAL-MODE'
+`-m OCTAL-MODE'
+ Set the mode of the non-traces output to OCTAL-MODE; by default
+ `0666'.
+
+
+ As another additional feature over `m4', `autom4te' caches its
+results. GNU M4 is able to produce a regular output and traces at the
+same time. Traces are heavily used in the GNU Build System:
+`autoheader' uses them to build `config.h.in', `autoreconf' to
+determine what GNU Build System components are used, `automake' to
+"parse" `configure.ac' etc. To avoid recomputation, traces are cached
+while performing regular expansion, and conversely. This cache is
+(actually, the caches are) stored in the directory `autom4te.cache'.
+_It can safely be removed_ at any moment (especially if for some reason
+`autom4te' considers it trashed).
+
+`--cache=DIRECTORY'
+`-C DIRECTORY'
+ Specify the name of the directory where the result should be
+ cached. Passing an empty value disables caching. Be sure to pass
+ a relative file name, as for the time being, global caches are not
+ supported.
+
+`--no-cache'
+ Don't cache the results.
+
+`--force'
+`-f'
+ If a cache is used, consider it obsolete (but update it anyway).
+
+
+ Because traces are so important to the GNU Build System, `autom4te'
+provides high level tracing features as compared to M4, and helps
+exploiting the cache:
+
+`--trace=MACRO[:FORMAT]'
+`-t MACRO[:FORMAT]'
+ Trace the invocations of MACRO according to the FORMAT. Multiple
+ `--trace' arguments can be used to list several macros. Multiple
+ `--trace' arguments for a single macro are not cumulative;
+ instead, you should just make FORMAT as long as needed.
+
+ The FORMAT is a regular string, with newlines if desired, and
+ several special escape codes. It defaults to `$f:$l:$n:$%'. It
+ can use the following special escapes:
+
+ `$$'
+ The character `$'.
+
+ `$f'
+ The file name from which MACRO is called.
+
+ `$l'
+ The line number from which MACRO is called.
+
+ `$d'
+ The depth of the MACRO call. This is an M4 technical detail
+ that you probably don't want to know about.
+
+ `$n'
+ The name of the MACRO.
+
+ `$NUM'
+ The NUMth argument of the call to MACRO.
+
+ `$@'
+ `$SEP@'
+ `${SEPARATOR}@'
+ All the arguments passed to MACRO, separated by the character
+ SEP or the string SEPARATOR (`,' by default). Each argument
+ is quoted, i.e., enclosed in a pair of square brackets.
+
+ `$*'
+ `$SEP*'
+ `${SEPARATOR}*'
+ As above, but the arguments are not quoted.
+
+ `$%'
+ `$SEP%'
+ `${SEPARATOR}%'
+ As above, but the arguments are not quoted, all new line
+ characters in the arguments are smashed, and the default
+ separator is `:'.
+
+ The escape `$%' produces single-line trace outputs (unless
+ you put newlines in the `separator'), while `$@' and `$*' do
+ not.
+
+ *Note autoconf Invocation::, for examples of trace uses.
+
+`--preselect=MACRO'
+`-p MACRO'
+ Cache the traces of MACRO, but do not enable traces. This is
+ especially important to save CPU cycles in the future. For
+ instance, when invoked, `autoconf' preselects all the macros that
+ `autoheader', `automake', `autoreconf', etc., trace, so that
+ running `m4' is not needed to trace them: the cache suffices.
+ This results in a huge speed-up.
+
+
+ Finally, `autom4te' introduces the concept of "Autom4te libraries".
+They consists in a powerful yet extremely simple feature: sets of
+combined command line arguments:
+
+`--language=LANGUAGE'
+`-l LANGUAGE'
+ Use the LANGUAGE Autom4te library. Current languages include:
+
+ `M4sugar'
+ create M4sugar output.
+
+ `M4sh'
+ create M4sh executable shell scripts.
+
+ `Autotest'
+ create Autotest executable test suites.
+
+ `Autoconf-without-aclocal-m4'
+ create Autoconf executable configure scripts without reading
+ `aclocal.m4'.
+
+ `Autoconf'
+ create Autoconf executable configure scripts. This language
+ inherits all the characteristics of
+ `Autoconf-without-aclocal-m4' and additionally reads
+ `aclocal.m4'.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend directory DIR to the search path. This is used to include
+ the language-specific files before any third-party macros.
+
+
+ As an example, if Autoconf is installed in its default location,
+`/usr/local', the command `autom4te -l m4sugar foo.m4' is strictly
+equivalent to the command:
+
+ autom4te --prepend-include /usr/local/share/autoconf \
+ m4sugar/m4sugar.m4f --warnings syntax foo.m4
+
+Recursive expansion applies here: the command `autom4te -l m4sh foo.m4'
+is the same as `autom4te --language M4sugar m4sugar/m4sh.m4f foo.m4',
+i.e.:
+
+ autom4te --prepend-include /usr/local/share/autoconf \
+ m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4
+
+The definition of the languages is stored in `autom4te.cfg'.
+
+
+File: autoconf.info, Node: Customizing autom4te, Prev: autom4te Invocation, Up: Using autom4te
+
+8.2.2 Customizing `autom4te'
+----------------------------
+
+One can customize `autom4te' via `~/.autom4te.cfg' (i.e., as found in
+the user home directory), and `./.autom4te.cfg' (i.e., as found in the
+directory from which `autom4te' is run). The order is first reading
+`autom4te.cfg', then `~/.autom4te.cfg', then `./.autom4te.cfg', and
+finally the command line arguments.
+
+ In these text files, comments are introduced with `#', and empty
+lines are ignored. Customization is performed on a per-language basis,
+wrapped in between a `begin-language: "LANGUAGE"', `end-language:
+"LANGUAGE"' pair.
+
+ Customizing a language stands for appending options (*note autom4te
+Invocation::) to the current definition of the language. Options, and
+more generally arguments, are introduced by `args: ARGUMENTS'. You may
+use the traditional shell syntax to quote the ARGUMENTS.
+
+ As an example, to disable Autoconf caches (`autom4te.cache')
+globally, include the following lines in `~/.autom4te.cfg':
+
+## ------------------ ##
+## User Preferences. ##
+## ------------------ ##
+
+begin-language: "Autoconf-without-aclocal-m4"
+args: --no-cache
+end-language: "Autoconf-without-aclocal-m4"
+
+
+File: autoconf.info, Node: Programming in M4sugar, Next: Debugging via autom4te, Prev: Using autom4te, Up: Programming in M4
+
+8.3 Programming in M4sugar
+==========================
+
+M4 by itself provides only a small, but sufficient, set of all-purpose
+macros. M4sugar introduces additional generic macros. Its name was
+coined by Lars J. Aas: "Readability And Greater Understanding Stands 4
+M4sugar".
+
+ M4sugar reserves the macro namespace `^_m4_' for internal use, and
+the macro namespace `^m4_' for M4sugar macros. You should not define
+your own macros into these namespaces.
+
+* Menu:
+
+* Redefined M4 Macros:: M4 builtins changed in M4sugar
+* Diagnostic Macros:: Diagnostic messages from M4sugar
+* Diversion support:: Diversions in M4sugar
+* Conditional constructs:: Conditions in M4
+* Looping constructs:: Iteration in M4
+* Evaluation Macros:: More quotation and evaluation control
+* Text processing Macros:: String manipulation in M4
+* Number processing Macros:: Arithmetic computation in M4
+* Set manipulation Macros:: Set manipulation in M4
+* Forbidden Patterns:: Catching unexpanded macros
+
+
+File: autoconf.info, Node: Redefined M4 Macros, Next: Diagnostic Macros, Up: Programming in M4sugar
+
+8.3.1 Redefined M4 Macros
+-------------------------
+
+With a few exceptions, all the M4 native macros are moved in the `m4_'
+pseudo-namespace, e.g., M4sugar renames `define' as `m4_define' etc.
+
+ The list of macros unchanged from M4, except for their name, is:
+ - m4_builtin
+
+ - m4_changecom
+
+ - m4_changequote
+
+ - m4_debugfile
+
+ - m4_debugmode
+
+ - m4_decr
+
+ - m4_define
+
+ - m4_divnum
+
+ - m4_errprint
+
+ - m4_esyscmd
+
+ - m4_eval
+
+ - m4_format
+
+ - m4_ifdef
+
+ - m4_incr
+
+ - m4_index
+
+ - m4_indir
+
+ - m4_len
+
+ - m4_pushdef
+
+ - m4_shift
+
+ - m4_substr
+
+ - m4_syscmd
+
+ - m4_sysval
+
+ - m4_traceoff
+
+ - m4_traceon
+
+ - m4_translit
+
+ Some M4 macros are redefined, and are slightly incompatible with
+their native equivalent.
+
+ -- Macro: __file__
+ -- Macro: __line__
+ All M4 macros starting with `__' retain their original name: for
+ example, no `m4__file__' is defined.
+
+ -- Macro: __oline__
+ This is not technically a macro, but a feature of Autom4te. The
+ sequence `__oline__' can be used similarly to the other m4sugar
+ location macros, but rather than expanding to the location of the
+ input file, it is translated to the line number where it appears
+ in the output file after all other M4 expansions.
+
+ -- Macro: dnl
+ This macro kept its original name: no `m4_dnl' is defined.
+
+ -- Macro: m4_bpatsubst (STRING, REGEXP, [REPLACEMENT])
+ This macro corresponds to `patsubst'. The name `m4_patsubst' is
+ kept for future versions of M4sugar, once GNU M4 2.0 is released
+ and supports extended regular expression syntax.
+
+ -- Macro: m4_bregexp (STRING, REGEXP, [REPLACEMENT])
+ This macro corresponds to `regexp'. The name `m4_regexp' is kept
+ for future versions of M4sugar, once GNU M4 2.0 is released and
+ supports extended regular expression syntax.
+
+ -- Macro: m4_copy (SOURCE, DEST)
+ -- Macro: m4_copy_force (SOURCE, DEST)
+ -- Macro: m4_rename (SOURCE, DEST)
+ -- Macro: m4_rename_force (SOURCE, DEST)
+ These macros aren't directly builtins, but are closely related to
+ `m4_pushdef' and `m4_defn'. `m4_copy' and `m4_rename' ensure that
+ DEST is undefined, while `m4_copy_force' and `m4_rename_force'
+ overwrite any existing definition. All four macros then proceed
+ to copy the entire pushdef stack of definitions of SOURCE over to
+ DEST. `m4_copy' and `m4_copy_force' preserve the source
+ (including in the special case where SOURCE is undefined), while
+ `m4_rename' and `m4_rename_force' undefine the original macro name
+ (making it an error to rename an undefined SOURCE).
+
+ Note that attempting to invoke a renamed macro might not work,
+ since the macro may have a dependence on helper macros accessed
+ via composition of `$0' but that were not also renamed; likewise,
+ other macros may have a hard-coded dependence on SOURCE and could
+ break if SOURCE has been deleted. On the other hand, it is always
+ safe to rename a macro to temporarily move it out of the way, then
+ rename it back later to restore original semantics.
+
+ -- Macro: m4_defn (MACRO...)
+ This macro fails if MACRO is not defined, even when using older
+ versions of M4 that did not warn. See `m4_undefine'.
+ Unfortunately, in order to support these older versions of M4,
+ there are some situations involving unbalanced quotes where
+ concatenating multiple macros together will work in newer M4 but
+ not in m4sugar; use quadrigraphs to work around this.
+
+ -- Macro: m4_divert (DIVERSION)
+ M4sugar relies heavily on diversions, so rather than behaving as a
+ primitive, `m4_divert' behaves like:
+ m4_divert_pop()m4_divert_push([DIVERSION])
+ *Note Diversion support::, for more details about the use of the
+ diversion stack. In particular, this implies that DIVERSION
+ should be a named diversion rather than a raw number. But be
+ aware that it is seldom necessary to explicitly change the
+ diversion stack, and that when done incorrectly, it can lead to
+ syntactically invalid scripts.
+
+ -- Macro: m4_dumpdef (NAME...)
+ -- Macro: m4_dumpdefs (NAME...)
+ `m4_dumpdef' is like the M4 builtin, except that this version
+ requires at least one argument, output always goes to standard
+ error rather than the current debug file, no sorting is done on
+ multiple arguments, and an error is issued if any NAME is
+ undefined. `m4_dumpdefs' is a convenience macro that calls
+ `m4_dumpdef' for all of the `m4_pushdef' stack of definitions,
+ starting with the current, and silently does nothing if NAME is
+ undefined.
+
+ Unfortunately, due to a limitation in M4 1.4.x, any macro defined
+ as a builtin is output as the empty string. This behavior is
+ rectified by using M4 1.6 or newer. However, this behavior
+ difference means that `m4_dumpdef' should only be used while
+ developing m4sugar macros, and never in the final published form
+ of a macro.
+
+ -- Macro: m4_esyscmd_s (COMMAND)
+ Like `m4_esyscmd', this macro expands to the result of running
+ COMMAND in a shell. The difference is that any trailing newlines
+ are removed, so that the output behaves more like shell command
+ substitution.
+
+ -- Macro: m4_exit (EXIT-STATUS)
+ This macro corresponds to `m4exit'.
+
+ -- Macro: m4_if (COMMENT)
+ -- Macro: m4_if (STRING-1, STRING-2, EQUAL, [NOT-EQUAL])
+ -- Macro: m4_if (STRING-1, STRING-2, EQUAL-1, STRING-3, STRING-4,
+ EQUAL-2, ..., [NOT-EQUAL])
+ This macro corresponds to `ifelse'. STRING-1 and STRING-2 are
+ compared literally, so usually one of the two arguments is passed
+ unquoted. *Note Conditional constructs::, for more conditional
+ idioms.
+
+ -- Macro: m4_include (FILE)
+ -- Macro: m4_sinclude (FILE)
+ Like the M4 builtins, but warn against multiple inclusions of FILE.
+
+ -- Macro: m4_mkstemp (TEMPLATE)
+ -- Macro: m4_maketemp (TEMPLATE)
+ Posix requires `maketemp' to replace the trailing `X' characters
+ in TEMPLATE with the process id, without regards to the existence
+ of a file by that name, but this a security hole. When this was
+ pointed out to the Posix folks, they agreed to invent a new macro
+ `mkstemp' that always creates a uniquely named file, but not all
+ versions of GNU M4 support the new macro. In M4sugar,
+ `m4_maketemp' and `m4_mkstemp' are synonyms for each other, and
+ both have the secure semantics regardless of which macro the
+ underlying M4 provides.
+
+ -- Macro: m4_popdef (MACRO...)
+ This macro fails if MACRO is not defined, even when using older
+ versions of M4 that did not warn. See `m4_undefine'.
+
+ -- Macro: m4_undefine (MACRO...)
+ This macro fails if MACRO is not defined, even when using older
+ versions of M4 that did not warn. Use
+
+ m4_ifdef([MACRO], [m4_undefine([MACRO])])
+
+ if you are not sure whether MACRO is defined.
+
+ -- Macro: m4_undivert (DIVERSION...)
+ Unlike the M4 builtin, at least one DIVERSION must be specified.
+ Also, since the M4sugar diversion stack prefers named diversions,
+ the use of `m4_undivert' to include files is risky. *Note
+ Diversion support::, for more details about the use of the
+ diversion stack. But be aware that it is seldom necessary to
+ explicitly change the diversion stack, and that when done
+ incorrectly, it can lead to syntactically invalid scripts.
+
+ -- Macro: m4_wrap (TEXT)
+ -- Macro: m4_wrap_lifo (TEXT)
+ These macros correspond to `m4wrap'. Posix requires arguments of
+ multiple wrap calls to be reprocessed at EOF in the same order as
+ the original calls (first-in, first-out). GNU M4 versions through
+ 1.4.10, however, reprocess them in reverse order (last-in,
+ first-out). Both orders are useful, therefore, you can rely on
+ `m4_wrap' to provide FIFO semantics and `m4_wrap_lifo' for LIFO
+ semantics, regardless of the underlying GNU M4 version.
+
+ Unlike the GNU M4 builtin, these macros only recognize one
+ argument, and avoid token pasting between consecutive invocations.
+ On the other hand, nested calls to `m4_wrap' from within wrapped
+ text work just as in the builtin.
+
+
+File: autoconf.info, Node: Diagnostic Macros, Next: Diversion support, Prev: Redefined M4 Macros, Up: Programming in M4sugar
+
+8.3.2 Diagnostic messages from M4sugar
+--------------------------------------
+
+When macros statically diagnose abnormal situations, benign or fatal,
+they should report them using these macros. For issuing dynamic issues,
+i.e., when `configure' is run, see *note Printing Messages::.
+
+ -- Macro: m4_assert (EXPRESSION, [EXIT-STATUS = `1'])
+ Assert that the arithmetic EXPRESSION evaluates to non-zero.
+ Otherwise, issue a fatal error, and exit `autom4te' with
+ EXIT-STATUS.
+
+ -- Macro: m4_errprintn (MESSAGE)
+ Similar to the builtin `m4_errprint', except that a newline is
+ guaranteed after MESSAGE.
+
+ -- Macro: m4_fatal (MESSAGE)
+ Report a severe error MESSAGE prefixed with the current location,
+ and have `autom4te' die.
+
+ -- Macro: m4_location
+ Useful as a prefix in a message line. Short for:
+ __file__:__line__
+
+ -- Macro: m4_warn (CATEGORY, MESSAGE)
+ Report MESSAGE as a warning (or as an error if requested by the
+ user) if warnings of the CATEGORY are turned on. If the message
+ is emitted, it is prefixed with the current location, and followed
+ by a call trace of all macros defined via `AC_DEFUN' used to get
+ to the current expansion. You are encouraged to use standard
+ categories, which currently include:
+
+ `all'
+ messages that don't fall into one of the following
+ categories. Use of an empty CATEGORY is equivalent.
+
+ `cross'
+ related to cross compilation issues.
+
+ `obsolete'
+ use of an obsolete construct.
+
+ `syntax'
+ dubious syntactic constructs, incorrectly ordered macro calls.
+
+
+File: autoconf.info, Node: Diversion support, Next: Conditional constructs, Prev: Diagnostic Macros, Up: Programming in M4sugar
+
+8.3.3 Diversion support
+-----------------------
+
+M4sugar makes heavy use of diversions under the hood, because it is
+often the case that text that must appear early in the output is not
+discovered until late in the input. Additionally, some of the
+topological sorting algorithms used in resolving macro dependencies use
+diversions. However, most macros should not need to change diversions
+directly, but rather rely on higher-level M4sugar macros to manage
+diversions transparently. If you change diversions improperly, you
+risk generating a syntactically invalid script, because an incorrect
+diversion will violate assumptions made by many macros about whether
+prerequisite text has been previously output. In short, if you
+manually change the diversion, you should not expect any macros
+provided by the Autoconf package to work until you have restored the
+diversion stack back to its original state.
+
+ In the rare case that it is necessary to write a macro that
+explicitly outputs text to a different diversion, it is important to be
+aware of an M4 limitation regarding diversions: text only goes to a
+diversion if it is not part of argument collection. Therefore, any
+macro that changes the current diversion cannot be used as an unquoted
+argument to another macro, but must be expanded at the top level. The
+macro `m4_expand' will diagnose any attempt to change diversions, since
+it is generally useful only as an argument to another macro. The
+following example shows what happens when diversion manipulation is
+attempted within macro arguments:
+
+ m4_do([normal text]
+ m4_divert_push([KILL])unwanted[]m4_divert_pop([KILL])
+ [m4_divert_push([KILL])discarded[]m4_divert_pop([KILL])])dnl
+ =>normal text
+ =>unwanted
+
+Notice that the unquoted text `unwanted' is output, even though it was
+processed while the current diversion was `KILL', because it was
+collected as part of the argument to `m4_do'. However, the text
+`discarded' disappeared as desired, because the diversion changes were
+single-quoted, and were not expanded until the top-level rescan of the
+output of `m4_do'.
+
+ To make diversion management easier, M4sugar uses the concept of
+named diversions. Rather than using diversion numbers directly, it is
+nicer to associate a name with each diversion. The diversion number
+associated with a particular diversion name is an implementation
+detail, and a syntax warning is issued if a diversion number is used
+instead of a name. In general, you should not output text to a named
+diversion until after calling the appropriate initialization routine
+for your language (`m4_init', `AS_INIT', `AT_INIT', ...), although
+there are some exceptions documented below.
+
+ M4sugar defines two named diversions.
+`KILL'
+ Text written to this diversion is discarded. This is the default
+ diversion once M4sugar is initialized.
+
+`GROW'
+ This diversion is used behind the scenes by topological sorting
+ macros, such as `AC_REQUIRE'.
+
+ M4sh adds several more named diversions.
+`BINSH'
+ This diversion is reserved for the `#!' interpreter line.
+
+`HEADER-REVISION'
+ This diversion holds text from `AC_REVISION'.
+
+`HEADER-COMMENT'
+ This diversion holds comments about the purpose of a file.
+
+`HEADER-COPYRIGHT'
+ This diversion is managed by `AC_COPYRIGHT'.
+
+`M4SH-SANITIZE'
+ This diversion contains M4sh sanitization code, used to ensure
+ M4sh is executing in a reasonable shell environment.
+
+`M4SH-INIT'
+ This diversion contains M4sh initialization code, initializing
+ variables that are required by other M4sh macros.
+
+`BODY'
+ This diversion contains the body of the shell code, and is the
+ default diversion once M4sh is initialized.
+
+ Autotest inherits diversions from M4sh, and changes the default
+diversion from `BODY' back to `KILL'. It also adds several more named
+diversions, with the following subset designed for developer use.
+`PREPARE_TESTS'
+ This diversion contains initialization sequences which are executed
+ after `atconfig' and `atlocal', and after all command line
+ arguments have been parsed, but prior to running any tests. It
+ can be used to set up state that is required across all tests.
+ This diversion will work even before `AT_INIT'.
+
+ Autoconf inherits diversions from M4sh, and adds the following named
+diversions which developers can utilize.
+`DEFAULTS'
+ This diversion contains shell variable assignments to set defaults
+ that must be in place before arguments are parsed. This diversion
+ is placed early enough in `configure' that it is unsafe to expand
+ any autoconf macros into this diversion.
+
+`HELP_ENABLE'
+ If `AC_PRESERVE_HELP_ORDER' was used, then text placed in this
+ diversion will be included as part of a quoted here-doc providing
+ all of the `--help' output of `configure' related to options
+ created by `AC_ARG_WITH' and `AC_ARG_ENABLE'.
+
+`INIT_PREPARE'
+ This diversion occurs after all command line options have been
+ parsed, but prior to the main body of the `configure' script. This
+ diversion is the last chance to insert shell code such as variable
+ assignments or shell function declarations that will used by the
+ expansion of other macros.
+
+ For now, the remaining named diversions of Autoconf, Autoheader, and
+Autotest are not documented. In other words, intentionally outputting
+text into an undocumented diversion is subject to breakage in a future
+release of Autoconf.
+
+ -- Macro: m4_cleardivert (DIVERSION...)
+ Permanently discard any text that has been diverted into DIVERSION.
+
+ -- Macro: m4_divert_once (DIVERSION, [CONTENT])
+ Similar to `m4_divert_text', except that CONTENT is only output to
+ DIVERSION if this is the first time that `m4_divert_once' has been
+ called with its particular arguments.
+
+ -- Macro: m4_divert_pop ([DIVERSION])
+ If provided, check that the current diversion is indeed DIVERSION.
+ Then change to the diversion located earlier on the stack, giving
+ an error if an attempt is made to pop beyond the initial m4sugar
+ diversion of `KILL'.
+
+ -- Macro: m4_divert_push (DIVERSION)
+ Remember the former diversion on the diversion stack, and output
+ subsequent text into DIVERSION. M4sugar maintains a diversion
+ stack, and issues an error if there is not a matching pop for every
+ push.
+
+ -- Macro: m4_divert_text (DIVERSION, [CONTENT])
+ Output CONTENT and a newline into DIVERSION, without affecting the
+ current diversion. Shorthand for:
+ m4_divert_push([DIVERSION])CONTENT
+ m4_divert_pop([DIVERSION])dnl
+
+ One use of `m4_divert_text' is to develop two related macros, where
+ macro `MY_A' does the work, but adjusts what work is performed
+ based on whether the optional macro `MY_B' has also been expanded.
+ Of course, it is possible to use `AC_BEFORE' within `MY_A' to
+ require that `MY_B' occurs first, if it occurs at all. But this
+ imposes an ordering restriction on the user; it would be nicer if
+ macros `MY_A' and `MY_B' can be invoked in either order. The trick
+ is to let `MY_B' leave a breadcrumb in an early diversion, which
+ `MY_A' can then use to determine whether `MY_B' has been expanded.
+
+ AC_DEFUN([MY_A],
+ [# various actions
+ if test -n "$b_was_used"; then
+ # extra action
+ fi])
+ AC_DEFUN([MY_B],
+ [AC_REQUIRE([MY_A])dnl
+ m4_divert_text([INIT_PREPARE], [b_was_used=true])])
+
+
+ -- Macro: m4_init
+ Initialize the M4sugar environment, setting up the default named
+ diversion to be `KILL'.
+
+
+File: autoconf.info, Node: Conditional constructs, Next: Looping constructs, Prev: Diversion support, Up: Programming in M4sugar
+
+8.3.4 Conditional constructs
+----------------------------
+
+The following macros provide additional conditional constructs as
+convenience wrappers around `m4_if'.
+
+ -- Macro: m4_bmatch (STRING, REGEX-1, VALUE-1, [REGEX-2], [VALUE-2],
+ ..., [DEFAULT])
+ The string STRING is repeatedly compared against a series of REGEX
+ arguments; if a match is found, the expansion is the corresponding
+ VALUE, otherwise, the macro moves on to the next REGEX. If no
+ REGEX match, then the result is the optional DEFAULT, or nothing.
+
+ -- Macro: m4_bpatsubsts (STRING, REGEX-1, SUBST-1, [REGEX-2],
+ [SUBST-2], ...)
+ The string STRING is altered by REGEX-1 and SUBST-1, as if by:
+ m4_bpatsubst([[STRING]], [REGEX], [SUBST])
+
+ The result of the substitution is then passed through the next set
+ of REGEX and SUBST, and so forth. An empty SUBST implies deletion
+ of any matched portions in the current string. Note that this
+ macro over-quotes STRING; this behavior is intentional, so that
+ the result of each step of the recursion remains as a quoted
+ string. However, it means that anchors (`^' and `$' in the REGEX
+ will line up with the extra quotations, and not the characters of
+ the original string. The overquoting is removed after the final
+ substitution.
+
+ -- Macro: m4_case (STRING, VALUE-1, IF-VALUE-1, [VALUE-2],
+ [IF-VALUE-2], ..., [DEFAULT])
+ Test STRING against multiple VALUE possibilities, resulting in the
+ first IF-VALUE for a match, or in the optional DEFAULT. This is
+ shorthand for:
+ m4_if([STRING], [VALUE-1], [IF-VALUE-1],
+ [STRING], [VALUE-2], [IF-VALUE-2], ...,
+ [DEFAULT])
+
+ -- Macro: m4_cond (TEST-1, VALUE-1, IF-VALUE-1, [TEST-2], [VALUE-2],
+ [IF-VALUE-2], ..., [DEFAULT])
+ This macro was introduced in Autoconf 2.62. Similar to `m4_if',
+ except that each TEST is expanded only when it is encountered.
+ This is useful for short-circuiting expensive tests; while `m4_if'
+ requires all its strings to be expanded up front before doing
+ comparisons, `m4_cond' only expands a TEST when all earlier tests
+ have failed.
+
+ For an example, these two sequences give the same result, but in
+ the case where `$1' does not contain a backslash, the `m4_cond'
+ version only expands `m4_index' once, instead of five times, for
+ faster computation if this is a common case for `$1'. Notice that
+ every third argument is unquoted for `m4_if', and quoted for
+ `m4_cond':
+
+ m4_if(m4_index([$1], [\]), [-1], [$2],
+ m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
+ m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
+ m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
+ m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
+ [$2])
+ m4_cond([m4_index([$1], [\])], [-1], [$2],
+ [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
+ [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
+ [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
+ [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
+ [$2])
+
+ -- Macro: m4_default (EXPR-1, EXPR-2)
+ -- Macro: m4_default_quoted (EXPR-1, EXPR-2)
+ -- Macro: m4_default_nblank (EXPR-1, [EXPR-2])
+ -- Macro: m4_default_nblank_quoted (EXPR-1, [EXPR-2])
+ If EXPR-1 contains text, use it. Otherwise, select EXPR-2.
+ `m4_default' expands the result, while `m4_default_quoted' does
+ not. Useful for providing a fixed default if the expression that
+ results in EXPR-1 would otherwise be empty. The difference
+ between `m4_default' and `m4_default_nblank' is whether an
+ argument consisting of just blanks (space, tab, newline) is
+ significant. When using the expanding versions, note that an
+ argument may contain text but still expand to an empty string.
+
+ m4_define([active], [ACTIVE])dnl
+ m4_define([empty], [])dnl
+ m4_define([demo1], [m4_default([$1], [$2])])dnl
+ m4_define([demo2], [m4_default_quoted([$1], [$2])])dnl
+ m4_define([demo3], [m4_default_nblank([$1], [$2])])dnl
+ m4_define([demo4], [m4_default_nblank_quoted([$1], [$2])])dnl
+ demo1([active], [default])
+ =>ACTIVE
+ demo1([], [active])
+ =>ACTIVE
+ demo1([empty], [text])
+ =>
+ -demo1([ ], [active])-
+ =>- -
+ demo2([active], [default])
+ =>active
+ demo2([], [active])
+ =>active
+ demo2([empty], [text])
+ =>empty
+ -demo2([ ], [active])-
+ =>- -
+ demo3([active], [default])
+ =>ACTIVE
+ demo3([], [active])
+ =>ACTIVE
+ demo3([empty], [text])
+ =>
+ -demo3([ ], [active])-
+ =>-ACTIVE-
+ demo4([active], [default])
+ =>active
+ demo4([], [active])
+ =>active
+ demo4([empty], [text])
+ =>empty
+ -demo4([ ], [active])-
+ =>-active-
+
+ -- Macro: m4_define_default (MACRO, [DEFAULT-DEFINITION])
+ If MACRO does not already have a definition, then define it to
+ DEFAULT-DEFINITION.
+
+ -- Macro: m4_ifblank (COND, [IF-BLANK], [IF-TEXT])
+ -- Macro: m4_ifnblank (COND, [IF-TEXT], [IF-BLANK])
+ If COND is empty or consists only of blanks (space, tab, newline),
+ then expand IF-BLANK; otherwise, expand IF-TEXT. Two variants
+ exist, in order to make it easier to select the correct logical
+ sense when using only two parameters. Note that this is more
+ efficient than the equivalent behavior of:
+ m4_ifval(m4_normalize([COND]), IF-TEXT, IF-BLANK)
+
+ -- Macro: m4_ifndef (MACRO, IF-NOT-DEFINED, [IF-DEFINED])
+ This is shorthand for:
+ m4_ifdef([MACRO], [IF-DEFINED], [IF-NOT-DEFINED])
+
+ -- Macro: m4_ifset (MACRO, [IF-TRUE], [IF-FALSE])
+ If MACRO is undefined, or is defined as the empty string, expand
+ to IF-FALSE. Otherwise, expands to IF-TRUE. Similar to:
+ m4_ifval(m4_defn([MACRO]), [IF-TRUE], [IF-FALSE])
+ except that it is not an error if MACRO is undefined.
+
+ -- Macro: m4_ifval (COND, [IF-TRUE], [IF-FALSE])
+ Expands to IF-TRUE if COND is not empty, otherwise to IF-FALSE.
+ This is shorthand for:
+ m4_if([COND], [], [IF-FALSE], [IF-TRUE])
+
+ -- Macro: m4_ifvaln (COND, [IF-TRUE], [IF-FALSE])
+ Similar to `m4_ifval', except guarantee that a newline is present
+ after any non-empty expansion. Often followed by `dnl'.
+
+ -- Macro: m4_n (TEXT)
+ Expand to TEXT, and add a newline if TEXT is not empty. Often
+ followed by `dnl'.
+
+
+File: autoconf.info, Node: Looping constructs, Next: Evaluation Macros, Prev: Conditional constructs, Up: Programming in M4sugar
+
+8.3.5 Looping constructs
+------------------------
+
+The following macros are useful in implementing recursive algorithms in
+M4, including loop operations. An M4 list is formed by quoting a list
+of quoted elements; generally the lists are comma-separated, although
+`m4_foreach_w' is whitespace-separated. For example, the list `[[a],
+[b,c]]' contains two elements: `[a]' and `[b,c]'. It is common to see
+lists with unquoted elements when those elements are not likely to be
+macro names, as in `[fputc_unlocked, fgetc_unlocked]'.
+
+ Although not generally recommended, it is possible for quoted lists
+to have side effects; all side effects are expanded only once, and
+prior to visiting any list element. On the other hand, the fact that
+unquoted macros are expanded exactly once means that macros without
+side effects can be used to generate lists. For example,
+
+ m4_foreach([i], [[1], [2], [3]m4_errprintn([hi])], [i])
+ error-->hi
+ =>123
+ m4_define([list], [[1], [2], [3]])
+ =>
+ m4_foreach([i], [list], [i])
+ =>123
+
+ -- Macro: m4_argn (N, [ARG]...)
+ Extracts argument N (larger than 0) from the remaining arguments.
+ If there are too few arguments, the empty string is used. For any
+ N besides 1, this is more efficient than the similar
+ `m4_car(m4_shiftn([N], [], [ARG...]))'.
+
+ -- Macro: m4_car (ARG...)
+ Expands to the quoted first ARG. Can be used with `m4_cdr' to
+ recursively iterate through a list. Generally, when using quoted
+ lists of quoted elements, `m4_car' should be called without any
+ extra quotes.
+
+ -- Macro: m4_cdr (ARG...)
+ Expands to a quoted list of all but the first ARG, or the empty
+ string if there was only one argument. Generally, when using
+ quoted lists of quoted elements, `m4_cdr' should be called without
+ any extra quotes.
+
+ For example, this is a simple implementation of `m4_map'; note how
+ each iteration checks for the end of recursion, then merely
+ applies the first argument to the first element of the list, then
+ repeats with the rest of the list. (The actual implementation in
+ M4sugar is a bit more involved, to gain some speed and share code
+ with `m4_map_sep', and also to avoid expanding side effects in
+ `$2' twice).
+ m4_define([m4_map], [m4_ifval([$2],
+ [m4_apply([$1], m4_car($2))[]$0([$1], m4_cdr($2))])])dnl
+ m4_map([ m4_eval], [[[1]], [[1+1]], [[10],[16]]])
+ => 1 2 a
+
+ -- Macro: m4_for (VAR, FIRST, LAST, [STEP], EXPRESSION)
+ Loop over the numeric values between FIRST and LAST including
+ bounds by increments of STEP. For each iteration, expand
+ EXPRESSION with the numeric value assigned to VAR. If STEP is
+ omitted, it defaults to `1' or `-1' depending on the order of the
+ limits. If given, STEP has to match this order. The number of
+ iterations is determined independently from definition of VAR;
+ iteration cannot be short-circuited or lengthened by modifying VAR
+ from within EXPRESSION.
+
+ -- Macro: m4_foreach (VAR, LIST, EXPRESSION)
+ Loop over the comma-separated M4 list LIST, assigning each value
+ to VAR, and expand EXPRESSION. The following example outputs two
+ lines:
+
+ m4_foreach([myvar], [[foo], [bar, baz]],
+ [echo myvar
+ ])dnl
+ =>echo foo
+ =>echo bar, baz
+
+ Note that for some forms of EXPRESSION, it may be faster to use
+ `m4_map_args'.
+
+ -- Macro: m4_foreach_w (VAR, LIST, EXPRESSION)
+ Loop over the white-space-separated list LIST, assigning each value
+ to VAR, and expand EXPRESSION. If VAR is only referenced once in
+ EXPRESSION, it is more efficient to use `m4_map_args_w'.
+
+ The deprecated macro `AC_FOREACH' is an alias of `m4_foreach_w'.
+
+ -- Macro: m4_map (MACRO, LIST)
+ -- Macro: m4_mapall (MACRO, LIST)
+ -- Macro: m4_map_sep (MACRO, SEPARATOR, LIST)
+ -- Macro: m4_mapall_sep (MACRO, SEPARATOR, LIST)
+ Loop over the comma separated quoted list of argument descriptions
+ in LIST, and invoke MACRO with the arguments. An argument
+ description is in turn a comma-separated quoted list of quoted
+ elements, suitable for `m4_apply'. The macros `m4_map' and
+ `m4_map_sep' ignore empty argument descriptions, while `m4_mapall'
+ and `m4_mapall_sep' invoke MACRO with no arguments. The macros
+ `m4_map_sep' and `m4_mapall_sep' additionally expand SEPARATOR
+ between invocations of MACRO.
+
+ Note that SEPARATOR is expanded, unlike in `m4_join'. When
+ separating output with commas, this means that the map result can
+ be used as a series of arguments, by using a single-quoted comma as
+ SEPARATOR, or as a single string, by using a double-quoted comma.
+
+ m4_map([m4_count], [])
+ =>
+ m4_map([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+ => 1 2
+ m4_mapall([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+ => 0 1 2
+ m4_map_sep([m4_eval], [,], [[[1+2]],
+ [[10], [16]]])
+ =>3,a
+ m4_map_sep([m4_echo], [,], [[[a]], [[b]]])
+ =>a,b
+ m4_count(m4_map_sep([m4_echo], [,], [[[a]], [[b]]]))
+ =>2
+ m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]])
+ =>a,b
+ m4_count(m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]]))
+ =>1
+
+ -- Macro: m4_map_args (MACRO, ARG...)
+ Repeatedly invoke MACRO with each successive ARG as its only
+ argument. In the following example, three solutions are presented
+ with the same expansion; the solution using `m4_map_args' is the
+ most efficient.
+ m4_define([active], [ACTIVE])dnl
+ m4_foreach([var], [[plain], [active]], [ m4_echo(m4_defn([var]))])
+ => plain active
+ m4_map([ m4_echo], [[[plain]], [[active]]])
+ => plain active
+ m4_map_args([ m4_echo], [plain], [active])
+ => plain active
+
+ In cases where it is useful to operate on additional parameters
+ besides the list elements, the macro `m4_curry' can be used in
+ MACRO to supply the argument currying necessary to generate the
+ desired argument list. In the following example, `list_add_n' is
+ more efficient than `list_add_x'. On the other hand, using
+ `m4_map_args_sep' can be even more efficient.
+
+ m4_define([list], [[1], [2], [3]])dnl
+ m4_define([add], [m4_eval(([$1]) + ([$2]))])dnl
+ dnl list_add_n(N, ARG...)
+ dnl Output a list consisting of each ARG added to N
+ m4_define([list_add_n],
+ [m4_shift(m4_map_args([,m4_curry([add], [$1])], m4_shift($@)))])dnl
+ list_add_n([1], list)
+ =>2,3,4
+ list_add_n([2], list)
+ =>3,4,5
+ m4_define([list_add_x],
+ [m4_shift(m4_foreach([var], m4_dquote(m4_shift($@)),
+ [,add([$1],m4_defn([var]))]))])dnl
+ list_add_x([1], list)
+ =>2,3,4
+
+ -- Macro: m4_map_args_pair (MACRO, [MACRO-END = `macro'], ARG...)
+ For every pair of arguments ARG, invoke MACRO with two arguments.
+ If there is an odd number of arguments, invoke MACRO-END, which
+ defaults to MACRO, with the remaining argument.
+
+ m4_map_args_pair([, m4_reverse], [], [1], [2], [3])
+ =>, 2, 1, 3
+ m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3])
+ =>, 2, 1, [3]
+ m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3], [4])
+ =>, 2, 1, 4, 3
+
+ -- Macro: m4_map_args_sep ([PRE], [POST], [SEP], ARG...)
+ Expand the sequence `PRE[ARG]POST' for each argument, additionally
+ expanding SEP between arguments. One common use of this macro is
+ constructing a macro call, where the opening and closing
+ parentheses are split between PRE and POST; in particular,
+ `m4_map_args([MACRO], [ARG])' is equivalent to
+ `m4_map_args_sep([MACRO(], [)], [], [ARG])'. This macro provides
+ the most efficient means for iterating over an arbitrary list of
+ arguments, particularly when repeatedly constructing a macro call
+ with more arguments than ARG.
+
+ -- Macro: m4_map_args_w (STRING, [PRE], [POST], [SEP])
+ Expand the sequence `PRE[word]POST' for each word in the
+ whitespace-separated STRING, additionally expanding SEP between
+ words. This macro provides the most efficient means for iterating
+ over a whitespace-separated string. In particular,
+ `m4_map_args_w([STRING], [ACTION(], [)])' is more efficient than
+ `m4_foreach_w([var], [STRING], [ACTION(m4_defn([var]))])'.
+
+ -- Macro: m4_shiftn (COUNT, ...)
+ -- Macro: m4_shift2 (...)
+ -- Macro: m4_shift3 (...)
+ `m4_shiftn' performs COUNT iterations of `m4_shift', along with
+ validation that enough arguments were passed in to match the shift
+ count, and that the count is positive. `m4_shift2' and
+ `m4_shift3' are specializations of `m4_shiftn', introduced in
+ Autoconf 2.62, and are more efficient for two and three shifts,
+ respectively.
+
+ -- Macro: m4_stack_foreach (MACRO, ACTION)
+ -- Macro: m4_stack_foreach_lifo (MACRO, ACTION)
+ For each of the `m4_pushdef' definitions of MACRO, expand ACTION
+ with the single argument of a definition of MACRO.
+ `m4_stack_foreach' starts with the oldest definition, while
+ `m4_stack_foreach_lifo' starts with the current definition.
+ ACTION should not push or pop definitions of MACRO, nor is there
+ any guarantee that the current definition of MACRO matches the
+ argument that was passed to ACTION. The macro `m4_curry' can be
+ used if ACTION needs more than one argument, although in that case
+ it is more efficient to use M4_STACK_FOREACH_SEP.
+
+ Due to technical limitations, there are a few low-level m4sugar
+ functions, such as `m4_pushdef', that cannot be used as the MACRO
+ argument.
+
+ m4_pushdef([a], [1])m4_pushdef([a], [2])dnl
+ m4_stack_foreach([a], [ m4_incr])
+ => 2 3
+ m4_stack_foreach_lifo([a], [ m4_curry([m4_substr], [abcd])])
+ => cd bcd
+
+ -- Macro: m4_stack_foreach_sep (MACRO, [PRE], [POST], [SEP])
+ -- Macro: m4_stack_foreach_sep_lifo (MACRO, [PRE], [POST], [SEP])
+ Expand the sequence `PRE[definition]POST' for each `m4_pushdef'
+ definition of MACRO, additionally expanding SEP between
+ definitions. `m4_stack_foreach_sep' visits the oldest definition
+ first, while `m4_stack_foreach_sep_lifo' visits the current
+ definition first. This macro provides the most efficient means
+ for iterating over a pushdef stack. In particular,
+ `m4_stack_foreach([MACRO], [ACTION])' is short for
+ `m4_stack_foreach_sep([MACRO], [ACTION(], [)])'.
+
+
+File: autoconf.info, Node: Evaluation Macros, Next: Text processing Macros, Prev: Looping constructs, Up: Programming in M4sugar
+
+8.3.6 Evaluation Macros
+-----------------------
+
+The following macros give some control over the order of the evaluation
+by adding or removing levels of quotes.
+
+ -- Macro: m4_apply (MACRO, LIST)
+ Apply the elements of the quoted, comma-separated LIST as the
+ arguments to MACRO. If LIST is empty, invoke MACRO without
+ arguments. Note the difference between `m4_indir', which expects
+ its first argument to be a macro name but can use names that are
+ otherwise invalid, and `m4_apply', where MACRO can contain other
+ text, but must end in a valid macro name.
+ m4_apply([m4_count], [])
+ =>0
+ m4_apply([m4_count], [[]])
+ =>1
+ m4_apply([m4_count], [[1], [2]])
+ =>2
+ m4_apply([m4_join], [[|], [1], [2]])
+ =>1|2
+
+ -- Macro: m4_count (ARG, ...)
+ This macro returns the decimal count of the number of arguments it
+ was passed.
+
+ -- Macro: m4_curry (MACRO, ARG...)
+ This macro performs argument currying. The expansion of this
+ macro is another macro name that expects exactly one argument;
+ that argument is then appended to the ARG list, and then MACRO is
+ expanded with the resulting argument list.
+
+ m4_curry([m4_curry], [m4_reverse], [1])([2])([3])
+ =>3, 2, 1
+
+ Unfortunately, due to a limitation in M4 1.4.x, it is not possible
+ to pass the definition of a builtin macro as the argument to the
+ output of `m4_curry'; the empty string is used instead of the
+ builtin token. This behavior is rectified by using M4 1.6 or
+ newer.
+
+ -- Macro: m4_do (ARG, ...)
+ This macro loops over its arguments and expands each ARG in
+ sequence. Its main use is for readability; it allows the use of
+ indentation and fewer `dnl' to result in the same expansion. This
+ macro guarantees that no expansion will be concatenated with
+ subsequent text; to achieve full concatenation, use
+ `m4_unquote(m4_join([], ARG...))'.
+
+ m4_define([ab],[1])m4_define([bc],[2])m4_define([abc],[3])dnl
+ m4_do([a],[b])c
+ =>abc
+ m4_unquote(m4_join([],[a],[b]))c
+ =>3
+ m4_define([a],[A])m4_define([b],[B])m4_define([c],[C])dnl
+ m4_define([AB],[4])m4_define([BC],[5])m4_define([ABC],[6])dnl
+ m4_do([a],[b])c
+ =>ABC
+ m4_unquote(m4_join([],[a],[b]))c
+ =>3
+
+ -- Macro: m4_dquote (ARG, ...)
+ Return the arguments as a quoted list of quoted arguments.
+ Conveniently, if there is just one ARG, this effectively adds a
+ level of quoting.
+
+ -- Macro: m4_dquote_elt (ARG, ...)
+ Return the arguments as a series of double-quoted arguments.
+ Whereas `m4_dquote' returns a single argument, `m4_dquote_elt'
+ returns as many arguments as it was passed.
+
+ -- Macro: m4_echo (ARG, ...)
+ Return the arguments, with the same level of quoting. Other than
+ discarding whitespace after unquoted commas, this macro is a no-op.
+
+ -- Macro: m4_expand (ARG)
+ Return the expansion of ARG as a quoted string. Whereas
+ `m4_quote' is designed to collect expanded text into a single
+ argument, `m4_expand' is designed to perform one level of expansion
+ on quoted text. One distinction is in the treatment of whitespace
+ following a comma in the original ARG. Any time multiple
+ arguments are collected into one with `m4_quote', the M4 argument
+ collection rules discard the whitespace. However, with
+ `m4_expand', whitespace is preserved, even after the expansion of
+ macros contained in ARG. Additionally, `m4_expand' is able to
+ expand text that would involve an unterminated comment, whereas
+ expanding that same text as the argument to `m4_quote' runs into
+ difficulty in finding the end of the argument. Since manipulating
+ diversions during argument collection is inherently unsafe,
+ `m4_expand' issues an error if ARG attempts to change the current
+ diversion (*note Diversion support::).
+
+ m4_define([active], [ACT, IVE])dnl
+ m4_define([active2], [[ACT, IVE]])dnl
+ m4_quote(active, active)
+ =>ACT,IVE,ACT,IVE
+ m4_expand([active, active])
+ =>ACT, IVE, ACT, IVE
+ m4_quote(active2, active2)
+ =>ACT, IVE,ACT, IVE
+ m4_expand([active2, active2])
+ =>ACT, IVE, ACT, IVE
+ m4_expand([# m4_echo])
+ =># m4_echo
+ m4_quote(# m4_echo)
+ )
+ =># m4_echo)
+ =>
+
+ Note that `m4_expand' cannot handle an ARG that expands to literal
+ unbalanced quotes, but that quadrigraphs can be used when
+ unbalanced output is necessary. Likewise, unbalanced parentheses
+ should be supplied with double quoting or a quadrigraph.
+
+ m4_define([pattern], [[!@<:@]])dnl
+ m4_define([bar], [BAR])dnl
+ m4_expand([case $foo in
+ m4_defn([pattern])@:}@ bar ;;
+ *[)] blah ;;
+ esac])
+ =>case $foo in
+ => [![]) BAR ;;
+ => *) blah ;;
+ =>esac
+
+ -- Macro: m4_ignore (...)
+ This macro was introduced in Autoconf 2.62. Expands to nothing,
+ ignoring all of its arguments. By itself, this isn't very useful.
+ However, it can be used to conditionally ignore an arbitrary
+ number of arguments, by deciding which macro name to apply to a
+ list of arguments.
+ dnl foo outputs a message only if [debug] is defined.
+ m4_define([foo],
+ [m4_ifdef([debug],[AC_MSG_NOTICE],[m4_ignore])([debug message])])
+
+ Note that for earlier versions of Autoconf, the macro `__gnu__' can
+ serve the same purpose, although it is less readable.
+
+ -- Macro: m4_make_list (ARG, ...)
+ This macro exists to aid debugging of M4sugar algorithms. Its net
+ effect is similar to `m4_dquote'--it produces a quoted list of
+ quoted arguments, for each ARG. The difference is that this
+ version uses a comma-newline separator instead of just comma, to
+ improve readability of the list; with the result that it is less
+ efficient than `m4_dquote'.
+ m4_define([zero],[0])m4_define([one],[1])m4_define([two],[2])dnl
+ m4_dquote(zero, [one], [[two]])
+ =>[0],[one],[[two]]
+ m4_make_list(zero, [one], [[two]])
+ =>[0],
+ =>[one],
+ =>[[two]]
+ m4_foreach([number], m4_dquote(zero, [one], [[two]]), [ number])
+ => 0 1 two
+ m4_foreach([number], m4_make_list(zero, [one], [[two]]), [ number])
+ => 0 1 two
+
+ -- Macro: m4_quote (ARG, ...)
+ Return the arguments as a single entity, i.e., wrap them into a
+ pair of quotes. This effectively collapses multiple arguments
+ into one, although it loses whitespace after unquoted commas in
+ the process.
+
+ -- Macro: m4_reverse (ARG, ...)
+ Outputs each argument with the same level of quoting, but in
+ reverse order, and with space following each comma for readability.
+
+ m4_define([active], [ACT,IVE])
+ =>
+ m4_reverse(active, [active])
+ =>active, IVE, ACT
+
+ -- Macro: m4_unquote (ARG, ...)
+ This macro was introduced in Autoconf 2.62. Expand each argument,
+ separated by commas. For a single ARG, this effectively removes a
+ layer of quoting, and `m4_unquote([ARG])' is more efficient than
+ the equivalent `m4_do([ARG])'. For multiple arguments, this
+ results in an unquoted list of expansions. This is commonly used
+ with `m4_split', in order to convert a single quoted list into a
+ series of quoted elements.
+
+ The following example aims at emphasizing the difference between
+several scenarios: not using these macros, using `m4_defn', using
+`m4_quote', using `m4_dquote', and using `m4_expand'.
+
+ $ cat example.m4
+ dnl Overquote, so that quotes are visible.
+ m4_define([show], [$[]1 = [$1], $[]@ = [$@]])
+ m4_define([a], [A])
+ m4_define([mkargs], [1, 2[,] 3])
+ m4_define([arg1], [[$1]])
+ m4_divert([0])dnl
+ show(a, b)
+ show([a, b])
+ show(m4_quote(a, b))
+ show(m4_dquote(a, b))
+ show(m4_expand([a, b]))
+
+ arg1(mkargs)
+ arg1([mkargs])
+ arg1(m4_defn([mkargs]))
+ arg1(m4_quote(mkargs))
+ arg1(m4_dquote(mkargs))
+ arg1(m4_expand([mkargs]))
+ $ autom4te -l m4sugar example.m4
+ $1 = A, $@ = [A],[b]
+ $1 = a, b, $@ = [a, b]
+ $1 = A,b, $@ = [A,b]
+ $1 = [A],[b], $@ = [[A],[b]]
+ $1 = A, b, $@ = [A, b]
+
+ 1
+ mkargs
+ 1, 2[,] 3
+ 1,2, 3
+ [1],[2, 3]
+ 1, 2, 3
+
+
+File: autoconf.info, Node: Text processing Macros, Next: Number processing Macros, Prev: Evaluation Macros, Up: Programming in M4sugar
+
+8.3.7 String manipulation in M4
+-------------------------------
+
+The following macros may be used to manipulate strings in M4. Many of
+the macros in this section intentionally result in quoted strings as
+output, rather than subjecting the arguments to further expansions. As
+a result, if you are manipulating text that contains active M4
+characters, the arguments are passed with single quoting rather than
+double.
+
+ -- Macro: m4_append (MACRO-NAME, STRING, [SEPARATOR])
+ -- Macro: m4_append_uniq (MACRO-NAME, STRING, [SEPARATOR] [IF-UNIQ],
+ [IF-DUPLICATE])
+ Redefine MACRO-NAME to its former contents with SEPARATOR and
+ STRING added at the end. If MACRO-NAME was undefined before (but
+ not if it was defined but empty), then no SEPARATOR is added. As
+ of Autoconf 2.62, neither STRING nor SEPARATOR are expanded during
+ this macro; instead, they are expanded when MACRO-NAME is invoked.
+
+ `m4_append' can be used to grow strings, and `m4_append_uniq' to
+ grow strings without duplicating substrings. Additionally,
+ `m4_append_uniq' takes two optional parameters as of Autoconf 2.62;
+ IF-UNIQ is expanded if STRING was appended, and IF-DUPLICATE is
+ expanded if STRING was already present. Also, `m4_append_uniq'
+ warns if SEPARATOR is not empty, but occurs within STRING, since
+ that can lead to duplicates.
+
+ Note that `m4_append' can scale linearly in the length of the final
+ string, depending on the quality of the underlying M4
+ implementation, while `m4_append_uniq' has an inherent quadratic
+ scaling factor. If an algorithm can tolerate duplicates in the
+ final string, use the former for speed. If duplicates must be
+ avoided, consider using `m4_set_add' instead (*note Set
+ manipulation Macros::).
+
+ m4_define([active], [ACTIVE])dnl
+ m4_append([sentence], [This is an])dnl
+ m4_append([sentence], [ active ])dnl
+ m4_append([sentence], [symbol.])dnl
+ sentence
+ =>This is an ACTIVE symbol.
+ m4_undefine([active])dnl
+ =>This is an active symbol.
+ m4_append_uniq([list], [one], [, ], [new], [existing])
+ =>new
+ m4_append_uniq([list], [one], [, ], [new], [existing])
+ =>existing
+ m4_append_uniq([list], [two], [, ], [new], [existing])
+ =>new
+ m4_append_uniq([list], [three], [, ], [new], [existing])
+ =>new
+ m4_append_uniq([list], [two], [, ], [new], [existing])
+ =>existing
+ list
+ =>one, two, three
+ m4_dquote(list)
+ =>[one],[two],[three]
+ m4_append([list2], [one], [[, ]])dnl
+ m4_append_uniq([list2], [two], [[, ]])dnl
+ m4_append([list2], [three], [[, ]])dnl
+ list2
+ =>one, two, three
+ m4_dquote(list2)
+ =>[one, two, three]
+
+ -- Macro: m4_append_uniq_w (MACRO-NAME, STRINGS)
+ This macro was introduced in Autoconf 2.62. It is similar to
+ `m4_append_uniq', but treats STRINGS as a whitespace separated
+ list of words to append, and only appends unique words.
+ MACRO-NAME is updated with a single space between new words.
+ m4_append_uniq_w([numbers], [1 1 2])dnl
+ m4_append_uniq_w([numbers], [ 2 3 ])dnl
+ numbers
+ =>1 2 3
+
+ -- Macro: m4_chomp (STRING)
+ -- Macro: m4_chomp_all (STRING)
+ Output STRING in quotes, but without a trailing newline. The
+ macro `m4_chomp' is slightly faster, and removes at most one
+ newline; the macro `m4_chomp_all' removes all consecutive trailing
+ newlines. Unlike `m4_flatten', embedded newlines are left intact,
+ and backslash does not influence the result.
+
+ -- Macro: m4_combine ([SEPARATOR], PREFIX-LIST, [INFIX], SUFFIX-1,
+ [SUFFIX-2], ...)
+ This macro produces a quoted string containing the pairwise
+ combination of every element of the quoted, comma-separated
+ PREFIX-LIST, and every element from the SUFFIX arguments. Each
+ pairwise combination is joined with INFIX in the middle, and
+ successive pairs are joined by SEPARATOR. No expansion occurs on
+ any of the arguments. No output occurs if either the PREFIX or
+ SUFFIX list is empty, but the lists can contain empty elements.
+ m4_define([a], [oops])dnl
+ m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
+ =>a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
+ m4_combine([, ], [[a], [b]], [-])
+ =>
+ m4_combine([, ], [[a], [b]], [-], [])
+ =>a-, b-
+ m4_combine([, ], [], [-], [1], [2])
+ =>
+ m4_combine([, ], [[]], [-], [1], [2])
+ =>-1, -2
+
+ -- Macro: m4_escape (STRING)
+ Convert all instances of `[', `]', `#', and `$' within STRING into
+ their respective quadrigraphs. The result is still a quoted
+ string.
+
+ -- Macro: m4_flatten (STRING)
+ Flatten STRING into a single line. Delete all backslash-newline
+ pairs, and replace all remaining newlines with a space. The
+ result is still a quoted string.
+
+ -- Macro: m4_join ([SEPARATOR], ARGS...)
+ -- Macro: m4_joinall ([SEPARATOR], ARGS...)
+ Concatenate each ARG, separated by SEPARATOR. `joinall' uses
+ every argument, while `join' omits empty arguments so that there
+ are no back-to-back separators in the output. The result is a
+ quoted string.
+ m4_define([active], [ACTIVE])dnl
+ m4_join([|], [one], [], [active], [two])
+ =>one|active|two
+ m4_joinall([|], [one], [], [active], [two])
+ =>one||active|two
+
+ Note that if all you intend to do is join ARGS with commas between
+ them, to form a quoted list suitable for `m4_foreach', it is more
+ efficient to use `m4_dquote'.
+
+ -- Macro: m4_newline ([TEXT])
+ This macro was introduced in Autoconf 2.62, and expands to a
+ newline, followed by any TEXT. It is primarily useful for
+ maintaining macro formatting, and ensuring that M4 does not
+ discard leading whitespace during argument collection.
+
+ -- Macro: m4_normalize (STRING)
+ Remove leading and trailing spaces and tabs, sequences of
+ backslash-then-newline, and replace multiple spaces, tabs, and
+ newlines with a single space. This is a combination of
+ `m4_flatten' and `m4_strip'. To determine if STRING consists only
+ of bytes that would be removed by `m4_normalize', you can use
+ `m4_ifblank'.
+
+ -- Macro: m4_re_escape (STRING)
+ Backslash-escape all characters in STRING that are active in
+ regexps.
+
+ -- Macro: m4_split (STRING, [REGEXP = `[\t ]+'])
+ Split STRING into an M4 list of elements quoted by `[' and `]',
+ while keeping white space at the beginning and at the end. If
+ REGEXP is given, use it instead of `[\t ]+' for splitting. If
+ STRING is empty, the result is an empty list.
+
+ -- Macro: m4_strip (STRING)
+ Strip whitespace from STRING. Sequences of spaces and tabs are
+ reduced to a single space, then leading and trailing spaces are
+ removed. The result is still a quoted string. Note that this
+ does not interfere with newlines; if you want newlines stripped as
+ well, consider `m4_flatten', or do it all at once with
+ `m4_normalize'. To quickly test if STRING has only whitespace,
+ use `m4_ifblank'.
+
+ -- Macro: m4_text_box (MESSAGE, [FRAME = `-'])
+ Add a text box around MESSAGE, using FRAME as the border character
+ above and below the message. The FRAME argument must be a single
+ byte, and does not support quadrigraphs. The frame correctly
+ accounts for the subsequent expansion of MESSAGE. For example:
+ m4_define([macro], [abc])dnl
+ m4_text_box([macro])
+ =>## --- ##
+ =>## abc ##
+ =>## --- ##
+
+ The MESSAGE must contain balanced quotes and parentheses, although
+ quadrigraphs can be used to work around this.
+
+ -- Macro: m4_text_wrap (STRING, [PREFIX], [PREFIX1 = `PREFIX'], [WIDTH
+ = `79'])
+ Break STRING into a series of whitespace-separated words, then
+ output those words separated by spaces, and wrapping lines any
+ time the output would exceed WIDTH columns. If given, PREFIX1
+ begins the first line, and PREFIX begins all wrapped lines. If
+ PREFIX1 is longer than PREFIX, then the first line consists of
+ just PREFIX1. If PREFIX is longer than PREFIX1, padding is
+ inserted so that the first word of STRING begins at the same
+ indentation as all wrapped lines. Note that using literal tab
+ characters in any of the arguments will interfere with the
+ calculation of width. No expansions occur on PREFIX, PREFIX1, or
+ the words of STRING, although quadrigraphs are recognized.
+
+ For some examples:
+ m4_text_wrap([Short string */], [ ], [/* ], [20])
+ =>/* Short string */
+ m4_text_wrap([Much longer string */], [ ], [/* ], [20])
+ =>/* Much longer
+ => string */
+ m4_text_wrap([Short doc.], [ ], [ --short ], [30])
+ => --short Short doc.
+ m4_text_wrap([Short doc.], [ ], [ --too-wide ], [30])
+ => --too-wide
+ => Short doc.
+ m4_text_wrap([Super long documentation.], [ ],
+ [ --too-wide ], 30)
+ => --too-wide
+ => Super long
+ => documentation.
+
+ -- Macro: m4_tolower (STRING)
+ -- Macro: m4_toupper (STRING)
+ Return STRING with letters converted to upper or lower case,
+ respectively.
+
+
+File: autoconf.info, Node: Number processing Macros, Next: Set manipulation Macros, Prev: Text processing Macros, Up: Programming in M4sugar
+
+8.3.8 Arithmetic computation in M4
+----------------------------------
+
+The following macros facilitate integer arithmetic operations. Where a
+parameter is documented as taking an arithmetic expression, you can use
+anything that can be parsed by `m4_eval'.
+
+ -- Macro: m4_cmp (EXPR-1, EXPR-2)
+ Compare the arithmetic expressions EXPR-1 and EXPR-2, and expand
+ to `-1' if EXPR-1 is smaller, `0' if they are equal, and `1' if
+ EXPR-1 is larger.
+
+ -- Macro: m4_list_cmp (LIST-1, LIST-2)
+ Compare the two M4 lists consisting of comma-separated arithmetic
+ expressions, left to right. Expand to `-1' for the first element
+ pairing where the value from LIST-1 is smaller, `1' where the
+ value from LIST-2 is smaller, or `0' if both lists have the same
+ values. If one list is shorter than the other, the remaining
+ elements of the longer list are compared against zero.
+ m4_list_cmp([1, 0], [1])
+ =>0
+ m4_list_cmp([1, [1 * 0]], [1, 0])
+ =>0
+ m4_list_cmp([1, 2], [1, 0])
+ =>1
+ m4_list_cmp([1, [1+1], 3],[1, 2])
+ =>1
+ m4_list_cmp([1, 2, -3], [1, 2])
+ =>-1
+ m4_list_cmp([1, 0], [1, 2])
+ =>-1
+ m4_list_cmp([1], [1, 2])
+ =>-1
+
+ -- Macro: m4_max (ARG, ...)
+ This macro was introduced in Autoconf 2.62. Expand to the decimal
+ value of the maximum arithmetic expression among all the arguments.
+
+ -- Macro: m4_min (ARG, ...)
+ This macro was introduced in Autoconf 2.62. Expand to the decimal
+ value of the minimum arithmetic expression among all the arguments.
+
+ -- Macro: m4_sign (EXPR)
+ Expand to `-1' if the arithmetic expression EXPR is negative, `1'
+ if it is positive, and `0' if it is zero.
+
+ -- Macro: m4_version_compare (VERSION-1, VERSION-2)
+ This macro was introduced in Autoconf 2.53, but had a number of
+ usability limitations that were not lifted until Autoconf 2.62.
+ Compare the version strings VERSION-1 and VERSION-2, and expand to
+ `-1' if VERSION-1 is smaller, `0' if they are the same, or `1'
+ VERSION-2 is smaller. Version strings must be a list of elements
+ separated by `.', `,' or `-', where each element is a number along
+ with optional case-insensitive letters designating beta releases.
+ The comparison stops at the leftmost element that contains a
+ difference, although a 0 element compares equal to a missing
+ element.
+
+ It is permissible to include commit identifiers in VERSION, such
+ as an abbreviated SHA1 of the commit, provided there is still a
+ monotonically increasing prefix to allow for accurate version-based
+ comparisons. For example, this paragraph was written when the
+ development snapshot of autoconf claimed to be at version
+ `2.61a-248-dc51', or 248 commits after the 2.61a release, with an
+ abbreviated commit identification of `dc51'.
+
+ m4_version_compare([1.1], [2.0])
+ =>-1
+ m4_version_compare([2.0b], [2.0a])
+ =>1
+ m4_version_compare([1.1.1], [1.1.1a])
+ =>-1
+ m4_version_compare([1.2], [1.1.1a])
+ =>1
+ m4_version_compare([1.0], [1])
+ =>0
+ m4_version_compare([1.1pre], [1.1PRE])
+ =>0
+ m4_version_compare([1.1a], [1,10])
+ =>-1
+ m4_version_compare([2.61a], [2.61a-248-dc51])
+ =>-1
+ m4_version_compare([2.61b], [2.61a-248-dc51])
+ =>1
+
+ -- Macro: m4_version_prereq (VERSION, [IF-NEW-ENOUGH], [IF-OLD =
+ `m4_fatal'])
+ Compares VERSION against the version of Autoconf currently
+ running. If the running version is at VERSION or newer, expand
+ IF-NEW-ENOUGH, but if VERSION is larger than the version currently
+ executing, expand IF-OLD, which defaults to printing an error
+ message and exiting m4sugar with status 63. When given only one
+ argument, this behaves like `AC_PREREQ' (*note Versioning::).
+ Remember that the autoconf philosophy favors feature checks over
+ version checks.
+
+
+File: autoconf.info, Node: Set manipulation Macros, Next: Forbidden Patterns, Prev: Number processing Macros, Up: Programming in M4sugar
+
+8.3.9 Set manipulation in M4
+----------------------------
+
+Sometimes, it is necessary to track a set of data, where the order does
+not matter and where there are no duplicates in the set. The following
+macros facilitate set manipulations. Each set is an opaque object,
+which can only be accessed via these basic operations. The underlying
+implementation guarantees linear scaling for set creation, which is more
+efficient than using the quadratic `m4_append_uniq'. Both set names
+and values can be arbitrary strings, except for unbalanced quotes.
+This implementation ties up memory for removed elements until the next
+operation that must traverse all the elements of a set; and although
+that may slow down some operations until the memory for removed elements
+is pruned, it still guarantees linear performance.
+
+ -- Macro: m4_set_add (SET, VALUE, [IF-UNIQ], [IF-DUP])
+ Adds the string VALUE as a member of set SET. Expand IF-UNIQ if
+ the element was added, or IF-DUP if it was previously in the set.
+ Operates in amortized constant time, so that set creation scales
+ linearly.
+
+ -- Macro: m4_set_add_all (SET, VALUE...)
+ Adds each VALUE to the set SET. This is slightly more efficient
+ than repeatedly invoking `m4_set_add'.
+
+ -- Macro: m4_set_contains (SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+ Expands IF-PRESENT if the string VALUE is a member of SET,
+ otherwise IF-ABSENT.
+
+ m4_set_contains([a], [1], [yes], [no])
+ =>no
+ m4_set_add([a], [1], [added], [dup])
+ =>added
+ m4_set_add([a], [1], [added], [dup])
+ =>dup
+ m4_set_contains([a], [1], [yes], [no])
+ =>yes
+ m4_set_remove([a], [1], [removed], [missing])
+ =>removed
+ m4_set_contains([a], [1], [yes], [no])
+ =>no
+ m4_set_remove([a], [1], [removed], [missing])
+ =>missing
+
+ -- Macro: m4_set_contents (SET, [SEP])
+ -- Macro: m4_set_dump (SET, [SEP])
+ Expands to a single string consisting of all the members of the set
+ SET, each separated by SEP, which is not expanded.
+ `m4_set_contents' leaves the elements in SET but reclaims any
+ memory occupied by removed elements, while `m4_set_dump' is a
+ faster one-shot action that also deletes the set. No provision is
+ made for disambiguating members that contain a non-empty SEP as a
+ substring; use `m4_set_empty' to distinguish between an empty set
+ and the set containing only the empty string. The order of the
+ output is unspecified; in the current implementation, part of the
+ speed of `m4_set_dump' results from using a different output order
+ than `m4_set_contents'. These macros scale linearly in the size
+ of the set before memory pruning, and `m4_set_contents([SET],
+ [SEP])' is faster than `m4_joinall([SEP]m4_set_listc([SET]))'.
+
+ m4_set_add_all([a], [1], [2], [3])
+ =>
+ m4_set_contents([a], [-])
+ =>1-2-3
+ m4_joinall([-]m4_set_listc([a]))
+ =>1-2-3
+ m4_set_dump([a], [-])
+ =>3-2-1
+ m4_set_contents([a])
+ =>
+ m4_set_add([a], [])
+ =>
+ m4_set_contents([a], [-])
+ =>
+
+ -- Macro: m4_set_delete (SET)
+ Delete all elements and memory associated with SET. This is
+ linear in the set size, and faster than removing one element at a
+ time.
+
+ -- Macro: m4_set_difference (SETA, SETB)
+ -- Macro: m4_set_intersection (SETA, SETB)
+ -- Macro: m4_set_union (SETA, SETB)
+ Compute the relation between SETA and SETB, and output the result
+ as a list of quoted arguments without duplicates and with a
+ leading comma. Set difference selects the elements in SETA but
+ not SETB, intersection selects only elements in both sets, and
+ union selects elements in either set. These actions are linear in
+ the sum of the set sizes. The leading comma is necessary to
+ distinguish between no elements and the empty string as the only
+ element.
+
+ m4_set_add_all([a], [1], [2], [3])
+ =>
+ m4_set_add_all([b], [3], [], [4])
+ =>
+ m4_set_difference([a], [b])
+ =>,1,2
+ m4_set_difference([b], [a])
+ =>,,4
+ m4_set_intersection([a], [b])
+ =>,3
+ m4_set_union([a], [b])
+ =>,1,2,3,,4
+
+ -- Macro: m4_set_empty (SET, [IF-EMPTY], [IF-ELEMENTS])
+ Expand IF-EMPTY if the set SET has no elements, otherwise expand
+ IF-ELEMENTS. This macro operates in constant time. Using this
+ macro can help disambiguate output from `m4_set_contents' or
+ `m4_set_list'.
+
+ -- Macro: m4_set_foreach (SET, VARIABLE, ACTION)
+ For each element in the set SET, expand ACTION with the macro
+ VARIABLE defined as the set element. Behavior is unspecified if
+ ACTION recursively lists the contents of SET (although listing
+ other sets is acceptable), or if it modifies the set in any way
+ other than removing the element currently contained in VARIABLE.
+ This macro is faster than the corresponding `m4_foreach([VARIABLE],
+ m4_indir([m4_dquote]m4_set_listc([SET])), [ACTION])', although
+ `m4_set_map' might be faster still.
+
+ m4_set_add_all([a]m4_for([i], [1], [5], [], [,i]))
+ =>
+ m4_set_contents([a])
+ =>12345
+ m4_set_foreach([a], [i],
+ [m4_if(m4_eval(i&1), [0], [m4_set_remove([a], i, [i])])])
+ =>24
+ m4_set_contents([a])
+ =>135
+
+ -- Macro: m4_set_list (SET)
+ -- Macro: m4_set_listc (SET)
+ Produce a list of arguments, where each argument is a quoted
+ element from the set SET. The variant `m4_set_listc' is
+ unambiguous, by adding a leading comma if there are any set
+ elements, whereas the variant `m4_set_list' cannot distinguish
+ between an empty set and a set containing only the empty string.
+ These can be directly used in macros that take multiple arguments,
+ such as `m4_join' or `m4_set_add_all', or wrapped by `m4_dquote'
+ for macros that take a quoted list, such as `m4_map' or
+ `m4_foreach'. Any memory occupied by removed elements is
+ reclaimed during these macros.
+
+ m4_set_add_all([a], [1], [2], [3])
+ =>
+ m4_set_list([a])
+ =>1,2,3
+ m4_set_list([b])
+ =>
+ m4_set_listc([b])
+ =>
+ m4_count(m4_set_list([b]))
+ =>1
+ m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
+ =>0
+ m4_set_add([b], [])
+ =>
+ m4_set_list([b])
+ =>
+ m4_set_listc([b])
+ =>,
+ m4_count(m4_set_list([b]))
+ =>1
+ m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
+ =>1
+
+ -- Macro: m4_set_map (SET, ACTION)
+ For each element in the set SET, expand ACTION with a single
+ argument of the set element. Behavior is unspecified if ACTION
+ recursively lists the contents of SET (although listing other sets
+ is acceptable), or if it modifies the set in any way other than
+ removing the element passed as an argument. This macro is faster
+ than either corresponding counterpart of
+ `m4_map_args([ACTION]m4_set_listc([SET]))' or
+ `m4_set_foreach([SET], [var], [ACTION(m4_defn([var]))])'. It is
+ possible to use `m4_curry' if more than one argument is needed for
+ ACTION, although it is more efficient to use `m4_set_map_sep' in
+ that case.
+
+ -- Macro: m4_set_map_sep (SET, [PRE], [POST], [SEP])
+ For each element in the set SET, expand `PRE[element]POST',
+ additionally expanding SEP between elements. Behavior is
+ unspecified if the expansion recursively lists the contents of SET
+ (although listing other sets is acceptable), or if it modifies the
+ set in any way other than removing the element visited by the
+ expansion. This macro provides the most efficient means for
+ non-destructively visiting the elements of a set; in particular,
+ `m4_set_map([SET], [ACTION])' is equivalent to
+ `m4_set_map_sep([SET], [ACTION(], [)])'.
+
+ -- Macro: m4_set_remove (SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+ If VALUE is an element in the set SET, then remove it and expand
+ IF-PRESENT. Otherwise expand IF-ABSENT. This macro operates in
+ constant time so that multiple removals will scale linearly rather
+ than quadratically; but when used outside of `m4_set_foreach' or
+ `m4_set_map', it leaves memory occupied until the set is later
+ compacted by `m4_set_contents' or `m4_set_list'. Several other
+ set operations are then less efficient between the time of element
+ removal and subsequent memory compaction, but still maintain their
+ guaranteed scaling performance.
+
+ -- Macro: m4_set_size (SET)
+ Expand to the size of the set SET. This implementation operates
+ in constant time, and is thus more efficient than
+ `m4_eval(m4_count(m4_set_listc([set])) - 1)'.
+
+
+File: autoconf.info, Node: Forbidden Patterns, Prev: Set manipulation Macros, Up: Programming in M4sugar
+
+8.3.10 Forbidden Patterns
+-------------------------
+
+M4sugar provides a means to define suspicious patterns, patterns
+describing tokens which should not be found in the output. For
+instance, if an Autoconf `configure' script includes tokens such as
+`AC_DEFINE', or `dnl', then most probably something went wrong
+(typically a macro was not evaluated because of overquotation).
+
+ M4sugar forbids all the tokens matching `^_?m4_' and `^dnl$'.
+Additional layers, such as M4sh and Autoconf, add additional forbidden
+patterns to the list.
+
+ -- Macro: m4_pattern_forbid (PATTERN)
+ Declare that no token matching PATTERN must be found in the output.
+ Comments are not checked; this can be a problem if, for instance,
+ you have some macro left unexpanded after an `#include'. No
+ consensus is currently found in the Autoconf community, as some
+ people consider it should be valid to name macros in comments
+ (which doesn't make sense to the authors of this documentation:
+ input, such as macros, should be documented by `dnl' comments;
+ reserving `#'-comments to document the output).
+
+ Of course, you might encounter exceptions to these generic rules, for
+instance you might have to refer to `$m4_flags'.
+
+ -- Macro: m4_pattern_allow (PATTERN)
+ Any token matching PATTERN is allowed, including if it matches an
+ `m4_pattern_forbid' pattern.
+
+
+File: autoconf.info, Node: Debugging via autom4te, Prev: Programming in M4sugar, Up: Programming in M4
+
+8.4 Debugging via autom4te
+==========================
+
+At times, it is desirable to see what was happening inside m4, to see
+why output was not matching expectations. However, post-processing done
+by `autom4te' means that directly using the m4 builtin `m4_traceon' is
+likely to interfere with operation. Also, frequent diversion changes
+and the concept of forbidden tokens make it difficult to use `m4_defn'
+to generate inline comments in the final output.
+
+ There are a couple of tools to help with this. One is the use of the
+`--trace' option provided by `autom4te' (as well as each of the
+programs that wrap `autom4te', such as `autoconf'), in order to inspect
+when a macro is called and with which arguments. For example, when
+this paragraph was written, the autoconf version could be found by:
+
+ $ autoconf --trace=AC_INIT
+ configure.ac:23:AC_INIT:GNU Autoconf:2.63b.95-3963:bug-autoconf@gnu.org
+ $ autoconf --trace='AC_INIT:version is $2'
+ version is 2.63b.95-3963
+
+ Another trick is to print out the expansion of various m4
+expressions to standard error or to an independent file, with no
+further m4 expansion, and without interfering with diversion changes or
+the post-processing done to standard output. `m4_errprintn' shows a
+given expression on standard error. For example, if you want to see
+the expansion of an autoconf primitive or of one of your autoconf
+macros, you can do it like this:
+
+ $ cat <<\EOF > configure.ac
+ AC_INIT
+ m4_errprintn([The definition of AC_DEFINE_UNQUOTED:])
+ m4_errprintn(m4_defn([AC_DEFINE_UNQUOTED]))
+ AC_OUTPUT
+ EOF
+ $ autoconf
+ error-->The definition of AC_DEFINE_UNQUOTED:
+ error-->_AC_DEFINE_Q([], $@)
+
+
+File: autoconf.info, Node: Programming in M4sh, Next: Writing Autoconf Macros, Prev: Programming in M4, Up: Top
+
+9 Programming in M4sh
+*********************
+
+M4sh, pronounced "mash", is aiming at producing portable Bourne shell
+scripts. This name was coined by Lars J. Aas, who notes that,
+according to the Webster's Revised Unabridged Dictionary (1913):
+
+ Mash \Mash\, n. [Akin to G. meisch, maisch, meische, maische,
+ mash, wash, and prob. to AS. miscian to mix. See "Mix".]
+
+ 1. A mass of mixed ingredients reduced to a soft pulpy state by
+ beating or pressure...
+
+ 2. A mixture of meal or bran and water fed to animals.
+
+ 3. A mess; trouble. [Obs.] -Beau. & Fl.
+
+ M4sh reserves the M4 macro namespace `^_AS_' for internal use, and
+the namespace `^AS_' for M4sh macros. It also reserves the shell and
+environment variable namespace `^as_', and the here-document delimiter
+namespace `^_AS[A-Z]' in the output file. You should not define your
+own macros or output shell code that conflicts with these namespaces.
+
+* Menu:
+
+* Common Shell Constructs:: Portability layer for common shell constructs
+* Polymorphic Variables:: Support for indirect variable names
+* Initialization Macros:: Macros to establish a sane shell environment
+* File Descriptor Macros:: File descriptor macros for input and output
+
+
+File: autoconf.info, Node: Common Shell Constructs, Next: Polymorphic Variables, Up: Programming in M4sh
+
+9.1 Common Shell Constructs
+===========================
+
+M4sh provides portable alternatives for some common shell constructs
+that unfortunately are not portable in practice.
+
+ -- Macro: AS_BOX (TEXT, [CHAR = `-'])
+ Expand into shell code that will output TEXT surrounded by a box
+ with CHAR in the top and bottom border. TEXT should not contain a
+ newline, but may contain shell expansions valid for unquoted
+ here-documents. CHAR defaults to `-', but can be any character
+ except `/', `'', `"', `\', `&', or ``'. This is useful for
+ outputting a comment box into log files to separate distinct
+ phases of script operation.
+
+ -- Macro: AS_CASE (WORD, [PATTERN1], [IF-MATCHED1], ..., [DEFAULT])
+ Expand into a shell `case' statement, where WORD is matched
+ against one or more patterns. IF-MATCHED is run if the
+ corresponding pattern matched WORD, else DEFAULT is run. Avoids
+ several portability issues (*note Limitations of Shell Builtins:
+ case.).
+
+ -- Macro: AS_DIRNAME (FILE-NAME)
+ Output the directory portion of FILE-NAME. For example, if
+ `$file' is `/one/two/three', the command
+ `dir=`AS_DIRNAME(["$file"])`' sets `dir' to `/one/two'.
+
+ This interface may be improved in the future to avoid forks and
+ losing trailing newlines.
+
+ -- Macro: AS_ECHO (WORD)
+ Emits WORD to the standard output, followed by a newline. WORD
+ must be a single shell word (typically a quoted string). The
+ bytes of WORD are output as-is, even if it starts with "-" or
+ contains "\". Redirections can be placed outside the macro
+ invocation. This is much more portable than using `echo' (*note
+ Limitations of Shell Builtins: echo.).
+
+ -- Macro: AS_ECHO_N (WORD)
+ Emits WORD to the standard output, without a following newline.
+ WORD must be a single shell word (typically a quoted string) and,
+ for portability, should not include more than one newline. The
+ bytes of WORD are output as-is, even if it starts with "-" or
+ contains "\". Redirections can be placed outside the macro
+ invocation.
+
+ -- Macro: AS_ESCAPE (STRING, [CHARS = ``\"$'])
+ Expands to STRING, with any characters in CHARS escaped with a
+ backslash (`\'). CHARS should be at most four bytes long, and
+ only contain characters from the set ``\"$'; however, characters
+ may be safely listed more than once in CHARS for the sake of
+ syntax highlighting editors. The current implementation expands
+ STRING after adding escapes; if STRING contains macro calls that
+ in turn expand to text needing shell quoting, you can use
+ `AS_ESCAPE(m4_dquote(m4_expand([string])))'.
+
+ The default for CHARS (`\"$`') is the set of characters needing
+ escapes when STRING will be used literally within double quotes.
+ One common variant is the set of characters to protect when STRING
+ will be used literally within back-ticks or an unquoted
+ here-document (`\$`'). Another common variant is `""', which can
+ be used to form a double-quoted string containing the same
+ expansions that would have occurred if STRING were expanded in an
+ unquoted here-document; however, when using this variant, care
+ must be taken that STRING does not use double quotes within
+ complex variable expansions (such as `${foo-`echo "hi"`}') that
+ would be broken with improper escapes.
+
+ This macro is often used with `AS_ECHO'. For an example, observe
+ the output generated by the shell code generated from this snippet:
+
+ foo=bar
+ AS_ECHO(["AS_ESCAPE(["$foo" = ])AS_ESCAPE(["$foo"], [""])"])
+ =>"$foo" = "bar"
+ m4_define([macro], [a, [\b]])
+ AS_ECHO(["AS_ESCAPE([[macro]])"])
+ =>macro
+ AS_ECHO(["AS_ESCAPE([macro])"])
+ =>a, b
+ AS_ECHO(["AS_ESCAPE(m4_dquote(m4_expand([macro])))"])
+ =>a, \b
+
+ To escape a string that will be placed within single quotes, use:
+
+ m4_bpatsubst([[STRING]], ['], ['\\''])
+
+ -- Macro: AS_EXECUTABLE_P (FILE)
+ Emit code to probe whether FILE is a regular file with executable
+ permissions (and not a directory with search permissions). The
+ caller is responsible for quoting FILE.
+
+ -- Macro: AS_EXIT ([STATUS = `$?'])
+ Emit code to exit the shell with STATUS, defaulting to `$?'. This
+ macro works around shells that see the exit status of the command
+ prior to `exit' inside a `trap 0' handler (*note Limitations of
+ Shell Builtins: trap.).
+
+ -- Macro: AS_IF (TEST1, [RUN-IF-TRUE1], ..., [RUN-IF-FALSE])
+ Run shell code TEST1. If TEST1 exits with a zero status then run
+ shell code RUN-IF-TRUE1, else examine further tests. If no test
+ exits with a zero status, run shell code RUN-IF-FALSE, with
+ simplifications if either RUN-IF-TRUE1 or RUN-IF-FALSE is empty.
+ For example,
+
+ AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
+ [test "x$foo" != xno], [HANDLE_FOO([maybe])],
+ [echo foo not specified])
+
+ ensures any required macros of `HANDLE_FOO' are expanded before
+ the first test.
+
+ -- Macro: AS_MKDIR_P (FILE-NAME)
+ Make the directory FILE-NAME, including intervening directories as
+ necessary. This is equivalent to `mkdir -p -- FILE-NAME', except
+ that it is portable to older versions of `mkdir' that lack support
+ for the `-p' option or for the `--' delimiter (*note Limitations
+ of Usual Tools: mkdir.). Also, `AS_MKDIR_P' succeeds if FILE-NAME
+ is a symbolic link to an existing directory, even though Posix is
+ unclear whether `mkdir -p' should succeed in that case. If
+ creation of FILE-NAME fails, exit the script.
+
+ Also see the `AC_PROG_MKDIR_P' macro (*note Particular Programs::).
+
+ -- Macro: AS_SET_STATUS (STATUS)
+ Emit shell code to set the value of `$?' to STATUS, as efficiently
+ as possible. However, this is not guaranteed to abort a shell
+ running with `set -e' (*note Limitations of Shell Builtins: set.).
+ This should also be used at the end of a complex shell function
+ instead of `return' (*note Shell Functions::) to avoid a DJGPP
+ shell bug.
+
+ -- Macro: AS_TR_CPP (EXPRESSION)
+ Transform EXPRESSION into a valid right-hand side for a C
+ `#define'. For example:
+
+ # This outputs "#define HAVE_CHAR_P 1".
+ # Notice the m4 quoting around #, to prevent an m4 comment
+ type="char *"
+ echo "[#]define AS_TR_CPP([HAVE_$type]) 1"
+
+ -- Macro: AS_TR_SH (EXPRESSION)
+ Transform EXPRESSION into shell code that generates a valid shell
+ variable name. The result is literal when possible at m4 time,
+ but must be used with `eval' if EXPRESSION causes shell
+ indirections. For example:
+
+ # This outputs "Have it!".
+ header="sys/some file.h"
+ eval AS_TR_SH([HAVE_$header])=yes
+ if test "x$HAVE_sys_some_file_h" = xyes; then echo "Have it!"; fi
+
+ -- Macro: AS_SET_CATFILE (VAR, DIR, FILE)
+ Set the polymorphic shell variable VAR to DIR/FILE, but optimizing
+ the common cases (DIR or FILE is `.', FILE is absolute, etc.).
+
+ -- Macro: AS_UNSET (VAR)
+ Unsets the shell variable VAR, working around bugs in older shells
+ (*note Limitations of Shell Builtins: unset.). VAR can be a
+ literal or indirect variable name.
+
+ -- Macro: AS_VERSION_COMPARE (VERSION-1, VERSION-2, [ACTION-IF-LESS],
+ [ACTION-IF-EQUAL], [ACTION-IF-GREATER])
+ Compare two strings VERSION-1 and VERSION-2, possibly containing
+ shell variables, as version strings, and expand ACTION-IF-LESS,
+ ACTION-IF-EQUAL, or ACTION-IF-GREATER depending upon the result.
+ The algorithm to compare is similar to the one used by strverscmp
+ in glibc (*note String/Array Comparison: (libc)String/Array
+ Comparison.).
+
+
+File: autoconf.info, Node: Polymorphic Variables, Next: Initialization Macros, Prev: Common Shell Constructs, Up: Programming in M4sh
+
+9.2 Support for indirect variable names
+=======================================
+
+Often, it is convenient to write a macro that will emit shell code
+operating on a shell variable. The simplest case is when the variable
+name is known. But a more powerful idiom is writing shell code that can
+work through an indirection, where another variable or command
+substitution produces the name of the variable to actually manipulate.
+M4sh supports the notion of polymorphic shell variables, making it easy
+to write a macro that can deal with either literal or indirect variable
+names and output shell code appropriate for both use cases. Behavior is
+undefined if expansion of an indirect variable does not result in a
+literal variable name.
+
+ -- Macro: AS_LITERAL_IF (EXPRESSION, [IF-LITERAL], [IF-NOT],
+ [IF-SIMPLE-REF = `IF-NOT'])
+ -- Macro: AS_LITERAL_WORD_IF (EXPRESSION, [IF-LITERAL], [IF-NOT],
+ [IF-SIMPLE-REF = `IF-NOT'])
+ If the expansion of EXPRESSION is definitely a shell literal,
+ expand IF-LITERAL. If the expansion of EXPRESSION looks like it
+ might contain shell indirections (such as `$var' or ``expr`'),
+ then IF-NOT is expanded. Sometimes, it is possible to output
+ optimized code if EXPRESSION consists only of shell variable
+ expansions (such as `${var}'), in which case IF-SIMPLE-REF can be
+ provided; but defaulting to IF-NOT should always be safe.
+ `AS_LITERAL_WORD_IF' only expands IF-LITERAL if EXPRESSION looks
+ like a single shell word, containing no whitespace; while
+ `AS_LITERAL_IF' allows whitespace in EXPRESSION.
+
+ In order to reduce the time spent recognizing whether an
+ EXPRESSION qualifies as a literal or a simple indirection, the
+ implementation is somewhat conservative: EXPRESSION must be a
+ single shell word (possibly after stripping whitespace),
+ consisting only of bytes that would have the same meaning whether
+ unquoted or enclosed in double quotes (for example, `a.b' results
+ in IF-LITERAL, even though it is not a valid shell variable name;
+ while both `'a'' and `[$]' result in IF-NOT, because they behave
+ differently than `"'a'"' and `"[$]"'). This macro can be used in
+ contexts for recognizing portable file names (such as in the
+ implementation of `AC_LIBSOURCE'), or coupled with some
+ transliterations for forming valid variable names (such as in the
+ implementation of `AS_TR_SH', which uses an additional
+ `m4_translit' to convert `.' to `_').
+
+ This example shows how to read the contents of the shell variable
+ `bar', exercising all three arguments to `AS_LITERAL_IF'. It
+ results in a script that will output the line `hello' three times.
+
+ AC_DEFUN([MY_ACTION],
+ [AS_LITERAL_IF([$1],
+ [echo "$$1"],
+ [AS_VAR_COPY([var], [$1])
+ echo "$var"],
+ [eval 'echo "$'"$1"\"])])
+ foo=bar bar=hello
+ MY_ACTION([bar])
+ MY_ACTION([`echo bar`])
+ MY_ACTION([$foo])
+
+ -- Macro: AS_VAR_APPEND (VAR, TEXT)
+ Emit shell code to append the shell expansion of TEXT to the end
+ of the current contents of the polymorphic shell variable VAR,
+ taking advantage of shells that provide the `+=' extension for more
+ efficient scaling.
+
+ For situations where the final contents of VAR are relatively
+ short (less than 256 bytes), it is more efficient to use the
+ simpler code sequence of `VAR=${VAR}TEXT' (or its polymorphic
+ equivalent of `AS_VAR_COPY([t], [VAR])' and `AS_VAR_SET([VAR],
+ ["$t"TEXT])'). But in the case when the script will be repeatedly
+ appending text into `var', issues of scaling start to become
+ apparent. A naive implementation requires execution time linear
+ to the length of the current contents of VAR as well as the length
+ of TEXT for a single append, for an overall quadratic scaling with
+ multiple appends. This macro takes advantage of shells which
+ provide the extension `VAR+=TEXT', which can provide amortized
+ constant time for a single append, for an overall linear scaling
+ with multiple appends. Note that unlike `AS_VAR_SET', this macro
+ requires that TEXT be quoted properly to avoid field splitting and
+ file name expansion.
+
+ -- Macro: AS_VAR_ARITH (VAR, EXPRESSION)
+ Emit shell code to compute the arithmetic expansion of EXPRESSION,
+ assigning the result as the contents of the polymorphic shell
+ variable VAR. The code takes advantage of shells that provide
+ `$(())' for fewer forks, but uses `expr' as a fallback.
+ Therefore, the syntax for a valid EXPRESSION is rather limited:
+ all operators must occur as separate shell arguments and with
+ proper quoting, there is no portable equality operator, all
+ variables containing numeric values must be expanded prior to the
+ computation, all numeric values must be provided in decimal
+ without leading zeroes, and the first shell argument should not be
+ a negative number. In the following example, this snippet will
+ print `(2+3)*4 == 20'.
+
+ bar=3
+ AS_VAR_ARITH([foo], [\( 2 + $bar \) \* 4])
+ echo "(2+$bar)*4 == $foo"
+
+ -- Macro: AS_VAR_COPY (DEST, SOURCE)
+ Emit shell code to assign the contents of the polymorphic shell
+ variable SOURCE to the polymorphic shell variable DEST. For
+ example, executing this M4sh snippet will output `bar hi':
+
+ foo=bar bar=hi
+ AS_VAR_COPY([a], [foo])
+ AS_VAR_COPY([b], [$foo])
+ echo "$a $b"
+
+ When it is necessary to access the contents of an indirect variable
+ inside a shell double-quoted context, the recommended idiom is to
+ first copy the contents into a temporary literal shell variable.
+
+ for header in stdint_h inttypes_h ; do
+ AS_VAR_COPY([var], [ac_cv_header_$header])
+ echo "$header detected: $var"
+ done
+
+ -- Macro: AS_VAR_IF (VAR, [WORD], [IF-EQUAL], [IF-NOT-EQUAL])
+ Output a shell conditional statement. If the contents of the
+ polymorphic shell variable VAR match the string WORD, execute
+ IF-EQUAL; otherwise execute IF-NOT-EQUAL. WORD must be a single
+ shell word (typically a quoted string). Avoids shell bugs if an
+ interrupt signal arrives while a command substitution in VAR is
+ being expanded.
+
+ -- Macro: AS_VAR_PUSHDEF (M4-NAME, VALUE)
+ -- Macro: AS_VAR_POPDEF (M4-NAME)
+ A common M4sh idiom involves composing shell variable names from
+ an m4 argument (for example, writing a macro that uses a cache
+ variable). VALUE can be an arbitrary string, which will be
+ transliterated into a valid shell name by `AS_TR_SH'. In order to
+ access the composed variable name based on VALUE, it is easier to
+ declare a temporary m4 macro M4-NAME with `AS_VAR_PUSHDEF', then
+ use that macro as the argument to subsequent `AS_VAR' macros as a
+ polymorphic variable name, and finally free the temporary macro
+ with `AS_VAR_POPDEF'. These macros are often followed with `dnl',
+ to avoid excess newlines in the output.
+
+ Here is an involved example, that shows the power of writing
+ macros that can handle composed shell variable names:
+
+ m4_define([MY_CHECK_HEADER],
+ [AS_VAR_PUSHDEF([my_Header], [ac_cv_header_$1])dnl
+ AS_VAR_IF([my_Header], [yes], [echo "header $1 detected"])dnl
+ AS_VAR_POPDEF([my_Header])dnl
+ ])
+ MY_CHECK_HEADER([stdint.h])
+ for header in inttypes.h stdlib.h ; do
+ MY_CHECK_HEADER([$header])
+ done
+
+ In the above example, `MY_CHECK_HEADER' can operate on polymorphic
+ variable names. In the first invocation, the m4 argument is
+ `stdint.h', which transliterates into a literal `stdint_h'. As a
+ result, the temporary macro `my_Header' expands to the literal
+ shell name `ac_cv_header_stdint_h'. In the second invocation, the
+ m4 argument to `MY_CHECK_HEADER' is `$header', and the temporary
+ macro `my_Header' expands to the indirect shell name
+ `$as_my_Header'. During the shell execution of the for loop, when
+ `$header' contains `inttypes.h', then `$as_my_Header' contains
+ `ac_cv_header_inttypes_h'. If this script is then run on a
+ platform where all three headers have been previously detected, the
+ output of the script will include:
+
+ header stdint.h detected
+ header inttypes.h detected
+ header stdlib.h detected
+
+ -- Macro: AS_VAR_SET (VAR, [VALUE])
+ Emit shell code to assign the contents of the polymorphic shell
+ variable VAR to the shell expansion of VALUE. VALUE is not
+ subject to field splitting or file name expansion, so if command
+ substitution is used, it may be done with ``""`' rather than using
+ an intermediate variable (*note Shell Substitutions::). However,
+ VALUE does undergo rescanning for additional macro names; behavior
+ is unspecified if late expansion results in any shell
+ meta-characters.
+
+ -- Macro: AS_VAR_SET_IF (VAR, [IF-SET], [IF-UNDEF])
+ Emit a shell conditional statement, which executes IF-SET if the
+ polymorphic shell variable `var' is set to any value, and IF-UNDEF
+ otherwise.
+
+ -- Macro: AS_VAR_TEST_SET (VAR)
+ Emit a shell statement that results in a successful exit status
+ only if the polymorphic shell variable `var' is set.
+
+
+File: autoconf.info, Node: Initialization Macros, Next: File Descriptor Macros, Prev: Polymorphic Variables, Up: Programming in M4sh
+
+9.3 Initialization Macros
+=========================
+
+ -- Macro: AS_BOURNE_COMPATIBLE
+ Set up the shell to be more compatible with the Bourne shell as
+ standardized by Posix, if possible. This may involve setting
+ environment variables, or setting options, or similar
+ implementation-specific actions. This macro is deprecated, since
+ `AS_INIT' already invokes it.
+
+ -- Macro: AS_INIT
+ Initialize the M4sh environment. This macro calls `m4_init', then
+ outputs the `#! /bin/sh' line, a notice about where the output was
+ generated from, and code to sanitize the environment for the rest
+ of the script. Among other initializations, this sets `SHELL' to
+ the shell chosen to run the script (*note CONFIG_SHELL::), and
+ `LC_ALL' to ensure the C locale. Finally, it changes the current
+ diversion to `BODY'. `AS_INIT' is called automatically by
+ `AC_INIT' and `AT_INIT', so shell code in `configure',
+ `config.status', and `testsuite' all benefit from a sanitized
+ shell environment.
+
+ -- Macro: AS_INIT_GENERATED (FILE, [COMMENT])
+ Emit shell code to start the creation of a subsidiary shell script
+ in FILE, including changing FILE to be executable. This macro
+ populates the child script with information learned from the parent
+ (thus, the emitted code is equivalent in effect, but more
+ efficient, than the code output by `AS_INIT',
+ `AS_BOURNE_COMPATIBLE', and `AS_SHELL_SANITIZE'). If present,
+ COMMENT is output near the beginning of the child, prior to the
+ shell initialization code, and is subject to parameter expansion,
+ command substitution, and backslash quote removal. The parent
+ script should check the exit status after this macro, in case FILE
+ could not be properly created (for example, if the disk was full).
+ If successfully created, the parent script can then proceed to
+ append additional M4sh constructs into the child script.
+
+ Note that the child script starts life without a log file open, so
+ if the parent script uses logging (*note AS_MESSAGE_LOG_FD::), you
+ must temporarily disable any attempts to use the log file until
+ after emitting code to open a log within the child. On the other
+ hand, if the parent script has `AS_MESSAGE_FD' redirected
+ somewhere besides `1', then the child script already has code that
+ copies stdout to that descriptor. Currently, the suggested idiom
+ for writing a M4sh shell script from within another script is:
+
+ AS_INIT_GENERATED([FILE], [[# My child script.
+ ]]) || { AS_ECHO(["Failed to create child script"]); AS_EXIT; }
+ m4_pushdef([AS_MESSAGE_LOG_FD])dnl
+ cat >> "FILE" <<\__EOF__
+ # Code to initialize AS_MESSAGE_LOG_FD
+ m4_popdef([AS_MESSAGE_LOG_FD])dnl
+ # Additional code
+ __EOF__
+
+ This, however, may change in the future as the M4sh interface is
+ stabilized further.
+
+ Also, be aware that use of `LINENO' within the child script may
+ report line numbers relative to their location in the parent
+ script, even when using `AS_LINENO_PREPARE', if the parent script
+ was unable to locate a shell with working `LINENO' support.
+
+ -- Macro: AS_LINENO_PREPARE
+ Find a shell that supports the special variable `LINENO', which
+ contains the number of the currently executing line. This macro is
+ automatically invoked by `AC_INIT' in configure scripts.
+
+ -- Macro: AS_ME_PREPARE
+ Set up variable `as_me' to be the basename of the currently
+ executing script. This macro is automatically invoked by
+ `AC_INIT' in configure scripts.
+
+ -- Macro: AS_TMPDIR (PREFIX, [DIR = `${TMPDIR:=/tmp}'])
+ Create, as safely as possible, a temporary sub-directory within
+ DIR with a name starting with PREFIX. PREFIX should be 2-4
+ characters, to make it slightly easier to identify the owner of
+ the directory. If DIR is omitted, then the value of `TMPDIR' will
+ be used (defaulting to `/tmp'). On success, the name of the newly
+ created directory is stored in the shell variable `tmp'. On
+ error, the script is aborted.
+
+ Typically, this macro is coupled with some exit traps to delete
+ the created directory and its contents on exit or interrupt.
+ However, there is a slight window between when the directory is
+ created and when the name is actually known to the shell, so an
+ interrupt at the right moment might leave the temporary directory
+ behind. Hence it is important to use a PREFIX that makes it
+ easier to determine if a leftover temporary directory from an
+ interrupted script is safe to delete.
+
+ The use of the output variable `$tmp' rather than something in the
+ `as_' namespace is historical; it has the unfortunate consequence
+ that reusing this otherwise common name for any other purpose
+ inside your script has the potential to break any cleanup traps
+ designed to remove the temporary directory.
+
+ -- Macro: AS_SHELL_SANITIZE
+ Initialize the shell suitably for `configure' scripts. This has
+ the effect of `AS_BOURNE_COMPATIBLE', and sets some other
+ environment variables for predictable results from configuration
+ tests. For example, it sets `LC_ALL' to change to the default C
+ locale. *Note Special Shell Variables::. This macro is
+ deprecated, since `AS_INIT' already invokes it.
+
+
+File: autoconf.info, Node: File Descriptor Macros, Prev: Initialization Macros, Up: Programming in M4sh
+
+9.4 File Descriptor Macros
+==========================
+
+The following macros define file descriptors used to output messages
+(or input values) from `configure' scripts. For example:
+
+ echo "$wombats found" >&AS_MESSAGE_LOG_FD
+ echo 'Enter desired kangaroo count:' >&AS_MESSAGE_FD
+ read kangaroos <&AS_ORIGINAL_STDIN_FD`
+
+However doing so is seldom needed, because Autoconf provides higher
+level macros as described below.
+
+ -- Macro: AS_MESSAGE_FD
+ The file descriptor for `checking for...' messages and results.
+ By default, `AS_INIT' sets this to `1' for standalone M4sh
+ clients. However, `AC_INIT' shuffles things around to another file
+ descriptor, in order to allow the `-q' option of `configure' to
+ choose whether messages should go to the script's standard output
+ or be discarded.
+
+ If you want to display some messages, consider using one of the
+ printing macros (*note Printing Messages::) instead. Copies of
+ messages output via these macros are also recorded in `config.log'.
+
+ -- Macro: AS_MESSAGE_LOG_FD
+ This must either be empty, or expand to a file descriptor for log
+ messages. By default, `AS_INIT' sets this macro to the empty
+ string for standalone M4sh clients, thus disabling logging.
+ However, `AC_INIT' shuffles things around so that both `configure'
+ and `config.status' use `config.log' for log messages. Macros
+ that run tools, like `AC_COMPILE_IFELSE' (*note Running the
+ Compiler::), redirect all output to this descriptor. You may want
+ to do so if you develop such a low-level macro.
+
+ -- Macro: AS_ORIGINAL_STDIN_FD
+ This must expand to a file descriptor for the original standard
+ input. By default, `AS_INIT' sets this macro to `0' for standalone
+ M4sh clients. However, `AC_INIT' shuffles things around for
+ safety.
+
+ When `configure' runs, it may accidentally execute an interactive
+ command that has the same name as the non-interactive meant to be
+ used or checked. If the standard input was the terminal, such
+ interactive programs would cause `configure' to stop, pending some
+ user input. Therefore `configure' redirects its standard input
+ from `/dev/null' during its initialization. This is not normally
+ a problem, since `configure' normally does not need user input.
+
+ In the extreme case where your `configure' script really needs to
+ obtain some values from the original standard input, you can read
+ them explicitly from `AS_ORIGINAL_STDIN_FD'.
+
+
+File: autoconf.info, Node: Writing Autoconf Macros, Next: Portable Shell, Prev: Programming in M4sh, Up: Top
+
+10 Writing Autoconf Macros
+**************************
+
+When you write a feature test that could be applicable to more than one
+software package, the best thing to do is encapsulate it in a new macro.
+Here are some instructions and guidelines for writing Autoconf macros.
+
+* Menu:
+
+* Macro Definitions:: Basic format of an Autoconf macro
+* Macro Names:: What to call your new macros
+* Reporting Messages:: Notifying `autoconf' users
+* Dependencies Between Macros:: What to do when macros depend on other macros
+* Obsoleting Macros:: Warning about old ways of doing things
+* Coding Style:: Writing Autoconf macros a` la Autoconf
+
+
+File: autoconf.info, Node: Macro Definitions, Next: Macro Names, Up: Writing Autoconf Macros
+
+10.1 Macro Definitions
+======================
+
+ -- Macro: AC_DEFUN (NAME, [BODY])
+ Autoconf macros are defined using the `AC_DEFUN' macro, which is
+ similar to the M4 builtin `m4_define' macro; this creates a macro
+ named NAME and with BODY as its expansion. In addition to
+ defining a macro, `AC_DEFUN' adds to it some code that is used to
+ constrain the order in which macros are called, while avoiding
+ redundant output (*note Prerequisite Macros::).
+
+ An Autoconf macro definition looks like this:
+
+ AC_DEFUN(MACRO-NAME, MACRO-BODY)
+
+ You can refer to any arguments passed to the macro as `$1', `$2',
+etc. *Note How to define new macros: (m4.info)Definitions, for more
+complete information on writing M4 macros.
+
+ Most macros fall in one of two general categories. The first
+category includes macros which take arguments, in order to generate
+output parameterized by those arguments. Macros in this category are
+designed to be directly expanded, often multiple times, and should not
+be used as the argument to `AC_REQUIRE'. The other category includes
+macros which are shorthand for a fixed block of text, and therefore do
+not take arguments. For this category of macros, directly expanding
+the macro multiple times results in redundant output, so it is more
+common to use the macro as the argument to `AC_REQUIRE', or to declare
+the macro with `AC_DEFUN_ONCE' (*note One-Shot Macros::).
+
+ Be sure to properly quote both the MACRO-BODY _and_ the MACRO-NAME
+to avoid any problems if the macro happens to have been previously
+defined.
+
+ Each macro should have a header comment that gives its prototype,
+and a brief description. When arguments have default values, display
+them in the prototype. For example:
+
+ # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
+ # --------------------------------------
+ m4_define([AC_MSG_ERROR],
+ [{ AS_MESSAGE([error: $1], [2])
+ exit m4_default([$2], [1]); }])
+
+ Comments about the macro should be left in the header comment. Most
+other comments make their way into `configure', so just keep using `#'
+to introduce comments.
+
+ If you have some special comments about pure M4 code, comments that
+make no sense in `configure' and in the header comment, then use the
+builtin `dnl': it causes M4 to discard the text through the next
+newline.
+
+ Keep in mind that `dnl' is rarely needed to introduce comments;
+`dnl' is more useful to get rid of the newlines following macros that
+produce no output, such as `AC_REQUIRE'.
+
+ Public third-party macros need to use `AC_DEFUN', and not
+`m4_define', in order to be found by `aclocal' (*note Extending
+aclocal: (automake)Extending aclocal.). Additionally, if it is ever
+determined that a macro should be made obsolete, it is easy to convert
+from `AC_DEFUN' to `AU_DEFUN' in order to have `autoupdate' assist the
+user in choosing a better alternative, but there is no corresponding
+way to make `m4_define' issue an upgrade notice (*note AU_DEFUN::).
+
+ There is another subtle, but important, difference between using
+`m4_define' and `AC_DEFUN': only the former is unaffected by
+`AC_REQUIRE'. When writing a file, it is always safe to replace a
+block of text with a `m4_define' macro that will expand to the same
+text. But replacing a block of text with an `AC_DEFUN' macro with the
+same content does not necessarily give the same results, because it
+changes the location where any embedded but unsatisfied `AC_REQUIRE'
+invocations within the block will be expanded. For an example of this,
+see *note Expanded Before Required::.
+
+
+File: autoconf.info, Node: Macro Names, Next: Reporting Messages, Prev: Macro Definitions, Up: Writing Autoconf Macros
+
+10.2 Macro Names
+================
+
+All of the public Autoconf macros have all-uppercase names in the
+namespace `^AC_' to prevent them from accidentally conflicting with
+other text; Autoconf also reserves the namespace `^_AC_' for internal
+macros. All shell variables that they use for internal purposes have
+mostly-lowercase names starting with `ac_'. Autoconf also uses
+here-document delimiters in the namespace `^_AC[A-Z]'. During
+`configure', files produced by Autoconf make heavy use of the file
+system namespace `^conf'.
+
+ Since Autoconf is built on top of M4sugar (*note Programming in
+M4sugar::) and M4sh (*note Programming in M4sh::), you must also be
+aware of those namespaces (`^_?\(m4\|AS\)_'). And since `configure.ac'
+is also designed to be scanned by Autoheader, Autoscan, Autoupdate, and
+Automake, you should be aware of the `^_?A[HNUM]_' namespaces. In
+general, you _should not use_ the namespace of a package that does not
+own the macro or shell code you are writing.
+
+ To ensure that your macros don't conflict with present or future
+Autoconf macros, you should prefix your own macro names and any shell
+variables they use with some other sequence. Possibilities include your
+initials, or an abbreviation for the name of your organization or
+software package. Historically, people have not always followed the
+rule of using a namespace appropriate for their package, and this has
+made it difficult for determining the origin of a macro (and where to
+report bugs about that macro), as well as difficult for the true
+namespace owner to add new macros without interference from pre-existing
+uses of third-party macros. Perhaps the best example of this confusion
+is the `AM_GNU_GETTEXT' macro, which belongs, not to Automake, but to
+Gettext.
+
+ Most of the Autoconf macros' names follow a structured naming
+convention that indicates the kind of feature check by the name. The
+macro names consist of several words, separated by underscores, going
+from most general to most specific. The names of their cache variables
+use the same convention (*note Cache Variable Names::, for more
+information on them).
+
+ The first word of the name after the namespace initials (such as
+`AC_') usually tells the category of the feature being tested. Here
+are the categories used in Autoconf for specific test macros, the kind
+of macro that you are more likely to write. They are also used for
+cache variables, in all-lowercase. Use them where applicable; where
+they're not, invent your own categories.
+
+`C'
+ C language builtin features.
+
+`DECL'
+ Declarations of C variables in header files.
+
+`FUNC'
+ Functions in libraries.
+
+`GROUP'
+ Posix group owners of files.
+
+`HEADER'
+ Header files.
+
+`LIB'
+ C libraries.
+
+`PROG'
+ The base names of programs.
+
+`MEMBER'
+ Members of aggregates.
+
+`SYS'
+ Operating system features.
+
+`TYPE'
+ C builtin or declared types.
+
+`VAR'
+ C variables in libraries.
+
+ After the category comes the name of the particular feature being
+tested. Any further words in the macro name indicate particular aspects
+of the feature. For example, `AC_PROG_CC_STDC' checks whether the C
+compiler supports ISO Standard C.
+
+ An internal macro should have a name that starts with an underscore;
+Autoconf internals should therefore start with `_AC_'. Additionally, a
+macro that is an internal subroutine of another macro should have a
+name that starts with an underscore and the name of that other macro,
+followed by one or more words saying what the internal macro does. For
+example, `AC_PATH_X' has internal macros `_AC_PATH_X_XMKMF' and
+`_AC_PATH_X_DIRECT'.
+
+
+File: autoconf.info, Node: Reporting Messages, Next: Dependencies Between Macros, Prev: Macro Names, Up: Writing Autoconf Macros
+
+10.3 Reporting Messages
+=======================
+
+When macros statically diagnose abnormal situations, benign or fatal, it
+is possible to make `autoconf' detect the problem, and refuse to create
+`configure' in the case of an error. The macros in this section are
+considered obsolescent, and new code should use M4sugar macros for this
+purpose, see *note Diagnostic Macros::.
+
+ On the other hand, it is possible to want to detect errors when
+`configure' is run, which are dependent on the environment of the user
+rather than the maintainer. For dynamic diagnostics, see *note
+Printing Messages::.
+
+ -- Macro: AC_DIAGNOSE (CATEGORY, MESSAGE)
+ Report MESSAGE as a warning (or as an error if requested by the
+ user) if warnings of the CATEGORY are turned on. This macro is
+ obsolescent; you are encouraged to use:
+ m4_warn([CATEGORY], [MESSAGE])
+ instead. *Note m4_warn::, for more details, including valid
+ CATEGORY names.
+
+ -- Macro: AC_WARNING (MESSAGE)
+ Report MESSAGE as a syntax warning. This macro is obsolescent;
+ you are encouraged to use:
+ m4_warn([syntax], [MESSAGE])
+ instead. *Note m4_warn::, for more details, as well as better
+ finer-grained categories of warnings (not all problems have to do
+ with syntax).
+
+ -- Macro: AC_FATAL (MESSAGE)
+ Report a severe error MESSAGE, and have `autoconf' die. This
+ macro is obsolescent; you are encouraged to use:
+ m4_fatal([MESSAGE])
+ instead. *Note m4_fatal::, for more details.
+
+ When the user runs `autoconf -W error', warnings from `m4_warn'
+(including those issued through `AC_DIAGNOSE' and `AC_WARNING') are
+reported as errors, see *note autoconf Invocation::.
+
+
+File: autoconf.info, Node: Dependencies Between Macros, Next: Obsoleting Macros, Prev: Reporting Messages, Up: Writing Autoconf Macros
+
+10.4 Dependencies Between Macros
+================================
+
+Some Autoconf macros depend on other macros having been called first in
+order to work correctly. Autoconf provides a way to ensure that certain
+macros are called if needed and a way to warn the user if macros are
+called in an order that might cause incorrect operation.
+
+* Menu:
+
+* Prerequisite Macros:: Ensuring required information
+* Suggested Ordering:: Warning about possible ordering problems
+* One-Shot Macros:: Ensuring a macro is called only once
+
+
+File: autoconf.info, Node: Prerequisite Macros, Next: Suggested Ordering, Up: Dependencies Between Macros
+
+10.4.1 Prerequisite Macros
+--------------------------
+
+A macro that you write might need to use values that have previously
+been computed by other macros. For example, `AC_DECL_YYTEXT' examines
+the output of `flex' or `lex', so it depends on `AC_PROG_LEX' having
+been called first to set the shell variable `LEX'.
+
+ Rather than forcing the user of the macros to keep track of the
+dependencies between them, you can use the `AC_REQUIRE' macro to do it
+automatically. `AC_REQUIRE' can ensure that a macro is only called if
+it is needed, and only called once.
+
+ -- Macro: AC_REQUIRE (MACRO-NAME)
+ If the M4 macro MACRO-NAME has not already been called, call it
+ (without any arguments). Make sure to quote MACRO-NAME with
+ square brackets. MACRO-NAME must have been defined using
+ `AC_DEFUN' or else contain a call to `AC_PROVIDE' to indicate that
+ it has been called.
+
+ `AC_REQUIRE' must be used inside a macro defined by `AC_DEFUN'; it
+ must not be called from the top level. Also, it does not make
+ sense to require a macro that takes parameters.
+
+ `AC_REQUIRE' is often misunderstood. It really implements
+dependencies between macros in the sense that if one macro depends upon
+another, the latter is expanded _before_ the body of the former. To be
+more precise, the required macro is expanded before the outermost
+defined macro in the current expansion stack. In particular,
+`AC_REQUIRE([FOO])' is not replaced with the body of `FOO'. For
+instance, this definition of macros:
+
+ AC_DEFUN([TRAVOLTA],
+ [test "$body_temperature_in_celsius" -gt "38" &&
+ dance_floor=occupied])
+ AC_DEFUN([NEWTON_JOHN],
+ [test "x$hair_style" = xcurly &&
+ dance_floor=occupied])
+
+ AC_DEFUN([RESERVE_DANCE_FLOOR],
+ [if date | grep '^Sat.*pm' >/dev/null 2>&1; then
+ AC_REQUIRE([TRAVOLTA])
+ AC_REQUIRE([NEWTON_JOHN])
+ fi])
+
+with this `configure.ac'
+
+ AC_INIT([Dance Manager], [1.0], [bug-dance@example.org])
+ RESERVE_DANCE_FLOOR
+ if test "x$dance_floor" = xoccupied; then
+ AC_MSG_ERROR([cannot pick up here, let's move])
+ fi
+
+does not leave you with a better chance to meet a kindred soul at other
+times than Saturday night since it expands into:
+
+ test "$body_temperature_in_Celsius" -gt "38" &&
+ dance_floor=occupied
+ test "x$hair_style" = xcurly &&
+ dance_floor=occupied
+ fi
+ if date | grep '^Sat.*pm' >/dev/null 2>&1; then
+
+
+ fi
+
+ This behavior was chosen on purpose: (i) it prevents messages in
+required macros from interrupting the messages in the requiring macros;
+(ii) it avoids bad surprises when shell conditionals are used, as in:
+
+ if ...; then
+ AC_REQUIRE([SOME_CHECK])
+ fi
+ ...
+ SOME_CHECK
+
+ However, this implementation can lead to another class of problems.
+Consider the case where an outer macro first expands, then indirectly
+requires, an inner macro:
+
+ AC_DEFUN([TESTA], [[echo in A
+ if test -n "$SEEN_A" ; then echo duplicate ; fi
+ SEEN_A=:]])
+ AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
+ if test -z "$SEEN_A" ; then echo bug ; fi]])
+ AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+ AC_DEFUN([OUTER], [[echo in OUTER]
+ TESTA
+ TESTC])
+ OUTER
+
+Prior to Autoconf 2.64, the implementation of `AC_REQUIRE' recognized
+that `TESTB' needed to be hoisted prior to the expansion of `OUTER',
+but because `TESTA' had already been directly expanded, it failed to
+hoist `TESTA'. Therefore, the expansion of `TESTB' occurs prior to its
+prerequisites, leading to the following output:
+
+ in B
+ bug
+ in OUTER
+ in A
+ in C
+
+Newer Autoconf is smart enough to recognize this situation, and hoists
+`TESTA' even though it has already been expanded, but issues a syntax
+warning in the process. This is because the hoisted expansion of
+`TESTA' defeats the purpose of using `AC_REQUIRE' to avoid redundant
+code, and causes its own set of problems if the hoisted macro is not
+idempotent:
+
+ in A
+ in B
+ in OUTER
+ in A
+ duplicate
+ in C
+
+ The bug is not in Autoconf, but in the macro definitions. If you
+ever pass a particular macro name to `AC_REQUIRE', then you are implying
+that the macro only needs to be expanded once. But to enforce this,
+either the macro must be declared with `AC_DEFUN_ONCE' (although this
+only helps in Autoconf 2.64 or newer), or all uses of that macro should
+be through `AC_REQUIRE'; directly expanding the macro defeats the point
+of using `AC_REQUIRE' to eliminate redundant expansion. In the
+example, this rule of thumb was violated because `TESTB' requires
+`TESTA' while `OUTER' directly expands it. One way of fixing the bug
+is to factor `TESTA' into two macros, the portion designed for direct
+and repeated use (here, named `TESTA'), and the portion designed for
+one-shot output and used only inside `AC_REQUIRE' (here, named
+`TESTA_PREREQ'). Then, by fixing all clients to use the correct
+calling convention according to their needs:
+
+ AC_DEFUN([TESTA], [AC_REQUIRE([TESTA_PREREQ])[echo in A]])
+ AC_DEFUN([TESTA_PREREQ], [[echo in A_PREREQ
+ if test -n "$SEEN_A" ; then echo duplicate ; fi
+ SEEN_A=:]])
+ AC_DEFUN([TESTB], [AC_REQUIRE([TESTA_PREREQ])[echo in B
+ if test -z "$SEEN_A" ; then echo bug ; fi]])
+ AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+ AC_DEFUN([OUTER], [[echo in OUTER]
+ TESTA
+ TESTC])
+ OUTER
+
+the resulting output will then obey all dependency rules and avoid any
+syntax warnings, whether the script is built with old or new Autoconf
+versions:
+
+ in A_PREREQ
+ in B
+ in OUTER
+ in A
+ in C
+
+ The helper macros `AS_IF' and `AS_CASE' may be used to enforce
+expansion of required macros outside of shell conditional constructs.
+You are furthermore encouraged, although not required, to put all
+`AC_REQUIRE' calls at the beginning of a macro. You can use `dnl' to
+avoid the empty lines they leave.
+
+
+File: autoconf.info, Node: Suggested Ordering, Next: One-Shot Macros, Prev: Prerequisite Macros, Up: Dependencies Between Macros
+
+10.4.2 Suggested Ordering
+-------------------------
+
+Some macros should be run before another macro if both are called, but
+neither _requires_ that the other be called. For example, a macro that
+changes the behavior of the C compiler should be called before any
+macros that run the C compiler. Many of these dependencies are noted in
+the documentation.
+
+ Autoconf provides the `AC_BEFORE' macro to warn users when macros
+with this kind of dependency appear out of order in a `configure.ac'
+file. The warning occurs when creating `configure' from
+`configure.ac', not when running `configure'.
+
+ For example, `AC_PROG_CPP' checks whether the C compiler can run the
+C preprocessor when given the `-E' option. It should therefore be
+called after any macros that change which C compiler is being used,
+such as `AC_PROG_CC'. So `AC_PROG_CC' contains:
+
+ AC_BEFORE([$0], [AC_PROG_CPP])dnl
+
+This warns the user if a call to `AC_PROG_CPP' has already occurred
+when `AC_PROG_CC' is called.
+
+ -- Macro: AC_BEFORE (THIS-MACRO-NAME, CALLED-MACRO-NAME)
+ Make M4 print a warning message to the standard error output if
+ CALLED-MACRO-NAME has already been called. THIS-MACRO-NAME should
+ be the name of the macro that is calling `AC_BEFORE'. The macro
+ CALLED-MACRO-NAME must have been defined using `AC_DEFUN' or else
+ contain a call to `AC_PROVIDE' to indicate that it has been called.
+
+
+File: autoconf.info, Node: One-Shot Macros, Prev: Suggested Ordering, Up: Dependencies Between Macros
+
+10.4.3 One-Shot Macros
+----------------------
+
+Some macros should be called only once, either because calling them
+multiple time is unsafe, or because it is bad style. For instance
+Autoconf ensures that `AC_CANONICAL_BUILD' and cousins (*note
+Canonicalizing::) are evaluated only once, because it makes no sense to
+run these expensive checks more than once. Such one-shot macros can be
+defined using `AC_DEFUN_ONCE'.
+
+ -- Macro: AC_DEFUN_ONCE (MACRO-NAME, MACRO-BODY)
+ Declare macro MACRO-NAME like `AC_DEFUN' would (*note Macro
+ Definitions::), but add additional logic that guarantees that only
+ the first use of the macro (whether by direct expansion or
+ `AC_REQUIRE') causes an expansion of MACRO-BODY; the expansion
+ will occur before the start of any enclosing macro defined by
+ `AC_DEFUN'. Subsequent expansions are silently ignored.
+ Generally, it does not make sense for MACRO-BODY to use parameters
+ such as `$1'.
+
+ Prior to Autoconf 2.64, a macro defined by `AC_DEFUN_ONCE' would
+emit a warning if it was directly expanded a second time, so for
+portability, it is better to use `AC_REQUIRE' than direct invocation of
+MACRO-NAME inside a macro defined by `AC_DEFUN' (*note Prerequisite
+Macros::).
+
+
+File: autoconf.info, Node: Obsoleting Macros, Next: Coding Style, Prev: Dependencies Between Macros, Up: Writing Autoconf Macros
+
+10.5 Obsoleting Macros
+======================
+
+Configuration and portability technology has evolved over the years.
+Often better ways of solving a particular problem are developed, or
+ad-hoc approaches are systematized. This process has occurred in many
+parts of Autoconf. One result is that some of the macros are now
+considered "obsolete"; they still work, but are no longer considered
+the best thing to do, hence they should be replaced with more modern
+macros. Ideally, `autoupdate' should replace the old macro calls with
+their modern implementation.
+
+ Autoconf provides a simple means to obsolete a macro.
+
+ -- Macro: AU_DEFUN (OLD-MACRO, IMPLEMENTATION, [MESSAGE])
+ Define OLD-MACRO as IMPLEMENTATION. The only difference with
+ `AC_DEFUN' is that the user is warned that OLD-MACRO is now
+ obsolete.
+
+ If she then uses `autoupdate', the call to OLD-MACRO is replaced
+ by the modern IMPLEMENTATION. MESSAGE should include information
+ on what to do after running `autoupdate'; `autoupdate' prints it
+ as a warning, and includes it in the updated `configure.ac' file.
+
+ The details of this macro are hairy: if `autoconf' encounters an
+ `AU_DEFUN'ed macro, all macros inside its second argument are
+ expanded as usual. However, when `autoupdate' is run, only M4 and
+ M4sugar macros are expanded here, while all other macros are
+ disabled and appear literally in the updated `configure.ac'.
+
+ -- Macro: AU_ALIAS (OLD-NAME, NEW-NAME)
+ Used if the OLD-NAME is to be replaced by a call to NEW-MACRO with
+ the same parameters. This happens for example if the macro was
+ renamed.
+
+
+File: autoconf.info, Node: Coding Style, Prev: Obsoleting Macros, Up: Writing Autoconf Macros
+
+10.6 Coding Style
+=================
+
+The Autoconf macros follow a strict coding style. You are encouraged to
+follow this style, especially if you intend to distribute your macro,
+either by contributing it to Autoconf itself or the Autoconf Macro
+Archive (http://www.gnu.org/software/autoconf-archive/), or by other
+means.
+
+ The first requirement is to pay great attention to the quotation.
+For more details, see *note Autoconf Language::, and *note M4
+Quotation::.
+
+ Do not try to invent new interfaces. It is likely that there is a
+macro in Autoconf that resembles the macro you are defining: try to
+stick to this existing interface (order of arguments, default values,
+etc.). We _are_ conscious that some of these interfaces are not
+perfect; nevertheless, when harmless, homogeneity should be preferred
+over creativity.
+
+ Be careful about clashes both between M4 symbols and between shell
+variables.
+
+ If you stick to the suggested M4 naming scheme (*note Macro Names::),
+you are unlikely to generate conflicts. Nevertheless, when you need to
+set a special value, _avoid using a regular macro name_; rather, use an
+"impossible" name. For instance, up to version 2.13, the macro
+`AC_SUBST' used to remember what SYMBOL macros were already defined by
+setting `AC_SUBST_SYMBOL', which is a regular macro name. But since
+there is a macro named `AC_SUBST_FILE', it was just impossible to
+`AC_SUBST(FILE)'! In this case, `AC_SUBST(SYMBOL)' or
+`_AC_SUBST(SYMBOL)' should have been used (yes, with the parentheses).
+
+ No Autoconf macro should ever enter the user-variable name space;
+i.e., except for the variables that are the actual result of running the
+macro, all shell variables should start with `ac_'. In addition, small
+macros or any macro that is likely to be embedded in other macros
+should be careful not to use obvious names.
+
+ Do not use `dnl' to introduce comments: most of the comments you are
+likely to write are either header comments which are not output anyway,
+or comments that should make their way into `configure'. There are
+exceptional cases where you do want to comment special M4 constructs,
+in which case `dnl' is right, but keep in mind that it is unlikely.
+
+ M4 ignores the leading blanks and newlines before each argument.
+Use this feature to indent in such a way that arguments are (more or
+less) aligned with the opening parenthesis of the macro being called.
+For instance, instead of
+
+ AC_CACHE_CHECK(for EMX OS/2 environment,
+ ac_cv_emxos2,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
+ [ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
+
+write
+
+ AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+
+or even
+
+ AC_CACHE_CHECK([for EMX OS/2 environment],
+ [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+ [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+
+ When using `AC_RUN_IFELSE' or any macro that cannot work when
+cross-compiling, provide a pessimistic value (typically `no').
+
+ Feel free to use various tricks to prevent auxiliary tools, such as
+syntax-highlighting editors, from behaving improperly. For instance,
+instead of:
+
+ m4_bpatsubst([$1], [$"])
+
+use
+
+ m4_bpatsubst([$1], [$""])
+
+so that Emacsen do not open an endless "string" at the first quote.
+For the same reasons, avoid:
+
+ test $[#] != 0
+
+and use:
+
+ test $[@%:@] != 0
+
+Otherwise, the closing bracket would be hidden inside a `#'-comment,
+breaking the bracket-matching highlighting from Emacsen. Note the
+preferred style to escape from M4: `$[1]', `$[@]', etc. Do not escape
+when it is unnecessary. Common examples of useless quotation are
+`[$]$1' (write `$$1'), `[$]var' (use `$var'), etc. If you add
+portability issues to the picture, you'll prefer `${1+"$[@]"}' to
+`"[$]@"', and you'll prefer do something better than hacking Autoconf
+`:-)'.
+
+ When using `sed', don't use `-e' except for indenting purposes.
+With the `s' and `y' commands, the preferred separator is `/' unless
+`/' itself might appear in the pattern or replacement, in which case
+you should use `|', or optionally `,' if you know the pattern and
+replacement cannot contain a file name. If none of these characters
+will do, choose a printable character that cannot appear in the pattern
+or replacement. Characters from the set `"#$&'()*;<=>?`|~' are good
+choices if the pattern or replacement might contain a file name, since
+they have special meaning to the shell and are less likely to occur in
+file names.
+
+ *Note Macro Definitions::, for details on how to define a macro. If
+a macro doesn't use `AC_REQUIRE', is expected to never be the object of
+an `AC_REQUIRE' directive, and macros required by other macros inside
+arguments do not need to be expanded before this macro, then use
+`m4_define'. In case of doubt, use `AC_DEFUN'. Also take into account
+that public third-party macros need to use `AC_DEFUN' in order to be
+found by `aclocal' (*note Extending aclocal: (automake)Extending
+aclocal.). All the `AC_REQUIRE' statements should be at the beginning
+of the macro, and each statement should be followed by `dnl'.
+
+ You should not rely on the number of arguments: instead of checking
+whether an argument is missing, test that it is not empty. It provides
+both a simpler and a more predictable interface to the user, and saves
+room for further arguments.
+
+ Unless the macro is short, try to leave the closing `])' at the
+beginning of a line, followed by a comment that repeats the name of the
+macro being defined. This introduces an additional newline in
+`configure'; normally, that is not a problem, but if you want to remove
+it you can use `[]dnl' on the last line. You can similarly use `[]dnl'
+after a macro call to remove its newline. `[]dnl' is recommended
+instead of `dnl' to ensure that M4 does not interpret the `dnl' as
+being attached to the preceding text or macro output. For example,
+instead of:
+
+ AC_DEFUN([AC_PATH_X],
+ [AC_MSG_CHECKING([for X])
+ AC_REQUIRE_CPP()
+ # ...omitted...
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+ fi])
+
+you would write:
+
+ AC_DEFUN([AC_PATH_X],
+ [AC_REQUIRE_CPP()[]dnl
+ AC_MSG_CHECKING([for X])
+ # ...omitted...
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+ fi[]dnl
+ ])# AC_PATH_X
+
+ If the macro is long, try to split it into logical chunks.
+Typically, macros that check for a bug in a function and prepare its
+`AC_LIBOBJ' replacement should have an auxiliary macro to perform this
+setup. Do not hesitate to introduce auxiliary macros to factor your
+code.
+
+ In order to highlight the recommended coding style, here is a macro
+written the old way:
+
+ dnl Check for EMX on OS/2.
+ dnl _AC_EMXOS2
+ AC_DEFUN(_AC_EMXOS2,
+ [AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
+ ac_cv_emxos2=yes, ac_cv_emxos2=no)])
+ test "x$ac_cv_emxos2" = xyes && EMXOS2=yes])
+
+and the new way:
+
+ # _AC_EMXOS2
+ # ----------
+ # Check for EMX on OS/2.
+ m4_define([_AC_EMXOS2],
+ [AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+ test "x$ac_cv_emxos2" = xyes && EMXOS2=yes[]dnl
+ ])# _AC_EMXOS2
+
+
+File: autoconf.info, Node: Portable Shell, Next: Portable Make, Prev: Writing Autoconf Macros, Up: Top
+
+11 Portable Shell Programming
+*****************************
+
+When writing your own checks, there are some shell-script programming
+techniques you should avoid in order to make your code portable. The
+Bourne shell and upward-compatible shells like the Korn shell and Bash
+have evolved over the years, and many features added to the original
+System7 shell are now supported on all interesting porting targets.
+However, the following discussion between Russ Allbery and Robert Lipe
+is worth reading:
+
+Russ Allbery:
+
+ The GNU assumption that `/bin/sh' is the one and only shell leads
+ to a permanent deadlock. Vendors don't want to break users'
+ existing shell scripts, and there are some corner cases in the
+ Bourne shell that are not completely compatible with a Posix
+ shell. Thus, vendors who have taken this route will _never_
+ (OK..."never say never") replace the Bourne shell (as `/bin/sh')
+ with a Posix shell.
+
+Robert Lipe:
+
+ This is exactly the problem. While most (at least most System
+ V's) do have a Bourne shell that accepts shell functions most
+ vendor `/bin/sh' programs are not the Posix shell.
+
+ So while most modern systems do have a shell _somewhere_ that
+ meets the Posix standard, the challenge is to find it.
+
+ For this reason, part of the job of M4sh (*note Programming in
+M4sh::) is to find such a shell. But to prevent trouble, if you're not
+using M4sh you should not take advantage of features that were added
+after Unix version 7, circa 1977 (*note Systemology::); you should not
+use aliases, negated character classes, or even `unset'. `#' comments,
+while not in Unix version 7, were retrofitted in the original Bourne
+shell and can be assumed to be part of the least common denominator.
+
+ On the other hand, if you're using M4sh you can assume that the shell
+has the features that were added in SVR2 (circa 1984), including shell
+functions, `return', `unset', and I/O redirection for builtins. For
+more information, refer to `http://www.in-ulm.de/~mascheck/bourne/'.
+However, some pitfalls have to be avoided for portable use of these
+constructs; these will be documented in the rest of this chapter. See
+in particular *note Shell Functions:: and *note Limitations of Shell
+Builtins: Limitations of Builtins.
+
+ Some ancient systems have quite small limits on the length of the
+`#!' line; for instance, 32 bytes (not including the newline) on SunOS
+4. However, these ancient systems are no longer of practical concern.
+
+ The set of external programs you should run in a `configure' script
+is fairly small. *Note Utilities in Makefiles: (standards)Utilities in
+Makefiles, for the list. This restriction allows users to start out
+with a fairly small set of programs and build the rest, avoiding too
+many interdependencies between packages.
+
+ Some of these external utilities have a portable subset of features;
+see *note Limitations of Usual Tools::.
+
+ There are other sources of documentation about shells. The
+specification for the Posix Shell Command Language
+(http://www.opengroup.org/susv3/utilities/xcu_chap02.html), though more
+generous than the restrictive shell subset described above, is fairly
+portable nowadays. Also please see the Shell FAQs
+(http://www.faqs.org/faqs/unix-faq/shell/).
+
+* Menu:
+
+* Shellology:: A zoology of shells
+* Invoking the Shell:: Invoking the shell as a command
+* Here-Documents:: Quirks and tricks
+* File Descriptors:: FDs and redirections
+* Signal Handling:: Shells, signals, and headaches
+* File System Conventions:: File names
+* Shell Pattern Matching:: Pattern matching
+* Shell Substitutions:: Variable and command expansions
+* Assignments:: Varying side effects of assignments
+* Parentheses:: Parentheses in shell scripts
+* Slashes:: Slashes in shell scripts
+* Special Shell Variables:: Variables you should not change
+* Shell Functions:: What to look out for if you use them
+* Limitations of Builtins:: Portable use of not so portable /bin/sh
+* Limitations of Usual Tools:: Portable use of portable tools
+
+
+File: autoconf.info, Node: Shellology, Next: Invoking the Shell, Up: Portable Shell
+
+11.1 Shellology
+===============
+
+There are several families of shells, most prominently the Bourne family
+and the C shell family which are deeply incompatible. If you want to
+write portable shell scripts, avoid members of the C shell family. The
+the Shell difference FAQ
+(http://www.faqs.org/faqs/unix-faq/shell/shell-differences/) includes a
+small history of Posix shells, and a comparison between several of them.
+
+ Below we describe some of the members of the Bourne shell family.
+
+Ash
+ Ash is often used on GNU/Linux and BSD systems as a light-weight
+ Bourne-compatible shell. Ash 0.2 has some bugs that are fixed in
+ the 0.3.x series, but portable shell scripts should work around
+ them, since version 0.2 is still shipped with many GNU/Linux
+ distributions.
+
+ To be compatible with Ash 0.2:
+
+ - don't use `$?' after expanding empty or unset variables, or
+ at the start of an `eval':
+
+ foo=
+ false
+ $foo
+ echo "Do not use it: $?"
+ false
+ eval 'echo "Do not use it: $?"'
+
+ - don't use command substitution within variable expansion:
+
+ cat ${FOO=`bar`}
+
+ - beware that single builtin substitutions are not performed by
+ a subshell, hence their effect applies to the current shell!
+ *Note Shell Substitutions::, item "Command Substitution".
+
+Bash
+ To detect whether you are running Bash, test whether
+ `BASH_VERSION' is set. To require Posix compatibility, run `set
+ -o posix'. *Note Bash Posix Mode: (bash)Bash POSIX Mode, for
+ details.
+
+Bash 2.05 and later
+ Versions 2.05 and later of Bash use a different format for the
+ output of the `set' builtin, designed to make evaluating its
+ output easier. However, this output is not compatible with earlier
+ versions of Bash (or with many other shells, probably). So if you
+ use Bash 2.05 or higher to execute `configure', you'll need to use
+ Bash 2.05 for all other build tasks as well.
+
+Ksh
+ The Korn shell is compatible with the Bourne family and it mostly
+ conforms to Posix. It has two major variants commonly called
+ `ksh88' and `ksh93', named after the years of initial release. It
+ is usually called `ksh', but is called `sh' on some hosts if you
+ set your path appropriately.
+
+ Solaris systems have three variants: `/usr/bin/ksh' is `ksh88'; it
+ is standard on Solaris 2.0 and later. `/usr/xpg4/bin/sh' is a
+ Posix-compliant variant of `ksh88'; it is standard on Solaris 9
+ and later. `/usr/dt/bin/dtksh' is `ksh93'. Variants that are not
+ standard may be parts of optional packages. There is no extra
+ charge for these packages, but they are not part of a minimal OS
+ install and therefore some installations may not have it.
+
+ Starting with Tru64 Version 4.0, the Korn shell `/usr/bin/ksh' is
+ also available as `/usr/bin/posix/sh'. If the environment
+ variable `BIN_SH' is set to `xpg4', subsidiary invocations of the
+ standard shell conform to Posix.
+
+Pdksh
+ A public-domain clone of the Korn shell called `pdksh' is widely
+ available: it has most of the `ksh88' features along with a few of
+ its own. It usually sets `KSH_VERSION', except if invoked as
+ `/bin/sh' on OpenBSD, and similarly to Bash you can require Posix
+ compatibility by running `set -o posix'. Unfortunately, with
+ `pdksh' 5.2.14 (the latest stable version as of January 2007)
+ Posix mode is buggy and causes `pdksh' to depart from Posix in at
+ least one respect, see *note Shell Substitutions::.
+
+Zsh
+ To detect whether you are running `zsh', test whether
+ `ZSH_VERSION' is set. By default `zsh' is _not_ compatible with
+ the Bourne shell: you must execute `emulate sh', and for `zsh'
+ versions before 3.1.6-dev-18 you must also set `NULLCMD' to `:'.
+ *Note Compatibility: (zsh)Compatibility, for details.
+
+ The default Mac OS X `sh' was originally Zsh; it was changed to
+ Bash in Mac OS X 10.2.
+
+
+File: autoconf.info, Node: Invoking the Shell, Next: Here-Documents, Prev: Shellology, Up: Portable Shell
+
+11.2 Invoking the Shell
+=======================
+
+The Korn shell (up to at least version M-12/28/93d) has a bug when
+invoked on a file whose name does not contain a slash. It first
+searches for the file's name in `PATH', and if found it executes that
+rather than the original file. For example, assuming there is a binary
+executable `/usr/bin/script' in your `PATH', the last command in the
+following example fails because the Korn shell finds `/usr/bin/script'
+and refuses to execute it as a shell script:
+
+ $ touch xxyzzyz script
+ $ ksh xxyzzyz
+ $ ksh ./script
+ $ ksh script
+ ksh: script: cannot execute
+
+ Bash 2.03 has a bug when invoked with the `-c' option: if the
+option-argument ends in backslash-newline, Bash incorrectly reports a
+syntax error. The problem does not occur if a character follows the
+backslash:
+
+ $ $ bash -c 'echo foo \
+ > '
+ bash: -c: line 2: syntax error: unexpected end of file
+ $ bash -c 'echo foo \
+ > '
+ foo
+
+*Note Backslash-Newline-Empty::, for how this can cause problems in
+makefiles.
+
+
+File: autoconf.info, Node: Here-Documents, Next: File Descriptors, Prev: Invoking the Shell, Up: Portable Shell
+
+11.3 Here-Documents
+===================
+
+Don't rely on `\' being preserved just because it has no special
+meaning together with the next symbol. In the native `sh' on OpenBSD
+2.7 `\"' expands to `"' in here-documents with unquoted delimiter. As
+a general rule, if `\\' expands to `\' use `\\' to get `\'.
+
+ With OpenBSD 2.7's `sh'
+
+ $ cat <<EOF
+ > \" \\
+ > EOF
+ " \
+
+and with Bash:
+
+ bash-2.04$ cat <<EOF
+ > \" \\
+ > EOF
+ \" \
+
+ Using command substitutions in a here-document that is fed to a shell
+function is not portable. For example, with Solaris 10 `/bin/sh':
+
+ $ kitty () { cat; }
+ $ kitty <<EOF
+ > `echo ok`
+ > EOF
+ /tmp/sh199886: cannot open
+ $ echo $?
+ 1
+
+ Some shells mishandle large here-documents: for example, Solaris 10
+`dtksh' and the UnixWare 7.1.1 Posix shell, which are derived from Korn
+shell version M-12/28/93d, mishandle braced variable expansion that
+crosses a 1024- or 4096-byte buffer boundary within a here-document.
+Only the part of the variable name after the boundary is used. For
+example, `${variable}' could be replaced by the expansion of `${ble}'.
+If the end of the variable name is aligned with the block boundary, the
+shell reports an error, as if you used `${}'. Instead of
+`${variable-default}', the shell may expand `${riable-default}', or
+even `${fault}'. This bug can often be worked around by omitting the
+braces: `$variable'. The bug was fixed in `ksh93g' (1998-04-30) but as
+of 2006 many operating systems were still shipping older versions with
+the bug.
+
+ Empty here-documents are not portable either; with the following
+code, `zsh' up to at least version 4.3.10 creates a file with a single
+newline, whereas other shells create an empty file:
+
+ cat >file <<EOF
+ EOF
+
+ Many shells (including the Bourne shell) implement here-documents
+inefficiently. In particular, some shells can be extremely inefficient
+when a single statement contains many here-documents. For instance if
+your `configure.ac' includes something like:
+
+ if <cross_compiling>; then
+ assume this and that
+ else
+ check this
+ check that
+ check something else
+ ...
+ on and on forever
+ ...
+ fi
+
+ A shell parses the whole `if'/`fi' construct, creating temporary
+files for each here-document in it. Some shells create links for such
+here-documents on every `fork', so that the clean-up code they had
+installed correctly removes them. It is creating the links that can
+take the shell forever.
+
+ Moving the tests out of the `if'/`fi', or creating multiple
+`if'/`fi' constructs, would improve the performance significantly.
+Anyway, this kind of construct is not exactly the typical use of
+Autoconf. In fact, it's even not recommended, because M4 macros can't
+look into shell conditionals, so we may fail to expand a macro when it
+was expanded before in a conditional path, and the condition turned out
+to be false at runtime, and we end up not executing the macro at all.
+
+ Be careful with the use of `<<-' to unindent here-documents. The
+behavior is only portable for stripping leading <TAB>s, and things can
+silently break if an overzealous editor converts to using leading
+spaces (not all shells are nice enough to warn about unterminated
+here-documents).
+
+ $ printf 'cat <<-x\n\t1\n\t 2\n\tx\n' | bash && echo done
+ 1
+ 2
+ done
+ $ printf 'cat <<-x\n 1\n 2\n x\n' | bash-3.2 && echo done
+ 1
+ 2
+ x
+ done
+
+
+File: autoconf.info, Node: File Descriptors, Next: Signal Handling, Prev: Here-Documents, Up: Portable Shell
+
+11.4 File Descriptors
+=====================
+
+Most shells, if not all (including Bash, Zsh, Ash), output traces on
+stderr, even for subshells. This might result in undesirable content
+if you meant to capture the standard-error output of the inner command:
+
+ $ ash -x -c '(eval "echo foo >&2") 2>stderr'
+ $ cat stderr
+ + eval echo foo >&2
+ + echo foo
+ foo
+ $ bash -x -c '(eval "echo foo >&2") 2>stderr'
+ $ cat stderr
+ + eval 'echo foo >&2'
+ ++ echo foo
+ foo
+ $ zsh -x -c '(eval "echo foo >&2") 2>stderr'
+ # Traces on startup files deleted here.
+ $ cat stderr
+ +zsh:1> eval echo foo >&2
+ +zsh:1> echo foo
+ foo
+
+One workaround is to grep out uninteresting lines, hoping not to remove
+good ones.
+
+ If you intend to redirect both standard error and standard output,
+redirect standard output first. This works better with HP-UX, since
+its shell mishandles tracing if standard error is redirected first:
+
+ $ sh -x -c ': 2>err >out'
+ + :
+ + 2> err $ cat err
+ 1> out
+
+ Don't try to redirect the standard error of a command substitution.
+It must be done _inside_ the command substitution. When running `: `cd
+/zorglub` 2>/dev/null' expect the error message to escape, while `: `cd
+/zorglub 2>/dev/null`' works properly.
+
+ On the other hand, some shells, such as Solaris or FreeBSD
+`/bin/sh', warn about missing programs before performing redirections.
+Therefore, to silently check whether a program exists, it is necessary
+to perform redirections on a subshell or brace group:
+ $ /bin/sh -c 'nosuch 2>/dev/null'
+ nosuch: not found
+ $ /bin/sh -c '(nosuch) 2>/dev/null'
+ $ /bin/sh -c '{ nosuch; } 2>/dev/null'
+ $ bash -c 'nosuch 2>/dev/null'
+
+ FreeBSD 6.2 sh may mix the trace output lines from the statements in
+a shell pipeline.
+
+ It is worth noting that Zsh (but not Ash nor Bash) makes it possible
+in assignments though: `foo=`cd /zorglub` 2>/dev/null'.
+
+ Some shells, like `ash', don't recognize bi-directional redirection
+(`<>'). And even on shells that recognize it, it is not portable to
+use on fifos: Posix does not require read-write support for named
+pipes, and Cygwin does not support it:
+
+ $ mkfifo fifo
+ $ exec 5<>fifo
+ $ echo hi >&5
+ bash: echo: write error: Communication error on send
+
+Furthermore, versions of `dash' before 0.5.6 mistakenly truncate
+regular files when using `<>':
+
+ $ echo a > file
+ $ bash -c ': 1<>file'; cat file
+ a
+ $ dash -c ': 1<>file'; cat file
+ $ rm a
+
+ When catering to old systems, don't redirect the same file descriptor
+several times, as you are doomed to failure under Ultrix.
+
+ ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
+ UWS V4.4 (Rev. 11)
+ $ eval 'echo matter >fullness' >void
+ illegal io
+ $ eval '(echo matter >fullness)' >void
+ illegal io
+ $ (eval '(echo matter >fullness)') >void
+ Ambiguous output redirect.
+
+In each case the expected result is of course `fullness' containing
+`matter' and `void' being empty. However, this bug is probably not of
+practical concern to modern platforms.
+
+ Solaris 10 `sh' will try to optimize away a `:' command (even if it
+is redirected) in a loop after the first iteration, or in a shell
+function after the first call:
+
+ $ for i in 1 2 3 ; do : >x$i; done
+ $ ls x*
+ x1
+ $ f () { : >$1; }; f y1; f y2; f y3;
+ $ ls y*
+ y1
+
+As a workaround, `echo' or `eval' can be used.
+
+ Don't rely on file descriptors 0, 1, and 2 remaining closed in a
+subsidiary program. If any of these descriptors is closed, the
+operating system may open an unspecified file for the descriptor in the
+new process image. Posix 2008 says this may be done only if the
+subsidiary program is set-user-ID or set-group-ID, but HP-UX 11.23 does
+it even for ordinary programs, and the next version of Posix will allow
+HP-UX behavior.
+
+ If you want a file descriptor above 2 to be inherited into a child
+process, then you must use redirections specific to that command or a
+containing subshell or command group, rather than relying on `exec' in
+the shell. In `ksh' as well as HP-UX `sh', file descriptors above 2
+which are opened using `exec N>file' are closed by a subsequent `exec'
+(such as that involved in the fork-and-exec which runs a program or
+script):
+
+ $ echo 'echo hello >&5' >k
+ $ /bin/sh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t
+ hello
+ $ bash -c 'exec 5>t; ksh ./k; exec 5>&-; cat t
+ hello
+ $ ksh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t
+ ./k[1]: 5: cannot open [Bad file number]
+ $ ksh -c '(ksh ./k) 5>t; cat t'
+ hello
+ $ ksh -c '{ ksh ./k; } 5>t; cat t'
+ hello
+ $ ksh -c '5>t ksh ./k; cat t
+ hello
+
+ Don't rely on duplicating a closed file descriptor to cause an
+error. With Solaris `/bin/sh', failed duplication is silently ignored,
+which can cause unintended leaks to the original file descriptor. In
+this example, observe the leak to standard output:
+
+ $ bash -c 'echo hi >&3' 3>&-; echo $?
+ bash: 3: Bad file descriptor
+ 1
+ $ /bin/sh -c 'echo hi >&3' 3>&-; echo $?
+ hi
+ 0
+
+ Fortunately, an attempt to close an already closed file descriptor
+will portably succeed. Likewise, it is safe to use either style of
+`N<&-' or `N>&-' for closing a file descriptor, even if it doesn't
+match the read/write mode that the file descriptor was opened with.
+
+ DOS variants cannot rename or remove open files, such as in `mv foo
+bar >foo' or `rm foo >foo', even though this is perfectly portable
+among Posix hosts.
+
+ A few ancient systems reserved some file descriptors. By convention,
+file descriptor 3 was opened to `/dev/tty' when you logged into Eighth
+Edition (1985) through Tenth Edition Unix (1989). File descriptor 4
+had a special use on the Stardent/Kubota Titan (circa 1990), though we
+don't now remember what it was. Both these systems are obsolete, so
+it's now safe to treat file descriptors 3 and 4 like any other file
+descriptors.
+
+ On the other hand, you can't portably use multi-digit file
+descriptors. Solaris `ksh' doesn't understand any file descriptor
+larger than `9':
+
+ $ bash -c 'exec 10>&-'; echo $?
+ 0
+ $ ksh -c 'exec 9>&-'; echo $?
+ 0
+ $ ksh -c 'exec 10>&-'; echo $?
+ ksh[1]: exec: 10: not found
+ 127
+
+
+File: autoconf.info, Node: Signal Handling, Next: File System Conventions, Prev: File Descriptors, Up: Portable Shell
+
+11.5 Signal Handling
+====================
+
+Portable handling of signals within the shell is another major source of
+headaches. This is worsened by the fact that various different,
+mutually incompatible approaches are possible in this area, each with
+its distinctive merits and demerits. A detailed description of these
+possible approaches, as well as of their pros and cons, can be found in
+this article (http://www.cons.org/cracauer/sigint.html).
+
+ Solaris 10 `/bin/sh' automatically traps most signals by default;
+the shell still exits with error upon termination by one of those
+signals, but in such a case the exit status might be somewhat
+unexpected (even if allowed by POSIX, strictly speaking):
+
+ $ bash -c 'kill -1 $$'; echo $? # Will exit 128 + (signal number).
+ Hangup
+ 129
+ $ /bin/ksh -c 'kill -15 $$'; echo $? # Likewise.
+ Terminated
+ 143
+ $ for sig in 1 2 3 15; do
+ > echo $sig:
+ > /bin/sh -c "kill -$s \$\$"; echo $?
+ > done
+ signal 1:
+ Hangup
+ 129
+ signal 2:
+ 208
+ signal 3:
+ 208
+ signal 15:
+ 208
+
+ This gets even worse if one is using the POSIX `wait' interface to
+get details about the shell process terminations: it will result in the
+shell having exited normally, rather than by receiving a signal.
+
+ $ cat > foo.c <<'END'
+ #include <stdio.h> /* for printf */
+ #include <stdlib.h> /* for system */
+ #include <sys/wait.h> /* for WIF* macros */
+ int main(void)
+ {
+ int status = system ("kill -15 $$");
+ printf ("Terminated by signal: %s\n",
+ WIFSIGNALED (status) ? "yes" : "no");
+ printf ("Exited normally: %s\n",
+ WIFEXITED (status) ? "yes" : "no");
+ return 0;
+ }
+ END
+ $ cc -o foo foo.c
+ $ ./a.out # On GNU/Linux
+ Terminated by signal: no
+ Exited normally: yes
+ $ ./a.out # On Solaris 10
+ Terminated by signal: yes
+ Exited normally: no
+
+ Various shells seem to handle `SIGQUIT' specially: they ignore it
+even if it is not blocked, and even if the shell is not running
+interactively (in fact, even if the shell has no attached tty); among
+these shells are at least Bash (from version 2 onwards), Zsh 4.3.12,
+Solaris 10 `/bin/ksh' and `/usr/xpg4/bin/sh', and AT&T `ksh93' (2011).
+Still, `SIGQUIT' seems to be trappable quite portably within all these
+shells. OTOH, some other shells doesn't special-case the handling of
+`SIGQUIT'; among these shells are at least `pdksh' 5.2.14, Solaris 10
+and NetBSD 5.1 `/bin/sh', and the Almquist Shell 0.5.5.1.
+
+ Some shells (especially Korn shells and derivatives) might try to
+propagate to themselves a signal that has killed a child process; this
+is not a bug, but a conscious design choice (although its overall value
+might be debatable). The exact details of how this is attained vary
+from shell to shell. For example, upon running `perl -e 'kill 2, $$'',
+after the perl process has been interrupted AT&T `ksh93' (2011) will
+proceed to send itself a `SIGINT', while Solaris 10 `/bin/ksh' and
+`/usr/xpg4/bin/sh' will proceed to exit with status 130 (i.e., 128 +
+2). In any case, if there is an active trap associated with `SIGINT',
+those shells will correctly execute it.
+
+ Some Korn shells, when a child process die due receiving a signal
+with signal number N, can leave in `$?' an exit status of 256+N instead
+of the more common 128+N. Observe the difference between AT&T `ksh93'
+(2011) and `bash' 4.1.5 on Debian:
+
+ $ /bin/ksh -c 'sh -c "kill -1 \$\$"; echo $?'
+ /bin/ksh: line 1: 7837: Hangup
+ 257
+ $ /bin/bash -c 'sh -c "kill -1 \$\$"; echo $?'
+ /bin/bash: line 1: 7861 Hangup (sh -c "kill -1 \$\$")
+ 129
+
+This `ksh' behavior is allowed by POSIX, if implemented with due care;
+see this Austin Group discussion
+(http://www.austingroupbugs.net/view.php?id=51) for more background.
+However, if it is not implemented with proper care, such a behavior
+might cause problems in some corner cases. To see why, assume we have
+a "wrapper" script like this:
+
+ #!/bin/sh
+ # Ignore some signals in the shell only, not in its child processes.
+ trap : 1 2 13 15
+ wrapped_command "$@"
+ ret=$?
+ other_command
+ exit $ret
+
+If `wrapped_command' is interrupted by a `SIGHUP' (which has signal
+number 1), `ret' will be set to 257. Unless the `exit' shell builtin
+is smart enough to understand that such a value can only have
+originated from a signal, and adjust the final wait status of the shell
+appropriately, the value 257 will just get truncated to 1 by the
+closing `exit' call, so that a caller of the script will have no way to
+determine that termination by a signal was involved. Observe the
+different behavior of AT&T `ksh93' (2011) and `bash' 4.1.5 on Debian:
+
+ $ cat foo.sh
+ #!/bin/sh
+ sh -c 'kill -1 $$'
+ ret=$?
+ echo $ret
+ exit $ret
+ $ /bin/ksh foo.sh; echo $?
+ foo.sh: line 2: 12479: Hangup
+ 257
+ 1
+ $ /bin/bash foo.sh; echo $?
+ foo.sh: line 2: 12487 Hangup (sh -c 'kill -1 $$')
+ 129
+ 129
+
+
+File: autoconf.info, Node: File System Conventions, Next: Shell Pattern Matching, Prev: Signal Handling, Up: Portable Shell
+
+11.6 File System Conventions
+============================
+
+Autoconf uses shell-script processing extensively, so the file names
+that it processes should not contain characters that are special to the
+shell. Special characters include space, tab, newline, NUL, and the
+following:
+
+ " # $ & ' ( ) * ; < = > ? [ \ ` |
+
+ Also, file names should not begin with `~' or `-', and should
+contain neither `-' immediately after `/' nor `~' immediately after
+`:'. On Posix-like platforms, directory names should not contain `:',
+as this runs afoul of `:' used as the path separator.
+
+ These restrictions apply not only to the files that you distribute,
+but also to the absolute file names of your source, build, and
+destination directories.
+
+ On some Posix-like platforms, `!' and `^' are special too, so they
+should be avoided.
+
+ Posix lets implementations treat leading `//' specially, but
+requires leading `///' and beyond to be equivalent to `/'. Most Unix
+variants treat `//' like `/'. However, some treat `//' as a
+"super-root" that can provide access to files that are not otherwise
+reachable from `/'. The super-root tradition began with Apollo
+Domain/OS, which died out long ago, but unfortunately Cygwin has
+revived it.
+
+ While `autoconf' and friends are usually run on some Posix variety,
+they can be used on other systems, most notably DOS variants. This
+impacts several assumptions regarding file names.
+
+For example, the following code:
+
+ case $foo_dir in
+ /*) # Absolute
+ ;;
+ *)
+ foo_dir=$dots$foo_dir ;;
+ esac
+
+fails to properly detect absolute file names on those systems, because
+they can use a drivespec, and usually use a backslash as directory
+separator. If you want to be portable to DOS variants (at the price of
+rejecting valid but oddball Posix file names like `a:\b'), you can
+check for absolute file names like this:
+
+ case $foo_dir in
+ [\\/]* | ?:[\\/]* ) # Absolute
+ ;;
+ *)
+ foo_dir=$dots$foo_dir ;;
+ esac
+
+Make sure you quote the brackets if appropriate and keep the backslash
+as first character (*note Limitations of Shell Builtins: case.).
+
+ Also, because the colon is used as part of a drivespec, these
+systems don't use it as path separator. When creating or accessing
+paths, you can use the `PATH_SEPARATOR' output variable instead.
+`configure' sets this to the appropriate value for the build system
+(`:' or `;') when it starts up.
+
+ File names need extra care as well. While DOS variants that are
+Posixy enough to run `autoconf' (such as DJGPP) are usually able to
+handle long file names properly, there are still limitations that can
+seriously break packages. Several of these issues can be easily
+detected by the doschk
+(ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz) package.
+
+ A short overview follows; problems are marked with SFN/LFN to
+indicate where they apply: SFN means the issues are only relevant to
+plain DOS, not to DOS under Microsoft Windows variants, while LFN
+identifies problems that exist even under Microsoft Windows variants.
+
+No multiple dots (SFN)
+ DOS cannot handle multiple dots in file names. This is an
+ especially important thing to remember when building a portable
+ configure script, as `autoconf' uses a .in suffix for template
+ files.
+
+ This is perfectly OK on Posix variants:
+
+ AC_CONFIG_HEADERS([config.h])
+ AC_CONFIG_FILES([source.c foo.bar])
+ AC_OUTPUT
+
+ but it causes problems on DOS, as it requires `config.h.in',
+ `source.c.in' and `foo.bar.in'. To make your package more portable
+ to DOS-based environments, you should use this instead:
+
+ AC_CONFIG_HEADERS([config.h:config.hin])
+ AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
+ AC_OUTPUT
+
+No leading dot (SFN)
+ DOS cannot handle file names that start with a dot. This is
+ usually not important for `autoconf'.
+
+Case insensitivity (LFN)
+ DOS is case insensitive, so you cannot, for example, have both a
+ file called `INSTALL' and a directory called `install'. This also
+ affects `make'; if there's a file called `INSTALL' in the
+ directory, `make install' does nothing (unless the `install'
+ target is marked as PHONY).
+
+The 8+3 limit (SFN)
+ Because the DOS file system only stores the first 8 characters of
+ the file name and the first 3 of the extension, those must be
+ unique. That means that `foobar-part1.c', `foobar-part2.c' and
+ `foobar-prettybird.c' all resolve to the same file name
+ (`FOOBAR-P.C'). The same goes for `foo.bar' and `foo.bartender'.
+
+ The 8+3 limit is not usually a problem under Microsoft Windows, as
+ it uses numeric tails in the short version of file names to make
+ them unique. However, a registry setting can turn this behavior
+ off. While this makes it possible to share file trees containing
+ long file names between SFN and LFN environments, it also means
+ the above problem applies there as well.
+
+Invalid characters (LFN)
+ Some characters are invalid in DOS file names, and should therefore
+ be avoided. In a LFN environment, these are `/', `\', `?', `*',
+ `:', `<', `>', `|' and `"'. In a SFN environment, other
+ characters are also invalid. These include `+', `,', `[' and `]'.
+
+Invalid names (LFN)
+ Some DOS file names are reserved, and cause problems if you try to
+ use files with those names. These names include `CON', `AUX',
+ `COM1', `COM2', `COM3', `COM4', `LPT1', `LPT2', `LPT3', `NUL', and
+ `PRN'. File names are case insensitive, so even names like
+ `aux/config.guess' are disallowed.
+
+
+
+File: autoconf.info, Node: Shell Pattern Matching, Next: Shell Substitutions, Prev: File System Conventions, Up: Portable Shell
+
+11.7 Shell Pattern Matching
+===========================
+
+Nowadays portable patterns can use negated character classes like
+`[!-aeiou]'. The older syntax `[^-aeiou]' is supported by some shells
+but not others; hence portable scripts should never use `^' as the
+first character of a bracket pattern.
+
+ Outside the C locale, patterns like `[a-z]' are problematic since
+they may match characters that are not lower-case letters.
+
+
+File: autoconf.info, Node: Shell Substitutions, Next: Assignments, Prev: Shell Pattern Matching, Up: Portable Shell
+
+11.8 Shell Substitutions
+========================
+
+Contrary to a persistent urban legend, the Bourne shell does not
+systematically split variables and back-quoted expressions, in
+particular on the right-hand side of assignments and in the argument of
+`case'. For instance, the following code:
+
+ case "$given_srcdir" in
+ .) top_srcdir="`echo "$dots" | sed 's|/$||'`" ;;
+ *) top_srcdir="$dots$given_srcdir" ;;
+ esac
+
+is more readable when written as:
+
+ case $given_srcdir in
+ .) top_srcdir=`echo "$dots" | sed 's|/$||'` ;;
+ *) top_srcdir=$dots$given_srcdir ;;
+ esac
+
+and in fact it is even _more_ portable: in the first case of the first
+attempt, the computation of `top_srcdir' is not portable, since not all
+shells properly understand `"`..."..."...`"', for example Solaris 10
+ksh:
+
+ $ foo="`echo " bar" | sed 's, ,,'`"
+ ksh: : cannot execute
+ ksh: bar | sed 's, ,,': cannot execute
+
+Posix does not specify behavior for this sequence. On the other hand,
+behavior for `"`...\"...\"...`"' is specified by Posix, but in
+practice, not all shells understand it the same way: pdksh 5.2.14
+prints spurious quotes when in Posix mode:
+
+ $ echo "`echo \"hello\"`"
+ hello
+ $ set -o posix
+ $ echo "`echo \"hello\"`"
+ "hello"
+
+There is just no portable way to use double-quoted strings inside
+double-quoted back-quoted expressions (pfew!).
+
+ Bash 4.1 has a bug where quoted empty strings adjacent to unquoted
+parameter expansions are elided during word splitting. Meanwhile, zsh
+does not perform word splitting except when in Bourne compatibility
+mode. In the example below, the correct behavior is to have five
+arguments to the function, and exactly two spaces on either side of the
+middle `-', since word splitting collapses multiple spaces in `$f' but
+leaves empty arguments intact.
+
+ $ bash -c 'n() { echo "$#$@"; }; f=" - "; n - ""$f"" -'
+ 3- - -
+ $ ksh -c 'n() { echo "$#$@"; }; f=" - "; n - ""$f"" -'
+ 5- - -
+ $ zsh -c 'n() { echo "$#$@"; }; f=" - "; n - ""$f"" -'
+ 3- - -
+ $ zsh -c 'emulate sh;
+ > n() { echo "$#$@"; }; f=" - "; n - ""$f"" -'
+ 5- - -
+
+You can work around this by doing manual word splitting, such as using
+`"$str" $list' rather than `"$str"$list'.
+
+ There are also portability pitfalls with particular expansions:
+
+`$@'
+ One of the most famous shell-portability issues is related to
+ `"$@"'. When there are no positional arguments, Posix says that
+ `"$@"' is supposed to be equivalent to nothing, but the original
+ Unix version 7 Bourne shell treated it as equivalent to `""'
+ instead, and this behavior survives in later implementations like
+ Digital Unix 5.0.
+
+ The traditional way to work around this portability problem is to
+ use `${1+"$@"}'. Unfortunately this method does not work with Zsh
+ (3.x and 4.x), which is used on Mac OS X. When emulating the
+ Bourne shell, Zsh performs word splitting on `${1+"$@"}':
+
+ zsh $ emulate sh
+ zsh $ for i in "$@"; do echo $i; done
+ Hello World
+ !
+ zsh $ for i in ${1+"$@"}; do echo $i; done
+ Hello
+ World
+ !
+
+ Zsh handles plain `"$@"' properly, but we can't use plain `"$@"'
+ because of the portability problems mentioned above. One
+ workaround relies on Zsh's "global aliases" to convert `${1+"$@"}'
+ into `"$@"' by itself:
+
+ test "${ZSH_VERSION+set}" = set && alias -g '${1+"$@"}'='"$@"'
+
+ Zsh only recognizes this alias when a shell word matches it
+ exactly; `"foo"${1+"$@"}' remains subject to word splitting.
+ Since this case always yields at least one shell word, use plain
+ `"$@"'.
+
+ A more conservative workaround is to avoid `"$@"' if it is
+ possible that there may be no positional arguments. For example,
+ instead of:
+
+ cat conftest.c "$@"
+
+ you can use this instead:
+
+ case $# in
+ 0) cat conftest.c;;
+ *) cat conftest.c "$@";;
+ esac
+
+ Autoconf macros often use the `set' command to update `$@', so if
+ you are writing shell code intended for `configure' you should not
+ assume that the value of `$@' persists for any length of time.
+
+`${10}'
+ The 10th, 11th, ... positional parameters can be accessed only
+ after a `shift'. The 7th Edition shell reported an error if given
+ `${10}', and Solaris 10 `/bin/sh' still acts that way:
+
+ $ set 1 2 3 4 5 6 7 8 9 10
+ $ echo ${10}
+ bad substitution
+
+ Conversely, not all shells obey the Posix rule that when braces are
+ omitted, multiple digits beyond a `$' imply the single-digit
+ positional parameter expansion concatenated with the remaining
+ literal digits. To work around the issue, you must use braces.
+
+ $ bash -c 'set a b c d e f g h i j; echo $10 ${1}0'
+ a0 a0
+ $ dash -c 'set a b c d e f g h i j; echo $10 ${1}0'
+ j a0
+
+`${VAR:-VALUE}'
+ Old BSD shells, including the Ultrix `sh', don't accept the colon
+ for any shell substitution, and complain and die. Similarly for
+ ${VAR:=VALUE}, ${VAR:?VALUE}, etc. However, all shells that
+ support functions allow the use of colon in shell substitution,
+ and since m4sh requires functions, you can portably use null
+ variable substitution patterns in configure scripts.
+
+`${VAR+VALUE}'
+ When using `${VAR-VALUE}' or `${VAR-VALUE}' for providing
+ alternate substitutions, VALUE must either be a single shell word,
+ quoted, or in the context of an unquoted here-document. Solaris
+ `/bin/sh' complains otherwise.
+
+ $ /bin/sh -c 'echo ${a-b c}'
+ /bin/sh: bad substitution
+ $ /bin/sh -c 'echo ${a-'\''b c'\''}'
+ b c
+ $ /bin/sh -c 'echo "${a-b c}"'
+ b c
+ $ /bin/sh -c 'cat <<EOF
+ ${a-b c}
+ EOF
+ b c
+
+ According to Posix, if an expansion occurs inside double quotes,
+ then the use of unquoted double quotes within VALUE is
+ unspecified, and any single quotes become literal characters; in
+ that case, escaping must be done with backslash. Likewise, the
+ use of unquoted here-documents is a case where double quotes have
+ unspecified results:
+
+ $ /bin/sh -c 'echo "${a-"b c"}"'
+ /bin/sh: bad substitution
+ $ ksh -c 'echo "${a-"b c"}"'
+ b c
+ $ bash -c 'echo "${a-"b c"}"'
+ b c
+ $ /bin/sh -c 'a=; echo ${a+'\''b c'\''}'
+ b c
+ $ /bin/sh -c 'a=; echo "${a+'\''b c'\''}"'
+ 'b c'
+ $ /bin/sh -c 'a=; echo "${a+\"b c\"}"'
+ "b c"
+ $ /bin/sh -c 'a=; echo "${a+b c}"'
+ b c
+ $ /bin/sh -c 'cat <<EOF
+ ${a-"b c"}
+ EOF'
+ "b c"
+ $ /bin/sh -c 'cat <<EOF
+ ${a-'b c'}
+ EOF'
+ 'b c'
+ $ bash -c 'cat <<EOF
+ ${a-"b c"}
+ EOF'
+ b c
+ $ bash -c 'cat <<EOF
+ ${a-'b c'}
+ EOF'
+ 'b c'
+
+ Perhaps the easiest way to work around quoting issues in a manner
+ portable to all shells is to place the results in a temporary
+ variable, then use `$t' as the VALUE, rather than trying to inline
+ the expression needing quoting.
+
+ $ /bin/sh -c 't="b c\"'\''}\\"; echo "${a-$t}"'
+ b c"'}\
+ $ ksh -c 't="b c\"'\''}\\"; echo "${a-$t}"'
+ b c"'}\
+ $ bash -c 't="b c\"'\''}\\"; echo "${a-$t}"'
+ b c"'}\
+
+`${VAR=VALUE}'
+ When using `${VAR=VALUE}' to assign a default value to VAR,
+ remember that even though the assignment to VAR does not undergo
+ file name expansion, the result of the variable expansion does
+ unless the expansion occurred within double quotes. In particular,
+ when using `:' followed by unquoted variable expansion for the
+ side effect of setting a default value, if the final value of
+ `$var' contains any globbing characters (either from VALUE or from
+ prior contents), the shell has to spend time performing file name
+ expansion and field splitting even though those results will not be
+ used. Therefore, it is a good idea to consider double quotes when
+ performing default initialization; while remembering how this
+ impacts any quoting characters appearing in VALUE.
+
+ $ time bash -c ': "${a=/usr/bin/*}"; echo "$a"'
+ /usr/bin/*
+
+ real 0m0.005s
+ user 0m0.002s
+ sys 0m0.003s
+ $ time bash -c ': ${a=/usr/bin/*}; echo "$a"'
+ /usr/bin/*
+
+ real 0m0.039s
+ user 0m0.026s
+ sys 0m0.009s
+ $ time bash -c 'a=/usr/bin/*; : ${a=noglob}; echo "$a"'
+ /usr/bin/*
+
+ real 0m0.031s
+ user 0m0.020s
+ sys 0m0.010s
+
+ $ time bash -c 'a=/usr/bin/*; : "${a=noglob}"; echo "$a"'
+ /usr/bin/*
+
+ real 0m0.006s
+ user 0m0.002s
+ sys 0m0.003s
+
+ As with `+' and `-', you must use quotes when using `=' if the
+ VALUE contains more than one shell word; either single quotes for
+ just the VALUE, or double quotes around the entire expansion:
+
+ $ : ${var1='Some words'}
+ $ : "${var2=like this}"
+ $ echo $var1 $var2
+ Some words like this
+
+ otherwise some shells, such as Solaris `/bin/sh' or on Digital
+ Unix V 5.0, die because of a "bad substitution". Meanwhile, Posix
+ requires that with `=', quote removal happens prior to the
+ assignment, and the expansion be the final contents of VAR without
+ quoting (and thus subject to field splitting), in contrast to the
+ behavior with `-' passing the quoting through to the final
+ expansion. However, `bash' 4.1 does not obey this rule.
+
+ $ ksh -c 'echo ${var-a\ \ b}'
+ a b
+ $ ksh -c 'echo ${var=a\ \ b}'
+ a b
+ $ bash -c 'echo ${var=a\ \ b}'
+ a b
+
+ Finally, Posix states that when mixing `${a=b}' with regular
+ commands, it is unspecified whether the assignments affect the
+ parent shell environment. It is best to perform assignments
+ independently from commands, to avoid the problems demonstrated in
+ this example:
+
+ $ bash -c 'x= y=${x:=b} sh -c "echo +\$x+\$y+";echo -$x-'
+ +b+b+
+ -b-
+ $ /bin/sh -c 'x= y=${x:=b} sh -c "echo +\$x+\$y+";echo -$x-'
+ ++b+
+ --
+ $ ksh -c 'x= y=${x:=b} sh -c "echo +\$x+\$y+";echo -$x-'
+ +b+b+
+ --
+
+`${VAR=VALUE}'
+ Solaris `/bin/sh' has a frightening bug in its handling of literal
+ assignments. Imagine you need set a variable to a string
+ containing `}'. This `}' character confuses Solaris `/bin/sh'
+ when the affected variable was already set. This bug can be
+ exercised by running:
+
+ $ unset foo
+ $ foo=${foo='}'}
+ $ echo $foo
+ }
+ $ foo=${foo='}' # no error; this hints to what the bug is
+ $ echo $foo
+ }
+ $ foo=${foo='}'}
+ $ echo $foo
+ }}
+ ^ ugh!
+
+ It seems that `}' is interpreted as matching `${', even though it
+ is enclosed in single quotes. The problem doesn't happen using
+ double quotes, or when using a temporary variable holding the
+ problematic string.
+
+`${VAR=EXPANDED-VALUE}'
+ On Ultrix, running
+
+ default="yu,yaa"
+ : ${var="$default"}
+
+ sets VAR to `M-yM-uM-,M-yM-aM-a', i.e., the 8th bit of each char
+ is set. You don't observe the phenomenon using a simple `echo
+ $var' since apparently the shell resets the 8th bit when it
+ expands $var. Here are two means to make this shell confess its
+ sins:
+
+ $ cat -v <<EOF
+ $var
+ EOF
+
+ and
+
+ $ set | grep '^var=' | cat -v
+
+ One classic incarnation of this bug is:
+
+ default="a b c"
+ : ${list="$default"}
+ for c in $list; do
+ echo $c
+ done
+
+ You'll get `a b c' on a single line. Why? Because there are no
+ spaces in `$list': there are `M- ', i.e., spaces with the 8th bit
+ set, hence no IFS splitting is performed!!!
+
+ One piece of good news is that Ultrix works fine with `:
+ ${list=$default}'; i.e., if you _don't_ quote. The bad news is
+ then that QNX 4.25 then sets LIST to the _last_ item of DEFAULT!
+
+ The portable way out consists in using a double assignment, to
+ switch the 8th bit twice on Ultrix:
+
+ list=${list="$default"}
+
+ ...but beware of the `}' bug from Solaris (see above). For safety,
+ use:
+
+ test "${var+set}" = set || var={VALUE}
+
+`${#VAR}'
+`${VAR%WORD}'
+`${VAR%%WORD}'
+`${VAR#WORD}'
+`${VAR##WORD}'
+ Posix requires support for these usages, but they do not work with
+ many traditional shells, e.g., Solaris 10 `/bin/sh'.
+
+ Also, `pdksh' 5.2.14 mishandles some WORD forms. For example if
+ `$1' is `a/b' and `$2' is `a', then `${1#$2}' should yield `/b',
+ but with `pdksh' it yields the empty string.
+
+``COMMANDS`'
+ Posix requires shells to trim all trailing newlines from command
+ output before substituting it, so assignments like `dir=`echo
+ "$file" | tr a A`' do not work as expected if `$file' ends in a
+ newline.
+
+ While in general it makes no sense, do not substitute a single
+ builtin with side effects, because Ash 0.2, trying to optimize,
+ does not fork a subshell to perform the command.
+
+ For instance, if you wanted to check that `cd' is silent, do not
+ use `test -z "`cd /`"' because the following can happen:
+
+ $ pwd
+ /tmp
+ $ test -z "`cd /`" && pwd
+ /
+
+ The result of `foo=`exit 1`' is left as an exercise to the reader.
+
+ The MSYS shell leaves a stray byte in the expansion of a
+ double-quoted command substitution of a native program, if the end
+ of the substitution is not aligned with the end of the double
+ quote. This may be worked around by inserting another pair of
+ quotes:
+
+ $ echo "`printf 'foo\r\n'` bar" > broken
+ $ echo "`printf 'foo\r\n'`"" bar" | cmp - broken
+ - broken differ: char 4, line 1
+
+ Upon interrupt or SIGTERM, some shells may abort a command
+ substitution, replace it with a null string, and wrongly evaluate
+ the enclosing command before entering the trap or ending the
+ script. This can lead to spurious errors:
+
+ $ sh -c 'if test `sleep 5; echo hi` = hi; then echo yes; fi'
+ $ ^C
+ sh: test: hi: unexpected operator/operand
+
+ You can avoid this by assigning the command substitution to a
+ temporary variable:
+
+ $ sh -c 'res=`sleep 5; echo hi`
+ if test "x$res" = xhi; then echo yes; fi'
+ $ ^C
+
+`$(COMMANDS)'
+ This construct is meant to replace ``COMMANDS`', and it has most
+ of the problems listed under ``COMMANDS`'.
+
+ This construct can be nested while this is impossible to do
+ portably with back quotes. Unfortunately it is not yet
+ universally supported. Most notably, even recent releases of
+ Solaris don't support it:
+
+ $ showrev -c /bin/sh | grep version
+ Command version: SunOS 5.10 Generic 121005-03 Oct 2006
+ $ echo $(echo blah)
+ syntax error: `(' unexpected
+
+ nor does IRIX 6.5's Bourne shell:
+ $ uname -a
+ IRIX firebird-image 6.5 07151432 IP22
+ $ echo $(echo blah)
+ $(echo blah)
+
+ If you do use `$(COMMANDS)', make sure that the commands do not
+ start with a parenthesis, as that would cause confusion with a
+ different notation `$((EXPRESSION))' that in modern shells is an
+ arithmetic expression not a command. To avoid the confusion,
+ insert a space between the two opening parentheses.
+
+ Avoid COMMANDS that contain unbalanced parentheses in
+ here-documents, comments, or case statement patterns, as many
+ shells mishandle them. For example, Bash 3.1, `ksh88', `pdksh'
+ 5.2.14, and Zsh 4.2.6 all mishandle the following valid command:
+
+ echo $(case x in x) echo hello;; esac)
+
+`$((EXPRESSION))'
+ Arithmetic expansion is not portable as some shells (most notably
+ Solaris 10 `/bin/sh') don't support it.
+
+ Among shells that do support `$(( ))', not all of them obey the
+ Posix rule that octal and hexadecimal constants must be recognized:
+
+ $ bash -c 'echo $(( 010 + 0x10 ))'
+ 24
+ $ zsh -c 'echo $(( 010 + 0x10 ))'
+ 26
+ $ zsh -c 'emulate sh; echo $(( 010 + 0x10 ))'
+ 24
+ $ pdksh -c 'echo $(( 010 + 0x10 ))'
+ pdksh: 010 + 0x10 : bad number `0x10'
+ $ pdksh -c 'echo $(( 010 ))'
+ 10
+
+ When it is available, using arithmetic expansion provides a
+ noticeable speedup in script execution; but testing for support
+ requires `eval' to avoid syntax errors. The following construct
+ is used by `AS_VAR_ARITH' to provide arithmetic computation when
+ all arguments are provided in decimal and without a leading zero,
+ and all operators are properly quoted and appear as distinct
+ arguments:
+
+ if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
+ eval 'func_arith ()
+ {
+ func_arith_result=$(( $* ))
+ }'
+ else
+ func_arith ()
+ {
+ func_arith_result=`expr "$@"`
+ }
+ fi
+ func_arith 1 + 1
+ foo=$func_arith_result
+
+`^'
+ Always quote `^', otherwise traditional shells such as `/bin/sh'
+ on Solaris 10 treat this like `|'.
+
+
+
+File: autoconf.info, Node: Assignments, Next: Parentheses, Prev: Shell Substitutions, Up: Portable Shell
+
+11.9 Assignments
+================
+
+When setting several variables in a row, be aware that the order of the
+evaluation is undefined. For instance `foo=1 foo=2; echo $foo' gives
+`1' with Solaris `/bin/sh', but `2' with Bash. You must use `;' to
+enforce the order: `foo=1; foo=2; echo $foo'.
+
+ Don't rely on the following to find `subdir/program':
+
+ PATH=subdir$PATH_SEPARATOR$PATH program
+
+as this does not work with Zsh 3.0.6. Use something like this instead:
+
+ (PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
+
+ Don't rely on the exit status of an assignment: Ash 0.2 does not
+change the status and propagates that of the last statement:
+
+ $ false || foo=bar; echo $?
+ 1
+ $ false || foo=`:`; echo $?
+ 0
+
+and to make things even worse, QNX 4.25 just sets the exit status to 0
+in any case:
+
+ $ foo=`exit 1`; echo $?
+ 0
+
+ To assign default values, follow this algorithm:
+
+ 1. If the default value is a literal and does not contain any closing
+ brace, use:
+
+ : "${var='my literal'}"
+
+ 2. If the default value contains no closing brace, has to be
+ expanded, and the variable being initialized is not intended to be
+ IFS-split (i.e., it's not a list), then use:
+
+ : ${var="$default"}
+
+ 3. If the default value contains no closing brace, has to be
+ expanded, and the variable being initialized is intended to be
+ IFS-split (i.e., it's a list), then use:
+
+ var=${var="$default"}
+
+ 4. If the default value contains a closing brace, then use:
+
+ test "${var+set}" = set || var="has a '}'"
+
+ In most cases `var=${var="$default"}' is fine, but in case of doubt,
+just use the last form. *Note Shell Substitutions::, items
+`${VAR:-VALUE}' and `${VAR=VALUE}' for the rationale.
+
+
+File: autoconf.info, Node: Parentheses, Next: Slashes, Prev: Assignments, Up: Portable Shell
+
+11.10 Parentheses in Shell Scripts
+==================================
+
+Beware of two opening parentheses in a row, as many shell
+implementations treat them specially, and Posix says that a portable
+script cannot use `((' outside the `$((' form used for shell
+arithmetic. In traditional shells, `((cat))' behaves like `(cat)'; but
+many shells, including Bash and the Korn shell, treat `((cat))' as an
+arithmetic expression equivalent to `let "cat"', and may or may not
+report an error when they detect that `cat' is not a number. As another
+example, `pdksh' 5.2.14 does not treat the following code as a
+traditional shell would:
+
+ if ((true) || false); then
+ echo ok
+ fi
+
+To work around this problem, insert a space between the two opening
+parentheses. There is a similar problem and workaround with `$(('; see
+*note Shell Substitutions::.
+
+
+File: autoconf.info, Node: Slashes, Next: Special Shell Variables, Prev: Parentheses, Up: Portable Shell
+
+11.11 Slashes in Shell Scripts
+==============================
+
+Unpatched Tru64 5.1 `sh' omits the last slash of command-line arguments
+that contain two trailing slashes:
+
+ $ echo / // /// //// .// //.
+ / / // /// ./ //.
+ $ x=//
+ $ eval "echo \$x"
+ /
+ $ set -x
+ $ echo abc | tr -t ab //
+ + echo abc
+ + tr -t ab /
+ /bc
+
+ Unpatched Tru64 4.0 `sh' adds a slash after `"$var"' if the variable
+is empty and the second double-quote is followed by a word that begins
+and ends with slash:
+
+ $ sh -xc 'p=; echo "$p"/ouch/'
+ p=
+ + echo //ouch/
+ //ouch/
+
+ However, our understanding is that patches are available, so perhaps
+it's not worth worrying about working around these horrendous bugs.
+
+
+File: autoconf.info, Node: Special Shell Variables, Next: Shell Functions, Prev: Slashes, Up: Portable Shell
+
+11.12 Special Shell Variables
+=============================
+
+Some shell variables should not be used, since they can have a deep
+influence on the behavior of the shell. In order to recover a sane
+behavior from the shell, some variables should be unset; M4sh takes
+care of this and provides fallback values, whenever needed, to cater
+for a very old `/bin/sh' that does not support `unset'. (*note
+Portable Shell Programming: Portable Shell.).
+
+ As a general rule, shell variable names containing a lower-case
+letter are safe; you can define and use these variables without
+worrying about their effect on the underlying system, and without
+worrying about whether the shell changes them unexpectedly. (The
+exception is the shell variable `status', as described below.)
+
+ Here is a list of names that are known to cause trouble. This list
+is not exhaustive, but you should be safe if you avoid the name
+`status' and names containing only upper-case letters and underscores.
+
+`?'
+ Not all shells correctly reset `$?' after conditionals (*note
+ Limitations of Shell Builtins: if.). Not all shells manage `$?'
+ correctly in shell functions (*note Shell Functions::) or in traps
+ (*note Limitations of Shell Builtins: trap.). Not all shells reset
+ `$?' to zero after an empty command.
+
+ $ bash -c 'false; $empty; echo $?'
+ 0
+ $ zsh -c 'false; $empty; echo $?'
+ 1
+
+`_'
+ Many shells reserve `$_' for various purposes, e.g., the name of
+ the last command executed.
+
+`BIN_SH'
+ In Tru64, if `BIN_SH' is set to `xpg4', subsidiary invocations of
+ the standard shell conform to Posix.
+
+`CDPATH'
+ When this variable is set it specifies a list of directories to
+ search when invoking `cd' with a relative file name that did not
+ start with `./' or `../'. Posix 1003.1-2001 says that if a
+ nonempty directory name from `CDPATH' is used successfully, `cd'
+ prints the resulting absolute file name. Unfortunately this
+ output can break idioms like `abs=`cd src && pwd`' because `abs'
+ receives the name twice. Also, many shells do not conform to this
+ part of Posix; for example, `zsh' prints the result only if a
+ directory name other than `.' was chosen from `CDPATH'.
+
+ In practice the shells that have this problem also support
+ `unset', so you can work around the problem as follows:
+
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+ You can also avoid output by ensuring that your directory name is
+ absolute or anchored at `./', as in `abs=`cd ./src && pwd`'.
+
+ Configure scripts use M4sh, which automatically unsets `CDPATH' if
+ possible, so you need not worry about this problem in those
+ scripts.
+
+`CLICOLOR_FORCE'
+ When this variable is set, some implementations of tools like `ls'
+ attempt to add color to their output via terminal escape
+ sequences, even when the output is not directed to a terminal, and
+ can thus cause spurious failures in scripts. Configure scripts
+ use M4sh, which automatically unsets this variable.
+
+`DUALCASE'
+ In the MKS shell, case statements and file name generation are
+ case-insensitive unless `DUALCASE' is nonzero. Autoconf-generated
+ scripts export this variable when they start up.
+
+`ENV'
+`MAIL'
+`MAILPATH'
+`PS1'
+`PS2'
+`PS4'
+ These variables should not matter for shell scripts, since they are
+ supposed to affect only interactive shells. However, at least one
+ shell (the pre-3.0 UWIN Korn shell) gets confused about whether it
+ is interactive, which means that (for example) a `PS1' with a side
+ effect can unexpectedly modify `$?'. To work around this bug,
+ M4sh scripts (including `configure' scripts) do something like
+ this:
+
+ (unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+
+ (actually, there is some complication due to bugs in `unset';
+ *note Limitations of Shell Builtins: unset.).
+
+`FPATH'
+ The Korn shell uses `FPATH' to find shell functions, so avoid
+ `FPATH' in portable scripts. `FPATH' is consulted after `PATH',
+ but you still need to be wary of tests that use `PATH' to find
+ whether a command exists, since they might report the wrong result
+ if `FPATH' is also set.
+
+`GREP_OPTIONS'
+ When this variable is set, some implementations of `grep' honor
+ these options, even if the options include direction to enable
+ colored output via terminal escape sequences, and the result can
+ cause spurious failures when the output is not directed to a
+ terminal. Configure scripts use M4sh, which automatically unsets
+ this variable.
+
+`IFS'
+ Long ago, shell scripts inherited `IFS' from the environment, but
+ this caused many problems so modern shells ignore any environment
+ settings for `IFS'.
+
+ Don't set the first character of `IFS' to backslash. Indeed,
+ Bourne shells use the first character (backslash) when joining the
+ components in `"$@"' and some shells then reinterpret (!) the
+ backslash escapes, so you can end up with backspace and other
+ strange characters.
+
+ The proper value for `IFS' (in regular code, not when performing
+ splits) is `<SPC><TAB><RET>'. The first character is especially
+ important, as it is used to join the arguments in `$*'; however,
+ note that traditional shells, but also bash-2.04, fail to adhere
+ to this and join with a space anyway.
+
+ M4sh guarantees that `IFS' will have the default value at the
+ beginning of a script, and many macros within autoconf rely on this
+ setting. It is okay to use blocks of shell code that temporarily
+ change the value of `IFS' in order to split on another character,
+ but remember to restore it before expanding further macros.
+
+ Unsetting `IFS' instead of resetting it to the default sequence is
+ not suggested, since code that tries to save and restore the
+ variable's value will incorrectly reset it to an empty value, thus
+ disabling field splitting:
+
+ unset IFS
+ # default separators used for field splitting
+
+ save_IFS=$IFS
+ IFS=:
+ # ...
+ IFS=$save_IFS
+ # no field splitting performed
+
+`LANG'
+`LC_ALL'
+`LC_COLLATE'
+`LC_CTYPE'
+`LC_MESSAGES'
+`LC_MONETARY'
+`LC_NUMERIC'
+`LC_TIME'
+ You should set all these variables to `C' because so much
+ configuration code assumes the C locale and Posix requires that
+ locale environment variables be set to `C' if the C locale is
+ desired; `configure' scripts and M4sh do that for you. Export
+ these variables after setting them.
+
+`LANGUAGE'
+ `LANGUAGE' is not specified by Posix, but it is a GNU extension
+ that overrides `LC_ALL' in some cases, so you (or M4sh) should set
+ it too.
+
+`LC_ADDRESS'
+`LC_IDENTIFICATION'
+`LC_MEASUREMENT'
+`LC_NAME'
+`LC_PAPER'
+`LC_TELEPHONE'
+ These locale environment variables are GNU extensions. They are
+ treated like their Posix brethren (`LC_COLLATE', etc.) as
+ described above.
+
+`LINENO'
+ Most modern shells provide the current line number in `LINENO'.
+ Its value is the line number of the beginning of the current
+ command. M4sh, and hence Autoconf, attempts to execute
+ `configure' with a shell that supports `LINENO'. If no such shell
+ is available, it attempts to implement `LINENO' with a Sed prepass
+ that replaces each instance of the string `$LINENO' (not followed
+ by an alphanumeric character) with the line's number. In M4sh
+ scripts you should execute `AS_LINENO_PREPARE' so that these
+ workarounds are included in your script; configure scripts do this
+ automatically in `AC_INIT'.
+
+ You should not rely on `LINENO' within `eval' or shell functions,
+ as the behavior differs in practice. The presence of a quoted
+ newline within simple commands can alter which line number is used
+ as the starting point for `$LINENO' substitutions within that
+ command. Also, the possibility of the Sed prepass means that you
+ should not rely on `$LINENO' when quoted, when in here-documents,
+ or when line continuations are used. Subshells should be OK,
+ though. In the following example, lines 1, 9, and 14 are
+ portable, but the other instances of `$LINENO' do not have
+ deterministic values:
+
+ $ cat lineno
+ echo 1. $LINENO
+ echo "2. $LINENO
+ 3. $LINENO"
+ cat <<EOF
+ 5. $LINENO
+ 6. $LINENO
+ 7. \$LINENO
+ EOF
+ ( echo 9. $LINENO )
+ eval 'echo 10. $LINENO'
+ eval 'echo 11. $LINENO
+ echo 12. $LINENO'
+ echo 13. '$LINENO'
+ echo 14. $LINENO '
+ 15.' $LINENO
+ f () { echo $1 $LINENO;
+ echo $1 $LINENO }
+ f 18.
+ echo 19. \
+ $LINENO
+ $ bash-3.2 ./lineno
+ 1. 1
+ 2. 3
+ 3. 3
+ 5. 4
+ 6. 4
+ 7. $LINENO
+ 9. 9
+ 10. 10
+ 11. 12
+ 12. 13
+ 13. $LINENO
+ 14. 14
+ 15. 14
+ 18. 16
+ 18. 17
+ 19. 19
+ $ zsh-4.3.4 ./lineno
+ 1. 1
+ 2. 2
+ 3. 2
+ 5. 4
+ 6. 4
+ 7. $LINENO
+ 9. 9
+ 10. 1
+ 11. 1
+ 12. 2
+ 13. $LINENO
+ 14. 14
+ 15. 14
+ 18. 0
+ 18. 1
+ 19. 19
+ $ pdksh-5.2.14 ./lineno
+ 1. 1
+ 2. 2
+ 3. 2
+ 5. 4
+ 6. 4
+ 7. $LINENO
+ 9. 9
+ 10. 0
+ 11. 0
+ 12. 0
+ 13. $LINENO
+ 14. 14
+ 15. 14
+ 18. 16
+ 18. 17
+ 19. 19
+ $ sed '=' <lineno |
+ > sed '
+ > N
+ > s,$,-,
+ > t loop
+ > :loop
+ > s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,
+ > t loop
+ > s,-$,,
+ > s,^[0-9]*\n,,
+ > ' |
+ > sh
+ 1. 1
+ 2. 2
+ 3. 3
+ 5. 5
+ 6. 6
+ 7. \7
+ 9. 9
+ 10. 10
+ 11. 11
+ 12. 12
+ 13. 13
+ 14. 14
+ 15. 15
+ 18. 16
+ 18. 17
+ 19. 20
+
+ In particular, note that `config.status' (and any other subsidiary
+ script created by `AS_INIT_GENERATED') might report line numbers
+ relative to the parent script as a result of the potential Sed
+ pass.
+
+`NULLCMD'
+ When executing the command `>foo', `zsh' executes `$NULLCMD >foo'
+ unless it is operating in Bourne shell compatibility mode and the
+ `zsh' version is newer than 3.1.6-dev-18. If you are using an
+ older `zsh' and forget to set `NULLCMD', your script might be
+ suspended waiting for data on its standard input.
+
+`options'
+ For `zsh' 4.3.10, `options' is treated as an associative array
+ even after `emulate sh', so it should not be used.
+
+`PATH_SEPARATOR'
+ On DJGPP systems, the `PATH_SEPARATOR' environment variable can be
+ set to either `:' or `;' to control the path separator Bash uses
+ to set up certain environment variables (such as `PATH'). You can
+ set this variable to `;' if you want `configure' to use `;' as a
+ separator; this might be useful if you plan to use non-Posix
+ shells to execute files. *Note File System Conventions::, for
+ more information about `PATH_SEPARATOR'.
+
+`POSIXLY_CORRECT'
+ In the GNU environment, exporting `POSIXLY_CORRECT' with any value
+ (even empty) causes programs to try harder to conform to Posix.
+ Autoconf does not directly manipulate this variable, but `bash'
+ ties the shell variable `POSIXLY_CORRECT' to whether the script is
+ running in Posix mode. Therefore, take care when exporting or
+ unsetting this variable, so as not to change whether `bash' is in
+ Posix mode.
+
+ $ bash --posix -c 'set -o | grep posix
+ > unset POSIXLY_CORRECT
+ > set -o | grep posix'
+ posix on
+ posix off
+
+`PWD'
+ Posix 1003.1-2001 requires that `cd' and `pwd' must update the
+ `PWD' environment variable to point to the logical name of the
+ current directory, but traditional shells do not support this.
+ This can cause confusion if one shell instance maintains `PWD' but
+ a subsidiary and different shell does not know about `PWD' and
+ executes `cd'; in this case `PWD' points to the wrong directory.
+ Use ``pwd`' rather than `$PWD'.
+
+`RANDOM'
+ Many shells provide `RANDOM', a variable that returns a different
+ integer each time it is used. Most of the time, its value does not
+ change when it is not used, but on IRIX 6.5 the value changes all
+ the time. This can be observed by using `set'. It is common
+ practice to use `$RANDOM' as part of a file name, but code
+ shouldn't rely on `$RANDOM' expanding to a nonempty string.
+
+`status'
+ This variable is an alias to `$?' for `zsh' (at least 3.1.6),
+ hence read-only. Do not use it.
+
+
+File: autoconf.info, Node: Shell Functions, Next: Limitations of Builtins, Prev: Special Shell Variables, Up: Portable Shell
+
+11.13 Shell Functions
+=====================
+
+Nowadays, it is difficult to find a shell that does not support shell
+functions at all. However, some differences should be expected.
+
+ When declaring a shell function, you must include whitespace between
+the `)' after the function name and the start of the compound
+expression, to avoid upsetting `ksh'. While it is possible to use any
+compound command, most scripts use `{...}'.
+
+ $ /bin/sh -c 'a(){ echo hi;}; a'
+ hi
+ $ ksh -c 'a(){ echo hi;}; a'
+ ksh: syntax error at line 1: `}' unexpected
+ $ ksh -c 'a() { echo hi;}; a'
+ hi
+
+ Inside a shell function, you should not rely on the error status of a
+subshell if the last command of that subshell was `exit' or `trap', as
+this triggers bugs in zsh 4.x; while Autoconf tries to find a shell
+that does not exhibit the bug, zsh might be the only shell present on
+the user's machine.
+
+ Likewise, the state of `$?' is not reliable when entering a shell
+function. This has the effect that using a function as the first
+command in a `trap' handler can cause problems.
+
+ $ bash -c 'foo() { echo $?; }; trap foo 0; (exit 2); exit 2'; echo $?
+ 2
+ 2
+ $ ash -c 'foo() { echo $?; }; trap foo 0; (exit 2); exit 2'; echo $?
+ 0
+ 2
+
+ DJGPP bash 2.04 has a bug in that `return' from a shell function
+which also used a command substitution causes a segmentation fault. To
+work around the issue, you can use `return' from a subshell, or
+`AS_SET_STATUS' as last command in the execution flow of the function
+(*note Common Shell Constructs::).
+
+ Not all shells treat shell functions as simple commands impacted by
+`set -e', for example with Solaris 10 `/bin/sh':
+
+ $ bash -c 'f() { return 1; }; set -e; f; echo oops'
+ $ /bin/sh -c 'f() { return 1; }; set -e; f; echo oops'
+ oops
+
+ Shell variables and functions may share the same namespace, for
+example with Solaris 10 `/bin/sh':
+
+ $ f () { :; }; f=; f
+ f: not found
+
+For this reason, Autoconf (actually M4sh, *note Programming in M4sh::)
+uses the prefix `as_fn_' for its functions.
+
+ Handling of positional parameters and shell options varies among
+shells. For example, Korn shells reset and restore trace output (`set
+-x') and other options upon function entry and exit. Inside a function,
+IRIX sh sets `$0' to the function name.
+
+ It is not portable to pass temporary environment variables to shell
+functions. Solaris `/bin/sh' does not see the variable. Meanwhile,
+not all shells follow the Posix rule that the assignment must affect
+the current environment in the same manner as special built-ins.
+
+ $ /bin/sh -c 'func() { echo $a;}; a=1 func; echo $a'
+ =>
+ =>
+ $ ash -c 'func() { echo $a;}; a=1 func; echo $a'
+ =>1
+ =>
+ $ bash -c 'set -o posix; func() { echo $a;}; a=1 func; echo $a'
+ =>1
+ =>1
+
+ Some ancient Bourne shell variants with function support did not
+reset `$I, I >= 0', upon function exit, so effectively the arguments of
+the script were lost after the first function invocation. It is
+probably not worth worrying about these shells any more.
+
+ With AIX sh, a `trap' on 0 installed in a shell function triggers at
+function exit rather than at script exit. *Note Limitations of Shell
+Builtins: trap.
+
+
+File: autoconf.info, Node: Limitations of Builtins, Next: Limitations of Usual Tools, Prev: Shell Functions, Up: Portable Shell
+
+11.14 Limitations of Shell Builtins
+===================================
+
+No, no, we are serious: some shells do have limitations! :)
+
+ You should always keep in mind that any builtin or command may
+support options, and therefore differ in behavior with arguments
+starting with a dash. For instance, even the innocent `echo "$word"'
+can give unexpected results when `word' starts with a dash. It is
+often possible to avoid this problem using `echo "x$word"', taking the
+`x' into account later in the pipe. Many of these limitations can be
+worked around using M4sh (*note Programming in M4sh::).
+
+`.'
+ Use `.' only with regular files (use `test -f'). Bash 2.03, for
+ instance, chokes on `. /dev/null'. Remember that `.' uses `PATH'
+ if its argument contains no slashes. Also, some shells, including
+ bash 3.2, implicitly append the current directory to this `PATH'
+ search, even though Posix forbids it. So if you want to use `.'
+ on a file `foo' in the current directory, you must use `. ./foo'.
+
+ Not all shells gracefully handle syntax errors within a sourced
+ file. On one extreme, some non-interactive shells abort the
+ entire script. On the other, `zsh' 4.3.10 has a bug where it
+ fails to react to the syntax error.
+
+ $ echo 'fi' > syntax
+ $ bash -c '. ./syntax; echo $?'
+ ./syntax: line 1: syntax error near unexpected token `fi'
+ ./syntax: line 1: `fi'
+ 1
+ $ ash -c '. ./syntax; echo $?'
+ ./syntax: 1: Syntax error: "fi" unexpected
+ $ zsh -c '. ./syntax; echo $?'
+ ./syntax:1: parse error near `fi'
+ 0
+
+`!'
+ The Unix version 7 shell did not support negating the exit status
+ of commands with `!', and this feature is still absent from some
+ shells (e.g., Solaris `/bin/sh'). Other shells, such as FreeBSD
+ `/bin/sh' or `ash', have bugs when using `!':
+
+ $ sh -c '! : | :'; echo $?
+ 1
+ $ ash -c '! : | :'; echo $?
+ 0
+ $ sh -c '! { :; }'; echo $?
+ 1
+ $ ash -c '! { :; }'; echo $?
+ {: not found
+ Syntax error: "}" unexpected
+ 2
+
+ Shell code like this:
+
+ if ! cmp file1 file2 >/dev/null 2>&1; then
+ echo files differ or trouble
+ fi
+
+ is therefore not portable in practice. Typically it is easy to
+ rewrite such code, e.g.:
+
+ cmp file1 file2 >/dev/null 2>&1 ||
+ echo files differ or trouble
+
+ More generally, one can always rewrite `! COMMAND' as:
+
+ if COMMAND; then (exit 1); else :; fi
+
+`{...}'
+ Bash 3.2 (and earlier versions) sometimes does not properly set
+ `$?' when failing to write redirected output of a compound command.
+ This problem is most commonly observed with `{...}'; it does not
+ occur with `(...)'. For example:
+
+ $ bash -c '{ echo foo; } >/bad; echo $?'
+ bash: line 1: /bad: Permission denied
+ 0
+ $ bash -c 'while :; do echo; done >/bad; echo $?'
+ bash: line 1: /bad: Permission denied
+ 0
+
+ To work around the bug, prepend `:;':
+
+ $ bash -c ':;{ echo foo; } >/bad; echo $?'
+ bash: line 1: /bad: Permission denied
+ 1
+
+ Posix requires a syntax error if a brace list has no contents.
+ However, not all shells obey this rule; and on shells where empty
+ lists are permitted, the effect on `$?' is inconsistent. To avoid
+ problems, ensure that a brace list is never empty.
+
+ $ bash -c 'false; { }; echo $?' || echo $?
+ bash: line 1: syntax error near unexpected token `}'
+ bash: line 1: `false; { }; echo $?'
+ 2
+ $ zsh -c 'false; { }; echo $?' || echo $?
+ 1
+ $ pdksh -c 'false; { }; echo $?' || echo $?
+ 0
+
+`break'
+ The use of `break 2' etc. is safe.
+
+`case'
+ You don't need to quote the argument; no splitting is performed.
+
+ You don't need the final `;;', but you should use it.
+
+ Posix requires support for `case' patterns with opening
+ parentheses like this:
+
+ case $file_name in
+ (*.c) echo "C source code";;
+ esac
+
+ but the `(' in this example is not portable to many Bourne shell
+ implementations, which is a pity for those of us using tools that
+ rely on balanced parentheses. For instance, with Solaris
+ `/bin/sh':
+
+ $ case foo in (foo) echo foo;; esac
+ error-->syntax error: `(' unexpected
+
+ The leading `(' can be omitted safely. Unfortunately, there are
+ contexts where unbalanced parentheses cause other problems, such
+ as when using a syntax-highlighting editor that searches for the
+ balancing counterpart, or more importantly, when using a case
+ statement as an underquoted argument to an Autoconf macro. *Note
+ Balancing Parentheses::, for tradeoffs involved in various styles
+ of dealing with unbalanced `)'.
+
+ Zsh handles pattern fragments derived from parameter expansions or
+ command substitutions as though quoted:
+
+ $ pat=\?; case aa in ?$pat) echo match;; esac
+ $ pat=\?; case a? in ?$pat) echo match;; esac
+ match
+
+ Because of a bug in its `fnmatch', Bash fails to properly handle
+ backslashes in character classes:
+
+ bash-2.02$ case /tmp in [/\\]*) echo OK;; esac
+ bash-2.02$
+
+ This is extremely unfortunate, since you are likely to use this
+ code to handle Posix or MS-DOS absolute file names. To work
+ around this bug, always put the backslash first:
+
+ bash-2.02$ case '\TMP' in [\\/]*) echo OK;; esac
+ OK
+ bash-2.02$ case /tmp in [\\/]*) echo OK;; esac
+ OK
+
+ Many Bourne shells cannot handle closing brackets in character
+ classes correctly.
+
+ Some shells also have problems with backslash escaping in case you
+ do not want to match the backslash: both a backslash and the
+ escaped character match this pattern. To work around this,
+ specify the character class in a variable, so that quote removal
+ does not apply afterwards, and the special characters don't have
+ to be backslash-escaped:
+
+ $ case '\' in [\<]) echo OK;; esac
+ OK
+ $ scanset='[<]'; case '\' in $scanset) echo OK;; esac
+ $
+
+ Even with this, Solaris `ksh' matches a backslash if the set
+ contains any of the characters `|', `&', `(', or `)'.
+
+ Conversely, Tru64 `ksh' (circa 2003) erroneously always matches a
+ closing parenthesis if not specified in a character class:
+
+ $ case foo in *\)*) echo fail ;; esac
+ fail
+ $ case foo in *')'*) echo fail ;; esac
+ fail
+
+ Some shells, such as Ash 0.3.8, are confused by an empty
+ `case'/`esac':
+
+ ash-0.3.8 $ case foo in esac;
+ error-->Syntax error: ";" unexpected (expecting ")")
+
+ Posix requires `case' to give an exit status of 0 if no cases
+ match. However, `/bin/sh' in Solaris 10 does not obey this rule.
+ Meanwhile, it is unclear whether a case that matches, but contains
+ no statements, must also change the exit status to 0. The M4sh
+ macro `AS_CASE' works around these inconsistencies.
+
+ $ bash -c 'case `false` in ?) ;; esac; echo $?'
+ 0
+ $ /bin/sh -c 'case `false` in ?) ;; esac; echo $?'
+ 255
+
+`cd'
+ Posix 1003.1-2001 requires that `cd' must support the `-L'
+ ("logical") and `-P' ("physical") options, with `-L' being the
+ default. However, traditional shells do not support these
+ options, and their `cd' command has the `-P' behavior.
+
+ Portable scripts should assume neither option is supported, and
+ should assume neither behavior is the default. This can be a bit
+ tricky, since the Posix default behavior means that, for example,
+ `ls ..' and `cd ..' may refer to different directories if the
+ current logical directory is a symbolic link. It is safe to use
+ `cd DIR' if DIR contains no `..' components. Also,
+ Autoconf-generated scripts check for this problem when computing
+ variables like `ac_top_srcdir' (*note Configuration Actions::), so
+ it is safe to `cd' to these variables.
+
+ Posix states that behavior is undefined if `cd' is given an
+ explicit empty argument. Some shells do nothing, some change to
+ the first entry in `CDPATH', some change to `HOME', and some exit
+ the shell rather than returning an error. Unfortunately, this
+ means that if `$var' is empty, then `cd "$var"' is less predictable
+ than `cd $var' (at least the latter is well-behaved in all shells
+ at changing to `HOME', although this is probably not what you
+ wanted in a script). You should check that a directory name was
+ supplied before trying to change locations.
+
+ *Note Special Shell Variables::, for portability problems involving
+ `cd' and the `CDPATH' environment variable. Also please see the
+ discussion of the `pwd' command.
+
+`echo'
+ The simple `echo' is probably the most surprising source of
+ portability troubles. It is not possible to use `echo' portably
+ unless both options and escape sequences are omitted. Don't
+ expect any option.
+
+ Do not use backslashes in the arguments, as there is no consensus
+ on their handling. For `echo '\n' | wc -l', the `sh' of Solaris
+ outputs 2, but Bash and Zsh (in `sh' emulation mode) output 1.
+ The problem is truly `echo': all the shells understand `'\n'' as
+ the string composed of a backslash and an `n'. Within a command
+ substitution, `echo 'string\c'' will mess up the internal state of
+ ksh88 on AIX 6.1 so that it will print the first character `s'
+ only, followed by a newline, and then entirely drop the output of
+ the next echo in a command substitution.
+
+ Because of these problems, do not pass a string containing
+ arbitrary characters to `echo'. For example, `echo "$foo"' is safe
+ only if you know that FOO's value cannot contain backslashes and
+ cannot start with `-'.
+
+ If this may not be true, `printf' is in general safer and easier
+ to use than `echo' and `echo -n'. Thus, scripts where portability
+ is not a major concern should use `printf '%s\n'' whenever `echo'
+ could fail, and similarly use `printf %s' instead of `echo -n'.
+ For portable shell scripts, instead, it is suggested to use a
+ here-document like this:
+
+ cat <<EOF
+ $foo
+ EOF
+
+ Alternatively, M4sh provides `AS_ECHO' and `AS_ECHO_N' macros
+ which choose between various portable implementations: `echo' or
+ `print' where they work, `printf' if it is available, or else
+ other creative tricks in order to work around the above problems.
+
+`eval'
+ The `eval' command is useful in limited circumstances, e.g., using
+ commands like `eval table_$key=\$value' and `eval
+ value=table_$key' to simulate a hash table when the key is known
+ to be alphanumeric.
+
+ You should also be wary of common bugs in `eval' implementations.
+ In some shell implementations (e.g., older `ash', OpenBSD 3.8
+ `sh', `pdksh' v5.2.14 99/07/13.2, and `zsh' 4.2.5), the arguments
+ of `eval' are evaluated in a context where `$?' is 0, so they
+ exhibit behavior like this:
+
+ $ false; eval 'echo $?'
+ 0
+
+ The correct behavior here is to output a nonzero value, but
+ portable scripts should not rely on this.
+
+ You should not rely on `LINENO' within `eval'. *Note Special
+ Shell Variables::.
+
+ Note that, even though these bugs are easily avoided, `eval' is
+ tricky to use on arbitrary arguments. It is obviously unwise to
+ use `eval $cmd' if the string value of `cmd' was derived from an
+ untrustworthy source. But even if the string value is valid,
+ `eval $cmd' might not work as intended, since it causes field
+ splitting and file name expansion to occur twice, once for the
+ `eval' and once for the command itself. It is therefore safer to
+ use `eval "$cmd"'. For example, if CMD has the value `cat
+ test?.c', `eval $cmd' might expand to the equivalent of `cat
+ test;.c' if there happens to be a file named `test;.c' in the
+ current directory; and this in turn mistakenly attempts to invoke
+ `cat' on the file `test' and then execute the command `.c'. To
+ avoid this problem, use `eval "$cmd"' rather than `eval $cmd'.
+
+ However, suppose that you want to output the text of the evaluated
+ command just before executing it. Assuming the previous example,
+ `echo "Executing: $cmd"' outputs `Executing: cat test?.c', but
+ this output doesn't show the user that `test;.c' is the actual name
+ of the copied file. Conversely, `eval "echo Executing: $cmd"'
+ works on this example, but it fails with `cmd='cat foo >bar'',
+ since it mistakenly replaces the contents of `bar' by the string
+ `cat foo'. No simple, general, and portable solution to this
+ problem is known.
+
+`exec'
+ Posix describes several categories of shell built-ins. Special
+ built-ins (such as `exit') must impact the environment of the
+ current shell, and need not be available through `exec'. All
+ other built-ins are regular, and must not propagate variable
+ assignments to the environment of the current shell. However, the
+ group of regular built-ins is further distinguished by commands
+ that do not require a `PATH' search (such as `cd'), in contrast to
+ built-ins that are offered as a more efficient version of
+ something that must still be found in a `PATH' search (such as
+ `echo'). Posix is not clear on whether `exec' must work with the
+ list of 17 utilities that are invoked without a `PATH' search, and
+ many platforms lack an executable for some of those built-ins:
+
+ $ sh -c 'exec cd /tmp'
+ sh: line 0: exec: cd: not found
+
+ All other built-ins that provide utilities specified by Posix must
+ have a counterpart executable that exists on `PATH', although Posix
+ allows `exec' to use the built-in instead of the executable. For
+ example, contrast `bash' 3.2 and `pdksh' 5.2.14:
+
+ $ bash -c 'pwd --version' | head -n1
+ bash: line 0: pwd: --: invalid option
+ pwd: usage: pwd [-LP]
+ $ bash -c 'exec pwd --version' | head -n1
+ pwd (GNU coreutils) 6.10
+ $ pdksh -c 'exec pwd --version' | head -n1
+ pdksh: pwd: --: unknown option
+
+ When it is desired to avoid a regular shell built-in, the
+ workaround is to use some other forwarding command, such as `env'
+ or `nice', that will ensure a path search:
+
+ $ pdksh -c 'exec true --version' | head -n1
+ $ pdksh -c 'nice true --version' | head -n1
+ true (GNU coreutils) 6.10
+ $ pdksh -c 'env true --version' | head -n1
+ true (GNU coreutils) 6.10
+
+`exit'
+ The default value of `exit' is supposed to be `$?'; unfortunately,
+ some shells, such as the DJGPP port of Bash 2.04, just perform
+ `exit 0'.
+
+ bash-2.04$ foo=`exit 1` || echo fail
+ fail
+ bash-2.04$ foo=`(exit 1)` || echo fail
+ fail
+ bash-2.04$ foo=`(exit 1); exit` || echo fail
+ bash-2.04$
+
+ Using `exit $?' restores the expected behavior.
+
+ Some shell scripts, such as those generated by `autoconf', use a
+ trap to clean up before exiting. If the last shell command exited
+ with nonzero status, the trap also exits with nonzero status so
+ that the invoker can tell that an error occurred.
+
+ Unfortunately, in some shells, such as Solaris `/bin/sh', an exit
+ trap ignores the `exit' command's argument. In these shells, a
+ trap cannot determine whether it was invoked by plain `exit' or by
+ `exit 1'. Instead of calling `exit' directly, use the
+ `AC_MSG_ERROR' macro that has a workaround for this problem.
+
+`export'
+ The builtin `export' dubs a shell variable "environment variable".
+ Each update of exported variables corresponds to an update of the
+ environment variables. Conversely, each environment variable
+ received by the shell when it is launched should be imported as a
+ shell variable marked as exported.
+
+ Alas, many shells, such as Solaris `/bin/sh', IRIX 6.3, IRIX 5.2,
+ AIX 4.1.5, and Digital Unix 4.0, forget to `export' the
+ environment variables they receive. As a result, two variables
+ coexist: the environment variable and the shell variable. The
+ following code demonstrates this failure:
+
+ #!/bin/sh
+ echo $FOO
+ FOO=bar
+ echo $FOO
+ exec /bin/sh $0
+
+ when run with `FOO=foo' in the environment, these shells print
+ alternately `foo' and `bar', although they should print only `foo'
+ and then a sequence of `bar's.
+
+ Therefore you should `export' again each environment variable that
+ you update; the export can occur before or after the assignment.
+
+ Posix is not clear on whether the `export' of an undefined
+ variable causes the variable to be defined with the value of an
+ empty string, or merely marks any future definition of a variable
+ by that name for export. Various shells behave differently in
+ this regard:
+
+ $ sh -c 'export foo; env | grep foo'
+ $ ash -c 'export foo; env | grep foo'
+ foo=
+
+ Posix requires `export' to honor assignments made as arguments,
+ but older shells do not support this, including `/bin/sh' in
+ Solaris 10. Portable scripts should separate assignments and
+ exports into different statements.
+
+ $ bash -c 'export foo=bar; echo $foo'
+ bar
+ $ /bin/sh -c 'export foo=bar; echo $foo'
+ /bin/sh: foo=bar: is not an identifier
+ $ /bin/sh -c 'export foo; foo=bar; echo $foo'
+ bar
+
+`false'
+ Don't expect `false' to exit with status 1: in native Solaris
+ `/bin/false' exits with status 255.
+
+`for'
+ To loop over positional arguments, use:
+
+ for arg
+ do
+ echo "$arg"
+ done
+
+ You may _not_ leave the `do' on the same line as `for', since some
+ shells improperly grok:
+
+ for arg; do
+ echo "$arg"
+ done
+
+ If you want to explicitly refer to the positional arguments, given
+ the `$@' bug (*note Shell Substitutions::), use:
+
+ for arg in ${1+"$@"}; do
+ echo "$arg"
+ done
+
+ But keep in mind that Zsh, even in Bourne shell emulation mode,
+ performs word splitting on `${1+"$@"}'; see *note Shell
+ Substitutions::, item `$@', for more.
+
+ In Solaris `/bin/sh', when the list of arguments of a `for' loop
+ starts with _unquoted_ tokens looking like variable assignments,
+ the loop is not executed on those tokens:
+
+ $ /bin/sh -c 'for v in a=b c=d x e=f; do echo $v; done'
+ x
+ e=f
+
+ Thankfully, quoting the assignment-like tokens, or starting the
+ list with other tokens (including unquoted variable expansion that
+ results in an assignment-like result), avoids the problem, so it
+ is easy to work around:
+
+ $ /bin/sh -c 'for v in "a=b"; do echo $v; done'
+ a=b
+ $ /bin/sh -c 'x=a=b; for v in $x c=d; do echo $v; done'
+ a=b
+ c=d
+
+`if'
+ Using `!' is not portable. Instead of:
+
+ if ! cmp -s file file.new; then
+ mv file.new file
+ fi
+
+ use:
+
+ if cmp -s file file.new; then :; else
+ mv file.new file
+ fi
+
+ Or, especially if the "else" branch is short, you can use `||'.
+ In M4sh, the `AS_IF' macro provides an easy way to write these
+ kinds of conditionals:
+
+ AS_IF([cmp -s file file.new], [], [mv file.new file])
+
+ This is especially useful in other M4 macros, where the "then" and
+ "else" branches might be macro arguments.
+
+ Some very old shells did not reset the exit status from an `if'
+ with no `else':
+
+ $ if (exit 42); then true; fi; echo $?
+ 42
+
+ whereas a proper shell should have printed `0'. But this is no
+ longer a portability problem; any shell that supports functions
+ gets it correct. However, it explains why some makefiles have
+ lengthy constructs:
+
+ if test -f "$file"; then
+ install "$file" "$dest"
+ else
+ :
+ fi
+
+`printf'
+ A format string starting with a `-' can cause problems. Bash
+ interprets it as an option and gives an error. And `--' to mark
+ the end of options is not good in the NetBSD Almquist shell (e.g.,
+ 0.4.6) which takes that literally as the format string. Putting
+ the `-' in a `%c' or `%s' is probably easiest:
+
+ printf %s -foo
+
+ Bash 2.03 mishandles an escape sequence that happens to evaluate
+ to `%':
+
+ $ printf '\045'
+ bash: printf: `%': missing format character
+
+ Large outputs may cause trouble. On Solaris 2.5.1 through 10, for
+ example, `/usr/bin/printf' is buggy, so when using `/bin/sh' the
+ command `printf %010000x 123' normally dumps core.
+
+ Since `printf' is not always a shell builtin, there is a potential
+ speed penalty for using `printf '%s\n'' as a replacement for an
+ `echo' that does not interpret `\' or leading `-'. With Solaris
+ `ksh', it is possible to use `print -r --' for this role instead.
+
+ *Note Limitations of Shell Builtins: echo for a discussion of
+ portable alternatives to both `printf' and `echo'.
+
+`pwd'
+ With modern shells, plain `pwd' outputs a "logical" directory
+ name, some of whose components may be symbolic links. These
+ directory names are in contrast to "physical" directory names,
+ whose components are all directories.
+
+ Posix 1003.1-2001 requires that `pwd' must support the `-L'
+ ("logical") and `-P' ("physical") options, with `-L' being the
+ default. However, traditional shells do not support these
+ options, and their `pwd' command has the `-P' behavior.
+
+ Portable scripts should assume neither option is supported, and
+ should assume neither behavior is the default. Also, on many hosts
+ `/bin/pwd' is equivalent to `pwd -P', but Posix does not require
+ this behavior and portable scripts should not rely on it.
+
+ Typically it's best to use plain `pwd'. On modern hosts this
+ outputs logical directory names, which have the following
+ advantages:
+
+ * Logical names are what the user specified.
+
+ * Physical names may not be portable from one installation host
+ to another due to network file system gymnastics.
+
+ * On modern hosts `pwd -P' may fail due to lack of permissions
+ to some parent directory, but plain `pwd' cannot fail for this
+ reason.
+
+ Also please see the discussion of the `cd' command.
+
+`read'
+ No options are portable, not even support `-r' (Solaris `/bin/sh'
+ for example). Tru64/OSF 5.1 `sh' treats `read' as a special
+ built-in, so it may exit if input is redirected from a
+ non-existent or unreadable file.
+
+`set'
+ With the FreeBSD 6.0 shell, the `set' command (without any
+ options) does not sort its output.
+
+ The `set' builtin faces the usual problem with arguments starting
+ with a dash. Modern shells such as Bash or Zsh understand `--' to
+ specify the end of the options (any argument after `--' is a
+ parameter, even `-x' for instance), but many traditional shells
+ (e.g., Solaris 10 `/bin/sh') simply stop option processing as soon
+ as a non-option argument is found. Therefore, use `dummy' or
+ simply `x' to end the option processing, and use `shift' to pop it
+ out:
+
+ set x $my_list; shift
+
+ Avoid `set -', e.g., `set - $my_list'. Posix no longer requires
+ support for this command, and in traditional shells `set -
+ $my_list' resets the `-v' and `-x' options, which makes scripts
+ harder to debug.
+
+ Some nonstandard shells do not recognize more than one option
+ (e.g., `set -e -x' assigns `-x' to the command line). It is
+ better to combine them:
+
+ set -ex
+
+ The option `-e' has historically been underspecified, with enough
+ ambiguities to cause numerous differences across various shell
+ implementations; see for example this overview
+ (http://www.in-ulm.de/~mascheck/various/set-e/), or this link
+ (http://www.austingroupbugs.net/view.php?id=52), documenting a
+ change to Posix 2008 to match `ksh88' behavior. Note that mixing
+ `set -e' and shell functions is asking for surprises:
+
+ set -e
+ doit()
+ {
+ rm file
+ echo one
+ }
+ doit || echo two
+
+ According to the recommendation, `one' should always be output
+ regardless of whether the `rm' failed, because it occurs within
+ the body of the shell function `doit' invoked on the left side of
+ `||', where the effects of `set -e' are not enforced. Likewise,
+ `two' should never be printed, since the failure of `rm' does not
+ abort the function, such that the status of `doit' is 0.
+
+ The BSD shell has had several problems with the `-e' option.
+ Older versions of the BSD shell (circa 1990) mishandled `&&',
+ `||', `if', and `case' when `-e' was in effect, causing the shell
+ to exit unexpectedly in some cases. This was particularly a
+ problem with makefiles, and led to circumlocutions like `sh -c
+ 'test -f file || touch file'', where the seemingly-unnecessary `sh
+ -c '...'' wrapper works around the bug (*note Failure in Make
+ Rules::).
+
+ Even relatively-recent versions of the BSD shell (e.g., OpenBSD
+ 3.4) wrongly exit with `-e' if the last command within a compound
+ statement fails and is guarded by an `&&' only. For example:
+
+ #! /bin/sh
+ set -e
+ foo=''
+ test -n "$foo" && exit 1
+ echo one
+ if :; then
+ test -n "$foo" && exit 1
+ echo two
+ test -n "$foo" && exit 1
+ fi
+ echo three
+
+ does not print `three'. One workaround is to change the last
+ instance of `test -n "$foo" && exit 1' to be `if test -n "$foo";
+ then exit 1; fi' instead. Another possibility is to warn BSD
+ users not to use `sh -e'.
+
+ When `set -e' is in effect, a failed command substitution in
+ Solaris `/bin/sh' cannot be ignored, even with `||'.
+
+ $ /bin/sh -c 'set -e; foo=`false` || echo foo; echo bar'
+ $ bash -c 'set -e; foo=`false` || echo foo; echo bar'
+ foo
+ bar
+
+ Moreover, a command substitution, successful or not, causes this
+ shell to exit from a failing outer command even in presence of an
+ `&&' list:
+
+ $ bash -c 'set -e; false `true` && echo notreached; echo ok'
+ ok
+ $ sh -c 'set -e; false `true` && echo notreached; echo ok'
+ $
+
+ Portable scripts should not use `set -e' if `trap' is used to
+ install an exit handler. This is because Tru64/OSF 5.1 `sh'
+ sometimes enters the trap handler with the exit status of the
+ command prior to the one that triggered the errexit handler:
+
+ $ sh -ec 'trap '\''echo $?'\'' 0; false'
+ 0
+ $ sh -c 'set -e; trap '\''echo $?'\'' 0; false'
+ 1
+
+ Thus, when writing a script in M4sh, rather than trying to rely on
+ `set -e', it is better to append `|| AS_EXIT' to any statement
+ where it is desirable to abort on failure.
+
+ Job control is not provided by all shells, so the use of `set -m'
+ or `set -b' must be done with care. When using `zsh' in native
+ mode, asynchronous notification (`set -b') is enabled by default,
+ and using `emulate sh' to switch to Posix mode does not clear this
+ setting (although asynchronous notification has no impact unless
+ job monitoring is also enabled). Also, `zsh' 4.3.10 and earlier
+ have a bug where job control can be manipulated in interactive
+ shells, but not in subshells or scripts. Furthermore, some
+ shells, like `pdksh', fail to treat subshells as interactive, even
+ though the parent shell was.
+
+ $ echo $ZSH_VERSION
+ 4.3.10
+ $ set -m; echo $?
+ 0
+ $ zsh -c 'set -m; echo $?'
+ set: can't change option: -m
+ $ (set -m); echo $?
+ set: can't change option: -m
+ 1
+ $ pdksh -ci 'echo $-; (echo $-)'
+ cim
+ c
+
+ Use of `set -n' (typically via `sh -n script') to validate a
+ script is not foolproof. Modern `ksh93' tries to be helpful by
+ informing you about better syntax, but switching the script to use
+ the suggested syntax in order to silence the warnings would render
+ the script no longer portable to older shells:
+
+ $ ksh -nc '``'
+ ksh: warning: line 1: `...` obsolete, use $(...)
+ 0
+
+ Furthermore, on ancient hosts, such as SunOS 4, `sh -n' could go
+ into an infinite loop; even with that bug fixed, Solaris 8
+ `/bin/sh' takes extremely long to parse large scripts. Autoconf
+ itself uses `sh -n' within its testsuite to check that correct
+ scripts were generated, but only after first probing for other
+ shell features (such as `test -n "${BASH_VERSION+set}"') that
+ indicate a reasonably fast and working implementation.
+
+`shift'
+ Not only is `shift'ing a bad idea when there is nothing left to
+ shift, but in addition it is not portable: the shell of MIPS
+ RISC/OS 4.52 refuses to do it.
+
+ Don't use `shift 2' etc.; while it in the SVR1 shell (1983), it is
+ also absent in many pre-Posix shells.
+
+`source'
+ This command is not portable, as Posix does not require it; use
+ `.' instead.
+
+`test'
+ The `test' program is the way to perform many file and string
+ tests. It is often invoked by the alternate name `[', but using
+ that name in Autoconf code is asking for trouble since it is an M4
+ quote character.
+
+ The `-a', `-o', `(', and `)' operands are not present in all
+ implementations, and have been marked obsolete by Posix 2008.
+ This is because there are inherent ambiguities in using them. For
+ example, `test "$1" -a "$2"' looks like a binary operator to check
+ whether two strings are both non-empty, but if `$1' is the literal
+ `!', then some implementations of `test' treat it as a negation of
+ the unary operator `-a'.
+
+ Thus, portable uses of `test' should never have more than four
+ arguments, and scripts should use shell constructs like `&&' and
+ `||' instead. If you combine `&&' and `||' in the same statement,
+ keep in mind that they have equal precedence, so it is often
+ better to parenthesize even when this is redundant. For example:
+
+ # Not portable:
+ test "X$a" = "X$b" -a \
+ '(' "X$c" != "X$d" -o "X$e" = "X$f" ')'
+
+ # Portable:
+ test "X$a" = "X$b" &&
+ { test "X$c" != "X$d" || test "X$e" = "X$f"; }
+
+ `test' does not process options like most other commands do; for
+ example, it does not recognize the `--' argument as marking the
+ end of options.
+
+ It is safe to use `!' as a `test' operator. For example, `if test
+ ! -d foo; ...' is portable even though `if ! test -d foo; ...' is
+ not.
+
+`test' (files)
+ To enable `configure' scripts to support cross-compilation, they
+ shouldn't do anything that tests features of the build system
+ instead of the host system. But occasionally you may find it
+ necessary to check whether some arbitrary file exists. To do so,
+ use `test -f', `test -r', or `test -x'. Do not use `test -e',
+ because Solaris 10 `/bin/sh' lacks it. To test for symbolic links
+ on systems that have them, use `test -h' rather than `test -L';
+ either form conforms to Posix 1003.1-2001, but older shells like
+ Solaris 8 `/bin/sh' support only `-h'.
+
+ For historical reasons, Posix reluctantly allows implementations of
+ `test -x' that will succeed for the root user, even if no execute
+ permissions are present. Furthermore, shells do not all agree on
+ whether Access Control Lists should affect `test -r', `test -w',
+ and `test -x'; some shells base test results strictly on the
+ current user id compared to file owner and mode, as if by
+ `stat(2)'; while other shells base test results on whether the
+ current user has the given right, even if that right is only
+ granted by an ACL, as if by `faccessat(2)'. Furthermore, there is
+ a classic time of check to time of use race between any use of
+ `test' followed by operating on the just-checked file. Therefore,
+ it is a good idea to write scripts that actually attempt an
+ operation, and are prepared for the resulting failure if
+ permission is denied, rather than trying to avoid an operation
+ based solely on whether `test' guessed that it might not be
+ permitted.
+
+`test' (strings)
+ Posix says that `test "STRING"' succeeds if STRING is not null,
+ but this usage is not portable to traditional platforms like
+ Solaris 10 `/bin/sh', which mishandle strings like `!' and `-n'.
+
+ Posix also says that `test ! "STRING"', `test -n "STRING"' and
+ `test -z "STRING"' work with any string, but many shells (such as
+ Solaris, AIX 3.2, UNICOS 10.0.0.6, Digital Unix 4, etc.) get
+ confused if STRING looks like an operator:
+
+ $ test -n =
+ test: argument expected
+ $ test ! -n
+ test: argument expected
+ $ test -z ")"; echo $?
+ 0
+
+ Similarly, Posix says that both `test "STRING1" = "STRING2"' and
+ `test "STRING1" != "STRING2"' work for any pairs of strings, but
+ in practice this is not true for troublesome strings that look
+ like operators or parentheses, or that begin with `-'.
+
+ It is best to protect such strings with a leading `X', e.g., `test
+ "XSTRING" != X' rather than `test -n "STRING"' or `test !
+ "STRING"'.
+
+ It is common to find variations of the following idiom:
+
+ test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
+ ACTION
+
+ to take an action when a token matches a given pattern. Such
+ constructs should be avoided by using:
+
+ case $ac_feature in
+ *[!-a-zA-Z0-9_]*) ACTION;;
+ esac
+
+ If the pattern is a complicated regular expression that cannot be
+ expressed as a shell pattern, use something like this instead:
+
+ expr "X$ac_feature" : 'X.*[^-a-zA-Z0-9_]' >/dev/null &&
+ ACTION
+
+ `expr "XFOO" : "XBAR"' is more robust than `echo "XFOO" | grep
+ "^XBAR"', because it avoids problems when `FOO' contains
+ backslashes.
+
+`trap'
+ It is safe to trap at least the signals 1, 2, 13, and 15. You can
+ also trap 0, i.e., have the `trap' run when the script ends
+ (either via an explicit `exit', or the end of the script). The
+ trap for 0 should be installed outside of a shell function, or AIX
+ 5.3 `/bin/sh' will invoke the trap at the end of this function.
+
+ Posix says that `trap - 1 2 13 15' resets the traps for the
+ specified signals to their default values, but many common shells
+ (e.g., Solaris `/bin/sh') misinterpret this and attempt to execute
+ a "command" named `-' when the specified conditions arise. Posix
+ 2008 also added a requirement to support `trap 1 2 13 15' to reset
+ traps, as this is supported by a larger set of shells, but there
+ are still shells like `dash' that mistakenly try to execute `1'
+ instead of resetting the traps. Therefore, there is no portable
+ workaround, except for `trap - 0', for which `trap '' 0' is a
+ portable substitute.
+
+ Although Posix is not absolutely clear on this point, it is widely
+ admitted that when entering the trap `$?' should be set to the exit
+ status of the last command run before the trap. The ambiguity can
+ be summarized as: "when the trap is launched by an `exit', what is
+ the _last_ command run: that before `exit', or `exit' itself?"
+
+ Bash considers `exit' to be the last command, while Zsh and
+ Solaris `/bin/sh' consider that when the trap is run it is _still_
+ in the `exit', hence it is the previous exit status that the trap
+ receives:
+
+ $ cat trap.sh
+ trap 'echo $?' 0
+ (exit 42); exit 0
+ $ zsh trap.sh
+ 42
+ $ bash trap.sh
+ 0
+
+ The portable solution is then simple: when you want to `exit 42',
+ run `(exit 42); exit 42', the first `exit' being used to set the
+ exit status to 42 for Zsh, and the second to trigger the trap and
+ pass 42 as exit status for Bash. In M4sh, this is covered by using
+ `AS_EXIT'.
+
+ The shell in FreeBSD 4.0 has the following bug: `$?' is reset to 0
+ by empty lines if the code is inside `trap'.
+
+ $ trap 'false
+
+ echo $?' 0
+ $ exit
+ 0
+
+ Fortunately, this bug only affects `trap'.
+
+ Several shells fail to execute an exit trap that is defined inside
+ a subshell, when the last command of that subshell is not a
+ builtin. A workaround is to use `exit $?' as the shell builtin.
+
+ $ bash -c '(trap "echo hi" 0; /bin/true)'
+ hi
+ $ /bin/sh -c '(trap "echo hi" 0; /bin/true)'
+ $ /bin/sh -c '(trap "echo hi" 0; /bin/true; exit $?)'
+ hi
+
+ Likewise, older implementations of `bash' failed to preserve `$?'
+ across an exit trap consisting of a single cleanup command.
+
+ $ bash -c 'trap "/bin/true" 0; exit 2'; echo $?
+ 2
+ $ bash-2.05b -c 'trap "/bin/true" 0; exit 2'; echo $?
+ 0
+ $ bash-2.05b -c 'trap ":; /bin/true" 0; exit 2'; echo $?
+ 2
+
+`true'
+ Don't worry: as far as we know `true' is portable. Nevertheless,
+ it's not always a builtin (e.g., Bash 1.x), and the portable shell
+ community tends to prefer using `:'. This has a funny side
+ effect: when asked whether `false' is more portable than `true'
+ Alexandre Oliva answered:
+
+ In a sense, yes, because if it doesn't exist, the shell will
+ produce an exit status of failure, which is correct for
+ `false', but not for `true'.
+
+ Remember that even though `:' ignores its arguments, it still takes
+ time to compute those arguments. It is a good idea to use double
+ quotes around any arguments to `:' to avoid time spent in field
+ splitting and file name expansion.
+
+`unset'
+ In some nonconforming shells (e.g., Solaris 10 `/bin/ksh' and
+ `/usr/xpg4/bin/sh', NetBSD 5.99.43 sh, or Bash 2.05a), `unset FOO'
+ fails when `FOO' is not set. This can interfere with `set -e'
+ operation. You can use
+
+ FOO=; unset FOO
+
+ if you are not sure that `FOO' is set.
+
+ A few ancient shells lack `unset' entirely. For some variables
+ such as `PS1', you can use a neutralizing value instead:
+
+ PS1='$ '
+
+ Usually, shells that do not support `unset' need less effort to
+ make the environment sane, so for example is not a problem if you
+ cannot unset `CDPATH' on those shells. However, Bash 2.01
+ mishandles `unset MAIL' and `unset MAILPATH' in some cases and
+ dumps core. So, you should do something like
+
+ ( (unset MAIL) || exit 1) >/dev/null 2>&1 && unset MAIL || :
+
+ *Note Special Shell Variables::, for some neutralizing values.
+ Also, see *note Limitations of Builtins: export, for the case of
+ environment variables.
+
+`wait'
+ The exit status of `wait' is not always reliable.
+
+
+File: autoconf.info, Node: Limitations of Usual Tools, Prev: Limitations of Builtins, Up: Portable Shell
+
+11.15 Limitations of Usual Tools
+================================
+
+The small set of tools you can expect to find on any machine can still
+include some limitations you should be aware of.
+
+`awk'
+ Don't leave white space before the opening parenthesis in a user
+ function call. Posix does not allow this and GNU Awk rejects it:
+
+ $ gawk 'function die () { print "Aaaaarg!" }
+ BEGIN { die () }'
+ gawk: cmd. line:2: BEGIN { die () }
+ gawk: cmd. line:2: ^ parse error
+ $ gawk 'function die () { print "Aaaaarg!" }
+ BEGIN { die() }'
+ Aaaaarg!
+
+ Posix says that if a program contains only `BEGIN' actions, and
+ contains no instances of `getline', then the program merely
+ executes the actions without reading input. However, traditional
+ Awk implementations (such as Solaris 10 `awk') read and discard
+ input in this case. Portable scripts can redirect input from
+ `/dev/null' to work around the problem. For example:
+
+ awk 'BEGIN {print "hello world"}' </dev/null
+
+ Posix says that in an `END' action, `$NF' (and presumably, `$1')
+ retain their value from the last record read, if no intervening
+ `getline' occurred. However, some implementations (such as
+ Solaris 10 `/usr/bin/awk', `nawk', or Darwin `awk') reset these
+ variables. A workaround is to use an intermediate variable prior
+ to the `END' block. For example:
+
+ $ cat end.awk
+ { tmp = $1 }
+ END { print "a", $1, $NF, "b", tmp }
+ $ echo 1 | awk -f end.awk
+ a b 1
+ $ echo 1 | gawk -f end.awk
+ a 1 1 b 1
+
+ If you want your program to be deterministic, don't depend on `for'
+ on arrays:
+
+ $ cat for.awk
+ END {
+ arr["foo"] = 1
+ arr["bar"] = 1
+ for (i in arr)
+ print i
+ }
+ $ gawk -f for.awk </dev/null
+ foo
+ bar
+ $ nawk -f for.awk </dev/null
+ bar
+ foo
+
+ Some Awk implementations, such as HP-UX 11.0's native one,
+ mishandle anchors:
+
+ $ echo xfoo | $AWK '/foo|^bar/ { print }'
+ $ echo bar | $AWK '/foo|^bar/ { print }'
+ bar
+ $ echo xfoo | $AWK '/^bar|foo/ { print }'
+ xfoo
+ $ echo bar | $AWK '/^bar|foo/ { print }'
+ bar
+
+ Either do not depend on such patterns (i.e., use `/^(.*foo|bar)/',
+ or use a simple test to reject such implementations.
+
+ On `ia64-hp-hpux11.23', Awk mishandles `printf' conversions after
+ `%u':
+
+ $ awk 'BEGIN { printf "%u %d\n", 0, -1 }'
+ 0 0
+
+ AIX version 5.2 has an arbitrary limit of 399 on the length of
+ regular expressions and literal strings in an Awk program.
+
+ Traditional Awk implementations derived from Unix version 7, such
+ as Solaris `/bin/awk', have many limitations and do not conform to
+ Posix. Nowadays `AC_PROG_AWK' (*note Particular Programs::) finds
+ you an Awk that doesn't have these problems, but if for some
+ reason you prefer not to use `AC_PROG_AWK' you may need to address
+ them. For more detailed descriptions, see *note `awk' language
+ history: (gawk)Language History.
+
+ Traditional Awk does not support multidimensional arrays or
+ user-defined functions.
+
+ Traditional Awk does not support the `-v' option. You can use
+ assignments after the program instead, e.g., `$AWK '{print v $1}'
+ v=x'; however, don't forget that such assignments are not
+ evaluated until they are encountered (e.g., after any `BEGIN'
+ action).
+
+ Traditional Awk does not support the keywords `delete' or `do'.
+
+ Traditional Awk does not support the expressions `A?B:C', `!A',
+ `A^B', or `A^=B'.
+
+ Traditional Awk does not support the predefined `CONVFMT' or
+ `ENVIRON' variables.
+
+ Traditional Awk supports only the predefined functions `exp',
+ `index', `int', `length', `log', `split', `sprintf', `sqrt', and
+ `substr'.
+
+ Traditional Awk `getline' is not at all compatible with Posix;
+ avoid it.
+
+ Traditional Awk has `for (i in a) ...' but no other uses of the
+ `in' keyword. For example, it lacks `if (i in a) ...'.
+
+ In code portable to both traditional and modern Awk, `FS' must be a
+ string containing just one ordinary character, and similarly for
+ the field-separator argument to `split'.
+
+ Traditional Awk has a limit of 99 fields in a record. Since some
+ Awk implementations, like Tru64's, split the input even if you
+ don't refer to any field in the script, to circumvent this
+ problem, set `FS' to an unusual character and use `split'.
+
+ Traditional Awk has a limit of at most 99 bytes in a number
+ formatted by `OFMT'; for example, `OFMT="%.300e"; print 0.1;'
+ typically dumps core.
+
+ The original version of Awk had a limit of at most 99 bytes per
+ `split' field, 99 bytes per `substr' substring, and 99 bytes per
+ run of non-special characters in a `printf' format, but these bugs
+ have been fixed on all practical hosts that we know of.
+
+ HP-UX 11.00 and IRIX 6.5 Awk require that input files have a line
+ length of at most 3070 bytes.
+
+`basename'
+ Not all hosts have a working `basename'. You can use `expr'
+ instead.
+
+`cat'
+ Don't rely on any option.
+
+`cc'
+ The command `cc -c foo.c' traditionally produces an object file
+ named `foo.o'. Most compilers allow `-c' to be combined with `-o'
+ to specify a different object file name, but Posix does not
+ require this combination and a few compilers lack support for it.
+ *Note C Compiler::, for how GNU Make tests for this feature with
+ `AC_PROG_CC_C_O'.
+
+ When a compilation such as `cc -o foo foo.c' fails, some compilers
+ (such as CDS on Reliant Unix) leave a `foo.o'.
+
+ HP-UX `cc' doesn't accept `.S' files to preprocess and assemble.
+ `cc -c foo.S' appears to succeed, but in fact does nothing.
+
+ The default executable, produced by `cc foo.c', can be
+
+ * `a.out' -- usual Posix convention.
+
+ * `b.out' -- i960 compilers (including `gcc').
+
+ * `a.exe' -- DJGPP port of `gcc'.
+
+ * `a_out.exe' -- GNV `cc' wrapper for DEC C on OpenVMS.
+
+ * `foo.exe' -- various MS-DOS compilers.
+
+ The C compiler's traditional name is `cc', but other names like
+ `gcc' are common. Posix 1003.1-2001 specifies the name `c99', but
+ older Posix editions specified `c89' and anyway these standard
+ names are rarely used in practice. Typically the C compiler is
+ invoked from makefiles that use `$(CC)', so the value of the `CC'
+ make variable selects the compiler name.
+
+`chgrp'
+`chown'
+ It is not portable to change a file's group to a group that the
+ owner does not belong to.
+
+`chmod'
+ Avoid usages like `chmod -w file'; use `chmod a-w file' instead,
+ for two reasons. First, plain `-w' does not necessarily make the
+ file unwritable, since it does not affect mode bits that
+ correspond to bits in the file mode creation mask. Second, Posix
+ says that the `-w' might be interpreted as an
+ implementation-specific option, not as a mode; Posix suggests
+ using `chmod -- -w file' to avoid this confusion, but unfortunately
+ `--' does not work on some older hosts.
+
+`cmp'
+ `cmp' performs a raw data comparison of two files, while `diff'
+ compares two text files. Therefore, if you might compare DOS
+ files, even if only checking whether two files are different, use
+ `diff' to avoid spurious differences due to differences of newline
+ encoding.
+
+`cp'
+ Avoid the `-r' option, since Posix 1003.1-2004 marks it as
+ obsolescent and its behavior on special files is
+ implementation-defined. Use `-R' instead. On GNU hosts the two
+ options are equivalent, but on Solaris hosts (for example) `cp -r'
+ reads from pipes instead of replicating them. AIX 5.3 `cp -R' may
+ corrupt its own memory with some directory hierarchies and error
+ out or dump core:
+
+ mkdir -p 12345678/12345678/12345678/12345678
+ touch 12345678/12345678/x
+ cp -R 12345678 t
+ cp: 0653-440 12345678/12345678/: name too long.
+
+ Some `cp' implementations (e.g., BSD/OS 4.2) do not allow trailing
+ slashes at the end of nonexistent destination directories. To
+ avoid this problem, omit the trailing slashes. For example, use
+ `cp -R source /tmp/newdir' rather than `cp -R source /tmp/newdir/'
+ if `/tmp/newdir' does not exist.
+
+ The ancient SunOS 4 `cp' does not support `-f', although its `mv'
+ does.
+
+ Traditionally, file timestamps had 1-second resolution, and `cp
+ -p' copied the timestamps exactly. However, many modern file
+ systems have timestamps with 1-nanosecond resolution.
+ Unfortunately, some older `cp -p' implementations truncate
+ timestamps when copying files, which can cause the destination
+ file to appear to be older than the source. The exact amount of
+ truncation depends on the resolution of the system calls that `cp'
+ uses. Traditionally this was `utime', which has 1-second
+ resolution. Less-ancient `cp' implementations such as GNU Core
+ Utilities 5.0.91 (2003) use `utimes', which has 1-microsecond
+ resolution. Modern implementations such as GNU Core Utilities
+ 6.12 (2008) can set timestamps to the full nanosecond resolution,
+ using the modern system calls `futimens' and `utimensat' when they
+ are available. As of 2011, though, many platforms do not yet
+ fully support these new system calls.
+
+ Bob Proulx notes that `cp -p' always _tries_ to copy ownerships.
+ But whether it actually does copy ownerships or not is a system
+ dependent policy decision implemented by the kernel. If the
+ kernel allows it then it happens. If the kernel does not allow it
+ then it does not happen. It is not something `cp' itself has
+ control over.
+
+ In Unix System V any user can chown files to any other user, and
+ System V also has a non-sticky `/tmp'. That probably derives from
+ the heritage of System V in a business environment without hostile
+ users. BSD changed this to be a more secure model where only root
+ can `chown' files and a sticky `/tmp' is used. That undoubtedly
+ derives from the heritage of BSD in a campus environment.
+
+ GNU/Linux and Solaris by default follow BSD, but can be configured
+ to allow a System V style `chown'. On the other hand, HP-UX
+ follows System V, but can be configured to use the modern security
+ model and disallow `chown'. Since it is an
+ administrator-configurable parameter you can't use the name of the
+ kernel as an indicator of the behavior.
+
+`date'
+ Some versions of `date' do not recognize special `%' directives,
+ and unfortunately, instead of complaining, they just pass them
+ through, and exit with success:
+
+ $ uname -a
+ OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
+ $ date "+%s"
+ %s
+
+`diff'
+ Option `-u' is nonportable.
+
+ Some implementations, such as Tru64's, fail when comparing to
+ `/dev/null'. Use an empty file instead.
+
+`dirname'
+ Not all hosts have a working `dirname', and you should instead use
+ `AS_DIRNAME' (*note Programming in M4sh::). For example:
+
+ dir=`dirname "$file"` # This is not portable.
+ dir=`AS_DIRNAME(["$file"])` # This is more portable.
+
+`egrep'
+ Posix 1003.1-2001 no longer requires `egrep', but many hosts do
+ not yet support the Posix replacement `grep -E'. Also, some
+ traditional implementations do not work on long input lines. To
+ work around these problems, invoke `AC_PROG_EGREP' and then use
+ `$EGREP'.
+
+ Portable extended regular expressions should use `\' only to escape
+ characters in the string `$()*+.?[\^{|'. For example, `\}' is not
+ portable, even though it typically matches `}'.
+
+ The empty alternative is not portable. Use `?' instead. For
+ instance with Digital Unix v5.0:
+
+ > printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
+ |foo
+ > printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
+ bar|
+ > printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
+ foo
+ |bar
+
+ `$EGREP' also suffers the limitations of `grep' (*note Limitations
+ of Usual Tools: grep.).
+
+`expr'
+ Not all implementations obey the Posix rule that `--' separates
+ options from arguments; likewise, not all implementations provide
+ the extension to Posix that the first argument can be treated as
+ part of a valid expression rather than an invalid option if it
+ begins with `-'. When performing arithmetic, use `expr 0 + $var'
+ if `$var' might be a negative number, to keep `expr' from
+ interpreting it as an option.
+
+ No `expr' keyword starts with `X', so use `expr X"WORD" :
+ 'XREGEX'' to keep `expr' from misinterpreting WORD.
+
+ Don't use `length', `substr', `match' and `index'.
+
+`expr' (`|')
+ You can use `|'. Although Posix does require that `expr '''
+ return the empty string, it does not specify the result when you
+ `|' together the empty string (or zero) with the empty string. For
+ example:
+
+ expr '' \| ''
+
+ Posix 1003.2-1992 returns the empty string for this case, but
+ traditional Unix returns `0' (Solaris is one such example). In
+ Posix 1003.1-2001, the specification was changed to match
+ traditional Unix's behavior (which is bizarre, but it's too late
+ to fix this). Please note that the same problem does arise when
+ the empty string results from a computation, as in:
+
+ expr bar : foo \| foo : bar
+
+ Avoid this portability problem by avoiding the empty string.
+
+`expr' (`:')
+ Portable `expr' regular expressions should use `\' to escape only
+ characters in the string `$()*.0123456789[\^n{}'. For example,
+ alternation, `\|', is common but Posix does not require its
+ support, so it should be avoided in portable scripts. Similarly,
+ `\+' and `\?' should be avoided.
+
+ Portable `expr' regular expressions should not begin with `^'.
+ Patterns are automatically anchored so leading `^' is not needed
+ anyway.
+
+ On the other hand, the behavior of the `$' anchor is not portable
+ on multi-line strings. Posix is ambiguous whether the anchor
+ applies to each line, as was done in older versions of the GNU
+ Core Utilities, or whether it applies only to the end of the
+ overall string, as in Coreutils 6.0 and most other implementations.
+
+ $ baz='foo
+ > bar'
+ $ expr "X$baz" : 'X\(foo\)$'
+
+ $ expr-5.97 "X$baz" : 'X\(foo\)$'
+ foo
+
+ The Posix standard is ambiguous as to whether `expr 'a' : '\(b\)''
+ outputs `0' or the empty string. In practice, it outputs the
+ empty string on most platforms, but portable scripts should not
+ assume this. For instance, the QNX 4.25 native `expr' returns `0'.
+
+ One might think that a way to get a uniform behavior would be to
+ use the empty string as a default value:
+
+ expr a : '\(b\)' \| ''
+
+ Unfortunately this behaves exactly as the original expression; see
+ the `expr' (`|') entry for more information.
+
+ Some ancient `expr' implementations (e.g., SunOS 4 `expr' and
+ Solaris 8 `/usr/ucb/expr') have a silly length limit that causes
+ `expr' to fail if the matched substring is longer than 120 bytes.
+ In this case, you might want to fall back on `echo|sed' if `expr'
+ fails. Nowadays this is of practical importance only for the rare
+ installer who mistakenly puts `/usr/ucb' before `/usr/bin' in
+ `PATH'.
+
+ On Mac OS X 10.4, `expr' mishandles the pattern `[^-]' in some
+ cases. For example, the command
+ expr Xpowerpc-apple-darwin8.1.0 : 'X[^-]*-[^-]*-\(.*\)'
+
+ outputs `apple-darwin8.1.0' rather than the correct `darwin8.1.0'.
+ This particular case can be worked around by substituting `[^--]'
+ for `[^-]'.
+
+ Don't leave, there is some more!
+
+ The QNX 4.25 `expr', in addition of preferring `0' to the empty
+ string, has a funny behavior in its exit status: it's always 1
+ when parentheses are used!
+
+ $ val=`expr 'a' : 'a'`; echo "$?: $val"
+ 0: 1
+ $ val=`expr 'a' : 'b'`; echo "$?: $val"
+ 1: 0
+
+ $ val=`expr 'a' : '\(a\)'`; echo "?: $val"
+ 1: a
+ $ val=`expr 'a' : '\(b\)'`; echo "?: $val"
+ 1: 0
+
+ In practice this can be a big problem if you are ready to catch
+ failures of `expr' programs with some other method (such as using
+ `sed'), since you may get twice the result. For instance
+
+ $ expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'
+
+ outputs `a' on most hosts, but `aa' on QNX 4.25. A simple
+ workaround consists of testing `expr' and using a variable set to
+ `expr' or to `false' according to the result.
+
+ Tru64 `expr' incorrectly treats the result as a number, if it can
+ be interpreted that way:
+
+ $ expr 00001 : '.*\(...\)'
+ 1
+
+ On HP-UX 11, `expr' only supports a single sub-expression.
+
+ $ expr 'Xfoo' : 'X\(f\(oo\)*\)$'
+ expr: More than one '\(' was used.
+
+`fgrep'
+ Posix 1003.1-2001 no longer requires `fgrep', but many hosts do
+ not yet support the Posix replacement `grep -F'. Also, some
+ traditional implementations do not work on long input lines. To
+ work around these problems, invoke `AC_PROG_FGREP' and then use
+ `$FGREP'.
+
+ Tru64/OSF 5.1 `fgrep' does not match an empty pattern.
+
+`find'
+ The option `-maxdepth' seems to be GNU specific. Tru64 v5.1,
+ NetBSD 1.5 and Solaris `find' commands do not understand it.
+
+ The replacement of `{}' is guaranteed only if the argument is
+ exactly _{}_, not if it's only a part of an argument. For
+ instance on DU, and HP-UX 10.20 and HP-UX 11:
+
+ $ touch foo
+ $ find . -name foo -exec echo "{}-{}" \;
+ {}-{}
+
+ while GNU `find' reports `./foo-./foo'.
+
+`grep'
+ Portable scripts can rely on the `grep' options `-c', `-l', `-n',
+ and `-v', but should avoid other options. For example, don't use
+ `-w', as Posix does not require it and Irix 6.5.16m's `grep' does
+ not support it. Also, portable scripts should not combine `-c'
+ with `-l', as Posix does not allow this.
+
+ Some of the options required by Posix are not portable in practice.
+ Don't use `grep -q' to suppress output, because many `grep'
+ implementations (e.g., Solaris) do not support `-q'. Don't use
+ `grep -s' to suppress output either, because Posix says `-s' does
+ not suppress output, only some error messages; also, the `-s'
+ option of traditional `grep' behaved like `-q' does in most modern
+ implementations. Instead, redirect the standard output and
+ standard error (in case the file doesn't exist) of `grep' to
+ `/dev/null'. Check the exit status of `grep' to determine whether
+ it found a match.
+
+ The QNX4 implementation fails to count lines with `grep -c '$'',
+ but works with `grep -c '^''. Other alternatives for counting
+ lines are to use `sed -n '$='' or `wc -l'.
+
+ Some traditional `grep' implementations do not work on long input
+ lines. On AIX the default `grep' silently truncates long lines on
+ the input before matching.
+
+ Also, many implementations do not support multiple regexps with
+ `-e': they either reject `-e' entirely (e.g., Solaris) or honor
+ only the last pattern (e.g., IRIX 6.5 and NeXT). To work around
+ these problems, invoke `AC_PROG_GREP' and then use `$GREP'.
+
+ Another possible workaround for the multiple `-e' problem is to
+ separate the patterns by newlines, for example:
+
+ grep 'foo
+ bar' in.txt
+
+ except that this fails with traditional `grep' implementations and
+ with OpenBSD 3.8 `grep'.
+
+ Traditional `grep' implementations (e.g., Solaris) do not support
+ the `-E' or `-F' options. To work around these problems, invoke
+ `AC_PROG_EGREP' and then use `$EGREP', and similarly for
+ `AC_PROG_FGREP' and `$FGREP'. Even if you are willing to require
+ support for Posix `grep', your script should not use both `-E' and
+ `-F', since Posix does not allow this combination.
+
+ Portable `grep' regular expressions should use `\' only to escape
+ characters in the string `$()*.0123456789[\^{}'. For example,
+ alternation, `\|', is common but Posix does not require its
+ support in basic regular expressions, so it should be avoided in
+ portable scripts. Solaris and HP-UX `grep' do not support it.
+ Similarly, the following escape sequences should also be avoided:
+ `\<', `\>', `\+', `\?', `\`', `\'', `\B', `\b', `\S', `\s', `\W',
+ and `\w'.
+
+ Posix does not specify the behavior of `grep' on binary files. An
+ example where this matters is using BSD `grep' to search text that
+ includes embedded ANSI escape sequences for colored output to
+ terminals (`\033[m' is the sequence to restore normal output); the
+ behavior depends on whether input is seekable:
+
+ $ printf 'esc\033[mape\n' > sample
+ $ grep . sample
+ Binary file sample matches
+ $ cat sample | grep .
+ escape
+
+`join'
+ Solaris 8 `join' has bugs when the second operand is standard
+ input, and when standard input is a pipe. For example, the
+ following shell script causes Solaris 8 `join' to loop forever:
+
+ cat >file <<'EOF'
+ 1 x
+ 2 y
+ EOF
+ cat file | join file -
+
+ Use `join - file' instead.
+
+ On NetBSD, `join -a 1 file1 file2' mistakenly behaves like `join
+ -a 1 -a 2 1 file1 file2', resulting in a usage warning; the
+ workaround is to use `join -a1 file1 file2' instead.
+
+`ln'
+ Don't rely on `ln' having a `-f' option. Symbolic links are not
+ available on old systems; use `$(LN_S)' as a portable substitute.
+
+ For versions of the DJGPP before 2.04, `ln' emulates symbolic links
+ to executables by generating a stub that in turn calls the real
+ program. This feature also works with nonexistent files like in
+ the Posix spec. So `ln -s file link' generates `link.exe', which
+ attempts to call `file.exe' if run. But this feature only works
+ for executables, so `cp -p' is used instead for these systems.
+ DJGPP versions 2.04 and later have full support for symbolic links.
+
+`ls'
+ The portable options are `-acdilrtu'. Current practice is for
+ `-l' to output both owner and group, even though ancient versions
+ of `ls' omitted the group.
+
+ On ancient hosts, `ls foo' sent the diagnostic `foo not found' to
+ standard output if `foo' did not exist. Hence a shell command
+ like `sources=`ls *.c 2>/dev/null`' did not always work, since it
+ was equivalent to `sources='*.c not found'' in the absence of `.c'
+ files. This is no longer a practical problem, since current `ls'
+ implementations send diagnostics to standard error.
+
+ The behavior of `ls' on a directory that is being concurrently
+ modified is not always predictable, because of a data race where
+ cached information returned by `readdir' does not match the current
+ directory state. In fact, MacOS 10.5 has an intermittent bug where
+ `readdir', and thus `ls', sometimes lists a file more than once if
+ other files were added or removed from the directory immediately
+ prior to the `ls' call. Since `ls' already sorts its output, the
+ duplicate entries can be avoided by piping the results through
+ `uniq'.
+
+`mkdir'
+ No `mkdir' option is portable to older systems. Instead of `mkdir
+ -p FILE-NAME', you should use `AS_MKDIR_P(FILE-NAME)' (*note
+ Programming in M4sh::) or `AC_PROG_MKDIR_P' (*note Particular
+ Programs::).
+
+ Combining the `-m' and `-p' options, as in `mkdir -m go-w -p DIR',
+ often leads to trouble. FreeBSD `mkdir' incorrectly attempts to
+ change the permissions of DIR even if it already exists. HP-UX
+ 11.23 and IRIX 6.5 `mkdir' often assign the wrong permissions to
+ any newly-created parents of DIR.
+
+ Posix does not clearly specify whether `mkdir -p foo' should
+ succeed when `foo' is a symbolic link to an already-existing
+ directory. The GNU Core Utilities 5.1.0 `mkdir' succeeds, but
+ Solaris `mkdir' fails.
+
+ Traditional `mkdir -p' implementations suffer from race conditions.
+ For example, if you invoke `mkdir -p a/b' and `mkdir -p a/c' at
+ the same time, both processes might detect that `a' is missing,
+ one might create `a', then the other might try to create `a' and
+ fail with a `File exists' diagnostic. The GNU Core Utilities
+ (`fileutils' version 4.1), FreeBSD 5.0, NetBSD 2.0.2, and OpenBSD
+ 2.4 are known to be race-free when two processes invoke `mkdir -p'
+ simultaneously, but earlier versions are vulnerable. Solaris
+ `mkdir' is still vulnerable as of Solaris 10, and other
+ traditional Unix systems are probably vulnerable too. This
+ possible race is harmful in parallel builds when several Make
+ rules call `mkdir -p' to construct directories. You may use
+ `install-sh -d' as a safe replacement, provided this script is
+ recent enough; the copy shipped with Autoconf 2.60 and Automake
+ 1.10 is OK, but copies from older versions are vulnerable.
+
+`mkfifo'
+`mknod'
+ The GNU Coding Standards state that `mknod' is safe to use on
+ platforms where it has been tested to exist; but it is generally
+ portable only for creating named FIFOs, since device numbers are
+ platform-specific. Autotest uses `mkfifo' to implement parallel
+ testsuites. Posix states that behavior is unspecified when
+ opening a named FIFO for both reading and writing; on at least
+ Cygwin, this results in failure on any attempt to read or write to
+ that file descriptor.
+
+`mktemp'
+ Shell scripts can use temporary files safely with `mktemp', but it
+ does not exist on all systems. A portable way to create a safe
+ temporary file name is to create a temporary directory with mode
+ 700 and use a file inside this directory. Both methods prevent
+ attackers from gaining control, though `mktemp' is far less likely
+ to fail gratuitously under attack.
+
+ Here is sample code to create a new temporary directory `$dir'
+ safely:
+
+ # Create a temporary directory $dir in $TMPDIR (default /tmp).
+ # Use mktemp if possible; otherwise fall back on mkdir,
+ # with $RANDOM to make collisions less likely.
+ : "${TMPDIR:=/tmp}"
+ {
+ dir=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -d "$dir"
+ } || {
+ dir=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$dir")
+ } || exit $?
+
+`mv'
+ The only portable options are `-f' and `-i'.
+
+ Moving individual files between file systems is portable (it was
+ in Unix version 6), but it is not always atomic: when doing `mv
+ new existing', there's a critical section where neither the old
+ nor the new version of `existing' actually exists.
+
+ On some systems moving files from `/tmp' can sometimes cause
+ undesirable (but perfectly valid) warnings, even if you created
+ these files. This is because `/tmp' belongs to a group that
+ ordinary users are not members of, and files created in `/tmp'
+ inherit the group of `/tmp'. When the file is copied, `mv' issues
+ a diagnostic without failing:
+
+ $ touch /tmp/foo
+ $ mv /tmp/foo .
+ error-->mv: ./foo: set owner/group (was: 100/0): Operation not permitted
+ $ echo $?
+ 0
+ $ ls foo
+ foo
+
+ This annoying behavior conforms to Posix, unfortunately.
+
+ Moving directories across mount points is not portable, use `cp'
+ and `rm'.
+
+ DOS variants cannot rename or remove open files, and do not
+ support commands like `mv foo bar >foo', even though this is
+ perfectly portable among Posix hosts.
+
+`od'
+ In Mac OS X 10.3, `od' does not support the standard Posix options
+ `-A', `-j', `-N', or `-t', or the XSI option `-s'. The only
+ supported Posix option is `-v', and the only supported XSI options
+ are those in `-bcdox'. The BSD `hexdump' program can be used
+ instead.
+
+ This problem no longer exists in Mac OS X 10.4.3.
+
+`rm'
+ The `-f' and `-r' options are portable.
+
+ It is not portable to invoke `rm' without options or operands. On
+ the other hand, Posix now requires `rm -f' to silently succeed
+ when there are no operands (useful for constructs like `rm -rf
+ $filelist' without first checking if `$filelist' was empty). But
+ this was not always portable; at least NetBSD `rm' built before
+ 2008 would fail with a diagnostic.
+
+ A file might not be removed even if its parent directory is
+ writable and searchable. Many Posix hosts cannot remove a mount
+ point, a named stream, a working directory, or a last link to a
+ file that is being executed.
+
+ DOS variants cannot rename or remove open files, and do not
+ support commands like `rm foo >foo', even though this is perfectly
+ portable among Posix hosts.
+
+`rmdir'
+ Just as with `rm', some platforms refuse to remove a working
+ directory.
+
+`sed'
+ Patterns should not include the separator (unless escaped), even
+ as part of a character class. In conformance with Posix, the Cray
+ `sed' rejects `s/[^/]*$//': use `s%[^/]*$%%'. Even when escaped,
+ patterns should not include separators that are also used as `sed'
+ metacharacters. For example, GNU sed 4.0.9 rejects
+ `s,x\{1\,\},,', while sed 4.1 strips the backslash before the comma
+ before evaluating the basic regular expression.
+
+ Avoid empty patterns within parentheses (i.e., `\(\)'). Posix does
+ not require support for empty patterns, and Unicos 9 `sed' rejects
+ them.
+
+ Unicos 9 `sed' loops endlessly on patterns like `.*\n.*'.
+
+ Sed scripts should not use branch labels longer than 7 characters
+ and should not contain comments; AIX 5.3 `sed' rejects indented
+ comments. HP-UX sed has a limit of 99 commands (not counting `:'
+ commands) and 48 labels, which cannot be circumvented by using
+ more than one script file. It can execute up to 19 reads with the
+ `r' command per cycle. Solaris `/usr/ucb/sed' rejects usages that
+ exceed a limit of about 6000 bytes for the internal representation
+ of commands.
+
+ Avoid redundant `;', as some `sed' implementations, such as NetBSD
+ 1.4.2's, incorrectly try to interpret the second `;' as a command:
+
+ $ echo a | sed 's/x/x/;;s/x/x/'
+ sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
+
+ Some `sed' implementations have a buffer limited to 4000 bytes,
+ and this limits the size of input lines, output lines, and internal
+ buffers that can be processed portably. Likewise, not all `sed'
+ implementations can handle embedded `NUL' or a missing trailing
+ newline.
+
+ Remember that ranges within a bracket expression of a regular
+ expression are only well-defined in the `C' (or `POSIX') locale.
+ Meanwhile, support for character classes like `[[:upper:]]' is not
+ yet universal, so if you cannot guarantee the setting of `LC_ALL',
+ it is better to spell out a range `[ABCDEFGHIJKLMNOPQRSTUVWXYZ]'
+ than to rely on `[A-Z]'.
+
+ Additionally, Posix states that regular expressions are only
+ well-defined on characters. Unfortunately, there exist platforms
+ such as MacOS X 10.5 where not all 8-bit byte values are valid
+ characters, even though that platform has a single-byte `C'
+ locale. And Posix allows the existence of a multi-byte `C'
+ locale, although that does not yet appear to be a common
+ implementation. At any rate, it means that not all bytes will be
+ matched by the regular expression `.':
+
+ $ printf '\200\n' | LC_ALL=C sed -n /./p | wc -l
+ 0
+ $ printf '\200\n' | LC_ALL=en_US.ISO8859-1 sed -n /./p | wc -l
+ 1
+
+ Portable `sed' regular expressions should use `\' only to escape
+ characters in the string `$()*.0123456789[\^n{}'. For example,
+ alternation, `\|', is common but Posix does not require its
+ support, so it should be avoided in portable scripts. Solaris
+ `sed' does not support alternation; e.g., `sed '/a\|b/d'' deletes
+ only lines that contain the literal string `a|b'. Similarly, `\+'
+ and `\?' should be avoided.
+
+ Anchors (`^' and `$') inside groups are not portable.
+
+ Nested parentheses in patterns (e.g., `\(\(a*\)b*)\)') are quite
+ portable to current hosts, but was not supported by some ancient
+ `sed' implementations like SVR3.
+
+ Some `sed' implementations, e.g., Solaris, restrict the special
+ role of the asterisk `*' to one-character regular expressions and
+ back-references, and the special role of interval expressions
+ `\{M\}', `\{M,\}', or `\{M,N\}' to one-character regular
+ expressions. This may lead to unexpected behavior:
+
+ $ echo '1*23*4' | /usr/bin/sed 's/\(.\)*/x/g'
+ x2x4
+ $ echo '1*23*4' | /usr/xpg4/bin/sed 's/\(.\)*/x/g'
+ x
+
+ The `-e' option is mostly portable. However, its argument cannot
+ start with `a', `c', or `i', as this runs afoul of a Tru64 5.1 bug.
+ Also, its argument cannot be empty, as this fails on AIX 5.3.
+ Some people prefer to use `-e':
+
+ sed -e 'COMMAND-1' \
+ -e 'COMMAND-2'
+
+ as opposed to the equivalent:
+
+ sed '
+ COMMAND-1
+ COMMAND-2
+ '
+
+ The following usage is sometimes equivalent:
+
+ sed 'COMMAND-1;COMMAND-2'
+
+ but Posix says that this use of a semicolon has undefined effect if
+ COMMAND-1's verb is `{', `a', `b', `c', `i', `r', `t', `w', `:',
+ or `#', so you should use semicolon only with simple scripts that
+ do not use these verbs.
+
+ Posix up to the 2008 revision requires the argument of the `-e'
+ option to be a syntactically complete script. GNU `sed' allows to
+ pass multiple script fragments, each as argument of a separate
+ `-e' option, that are then combined, with newlines between the
+ fragments, and a future Posix revision may allow this as well.
+ This approach is not portable with script fragments ending in
+ backslash; for example, the `sed' programs on Solaris 10, HP-UX
+ 11, and AIX don't allow splitting in this case:
+
+ $ echo a | sed -n -e 'i\
+ 0'
+ 0
+ $ echo a | sed -n -e 'i\' -e 0
+ Unrecognized command: 0
+
+ In practice, however, this technique of joining fragments through
+ `-e' works for multiple `sed' functions within `{' and `}', even
+ if that is not specified by Posix:
+
+ $ echo a | sed -n -e '/a/{' -e s/a/b/ -e p -e '}'
+ b
+
+ Commands inside { } brackets are further restricted. Posix 2008
+ says that they cannot be preceded by addresses, `!', or `;', and
+ that each command must be followed immediately by a newline,
+ without any intervening blanks or semicolons. The closing bracket
+ must be alone on a line, other than white space preceding or
+ following it. However, a future version of Posix may standardize
+ the use of addresses within brackets.
+
+ Contrary to yet another urban legend, you may portably use `&' in
+ the replacement part of the `s' command to mean "what was
+ matched". All descendants of Unix version 7 `sed' (at least; we
+ don't have first hand experience with older `sed' implementations)
+ have supported it.
+
+ Posix requires that you must not have any white space between `!'
+ and the following command. It is OK to have blanks between the
+ address and the `!'. For instance, on Solaris:
+
+ $ echo "foo" | sed -n '/bar/ ! p'
+ error-->Unrecognized command: /bar/ ! p
+ $ echo "foo" | sed -n '/bar/! p'
+ error-->Unrecognized command: /bar/! p
+ $ echo "foo" | sed -n '/bar/ !p'
+ foo
+
+ Posix also says that you should not combine `!' and `;'. If you
+ use `!', it is best to put it on a command that is delimited by
+ newlines rather than `;'.
+
+ Also note that Posix requires that the `b', `t', `r', and `w'
+ commands be followed by exactly one space before their argument.
+ On the other hand, no white space is allowed between `:' and the
+ subsequent label name.
+
+ If a sed script is specified on the command line and ends in an
+ `a', `c', or `i' command, the last line of inserted text should be
+ followed by a newline. Otherwise some `sed' implementations
+ (e.g., OpenBSD 3.9) do not append a newline to the inserted text.
+
+ Many `sed' implementations (e.g., MacOS X 10.4, OpenBSD 3.9,
+ Solaris 10 `/usr/ucb/sed') strip leading white space from the text
+ of `a', `c', and `i' commands. Prepend a backslash to work around
+ this incompatibility with Posix:
+
+ $ echo flushleft | sed 'a\
+ > indented
+ > '
+ flushleft
+ indented
+ $ echo foo | sed 'a\
+ > \ indented
+ > '
+ flushleft
+ indented
+
+ Posix requires that with an empty regular expression, the last
+ non-empty regular expression from either an address specification
+ or substitution command is applied. However, busybox 1.6.1
+ complains when using a substitution command with a replacement
+ containing a back-reference to an empty regular expression; the
+ workaround is repeating the regular expression.
+
+ $ echo abc | busybox sed '/a\(b\)c/ s//\1/'
+ sed: No previous regexp.
+ $ echo abc | busybox sed '/a\(b\)c/ s/a\(b\)c/\1/'
+ b
+
+`sed' (`t')
+ Some old systems have `sed' that "forget" to reset their `t' flag
+ when starting a new cycle. For instance on MIPS RISC/OS, and on
+ IRIX 5.3, if you run the following `sed' script (the line numbers
+ are not actual part of the texts):
+
+ s/keep me/kept/g # a
+ t end # b
+ s/.*/deleted/g # c
+ :end # d
+
+ on
+
+ delete me # 1
+ delete me # 2
+ keep me # 3
+ delete me # 4
+
+ you get
+
+ deleted
+ delete me
+ kept
+ deleted
+
+ instead of
+
+ deleted
+ deleted
+ kept
+ deleted
+
+ Why? When processing line 1, (c) matches, therefore sets the `t'
+ flag, and the output is produced. When processing line 2, the `t'
+ flag is still set (this is the bug). Command (a) fails to match,
+ but `sed' is not supposed to clear the `t' flag when a
+ substitution fails. Command (b) sees that the flag is set,
+ therefore it clears it, and jumps to (d), hence you get `delete me'
+ instead of `deleted'. When processing line (3), `t' is clear, (a)
+ matches, so the flag is set, hence (b) clears the flags and jumps.
+ Finally, since the flag is clear, line 4 is processed properly.
+
+ There are two things one should remember about `t' in `sed'.
+ Firstly, always remember that `t' jumps if _some_ substitution
+ succeeded, not only the immediately preceding substitution.
+ Therefore, always use a fake `t clear' followed by a `:clear' on
+ the next line, to reset the `t' flag where needed.
+
+ Secondly, you cannot rely on `sed' to clear the flag at each new
+ cycle.
+
+ One portable implementation of the script above is:
+
+ t clear
+ :clear
+ s/keep me/kept/g
+ t end
+ s/.*/deleted/g
+ :end
+
+`sleep'
+ Using `sleep' is generally portable. However, remember that
+ adding a `sleep' to work around timestamp issues, with a minimum
+ granularity of one second, doesn't scale well for parallel builds
+ on modern machines with sub-second process completion.
+
+`sort'
+ Remember that sort order is influenced by the current locale.
+ Inside `configure', the C locale is in effect, but in Makefile
+ snippets, you may need to specify `LC_ALL=C sort'.
+
+`tar'
+ There are multiple file formats for `tar'; if you use Automake,
+ the macro `AM_INIT_AUTOMAKE' has some options controlling which
+ level of portability to use.
+
+`touch'
+ If you specify the desired timestamp (e.g., with the `-r' option),
+ older `touch' implementations use the `utime' or `utimes' system
+ call, which can result in the same kind of timestamp truncation
+ problems that `cp -p' has.
+
+ On ancient BSD systems, `touch' or any command that results in an
+ empty file does not update the timestamps, so use a command like
+ `echo' as a workaround. Also, GNU `touch' 3.16r (and presumably
+ all before that) fails to work on SunOS 4.1.3 when the empty file
+ is on an NFS-mounted 4.2 volume. However, these problems are no
+ longer of practical concern.
+
+`tr'
+ Not all versions of `tr' handle all backslash character escapes.
+ For example, Solaris 10 `/usr/ucb/tr' falls over, even though
+ Solaris contains more modern `tr' in other locations. Using octal
+ escapes is more portable for carriage returns, since `\015' is the
+ same for both ASCII and EBCDIC, and since use of literal carriage
+ returns in scripts causes a number of other problems. But for
+ other characters, like newline, using octal escapes ties the
+ operation to ASCII, so it is better to use literal characters.
+
+ $ { echo moon; echo light; } | /usr/ucb/tr -d '\n' ; echo
+ moo
+ light
+ $ { echo moon; echo light; } | /usr/bin/tr -d '\n' ; echo
+ moonlight
+ $ { echo moon; echo light; } | /usr/ucb/tr -d '\012' ; echo
+ moonlight
+ $ nl='
+ '; { echo moon; echo light; } | /usr/ucb/tr -d "$nl" ; echo
+ moonlight
+
+ Not all versions of `tr' recognize direct ranges of characters: at
+ least Solaris `/usr/bin/tr' still fails to do so. But you can use
+ `/usr/xpg4/bin/tr' instead, or add brackets (which in Posix
+ transliterate to themselves).
+
+ $ echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr a-z A-Z
+ HAZy FAntAZy
+ $ echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr '[a-z]' '[A-Z]'
+ HAZY FANTAZY
+ $ echo "Hazy Fantazy" | LC_ALL=C /usr/xpg4/bin/tr a-z A-Z
+ HAZY FANTAZY
+
+ When providing two arguments, be sure the second string is at
+ least as long as the first.
+
+ $ echo abc | /usr/xpg4/bin/tr bc d
+ adc
+ $ echo abc | coreutils/tr bc d
+ add
+
+ Posix requires `tr' to operate on binary files. But at least
+ Solaris `/usr/ucb/tr' and `/usr/bin/tr' silently discard `NUL' in
+ the input prior to doing any translation. When using `tr' to
+ process a binary file that may contain `NUL' bytes, it is
+ necessary to use `/usr/xpg4/bin/tr' instead, or `/usr/xpg6/bin/tr'
+ if that is available.
+
+ $ printf 'a\0b' | /usr/ucb/tr x x | od -An -tx1
+ 61 62
+ $ printf 'a\0b' | /usr/bin/tr x x | od -An -tx1
+ 61 62
+ $ printf 'a\0b' | /usr/xpg4/bin/tr x x | od -An -tx1
+ 61 00 62
+
+ Solaris `/usr/ucb/tr' additionally fails to handle `\0' as the
+ octal escape for `NUL'.
+
+ $ printf 'abc' | /usr/ucb/tr 'bc' '\0d' | od -An -tx1
+ 61 62 63
+ $ printf 'abc' | /usr/bin/tr 'bc' '\0d' | od -An -tx1
+ 61 00 64
+ $ printf 'abc' | /usr/xpg4/bin/tr 'bc' '\0d' | od -An -tx1
+ 61 00 64
+
+
+
+File: autoconf.info, Node: Portable Make, Next: Portable C and C++, Prev: Portable Shell, Up: Top
+
+12 Portable Make Programming
+****************************
+
+Writing portable makefiles is an art. Since a makefile's commands are
+executed by the shell, you must consider the shell portability issues
+already mentioned. However, other issues are specific to `make' itself.
+
+* Menu:
+
+* $< in Ordinary Make Rules:: $< in ordinary rules
+* Failure in Make Rules:: Failing portably in rules
+* Special Chars in Names:: Special Characters in Macro Names
+* Backslash-Newline-Empty:: Empty lines after backslash-newline
+* Backslash-Newline Comments:: Spanning comments across line boundaries
+* Long Lines in Makefiles:: Line length limitations
+* Macros and Submakes:: `make macro=value' and submakes
+* The Make Macro MAKEFLAGS:: `$(MAKEFLAGS)' portability issues
+* The Make Macro SHELL:: `$(SHELL)' portability issues
+* Parallel Make:: Parallel `make' quirks
+* Comments in Make Rules:: Other problems with Make comments
+* Newlines in Make Rules:: Using literal newlines in rules
+* Comments in Make Macros:: Other problems with Make comments in macros
+* Trailing whitespace in Make Macros:: Macro substitution problems
+* Command-line Macros and whitespace:: Whitespace trimming of values
+* obj/ and Make:: Don't name a subdirectory `obj'
+* make -k Status:: Exit status of `make -k'
+* VPATH and Make:: `VPATH' woes
+* Single Suffix Rules:: Single suffix rules and separated dependencies
+* Timestamps and Make:: Subsecond timestamp resolution
+
+
+File: autoconf.info, Node: $< in Ordinary Make Rules, Next: Failure in Make Rules, Up: Portable Make
+
+12.1 `$<' in Ordinary Make Rules
+================================
+
+Posix says that the `$<' construct in makefiles can be used only in
+inference rules and in the `.DEFAULT' rule; its meaning in ordinary
+rules is unspecified. Solaris `make' for instance replaces it with the
+empty string. OpenBSD (3.0 and later) `make' diagnoses these uses and
+errors out.
+
+
+File: autoconf.info, Node: Failure in Make Rules, Next: Special Chars in Names, Prev: $< in Ordinary Make Rules, Up: Portable Make
+
+12.2 Failure in Make Rules
+==========================
+
+Posix 2008 requires that `make' must invoke each command with the
+equivalent of a `sh -e -c' subshell, which causes the subshell to exit
+immediately if a subsidiary simple-command fails, although not all
+`make' implementations have historically followed this rule. For
+example, the command `touch T; rm -f U' may attempt to remove `U' even
+if the `touch' fails, although this is not permitted with Posix make.
+One way to work around failures in simple commands is to reword them so
+that they always succeed, e.g., `touch T || :; rm -f U'. However, even
+this approach can run into common bugs in BSD implementations of the
+`-e' option of `sh' and `set' (*note Limitations of Shell Builtins:
+set.), so if you are worried about porting to buggy BSD shells it may
+be simpler to migrate complicated `make' actions into separate scripts.
+
+
+File: autoconf.info, Node: Special Chars in Names, Next: Backslash-Newline-Empty, Prev: Failure in Make Rules, Up: Portable Make
+
+12.3 Special Characters in Make Macro Names
+===========================================
+
+Posix limits macro names to nonempty strings containing only ASCII
+letters and digits, `.', and `_'. Many `make' implementations allow a
+wider variety of characters, but portable makefiles should avoid them.
+It is portable to start a name with a special character, e.g.,
+`$(.FOO)'.
+
+ Some ancient `make' implementations don't support leading
+underscores in macro names. An example is NEWS-OS 4.2R.
+
+ $ cat Makefile
+ _am_include = #
+ _am_quote =
+ all:; @echo this is test
+ $ make
+ Make: Must be a separator on rules line 2. Stop.
+ $ cat Makefile2
+ am_include = #
+ am_quote =
+ all:; @echo this is test
+ $ make -f Makefile2
+ this is test
+
+However, this problem is no longer of practical concern.
+
+
+File: autoconf.info, Node: Backslash-Newline-Empty, Next: Backslash-Newline Comments, Prev: Special Chars in Names, Up: Portable Make
+
+12.4 Backslash-Newline Before Empty Lines
+=========================================
+
+A bug in Bash 2.03 can cause problems if a Make rule contains a
+backslash-newline followed by line that expands to nothing. For
+example, on Solaris 8:
+
+ SHELL = /bin/bash
+ EMPTY =
+ foo:
+ touch foo \
+ $(EMPTY)
+
+executes
+
+ /bin/bash -c 'touch foo \
+ '
+
+which fails with a syntax error, due to the Bash bug. To avoid this
+problem, avoid nullable macros in the last line of a multiline command.
+
+ On some versions of HP-UX, `make' reads multiple newlines following
+a backslash, continuing to the next non-empty line. For example,
+
+ FOO = one \
+
+ BAR = two
+
+ test:
+ : FOO is "$(FOO)"
+ : BAR is "$(BAR)"
+
+shows `FOO' equal to `one BAR = two'. Other implementations sensibly
+let a backslash continue only to the immediately following line.
+
+
+File: autoconf.info, Node: Backslash-Newline Comments, Next: Long Lines in Makefiles, Prev: Backslash-Newline-Empty, Up: Portable Make
+
+12.5 Backslash-Newline in Make Comments
+=======================================
+
+According to Posix, Make comments start with `#' and continue until an
+unescaped newline is reached.
+
+ $ cat Makefile
+ # A = foo \
+ bar \
+ baz
+
+ all:
+ @echo ok
+ $ make # GNU make
+ ok
+
+However this is not always the case. Some implementations discard
+everything from `#' through the end of the line, ignoring any trailing
+backslash.
+
+ $ pmake # BSD make
+ "Makefile", line 3: Need an operator
+ Fatal errors encountered -- cannot continue
+
+Therefore, if you want to comment out a multi-line definition, prefix
+each line with `#', not only the first.
+
+ # A = foo \
+ # bar \
+ # baz
+
+
+File: autoconf.info, Node: Long Lines in Makefiles, Next: Macros and Submakes, Prev: Backslash-Newline Comments, Up: Portable Make
+
+12.6 Long Lines in Makefiles
+============================
+
+Tru64 5.1's `make' has been reported to crash when given a makefile
+with lines longer than around 20 kB. Earlier versions are reported to
+exit with `Line too long' diagnostics.
+
+
+File: autoconf.info, Node: Macros and Submakes, Next: The Make Macro MAKEFLAGS, Prev: Long Lines in Makefiles, Up: Portable Make
+
+12.7 `make macro=value' and Submakes
+====================================
+
+A command-line variable definition such as `foo=bar' overrides any
+definition of `foo' in a makefile. Some `make' implementations (such
+as GNU `make') propagate this override to subsidiary invocations of
+`make'. Some other implementations do not pass the substitution along
+to submakes.
+
+ $ cat Makefile
+ foo = foo
+ one:
+ @echo $(foo)
+ $(MAKE) two
+ two:
+ @echo $(foo)
+ $ make foo=bar # GNU make 3.79.1
+ bar
+ make two
+ make[1]: Entering directory `/home/adl'
+ bar
+ make[1]: Leaving directory `/home/adl'
+ $ pmake foo=bar # BSD make
+ bar
+ pmake two
+ foo
+
+ You have a few possibilities if you do want the `foo=bar' override
+to propagate to submakes. One is to use the `-e' option, which causes
+all environment variables to have precedence over the makefile macro
+definitions, and declare foo as an environment variable:
+
+ $ env foo=bar make -e
+
+ The `-e' option is propagated to submakes automatically, and since
+the environment is inherited between `make' invocations, the `foo'
+macro is overridden in submakes as expected.
+
+ This syntax (`foo=bar make -e') is portable only when used outside
+of a makefile, for instance from a script or from the command line.
+When run inside a `make' rule, GNU `make' 3.80 and prior versions
+forget to propagate the `-e' option to submakes.
+
+ Moreover, using `-e' could have unexpected side effects if your
+environment contains some other macros usually defined by the makefile.
+(See also the note about `make -e' and `SHELL' below.)
+
+ If you can foresee all macros that a user might want to override,
+then you can propagate them to submakes manually, from your makefile:
+
+ foo = foo
+ one:
+ @echo $(foo)
+ $(MAKE) foo=$(foo) two
+ two:
+ @echo $(foo)
+
+ Another way to propagate a variable to submakes in a portable way is
+to expand an extra variable in every invocation of `$(MAKE)' within
+your makefile:
+
+ foo = foo
+ one:
+ @echo $(foo)
+ $(MAKE) $(SUBMAKEFLAGS) two
+ two:
+ @echo $(foo)
+
+ Users must be aware that this technique is in use to take advantage
+of it, e.g. with `make foo=bar SUBMAKEFLAGS='foo=bar'', but it allows
+any macro to be overridden. Makefiles generated by `automake' use this
+technique, expanding `$(AM_MAKEFLAGS)' on the command lines of submakes
+(*note Automake: (automake)Subdirectories.).
+
+
+File: autoconf.info, Node: The Make Macro MAKEFLAGS, Next: The Make Macro SHELL, Prev: Macros and Submakes, Up: Portable Make
+
+12.8 The Make Macro MAKEFLAGS
+=============================
+
+Posix requires `make' to use `MAKEFLAGS' to affect the current and
+recursive invocations of make, but allows implementations several
+formats for the variable. It is tricky to parse `$MAKEFLAGS' to
+determine whether `-s' for silent execution or `-k' for continued
+execution are in effect. For example, you cannot assume that the first
+space-separated word in `$MAKEFLAGS' contains single-letter options,
+since in the Cygwin version of GNU `make' it is either `--unix' or
+`--win32' with the second word containing single-letter options.
+
+ $ cat Makefile
+ all:
+ @echo MAKEFLAGS = $(MAKEFLAGS)
+ $ make
+ MAKEFLAGS = --unix
+ $ make -k
+ MAKEFLAGS = --unix -k
+
+
+File: autoconf.info, Node: The Make Macro SHELL, Next: Parallel Make, Prev: The Make Macro MAKEFLAGS, Up: Portable Make
+
+12.9 The Make Macro `SHELL'
+===========================
+
+Posix-compliant `make' internally uses the `$(SHELL)' macro to spawn
+shell processes and execute Make rules. This is a builtin macro
+supplied by `make', but it can be modified by a makefile or by a
+command-line argument.
+
+ Not all `make' implementations define this `SHELL' macro. Tru64
+`make' is an example; this implementation always uses `/bin/sh'. So
+it's a good idea to always define `SHELL' in your makefiles. If you
+use Autoconf, do
+
+ SHELL = @SHELL@
+
+If you use Automake, this is done for you.
+
+ Do not force `SHELL = /bin/sh' because that is not correct
+everywhere. Remember, `/bin/sh' is not Posix compliant on many
+systems, such as FreeBSD 4, NetBSD 3, AIX 3, Solaris 10, or Tru64.
+Additionally, DJGPP lacks `/bin/sh', and when its GNU `make' port sees
+such a setting it enters a special emulation mode where features like
+pipes and redirections are emulated on top of DOS's `command.com'.
+Unfortunately this emulation is incomplete; for instance it does not
+handle command substitutions. Using `@SHELL@' means that your makefile
+will benefit from the same improved shell, such as `bash' or `ksh',
+that was discovered during `configure', so that you aren't fighting two
+different sets of shell bugs between the two contexts.
+
+ Posix-compliant `make' should never acquire the value of $(SHELL)
+from the environment, even when `make -e' is used (otherwise, think
+about what would happen to your rules if `SHELL=/bin/tcsh').
+
+ However not all `make' implementations have this exception. For
+instance it's not surprising that Tru64 `make' doesn't protect `SHELL',
+since it doesn't use it.
+
+ $ cat Makefile
+ SHELL = /bin/sh
+ FOO = foo
+ all:
+ @echo $(SHELL)
+ @echo $(FOO)
+ $ env SHELL=/bin/tcsh FOO=bar make -e # Tru64 Make
+ /bin/tcsh
+ bar
+ $ env SHELL=/bin/tcsh FOO=bar gmake -e # GNU make
+ /bin/sh
+ bar
+
+ Conversely, `make' is not supposed to export any changes to the
+macro `SHELL' to child processes. Again, many implementations break
+this rule:
+
+ $ cat Makefile
+ all:
+ @echo $(SHELL)
+ @printenv SHELL
+ $ env SHELL=sh make -e SHELL=/bin/ksh # BSD Make, GNU make 3.80
+ /bin/ksh
+ /bin/ksh
+ $ env SHELL=sh gmake -e SHELL=/bin/ksh # GNU make 3.81
+ /bin/ksh
+ sh
+
+
+File: autoconf.info, Node: Parallel Make, Next: Comments in Make Rules, Prev: The Make Macro SHELL, Up: Portable Make
+
+12.10 Parallel Make
+===================
+
+Support for parallel execution in `make' implementation varies.
+Generally, using GNU make is your best bet.
+
+ When NetBSD or FreeBSD `make' are run in parallel mode, they will
+reuse the same shell for multiple commands within one recipe. This can
+have various unexpected consequences. For example, changes of
+directories or variables persist between recipes, so that:
+
+ all:
+ @var=value; cd /; pwd; echo $$var; echo $$$$
+ @pwd; echo $$var; echo $$$$
+
+may output the following with `make -j1', at least on NetBSD up to 5.1
+and FreeBSD up to 8.2:
+
+ /
+ value
+ 32235
+ /
+ value
+ 32235
+
+while without `-j1', or with `-B', the output looks less surprising:
+
+ /
+ value
+ 32238
+ /tmp
+
+ 32239
+
+Another consequence is that, if one command in a recipe uses `exit 0'
+to indicate a successful exit, the shell will be gone and the remaining
+commands of this recipe will not be executed.
+
+ The BSD `make' implementations, when run in parallel mode, will also
+pass the `Makefile' recipes to the shell through its standard input,
+thus making it unusable from the recipes:
+
+ $ cat Makefile
+ read:
+ @read line; echo LINE: $$line
+ $ echo foo | make read
+ LINE: foo
+ $ echo foo | make -j1 read # NetBSD 5.1 and FreeBSD 8.2
+ LINE:
+
+Moreover, when FreeBSD `make' (up at least to 8.2) is run in parallel
+mode, it implements the `@' and `-' "recipe modifiers" by dynamically
+modifying the active shell flags. This behavior has the effects of
+potentially clobbering the exit status of recipes silenced with the `@'
+modifier if they also unset the `errexit' shell flag, and of mangling
+the output in unexpected ways:
+
+ $ cat Makefile
+ a:
+ @echo $$-; set +e; false
+ b:
+ -echo $$-; false; echo set -
+ $ make a; echo status: $?
+ ehBc
+ *** Error code 1
+ status: 1
+ $ make -j1 a; echo status: $?
+ ehB
+ status: 0
+ $ make b
+ echo $-; echo set -
+ hBc
+ set -
+ $ make -j1 b
+ echo $-; echo hvB
+
+You can avoid all these issues by using the `-B' option to enable
+compatibility semantics. However, that will effectively also disable
+all parallelism as that will cause prerequisites to be updated in the
+order they are listed in a rule.
+
+ Some make implementations (among them, FreeBSD `make', NetBSD
+`make', and Solaris `dmake'), when invoked with a `-jN' option, connect
+the standard output and standard error of all their child processes to
+pipes or temporary regular files. This can lead to subtly different
+semantics in the behavior of the spawned processes. For example, even
+if the `make' standard output is connected to a tty, the recipe command
+will not be:
+
+ $ cat Makefile
+ all:
+ @test -t 1 && echo "Is a tty" || echo "Is not a tty"
+ $ make -j 2 # FreeBSD 8.2 make
+ Is not a tty
+ $ make -j 2 # NetBSD 5.1 make
+ --- all ---
+ Is not a tty
+ $ dmake -j 2 # Solaris 10 dmake
+ HOSTNAME --> 1 job
+ HOSTNAME --> Job output
+ Is not a tty
+
+On the other hand:
+
+ $ make -j 2 # GNU make, Heirloom make
+ Is a tty
+
+The above examples also show additional status output produced in
+parallel mode for targets being updated by Solaris `dmake' and NetBSD
+`make' (but _not_ by FreeBSD `make').
+
+ Furthermore, parallel runs of those `make' implementations will
+route standard error from commands that they spawn into their own
+standard output, and may remove leading whitespace from output lines.
+
+
+File: autoconf.info, Node: Comments in Make Rules, Next: Newlines in Make Rules, Prev: Parallel Make, Up: Portable Make
+
+12.11 Comments in Make Rules
+============================
+
+Never put comments in a rule.
+
+ Some `make' treat anything starting with a tab as a command for the
+current rule, even if the tab is immediately followed by a `#'. The
+`make' from Tru64 Unix V5.1 is one of them. The following makefile
+runs `# foo' through the shell.
+
+ all:
+ # foo
+
+ As a workaround, you can use the `:' no-op command with a string
+argument that gets ignored:
+
+ all:
+ : "foo"
+
+ Conversely, if you want to use the `#' character in some command,
+you can only do so by expanding it inside a rule (*note Comments in
+Make Macros::). So for example, if `COMMENT_CHAR' is substituted by
+`config.status' as `#', then the following substitutes `@COMMENT_CHAR@'
+in a generated header:
+
+ foo.h: foo.h.in
+ sed -e 's|@''COMMENT_CHAR''@|@COMMENT_CHAR@|g' \
+ $(srcdir)/foo.h.in > $@
+
+ The funny shell quoting avoids a substitution at `config.status' run
+time of the left-hand side of the `sed' `s' command.
+
+
+File: autoconf.info, Node: Newlines in Make Rules, Next: Comments in Make Macros, Prev: Comments in Make Rules, Up: Portable Make
+
+12.12 Newlines in Make Rules
+============================
+
+In shell scripts, newlines can be used inside string literals. But in
+the shell statements of `Makefile' rules, this is not possible: A
+newline not preceded by a backslash is a separator between shell
+statements. Whereas a newline that is preceded by a backslash becomes
+part of the shell statement according to POSIX, but gets replaced,
+together with the backslash that precedes it, by a space in GNU `make'
+3.80 and older. So, how can a newline be used in a string literal?
+
+ The trick is to set up a shell variable that contains a newline:
+
+ nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"
+
+ For example, in order to create a multiline `sed' expression that
+inserts a blank line after every line of a file, this code can be used:
+
+ nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \
+ sed -e "s/\$$/\\$${nl}/" < input > output
+
+
+File: autoconf.info, Node: Comments in Make Macros, Next: Trailing whitespace in Make Macros, Prev: Newlines in Make Rules, Up: Portable Make
+
+12.13 Comments in Make Macros
+=============================
+
+Avoid putting comments in macro values as far as possible. Posix
+specifies that the text starting from the `#' sign until the end of the
+line is to be ignored, which has the unfortunate effect of disallowing
+them even within quotes. Thus, the following might lead to a syntax
+error at compile time:
+
+ CPPFLAGS = "-DCOMMENT_CHAR='#'"
+
+as `CPPFLAGS' may be expanded to `"-DCOMMENT_CHAR=''.
+
+ Most `make' implementations disregard this and treat single and
+double quotes specially here. Also, GNU `make' lets you put `#' into a
+macro value by escaping it with a backslash, i.e., `\#'. However,
+neither of these usages are portable. *Note Comments in Make Rules::,
+for a portable alternative.
+
+ Even without quoting involved, comments can have surprising effects,
+because the whitespace before them is part of the variable value:
+
+ foo = bar # trailing comment
+ print: ; @echo "$(foo)."
+
+prints `bar .', which is usually not intended, and can expose `make'
+bugs as described below.
+
+
+File: autoconf.info, Node: Trailing whitespace in Make Macros, Next: Command-line Macros and whitespace, Prev: Comments in Make Macros, Up: Portable Make
+
+12.14 Trailing whitespace in Make Macros
+========================================
+
+GNU `make' 3.80 mistreats trailing whitespace in macro substitutions
+and appends another spurious suffix:
+
+ empty =
+ foo = bar $(empty)
+ print: ; @echo $(foo:=.test)
+
+prints `bar.test .test'.
+
+ BSD and Solaris `make' implementations do not honor trailing
+whitespace in macro definitions as Posix requires:
+
+ foo = bar # Note the space after "bar".
+ print: ; @echo $(foo)t
+
+prints `bart' instead of `bar t'. To work around this, you can use a
+helper macro as in the previous example.
+
+
+File: autoconf.info, Node: Command-line Macros and whitespace, Next: obj/ and Make, Prev: Trailing whitespace in Make Macros, Up: Portable Make
+
+12.15 Command-line Macros and whitespace
+========================================
+
+Some `make' implementations may strip trailing whitespace off of macros
+set on the command line in addition to leading whitespace. Further,
+some may strip leading whitespace off of macros set from environment
+variables:
+
+ $ echo 'print: ; @echo "x$(foo)x$(bar)x"' |
+ foo=' f f ' make -f - bar=' b b '
+ x f f xb b x # AIX, BSD, GNU make
+ xf f xb b x # HP-UX, IRIX, Tru64/OSF make
+ x f f xb bx # Solaris make
+
+
+File: autoconf.info, Node: obj/ and Make, Next: make -k Status, Prev: Command-line Macros and whitespace, Up: Portable Make
+
+12.16 The `obj/' Subdirectory and Make
+======================================
+
+Never name one of your subdirectories `obj/' if you don't like
+surprises.
+
+ If an `obj/' directory exists, BSD `make' enters it before reading
+the makefile. Hence the makefile in the current directory is not read.
+
+ $ cat Makefile
+ all:
+ echo Hello
+ $ cat obj/Makefile
+ all:
+ echo World
+ $ make # GNU make
+ echo Hello
+ Hello
+ $ pmake # BSD make
+ echo World
+ World
+
+
+File: autoconf.info, Node: make -k Status, Next: VPATH and Make, Prev: obj/ and Make, Up: Portable Make
+
+12.17 Exit Status of `make -k'
+==============================
+
+Do not rely on the exit status of `make -k'. Some implementations
+reflect whether they encountered an error in their exit status; other
+implementations always succeed.
+
+ $ cat Makefile
+ all:
+ false
+ $ make -k; echo exit status: $? # GNU make
+ false
+ make: *** [all] Error 1
+ exit status: 2
+ $ pmake -k; echo exit status: $? # BSD make
+ false
+ *** Error code 1 (continuing)
+ exit status: 0
+
+
+File: autoconf.info, Node: VPATH and Make, Next: Single Suffix Rules, Prev: make -k Status, Up: Portable Make
+
+12.18 `VPATH' and Make
+======================
+
+Posix does not specify the semantics of `VPATH'. Typically, `make'
+supports `VPATH', but its implementation is not consistent.
+
+ Autoconf and Automake support makefiles whose usages of `VPATH' are
+portable to recent-enough popular implementations of `make', but to
+keep the resulting makefiles portable, a package's makefile prototypes
+must take the following issues into account. These issues are
+complicated and are often poorly understood, and installers who use
+`VPATH' should expect to find many bugs in this area. If you use
+`VPATH', the simplest way to avoid these portability bugs is to stick
+with GNU `make', since it is the most commonly-used `make' among
+Autoconf users.
+
+ Here are some known issues with some `VPATH' implementations.
+
+* Menu:
+
+* Variables listed in VPATH:: `VPATH' must be literal on ancient hosts
+* VPATH and Double-colon:: Problems with `::' on ancient hosts
+* $< in Explicit Rules:: `$<' does not work in ordinary rules
+* Automatic Rule Rewriting:: `VPATH' goes wild on Solaris
+* Tru64 Directory Magic:: `mkdir' goes wild on Tru64
+* Make Target Lookup:: More details about `VPATH' lookup
+
+
+File: autoconf.info, Node: Variables listed in VPATH, Next: VPATH and Double-colon, Up: VPATH and Make
+
+12.18.1 Variables listed in `VPATH'
+-----------------------------------
+
+Do not set `VPATH' to the value of another variable, for example `VPATH
+= $(srcdir)', because some ancient versions of `make' do not do
+variable substitutions on the value of `VPATH'. For example, use this
+
+ srcdir = @srcdir@
+ VPATH = @srcdir@
+
+rather than `VPATH = $(srcdir)'. Note that with GNU Automake, there is
+no need to set this yourself.
+
+
+File: autoconf.info, Node: VPATH and Double-colon, Next: $< in Explicit Rules, Prev: Variables listed in VPATH, Up: VPATH and Make
+
+12.18.2 `VPATH' and Double-colon Rules
+--------------------------------------
+
+With ancient versions of Sun `make', any assignment to `VPATH' causes
+`make' to execute only the first set of double-colon rules. However,
+this problem is no longer of practical concern.
+
+
+File: autoconf.info, Node: $< in Explicit Rules, Next: Automatic Rule Rewriting, Prev: VPATH and Double-colon, Up: VPATH and Make
+
+12.18.3 `$<' Not Supported in Explicit Rules
+--------------------------------------------
+
+Using `$<' in explicit rules is not portable. The prerequisite file
+must be named explicitly in the rule. If you want to find the
+prerequisite via a `VPATH' search, you have to code the whole thing
+manually. *Note Build Directories::.
+
+
+File: autoconf.info, Node: Automatic Rule Rewriting, Next: Tru64 Directory Magic, Prev: $< in Explicit Rules, Up: VPATH and Make
+
+12.18.4 Automatic Rule Rewriting
+--------------------------------
+
+Some `make' implementations, such as Solaris and Tru64, search for
+prerequisites in `VPATH' and then rewrite each occurrence as a plain
+word in the rule. For instance:
+
+ # This isn't portable to GNU make.
+ VPATH = ../pkg/src
+ f.c: if.c
+ cp if.c f.c
+
+executes `cp ../pkg/src/if.c f.c' if `if.c' is found in `../pkg/src'.
+
+ However, this rule leads to real problems in practice. For example,
+if the source directory contains an ordinary file named `test' that is
+used in a dependency, Solaris `make' rewrites commands like `if test -r
+foo; ...' to `if ../pkg/src/test -r foo; ...', which is typically
+undesirable. In fact, `make' is completely unaware of shell syntax
+used in the rules, so the VPATH rewrite can potentially apply to _any_
+whitespace-separated word in a rule, including shell variables,
+functions, and keywords.
+
+ $ mkdir build
+ $ cd build
+ $ cat > Makefile <<'END'
+ VPATH = ..
+ all: arg func for echo
+ func () { for arg in "$$@"; do echo $$arg; done; }; \
+ func "hello world"
+ END
+ $ touch ../arg ../func ../for ../echo
+ $ make
+ ../func () { ../for ../arg in "$@"; do ../echo $arg; done; }; \
+ ../func "hello world"
+ sh: syntax error at line 1: `do' unexpected
+ *** Error code 2
+
+To avoid this problem, portable makefiles should never mention a source
+file or dependency whose name is that of a shell keyword like `for' or
+`until', a shell command like `cat' or `gcc' or `test', or a shell
+function or variable used in the corresponding `Makefile' recipe.
+
+ Because of these problems GNU `make' and many other `make'
+implementations do not rewrite commands, so portable makefiles should
+search `VPATH' manually. It is tempting to write this:
+
+ # This isn't portable to Solaris make.
+ VPATH = ../pkg/src
+ f.c: if.c
+ cp `test -f if.c || echo $(VPATH)/`if.c f.c
+
+However, the "prerequisite rewriting" still applies here. So if `if.c'
+is in `../pkg/src', Solaris and Tru64 `make' execute
+
+ cp `test -f ../pkg/src/if.c || echo ../pkg/src/`if.c f.c
+
+which reduces to
+
+ cp if.c f.c
+
+and thus fails. Oops.
+
+ A simple workaround, and good practice anyway, is to use `$?' and
+`$@' when possible:
+
+ VPATH = ../pkg/src
+ f.c: if.c
+ cp $? $@
+
+but this does not generalize well to commands with multiple
+prerequisites. A more general workaround is to rewrite the rule so that
+the prerequisite `if.c' never appears as a plain word. For example,
+these three rules would be safe, assuming `if.c' is in `../pkg/src' and
+the other files are in the working directory:
+
+ VPATH = ../pkg/src
+ f.c: if.c f1.c
+ cat `test -f ./if.c || echo $(VPATH)/`if.c f1.c >$@
+ g.c: if.c g1.c
+ cat `test -f 'if.c' || echo $(VPATH)/`if.c g1.c >$@
+ h.c: if.c h1.c
+ cat `test -f "if.c" || echo $(VPATH)/`if.c h1.c >$@
+
+ Things get worse when your prerequisites are in a macro.
+
+ VPATH = ../pkg/src
+ HEADERS = f.h g.h h.h
+ install-HEADERS: $(HEADERS)
+ for i in $(HEADERS); do \
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+ done
+
+ The above `install-HEADERS' rule is not Solaris-proof because `for i
+in $(HEADERS);' is expanded to `for i in f.h g.h h.h;' where `f.h' and
+`g.h' are plain words and are hence subject to `VPATH' adjustments.
+
+ If the three files are in `../pkg/src', the rule is run as:
+
+ for i in ../pkg/src/f.h ../pkg/src/g.h h.h; do \
+ install -m 644 \
+ `test -f $i || echo ../pkg/src/`$i \
+ /usr/local/include/$i; \
+ done
+
+ where the two first `install' calls fail. For instance, consider
+the `f.h' installation:
+
+ install -m 644 \
+ `test -f ../pkg/src/f.h || \
+ echo ../pkg/src/ \
+ `../pkg/src/f.h \
+ /usr/local/include/../pkg/src/f.h;
+
+It reduces to:
+
+ install -m 644 \
+ ../pkg/src/f.h \
+ /usr/local/include/../pkg/src/f.h;
+
+ Note that the manual `VPATH' search did not cause any problems here;
+however this command installs `f.h' in an incorrect directory.
+
+ Trying to quote `$(HEADERS)' in some way, as we did for `foo.c' a
+few makefiles ago, does not help:
+
+ install-HEADERS: $(HEADERS)
+ headers='$(HEADERS)'; \
+ for i in $$headers; do \
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+ done
+
+ Now, `headers='$(HEADERS)'' macro-expands to:
+
+ headers='f.h g.h h.h'
+
+but `g.h' is still a plain word. (As an aside, the idiom
+`headers='$(HEADERS)'; for i in $$headers;' is a good idea if
+`$(HEADERS)' can be empty, because some shells diagnose a syntax error
+on `for i in;'.)
+
+ One workaround is to strip this unwanted `../pkg/src/' prefix
+manually:
+
+ VPATH = ../pkg/src
+ HEADERS = f.h g.h h.h
+ install-HEADERS: $(HEADERS)
+ headers='$(HEADERS)'; \
+ for i in $$headers; do \
+ i=`expr "$$i" : '$(VPATH)/\(.*\)'`;
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+ done
+
+ Automake does something similar. However the above hack works only
+if the files listed in `HEADERS' are in the current directory or a
+subdirectory; they should not be in an enclosing directory. If we had
+`HEADERS = ../f.h', the above fragment would fail in a VPATH build with
+Tru64 `make'. The reason is that not only does Tru64 `make' rewrite
+dependencies, but it also simplifies them. Hence `../f.h' becomes
+`../pkg/f.h' instead of `../pkg/src/../f.h'. This obviously defeats
+any attempt to strip a leading `../pkg/src/' component.
+
+ The following example makes the behavior of Tru64 `make' more
+apparent.
+
+ $ cat Makefile
+ VPATH = sub
+ all: ../foo
+ echo ../foo
+ $ ls
+ Makefile foo
+ $ make
+ echo foo
+ foo
+
+Dependency `../foo' was found in `sub/../foo', but Tru64 `make'
+simplified it as `foo'. (Note that the `sub/' directory does not even
+exist, this just means that the simplification occurred before the file
+was checked for.)
+
+ For the record here is how SunOS 4 `make' behaves on this example.
+
+ $ make
+ make: Fatal error: Don't know how to make target `../foo'
+ $ mkdir sub
+ $ make
+ echo sub/../foo
+ sub/../foo
+
+
+File: autoconf.info, Node: Tru64 Directory Magic, Next: Make Target Lookup, Prev: Automatic Rule Rewriting, Up: VPATH and Make
+
+12.18.5 Tru64 `make' Creates Prerequisite Directories Magically
+---------------------------------------------------------------
+
+When a prerequisite is a subdirectory of `VPATH', Tru64 `make' creates
+it in the current directory.
+
+ $ mkdir -p foo/bar build
+ $ cd build
+ $ cat >Makefile <<END
+ VPATH = ..
+ all: foo/bar
+ END
+ $ make
+ mkdir foo
+ mkdir foo/bar
+
+ This can yield unexpected results if a rule uses a manual `VPATH'
+search as presented before.
+
+ VPATH = ..
+ all : foo/bar
+ command `test -d foo/bar || echo ../`foo/bar
+
+ The above `command' is run on the empty `foo/bar' directory that was
+created in the current directory.
+
+
+File: autoconf.info, Node: Make Target Lookup, Prev: Tru64 Directory Magic, Up: VPATH and Make
+
+12.18.6 Make Target Lookup
+--------------------------
+
+GNU `make' uses a complex algorithm to decide when it should use files
+found via a `VPATH' search. *Note How Directory Searches are
+Performed: (make)Search Algorithm.
+
+ If a target needs to be rebuilt, GNU `make' discards the file name
+found during the `VPATH' search for this target, and builds the file
+locally using the file name given in the makefile. If a target does
+not need to be rebuilt, GNU `make' uses the file name found during the
+`VPATH' search.
+
+ Other `make' implementations, like NetBSD `make', are easier to
+describe: the file name found during the `VPATH' search is used whether
+the target needs to be rebuilt or not. Therefore new files are created
+locally, but existing files are updated at their `VPATH' location.
+
+ OpenBSD and FreeBSD `make', however, never perform a `VPATH' search
+for a dependency that has an explicit rule. This is extremely annoying.
+
+ When attempting a `VPATH' build for an autoconfiscated package
+(e.g., `mkdir build && cd build && ../configure'), this means GNU
+`make' builds everything locally in the `build' directory, while BSD
+`make' builds new files locally and updates existing files in the
+source directory.
+
+ $ cat Makefile
+ VPATH = ..
+ all: foo.x bar.x
+ foo.x bar.x: newer.x
+ @echo Building $@
+ $ touch ../bar.x
+ $ touch ../newer.x
+ $ make # GNU make
+ Building foo.x
+ Building bar.x
+ $ pmake # NetBSD make
+ Building foo.x
+ Building ../bar.x
+ $ fmake # FreeBSD make, OpenBSD make
+ Building foo.x
+ Building bar.x
+ $ tmake # Tru64 make
+ Building foo.x
+ Building bar.x
+ $ touch ../bar.x
+ $ make # GNU make
+ Building foo.x
+ $ pmake # NetBSD make
+ Building foo.x
+ $ fmake # FreeBSD make, OpenBSD make
+ Building foo.x
+ Building bar.x
+ $ tmake # Tru64 make
+ Building foo.x
+ Building bar.x
+
+ Note how NetBSD `make' updates `../bar.x' in its VPATH location, and
+how FreeBSD, OpenBSD, and Tru64 `make' always update `bar.x', even when
+`../bar.x' is up to date.
+
+ Another point worth mentioning is that once GNU `make' has decided
+to ignore a `VPATH' file name (e.g., it ignored `../bar.x' in the above
+example) it continues to ignore it when the target occurs as a
+prerequisite of another rule.
+
+ The following example shows that GNU `make' does not look up `bar.x'
+in `VPATH' before performing the `.x.y' rule, because it ignored the
+`VPATH' result of `bar.x' while running the `bar.x: newer.x' rule.
+
+ $ cat Makefile
+ VPATH = ..
+ all: bar.y
+ bar.x: newer.x
+ @echo Building $@
+ .SUFFIXES: .x .y
+ .x.y:
+ cp $< $@
+ $ touch ../bar.x
+ $ touch ../newer.x
+ $ make # GNU make
+ Building bar.x
+ cp bar.x bar.y
+ cp: cannot stat `bar.x': No such file or directory
+ make: *** [bar.y] Error 1
+ $ pmake # NetBSD make
+ Building ../bar.x
+ cp ../bar.x bar.y
+ $ rm bar.y
+ $ fmake # FreeBSD make, OpenBSD make
+ echo Building bar.x
+ cp bar.x bar.y
+ cp: cannot stat `bar.x': No such file or directory
+ *** Error code 1
+ $ tmake # Tru64 make
+ Building bar.x
+ cp: bar.x: No such file or directory
+ *** Exit 1
+
+ Note that if you drop away the command from the `bar.x: newer.x'
+rule, GNU `make' magically starts to work: it knows that `bar.x' hasn't
+been updated, therefore it doesn't discard the result from `VPATH'
+(`../bar.x') in succeeding uses. Tru64 also works, but FreeBSD and
+OpenBSD still don't.
+
+ $ cat Makefile
+ VPATH = ..
+ all: bar.y
+ bar.x: newer.x
+ .SUFFIXES: .x .y
+ .x.y:
+ cp $< $@
+ $ touch ../bar.x
+ $ touch ../newer.x
+ $ make # GNU make
+ cp ../bar.x bar.y
+ $ rm bar.y
+ $ pmake # NetBSD make
+ cp ../bar.x bar.y
+ $ rm bar.y
+ $ fmake # FreeBSD make, OpenBSD make
+ cp bar.x bar.y
+ cp: cannot stat `bar.x': No such file or directory
+ *** Error code 1
+ $ tmake # Tru64 make
+ cp ../bar.x bar.y
+
+ It seems the sole solution that would please every `make'
+implementation is to never rely on `VPATH' searches for targets. In
+other words, `VPATH' should be reserved to unbuilt sources.
+
+
+File: autoconf.info, Node: Single Suffix Rules, Next: Timestamps and Make, Prev: VPATH and Make, Up: Portable Make
+
+12.19 Single Suffix Rules and Separated Dependencies
+====================================================
+
+A "Single Suffix Rule" is basically a usual suffix (inference) rule
+(`.from.to:'), but which _destination_ suffix is empty (`.from:').
+
+ "Separated dependencies" simply refers to listing the prerequisite
+of a target, without defining a rule. Usually one can list on the one
+hand side, the rules, and on the other hand side, the dependencies.
+
+ Solaris `make' does not support separated dependencies for targets
+defined by single suffix rules:
+
+ $ cat Makefile
+ .SUFFIXES: .in
+ foo: foo.in
+ .in:
+ cp $< $@
+ $ touch foo.in
+ $ make
+ $ ls
+ Makefile foo.in
+
+while GNU Make does:
+
+ $ gmake
+ cp foo.in foo
+ $ ls
+ Makefile foo foo.in
+
+ Note it works without the `foo: foo.in' dependency.
+
+ $ cat Makefile
+ .SUFFIXES: .in
+ .in:
+ cp $< $@
+ $ make foo
+ cp foo.in foo
+
+and it works with double suffix inference rules:
+
+ $ cat Makefile
+ foo.out: foo.in
+ .SUFFIXES: .in .out
+ .in.out:
+ cp $< $@
+ $ make
+ cp foo.in foo.out
+
+ As a result, in such a case, you have to write target rules.
+
+
+File: autoconf.info, Node: Timestamps and Make, Prev: Single Suffix Rules, Up: Portable Make
+
+12.20 Timestamp Resolution and Make
+===================================
+
+Traditionally, file timestamps had 1-second resolution, and `make' used
+those timestamps to determine whether one file was newer than the
+other. However, many modern file systems have timestamps with
+1-nanosecond resolution. Some `make' implementations look at the
+entire timestamp; others ignore the fractional part, which can lead to
+incorrect results. Normally this is not a problem, but in some extreme
+cases you may need to use tricks like `sleep 1' to work around
+timestamp truncation bugs.
+
+ Commands like `cp -p' and `touch -r' typically do not copy file
+timestamps to their full resolutions (*note Limitations of Usual Tools:
+touch.). Hence you should be wary of rules like this:
+
+ dest: src
+ cp -p src dest
+
+ as `dest' often appears to be older than `src' after the timestamp
+is truncated, and this can cause `make' to do needless rework the next
+time it is invoked. To work around this problem, you can use a
+timestamp file, e.g.:
+
+ dest-stamp: src
+ cp -p src dest
+ date >dest-stamp
+
+ Apart from timestamp resolution, there are also differences in
+handling equal timestamps. HP-UX `make' updates targets if it has the
+same time stamp as one of its prerequisites, in violation of Posix
+rules.
+
+ This can cause spurious rebuilds for repeated runs of `make'. This
+in turn can cause `make' to fail if it tries to rebuild generated files
+in a possibly read-only source tree with tools not present on the
+end-user machine. Use GNU `make' instead.
+
+
+File: autoconf.info, Node: Portable C and C++, Next: Manual Configuration, Prev: Portable Make, Up: Top
+
+13 Portable C and C++ Programming
+*********************************
+
+C and C++ programs often use low-level features of the underlying
+system, and therefore are often more difficult to make portable to other
+platforms.
+
+ Several standards have been developed to help make your programs more
+portable. If you write programs with these standards in mind, you can
+have greater confidence that your programs work on a wide variety of
+systems. *Note Language Standards Supported by GCC: (gcc)Standards,
+for a list of C-related standards. Many programs also assume the Posix
+standard (http://www.opengroup.org/susv3).
+
+ Some old code is written to be portable to K&R C, which predates any
+C standard. K&R C compilers are no longer of practical interest,
+though, and the rest of section assumes at least C89, the first C
+standard.
+
+ Program portability is a huge topic, and this section can only
+briefly introduce common pitfalls. *Note Portability between System
+Types: (standards)System Portability, for more information.
+
+* Menu:
+
+* Varieties of Unportability:: How to make your programs unportable
+* Integer Overflow:: When integers get too large
+* Preprocessor Arithmetic:: `#if' expression problems
+* Null Pointers:: Properties of null pointers
+* Buffer Overruns:: Subscript errors and the like
+* Volatile Objects:: `volatile' and signals
+* Floating Point Portability:: Portable floating-point arithmetic
+* Exiting Portably:: Exiting and the exit status
+
+
+File: autoconf.info, Node: Varieties of Unportability, Next: Integer Overflow, Up: Portable C and C++
+
+13.1 Varieties of Unportability
+===============================
+
+Autoconf tests and ordinary programs often need to test what is allowed
+on a system, and therefore they may need to deliberately exceed the
+boundaries of what the standards allow, if only to see whether an
+optional feature is present. When you write such a program, you should
+keep in mind the difference between constraints, unspecified behavior,
+and undefined behavior.
+
+ In C, a "constraint" is a rule that the compiler must enforce. An
+example constraint is that C programs must not declare a bit-field with
+negative width. Tests can therefore reliably assume that programs with
+negative-width bit-fields are rejected by a compiler that conforms to
+the standard.
+
+ "Unspecified behavior" is valid behavior, where the standard allows
+multiple possibilities. For example, the order of evaluation of
+function arguments is unspecified. Some unspecified behavior is
+"implementation-defined", i.e., documented by the implementation, but
+since Autoconf tests cannot read the documentation they cannot
+distinguish between implementation-defined and other unspecified
+behavior. It is common for Autoconf tests to probe implementations to
+determine otherwise-unspecified behavior.
+
+ "Undefined behavior" is invalid behavior, where the standard allows
+the implementation to do anything it pleases. For example,
+dereferencing a null pointer leads to undefined behavior. If possible,
+test programs should avoid undefined behavior, since a program with
+undefined behavior might succeed on a test that should fail.
+
+ The above rules apply to programs that are intended to conform to the
+standard. However, strictly-conforming programs are quite rare, since
+the standards are so limiting. A major goal of Autoconf is to support
+programs that use implementation features not described by the standard,
+and it is fairly common for test programs to violate the above rules, if
+the programs work well enough in practice.
+
+
+File: autoconf.info, Node: Integer Overflow, Next: Preprocessor Arithmetic, Prev: Varieties of Unportability, Up: Portable C and C++
+
+13.2 Integer Overflow
+=====================
+
+In practice many portable C programs assume that signed integer
+overflow wraps around reliably using two's complement arithmetic. Yet
+the C standard says that program behavior is undefined on overflow, and
+in a few cases C programs do not work on some modern implementations
+because their overflows do not wrap around as their authors expected.
+Conversely, in signed integer remainder, the C standard requires
+overflow behavior that is commonly not implemented.
+
+* Menu:
+
+* Integer Overflow Basics:: Why integer overflow is a problem
+* Signed Overflow Examples:: Examples of code assuming wraparound
+* Optimization and Wraparound:: Optimizations that break uses of wraparound
+* Signed Overflow Advice:: Practical advice for signed overflow issues
+* Signed Integer Division:: `INT_MIN / -1' and `INT_MIN % -1'
+
+
+File: autoconf.info, Node: Integer Overflow Basics, Next: Signed Overflow Examples, Up: Integer Overflow
+
+13.2.1 Basics of Integer Overflow
+---------------------------------
+
+In languages like C, unsigned integer overflow reliably wraps around;
+e.g., `UINT_MAX + 1' yields zero. This is guaranteed by the C standard
+and is portable in practice, unless you specify aggressive, nonstandard
+optimization options suitable only for special applications.
+
+ In contrast, the C standard says that signed integer overflow leads
+to undefined behavior where a program can do anything, including dumping
+core or overrunning a buffer. The misbehavior can even precede the
+overflow. Such an overflow can occur during addition, subtraction,
+multiplication, division, and left shift.
+
+ Despite this requirement of the standard, many C programs and
+Autoconf tests assume that signed integer overflow silently wraps
+around modulo a power of two, using two's complement arithmetic, so
+long as you cast the resulting value to a signed integer type or store
+it into a signed integer variable. If you use conservative
+optimization flags, such programs are generally portable to the vast
+majority of modern platforms, with a few exceptions discussed later.
+
+ For historical reasons the C standard also allows implementations
+with ones' complement or signed magnitude arithmetic, but it is safe to
+assume two's complement nowadays.
+
+ Also, overflow can occur when converting an out-of-range value to a
+signed integer type. Here a standard implementation must define what
+happens, but this might include raising an exception. In practice all
+known implementations support silent wraparound in this case, so you
+need not worry about other possibilities.
+
+
+File: autoconf.info, Node: Signed Overflow Examples, Next: Optimization and Wraparound, Prev: Integer Overflow Basics, Up: Integer Overflow
+
+13.2.2 Examples of Code Assuming Wraparound Overflow
+----------------------------------------------------
+
+There has long been a tension between what the C standard requires for
+signed integer overflow, and what C programs commonly assume. The
+standard allows aggressive optimizations based on assumptions that
+overflow never occurs, but many practical C programs rely on overflow
+wrapping around. These programs do not conform to the standard, but
+they commonly work in practice because compiler writers are
+understandably reluctant to implement optimizations that would break
+many programs, unless perhaps a user specifies aggressive optimization.
+
+ The C Standard says that if a program has signed integer overflow its
+behavior is undefined, and the undefined behavior can even precede the
+overflow. To take an extreme example:
+
+ if (password == expected_password)
+ allow_superuser_privileges ();
+ else if (counter++ == INT_MAX)
+ abort ();
+ else
+ printf ("%d password mismatches\n", counter);
+
+If the `int' variable `counter' equals `INT_MAX', `counter++' must
+overflow and the behavior is undefined, so the C standard allows the
+compiler to optimize away the test against `INT_MAX' and the `abort'
+call. Worse, if an earlier bug in the program lets the compiler deduce
+that `counter == INT_MAX' or that `counter' previously overflowed, the
+C standard allows the compiler to optimize away the password test and
+generate code that allows superuser privileges unconditionally.
+
+ Despite this requirement by the standard, it has long been common
+for C code to assume wraparound arithmetic after signed overflow, and
+all known practical C implementations support some C idioms that assume
+wraparound signed arithmetic, even if the idioms do not conform
+strictly to the standard. If your code looks like the following
+examples it will almost surely work with real-world compilers.
+
+ Here is an example derived from the 7th Edition Unix implementation
+of `atoi' (1979-01-10):
+
+ char *p;
+ int f, n;
+ ...
+ while (*p >= '0' && *p <= '9')
+ n = n * 10 + *p++ - '0';
+ return (f ? -n : n);
+
+Even if the input string is in range, on most modern machines this has
+signed overflow when computing the most negative integer (the `-n'
+overflows) or a value near an extreme integer (the first `+' overflows).
+
+ Here is another example, derived from the 7th Edition implementation
+of `rand' (1979-01-10). Here the programmer expects both
+multiplication and addition to wrap on overflow:
+
+ static long int randx = 1;
+ ...
+ randx = randx * 1103515245 + 12345;
+ return (randx >> 16) & 077777;
+
+ In the following example, derived from the GNU C Library 2.5
+implementation of `mktime' (2006-09-09), the code assumes wraparound
+arithmetic in `+' to detect signed overflow:
+
+ time_t t, t1, t2;
+ int sec_requested, sec_adjustment;
+ ...
+ t1 = t + sec_requested;
+ t2 = t1 + sec_adjustment;
+ if (((t1 < t) != (sec_requested < 0))
+ | ((t2 < t1) != (sec_adjustment < 0)))
+ return -1;
+
+ If your code looks like these examples, it is probably safe even
+though it does not strictly conform to the C standard. This might lead
+one to believe that one can generally assume wraparound on overflow,
+but that is not always true, as can be seen in the next section.
+
+
+File: autoconf.info, Node: Optimization and Wraparound, Next: Signed Overflow Advice, Prev: Signed Overflow Examples, Up: Integer Overflow
+
+13.2.3 Optimizations That Break Wraparound Arithmetic
+-----------------------------------------------------
+
+Compilers sometimes generate code that is incompatible with wraparound
+integer arithmetic. A simple example is an algebraic simplification: a
+compiler might translate `(i * 2000) / 1000' to `i * 2' because it
+assumes that `i * 2000' does not overflow. The translation is not
+equivalent to the original when overflow occurs: e.g., in the typical
+case of 32-bit signed two's complement wraparound `int', if `i' has
+type `int' and value `1073742', the original expression returns
+-2147483 but the optimized version returns the mathematically correct
+value 2147484.
+
+ More subtly, loop induction optimizations often exploit the undefined
+behavior of signed overflow. Consider the following contrived function
+`sumc':
+
+ int
+ sumc (int lo, int hi)
+ {
+ int sum = 0;
+ int i;
+ for (i = lo; i <= hi; i++)
+ sum ^= i * 53;
+ return sum;
+ }
+
+To avoid multiplying by 53 each time through the loop, an optimizing
+compiler might internally transform `sumc' to the equivalent of the
+following:
+
+ int
+ transformed_sumc (int lo, int hi)
+ {
+ int sum = 0;
+ int hic = hi * 53;
+ int ic;
+ for (ic = lo * 53; ic <= hic; ic += 53)
+ sum ^= ic;
+ return sum;
+ }
+
+This transformation is allowed by the C standard, but it is invalid for
+wraparound arithmetic when `INT_MAX / 53 < hi', because then the
+overflow in computing expressions like `hi * 53' can cause the
+expression `i <= hi' to yield a different value from the transformed
+expression `ic <= hic'.
+
+ For this reason, compilers that use loop induction and similar
+techniques often do not support reliable wraparound arithmetic when a
+loop induction variable like `ic' is involved. Since loop induction
+variables are generated by the compiler, and are not visible in the
+source code, it is not always trivial to say whether the problem
+affects your code.
+
+ Hardly any code actually depends on wraparound arithmetic in cases
+like these, so in practice these loop induction optimizations are almost
+always useful. However, edge cases in this area can cause problems.
+For example:
+
+ int j;
+ for (j = 1; 0 < j; j *= 2)
+ test (j);
+
+Here, the loop attempts to iterate through all powers of 2 that `int'
+can represent, but the C standard allows a compiler to optimize away
+the comparison and generate an infinite loop, under the argument that
+behavior is undefined on overflow. As of this writing this
+optimization is not done by any production version of GCC with `-O2',
+but it might be performed by other compilers, or by more aggressive GCC
+optimization options, and the GCC developers have not decided whether
+it will continue to work with GCC and `-O2'.
+
+
+File: autoconf.info, Node: Signed Overflow Advice, Next: Signed Integer Division, Prev: Optimization and Wraparound, Up: Integer Overflow
+
+13.2.4 Practical Advice for Signed Overflow Issues
+--------------------------------------------------
+
+Ideally the safest approach is to avoid signed integer overflow
+entirely. For example, instead of multiplying two signed integers, you
+can convert them to unsigned integers, multiply the unsigned values,
+then test whether the result is in signed range.
+
+ Rewriting code in this way will be inconvenient, though,
+particularly if the signed values might be negative. Also, it may hurt
+performance. Using unsigned arithmetic to check for overflow is
+particularly painful to do portably and efficiently when dealing with an
+integer type like `uid_t' whose width and signedness vary from platform
+to platform.
+
+ Furthermore, many C applications pervasively assume wraparound
+behavior and typically it is not easy to find and remove all these
+assumptions. Hence it is often useful to maintain nonstandard code
+that assumes wraparound on overflow, instead of rewriting the code.
+The rest of this section attempts to give practical advice for this
+situation.
+
+ If your code wants to detect signed integer overflow in `sum = a +
+b', it is generally safe to use an expression like `(sum < a) != (b <
+0)'.
+
+ If your code uses a signed loop index, make sure that the index
+cannot overflow, along with all signed expressions derived from the
+index. Here is a contrived example of problematic code with two
+instances of overflow.
+
+ for (i = INT_MAX - 10; i <= INT_MAX; i++)
+ if (i + 1 < 0)
+ {
+ report_overflow ();
+ break;
+ }
+
+Because of the two overflows, a compiler might optimize away or
+transform the two comparisons in a way that is incompatible with the
+wraparound assumption.
+
+ If your code uses an expression like `(i * 2000) / 1000' and you
+actually want the multiplication to wrap around on overflow, use
+unsigned arithmetic to do it, e.g., `((int) (i * 2000u)) / 1000'.
+
+ If your code assumes wraparound behavior and you want to insulate it
+against any GCC optimizations that would fail to support that behavior,
+you should use GCC's `-fwrapv' option, which causes signed overflow to
+wrap around reliably (except for division and remainder, as discussed
+in the next section).
+
+ If you need to port to platforms where signed integer overflow does
+not reliably wrap around (e.g., due to hardware overflow checking, or to
+highly aggressive optimizations), you should consider debugging with
+GCC's `-ftrapv' option, which causes signed overflow to raise an
+exception.
+
+
+File: autoconf.info, Node: Signed Integer Division, Prev: Signed Overflow Advice, Up: Integer Overflow
+
+13.2.5 Signed Integer Division and Integer Overflow
+---------------------------------------------------
+
+Overflow in signed integer division is not always harmless: for
+example, on CPUs of the i386 family, dividing `INT_MIN' by `-1' yields
+a SIGFPE signal which by default terminates the program. Worse, taking
+the remainder of these two values typically yields the same signal on
+these CPUs, even though the C standard requires `INT_MIN % -1' to yield
+zero because the expression does not overflow.
+
+
+File: autoconf.info, Node: Preprocessor Arithmetic, Next: Null Pointers, Prev: Integer Overflow, Up: Portable C and C++
+
+13.3 Preprocessor Arithmetic
+============================
+
+In C99, preprocessor arithmetic, used for `#if' expressions, must be
+evaluated as if all signed values are of type `intmax_t' and all
+unsigned values of type `uintmax_t'. Many compilers are buggy in this
+area, though. For example, as of 2007, Sun C mishandles `#if LLONG_MIN
+< 0' on a platform with 32-bit `long int' and 64-bit `long long int'.
+Also, some older preprocessors mishandle constants ending in `LL'. To
+work around these problems, you can compute the value of expressions
+like `LONG_MAX < LLONG_MAX' at `configure'-time rather than at
+`#if'-time.
+
+
+File: autoconf.info, Node: Null Pointers, Next: Buffer Overruns, Prev: Preprocessor Arithmetic, Up: Portable C and C++
+
+13.4 Properties of Null Pointers
+================================
+
+Most modern hosts reliably fail when you attempt to dereference a null
+pointer.
+
+ On almost all modern hosts, null pointers use an all-bits-zero
+internal representation, so you can reliably use `memset' with 0 to set
+all the pointers in an array to null values.
+
+ If `p' is a null pointer to an object type, the C expression `p + 0'
+always evaluates to `p' on modern hosts, even though the standard says
+that it has undefined behavior.
+
+
+File: autoconf.info, Node: Buffer Overruns, Next: Volatile Objects, Prev: Null Pointers, Up: Portable C and C++
+
+13.5 Buffer Overruns and Subscript Errors
+=========================================
+
+Buffer overruns and subscript errors are the most common dangerous
+errors in C programs. They result in undefined behavior because storing
+outside an array typically modifies storage that is used by some other
+object, and most modern systems lack runtime checks to catch these
+errors. Programs should not rely on buffer overruns being caught.
+
+ There is one exception to the usual rule that a portable program
+cannot address outside an array. In C, it is valid to compute the
+address just past an object, e.g., `&a[N]' where `a' has `N' elements,
+so long as you do not dereference the resulting pointer. But it is not
+valid to compute the address just before an object, e.g., `&a[-1]'; nor
+is it valid to compute two past the end, e.g., `&a[N+1]'. On most
+platforms `&a[-1] < &a[0] && &a[N] < &a[N+1]', but this is not reliable
+in general, and it is usually easy enough to avoid the potential
+portability problem, e.g., by allocating an extra unused array element
+at the start or end.
+
+ Valgrind (http://valgrind.org/) can catch many overruns. GCC users
+might also consider using the `-fmudflap' option to catch overruns.
+
+ Buffer overruns are usually caused by off-by-one errors, but there
+are more subtle ways to get them.
+
+ Using `int' values to index into an array or compute array sizes
+causes problems on typical 64-bit hosts where an array index might be
+2^31 or larger. Index values of type `size_t' avoid this problem, but
+cannot be negative. Index values of type `ptrdiff_t' are signed, and
+are wide enough in practice.
+
+ If you add or multiply two numbers to calculate an array size, e.g.,
+`malloc (x * sizeof y + z)', havoc ensues if the addition or
+multiplication overflows.
+
+ Many implementations of the `alloca' function silently misbehave and
+can generate buffer overflows if given sizes that are too large. The
+size limits are implementation dependent, but are at least 4000 bytes
+on all platforms that we know about.
+
+ The standard functions `asctime', `asctime_r', `ctime', `ctime_r',
+and `gets' are prone to buffer overflows, and portable code should not
+use them unless the inputs are known to be within certain limits. The
+time-related functions can overflow their buffers if given timestamps
+out of range (e.g., a year less than -999 or greater than 9999).
+Time-related buffer overflows cannot happen with recent-enough versions
+of the GNU C library, but are possible with other implementations. The
+`gets' function is the worst, since it almost invariably overflows its
+buffer when presented with an input line larger than the buffer.
+
+
+File: autoconf.info, Node: Volatile Objects, Next: Floating Point Portability, Prev: Buffer Overruns, Up: Portable C and C++
+
+13.6 Volatile Objects
+=====================
+
+The keyword `volatile' is often misunderstood in portable code. Its
+use inhibits some memory-access optimizations, but programmers often
+wish that it had a different meaning than it actually does.
+
+ `volatile' was designed for code that accesses special objects like
+memory-mapped device registers whose contents spontaneously change.
+Such code is inherently low-level, and it is difficult to specify
+portably what `volatile' means in these cases. The C standard says,
+"What constitutes an access to an object that has volatile-qualified
+type is implementation-defined," so in theory each implementation is
+supposed to fill in the gap by documenting what `volatile' means for
+that implementation. In practice, though, this documentation is
+usually absent or incomplete.
+
+ One area of confusion is the distinction between objects defined with
+volatile types, and volatile lvalues. From the C standard's point of
+view, an object defined with a volatile type has externally visible
+behavior. You can think of such objects as having little oscilloscope
+probes attached to them, so that the user can observe some properties of
+accesses to them, just as the user can observe data written to output
+files. However, the standard does not make it clear whether users can
+observe accesses by volatile lvalues to ordinary objects. For example:
+
+ /* Declare and access a volatile object.
+ Accesses to X are "visible" to users. */
+ static int volatile x;
+ x = 1;
+
+ /* Access two ordinary objects via a volatile lvalue.
+ It's not clear whether accesses to *P are "visible". */
+ int y;
+ int *z = malloc (sizeof (int));
+ int volatile *p;
+ p = &y;
+ *p = 1;
+ p = z;
+ *p = 1;
+
+ Programmers often wish that `volatile' meant "Perform the memory
+access here and now, without merging several memory accesses, without
+changing the memory word size, and without reordering." But the C
+standard does not require this. For objects defined with a volatile
+type, accesses must be done before the next sequence point; but
+otherwise merging, reordering, and word-size change is allowed. Worse,
+it is not clear from the standard whether volatile lvalues provide more
+guarantees in general than nonvolatile lvalues, if the underlying
+objects are ordinary.
+
+ Even when accessing objects defined with a volatile type, the C
+standard allows only extremely limited signal handlers: the behavior is
+undefined if a signal handler reads any nonlocal object, or writes to
+any nonlocal object whose type is not `sig_atomic_t volatile', or calls
+any standard library function other than `abort', `signal', and (if C99)
+`_Exit'. Hence C compilers need not worry about a signal handler
+disturbing ordinary computation, unless the computation accesses a
+`sig_atomic_t volatile' lvalue that is not a local variable. (There is
+an obscure exception for accesses via a pointer to a volatile
+character, since it may point into part of a `sig_atomic_t volatile'
+object.) Posix adds to the list of library functions callable from a
+portable signal handler, but otherwise is like the C standard in this
+area.
+
+ Some C implementations allow memory-access optimizations within each
+translation unit, such that actual behavior agrees with the behavior
+required by the standard only when calling a function in some other
+translation unit, and a signal handler acts like it was called from a
+different translation unit. The C standard hints that in these
+implementations, objects referred to by signal handlers "would require
+explicit specification of `volatile' storage, as well as other
+implementation-defined restrictions." But unfortunately even for this
+special case these other restrictions are often not documented well.
+*Note When is a Volatile Object Accessed?: (gcc)Volatiles, for some
+restrictions imposed by GCC. *Note Defining Signal Handlers:
+(libc)Defining Handlers, for some restrictions imposed by the GNU C
+library. Restrictions differ on other platforms.
+
+ If possible, it is best to use a signal handler that fits within the
+limits imposed by the C and Posix standards.
+
+ If this is not practical, you can try the following rules of thumb.
+A signal handler should access only volatile lvalues, preferably lvalues
+that refer to objects defined with a volatile type, and should not
+assume that the accessed objects have an internally consistent state if
+they are larger than a machine word. Furthermore, installers should
+employ compilers and compiler options that are commonly used for
+building operating system kernels, because kernels often need more from
+`volatile' than the C Standard requires, and installers who compile an
+application in a similar environment can sometimes benefit from the
+extra constraints imposed by kernels on compilers. Admittedly we are
+handwaving somewhat here, as there are few guarantees in this area; the
+rules of thumb may help to fix some bugs but there is a good chance
+that they will not fix them all.
+
+ For `volatile', C++ has the same problems that C does.
+Multithreaded applications have even more problems with `volatile', but
+they are beyond the scope of this section.
+
+ The bottom line is that using `volatile' typically hurts performance
+but should not hurt correctness. In some cases its use does help
+correctness, but these cases are often so poorly understood that all
+too often adding `volatile' to a data structure merely alleviates some
+symptoms of a bug while not fixing the bug in general.
+
+
+File: autoconf.info, Node: Floating Point Portability, Next: Exiting Portably, Prev: Volatile Objects, Up: Portable C and C++
+
+13.7 Floating Point Portability
+===============================
+
+Almost all modern systems use IEEE-754 floating point, and it is safe to
+assume IEEE-754 in most portable code these days. For more information,
+please see David Goldberg's classic paper What Every Computer Scientist
+Should Know About Floating-Point Arithmetic
+(http://www.validlab.com/goldberg/paper.pdf).
+
+
+File: autoconf.info, Node: Exiting Portably, Prev: Floating Point Portability, Up: Portable C and C++
+
+13.8 Exiting Portably
+=====================
+
+A C or C++ program can exit with status N by returning N from the
+`main' function. Portable programs are supposed to exit either with
+status 0 or `EXIT_SUCCESS' to succeed, or with status `EXIT_FAILURE' to
+fail, but in practice it is portable to fail by exiting with status 1,
+and test programs that assume Posix can fail by exiting with status
+values from 1 through 255. Programs on SunOS 2.0 (1985) through 3.5.2
+(1988) incorrectly exited with zero status when `main' returned
+nonzero, but ancient systems like these are no longer of practical
+concern.
+
+ A program can also exit with status N by passing N to the `exit'
+function, and a program can fail by calling the `abort' function. If a
+program is specialized to just some platforms, it can fail by calling
+functions specific to those platforms, e.g., `_exit' (Posix) and
+`_Exit' (C99). However, like other functions, an exit function should
+be declared, typically by including a header. For example, if a C
+program calls `exit', it should include `stdlib.h' either directly or
+via the default includes (*note Default Includes::).
+
+ A program can fail due to undefined behavior such as dereferencing a
+null pointer, but this is not recommended as undefined behavior allows
+an implementation to do whatever it pleases and this includes exiting
+successfully.
+
+
+File: autoconf.info, Node: Manual Configuration, Next: Site Configuration, Prev: Portable C and C++, Up: Top
+
+14 Manual Configuration
+***********************
+
+A few kinds of features can't be guessed automatically by running test
+programs. For example, the details of the object-file format, or
+special options that need to be passed to the compiler or linker. You
+can check for such features using ad-hoc means, such as having
+`configure' check the output of the `uname' program, or looking for
+libraries that are unique to particular systems. However, Autoconf
+provides a uniform method for handling unguessable features.
+
+* Menu:
+
+* Specifying Target Triplets:: Specifying target triplets
+* Canonicalizing:: Getting the canonical system type
+* Using System Type:: What to do with the system type
+
+
+File: autoconf.info, Node: Specifying Target Triplets, Next: Canonicalizing, Up: Manual Configuration
+
+14.1 Specifying target triplets
+===============================
+
+Autoconf-generated `configure' scripts can make decisions based on a
+canonical name for the system type, or "target triplet", which has the
+form: `CPU-VENDOR-OS', where OS can be `SYSTEM' or `KERNEL-SYSTEM'
+
+ `configure' can usually guess the canonical name for the type of
+system it's running on. To do so it runs a script called
+`config.guess', which infers the name using the `uname' command or
+symbols predefined by the C preprocessor.
+
+ Alternately, the user can specify the system type with command line
+arguments to `configure' (*note System Type::. Doing so is necessary
+when cross-compiling. In the most complex case of cross-compiling,
+three system types are involved. The options to specify them are:
+
+`--build=BUILD-TYPE'
+ the type of system on which the package is being configured and
+ compiled. It defaults to the result of running `config.guess'.
+ Specifying a BUILD-TYPE that differs from HOST-TYPE enables
+ cross-compilation mode.
+
+`--host=HOST-TYPE'
+ the type of system on which the package runs. By default it is the
+ same as the build machine. Specifying a HOST-TYPE that differs
+ from BUILD-TYPE, when BUILD-TYPE was also explicitly specified,
+ enables cross-compilation mode.
+
+`--target=TARGET-TYPE'
+ the type of system for which any compiler tools in the package
+ produce code (rarely needed). By default, it is the same as host.
+
+ If you mean to override the result of `config.guess', use `--build',
+not `--host', since the latter enables cross-compilation. For
+historical reasons, whenever you specify `--host', be sure to specify
+`--build' too; this will be fixed in the future. So, to enter
+cross-compilation mode, use a command like this
+
+ ./configure --build=i686-pc-linux-gnu --host=m68k-coff
+
+Note that if you do not specify `--host', `configure' fails if it can't
+run the code generated by the specified compiler. For example,
+configuring as follows fails:
+
+ ./configure CC=m68k-coff-gcc
+
+ When cross-compiling, `configure' will warn about any tools
+(compilers, linkers, assemblers) whose name is not prefixed with the
+host type. This is an aid to users performing cross-compilation.
+Continuing the example above, if a cross-compiler named `cc' is used
+with a native `pkg-config', then libraries found by `pkg-config' will
+likely cause subtle build failures; but using the names `m68k-coff-cc'
+and `m68k-coff-pkg-config' avoids any confusion. Avoiding the warning
+is as simple as creating the correct symlinks naming the cross tools.
+
+ `configure' recognizes short aliases for many system types; for
+example, `decstation' can be used instead of `mips-dec-ultrix4.2'.
+`configure' runs a script called `config.sub' to canonicalize system
+type aliases.
+
+ This section deliberately omits the description of the obsolete
+interface; see *note Hosts and Cross-Compilation::.
+
+
+File: autoconf.info, Node: Canonicalizing, Next: Using System Type, Prev: Specifying Target Triplets, Up: Manual Configuration
+
+14.2 Getting the Canonical System Type
+======================================
+
+The following macros make the system type available to `configure'
+scripts.
+
+ The variables `build_alias', `host_alias', and `target_alias' are
+always exactly the arguments of `--build', `--host', and `--target'; in
+particular, they are left empty if the user did not use them, even if
+the corresponding `AC_CANONICAL' macro was run. Any configure script
+may use these variables anywhere. These are the variables that should
+be used when in interaction with the user.
+
+ If you need to recognize some special environments based on their
+system type, run the following macros to get canonical system names.
+These variables are not set before the macro call.
+
+ If you use these macros, you must distribute `config.guess' and
+`config.sub' along with your source code. *Note Output::, for
+information about the `AC_CONFIG_AUX_DIR' macro which you can use to
+control in which directory `configure' looks for those scripts.
+
+ -- Macro: AC_CANONICAL_BUILD
+ Compute the canonical build-system type variable, `build', and its
+ three individual parts `build_cpu', `build_vendor', and `build_os'.
+
+ If `--build' was specified, then `build' is the canonicalization
+ of `build_alias' by `config.sub', otherwise it is determined by
+ the shell script `config.guess'.
+
+ -- Macro: AC_CANONICAL_HOST
+ Compute the canonical host-system type variable, `host', and its
+ three individual parts `host_cpu', `host_vendor', and `host_os'.
+
+ If `--host' was specified, then `host' is the canonicalization of
+ `host_alias' by `config.sub', otherwise it defaults to `build'.
+
+ -- Macro: AC_CANONICAL_TARGET
+ Compute the canonical target-system type variable, `target', and
+ its three individual parts `target_cpu', `target_vendor', and
+ `target_os'.
+
+ If `--target' was specified, then `target' is the canonicalization
+ of `target_alias' by `config.sub', otherwise it defaults to `host'.
+
+ Note that there can be artifacts due to the backward compatibility
+code. *Note Hosts and Cross-Compilation::, for more.
+
+
+File: autoconf.info, Node: Using System Type, Prev: Canonicalizing, Up: Manual Configuration
+
+14.3 Using the System Type
+==========================
+
+In `configure.ac' the system type is generally used by one or more
+`case' statements to select system-specifics. Shell wildcards can be
+used to match a group of system types.
+
+ For example, an extra assembler code object file could be chosen,
+giving access to a CPU cycle counter register. `$(CYCLE_OBJ)' in the
+following would be used in a makefile to add the object to a program or
+library.
+
+ AS_CASE([$host],
+ [alpha*-*-*], [CYCLE_OBJ=rpcc.o],
+ [i?86-*-*], [CYCLE_OBJ=rdtsc.o],
+ [CYCLE_OBJ=""]
+ )
+ AC_SUBST([CYCLE_OBJ])
+
+ `AC_CONFIG_LINKS' (*note Configuration Links::) is another good way
+to select variant source files, for example optimized code for some
+CPUs. The configured CPU type doesn't always indicate exact CPU types,
+so some runtime capability checks may be necessary too.
+
+ case $host in
+ alpha*-*-*) AC_CONFIG_LINKS([dither.c:alpha/dither.c]) ;;
+ powerpc*-*-*) AC_CONFIG_LINKS([dither.c:powerpc/dither.c]) ;;
+ *-*-*) AC_CONFIG_LINKS([dither.c:generic/dither.c]) ;;
+ esac
+
+ The host system type can also be used to find cross-compilation tools
+with `AC_CHECK_TOOL' (*note Generic Programs::).
+
+ The above examples all show `$host', since this is where the code is
+going to run. Only rarely is it necessary to test `$build' (which is
+where the build is being done).
+
+ Whenever you're tempted to use `$host' it's worth considering
+whether some sort of probe would be better. New system types come along
+periodically or previously missing features are added. Well-written
+probes can adapt themselves to such things, but hard-coded lists of
+names can't. Here are some guidelines,
+
+ * Availability of libraries and library functions should always be
+ checked by probing.
+
+ * Variant behavior of system calls is best identified with runtime
+ tests if possible, but bug workarounds or obscure difficulties
+ might have to be driven from `$host'.
+
+ * Assembler code is inevitably highly CPU-specific and is best
+ selected according to `$host_cpu'.
+
+ * Assembler variations like underscore prefix on globals or ELF
+ versus COFF type directives are however best determined by
+ probing, perhaps even examining the compiler output.
+
+ `$target' is for use by a package creating a compiler or similar.
+For ordinary packages it's meaningless and should not be used. It
+indicates what the created compiler should generate code for, if it can
+cross-compile. `$target' generally selects various hard-coded CPU and
+system conventions, since usually the compiler or tools under
+construction themselves determine how the target works.
+
+
+File: autoconf.info, Node: Site Configuration, Next: Running configure Scripts, Prev: Manual Configuration, Up: Top
+
+15 Site Configuration
+*********************
+
+`configure' scripts support several kinds of local configuration
+decisions. There are ways for users to specify where external software
+packages are, include or exclude optional features, install programs
+under modified names, and set default values for `configure' options.
+
+* Menu:
+
+* Help Formatting:: Customizing `configure --help'
+* External Software:: Working with other optional software
+* Package Options:: Selecting optional features
+* Pretty Help Strings:: Formatting help string
+* Option Checking:: Controlling checking of `configure' options
+* Site Details:: Configuring site details
+* Transforming Names:: Changing program names when installing
+* Site Defaults:: Giving `configure' local defaults
+
+
+File: autoconf.info, Node: Help Formatting, Next: External Software, Up: Site Configuration
+
+15.1 Controlling Help Output
+============================
+
+Users consult `configure --help' to learn of configuration decisions
+specific to your package. By default, `configure' breaks this output
+into sections for each type of option; within each section, help
+strings appear in the order `configure.ac' defines them:
+
+ Optional Features:
+ ...
+ --enable-bar include bar
+
+ Optional Packages:
+ ...
+ --with-foo use foo
+
+ -- Macro: AC_PRESERVE_HELP_ORDER
+ Request an alternate `--help' format, in which options of all
+ types appear together, in the order defined. Call this macro
+ before any `AC_ARG_ENABLE' or `AC_ARG_WITH'.
+
+ Optional Features and Packages:
+ ...
+ --enable-bar include bar
+ --with-foo use foo
+
+
+
+File: autoconf.info, Node: External Software, Next: Package Options, Prev: Help Formatting, Up: Site Configuration
+
+15.2 Working With External Software
+===================================
+
+Some packages require, or can optionally use, other software packages
+that are already installed. The user can give `configure' command line
+options to specify which such external software to use. The options
+have one of these forms:
+
+ --with-PACKAGE[=ARG]
+ --without-PACKAGE
+
+ For example, `--with-gnu-ld' means work with the GNU linker instead
+of some other linker. `--with-x' means work with The X Window System.
+
+ The user can give an argument by following the package name with `='
+and the argument. Giving an argument of `no' is for packages that are
+used by default; it says to _not_ use the package. An argument that is
+neither `yes' nor `no' could include a name or number of a version of
+the other package, to specify more precisely which other package this
+program is supposed to work with. If no argument is given, it defaults
+to `yes'. `--without-PACKAGE' is equivalent to `--with-PACKAGE=no'.
+
+ Normally `configure' scripts complain about `--with-PACKAGE' options
+that they do not support. *Note Option Checking::, for details, and
+for how to override the defaults.
+
+ For each external software package that may be used, `configure.ac'
+should call `AC_ARG_WITH' to detect whether the `configure' user asked
+to use it. Whether each package is used or not by default, and which
+arguments are valid, is up to you.
+
+ -- Macro: AC_ARG_WITH (PACKAGE, HELP-STRING, [ACTION-IF-GIVEN],
+ [ACTION-IF-NOT-GIVEN])
+ If the user gave `configure' the option `--with-PACKAGE' or
+ `--without-PACKAGE', run shell commands ACTION-IF-GIVEN. If
+ neither option was given, run shell commands ACTION-IF-NOT-GIVEN.
+ The name PACKAGE indicates another software package that this
+ program should work with. It should consist only of alphanumeric
+ characters, dashes, plus signs, and dots.
+
+ The option's argument is available to the shell commands
+ ACTION-IF-GIVEN in the shell variable `withval', which is actually
+ just the value of the shell variable named `with_PACKAGE', with
+ any non-alphanumeric characters in PACKAGE changed into `_'. You
+ may use that variable instead, if you wish.
+
+ The argument HELP-STRING is a description of the option that looks
+ like this:
+ --with-readline support fancy command line editing
+
+ HELP-STRING may be more than one line long, if more detail is
+ needed. Just make sure the columns line up in `configure --help'.
+ Avoid tabs in the help string. The easiest way to provide the
+ proper leading whitespace is to format your HELP-STRING with the
+ macro `AS_HELP_STRING' (*note Pretty Help Strings::).
+
+ The following example shows how to use the `AC_ARG_WITH' macro in
+ a common situation. You want to let the user decide whether to
+ enable support for an external library (e.g., the readline
+ library); if the user specified neither `--with-readline' nor
+ `--without-readline', you want to enable support for readline only
+ if the library is available on the system.
+
+ AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--with-readline],
+ [support fancy command line editing @<:@default=check@:>@])],
+ [],
+ [with_readline=check])
+
+ LIBREADLINE=
+ AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [if test "x$with_readline" != xcheck; then
+ AC_MSG_FAILURE(
+ [--with-readline was given, but test for readline failed])
+ fi
+ ], -lncurses)])
+
+ The next example shows how to use `AC_ARG_WITH' to give the user
+ the possibility to enable support for the readline library, in
+ case it is still experimental and not well tested, and is
+ therefore disabled by default.
+
+ AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--with-readline],
+ [enable experimental support for readline])],
+ [],
+ [with_readline=no])
+
+ LIBREADLINE=
+ AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [AC_MSG_FAILURE(
+ [--with-readline was given, but test for readline failed])],
+ [-lncurses])])
+
+ The last example shows how to use `AC_ARG_WITH' to give the user
+ the possibility to disable support for the readline library, given
+ that it is an important feature and that it should be enabled by
+ default.
+
+ AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--without-readline],
+ [disable support for readline])],
+ [],
+ [with_readline=yes])
+
+ LIBREADLINE=
+ AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [AC_MSG_FAILURE(
+ [readline test failed (--without-readline to disable)])],
+ [-lncurses])])
+
+ These three examples can be easily adapted to the case where
+ `AC_ARG_ENABLE' should be preferred to `AC_ARG_WITH' (see *note
+ Package Options::).
+
+
+File: autoconf.info, Node: Package Options, Next: Pretty Help Strings, Prev: External Software, Up: Site Configuration
+
+15.3 Choosing Package Options
+=============================
+
+If a software package has optional compile-time features, the user can
+give `configure' command line options to specify whether to compile
+them. The options have one of these forms:
+
+ --enable-FEATURE[=ARG]
+ --disable-FEATURE
+
+ These options allow users to choose which optional features to build
+and install. `--enable-FEATURE' options should never make a feature
+behave differently or cause one feature to replace another. They
+should only cause parts of the program to be built rather than left out.
+
+ The user can give an argument by following the feature name with `='
+and the argument. Giving an argument of `no' requests that the feature
+_not_ be made available. A feature with an argument looks like
+`--enable-debug=stabs'. If no argument is given, it defaults to `yes'.
+`--disable-FEATURE' is equivalent to `--enable-FEATURE=no'.
+
+ Normally `configure' scripts complain about `--enable-PACKAGE'
+options that they do not support. *Note Option Checking::, for
+details, and for how to override the defaults.
+
+ For each optional feature, `configure.ac' should call
+`AC_ARG_ENABLE' to detect whether the `configure' user asked to include
+it. Whether each feature is included or not by default, and which
+arguments are valid, is up to you.
+
+ -- Macro: AC_ARG_ENABLE (FEATURE, HELP-STRING, [ACTION-IF-GIVEN],
+ [ACTION-IF-NOT-GIVEN])
+ If the user gave `configure' the option `--enable-FEATURE' or
+ `--disable-FEATURE', run shell commands ACTION-IF-GIVEN. If
+ neither option was given, run shell commands ACTION-IF-NOT-GIVEN.
+ The name FEATURE indicates an optional user-level facility. It
+ should consist only of alphanumeric characters, dashes, plus
+ signs, and dots.
+
+ The option's argument is available to the shell commands
+ ACTION-IF-GIVEN in the shell variable `enableval', which is
+ actually just the value of the shell variable named
+ `enable_FEATURE', with any non-alphanumeric characters in FEATURE
+ changed into `_'. You may use that variable instead, if you wish.
+ The HELP-STRING argument is like that of `AC_ARG_WITH' (*note
+ External Software::).
+
+ You should format your HELP-STRING with the macro `AS_HELP_STRING'
+ (*note Pretty Help Strings::).
+
+ See the examples suggested with the definition of `AC_ARG_WITH'
+ (*note External Software::) to get an idea of possible
+ applications of `AC_ARG_ENABLE'.
+
+
+File: autoconf.info, Node: Pretty Help Strings, Next: Option Checking, Prev: Package Options, Up: Site Configuration
+
+15.4 Making Your Help Strings Look Pretty
+=========================================
+
+Properly formatting the `help strings' which are used in `AC_ARG_WITH'
+(*note External Software::) and `AC_ARG_ENABLE' (*note Package
+Options::) can be challenging. Specifically, you want your own `help
+strings' to line up in the appropriate columns of `configure --help'
+just like the standard Autoconf `help strings' do. This is the purpose
+of the `AS_HELP_STRING' macro.
+
+ -- Macro: AS_HELP_STRING (LEFT-HAND-SIDE, RIGHT-HAND-SIDE
+ [INDENT-COLUMN = `26'], [WRAP-COLUMN = `79'])
+ Expands into a help string that looks pretty when the user executes
+ `configure --help'. It is typically used in `AC_ARG_WITH' (*note
+ External Software::) or `AC_ARG_ENABLE' (*note Package Options::).
+ The following example makes this clearer.
+
+ AC_ARG_WITH([foo],
+ [AS_HELP_STRING([--with-foo],
+ [use foo (default is no)])],
+ [use_foo=$withval],
+ [use_foo=no])
+
+ Then the last few lines of `configure --help' appear like this:
+
+ --enable and --with options recognized:
+ --with-foo use foo (default is no)
+
+ Macro expansion is performed on the first argument. However, the
+ second argument of `AS_HELP_STRING' is treated as a whitespace
+ separated list of text to be reformatted, and is not subject to
+ macro expansion. Since it is not expanded, it should not be
+ double quoted. *Note Autoconf Language::, for a more detailed
+ explanation.
+
+ The `AS_HELP_STRING' macro is particularly helpful when the
+ LEFT-HAND-SIDE and/or RIGHT-HAND-SIDE are composed of macro
+ arguments, as shown in the following example. Be aware that
+ LEFT-HAND-SIDE may not expand to unbalanced quotes, although
+ quadrigraphs can be used.
+
+ AC_DEFUN([MY_ARG_WITH],
+ [AC_ARG_WITH(m4_translit([[$1]], [_], [-]),
+ [AS_HELP_STRING([--with-m4_translit([$1], [_], [-])],
+ [use $1 (default is $2)])],
+ [use_[]$1=$withval],
+ [use_[]$1=$2])])
+ MY_ARG_WITH([a_b], [no])
+ Here, the last few lines of `configure --help' will include:
+
+ --enable and --with options recognized:
+ --with-a-b use a_b (default is no)
+
+ The parameters INDENT-COLUMN and WRAP-COLUMN were introduced in
+ Autoconf 2.62. Generally, they should not be specified; they exist
+ for fine-tuning of the wrapping.
+ AS_HELP_STRING([--option], [description of option])
+ => --option description of option
+ AS_HELP_STRING([--option], [description of option], [15], [30])
+ => --option description of
+ => option
+
+
+File: autoconf.info, Node: Option Checking, Next: Site Details, Prev: Pretty Help Strings, Up: Site Configuration
+
+15.5 Controlling Checking of `configure' Options
+================================================
+
+The `configure' script checks its command-line options against a list
+of known options, like `--help' or `--config-cache'. An unknown option
+ordinarily indicates a mistake by the user and `configure' halts with
+an error. However, by default unknown `--with-PACKAGE' and
+`--enable-FEATURE' options elicit only a warning, to support
+configuring entire source trees.
+
+ Source trees often contain multiple packages with a top-level
+`configure' script that uses the `AC_CONFIG_SUBDIRS' macro (*note
+Subdirectories::). Because the packages generally support different
+`--with-PACKAGE' and `--enable-FEATURE' options, the GNU Coding
+Standards say they must accept unrecognized options without halting.
+Even a warning message is undesirable here, so `AC_CONFIG_SUBDIRS'
+automatically disables the warnings.
+
+ This default behavior may be modified in two ways. First, the
+installer can invoke `configure --disable-option-checking' to disable
+these warnings, or invoke `configure --enable-option-checking=fatal'
+options to turn them into fatal errors, respectively. Second, the
+maintainer can use `AC_DISABLE_OPTION_CHECKING'.
+
+ -- Macro: AC_DISABLE_OPTION_CHECKING
+ By default, disable warnings related to any unrecognized
+ `--with-PACKAGE' or `--enable-FEATURE' options. This is implied
+ by `AC_CONFIG_SUBDIRS'.
+
+ The installer can override this behavior by passing
+ `--enable-option-checking' (enable warnings) or
+ `--enable-option-checking=fatal' (enable errors) to `configure'.
+
+
+File: autoconf.info, Node: Site Details, Next: Transforming Names, Prev: Option Checking, Up: Site Configuration
+
+15.6 Configuring Site Details
+=============================
+
+Some software packages require complex site-specific information. Some
+examples are host names to use for certain services, company names, and
+email addresses to contact. Since some configuration scripts generated
+by Metaconfig ask for such information interactively, people sometimes
+wonder how to get that information in Autoconf-generated configuration
+scripts, which aren't interactive.
+
+ Such site configuration information should be put in a file that is
+edited _only by users_, not by programs. The location of the file can
+either be based on the `prefix' variable, or be a standard location
+such as the user's home directory. It could even be specified by an
+environment variable. The programs should examine that file at
+runtime, rather than at compile time. Runtime configuration is more
+convenient for users and makes the configuration process simpler than
+getting the information while configuring. *Note Variables for
+Installation Directories: (standards)Directory Variables, for more
+information on where to put data files.
+
+
+File: autoconf.info, Node: Transforming Names, Next: Site Defaults, Prev: Site Details, Up: Site Configuration
+
+15.7 Transforming Program Names When Installing
+===============================================
+
+Autoconf supports changing the names of programs when installing them.
+In order to use these transformations, `configure.ac' must call the
+macro `AC_ARG_PROGRAM'.
+
+ -- Macro: AC_ARG_PROGRAM
+ Place in output variable `program_transform_name' a sequence of
+ `sed' commands for changing the names of installed programs.
+
+ If any of the options described below are given to `configure',
+ program names are transformed accordingly. Otherwise, if
+ `AC_CANONICAL_TARGET' has been called and a `--target' value is
+ given, the target type followed by a dash is used as a prefix.
+ Otherwise, no program name transformation is done.
+
+* Menu:
+
+* Transformation Options:: `configure' options to transform names
+* Transformation Examples:: Sample uses of transforming names
+* Transformation Rules:: Makefile uses of transforming names
+
+
+File: autoconf.info, Node: Transformation Options, Next: Transformation Examples, Up: Transforming Names
+
+15.7.1 Transformation Options
+-----------------------------
+
+You can specify name transformations by giving `configure' these
+command line options:
+
+`--program-prefix=PREFIX'
+ prepend PREFIX to the names;
+
+`--program-suffix=SUFFIX'
+ append SUFFIX to the names;
+
+`--program-transform-name=EXPRESSION'
+ perform `sed' substitution EXPRESSION on the names.
+
+
+File: autoconf.info, Node: Transformation Examples, Next: Transformation Rules, Prev: Transformation Options, Up: Transforming Names
+
+15.7.2 Transformation Examples
+------------------------------
+
+These transformations are useful with programs that can be part of a
+cross-compilation development environment. For example, a
+cross-assembler running on a Sun 4 configured with
+`--target=i960-vxworks' is normally installed as `i960-vxworks-as',
+rather than `as', which could be confused with a native Sun 4 assembler.
+
+ You can force a program name to begin with `g', if you don't want
+GNU programs installed on your system to shadow other programs with the
+same name. For example, if you configure GNU `diff' with
+`--program-prefix=g', then when you run `make install' it is installed
+as `/usr/local/bin/gdiff'.
+
+ As a more sophisticated example, you could use
+
+ --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
+ to prepend `g' to most of the program names in a source tree,
+excepting those like `gdb' that already have one and those like `less'
+and `lesskey' that aren't GNU programs. (That is assuming that you
+have a source tree containing those programs that is set up to use this
+feature.)
+
+ One way to install multiple versions of some programs simultaneously
+is to append a version number to the name of one or both. For example,
+if you want to keep Autoconf version 1 around for awhile, you can
+configure Autoconf version 2 using `--program-suffix=2' to install the
+programs as `/usr/local/bin/autoconf2', `/usr/local/bin/autoheader2',
+etc. Nevertheless, pay attention that only the binaries are renamed,
+therefore you'd have problems with the library files which might
+overlap.
+
+
+File: autoconf.info, Node: Transformation Rules, Prev: Transformation Examples, Up: Transforming Names
+
+15.7.3 Transformation Rules
+---------------------------
+
+Here is how to use the variable `program_transform_name' in a
+`Makefile.in':
+
+ PROGRAMS = cp ls rm
+ transform = @program_transform_name@
+ install:
+ for p in $(PROGRAMS); do \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
+ sed '$(transform)'`; \
+ done
+
+ uninstall:
+ for p in $(PROGRAMS); do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
+ done
+
+ It is guaranteed that `program_transform_name' is never empty, and
+that there are no useless separators. Therefore you may safely embed
+`program_transform_name' within a sed program using `;':
+
+ transform = @program_transform_name@
+ transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
+
+ Whether to do the transformations on documentation files (Texinfo or
+`man') is a tricky question; there seems to be no perfect answer, due
+to the several reasons for name transforming. Documentation is not
+usually particular to a specific architecture, and Texinfo files do not
+conflict with system documentation. But they might conflict with
+earlier versions of the same files, and `man' pages sometimes do
+conflict with system documentation. As a compromise, it is probably
+best to do name transformations on `man' pages but not on Texinfo
+manuals.
+
+
+File: autoconf.info, Node: Site Defaults, Prev: Transforming Names, Up: Site Configuration
+
+15.8 Setting Site Defaults
+==========================
+
+Autoconf-generated `configure' scripts allow your site to provide
+default values for some configuration values. You do this by creating
+site- and system-wide initialization files.
+
+ If the environment variable `CONFIG_SITE' is set, `configure' uses
+its value as the name of a shell script to read; it is recommended that
+this be an absolute file name. Otherwise, it reads the shell script
+`PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site'
+if it exists. Thus, settings in machine-specific files override those
+in machine-independent ones in case of conflict.
+
+ Site files can be arbitrary shell scripts, but only certain kinds of
+code are really appropriate to be in them. Because `configure' reads
+any cache file after it has read any site files, a site file can define
+a default cache file to be shared between all Autoconf-generated
+`configure' scripts run on that system (*note Cache Files::). If you
+set a default cache file in a site file, it is a good idea to also set
+the output variable `CC' in that site file, because the cache file is
+only valid for a particular compiler, but many systems have several
+available.
+
+ You can examine or override the value set by a command line option to
+`configure' in a site file; options set shell variables that have the
+same names as the options, with any dashes turned into underscores.
+The exceptions are that `--without-' and `--disable-' options are like
+giving the corresponding `--with-' or `--enable-' option and the value
+`no'. Thus, `--cache-file=localcache' sets the variable `cache_file'
+to the value `localcache'; `--enable-warnings=no' or
+`--disable-warnings' sets the variable `enable_warnings' to the value
+`no'; `--prefix=/usr' sets the variable `prefix' to the value `/usr';
+etc.
+
+ Site files are also good places to set default values for other
+output variables, such as `CFLAGS', if you need to give them non-default
+values: anything you would normally do, repetitively, on the command
+line. If you use non-default values for PREFIX or EXEC_PREFIX
+(wherever you locate the site file), you can set them in the site file
+if you specify it with the `CONFIG_SITE' environment variable.
+
+ You can set some cache values in the site file itself. Doing this is
+useful if you are cross-compiling, where it is impossible to check
+features that require running a test program. You could "prime the
+cache" by setting those values correctly for that system in
+`PREFIX/etc/config.site'. To find out the names of the cache variables
+you need to set, see the documentation of the respective Autoconf
+macro. If the variables or their semantics are undocumented, you may
+need to look for shell variables with `_cv_' in their names in the
+affected `configure' scripts, or in the Autoconf M4 source code for
+those macros; but in that case, their name or semantics may change in a
+future Autoconf version.
+
+ The cache file is careful to not override any variables set in the
+site files. Similarly, you should not override command-line options in
+the site files. Your code should check that variables such as `prefix'
+and `cache_file' have their default values (as set near the top of
+`configure') before changing them.
+
+ Here is a sample file `/usr/share/local/gnu/share/config.site'. The
+command `configure --prefix=/usr/share/local/gnu' would read this file
+(if `CONFIG_SITE' is not set to a different file).
+
+ # /usr/share/local/gnu/share/config.site for configure
+ #
+ # Change some defaults.
+ test "$prefix" = NONE && prefix=/usr/share/local/gnu
+ test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
+ test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var
+ test "$localstatedir" = '${prefix}/var' && localstatedir=/var
+
+ # Give Autoconf 2.x generated configure scripts a shared default
+ # cache file for feature test results, architecture-specific.
+ if test "$cache_file" = /dev/null; then
+ cache_file="$prefix/var/config.cache"
+ # A cache file is only valid for one C compiler.
+ CC=gcc
+ fi
+
+ Another use of `config.site' is for priming the directory variables
+in a manner consistent with the Filesystem Hierarchy Standard (FHS).
+Once the following file is installed at `/usr/share/config.site', a
+user can execute simply `./configure --prefix=/usr' to get all the
+directories chosen in the locations recommended by FHS.
+
+ # /usr/share/config.site for FHS defaults when installing below /usr,
+ # and the respective settings were not changed on the command line.
+ if test "$prefix" = /usr; then
+ test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc
+ test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var
+ test "$localstatedir" = '${prefix}/var' && localstatedir=/var
+ fi
+
+ Likewise, on platforms where 64-bit libraries are built by default,
+then installed in `/usr/local/lib64' instead of `/usr/local/lib', it is
+appropriate to install `/usr/local/share/config.site':
+
+ # /usr/local/share/config.site for platforms that prefer
+ # the directory /usr/local/lib64 over /usr/local/lib.
+ test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64'
+
+
+File: autoconf.info, Node: Running configure Scripts, Next: config.status Invocation, Prev: Site Configuration, Up: Top
+
+16 Running `configure' Scripts
+******************************
+
+Below are instructions on how to configure a package that uses a
+`configure' script, suitable for inclusion as an `INSTALL' file in the
+package. A plain-text version of `INSTALL' which you may use comes
+with Autoconf.
+
+* Menu:
+
+* Basic Installation:: Instructions for typical cases
+* Compilers and Options:: Selecting compilers and optimization
+* Multiple Architectures:: Compiling for multiple architectures at once
+* Installation Names:: Installing in different directories
+* Optional Features:: Selecting optional features
+* Particular Systems:: Particular systems
+* System Type:: Specifying the system type
+* Sharing Defaults:: Setting site-wide defaults for `configure'
+* Defining Variables:: Specifying the compiler etc.
+* configure Invocation:: Changing how `configure' runs
+
+
+File: autoconf.info, Node: Basic Installation, Next: Compilers and Options, Up: Running configure Scripts
+
+16.1 Basic Installation
+=======================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. More recommendations for GNU
+packages can be found in *note Makefile Conventions:
+(standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+
+File: autoconf.info, Node: Compilers and Options, Next: Multiple Architectures, Prev: Basic Installation, Up: Running configure Scripts
+
+16.2 Compilers and Options
+==========================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+
+File: autoconf.info, Node: Multiple Architectures, Next: Installation Names, Prev: Compilers and Options, Up: Running configure Scripts
+
+16.3 Compiling For Multiple Architectures
+=========================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+
+File: autoconf.info, Node: Installation Names, Next: Optional Features, Prev: Multiple Architectures, Up: Running configure Scripts
+
+16.4 Installation Names
+=======================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+
+File: autoconf.info, Node: Optional Features, Next: Particular Systems, Prev: Installation Names, Up: Running configure Scripts
+
+16.5 Optional Features
+======================
+
+If the package supports it, you can cause programs to be installed with
+an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+
+File: autoconf.info, Node: Particular Systems, Next: System Type, Prev: Optional Features, Up: Running configure Scripts
+
+16.6 Particular systems
+=======================
+
+On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is
+not installed, it is recommended to use the following options in order
+to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+
+File: autoconf.info, Node: System Type, Next: Sharing Defaults, Prev: Particular Systems, Up: Running configure Scripts
+
+16.7 Specifying the System Type
+===============================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+
+File: autoconf.info, Node: Sharing Defaults, Next: Defining Variables, Prev: System Type, Up: Running configure Scripts
+
+16.8 Sharing Defaults
+=====================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+
+File: autoconf.info, Node: Defining Variables, Next: configure Invocation, Prev: Sharing Defaults, Up: Running configure Scripts
+
+16.9 Defining Variables
+=======================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+
+File: autoconf.info, Node: configure Invocation, Prev: Defining Variables, Up: Running configure Scripts
+
+16.10 `configure' Invocation
+============================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
+
+File: autoconf.info, Node: config.status Invocation, Next: Obsolete Constructs, Prev: Running configure Scripts, Up: Top
+
+17 config.status Invocation
+***************************
+
+The `configure' script creates a file named `config.status', which
+actually configures, "instantiates", the template files. It also
+records the configuration options that were specified when the package
+was last configured in case reconfiguring is needed.
+
+ Synopsis:
+ ./config.status [OPTION]... [TAG]...
+
+ It configures each TAG; if none are specified, all the templates are
+instantiated. A TAG refers to a file or other tag associated with a
+configuration action, as specified by an `AC_CONFIG_ITEMS' macro (*note
+Configuration Actions::). The files must be specified without their
+dependencies, as in
+
+ ./config.status foobar
+
+not
+
+ ./config.status foobar:foo.in:bar.in
+
+ The supported options are:
+
+`--help'
+`-h'
+ Print a summary of the command line options, the list of the
+ template files, and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and the configuration
+ settings, and exit.
+
+`--config'
+ Print the configuration settings in reusable way, quoted for the
+ shell, and exit. For example, for a debugging build that
+ otherwise reuses the configuration from a different build
+ directory BUILD-DIR of a package in SRC-DIR, you could use the
+ following:
+
+ args=`BUILD-DIR/config.status --config`
+ eval SRC-DIR/configure "$args" CFLAGS=-g --srcdir=SRC-DIR
+
+ Note that it may be necessary to override a `--srcdir' setting
+ that was saved in the configuration, if the arguments are used in a
+ different build directory.
+
+`--silent'
+`--quiet'
+`-q'
+ Do not print progress messages.
+
+`--debug'
+`-d'
+ Don't remove the temporary files.
+
+`--file=FILE[:TEMPLATE]'
+ Require that FILE be instantiated as if
+ `AC_CONFIG_FILES(FILE:TEMPLATE)' was used. Both FILE and TEMPLATE
+ may be `-' in which case the standard output and/or standard
+ input, respectively, is used. If a TEMPLATE file name is
+ relative, it is first looked for in the build tree, and then in
+ the source tree. *Note Configuration Actions::, for more details.
+
+ This option and the following ones provide one way for separately
+ distributed packages to share the values computed by `configure'.
+ Doing so can be useful if some of the packages need a superset of
+ the features that one of them, perhaps a common library, does.
+ These options allow a `config.status' file to create files other
+ than the ones that its `configure.ac' specifies, so it can be used
+ for a different package, or for extracting a subset of values.
+ For example,
+
+ echo '@CC@' | ./config.status --file=-
+
+ provides the value of `@CC@' on standard output.
+
+`--header=FILE[:TEMPLATE]'
+ Same as `--file' above, but with `AC_CONFIG_HEADERS'.
+
+`--recheck'
+ Ask `config.status' to update itself and exit (no instantiation).
+ This option is useful if you change `configure', so that the
+ results of some tests might be different from the previous run.
+ The `--recheck' option reruns `configure' with the same arguments
+ you used before, plus the `--no-create' option, which prevents
+ `configure' from running `config.status' and creating `Makefile'
+ and other files, and the `--no-recursion' option, which prevents
+ `configure' from running other `configure' scripts in
+ subdirectories. (This is so other Make rules can run
+ `config.status' when it changes; *note Automatic Remaking::, for
+ an example).
+
+ `config.status' checks several optional environment variables that
+can alter its behavior:
+
+ -- Variable: CONFIG_SHELL
+ The shell with which to run `configure'. It must be
+ Bourne-compatible, and the absolute name of the shell should be
+ passed. The default is a shell that supports `LINENO' if
+ available, and `/bin/sh' otherwise.
+
+ -- Variable: CONFIG_STATUS
+ The file name to use for the shell script that records the
+ configuration. The default is `./config.status'. This variable is
+ useful when one package uses parts of another and the `configure'
+ scripts shouldn't be merged because they are maintained separately.
+
+ You can use `./config.status' in your makefiles. For example, in
+the dependencies given above (*note Automatic Remaking::),
+`config.status' is run twice when `configure.ac' has changed. If that
+bothers you, you can make each run only regenerate the files for that
+rule:
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+ ./config.status config.h
+ echo > stamp-h
+
+ Makefile: Makefile.in config.status
+ ./config.status Makefile
+
+ The calling convention of `config.status' has changed; see *note
+Obsolete config.status Use::, for details.
+
+
+File: autoconf.info, Node: Obsolete Constructs, Next: Using Autotest, Prev: config.status Invocation, Up: Top
+
+18 Obsolete Constructs
+**********************
+
+Autoconf changes, and throughout the years some constructs have been
+obsoleted. Most of the changes involve the macros, but in some cases
+the tools themselves, or even some concepts, are now considered
+obsolete.
+
+ You may completely skip this chapter if you are new to Autoconf. Its
+intention is mainly to help maintainers updating their packages by
+understanding how to move to more modern constructs.
+
+* Menu:
+
+* Obsolete config.status Use:: Obsolete convention for `config.status'
+* acconfig Header:: Additional entries in `config.h.in'
+* autoupdate Invocation:: Automatic update of `configure.ac'
+* Obsolete Macros:: Backward compatibility macros
+* Autoconf 1:: Tips for upgrading your files
+* Autoconf 2.13:: Some fresher tips
+
+
+File: autoconf.info, Node: Obsolete config.status Use, Next: acconfig Header, Up: Obsolete Constructs
+
+18.1 Obsolete `config.status' Invocation
+========================================
+
+`config.status' now supports arguments to specify the files to
+instantiate; see *note config.status Invocation::, for more details.
+Before, environment variables had to be used.
+
+ -- Variable: CONFIG_COMMANDS
+ The tags of the commands to execute. The default is the arguments
+ given to `AC_OUTPUT' and `AC_CONFIG_COMMANDS' in `configure.ac'.
+
+ -- Variable: CONFIG_FILES
+ The files in which to perform `@VARIABLE@' substitutions. The
+ default is the arguments given to `AC_OUTPUT' and
+ `AC_CONFIG_FILES' in `configure.ac'.
+
+ -- Variable: CONFIG_HEADERS
+ The files in which to substitute C `#define' statements. The
+ default is the arguments given to `AC_CONFIG_HEADERS'; if that
+ macro was not called, `config.status' ignores this variable.
+
+ -- Variable: CONFIG_LINKS
+ The symbolic links to establish. The default is the arguments
+ given to `AC_CONFIG_LINKS'; if that macro was not called,
+ `config.status' ignores this variable.
+
+ In *note config.status Invocation::, using this old interface, the
+example would be:
+
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+ CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
+ CONFIG_HEADERS=config.h ./config.status
+ echo > stamp-h
+
+ Makefile: Makefile.in config.status
+ CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
+ CONFIG_FILES=Makefile ./config.status
+
+(If `configure.ac' does not call `AC_CONFIG_HEADERS', there is no need
+to set `CONFIG_HEADERS' in the `make' rules. Equally for
+`CONFIG_COMMANDS', etc.)
+
+
+File: autoconf.info, Node: acconfig Header, Next: autoupdate Invocation, Prev: Obsolete config.status Use, Up: Obsolete Constructs
+
+18.2 `acconfig.h'
+=================
+
+In order to produce `config.h.in', `autoheader' needs to build or to
+find templates for each symbol. Modern releases of Autoconf use
+`AH_VERBATIM' and `AH_TEMPLATE' (*note Autoheader Macros::), but in
+older releases a file, `acconfig.h', contained the list of needed
+templates. `autoheader' copied comments and `#define' and `#undef'
+statements from `acconfig.h' in the current directory, if present.
+This file used to be mandatory if you `AC_DEFINE' any additional
+symbols.
+
+ Modern releases of Autoconf also provide `AH_TOP' and `AH_BOTTOM' if
+you need to prepend/append some information to `config.h.in'. Ancient
+versions of Autoconf had a similar feature: if `./acconfig.h' contains
+the string `@TOP@', `autoheader' copies the lines before the line
+containing `@TOP@' into the top of the file that it generates.
+Similarly, if `./acconfig.h' contains the string `@BOTTOM@',
+`autoheader' copies the lines after that line to the end of the file it
+generates. Either or both of those strings may be omitted. An even
+older alternate way to produce the same effect in ancient versions of
+Autoconf is to create the files `FILE.top' (typically `config.h.top')
+and/or `FILE.bot' in the current directory. If they exist,
+`autoheader' copies them to the beginning and end, respectively, of its
+output.
+
+ In former versions of Autoconf, the files used in preparing a
+software package for distribution were:
+ configure.ac --. .------> autoconf* -----> configure
+ +---+
+ [aclocal.m4] --+ `---.
+ [acsite.m4] ---' |
+ +--> [autoheader*] -> [config.h.in]
+ [acconfig.h] ----. |
+ +-----'
+ [config.h.top] --+
+ [config.h.bot] --'
+
+ Using only the `AH_' macros, `configure.ac' should be
+self-contained, and should not depend upon `acconfig.h' etc.
+
+
+File: autoconf.info, Node: autoupdate Invocation, Next: Obsolete Macros, Prev: acconfig Header, Up: Obsolete Constructs
+
+18.3 Using `autoupdate' to Modernize `configure.ac'
+===================================================
+
+The `autoupdate' program updates a `configure.ac' file that calls
+Autoconf macros by their old names to use the current macro names. In
+version 2 of Autoconf, most of the macros were renamed to use a more
+uniform and descriptive naming scheme. *Note Macro Names::, for a
+description of the new scheme. Although the old names still work
+(*note Obsolete Macros::, for a list of the old macros and the
+corresponding new names), you can make your `configure.ac' files more
+readable and make it easier to use the current Autoconf documentation
+if you update them to use the new macro names.
+
+ If given no arguments, `autoupdate' updates `configure.ac', backing
+up the original version with the suffix `~' (or the value of the
+environment variable `SIMPLE_BACKUP_SUFFIX', if that is set). If you
+give `autoupdate' an argument, it reads that file instead of
+`configure.ac' and writes the updated file to the standard output.
+
+`autoupdate' accepts the following options:
+
+`--help'
+`-h'
+ Print a summary of the command line options and exit.
+
+`--version'
+`-V'
+ Print the version number of Autoconf and exit.
+
+`--verbose'
+`-v'
+ Report processing steps.
+
+`--debug'
+`-d'
+ Don't remove the temporary files.
+
+`--force'
+`-f'
+ Force the update even if the file has not changed. Disregard the
+ cache.
+
+`--include=DIR'
+`-I DIR'
+ Also look for input files in DIR. Multiple invocations accumulate.
+ Directories are browsed from last to first.
+
+`--prepend-include=DIR'
+`-B DIR'
+ Prepend directory DIR to the search path. This is used to include
+ the language-specific files before any third-party macros.
+
+
+File: autoconf.info, Node: Obsolete Macros, Next: Autoconf 1, Prev: autoupdate Invocation, Up: Obsolete Constructs
+
+18.4 Obsolete Macros
+====================
+
+Several macros are obsoleted in Autoconf, for various reasons (typically
+they failed to quote properly, couldn't be extended for more recent
+issues, etc.). They are still supported, but deprecated: their use
+should be avoided.
+
+ During the jump from Autoconf version 1 to version 2, most of the
+macros were renamed to use a more uniform and descriptive naming scheme,
+but their signature did not change. *Note Macro Names::, for a
+description of the new naming scheme. Below, if there is just the
+mapping from old names to new names for these macros, the reader is
+invited to refer to the definition of the new macro for the signature
+and the description.
+
+ -- Macro: AC_AIX
+ This macro is a platform-specific subset of
+ `AC_USE_SYSTEM_EXTENSIONS' (*note AC_USE_SYSTEM_EXTENSIONS::).
+
+ -- Macro: AC_ALLOCA
+ Replaced by `AC_FUNC_ALLOCA' (*note AC_FUNC_ALLOCA::).
+
+ -- Macro: AC_ARG_ARRAY
+ Removed because of limited usefulness.
+
+ -- Macro: AC_C_CROSS
+ This macro is obsolete; it does nothing.
+
+ -- Macro: AC_C_LONG_DOUBLE
+ If the C compiler supports a working `long double' type with more
+ range or precision than the `double' type, define
+ `HAVE_LONG_DOUBLE'.
+
+ You should use `AC_TYPE_LONG_DOUBLE' or
+ `AC_TYPE_LONG_DOUBLE_WIDER' instead. *Note Particular Types::.
+
+ -- Macro: AC_CANONICAL_SYSTEM
+ Determine the system type and set output variables to the names of
+ the canonical system types. *Note Canonicalizing::, for details
+ about the variables this macro sets.
+
+ The user is encouraged to use either `AC_CANONICAL_BUILD', or
+ `AC_CANONICAL_HOST', or `AC_CANONICAL_TARGET', depending on the
+ needs. Using `AC_CANONICAL_TARGET' is enough to run the two other
+ macros (*note Canonicalizing::).
+
+ -- Macro: AC_CHAR_UNSIGNED
+ Replaced by `AC_C_CHAR_UNSIGNED' (*note AC_C_CHAR_UNSIGNED::).
+
+ -- Macro: AC_CHECK_TYPE (TYPE, DEFAULT)
+ Autoconf, up to 2.13, used to provide this version of
+ `AC_CHECK_TYPE', deprecated because of its flaws. First, although
+ it is a member of the `CHECK' clan, it does more than just
+ checking. Secondly, missing types are defined using `#define',
+ not `typedef', and this can lead to problems in the case of
+ pointer types.
+
+ This use of `AC_CHECK_TYPE' is obsolete and discouraged; see *note
+ Generic Types::, for the description of the current macro.
+
+ If the type TYPE is not defined, define it to be the C (or C++)
+ builtin type DEFAULT, e.g., `short int' or `unsigned int'.
+
+ This macro is equivalent to:
+
+ AC_CHECK_TYPE([TYPE], [],
+ [AC_DEFINE_UNQUOTED([TYPE], [DEFAULT],
+ [Define to `DEFAULT'
+ if <sys/types.h> does not define.])])
+
+ In order to keep backward compatibility, the two versions of
+ `AC_CHECK_TYPE' are implemented, selected using these heuristics:
+
+ 1. If there are three or four arguments, the modern version is
+ used.
+
+ 2. If the second argument appears to be a C or C++ type, then the
+ obsolete version is used. This happens if the argument is a
+ C or C++ _builtin_ type or a C identifier ending in `_t',
+ optionally followed by one of `[(* ' and then by a string of
+ zero or more characters taken from the set `[]()* _a-zA-Z0-9'.
+
+ 3. If the second argument is spelled with the alphabet of valid
+ C and C++ types, the user is warned and the modern version is
+ used.
+
+ 4. Otherwise, the modern version is used.
+
+ You are encouraged either to use a valid builtin type, or to use
+ the equivalent modern code (see above), or better yet, to use
+ `AC_CHECK_TYPES' together with
+
+ #ifndef HAVE_LOFF_T
+ typedef loff_t off_t;
+ #endif
+
+ -- Macro: AC_CHECKING (FEATURE-DESCRIPTION)
+ Same as
+
+ AC_MSG_NOTICE([checking FEATURE-DESCRIPTION...]
+
+ *Note AC_MSG_NOTICE::.
+
+ -- Macro: AC_COMPILE_CHECK (ECHO-TEXT, INCLUDES, FUNCTION-BODY,
+ ACTION-IF-TRUE, [ACTION-IF-FALSE])
+ This is an obsolete version of `AC_TRY_COMPILE' itself replaced by
+ `AC_COMPILE_IFELSE' (*note Running the Compiler::), with the
+ addition that it prints `checking for ECHO-TEXT' to the standard
+ output first, if ECHO-TEXT is non-empty. Use `AC_MSG_CHECKING'
+ and `AC_MSG_RESULT' instead to print messages (*note Printing
+ Messages::).
+
+ -- Macro: AC_CONST
+ Replaced by `AC_C_CONST' (*note AC_C_CONST::).
+
+ -- Macro: AC_CROSS_CHECK
+ Same as `AC_C_CROSS', which is obsolete too, and does nothing
+ `:-)'.
+
+ -- Macro: AC_CYGWIN
+ Check for the Cygwin environment in which case the shell variable
+ `CYGWIN' is set to `yes'. Don't use this macro, the dignified
+ means to check the nature of the host is using `AC_CANONICAL_HOST'
+ (*note Canonicalizing::). As a matter of fact this macro is
+ defined as:
+
+ AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
+ case $host_os in
+ *cygwin* ) CYGWIN=yes;;
+ * ) CYGWIN=no;;
+ esac
+
+ Beware that the variable `CYGWIN' has a special meaning when
+ running Cygwin, and should not be changed. That's yet another
+ reason not to use this macro.
+
+ -- Macro: AC_DECL_SYS_SIGLIST
+ Same as:
+
+ AC_CHECK_DECLS([sys_siglist], [], [],
+ [#include <signal.h>
+ /* NetBSD declares sys_siglist in unistd.h. */
+ #ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+ ])
+
+ *Note AC_CHECK_DECLS::.
+
+ -- Macro: AC_DECL_YYTEXT
+ Does nothing, now integrated in `AC_PROG_LEX' (*note
+ AC_PROG_LEX::).
+
+ -- Macro: AC_DIR_HEADER
+ Like calling `AC_FUNC_CLOSEDIR_VOID' (*note
+ AC_FUNC_CLOSEDIR_VOID::) and `AC_HEADER_DIRENT' (*note
+ AC_HEADER_DIRENT::), but defines a different set of C preprocessor
+ macros to indicate which header file is found:
+
+ Header Old Symbol New Symbol
+ `dirent.h' `DIRENT' `HAVE_DIRENT_H'
+ `sys/ndir.h' `SYSNDIR' `HAVE_SYS_NDIR_H'
+ `sys/dir.h' `SYSDIR' `HAVE_SYS_DIR_H'
+ `ndir.h' `NDIR' `HAVE_NDIR_H'
+
+ -- Macro: AC_DYNIX_SEQ
+ If on DYNIX/ptx, add `-lseq' to output variable `LIBS'. This
+ macro used to be defined as
+
+ AC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])
+
+ now it is just `AC_FUNC_GETMNTENT' (*note AC_FUNC_GETMNTENT::).
+
+ -- Macro: AC_EXEEXT
+ Defined the output variable `EXEEXT' based on the output of the
+ compiler, which is now done automatically. Typically set to empty
+ string if Posix and `.exe' if a DOS variant.
+
+ -- Macro: AC_EMXOS2
+ Similar to `AC_CYGWIN' but checks for the EMX environment on OS/2
+ and sets `EMXOS2'. Don't use this macro, the dignified means to
+ check the nature of the host is using `AC_CANONICAL_HOST' (*note
+ Canonicalizing::).
+
+ -- Macro: AC_ENABLE (FEATURE, ACTION-IF-GIVEN, [ACTION-IF-NOT-GIVEN])
+ This is an obsolete version of `AC_ARG_ENABLE' that does not
+ support providing a help string (*note AC_ARG_ENABLE::).
+
+ -- Macro: AC_ERROR
+ Replaced by `AC_MSG_ERROR' (*note AC_MSG_ERROR::).
+
+ -- Macro: AC_FIND_X
+ Replaced by `AC_PATH_X' (*note AC_PATH_X::).
+
+ -- Macro: AC_FIND_XTRA
+ Replaced by `AC_PATH_XTRA' (*note AC_PATH_XTRA::).
+
+ -- Macro: AC_FOREACH
+ Replaced by `m4_foreach_w' (*note m4_foreach_w::).
+
+ -- Macro: AC_FUNC_CHECK
+ Replaced by `AC_CHECK_FUNC' (*note AC_CHECK_FUNC::).
+
+ -- Macro: AC_FUNC_SETVBUF_REVERSED
+ Do nothing. Formerly, this macro checked whether `setvbuf' takes
+ the buffering type as its second argument and the buffer pointer
+ as the third, instead of the other way around, and defined
+ `SETVBUF_REVERSED'. However, the last systems to have the problem
+ were those based on SVR2, which became obsolete in 1987, and the
+ macro is no longer needed.
+
+ -- Macro: AC_FUNC_WAIT3
+ If `wait3' is found and fills in the contents of its third argument
+ (a `struct rusage *'), which HP-UX does not do, define
+ `HAVE_WAIT3'.
+
+ These days portable programs should use `waitpid', not `wait3', as
+ `wait3' has been removed from Posix.
+
+ -- Macro: AC_GCC_TRADITIONAL
+ Replaced by `AC_PROG_GCC_TRADITIONAL' (*note
+ AC_PROG_GCC_TRADITIONAL::).
+
+ -- Macro: AC_GETGROUPS_T
+ Replaced by `AC_TYPE_GETGROUPS' (*note AC_TYPE_GETGROUPS::).
+
+ -- Macro: AC_GETLOADAVG
+ Replaced by `AC_FUNC_GETLOADAVG' (*note AC_FUNC_GETLOADAVG::).
+
+ -- Macro: AC_GNU_SOURCE
+ This macro is a platform-specific subset of
+ `AC_USE_SYSTEM_EXTENSIONS' (*note AC_USE_SYSTEM_EXTENSIONS::).
+
+ -- Macro: AC_HAVE_FUNCS
+ Replaced by `AC_CHECK_FUNCS' (*note AC_CHECK_FUNCS::).
+
+ -- Macro: AC_HAVE_HEADERS
+ Replaced by `AC_CHECK_HEADERS' (*note AC_CHECK_HEADERS::).
+
+ -- Macro: AC_HAVE_LIBRARY (LIBRARY, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES])
+ This macro is equivalent to calling `AC_CHECK_LIB' with a FUNCTION
+ argument of `main'. In addition, LIBRARY can be written as any of
+ `foo', `-lfoo', or `libfoo.a'. In all of those cases, the
+ compiler is passed `-lfoo'. However, LIBRARY cannot be a shell
+ variable; it must be a literal name. *Note AC_CHECK_LIB::.
+
+ -- Macro: AC_HAVE_POUNDBANG
+ Replaced by `AC_SYS_INTERPRETER' (*note AC_SYS_INTERPRETER::).
+
+ -- Macro: AC_HEADER_CHECK
+ Replaced by `AC_CHECK_HEADER' (*note AC_CHECK_HEADER::).
+
+ -- Macro: AC_HEADER_EGREP
+ Replaced by `AC_EGREP_HEADER' (*note AC_EGREP_HEADER::).
+
+ -- Macro: AC_HELP_STRING
+ Replaced by `AS_HELP_STRING' (*note AS_HELP_STRING::).
+
+ -- Macro: AC_INIT (UNIQUE-FILE-IN-SOURCE-DIR)
+ Formerly `AC_INIT' used to have a single argument, and was
+ equivalent to:
+
+ AC_INIT
+ AC_CONFIG_SRCDIR(UNIQUE-FILE-IN-SOURCE-DIR)
+ See *note AC_INIT:: and *note AC_CONFIG_SRCDIR::.
+
+ -- Macro: AC_INLINE
+ Replaced by `AC_C_INLINE' (*note AC_C_INLINE::).
+
+ -- Macro: AC_INT_16_BITS
+ If the C type `int' is 16 bits wide, define `INT_16_BITS'. Use
+ `AC_CHECK_SIZEOF(int)' instead (*note AC_CHECK_SIZEOF::).
+
+ -- Macro: AC_IRIX_SUN
+ If on IRIX (Silicon Graphics Unix), add `-lsun' to output `LIBS'.
+ If you were using it to get `getmntent', use `AC_FUNC_GETMNTENT'
+ instead. If you used it for the NIS versions of the password and
+ group functions, use `AC_CHECK_LIB(sun, getpwnam)'. Up to
+ Autoconf 2.13, it used to be
+
+ AC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])
+
+ now it is defined as
+
+ AC_FUNC_GETMNTENT
+ AC_CHECK_LIB([sun], [getpwnam])
+
+ See *note AC_FUNC_GETMNTENT:: and *note AC_CHECK_LIB::.
+
+ -- Macro: AC_ISC_POSIX
+ This macro adds `-lcposix' to output variable `LIBS' if necessary
+ for Posix facilities. Sun dropped support for the obsolete
+ INTERACTIVE Systems Corporation Unix on 2006-07-23. New programs
+ need not use this macro. It is implemented as
+ `AC_SEARCH_LIBS([strerror], [cposix])' (*note AC_SEARCH_LIBS::).
+
+ -- Macro: AC_LANG_C
+ Same as `AC_LANG([C])' (*note AC_LANG::).
+
+ -- Macro: AC_LANG_CPLUSPLUS
+ Same as `AC_LANG([C++])' (*note AC_LANG::).
+
+ -- Macro: AC_LANG_FORTRAN77
+ Same as `AC_LANG([Fortran 77])' (*note AC_LANG::).
+
+ -- Macro: AC_LANG_RESTORE
+ Select the LANGUAGE that is saved on the top of the stack, as set
+ by `AC_LANG_SAVE', remove it from the stack, and call
+ `AC_LANG(LANGUAGE)'. *Note Language Choice::, for the preferred
+ way to change languages.
+
+ -- Macro: AC_LANG_SAVE
+ Remember the current language (as set by `AC_LANG') on a stack.
+ The current language does not change. `AC_LANG_PUSH' is preferred
+ (*note AC_LANG_PUSH::).
+
+ -- Macro: AC_LINK_FILES (SOURCE..., DEST...)
+ This is an obsolete version of `AC_CONFIG_LINKS' (*note
+ AC_CONFIG_LINKS::. An updated version of:
+
+ AC_LINK_FILES(config/$machine.h config/$obj_format.h,
+ host.h object.h)
+
+ is:
+
+ AC_CONFIG_LINKS([host.h:config/$machine.h
+ object.h:config/$obj_format.h])
+
+ -- Macro: AC_LN_S
+ Replaced by `AC_PROG_LN_S' (*note AC_PROG_LN_S::).
+
+ -- Macro: AC_LONG_64_BITS
+ Define `LONG_64_BITS' if the C type `long int' is 64 bits wide.
+ Use the generic macro `AC_CHECK_SIZEOF([long int])' instead (*note
+ AC_CHECK_SIZEOF::).
+
+ -- Macro: AC_LONG_DOUBLE
+ If the C compiler supports a working `long double' type with more
+ range or precision than the `double' type, define
+ `HAVE_LONG_DOUBLE'.
+
+ You should use `AC_TYPE_LONG_DOUBLE' or
+ `AC_TYPE_LONG_DOUBLE_WIDER' instead. *Note Particular Types::.
+
+ -- Macro: AC_LONG_FILE_NAMES
+ Replaced by
+ AC_SYS_LONG_FILE_NAMES
+ *Note AC_SYS_LONG_FILE_NAMES::.
+
+ -- Macro: AC_MAJOR_HEADER
+ Replaced by `AC_HEADER_MAJOR' (*note AC_HEADER_MAJOR::).
+
+ -- Macro: AC_MEMORY_H
+ Used to define `NEED_MEMORY_H' if the `mem' functions were defined
+ in `memory.h'. Today it is equivalent to
+ `AC_CHECK_HEADERS([memory.h])' (*note AC_CHECK_HEADERS::). Adjust
+ your code to depend upon `HAVE_MEMORY_H', not `NEED_MEMORY_H'; see
+ *note Standard Symbols::.
+
+ -- Macro: AC_MINGW32
+ Similar to `AC_CYGWIN' but checks for the MinGW compiler
+ environment and sets `MINGW32'. Don't use this macro, the
+ dignified means to check the nature of the host is using
+ `AC_CANONICAL_HOST' (*note Canonicalizing::).
+
+ -- Macro: AC_MINIX
+ This macro is a platform-specific subset of
+ `AC_USE_SYSTEM_EXTENSIONS' (*note AC_USE_SYSTEM_EXTENSIONS::).
+
+ -- Macro: AC_MINUS_C_MINUS_O
+ Replaced by `AC_PROG_CC_C_O' (*note AC_PROG_CC_C_O::).
+
+ -- Macro: AC_MMAP
+ Replaced by `AC_FUNC_MMAP' (*note AC_FUNC_MMAP::).
+
+ -- Macro: AC_MODE_T
+ Replaced by `AC_TYPE_MODE_T' (*note AC_TYPE_MODE_T::).
+
+ -- Macro: AC_OBJEXT
+ Defined the output variable `OBJEXT' based on the output of the
+ compiler, after .c files have been excluded. Typically set to `o'
+ if Posix, `obj' if a DOS variant. Now the compiler checking
+ macros handle this automatically.
+
+ -- Macro: AC_OBSOLETE (THIS-MACRO-NAME, [SUGGESTION])
+ Make M4 print a message to the standard error output warning that
+ THIS-MACRO-NAME is obsolete, and giving the file and line number
+ where it was called. THIS-MACRO-NAME should be the name of the
+ macro that is calling `AC_OBSOLETE'. If SUGGESTION is given, it
+ is printed at the end of the warning message; for example, it can
+ be a suggestion for what to use instead of THIS-MACRO-NAME.
+
+ For instance
+
+ AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
+
+ You are encouraged to use `AU_DEFUN' instead, since it gives better
+ services to the user (*note AU_DEFUN::).
+
+ -- Macro: AC_OFF_T
+ Replaced by `AC_TYPE_OFF_T' (*note AC_TYPE_OFF_T::).
+
+ -- Macro: AC_OUTPUT ([FILE]..., [EXTRA-CMDS], [INIT-CMDS])
+ The use of `AC_OUTPUT' with arguments is deprecated. This
+ obsoleted interface is equivalent to:
+
+ AC_CONFIG_FILES(FILE...)
+ AC_CONFIG_COMMANDS([default],
+ EXTRA-CMDS, INIT-CMDS)
+ AC_OUTPUT
+
+ See *note AC_CONFIG_FILES::, *note AC_CONFIG_COMMANDS::, and *note
+ AC_OUTPUT::.
+
+ -- Macro: AC_OUTPUT_COMMANDS (EXTRA-CMDS, [INIT-CMDS])
+ Specify additional shell commands to run at the end of
+ `config.status', and shell commands to initialize any variables
+ from `configure'. This macro may be called multiple times. It is
+ obsolete, replaced by `AC_CONFIG_COMMANDS' (*note
+ AC_CONFIG_COMMANDS::).
+
+ Here is an unrealistic example:
+
+ fubar=27
+ AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
+ [fubar=$fubar])
+ AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
+ [echo init bit])
+
+ Aside from the fact that `AC_CONFIG_COMMANDS' requires an
+ additional key, an important difference is that
+ `AC_OUTPUT_COMMANDS' is quoting its arguments twice, unlike
+ `AC_CONFIG_COMMANDS'. This means that `AC_CONFIG_COMMANDS' can
+ safely be given macro calls as arguments:
+
+ AC_CONFIG_COMMANDS(foo, [my_FOO()])
+
+ Conversely, where one level of quoting was enough for literal
+ strings with `AC_OUTPUT_COMMANDS', you need two with
+ `AC_CONFIG_COMMANDS'. The following lines are equivalent:
+
+ AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
+ AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
+
+ -- Macro: AC_PID_T
+ Replaced by `AC_TYPE_PID_T' (*note AC_TYPE_PID_T::).
+
+ -- Macro: AC_PREFIX
+ Replaced by `AC_PREFIX_PROGRAM' (*note AC_PREFIX_PROGRAM::).
+
+ -- Macro: AC_PROGRAMS_CHECK
+ Replaced by `AC_CHECK_PROGS' (*note AC_CHECK_PROGS::).
+
+ -- Macro: AC_PROGRAMS_PATH
+ Replaced by `AC_PATH_PROGS' (*note AC_PATH_PROGS::).
+
+ -- Macro: AC_PROGRAM_CHECK
+ Replaced by `AC_CHECK_PROG' (*note AC_CHECK_PROG::).
+
+ -- Macro: AC_PROGRAM_EGREP
+ Replaced by `AC_EGREP_CPP' (*note AC_EGREP_CPP::).
+
+ -- Macro: AC_PROGRAM_PATH
+ Replaced by `AC_PATH_PROG' (*note AC_PATH_PROG::).
+
+ -- Macro: AC_REMOTE_TAPE
+ Removed because of limited usefulness.
+
+ -- Macro: AC_RESTARTABLE_SYSCALLS
+ This macro was renamed `AC_SYS_RESTARTABLE_SYSCALLS'. However,
+ these days portable programs should use `sigaction' with
+ `SA_RESTART' if they want restartable system calls. They should
+ not rely on `HAVE_RESTARTABLE_SYSCALLS', since nowadays whether a
+ system call is restartable is a dynamic issue, not a
+ configuration-time issue.
+
+ -- Macro: AC_RETSIGTYPE
+ Replaced by `AC_TYPE_SIGNAL' (*note AC_TYPE_SIGNAL::), which itself
+ is obsolete when assuming C89 or better.
+
+ -- Macro: AC_RSH
+ Removed because of limited usefulness.
+
+ -- Macro: AC_SCO_INTL
+ If on SCO Unix, add `-lintl' to output variable `LIBS'. This
+ macro used to do this:
+
+ AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])
+
+ Now it just calls `AC_FUNC_STRFTIME' instead (*note
+ AC_FUNC_STRFTIME::).
+
+ -- Macro: AC_SETVBUF_REVERSED
+ Replaced by
+ AC_FUNC_SETVBUF_REVERSED
+ *Note AC_FUNC_SETVBUF_REVERSED::.
+
+ -- Macro: AC_SET_MAKE
+ Replaced by `AC_PROG_MAKE_SET' (*note AC_PROG_MAKE_SET::).
+
+ -- Macro: AC_SIZEOF_TYPE
+ Replaced by `AC_CHECK_SIZEOF' (*note AC_CHECK_SIZEOF::).
+
+ -- Macro: AC_SIZE_T
+ Replaced by `AC_TYPE_SIZE_T' (*note AC_TYPE_SIZE_T::).
+
+ -- Macro: AC_STAT_MACROS_BROKEN
+ Replaced by `AC_HEADER_STAT' (*note AC_HEADER_STAT::).
+
+ -- Macro: AC_STDC_HEADERS
+ Replaced by `AC_HEADER_STDC' (*note AC_HEADER_STDC::).
+
+ -- Macro: AC_STRCOLL
+ Replaced by `AC_FUNC_STRCOLL' (*note AC_FUNC_STRCOLL::).
+
+ -- Macro: AC_STRUCT_ST_BLKSIZE
+ If `struct stat' contains an `st_blksize' member, define
+ `HAVE_STRUCT_STAT_ST_BLKSIZE'. The former name, `HAVE_ST_BLKSIZE'
+ is to be avoided, as its support will cease in the future. This
+ macro is obsoleted, and should be replaced by
+
+ AC_CHECK_MEMBERS([struct stat.st_blksize])
+ *Note AC_CHECK_MEMBERS::.
+
+ -- Macro: AC_STRUCT_ST_RDEV
+ If `struct stat' contains an `st_rdev' member, define
+ `HAVE_STRUCT_STAT_ST_RDEV'. The former name for this macro,
+ `HAVE_ST_RDEV', is to be avoided as it will cease to be supported
+ in the future. Actually, even the new macro is obsolete and
+ should be replaced by:
+ AC_CHECK_MEMBERS([struct stat.st_rdev])
+ *Note AC_CHECK_MEMBERS::.
+
+ -- Macro: AC_ST_BLKSIZE
+ Replaced by `AC_CHECK_MEMBERS' (*note AC_CHECK_MEMBERS::).
+
+ -- Macro: AC_ST_BLOCKS
+ Replaced by `AC_STRUCT_ST_BLOCKS' (*note AC_STRUCT_ST_BLOCKS::).
+
+ -- Macro: AC_ST_RDEV
+ Replaced by `AC_CHECK_MEMBERS' (*note AC_CHECK_MEMBERS::).
+
+ -- Macro: AC_SYS_RESTARTABLE_SYSCALLS
+ If the system automatically restarts a system call that is
+ interrupted by a signal, define `HAVE_RESTARTABLE_SYSCALLS'. This
+ macro does not check whether system calls are restarted in
+ general--it checks whether a signal handler installed with
+ `signal' (but not `sigaction') causes system calls to be
+ restarted. It does not check whether system calls can be
+ restarted when interrupted by signals that have no handler.
+
+ These days portable programs should use `sigaction' with
+ `SA_RESTART' if they want restartable system calls. They should
+ not rely on `HAVE_RESTARTABLE_SYSCALLS', since nowadays whether a
+ system call is restartable is a dynamic issue, not a
+ configuration-time issue.
+
+ -- Macro: AC_SYS_SIGLIST_DECLARED
+ This macro was renamed `AC_DECL_SYS_SIGLIST'. However, even that
+ name is obsolete, as the same functionality is now achieved via
+ `AC_CHECK_DECLS' (*note AC_CHECK_DECLS::).
+
+ -- Macro: AC_TEST_CPP
+ This macro was renamed `AC_TRY_CPP', which in turn was replaced by
+ `AC_PREPROC_IFELSE' (*note AC_PREPROC_IFELSE::).
+
+ -- Macro: AC_TEST_PROGRAM
+ This macro was renamed `AC_TRY_RUN', which in turn was replaced by
+ `AC_RUN_IFELSE' (*note AC_RUN_IFELSE::).
+
+ -- Macro: AC_TIMEZONE
+ Replaced by `AC_STRUCT_TIMEZONE' (*note AC_STRUCT_TIMEZONE::).
+
+ -- Macro: AC_TIME_WITH_SYS_TIME
+ Replaced by `AC_HEADER_TIME' (*note AC_HEADER_TIME::).
+
+ -- Macro: AC_TRY_COMPILE (INCLUDES, FUNCTION-BODY, [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+ Same as:
+
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[INCLUDES]],
+ [[FUNCTION-BODY]])],
+ [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+
+ *Note Running the Compiler::.
+
+ This macro double quotes both INCLUDES and FUNCTION-BODY.
+
+ For C and C++, INCLUDES is any `#include' statements needed by the
+ code in FUNCTION-BODY (INCLUDES is ignored if the currently
+ selected language is Fortran or Fortran 77). The compiler and
+ compilation flags are determined by the current language (*note
+ Language Choice::).
+
+ -- Macro: AC_TRY_CPP (INPUT, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+ Same as:
+
+ AC_PREPROC_IFELSE(
+ [AC_LANG_SOURCE([[INPUT]])],
+ [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+
+ *Note Running the Preprocessor::.
+
+ This macro double quotes the INPUT.
+
+ -- Macro: AC_TRY_LINK (INCLUDES, FUNCTION-BODY, [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+ Same as:
+
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[INCLUDES]],
+ [[FUNCTION-BODY]])],
+ [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE])
+
+ *Note Running the Compiler::.
+
+ This macro double quotes both INCLUDES and FUNCTION-BODY.
+
+ Depending on the current language (*note Language Choice::),
+ create a test program to see whether a function whose body
+ consists of FUNCTION-BODY can be compiled and linked. If the file
+ compiles and links successfully, run shell commands
+ ACTION-IF-FOUND, otherwise run ACTION-IF-NOT-FOUND.
+
+ This macro double quotes both INCLUDES and FUNCTION-BODY.
+
+ For C and C++, INCLUDES is any `#include' statements needed by the
+ code in FUNCTION-BODY (INCLUDES is ignored if the currently
+ selected language is Fortran or Fortran 77). The compiler and
+ compilation flags are determined by the current language (*note
+ Language Choice::), and in addition `LDFLAGS' and `LIBS' are used
+ for linking.
+
+ -- Macro: AC_TRY_LINK_FUNC (FUNCTION, [ACTION-IF-FOUND],
+ [ACTION-IF-NOT-FOUND])
+ This macro is equivalent to
+ AC_LINK_IFELSE([AC_LANG_CALL([], [FUNCTION])],
+ [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+ *Note AC_LINK_IFELSE::.
+
+ -- Macro: AC_TRY_RUN (PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE],
+ [ACTION-IF-CROSS-COMPILING = `AC_MSG_FAILURE'])
+ Same as:
+
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[PROGRAM]])],
+ [ACTION-IF-TRUE],
+ [ACTION-IF-FALSE],
+ [ACTION-IF-CROSS-COMPILING])
+
+ *Note Runtime::.
+
+ -- Macro: AC_TYPE_SIGNAL
+ If `signal.h' declares `signal' as returning a pointer to a
+ function returning `void', define `RETSIGTYPE' to be `void';
+ otherwise, define it to be `int'. These days, it is portable to
+ assume C89, and that signal handlers return `void', without
+ needing to use this macro or `RETSIGTYPE'.
+
+ When targeting older K&R C, it is possible to define signal
+ handlers as returning type `RETSIGTYPE', and omit a return
+ statement:
+
+ RETSIGTYPE
+ hup_handler ()
+ {
+ ...
+ }
+
+ -- Macro: AC_UID_T
+ Replaced by `AC_TYPE_UID_T' (*note AC_TYPE_UID_T::).
+
+ -- Macro: AC_UNISTD_H
+ Same as `AC_CHECK_HEADERS([unistd.h])' (*note AC_CHECK_HEADERS::).
+
+ -- Macro: AC_USG
+ Define `USG' if the BSD string functions are defined in
+ `strings.h'. You should no longer depend upon `USG', but on
+ `HAVE_STRING_H'; see *note Standard Symbols::.
+
+ -- Macro: AC_UTIME_NULL
+ Replaced by `AC_FUNC_UTIME_NULL' (*note AC_FUNC_UTIME_NULL::).
+
+ -- Macro: AC_VALIDATE_CACHED_SYSTEM_TUPLE ([CMD])
+ If the cache file is inconsistent with the current host, target and
+ build system types, it used to execute CMD or print a default
+ error message. This is now handled by default.
+
+ -- Macro: AC_VERBOSE (RESULT-DESCRIPTION)
+ Replaced by `AC_MSG_RESULT' (*note AC_MSG_RESULT::).
+
+ -- Macro: AC_VFORK
+ Replaced by `AC_FUNC_FORK' (*note AC_FUNC_FORK::).
+
+ -- Macro: AC_VPRINTF
+ Replaced by `AC_FUNC_VPRINTF' (*note AC_FUNC_VPRINTF::).
+
+ -- Macro: AC_WAIT3
+ This macro was renamed `AC_FUNC_WAIT3'. However, these days
+ portable programs should use `waitpid', not `wait3', as `wait3'
+ has been removed from Posix.
+
+ -- Macro: AC_WARN
+ Replaced by `AC_MSG_WARN' (*note AC_MSG_WARN::).
+
+ -- Macro: AC_WITH (PACKAGE, ACTION-IF-GIVEN, [ACTION-IF-NOT-GIVEN])
+ This is an obsolete version of `AC_ARG_WITH' that does not support
+ providing a help string (*note AC_ARG_WITH::).
+
+ -- Macro: AC_WORDS_BIGENDIAN
+ Replaced by `AC_C_BIGENDIAN' (*note AC_C_BIGENDIAN::).
+
+ -- Macro: AC_XENIX_DIR
+ This macro used to add `-lx' to output variable `LIBS' if on
+ Xenix. Also, if `dirent.h' is being checked for, added `-ldir' to
+ `LIBS'. Now it is merely an alias of `AC_HEADER_DIRENT' instead,
+ plus some code to detect whether running XENIX on which you should
+ not depend:
+
+ AC_MSG_CHECKING([for Xenix])
+ AC_EGREP_CPP([yes],
+ [#if defined M_XENIX && !defined M_UNIX
+ yes
+ #endif],
+ [AC_MSG_RESULT([yes]); XENIX=yes],
+ [AC_MSG_RESULT([no]); XENIX=])
+ Don't use this macro, the dignified means to check the nature of
+ the host is using `AC_CANONICAL_HOST' (*note Canonicalizing::).
+
+ -- Macro: AC_YYTEXT_POINTER
+ This macro was renamed `AC_DECL_YYTEXT', which in turn was
+ integrated into `AC_PROG_LEX' (*note AC_PROG_LEX::).
+
+
+File: autoconf.info, Node: Autoconf 1, Next: Autoconf 2.13, Prev: Obsolete Macros, Up: Obsolete Constructs
+
+18.5 Upgrading From Version 1
+=============================
+
+Autoconf version 2 is mostly backward compatible with version 1.
+However, it introduces better ways to do some things, and doesn't
+support some of the ugly things in version 1. So, depending on how
+sophisticated your `configure.ac' files are, you might have to do some
+manual work in order to upgrade to version 2. This chapter points out
+some problems to watch for when upgrading. Also, perhaps your
+`configure' scripts could benefit from some of the new features in
+version 2; the changes are summarized in the file `NEWS' in the
+Autoconf distribution.
+
+* Menu:
+
+* Changed File Names:: Files you might rename
+* Changed Makefiles:: New things to put in `Makefile.in'
+* Changed Macros:: Macro calls you might replace
+* Changed Results:: Changes in how to check test results
+* Changed Macro Writing:: Better ways to write your own macros
+
+
+File: autoconf.info, Node: Changed File Names, Next: Changed Makefiles, Up: Autoconf 1
+
+18.5.1 Changed File Names
+-------------------------
+
+If you have an `aclocal.m4' installed with Autoconf (as opposed to in a
+particular package's source directory), you must rename it to
+`acsite.m4'. *Note autoconf Invocation::.
+
+ If you distribute `install.sh' with your package, rename it to
+`install-sh' so `make' builtin rules don't inadvertently create a file
+called `install' from it. `AC_PROG_INSTALL' looks for the script under
+both names, but it is best to use the new name.
+
+ If you were using `config.h.top', `config.h.bot', or `acconfig.h',
+you still can, but you have less clutter if you use the `AH_' macros.
+*Note Autoheader Macros::.
+
+
+File: autoconf.info, Node: Changed Makefiles, Next: Changed Macros, Prev: Changed File Names, Up: Autoconf 1
+
+18.5.2 Changed Makefiles
+------------------------
+
+Add `@CFLAGS@', `@CPPFLAGS@', and `@LDFLAGS@' in your `Makefile.in'
+files, so they can take advantage of the values of those variables in
+the environment when `configure' is run. Doing this isn't necessary,
+but it's a convenience for users.
+
+ Also add `@configure_input@' in a comment to each input file for
+`AC_OUTPUT', so that the output files contain a comment saying they
+were produced by `configure'. Automatically selecting the right
+comment syntax for all the kinds of files that people call `AC_OUTPUT'
+on became too much work.
+
+ Add `config.log' and `config.cache' to the list of files you remove
+in `distclean' targets.
+
+ If you have the following in `Makefile.in':
+
+ prefix = /usr/local
+ exec_prefix = $(prefix)
+
+you must change it to:
+
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+
+The old behavior of replacing those variables without `@' characters
+around them has been removed.
+
+
+File: autoconf.info, Node: Changed Macros, Next: Changed Results, Prev: Changed Makefiles, Up: Autoconf 1
+
+18.5.3 Changed Macros
+---------------------
+
+Many of the macros were renamed in Autoconf version 2. You can still
+use the old names, but the new ones are clearer, and it's easier to find
+the documentation for them. *Note Obsolete Macros::, for a table
+showing the new names for the old macros. Use the `autoupdate' program
+to convert your `configure.ac' to using the new macro names. *Note
+autoupdate Invocation::.
+
+ Some macros have been superseded by similar ones that do the job
+better, but are not call-compatible. If you get warnings about calling
+obsolete macros while running `autoconf', you may safely ignore them,
+but your `configure' script generally works better if you follow the
+advice that is printed about what to replace the obsolete macros with.
+In particular, the mechanism for reporting the results of tests has
+changed. If you were using `echo' or `AC_VERBOSE' (perhaps via
+`AC_COMPILE_CHECK'), your `configure' script's output looks better if
+you switch to `AC_MSG_CHECKING' and `AC_MSG_RESULT'. *Note Printing
+Messages::. Those macros work best in conjunction with cache
+variables. *Note Caching Results::.
+
+
+File: autoconf.info, Node: Changed Results, Next: Changed Macro Writing, Prev: Changed Macros, Up: Autoconf 1
+
+18.5.4 Changed Results
+----------------------
+
+If you were checking the results of previous tests by examining the
+shell variable `DEFS', you need to switch to checking the values of the
+cache variables for those tests. `DEFS' no longer exists while
+`configure' is running; it is only created when generating output
+files. This difference from version 1 is because properly quoting the
+contents of that variable turned out to be too cumbersome and
+inefficient to do every time `AC_DEFINE' is called. *Note Cache
+Variable Names::.
+
+ For example, here is a `configure.ac' fragment written for Autoconf
+version 1:
+
+ AC_HAVE_FUNCS(syslog)
+ case "$DEFS" in
+ *-DHAVE_SYSLOG*) ;;
+ *) # syslog is not in the default libraries. See if it's in some other.
+ saved_LIBS="$LIBS"
+ for lib in bsd socket inet; do
+ AC_CHECKING(for syslog in -l$lib)
+ LIBS="-l$lib $saved_LIBS"
+ AC_HAVE_FUNCS(syslog)
+ case "$DEFS" in
+ *-DHAVE_SYSLOG*) break ;;
+ *) ;;
+ esac
+ LIBS="$saved_LIBS"
+ done ;;
+ esac
+
+ Here is a way to write it for version 2:
+
+ AC_CHECK_FUNCS([syslog])
+ if test "x$ac_cv_func_syslog" = xno; then
+ # syslog is not in the default libraries. See if it's in some other.
+ for lib in bsd socket inet; do
+ AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG])
+ LIBS="-l$lib $LIBS"; break])
+ done
+ fi
+
+ If you were working around bugs in `AC_DEFINE_UNQUOTED' by adding
+backslashes before quotes, you need to remove them. It now works
+predictably, and does not treat quotes (except back quotes) specially.
+*Note Setting Output Variables::.
+
+ All of the Boolean shell variables set by Autoconf macros now use
+`yes' for the true value. Most of them use `no' for false, though for
+backward compatibility some use the empty string instead. If you were
+relying on a shell variable being set to something like 1 or `t' for
+true, you need to change your tests.
+
+
+File: autoconf.info, Node: Changed Macro Writing, Prev: Changed Results, Up: Autoconf 1
+
+18.5.5 Changed Macro Writing
+----------------------------
+
+When defining your own macros, you should now use `AC_DEFUN' instead of
+`define'. `AC_DEFUN' automatically calls `AC_PROVIDE' and ensures that
+macros called via `AC_REQUIRE' do not interrupt other macros, to
+prevent nested `checking...' messages on the screen. There's no actual
+harm in continuing to use the older way, but it's less convenient and
+attractive. *Note Macro Definitions::.
+
+ You probably looked at the macros that came with Autoconf as a guide
+for how to do things. It would be a good idea to take a look at the new
+versions of them, as the style is somewhat improved and they take
+advantage of some new features.
+
+ If you were doing tricky things with undocumented Autoconf internals
+(macros, variables, diversions), check whether you need to change
+anything to account for changes that have been made. Perhaps you can
+even use an officially supported technique in version 2 instead of
+kludging. Or perhaps not.
+
+ To speed up your locally written feature tests, add caching to them.
+See whether any of your tests are of general enough usefulness to
+encapsulate them into macros that you can share.
+
+
+File: autoconf.info, Node: Autoconf 2.13, Prev: Autoconf 1, Up: Obsolete Constructs
+
+18.6 Upgrading From Version 2.13
+================================
+
+The introduction of the previous section (*note Autoconf 1::) perfectly
+suits this section...
+
+ Autoconf version 2.50 is mostly backward compatible with version
+ 2.13. However, it introduces better ways to do some things, and
+ doesn't support some of the ugly things in version 2.13. So,
+ depending on how sophisticated your `configure.ac' files are, you
+ might have to do some manual work in order to upgrade to version
+ 2.50. This chapter points out some problems to watch for when
+ upgrading. Also, perhaps your `configure' scripts could benefit
+ from some of the new features in version 2.50; the changes are
+ summarized in the file `NEWS' in the Autoconf distribution.
+
+* Menu:
+
+* Changed Quotation:: Broken code which used to work
+* New Macros:: Interaction with foreign macros
+* Hosts and Cross-Compilation:: Bugward compatibility kludges
+* AC_LIBOBJ vs LIBOBJS:: LIBOBJS is a forbidden token
+* AC_ACT_IFELSE vs AC_TRY_ACT:: A more generic scheme for testing sources
+
+
+File: autoconf.info, Node: Changed Quotation, Next: New Macros, Up: Autoconf 2.13
+
+18.6.1 Changed Quotation
+------------------------
+
+The most important changes are invisible to you: the implementation of
+most macros have completely changed. This allowed more factorization of
+the code, better error messages, a higher uniformity of the user's
+interface etc. Unfortunately, as a side effect, some construct which
+used to (miraculously) work might break starting with Autoconf 2.50.
+The most common culprit is bad quotation.
+
+ For instance, in the following example, the message is not properly
+quoted:
+
+ AC_INIT
+ AC_CHECK_HEADERS(foo.h, ,
+ AC_MSG_ERROR(cannot find foo.h, bailing out))
+ AC_OUTPUT
+
+Autoconf 2.13 simply ignores it:
+
+ $ autoconf-2.13; ./configure --silent
+ creating cache ./config.cache
+ configure: error: cannot find foo.h
+ $
+
+while Autoconf 2.50 produces a broken `configure':
+
+ $ autoconf-2.50; ./configure --silent
+ configure: error: cannot find foo.h
+ ./configure: exit: bad non-numeric arg `bailing'
+ ./configure: exit: bad non-numeric arg `bailing'
+ $
+
+ The message needs to be quoted, and the `AC_MSG_ERROR' invocation
+too!
+
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AC_CHECK_HEADERS([foo.h], [],
+ [AC_MSG_ERROR([cannot find foo.h, bailing out])])
+ AC_OUTPUT
+
+ Many many (and many more) Autoconf macros were lacking proper
+quotation, including no less than... `AC_DEFUN' itself!
+
+ $ cat configure.in
+ AC_DEFUN([AC_PROG_INSTALL],
+ [# My own much better version
+ ])
+ AC_INIT
+ AC_PROG_INSTALL
+ AC_OUTPUT
+ $ autoconf-2.13
+ autoconf: Undefined macros:
+ ***BUG in Autoconf--please report*** AC_FD_MSG
+ ***BUG in Autoconf--please report*** AC_EPI
+ configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
+ configure.in:5:AC_PROG_INSTALL
+ $ autoconf-2.50
+ $
+
+
+File: autoconf.info, Node: New Macros, Next: Hosts and Cross-Compilation, Prev: Changed Quotation, Up: Autoconf 2.13
+
+18.6.2 New Macros
+-----------------
+
+While Autoconf was relatively dormant in the late 1990s, Automake
+provided Autoconf-like macros for a while. Starting with Autoconf 2.50
+in 2001, Autoconf provided versions of these macros, integrated in the
+`AC_' namespace, instead of `AM_'. But in order to ease the upgrading
+via `autoupdate', bindings to such `AM_' macros are provided.
+
+ Unfortunately older versions of Automake (e.g., Automake 1.4) did
+not quote the names of these macros. Therefore, when `m4' finds
+something like `AC_DEFUN(AM_TYPE_PTRDIFF_T, ...)' in `aclocal.m4',
+`AM_TYPE_PTRDIFF_T' is expanded, replaced with its Autoconf definition.
+
+ Fortunately Autoconf catches pre-`AC_INIT' expansions, and
+complains, in its own words:
+
+ $ cat configure.ac
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AM_TYPE_PTRDIFF_T
+ $ aclocal-1.4
+ $ autoconf
+ aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
+ aclocal.m4:17: the top level
+ autom4te: m4 failed with exit status: 1
+ $
+
+ Modern versions of Automake no longer define most of these macros,
+and properly quote the names of the remaining macros. If you must use
+an old Automake, do not depend upon macros from Automake as it is
+simply not its job to provide macros (but the one it requires itself):
+
+ $ cat configure.ac
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AM_TYPE_PTRDIFF_T
+ $ rm aclocal.m4
+ $ autoupdate
+ autoupdate: `configure.ac' is updated
+ $ cat configure.ac
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AC_CHECK_TYPES([ptrdiff_t])
+ $ aclocal-1.4
+ $ autoconf
+ $
+
+
+File: autoconf.info, Node: Hosts and Cross-Compilation, Next: AC_LIBOBJ vs LIBOBJS, Prev: New Macros, Up: Autoconf 2.13
+
+18.6.3 Hosts and Cross-Compilation
+----------------------------------
+
+Based on the experience of compiler writers, and after long public
+debates, many aspects of the cross-compilation chain have changed:
+
+ - the relationship between the build, host, and target architecture
+ types,
+
+ - the command line interface for specifying them to `configure',
+
+ - the variables defined in `configure',
+
+ - the enabling of cross-compilation mode.
+
+
+ The relationship between build, host, and target have been cleaned
+up: the chain of default is now simply: target defaults to host, host to
+build, and build to the result of `config.guess'. Nevertheless, in
+order to ease the transition from 2.13 to 2.50, the following
+transition scheme is implemented. _Do not rely on it_, as it will be
+completely disabled in a couple of releases (we cannot keep it, as it
+proves to cause more problems than it cures).
+
+ They all default to the result of running `config.guess', unless you
+specify either `--build' or `--host'. In this case, the default
+becomes the system type you specified. If you specify both, and
+they're different, `configure' enters cross compilation mode, so it
+doesn't run any tests that require execution.
+
+ Hint: if you mean to override the result of `config.guess', prefer
+`--build' over `--host'.
+
+
+ For backward compatibility, `configure' accepts a system type as an
+option by itself. Such an option overrides the defaults for build,
+host, and target system types. The following configure statement
+configures a cross toolchain that runs on NetBSD/alpha but generates
+code for GNU Hurd/sparc, which is also the build platform.
+
+ ./configure --host=alpha-netbsd sparc-gnu
+
+
+ In Autoconf 2.13 and before, the variables `build', `host', and
+`target' had a different semantics before and after the invocation of
+`AC_CANONICAL_BUILD' etc. Now, the argument of `--build' is strictly
+copied into `build_alias', and is left empty otherwise. After the
+`AC_CANONICAL_BUILD', `build' is set to the canonicalized build type.
+To ease the transition, before, its contents is the same as that of
+`build_alias'. Do _not_ rely on this broken feature.
+
+ For consistency with the backward compatibility scheme exposed above,
+when `--host' is specified but `--build' isn't, the build system is
+assumed to be the same as `--host', and `build_alias' is set to that
+value. Eventually, this historically incorrect behavior will go away.
+
+
+ The former scheme to enable cross-compilation proved to cause more
+harm than good, in particular, it used to be triggered too easily,
+leaving regular end users puzzled in front of cryptic error messages.
+`configure' could even enter cross-compilation mode only because the
+compiler was not functional. This is mainly because `configure' used
+to try to detect cross-compilation, instead of waiting for an explicit
+flag from the user.
+
+ Now, `configure' enters cross-compilation mode if and only if
+`--host' is passed.
+
+ That's the short documentation. To ease the transition between 2.13
+and its successors, a more complicated scheme is implemented. _Do not
+rely on the following_, as it will be removed in the near future.
+
+ If you specify `--host', but not `--build', when `configure'
+performs the first compiler test it tries to run an executable produced
+by the compiler. If the execution fails, it enters cross-compilation
+mode. This is fragile. Moreover, by the time the compiler test is
+performed, it may be too late to modify the build-system type: other
+tests may have already been performed. Therefore, whenever you specify
+`--host', be sure to specify `--build' too.
+
+ ./configure --build=i686-pc-linux-gnu --host=m68k-coff
+
+enters cross-compilation mode. The former interface, which consisted
+in setting the compiler to a cross-compiler without informing
+`configure' is obsolete. For instance, `configure' fails if it can't
+run the code generated by the specified compiler if you configure as
+follows:
+
+ ./configure CC=m68k-coff-gcc
+
+
+File: autoconf.info, Node: AC_LIBOBJ vs LIBOBJS, Next: AC_ACT_IFELSE vs AC_TRY_ACT, Prev: Hosts and Cross-Compilation, Up: Autoconf 2.13
+
+18.6.4 `AC_LIBOBJ' vs. `LIBOBJS'
+--------------------------------
+
+Up to Autoconf 2.13, the replacement of functions was triggered via the
+variable `LIBOBJS'. Since Autoconf 2.50, the macro `AC_LIBOBJ' should
+be used instead (*note Generic Functions::). Starting at Autoconf
+2.53, the use of `LIBOBJS' is an error.
+
+ This change is mandated by the unification of the GNU Build System
+components. In particular, the various fragile techniques used to parse
+a `configure.ac' are all replaced with the use of traces. As a
+consequence, any action must be traceable, which obsoletes critical
+variable assignments. Fortunately, `LIBOBJS' was the only problem, and
+it can even be handled gracefully (read, "without your having to change
+something").
+
+ There were two typical uses of `LIBOBJS': asking for a replacement
+function, and adjusting `LIBOBJS' for Automake and/or Libtool.
+
+
+ As for function replacement, the fix is immediate: use `AC_LIBOBJ'.
+For instance:
+
+ LIBOBJS="$LIBOBJS fnmatch.o"
+ LIBOBJS="$LIBOBJS malloc.$ac_objext"
+
+should be replaced with:
+
+ AC_LIBOBJ([fnmatch])
+ AC_LIBOBJ([malloc])
+
+
+ When used with Automake 1.10 or newer, a suitable value for
+`LIBOBJDIR' is set so that the `LIBOBJS' and `LTLIBOBJS' can be
+referenced from any `Makefile.am'. Even without Automake, arranging
+for `LIBOBJDIR' to be set correctly enables referencing `LIBOBJS' and
+`LTLIBOBJS' in another directory. The `LIBOBJDIR' feature is
+experimental.
+
+
+File: autoconf.info, Node: AC_ACT_IFELSE vs AC_TRY_ACT, Prev: AC_LIBOBJ vs LIBOBJS, Up: Autoconf 2.13
+
+18.6.5 `AC_ACT_IFELSE' vs. `AC_TRY_ACT'
+---------------------------------------
+
+Since Autoconf 2.50, internal codes uses `AC_PREPROC_IFELSE',
+`AC_COMPILE_IFELSE', `AC_LINK_IFELSE', and `AC_RUN_IFELSE' on one hand
+and `AC_LANG_SOURCE', and `AC_LANG_PROGRAM' on the other hand instead
+of the deprecated `AC_TRY_CPP', `AC_TRY_COMPILE', `AC_TRY_LINK', and
+`AC_TRY_RUN'. The motivations where:
+ - a more consistent interface: `AC_TRY_COMPILE' etc. were double
+ quoting their arguments;
+
+ - the combinatoric explosion is solved by decomposing on the one
+ hand the generation of sources, and on the other hand executing
+ the program;
+
+ - this scheme helps supporting more languages than plain C and C++.
+
+ In addition to the change of syntax, the philosophy has changed too:
+while emphasis was put on speed at the expense of accuracy, today's
+Autoconf promotes accuracy of the testing framework at, ahem..., the
+expense of speed.
+
+ As a perfect example of what is _not_ to be done, here is how to
+find out whether a header file contains a particular declaration, such
+as a typedef, a structure, a structure member, or a function. Use
+`AC_EGREP_HEADER' instead of running `grep' directly on the header
+file; on some systems the symbol might be defined in another header
+file that the file you are checking includes.
+
+ As a (bad) example, here is how you should not check for C
+preprocessor symbols, either defined by header files or predefined by
+the C preprocessor: using `AC_EGREP_CPP':
+
+ AC_EGREP_CPP(yes,
+ [#ifdef _AIX
+ yes
+ #endif
+ ], is_aix=yes, is_aix=no)
+
+ The above example, properly written would (i) use `AC_LANG_PROGRAM',
+and (ii) run the compiler:
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[#ifndef _AIX
+ error: This isn't AIX!
+ #endif
+ ]])],
+ [is_aix=yes],
+ [is_aix=no])
+
+
+File: autoconf.info, Node: Using Autotest, Next: FAQ, Prev: Obsolete Constructs, Up: Top
+
+19 Generating Test Suites with Autotest
+***************************************
+
+ *N.B.: This section describes a feature which is still
+ stabilizing. Although we believe that Autotest is useful as-is, this
+ documentation describes an interface which might change in the future:
+ do not depend upon Autotest without subscribing to the Autoconf mailing
+ lists.*
+
+ It is paradoxical that portable projects depend on nonportable tools
+to run their test suite. Autoconf by itself is the paragon of this
+problem: although it aims at perfectly portability, up to 2.13 its test
+suite was using DejaGNU, a rich and complex testing framework, but
+which is far from being standard on Posix systems. Worse yet, it was
+likely to be missing on the most fragile platforms, the very platforms
+that are most likely to torture Autoconf and exhibit deficiencies.
+
+ To circumvent this problem, many package maintainers have developed
+their own testing framework, based on simple shell scripts whose sole
+outputs are exit status values describing whether the test succeeded.
+Most of these tests share common patterns, and this can result in lots
+of duplicated code and tedious maintenance.
+
+ Following exactly the same reasoning that yielded to the inception of
+Autoconf, Autotest provides a test suite generation framework, based on
+M4 macros building a portable shell script. The suite itself is
+equipped with automatic logging and tracing facilities which greatly
+diminish the interaction with bug reporters, and simple timing reports.
+
+ Autoconf itself has been using Autotest for years, and we do attest
+that it has considerably improved the strength of the test suite and the
+quality of bug reports. Other projects are known to use some generation
+of Autotest, such as Bison, Free Recode, Free Wdiff, GNU Tar, each of
+them with different needs, and this usage has validated Autotest as a
+general testing framework.
+
+ Nonetheless, compared to DejaGNU, Autotest is inadequate for
+interactive tool testing, which is probably its main limitation.
+
+* Menu:
+
+* Using an Autotest Test Suite:: Autotest and the user
+* Writing Testsuites:: Autotest macros
+* testsuite Invocation:: Running `testsuite' scripts
+* Making testsuite Scripts:: Using autom4te to create `testsuite'
+
+
+File: autoconf.info, Node: Using an Autotest Test Suite, Next: Writing Testsuites, Up: Using Autotest
+
+19.1 Using an Autotest Test Suite
+=================================
+
+* Menu:
+
+* testsuite Scripts:: The concepts of Autotest
+* Autotest Logs:: Their contents
+
+
+File: autoconf.info, Node: testsuite Scripts, Next: Autotest Logs, Up: Using an Autotest Test Suite
+
+19.1.1 `testsuite' Scripts
+--------------------------
+
+Generating testing or validation suites using Autotest is rather easy.
+The whole validation suite is held in a file to be processed through
+`autom4te', itself using GNU M4 under the hood, to produce a
+stand-alone Bourne shell script which then gets distributed. Neither
+`autom4te' nor GNU M4 are needed at the installer's end.
+
+ Each test of the validation suite should be part of some test group.
+A "test group" is a sequence of interwoven tests that ought to be
+executed together, usually because one test in the group creates data
+files that a later test in the same group needs to read. Complex test
+groups make later debugging more tedious. It is much better to keep
+only a few tests per test group. Ideally there is only one test per
+test group.
+
+ For all but the simplest packages, some file such as `testsuite.at'
+does not fully hold all test sources, as these are often easier to
+maintain in separate files. Each of these separate files holds a single
+test group, or a sequence of test groups all addressing some common
+functionality in the package. In such cases, `testsuite.at' merely
+initializes the validation suite, and sometimes does elementary health
+checking, before listing include statements for all other test files.
+The special file `package.m4', containing the identification of the
+package, is automatically included if found.
+
+ A convenient alternative consists in moving all the global issues
+(local Autotest macros, elementary health checking, and `AT_INIT'
+invocation) into the file `local.at', and making `testsuite.at' be a
+simple list of `m4_include's of sub test suites. In such case,
+generating the whole test suite or pieces of it is only a matter of
+choosing the `autom4te' command line arguments.
+
+ The validation scripts that Autotest produces are by convention
+called `testsuite'. When run, `testsuite' executes each test group in
+turn, producing only one summary line per test to say if that
+particular test succeeded or failed. At end of all tests, summarizing
+counters get printed. One debugging directory is left for each test
+group which failed, if any: such directories are named
+`testsuite.dir/NN', where NN is the sequence number of the test group,
+and they include:
+
+ * a debugging script named `run' which reruns the test in "debug
+ mode" (*note testsuite Invocation::). The automatic generation of
+ debugging scripts has the purpose of easing the chase for bugs.
+
+ * all the files created with `AT_DATA'
+
+ * all the Erlang source code files created with `AT_CHECK_EUNIT'
+
+ * a log of the run, named `testsuite.log'
+
+ In the ideal situation, none of the tests fail, and consequently no
+debugging directory is left behind for validation.
+
+ It often happens in practice that individual tests in the validation
+suite need to get information coming out of the configuration process.
+Some of this information, common for all validation suites, is provided
+through the file `atconfig', automatically created by
+`AC_CONFIG_TESTDIR'. For configuration information which your testing
+environment specifically needs, you might prepare an optional file
+named `atlocal.in', instantiated by `AC_CONFIG_FILES'. The
+configuration process produces `atconfig' and `atlocal' out of these
+two input files, and these two produced files are automatically read by
+the `testsuite' script.
+
+ Here is a diagram showing the relationship between files.
+
+Files used in preparing a software package for distribution:
+
+ [package.m4] -->.
+ \
+ subfile-1.at ->. [local.at] ---->+
+ ... \ \
+ subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
+ ... /
+ subfile-n.at ->'
+
+Files used in configuring a software package:
+
+ .--> atconfig
+ /
+ [atlocal.in] --> config.status* --<
+ \
+ `--> [atlocal]
+
+Files created during test suite execution:
+
+ atconfig -->. .--> testsuite.log
+ \ /
+ >-- testsuite* --<
+ / \
+ [atlocal] ->' `--> [testsuite.dir]
+
+
+File: autoconf.info, Node: Autotest Logs, Prev: testsuite Scripts, Up: Using an Autotest Test Suite
+
+19.1.2 Autotest Logs
+--------------------
+
+When run, the test suite creates a log file named after itself, e.g., a
+test suite named `testsuite' creates `testsuite.log'. It contains a
+lot of information, usually more than maintainers actually need, but
+therefore most of the time it contains all that is needed:
+
+command line arguments
+ A bad but unfortunately widespread habit consists of setting
+ environment variables before the command, such as in
+ `CC=my-home-grown-cc ./testsuite'. The test suite does not know
+ this change, hence (i) it cannot report it to you, and (ii) it
+ cannot preserve the value of `CC' for subsequent runs. Autoconf
+ faced exactly the same problem, and solved it by asking users to
+ pass the variable definitions as command line arguments. Autotest
+ requires this rule, too, but has no means to enforce it; the log
+ then contains a trace of the variables that were changed by the
+ user.
+
+`ChangeLog' excerpts
+ The topmost lines of all the `ChangeLog' files found in the source
+ hierarchy. This is especially useful when bugs are reported
+ against development versions of the package, since the version
+ string does not provide sufficient information to know the exact
+ state of the sources the user compiled. Of course, this relies on
+ the use of a `ChangeLog'.
+
+build machine
+ Running a test suite in a cross-compile environment is not an easy
+ task, since it would mean having the test suite run on a machine
+ BUILD, while running programs on a machine HOST. It is much
+ simpler to run both the test suite and the programs on HOST, but
+ then, from the point of view of the test suite, there remains a
+ single environment, HOST = BUILD. The log contains relevant
+ information on the state of the BUILD machine, including some
+ important environment variables.
+
+tested programs
+ The absolute file name and answers to `--version' of the tested
+ programs (see *note Writing Testsuites::, `AT_TESTED').
+
+configuration log
+ The contents of `config.log', as created by `configure', are
+ appended. It contains the configuration flags and a detailed
+ report on the configuration itself.
+
+
+File: autoconf.info, Node: Writing Testsuites, Next: testsuite Invocation, Prev: Using an Autotest Test Suite, Up: Using Autotest
+
+19.2 Writing `testsuite.at'
+===========================
+
+The `testsuite.at' is a Bourne shell script making use of special
+Autotest M4 macros. It often contains a call to `AT_INIT' near its
+beginning followed by one call to `m4_include' per source file for
+tests. Each such included file, or the remainder of `testsuite.at' if
+include files are not used, contain a sequence of test groups. Each
+test group begins with a call to `AT_SETUP', then an arbitrary number
+of shell commands or calls to `AT_CHECK', and then completes with a
+call to `AT_CLEANUP'. Multiple test groups can be categorized by a
+call to `AT_BANNER'.
+
+ All of the public Autotest macros have all-uppercase names in the
+namespace `^AT_' to prevent them from accidentally conflicting with
+other text; Autoconf also reserves the namespace `^_AT_' for internal
+macros. All shell variables used in the testsuite for internal
+purposes have mostly-lowercase names starting with `at_'. Autotest
+also uses here-document delimiters in the namespace `^_AT[A-Z]', and
+makes use of the file system namespace `^at-'.
+
+ Since Autoconf is built on top of M4sugar (*note Programming in
+M4sugar::) and M4sh (*note Programming in M4sh::), you must also be
+aware of those namespaces (`^_?\(m4\|AS\)_'). In general, you _should
+not use_ the namespace of a package that does not own the macro or
+shell code you are writing.
+
+ -- Macro: AT_INIT ([NAME])
+ Initialize Autotest. Giving a NAME to the test suite is
+ encouraged if your package includes several test suites. Before
+ this macro is called, `AT_PACKAGE_STRING' and
+ `AT_PACKAGE_BUGREPORT' must be defined, which are used to display
+ information about the testsuite to the user. Typically, these
+ macros are provided by a file `package.m4' built by `make' (*note
+ Making testsuite Scripts::), in order to inherit the package name,
+ version, and bug reporting address from `configure.ac'.
+
+ -- Macro: AT_COPYRIGHT (COPYRIGHT-NOTICE)
+ State that, in addition to the Free Software Foundation's
+ copyright on the Autotest macros, parts of your test suite are
+ covered by COPYRIGHT-NOTICE.
+
+ The COPYRIGHT-NOTICE shows up in both the head of `testsuite' and
+ in `testsuite --version'.
+
+ -- Macro: AT_ARG_OPTION (OPTIONS, HELP-TEXT, [ACTION-IF-GIVEN],
+ [ACTION-IF-NOT-GIVEN])
+ Accept options from the space-separated list OPTIONS, a list that
+ has leading dashes removed from the options. Long options will be
+ prefixed with `--', single-character options with `-'. The first
+ word in this list is the primary OPTION, any others are assumed to
+ be short-hand aliases. The variable associated with it is
+ `at_arg_OPTION', with any dashes in OPTION replaced with
+ underscores.
+
+ If the user passes `--OPTION' to the `testsuite', the variable
+ will be set to `:'. If the user does not pass the option, or
+ passes `--no-OPTION', then the variable will be set to `false'.
+
+ ACTION-IF-GIVEN is run each time the option is encountered; here,
+ the variable `at_optarg' will be set to `:' or `false' as
+ appropriate. `at_optarg' is actually just a copy of
+ `at_arg_OPTION'.
+
+ ACTION-IF-NOT-GIVEN will be run once after option parsing is
+ complete and if no option from OPTIONS was used.
+
+ HELP-TEXT is added to the end of the list of options shown in
+ `testsuite --help' (*note AS_HELP_STRING::).
+
+ It is recommended that you use a package-specific prefix to OPTIONS
+ names in order to avoid clashes with future Autotest built-in
+ options.
+
+ -- Macro: AT_ARG_OPTION_ARG (OPTIONS, HELP-TEXT, [ACTION-IF-GIVEN],
+ [ACTION-IF-NOT-GIVEN])
+ Accept options with arguments from the space-separated list
+ OPTIONS, a list that has leading dashes removed from the options.
+ Long options will be prefixed with `--', single-character options
+ with `-'. The first word in this list is the primary OPTION, any
+ others are assumed to be short-hand aliases. The variable
+ associated with it is `at_arg_OPTION', with any dashes in OPTION
+ replaced with underscores.
+
+ If the user passes `--OPTION=ARG' or `--OPTION ARG' to the
+ `testsuite', the variable will be set to `ARG'.
+
+ ACTION-IF-GIVEN is run each time the option is encountered; here,
+ the variable `at_optarg' will be set to `ARG'. `at_optarg' is
+ actually just a copy of `at_arg_OPTION'.
+
+ ACTION-IF-NOT-GIVEN will be run once after option parsing is
+ complete and if no option from OPTIONS was used.
+
+ HELP-TEXT is added to the end of the list of options shown in
+ `testsuite --help' (*note AS_HELP_STRING::).
+
+ It is recommended that you use a package-specific prefix to OPTIONS
+ names in order to avoid clashes with future Autotest built-in
+ options.
+
+ -- Macro: AT_COLOR_TESTS
+ Enable colored test results by default when the output is
+ connected to a terminal.
+
+ -- Macro: AT_TESTED (EXECUTABLES)
+ Log the file name and answer to `--version' of each program in
+ space-separated list EXECUTABLES. Several invocations register
+ new executables, in other words, don't fear registering one program
+ several times.
+
+ Autotest test suites rely on `PATH' to find the tested program.
+ This avoids the need to generate absolute names of the various
+ tools, and makes it possible to test installed programs.
+ Therefore, knowing which programs are being exercised is crucial
+ to understanding problems in the test suite itself, or its
+ occasional misuses. It is a good idea to also subscribe foreign
+ programs you depend upon, to avoid incompatible diagnostics.
+
+
+ -- Macro: AT_BANNER (TEST-CATEGORY-NAME)
+ This macro identifies the start of a category of related test
+ groups. When the resulting `testsuite' is invoked with more than
+ one test group to run, its output will include a banner containing
+ TEST-CATEGORY-NAME prior to any tests run from that category. The
+ banner should be no more than about 40 or 50 characters. A blank
+ banner indicates uncategorized tests; an empty line will be
+ inserted after tests from an earlier category, effectively ending
+ that category.
+
+ -- Macro: AT_SETUP (TEST-GROUP-NAME)
+ This macro starts a group of related tests, all to be executed in
+ the same subshell. It accepts a single argument, which holds a
+ few words (no more than about 30 or 40 characters) quickly
+ describing the purpose of the test group being started.
+ TEST-GROUP-NAME must not expand to unbalanced quotes, although
+ quadrigraphs can be used.
+
+ -- Macro: AT_KEYWORDS (KEYWORDS)
+ Associate the space-separated list of KEYWORDS to the enclosing
+ test group. This makes it possible to run "slices" of the test
+ suite. For instance, if some of your test groups exercise some
+ `foo' feature, then using `AT_KEYWORDS(foo)' lets you run
+ `./testsuite -k foo' to run exclusively these test groups. The
+ TEST-GROUP-NAME of the test group is automatically recorded to
+ `AT_KEYWORDS'.
+
+ Several invocations within a test group accumulate new keywords.
+ In other words, don't fear registering the same keyword several
+ times in a test group.
+
+ -- Macro: AT_CAPTURE_FILE (FILE)
+ If the current test group fails, log the contents of FILE.
+ Several identical calls within one test group have no additional
+ effect.
+
+ -- Macro: AT_FAIL_IF (SHELL-CONDITION)
+ Make the test group fail and skip the rest of its execution, if
+ SHELL-CONDITION is true. SHELL-CONDITION is a shell expression
+ such as a `test' command. Tests before `AT_FAIL_IF' will be
+ executed and may still cause the test group to be skipped. You
+ can instantiate this macro many times from within the same test
+ group.
+
+ You should use this macro only for very simple failure conditions.
+ If the SHELL-CONDITION could emit any kind of output you should
+ instead use `AT_CHECK' like
+ AT_CHECK([if SHELL-CONDITION; then exit 99; fi])
+ so that such output is properly recorded in the `testsuite.log'
+ file.
+
+ -- Macro: AT_SKIP_IF (SHELL-CONDITION)
+ Determine whether the test should be skipped because it requires
+ features that are unsupported on the machine under test.
+ SHELL-CONDITION is a shell expression such as a `test' command.
+ Tests before `AT_SKIP_IF' will be executed and may still cause the
+ test group to fail. You can instantiate this macro many times
+ from within the same test group.
+
+ You should use this macro only for very simple skip conditions.
+ If the SHELL-CONDITION could emit any kind of output you should
+ instead use `AT_CHECK' like
+ AT_CHECK([if SHELL-CONDITION; then exit 77; fi])
+ so that such output is properly recorded in the `testsuite.log'
+ file.
+
+ -- Macro: AT_XFAIL_IF (SHELL-CONDITION)
+ Determine whether the test is expected to fail because it is a
+ known bug (for unsupported features, you should skip the test).
+ SHELL-CONDITION is a shell expression such as a `test' command;
+ you can instantiate this macro many times from within the same
+ test group, and one of the conditions is enough to turn the test
+ into an expected failure.
+
+ -- Macro: AT_CLEANUP
+ End the current test group.
+
+
+ -- Macro: AT_DATA (FILE, CONTENTS)
+ Initialize an input data FILE with given CONTENTS. Of course, the
+ CONTENTS have to be properly quoted between square brackets to
+ protect against included commas or spurious M4 expansion.
+ CONTENTS must be empty or end with a newline. FILE must be a
+ single shell word that expands into a single file name.
+
+ -- Macro: AT_CHECK (COMMANDS, [STATUS = `0'], [STDOUT], [STDERR],
+ [RUN-IF-FAIL], [RUN-IF-PASS])
+ -- Macro: AT_CHECK_UNQUOTED (COMMANDS, [STATUS = `0'], [STDOUT],
+ [STDERR], [RUN-IF-FAIL], [RUN-IF-PASS])
+ Execute a test by performing given shell COMMANDS in a subshell.
+ COMMANDS is output as-is, so shell expansions are honored. These
+ commands should normally exit with STATUS, while producing expected
+ STDOUT and STDERR contents. If COMMANDS exit with unexpected
+ status 77, then the rest of the test group is skipped. If
+ COMMANDS exit with unexpected status 99, then the test group is
+ immediately failed. Otherwise, if this test fails, run shell
+ commands RUN-IF-FAIL or, if this test passes, run shell commands
+ RUN-IF-PASS, both inside the current shell execution environment.
+ At the beginning of RUN-IF-FAIL and RUN-IF-PASS, the status of
+ COMMANDS is available in the `at_status' shell variable.
+
+ This macro must be invoked in between `AT_SETUP' and `AT_CLEANUP'.
+
+ If STATUS is the literal `ignore', then the corresponding exit
+ status is not checked, except for the special cases of 77 (skip)
+ and 99 (hard failure). The existence of hard failures allows one
+ to mark a test as an expected failure with `AT_XFAIL_IF' because a
+ feature has not yet been implemented, but to still distinguish
+ between gracefully handling the missing feature and dumping core.
+ A hard failure also inhibits post-test actions in RUN-IF-FAIL.
+
+ If the value of the STDOUT or STDERR parameter is one of the
+ literals in the following table, then the test treats the output
+ according to the rules of that literal. Otherwise, the value of
+ the parameter is treated as text that must exactly match the
+ output given by COMMANDS on standard output and standard error
+ (including an empty parameter for no output); any differences are
+ captured in the testsuite log and the test is failed (unless an
+ unexpected exit status of 77 skipped the test instead). The
+ difference between `AT_CHECK' and `AT_CHECK_UNQUOTED' is that only
+ the latter performs shell variable expansion (`$'), command
+ substitution (``'), and backslash escaping (`\') on comparison
+ text given in the STDOUT and STDERR arguments; if the text
+ includes a trailing newline, this would be the same as if it were
+ specified via an unquoted here-document. (However, there is no
+ difference in the interpretation of COMMANDS).
+
+ `ignore'
+ The content of the output is ignored, but still captured in
+ the test group log (if the testsuite is run with option `-v',
+ the test group log is displayed as the test is run; if the
+ test group later fails, the test group log is also copied
+ into the overall testsuite log). This action is valid for
+ both STDOUT and STDERR.
+
+ `ignore-nolog'
+ The content of the output is ignored, and nothing is captured
+ in the log files. If COMMANDS are likely to produce binary
+ output (including long lines) or large amounts of output,
+ then logging the output can make it harder to locate details
+ related to subsequent tests within the group, and could
+ potentially corrupt terminal display of a user running
+ `testsuite -v'.
+
+ `stdout'
+ For the STDOUT parameter, capture the content of standard
+ output to both the file `stdout' and the test group log.
+ Subsequent commands in the test group can then post-process
+ the file. This action is often used when it is desired to
+ use `grep' to look for a substring in the output, or when the
+ output must be post-processed to normalize error messages
+ into a common form.
+
+ `stderr'
+ Like `stdout', except that it only works for the STDERR
+ parameter, and the standard error capture file will be named
+ `stderr'.
+
+ `stdout-nolog'
+ `stderr-nolog'
+ Like `stdout' or `stderr', except that the captured output is
+ not duplicated into the test group log. This action is
+ particularly useful for an intermediate check that produces
+ large amounts of data, which will be followed by another
+ check that filters down to the relevant data, as it makes it
+ easier to locate details in the log.
+
+ `expout'
+ For the STDOUT parameter, compare standard output contents
+ with the previously created file `expout', and list any
+ differences in the testsuite log.
+
+ `experr'
+ Like `expout', except that it only works for the STDERR
+ parameter, and the standard error contents are compared with
+ `experr'.
+
+ -- Macro: AT_CHECK_EUNIT (MODULE, TEST-SPEC, [ERLFLAGS],
+ [RUN-IF-FAIL], [RUN-IF-PASS])
+ Initialize and execute an Erlang module named MODULE that performs
+ tests following the TEST-SPEC EUnit test specification. TEST-SPEC
+ must be a valid EUnit test specification, as defined in the EUnit
+ Reference Manual (http://erlang.org/doc/apps/eunit/index.html).
+ ERLFLAGS are optional command-line options passed to the Erlang
+ interpreter to execute the test Erlang module. Typically,
+ ERLFLAGS defines at least the paths to directories containing the
+ compiled Erlang modules under test, as `-pa path1 path2 ...'.
+
+ For example, the unit tests associated with Erlang module `testme',
+ which compiled code is in subdirectory `src', can be performed
+ with:
+
+ AT_CHECK_EUNIT([testme_testsuite], [{module, testme}],
+ [-pa "${abs_top_builddir}/src"])
+
+ This macro must be invoked in between `AT_SETUP' and `AT_CLEANUP'.
+
+ Variables `ERL', `ERLC', and (optionally) `ERLCFLAGS' must be
+ defined as the path of the Erlang interpreter, the path of the
+ Erlang compiler, and the command-line flags to pass to the
+ compiler, respectively. Those variables should be configured in
+ `configure.ac' using the `AC_ERLANG_PATH_ERL' and
+ `AC_ERLANG_PATH_ERLC' macros, and the configured values of those
+ variables are automatically defined in the testsuite. If `ERL' or
+ `ERLC' is not defined, the test group is skipped.
+
+ If the EUnit library cannot be found, i.e. if module `eunit' cannot
+ be loaded, the test group is skipped. Otherwise, if TEST-SPEC is
+ an invalid EUnit test specification, the test group fails.
+ Otherwise, if the EUnit test passes, shell commands RUN-IF-PASS
+ are executed or, if the EUnit test fails, shell commands
+ RUN-IF-FAIL are executed and the test group fails.
+
+ Only the generated test Erlang module is automatically compiled and
+ executed. If TEST-SPEC involves testing other Erlang modules,
+ e.g. module `testme' in the example above, those modules must be
+ already compiled.
+
+ If the testsuite is run in verbose mode, with option `--verbose',
+ EUnit is also run in verbose mode to output more details about
+ individual unit tests.
+
+
+File: autoconf.info, Node: testsuite Invocation, Next: Making testsuite Scripts, Prev: Writing Testsuites, Up: Using Autotest
+
+19.3 Running `testsuite' Scripts
+================================
+
+Autotest test suites support the following options:
+
+`--help'
+`-h'
+ Display the list of options and exit successfully.
+
+`--version'
+`-V'
+ Display the version of the test suite and exit successfully.
+
+`--directory=DIR'
+`-C DIR'
+ Change the current directory to DIR before creating any files.
+ Useful for running the testsuite in a subdirectory from a top-level
+ Makefile.
+
+`--jobs[=N]'
+`-j[N]'
+ Run N tests in parallel, if possible. If N is not given, run all
+ given tests in parallel. Note that there should be no space
+ before the argument to `-j', as `-j NUMBER' denotes the separate
+ arguments `-j' and `NUMBER', see below.
+
+ In parallel mode, the standard input device of the testsuite
+ script is not available to commands inside a test group.
+ Furthermore, banner lines are not printed, and the summary line
+ for each test group is output after the test group completes.
+ Summary lines may appear unordered. If verbose and trace output
+ are enabled (see below), they may appear intermixed from
+ concurrently running tests.
+
+ Parallel mode requires the `mkfifo' command to work, and will be
+ silently disabled otherwise.
+
+`--clean'
+`-c'
+ Remove all the files the test suite might have created and exit.
+ Meant for `clean' Make targets.
+
+`--list'
+`-l'
+ List all the tests (or only the selection), including their
+ possible keywords.
+
+
+ By default all tests are performed (or described with `--list')
+silently in the default environment, but the environment, set of tests,
+and verbosity level can be tuned:
+
+`VARIABLE=VALUE'
+ Set the environment VARIABLE to VALUE. Use this rather than
+ `FOO=foo ./testsuite' as debugging scripts would then run in a
+ different environment.
+
+ The variable `AUTOTEST_PATH' specifies the testing path to prepend
+ to `PATH'. Relative directory names (not starting with `/') are
+ considered to be relative to the top level of the package being
+ built. All directories are made absolute, first starting from the
+ top level _build_ tree, then from the _source_ tree. For instance
+ `./testsuite AUTOTEST_PATH=tests:bin' for a `/src/foo-1.0' source
+ package built in `/tmp/foo' results in
+ `/tmp/foo/tests:/tmp/foo/bin' and then
+ `/src/foo-1.0/tests:/src/foo-1.0/bin' being prepended to `PATH'.
+
+`NUMBER'
+`NUMBER-NUMBER'
+`NUMBER-'
+`-NUMBER'
+ Add the corresponding test groups, with obvious semantics, to the
+ selection.
+
+`--keywords=KEYWORDS'
+`-k KEYWORDS'
+ Add to the selection the test groups with title or keywords
+ (arguments to `AT_SETUP' or `AT_KEYWORDS') that match _all_
+ keywords of the comma separated list KEYWORDS, case-insensitively.
+ Use `!' immediately before the keyword to invert the selection for
+ this keyword. By default, the keywords match whole words; enclose
+ them in `.*' to also match parts of words.
+
+ For example, running
+
+ ./testsuite -k 'autoupdate,.*FUNC.*'
+
+ selects all tests tagged `autoupdate' _and_ with tags containing
+ `FUNC' (as in `AC_CHECK_FUNC', `AC_FUNC_ALLOCA', etc.), while
+
+ ./testsuite -k '!autoupdate' -k '.*FUNC.*'
+
+ selects all tests not tagged `autoupdate' _or_ with tags
+ containing `FUNC'.
+
+`--errexit'
+`-e'
+ If any test fails, immediately abort testing. This implies
+ `--debug': post test group clean up, and top-level logging are
+ inhibited. This option is meant for the full test suite, it is
+ not really useful for generated debugging scripts. If the
+ testsuite is run in parallel mode using `--jobs', then
+ concurrently running tests will finish before exiting.
+
+`--verbose'
+`-v'
+ Force more verbosity in the detailed output of what is being done.
+ This is the default for debugging scripts.
+
+`--color'
+`--color[=never|auto|always]'
+ Enable colored test results. Without an argument, or with
+ `always', test results will be colored. With `never', color mode
+ is turned off. Otherwise, if either the macro `AT_COLOR_TESTS' is
+ used by the testsuite author, or the argument `auto' is given,
+ then test results are colored if standard output is connected to a
+ terminal.
+
+`--debug'
+`-d'
+ Do not remove the files after a test group was performed--but they
+ are still removed _before_, therefore using this option is sane
+ when running several test groups. Create debugging scripts. Do
+ not overwrite the top-level log (in order to preserve a supposedly
+ existing full log file). This is the default for debugging
+ scripts, but it can also be useful to debug the testsuite itself.
+
+`--recheck'
+ Add to the selection all test groups that failed or passed
+ unexpectedly during the last non-debugging test run.
+
+`--trace'
+`-x'
+ Trigger shell tracing of the test groups.
+
+ Besides these options accepted by every Autotest testsuite, the
+testsuite author might have added package-specific options via the
+`AT_ARG_OPTION' and `AT_ARG_OPTION_ARG' macros (*note Writing
+Testsuites::); refer to `testsuite --help' and the package
+documentation for details.
+
+
+File: autoconf.info, Node: Making testsuite Scripts, Prev: testsuite Invocation, Up: Using Autotest
+
+19.4 Making `testsuite' Scripts
+===============================
+
+For putting Autotest into movement, you need some configuration and
+makefile machinery. We recommend, at least if your package uses deep or
+shallow hierarchies, that you use `tests/' as the name of the directory
+holding all your tests and their makefile. Here is a check list of
+things to do.
+
+ - Make sure to create the file `package.m4', which defines the
+ identity of the package. It must define `AT_PACKAGE_STRING', the
+ full signature of the package, and `AT_PACKAGE_BUGREPORT', the
+ address to which bug reports should be sent. For sake of
+ completeness, we suggest that you also define `AT_PACKAGE_NAME',
+ `AT_PACKAGE_TARNAME', `AT_PACKAGE_VERSION', and `AT_PACKAGE_URL'.
+ *Note Initializing configure::, for a description of these
+ variables. Be sure to distribute `package.m4' and to put it into
+ the source hierarchy: the test suite ought to be shipped! See
+ below for an example `Makefile' excerpt.
+
+ - Invoke `AC_CONFIG_TESTDIR'.
+
+ -- Macro: AC_CONFIG_TESTDIR (DIRECTORY, [TEST-PATH = `directory'])
+ An Autotest test suite is to be configured in DIRECTORY. This
+ macro causes `DIRECTORY/atconfig' to be created by
+ `config.status' and sets the default `AUTOTEST_PATH' to
+ TEST-PATH (*note testsuite Invocation::).
+
+ - Still within `configure.ac', as appropriate, ensure that some
+ `AC_CONFIG_FILES' command includes substitution for
+ `tests/atlocal'.
+
+ - The appropriate `Makefile' should be modified so the validation in
+ your package is triggered by `make check'. An example is provided
+ below.
+
+ With Automake, here is a minimal example for inclusion in
+`tests/Makefile.am', in order to link `make check' with a validation
+suite.
+
+ # The `:;' works around a Bash 3.2 bug when the output is not writable.
+ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
+ :;{ \
+ echo '# Signature of the current package.' && \
+ echo 'm4_define([AT_PACKAGE_NAME],' && \
+ echo ' [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([AT_PACKAGE_TARNAME],' && \
+ echo ' [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([AT_PACKAGE_VERSION],' && \
+ echo ' [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([AT_PACKAGE_STRING],' && \
+ echo ' [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
+ echo ' [$(PACKAGE_BUGREPORT)])'; \
+ echo 'm4_define([AT_PACKAGE_URL],' && \
+ echo ' [$(PACKAGE_URL)])'; \
+ } >'$(srcdir)/package.m4'
+
+ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) atlocal.in
+ TESTSUITE = $(srcdir)/testsuite
+
+ check-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
+
+ installcheck-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
+ $(TESTSUITEFLAGS)
+
+ clean-local:
+ test ! -f '$(TESTSUITE)' || \
+ $(SHELL) '$(TESTSUITE)' --clean
+
+ AUTOM4TE = $(SHELL) $(srcdir)/build-aux/missing --run autom4te
+ AUTOTEST = $(AUTOM4TE) --language=autotest
+ $(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
+ $(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
+ mv $@.tmp $@
+
+ Note that the built testsuite is distributed; this is necessary
+because users might not have Autoconf installed, and thus would not be
+able to rebuild it. Likewise, the use of `missing' provides the user
+with a nicer error message if they modify a source file to the
+testsuite, and accidentally trigger the rebuild rules.
+
+ You might want to list explicitly the dependencies, i.e., the list of
+the files `testsuite.at' includes.
+
+ If you don't use Automake, you should include the above example in
+`tests/Makefile.in', along with additional lines inspired from the
+following:
+
+ subdir = tests
+ PACKAGE_NAME = @PACKAGE_NAME@
+ PACKAGE_TARNAME = @PACKAGE_TARNAME@
+ PACKAGE_VERSION = @PACKAGE_VERSION@
+ PACKAGE_STRING = @PACKAGE_STRING@
+ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+ PACKAGE_URL = @PACKAGE_URL@
+
+ atconfig: $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ $(SHELL) ./config.status $(subdir)/$@
+
+ atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ $(SHELL) ./config.status $(subdir)/$@
+
+and manage to have `$(EXTRA_DIST)' distributed. You will also want to
+distribute the file `build-aux/missing' from the Automake project; a
+copy of this file resides in the Autoconf source tree.
+
+ With all this in place, and if you have not initialized
+`TESTSUITEFLAGS' within your makefile, you can fine-tune test suite
+execution with this variable, for example:
+
+ make check TESTSUITEFLAGS='-v -d -x 75 -k AC_PROG_CC CFLAGS=-g'
+
+
+File: autoconf.info, Node: FAQ, Next: History, Prev: Using Autotest, Up: Top
+
+20 Frequent Autoconf Questions, with answers
+********************************************
+
+Several questions about Autoconf come up occasionally. Here some of
+them are addressed.
+
+* Menu:
+
+* Distributing:: Distributing `configure' scripts
+* Why GNU M4:: Why not use the standard M4?
+* Bootstrapping:: Autoconf and GNU M4 require each other?
+* Why Not Imake:: Why GNU uses `configure' instead of Imake
+* Defining Directories:: Passing `datadir' to program
+* Autom4te Cache:: What is it? Can I remove it?
+* Present But Cannot Be Compiled:: Compiler and Preprocessor Disagree
+* Expanded Before Required:: Expanded Before Required
+* Debugging:: Debugging `configure' scripts
+
+
+File: autoconf.info, Node: Distributing, Next: Why GNU M4, Up: FAQ
+
+20.1 Distributing `configure' Scripts
+=====================================
+
+ What are the restrictions on distributing `configure'
+ scripts that Autoconf generates? How does that affect my
+ programs that use them?
+
+ There are no restrictions on how the configuration scripts that
+Autoconf produces may be distributed or used. In Autoconf version 1,
+they were covered by the GNU General Public License. We still encourage
+software authors to distribute their work under terms like those of the
+GPL, but doing so is not required to use Autoconf.
+
+ Of the other files that might be used with `configure',
+`config.h.in' is under whatever copyright you use for your
+`configure.ac'. `config.sub' and `config.guess' have an exception to
+the GPL when they are used with an Autoconf-generated `configure'
+script, which permits you to distribute them under the same terms as
+the rest of your package. `install-sh' is from the X Consortium and is
+not copyrighted.
+
+
+File: autoconf.info, Node: Why GNU M4, Next: Bootstrapping, Prev: Distributing, Up: FAQ
+
+20.2 Why Require GNU M4?
+========================
+
+ Why does Autoconf require GNU M4?
+
+ Many M4 implementations have hard-coded limitations on the size and
+number of macros that Autoconf exceeds. They also lack several builtin
+macros that it would be difficult to get along without in a
+sophisticated application like Autoconf, including:
+
+ m4_builtin
+ m4_indir
+ m4_bpatsubst
+ __file__
+ __line__
+
+ Autoconf requires version 1.4.6 or later of GNU M4.
+
+ Since only software maintainers need to use Autoconf, and since GNU
+M4 is simple to configure and install, it seems reasonable to require
+GNU M4 to be installed also. Many maintainers of GNU and other free
+software already have most of the GNU utilities installed, since they
+prefer them.
+
+
+File: autoconf.info, Node: Bootstrapping, Next: Why Not Imake, Prev: Why GNU M4, Up: FAQ
+
+20.3 How Can I Bootstrap?
+=========================
+
+ If Autoconf requires GNU M4 and GNU M4 has an Autoconf
+ `configure' script, how do I bootstrap? It seems like a chicken
+ and egg problem!
+
+ This is a misunderstanding. Although GNU M4 does come with a
+`configure' script produced by Autoconf, Autoconf is not required in
+order to run the script and install GNU M4. Autoconf is only required
+if you want to change the M4 `configure' script, which few people have
+to do (mainly its maintainer).
+
+
+File: autoconf.info, Node: Why Not Imake, Next: Defining Directories, Prev: Bootstrapping, Up: FAQ
+
+20.4 Why Not Imake?
+===================
+
+ Why not use Imake instead of `configure' scripts?
+
+ Several people have written addressing this question, so adaptations
+of their explanations are included here.
+
+ The following answer is based on one written by Richard Pixley:
+
+ Autoconf generated scripts frequently work on machines that it has
+ never been set up to handle before. That is, it does a good job of
+ inferring a configuration for a new system. Imake cannot do this.
+
+ Imake uses a common database of host specific data. For X11, this
+ makes sense because the distribution is made as a collection of
+ tools, by one central authority who has control over the database.
+
+ GNU tools are not released this way. Each GNU tool has a
+ maintainer; these maintainers are scattered across the world.
+ Using a common database would be a maintenance nightmare.
+ Autoconf may appear to be this kind of database, but in fact it is
+ not. Instead of listing host dependencies, it lists program
+ requirements.
+
+ If you view the GNU suite as a collection of native tools, then the
+ problems are similar. But the GNU development tools can be
+ configured as cross tools in almost any host+target permutation.
+ All of these configurations can be installed concurrently. They
+ can even be configured to share host independent files across
+ hosts. Imake doesn't address these issues.
+
+ Imake templates are a form of standardization. The GNU coding
+ standards address the same issues without necessarily imposing the
+ same restrictions.
+
+ Here is some further explanation, written by Per Bothner:
+
+ One of the advantages of Imake is that it is easy to generate large
+ makefiles using the `#include' and macro mechanisms of `cpp'.
+ However, `cpp' is not programmable: it has limited conditional
+ facilities, and no looping. And `cpp' cannot inspect its
+ environment.
+
+ All of these problems are solved by using `sh' instead of `cpp'.
+ The shell is fully programmable, has macro substitution, can
+ execute (or source) other shell scripts, and can inspect its
+ environment.
+
+ Paul Eggert elaborates more:
+
+ With Autoconf, installers need not assume that Imake itself is
+ already installed and working well. This may not seem like much
+ of an advantage to people who are accustomed to Imake. But on
+ many hosts Imake is not installed or the default installation is
+ not working well, and requiring Imake to install a package hinders
+ the acceptance of that package on those hosts. For example, the
+ Imake template and configuration files might not be installed
+ properly on a host, or the Imake build procedure might wrongly
+ assume that all source files are in one big directory tree, or the
+ Imake configuration might assume one compiler whereas the package
+ or the installer needs to use another, or there might be a version
+ mismatch between the Imake expected by the package and the Imake
+ supported by the host. These problems are much rarer with
+ Autoconf, where each package comes with its own independent
+ configuration processor.
+
+ Also, Imake often suffers from unexpected interactions between
+ `make' and the installer's C preprocessor. The fundamental problem
+ here is that the C preprocessor was designed to preprocess C
+ programs, not makefiles. This is much less of a problem with
+ Autoconf, which uses the general-purpose preprocessor M4, and
+ where the package's author (rather than the installer) does the
+ preprocessing in a standard way.
+
+ Finally, Mark Eichin notes:
+
+ Imake isn't all that extensible, either. In order to add new
+ features to Imake, you need to provide your own project template,
+ and duplicate most of the features of the existing one. This
+ means that for a sophisticated project, using the vendor-provided
+ Imake templates fails to provide any leverage--since they don't
+ cover anything that your own project needs (unless it is an X11
+ program).
+
+ On the other side, though:
+
+ The one advantage that Imake has over `configure': `Imakefile'
+ files tend to be much shorter (likewise, less redundant) than
+ `Makefile.in' files. There is a fix to this, however--at least
+ for the Kerberos V5 tree, we've modified things to call in common
+ `post.in' and `pre.in' makefile fragments for the entire tree.
+ This means that a lot of common things don't have to be
+ duplicated, even though they normally are in `configure' setups.
+
+
+File: autoconf.info, Node: Defining Directories, Next: Autom4te Cache, Prev: Why Not Imake, Up: FAQ
+
+20.5 How Do I `#define' Installation Directories?
+=================================================
+
+ My program needs library files, installed in `datadir' and
+ similar. If I use
+ AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
+ [Define to the read-only architecture-independent
+ data directory.])
+
+ I get
+ #define DATADIR "${prefix}/share"
+
+As already explained, this behavior is on purpose, mandated by the GNU
+Coding Standards, see *note Installation Directory Variables::. There
+are several means to achieve a similar goal:
+
+ - Do not use `AC_DEFINE' but use your makefile to pass the actual
+ value of `datadir' via compilation flags. *Note Installation
+ Directory Variables::, for the details.
+
+ - This solution can be simplified when compiling a program: you may
+ either extend the `CPPFLAGS':
+
+ CPPFLAGS = -DDATADIR='"$(datadir)"' @CPPFLAGS@
+
+ If you are using Automake, you should use `AM_CPPFLAGS' instead:
+
+ AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
+
+ Alternatively, create a dedicated header file:
+
+ DISTCLEANFILES = myprog-paths.h
+ myprog-paths.h: Makefile
+ echo '#define DATADIR "$(datadir)"' >$@
+
+ The gnulib module `configmake' provides such a header with all the
+ standard directory variables defined, *note configmake:
+ (gnulib)configmake.
+
+ - Use `AC_DEFINE' but have `configure' compute the literal value of
+ `datadir' and others. Many people have wrapped macros to automate
+ this task; for an example, see the macro `AC_DEFINE_DIR' from the
+ Autoconf Macro Archive
+ (http://www.gnu.org/software/autoconf-archive/).
+
+ This solution does not conform to the GNU Coding Standards.
+
+ - Note that all the previous solutions hard wire the absolute name of
+ these directories in the executables, which is not a good
+ property. You may try to compute the names relative to `prefix',
+ and try to find `prefix' at runtime, this way your package is
+ relocatable.
+
+
+File: autoconf.info, Node: Autom4te Cache, Next: Present But Cannot Be Compiled, Prev: Defining Directories, Up: FAQ
+
+20.6 What is `autom4te.cache'?
+==============================
+
+ What is this directory `autom4te.cache'? Can I safely remove it?
+
+ In the GNU Build System, `configure.ac' plays a central role and is
+read by many tools: `autoconf' to create `configure', `autoheader' to
+create `config.h.in', `automake' to create `Makefile.in', `autoscan' to
+check the completeness of `configure.ac', `autoreconf' to check the GNU
+Build System components that are used. To "read `configure.ac'"
+actually means to compile it with M4, which can be a long process for
+complex `configure.ac'.
+
+ This is why all these tools, instead of running directly M4, invoke
+`autom4te' (*note autom4te Invocation::) which, while answering to a
+specific demand, stores additional information in `autom4te.cache' for
+future runs. For instance, if you run `autoconf', behind the scenes,
+`autom4te' also stores information for the other tools, so that when
+you invoke `autoheader' or `automake' etc., reprocessing `configure.ac'
+is not needed. The speed up is frequently 30%, and is increasing with
+the size of `configure.ac'.
+
+ But it is and remains being simply a cache: you can safely remove it.
+
+
+ Can I permanently get rid of it?
+
+ The creation of this cache can be disabled from `~/.autom4te.cfg',
+see *note Customizing autom4te::, for more details. You should be
+aware that disabling the cache slows down the Autoconf test suite by
+40%. The more GNU Build System components are used, the more the cache
+is useful; for instance running `autoreconf -f' on the Core Utilities
+is twice slower without the cache _although `--force' implies that the
+cache is not fully exploited_, and eight times slower than without
+`--force'.
+
+
+File: autoconf.info, Node: Present But Cannot Be Compiled, Next: Expanded Before Required, Prev: Autom4te Cache, Up: FAQ
+
+20.7 Header Present But Cannot Be Compiled
+==========================================
+
+The most important guideline to bear in mind when checking for features
+is to mimic as much as possible the intended use. Unfortunately, old
+versions of `AC_CHECK_HEADER' and `AC_CHECK_HEADERS' failed to follow
+this idea, and called the preprocessor, instead of the compiler, to
+check for headers. As a result, incompatibilities between headers went
+unnoticed during configuration, and maintainers finally had to deal
+with this issue elsewhere.
+
+ The transition began with Autoconf 2.56. As of Autoconf 2.64 both
+checks are performed, and `configure' complains loudly if the compiler
+and the preprocessor do not agree. However, only the compiler result
+is considered.
+
+ Consider the following example:
+
+ $ cat number.h
+ typedef int number;
+ $ cat pi.h
+ const number pi = 3;
+ $ cat configure.ac
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AC_CHECK_HEADERS([pi.h])
+ $ autoconf -Wall
+ $ ./configure
+ checking for gcc... gcc
+ checking for C compiler default output file name... a.out
+ checking whether the C compiler works... yes
+ checking whether we are cross compiling... no
+ checking for suffix of executables...
+ checking for suffix of object files... o
+ checking whether we are using the GNU C compiler... yes
+ checking whether gcc accepts -g... yes
+ checking for gcc option to accept ISO C89... none needed
+ checking how to run the C preprocessor... gcc -E
+ checking for grep that handles long lines and -e... grep
+ checking for egrep... grep -E
+ checking for ANSI C header files... yes
+ checking for sys/types.h... yes
+ checking for sys/stat.h... yes
+ checking for stdlib.h... yes
+ checking for string.h... yes
+ checking for memory.h... yes
+ checking for strings.h... yes
+ checking for inttypes.h... yes
+ checking for stdint.h... yes
+ checking for unistd.h... yes
+ checking pi.h usability... no
+ checking pi.h presence... yes
+ configure: WARNING: pi.h: present but cannot be compiled
+ configure: WARNING: pi.h: check for missing prerequisite headers?
+ configure: WARNING: pi.h: see the Autoconf documentation
+ configure: WARNING: pi.h: section "Present But Cannot Be Compiled"
+ configure: WARNING: pi.h: proceeding with the compiler's result
+ configure: WARNING: ## -------------------------------------- ##
+ configure: WARNING: ## Report this to bug-example@example.org ##
+ configure: WARNING: ## -------------------------------------- ##
+ checking for pi.h... yes
+
+The proper way the handle this case is using the fourth argument (*note
+Generic Headers::):
+
+ $ cat configure.ac
+ AC_INIT([Example], [1.0], [bug-example@example.org])
+ AC_CHECK_HEADERS([number.h pi.h], [], [],
+ [[#ifdef HAVE_NUMBER_H
+ # include <number.h>
+ #endif
+ ]])
+ $ autoconf -Wall
+ $ ./configure
+ checking for gcc... gcc
+ checking for C compiler default output... a.out
+ checking whether the C compiler works... yes
+ checking whether we are cross compiling... no
+ checking for suffix of executables...
+ checking for suffix of object files... o
+ checking whether we are using the GNU C compiler... yes
+ checking whether gcc accepts -g... yes
+ checking for gcc option to accept ANSI C... none needed
+ checking for number.h... yes
+ checking for pi.h... yes
+
+ See *note Particular Headers::, for a list of headers with their
+prerequisites.
+
+
+File: autoconf.info, Node: Expanded Before Required, Next: Debugging, Prev: Present But Cannot Be Compiled, Up: FAQ
+
+20.8 Expanded Before Required
+=============================
+
+Older versions of Autoconf silently built files with incorrect ordering
+between dependent macros if an outer macro first expanded, then later
+indirectly required, an inner macro. Starting with Autoconf 2.64, this
+situation no longer generates out-of-order code, but results in
+duplicate output and a syntax warning:
+
+ $ cat configure.ac
+ =>AC_DEFUN([TESTA], [[echo in A
+ =>if test -n "$SEEN_A" ; then echo duplicate ; fi
+ =>SEEN_A=:]])
+ =>AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
+ =>if test -z "$SEEN_A" ; then echo bug ; fi]])
+ =>AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+ =>AC_DEFUN([OUTER], [[echo in OUTER]
+ =>TESTA
+ =>TESTC])
+ =>AC_INIT
+ =>OUTER
+ =>AC_OUTPUT
+ $ autoconf
+ =>configure.ac:11: warning: AC_REQUIRE:
+ => `TESTA' was expanded before it was required
+ =>configure.ac:4: TESTB is expanded from...
+ =>configure.ac:6: TESTC is expanded from...
+ =>configure.ac:7: OUTER is expanded from...
+ =>configure.ac:11: the top level
+
+To avoid this warning, decide what purpose the macro in question serves.
+If it only needs to be expanded once (for example, if it provides
+initialization text used by later macros), then the simplest fix is to
+change the macro to be declared with `AC_DEFUN_ONCE' (*note One-Shot
+Macros::), although this only works in Autoconf 2.64 and newer. A more
+portable fix is to change all instances of direct calls to instead go
+through `AC_REQUIRE' (*note Prerequisite Macros::). If, instead, the
+macro is parameterized by arguments or by the current definition of
+other macros in the m4 environment, then the macro should always be
+directly expanded instead of required.
+
+ For another case study, consider this example trimmed down from an
+actual package. Originally, the package contained shell code and
+multiple macro invocations at the top level of `configure.ac':
+
+ AC_DEFUN([FOO], [AC_COMPILE_IFELSE([...])])
+ foobar=
+ AC_PROG_CC
+ FOO
+
+but that was getting complex, so the author wanted to offload some of
+the text into a new macro in another file included via `aclocal.m4'.
+The nai"ve approach merely wraps the text in a new macro:
+
+ AC_DEFUN([FOO], [AC_COMPILE_IFELSE([...])])
+ AC_DEFUN([BAR], [
+ foobar=
+ AC_PROG_CC
+ FOO
+ ])
+ BAR
+
+With older versions of Autoconf, the setting of `foobar=' occurs before
+the single compiler check, as the author intended. But with Autoconf
+2.64, this issues the "expanded before it was required" warning for
+`AC_PROG_CC', and outputs two copies of the compiler check, one before
+`foobar=', and one after. To understand why this is happening,
+remember that the use of `AC_COMPILE_IFELSE' includes a call to
+`AC_REQUIRE([AC_PROG_CC])' under the hood. According to the documented
+semantics of `AC_REQUIRE', this means that `AC_PROG_CC' _must_ occur
+before the body of the outermost `AC_DEFUN', which in this case is
+`BAR', thus preceding the use of `foobar='. The older versions of
+Autoconf were broken with regards to the rules of `AC_REQUIRE', which
+explains why the code changed from one over to two copies of
+`AC_PROG_CC' when upgrading autoconf. In other words, the author was
+unknowingly relying on a bug exploit to get the desired results, and
+that exploit broke once the bug was fixed.
+
+ So, what recourse does the author have, to restore their intended
+semantics of setting `foobar=' prior to a single compiler check,
+regardless of whether Autoconf 2.63 or 2.64 is used? One idea is to
+remember that only `AC_DEFUN' is impacted by `AC_REQUIRE'; there is
+always the possibility of using the lower-level `m4_define':
+
+ AC_DEFUN([FOO], [AC_COMPILE_IFELSE([...])])
+ m4_define([BAR], [
+ foobar=
+ AC_PROG_CC
+ FOO
+ ])
+ BAR
+
+This works great if everything is in the same file. However, it does
+not help in the case where the author wants to have `aclocal' find the
+definition of `BAR' from its own file, since `aclocal' requires the use
+of `AC_DEFUN'. In this case, a better fix is to recognize that if
+`BAR' also uses `AC_REQUIRE', then there will no longer be direct
+expansion prior to a subsequent require. Then, by creating yet another
+helper macro, the author can once again guarantee a single invocation of
+`AC_PROG_CC', which will still occur after `foobar='. The author can
+also use `AC_BEFORE' to make sure no other macro appearing before `BAR'
+has triggered an unwanted expansion of `AC_PROG_CC'.
+
+ AC_DEFUN([FOO], [AC_COMPILE_IFELSE([...])])
+ AC_DEFUN([BEFORE_CC], [
+ foobar=
+ ])
+ AC_DEFUN([BAR], [
+ AC_BEFORE([$0], [AC_PROG_CC])dnl
+ AC_REQUIRE([BEFORE_CC])dnl
+ AC_REQUIRE([AC_PROG_CC])dnl
+ FOO
+ ])
+ BAR
+
+
+File: autoconf.info, Node: Debugging, Prev: Expanded Before Required, Up: FAQ
+
+20.9 Debugging `configure' scripts
+==================================
+
+While in general, `configure' scripts generated by Autoconf strive to
+be fairly portable to various systems, compilers, shells, and other
+tools, it may still be necessary to debug a failing test, broken script
+or makefile, or fix or override an incomplete, faulty, or erroneous
+test, especially during macro development. Failures can occur at all
+levels, in M4 syntax or semantics, shell script issues, or due to bugs
+in the test or the tools invoked by `configure'. Together with the
+rather arcane error message that `m4' and `make' may produce when their
+input contains syntax errors, this can make debugging rather painful.
+
+ Nevertheless, here is a list of hints and strategies that may help:
+
+ * When `autoconf' fails, common causes for error include:
+
+ * mismatched or unbalanced parentheses or braces (*note
+ Balancing Parentheses::),
+
+ * under- or overquoted macro arguments (*note Autoconf
+ Language::, *note Quoting and Parameters::, *note Quotation
+ and Nested Macros::),
+
+ * spaces between macro name and opening parenthesis (*note
+ Autoconf Language::).
+
+ Typically, it helps to go back to the last working version of the
+ input and compare the differences for each of these errors.
+ Another possibility is to sprinkle pairs of `m4_traceon' and
+ `m4_traceoff' judiciously in the code, either without a parameter
+ or listing some macro names and watch `m4' expand its input
+ verbosely (*note Debugging via autom4te::).
+
+ * Sometimes `autoconf' succeeds but the generated `configure' script
+ has invalid shell syntax. You can detect this case by running
+ `bash -n configure' or `sh -n configure'. If this command fails,
+ the same tips apply, as if `autoconf' had failed.
+
+ * Debugging `configure' script execution may be done by sprinkling
+ pairs of `set -x' and `set +x' into the shell script before and
+ after the region that contains a bug. Running the whole script
+ with `SHELL -vx ./configure 2>&1 | tee LOG-FILE' with a decent
+ SHELL may work, but produces lots of output. Here, it can help to
+ search for markers like `checking for' a particular test in the
+ LOG-FILE.
+
+ * Alternatively, you might use a shell with debugging capabilities
+ like bashdb (http://bashdb.sourceforge.net/).
+
+ * When `configure' tests produce invalid results for your system, it
+ may be necessary to override them:
+
+ * For programs, tools or libraries variables, preprocessor,
+ compiler, or linker flags, it is often sufficient to override
+ them at `make' run time with some care (*note Macros and
+ Submakes::). Since this normally won't cause `configure' to
+ be run again with these changed settings, it may fail if the
+ changed variable would have caused different test results
+ from `configure', so this may work only for simple
+ differences.
+
+ * Most tests which produce their result in a substituted
+ variable allow to override the test by setting the variable
+ on the `configure' command line (*note Compilers and
+ Options::, *note Defining Variables::, *note Particular
+ Systems::).
+
+ * Many tests store their result in a cache variable (*note
+ Caching Results::). This lets you override them either on the
+ `configure' command line as above, or through a primed cache
+ or site file (*note Cache Files::, *note Site Defaults::).
+ The name of a cache variable is documented with a test macro
+ or may be inferred from *note Cache Variable Names::; the
+ precise semantics of undocumented variables are often
+ internal details, subject to change.
+
+ * Alternatively, `configure' may produce invalid results because of
+ uncaught programming errors, in your package or in an upstream
+ library package. For example, when `AC_CHECK_LIB' fails to find a
+ library with a specified function, always check `config.log'. This
+ will reveal the exact error that produced the failing result: the
+ library linked by `AC_CHECK_LIB' probably has a fatal bug.
+
+ Conversely, as macro author, you can make it easier for users of your
+macro:
+
+ * by minimizing dependencies between tests and between test results
+ as far as possible,
+
+ * by using `make' variables to factorize and allow override of
+ settings at `make' run time,
+
+ * by honoring the GNU Coding Standards and not overriding flags
+ reserved for the user except temporarily during `configure' tests,
+
+ * by not requiring users of your macro to use the cache variables.
+ Instead, expose the result of the test via RUN-IF-TRUE and
+ RUN-IF-FALSE parameters. If the result is not a boolean, then
+ provide it through documented shell variables.
+
+
+File: autoconf.info, Node: History, Next: GNU Free Documentation License, Prev: FAQ, Up: Top
+
+21 History of Autoconf
+**********************
+
+_This chapter was written by the original author, David MacKenzie._
+
+ You may be wondering, Why was Autoconf originally written? How did
+it get into its present form? (Why does it look like gorilla spit?) If
+you're not wondering, then this chapter contains no information useful
+to you, and you might as well skip it. If you _are_ wondering, then
+let there be light...
+
+* Menu:
+
+* Genesis:: Prehistory and naming of `configure'
+* Exodus:: The plagues of M4 and Perl
+* Leviticus:: The priestly code of portability arrives
+* Numbers:: Growth and contributors
+* Deuteronomy:: Approaching the promises of easy configuration
+
+
+File: autoconf.info, Node: Genesis, Next: Exodus, Up: History
+
+21.1 Genesis
+============
+
+In June 1991 I was maintaining many of the GNU utilities for the Free
+Software Foundation. As they were ported to more platforms and more
+programs were added, the number of `-D' options that users had to
+select in the makefile (around 20) became burdensome. Especially for
+me--I had to test each new release on a bunch of different systems. So
+I wrote a little shell script to guess some of the correct settings for
+the fileutils package, and released it as part of fileutils 2.0. That
+`configure' script worked well enough that the next month I adapted it
+(by hand) to create similar `configure' scripts for several other GNU
+utilities packages. Brian Berliner also adapted one of my scripts for
+his CVS revision control system.
+
+ Later that summer, I learned that Richard Stallman and Richard Pixley
+were developing similar scripts to use in the GNU compiler tools; so I
+adapted my `configure' scripts to support their evolving interface:
+using the file name `Makefile.in' as the templates; adding `+srcdir',
+the first option (of many); and creating `config.status' files.
+
+
+File: autoconf.info, Node: Exodus, Next: Leviticus, Prev: Genesis, Up: History
+
+21.2 Exodus
+===========
+
+As I got feedback from users, I incorporated many improvements, using
+Emacs to search and replace, cut and paste, similar changes in each of
+the scripts. As I adapted more GNU utilities packages to use
+`configure' scripts, updating them all by hand became impractical.
+Rich Murphey, the maintainer of the GNU graphics utilities, sent me
+mail saying that the `configure' scripts were great, and asking if I
+had a tool for generating them that I could send him. No, I thought,
+but I should! So I started to work out how to generate them. And the
+journey from the slavery of hand-written `configure' scripts to the
+abundance and ease of Autoconf began.
+
+ Cygnus `configure', which was being developed at around that time,
+is table driven; it is meant to deal mainly with a discrete number of
+system types with a small number of mainly unguessable features (such as
+details of the object file format). The automatic configuration system
+that Brian Fox had developed for Bash takes a similar approach. For
+general use, it seems to me a hopeless cause to try to maintain an
+up-to-date database of which features each variant of each operating
+system has. It's easier and more reliable to check for most features on
+the fly--especially on hybrid systems that people have hacked on
+locally or that have patches from vendors installed.
+
+ I considered using an architecture similar to that of Cygnus
+`configure', where there is a single `configure' script that reads
+pieces of `configure.in' when run. But I didn't want to have to
+distribute all of the feature tests with every package, so I settled on
+having a different `configure' made from each `configure.in' by a
+preprocessor. That approach also offered more control and flexibility.
+
+ I looked briefly into using the Metaconfig package, by Larry Wall,
+Harlan Stenn, and Raphael Manfredi, but I decided not to for several
+reasons. The `Configure' scripts it produces are interactive, which I
+find quite inconvenient; I didn't like the ways it checked for some
+features (such as library functions); I didn't know that it was still
+being maintained, and the `Configure' scripts I had seen didn't work on
+many modern systems (such as System V R4 and NeXT); it wasn't flexible
+in what it could do in response to a feature's presence or absence; I
+found it confusing to learn; and it was too big and complex for my
+needs (I didn't realize then how much Autoconf would eventually have to
+grow).
+
+ I considered using Perl to generate my style of `configure' scripts,
+but decided that M4 was better suited to the job of simple textual
+substitutions: it gets in the way less, because output is implicit.
+Plus, everyone already has it. (Initially I didn't rely on the GNU
+extensions to M4.) Also, some of my friends at the University of
+Maryland had recently been putting M4 front ends on several programs,
+including `tvtwm', and I was interested in trying out a new language.
+
+
+File: autoconf.info, Node: Leviticus, Next: Numbers, Prev: Exodus, Up: History
+
+21.3 Leviticus
+==============
+
+Since my `configure' scripts determine the system's capabilities
+automatically, with no interactive user intervention, I decided to call
+the program that generates them Autoconfig. But with a version number
+tacked on, that name would be too long for old Unix file systems, so I
+shortened it to Autoconf.
+
+ In the fall of 1991 I called together a group of fellow questers
+after the Holy Grail of portability (er, that is, alpha testers) to
+give me feedback as I encapsulated pieces of my handwritten scripts in
+M4 macros and continued to add features and improve the techniques used
+in the checks. Prominent among the testers were Franc,ois Pinard, who
+came up with the idea of making an Autoconf shell script to run M4 and
+check for unresolved macro calls; Richard Pixley, who suggested running
+the compiler instead of searching the file system to find include files
+and symbols, for more accurate results; Karl Berry, who got Autoconf to
+configure TeX and added the macro index to the documentation; and Ian
+Lance Taylor, who added support for creating a C header file as an
+alternative to putting `-D' options in a makefile, so he could use
+Autoconf for his UUCP package. The alpha testers cheerfully adjusted
+their files again and again as the names and calling conventions of the
+Autoconf macros changed from release to release. They all contributed
+many specific checks, great ideas, and bug fixes.
+
+
+File: autoconf.info, Node: Numbers, Next: Deuteronomy, Prev: Leviticus, Up: History
+
+21.4 Numbers
+============
+
+In July 1992, after months of alpha testing, I released Autoconf 1.0,
+and converted many GNU packages to use it. I was surprised by how
+positive the reaction to it was. More people started using it than I
+could keep track of, including people working on software that wasn't
+part of the GNU Project (such as TCL, FSP, and Kerberos V5). Autoconf
+continued to improve rapidly, as many people using the `configure'
+scripts reported problems they encountered.
+
+ Autoconf turned out to be a good torture test for M4 implementations.
+Unix M4 started to dump core because of the length of the macros that
+Autoconf defined, and several bugs showed up in GNU M4 as well.
+Eventually, we realized that we needed to use some features that only
+GNU M4 has. 4.3BSD M4, in particular, has an impoverished set of
+builtin macros; the System V version is better, but still doesn't
+provide everything we need.
+
+ More development occurred as people put Autoconf under more stresses
+(and to uses I hadn't anticipated). Karl Berry added checks for X11.
+david zuhn contributed C++ support. Franc,ois Pinard made it diagnose
+invalid arguments. Jim Blandy bravely coerced it into configuring GNU
+Emacs, laying the groundwork for several later improvements. Roland
+McGrath got it to configure the GNU C Library, wrote the `autoheader'
+script to automate the creation of C header file templates, and added a
+`--verbose' option to `configure'. Noah Friedman added the
+`--autoconf-dir' option and `AC_MACRODIR' environment variable. (He
+also coined the term "autoconfiscate" to mean "adapt a software package
+to use Autoconf".) Roland and Noah improved the quoting protection in
+`AC_DEFINE' and fixed many bugs, especially when I got sick of dealing
+with portability problems from February through June, 1993.
+
+
+File: autoconf.info, Node: Deuteronomy, Prev: Numbers, Up: History
+
+21.5 Deuteronomy
+================
+
+A long wish list for major features had accumulated, and the effect of
+several years of patching by various people had left some residual
+cruft. In April 1994, while working for Cygnus Support, I began a major
+revision of Autoconf. I added most of the features of the Cygnus
+`configure' that Autoconf had lacked, largely by adapting the relevant
+parts of Cygnus `configure' with the help of david zuhn and Ken
+Raeburn. These features include support for using `config.sub',
+`config.guess', `--host', and `--target'; making links to files; and
+running `configure' scripts in subdirectories. Adding these features
+enabled Ken to convert GNU `as', and Rob Savoye to convert DejaGNU, to
+using Autoconf.
+
+ I added more features in response to other peoples' requests. Many
+people had asked for `configure' scripts to share the results of the
+checks between runs, because (particularly when configuring a large
+source tree, like Cygnus does) they were frustratingly slow. Mike
+Haertel suggested adding site-specific initialization scripts. People
+distributing software that had to unpack on MS-DOS asked for a way to
+override the `.in' extension on the file names, which produced file
+names like `config.h.in' containing two dots. Jim Avera did an
+extensive examination of the problems with quoting in `AC_DEFINE' and
+`AC_SUBST'; his insights led to significant improvements. Richard
+Stallman asked that compiler output be sent to `config.log' instead of
+`/dev/null', to help people debug the Emacs `configure' script.
+
+ I made some other changes because of my dissatisfaction with the
+quality of the program. I made the messages showing results of the
+checks less ambiguous, always printing a result. I regularized the
+names of the macros and cleaned up coding style inconsistencies. I
+added some auxiliary utilities that I had developed to help convert
+source code packages to use Autoconf. With the help of Franc,ois
+Pinard, I made the macros not interrupt each others' messages. (That
+feature revealed some performance bottlenecks in GNU M4, which he
+hastily corrected!) I reorganized the documentation around problems
+people want to solve. And I began a test suite, because experience had
+shown that Autoconf has a pronounced tendency to regress when we change
+it.
+
+ Again, several alpha testers gave invaluable feedback, especially
+Franc,ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
+and Mark Eichin.
+
+ Finally, version 2.0 was ready. And there was much rejoicing. (And
+I have free time again. I think. Yeah, right.)
+
+
+File: autoconf.info, Node: GNU Free Documentation License, Next: Indices, Prev: History, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: autoconf.info, Node: Indices, Prev: GNU Free Documentation License, Up: Top
+
+Appendix B Indices
+******************
+
+* Menu:
+
+* Environment Variable Index:: Index of environment variables used
+* Output Variable Index:: Index of variables set in output files
+* Preprocessor Symbol Index:: Index of C preprocessor symbols defined
+* Cache Variable Index:: Index of documented cache variables
+* Autoconf Macro Index:: Index of Autoconf macros
+* M4 Macro Index:: Index of M4, M4sugar, and M4sh macros
+* Autotest Macro Index:: Index of Autotest macros
+* Program & Function Index:: Index of those with portability problems
+* Concept Index:: General index
+
+
+File: autoconf.info, Node: Environment Variable Index, Next: Output Variable Index, Up: Indices
+
+B.1 Environment Variable Index
+==============================
+
+This is an alphabetical list of the environment variables that might
+influence Autoconf checks.
+
+
+* Menu:
+
+* _: Special Shell Variables.
+ (line 36)
+* BIN_SH: Special Shell Variables.
+ (line 40)
+* CC: C Compiler. (line 61)
+* CDPATH: Special Shell Variables.
+ (line 44)
+* CFLAGS <1>: C Compiler. (line 61)
+* CFLAGS: Preset Output Variables.
+ (line 23)
+* CLICOLOR_FORCE: Special Shell Variables.
+ (line 67)
+* CONFIG_COMMANDS: Obsolete config.status Use.
+ (line 11)
+* CONFIG_FILES: Obsolete config.status Use.
+ (line 15)
+* CONFIG_HEADERS: Obsolete config.status Use.
+ (line 20)
+* CONFIG_LINKS: Obsolete config.status Use.
+ (line 25)
+* CONFIG_SHELL: config.status Invocation.
+ (line 102)
+* CONFIG_SITE: Site Defaults. (line 10)
+* CONFIG_STATUS: config.status Invocation.
+ (line 108)
+* CPP: C Compiler. (line 113)
+* CPPFLAGS: Preset Output Variables.
+ (line 72)
+* CXX: C++ Compiler. (line 7)
+* CXXCPP: C++ Compiler. (line 35)
+* CXXFLAGS <1>: C++ Compiler. (line 7)
+* CXXFLAGS: Preset Output Variables.
+ (line 94)
+* CYGWIN: Obsolete Macros. (line 124)
+* DUALCASE: Special Shell Variables.
+ (line 74)
+* ENV: Special Shell Variables.
+ (line 84)
+* ERL: Erlang Compiler and Interpreter.
+ (line 29)
+* ERLC: Erlang Compiler and Interpreter.
+ (line 10)
+* ERLCFLAGS <1>: Erlang Compiler and Interpreter.
+ (line 10)
+* ERLCFLAGS: Preset Output Variables.
+ (line 120)
+* F77: Fortran Compiler. (line 19)
+* FC: Fortran Compiler. (line 44)
+* FCFLAGS <1>: Fortran Compiler. (line 44)
+* FCFLAGS: Preset Output Variables.
+ (line 126)
+* FFLAGS <1>: Fortran Compiler. (line 19)
+* FFLAGS: Preset Output Variables.
+ (line 133)
+* FPATH: Special Shell Variables.
+ (line 101)
+* GOFLAGS: Preset Output Variables.
+ (line 170)
+* GREP_OPTIONS: Special Shell Variables.
+ (line 108)
+* IFS: Special Shell Variables.
+ (line 116)
+* LANG: Special Shell Variables.
+ (line 160)
+* LANGUAGE: Special Shell Variables.
+ (line 167)
+* LC_ADDRESS: Special Shell Variables.
+ (line 177)
+* LC_ALL <1>: Special Shell Variables.
+ (line 160)
+* LC_ALL: Initialization Macros.
+ (line 14)
+* LC_COLLATE: Special Shell Variables.
+ (line 160)
+* LC_CTYPE: Special Shell Variables.
+ (line 160)
+* LC_IDENTIFICATION: Special Shell Variables.
+ (line 177)
+* LC_MEASUREMENT: Special Shell Variables.
+ (line 177)
+* LC_MESSAGES: Special Shell Variables.
+ (line 160)
+* LC_MONETARY: Special Shell Variables.
+ (line 160)
+* LC_NAME: Special Shell Variables.
+ (line 177)
+* LC_NUMERIC: Special Shell Variables.
+ (line 160)
+* LC_PAPER: Special Shell Variables.
+ (line 177)
+* LC_TELEPHONE: Special Shell Variables.
+ (line 177)
+* LC_TIME: Special Shell Variables.
+ (line 160)
+* LDFLAGS: Preset Output Variables.
+ (line 140)
+* LIBS: Preset Output Variables.
+ (line 154)
+* LINENO <1>: Special Shell Variables.
+ (line 182)
+* LINENO: Initialization Macros.
+ (line 67)
+* M4: autom4te Invocation. (line 10)
+* MAIL: Special Shell Variables.
+ (line 84)
+* MAILPATH: Special Shell Variables.
+ (line 84)
+* NULLCMD: Special Shell Variables.
+ (line 311)
+* OBJC: Objective C Compiler.
+ (line 7)
+* OBJCFLAGS <1>: Objective C Compiler.
+ (line 7)
+* OBJCFLAGS: Preset Output Variables.
+ (line 162)
+* OBJCPP: Objective C Compiler.
+ (line 26)
+* OBJCXX: Objective C++ Compiler.
+ (line 7)
+* OBJCXXCPP: Objective C++ Compiler.
+ (line 27)
+* OBJCXXFLAGS <1>: Objective C++ Compiler.
+ (line 7)
+* OBJCXXFLAGS: Preset Output Variables.
+ (line 166)
+* options: Special Shell Variables.
+ (line 318)
+* PATH_SEPARATOR: Special Shell Variables.
+ (line 322)
+* POSIXLY_CORRECT: Special Shell Variables.
+ (line 331)
+* PS1: Special Shell Variables.
+ (line 84)
+* PS2: Special Shell Variables.
+ (line 84)
+* PS4: Special Shell Variables.
+ (line 84)
+* PWD: Special Shell Variables.
+ (line 346)
+* RANDOM: Special Shell Variables.
+ (line 355)
+* SHELL: Initialization Macros.
+ (line 14)
+* SIMPLE_BACKUP_SUFFIX: autoupdate Invocation.
+ (line 16)
+* status: Special Shell Variables.
+ (line 363)
+* TMPDIR: Initialization Macros.
+ (line 77)
+* WARNINGS <1>: autom4te Invocation. (line 58)
+* WARNINGS <2>: autoheader Invocation.
+ (line 83)
+* WARNINGS <3>: autoreconf Invocation.
+ (line 97)
+* WARNINGS: autoconf Invocation. (line 62)
+* XMKMF: System Services. (line 10)
+* YACC: Particular Programs. (line 200)
+* YFLAGS: Particular Programs. (line 200)
+
+
+File: autoconf.info, Node: Output Variable Index, Next: Preprocessor Symbol Index, Prev: Environment Variable Index, Up: Indices
+
+B.2 Output Variable Index
+=========================
+
+This is an alphabetical list of the variables that Autoconf can
+substitute into files that it creates, typically one or more makefiles.
+*Note Setting Output Variables::, for more information on how this is
+done.
+
+
+* Menu:
+
+* abs_builddir: Preset Output Variables.
+ (line 177)
+* abs_srcdir: Preset Output Variables.
+ (line 199)
+* abs_top_builddir: Preset Output Variables.
+ (line 192)
+* abs_top_srcdir: Preset Output Variables.
+ (line 206)
+* ac_empty: Fortran Compiler. (line 465)
+* ALLOCA: Particular Functions.
+ (line 10)
+* AWK: Particular Programs. (line 10)
+* bindir: Installation Directory Variables.
+ (line 15)
+* build: Canonicalizing. (line 26)
+* build_alias: Canonicalizing. (line 9)
+* build_cpu: Canonicalizing. (line 26)
+* build_os: Canonicalizing. (line 26)
+* build_vendor: Canonicalizing. (line 26)
+* builddir: Preset Output Variables.
+ (line 174)
+* CC <1>: System Services. (line 49)
+* CC: C Compiler. (line 61)
+* CFLAGS <1>: C Compiler. (line 61)
+* CFLAGS: Preset Output Variables.
+ (line 23)
+* configure_input: Preset Output Variables.
+ (line 58)
+* CPP: C Compiler. (line 113)
+* CPPFLAGS: Preset Output Variables.
+ (line 72)
+* cross_compiling: Runtime. (line 71)
+* CXX: C++ Compiler. (line 7)
+* CXXCPP: C++ Compiler. (line 35)
+* CXXFLAGS <1>: C++ Compiler. (line 7)
+* CXXFLAGS: Preset Output Variables.
+ (line 94)
+* datadir: Installation Directory Variables.
+ (line 18)
+* datarootdir: Installation Directory Variables.
+ (line 22)
+* DEFS: Preset Output Variables.
+ (line 98)
+* docdir: Installation Directory Variables.
+ (line 26)
+* dvidir: Installation Directory Variables.
+ (line 30)
+* ECHO_C: Preset Output Variables.
+ (line 108)
+* ECHO_N: Preset Output Variables.
+ (line 108)
+* ECHO_T: Preset Output Variables.
+ (line 108)
+* EGREP: Particular Programs. (line 29)
+* ERL <1>: Running the Compiler.
+ (line 30)
+* ERL <2>: Language Choice. (line 40)
+* ERL: Erlang Compiler and Interpreter.
+ (line 29)
+* ERLANG_ERTS_VER: Erlang Libraries. (line 12)
+* ERLANG_INSTALL_LIB_DIR <1>: Erlang Libraries. (line 86)
+* ERLANG_INSTALL_LIB_DIR: Installation Directory Variables.
+ (line 201)
+* ERLANG_INSTALL_LIB_DIR_LIBRARY <1>: Erlang Libraries. (line 93)
+* ERLANG_INSTALL_LIB_DIR_LIBRARY: Installation Directory Variables.
+ (line 206)
+* ERLANG_LIB_DIR: Erlang Libraries. (line 28)
+* ERLANG_LIB_DIR_LIBRARY: Erlang Libraries. (line 36)
+* ERLANG_LIB_VER_LIBRARY: Erlang Libraries. (line 36)
+* ERLANG_ROOT_DIR: Erlang Libraries. (line 22)
+* ERLC <1>: Language Choice. (line 40)
+* ERLC: Erlang Compiler and Interpreter.
+ (line 10)
+* ERLCFLAGS <1>: Language Choice. (line 40)
+* ERLCFLAGS <2>: Erlang Compiler and Interpreter.
+ (line 10)
+* ERLCFLAGS: Preset Output Variables.
+ (line 120)
+* exec_prefix: Installation Directory Variables.
+ (line 33)
+* EXEEXT <1>: Obsolete Macros. (line 178)
+* EXEEXT: Compilers and Preprocessors.
+ (line 6)
+* F77: Fortran Compiler. (line 19)
+* FC: Fortran Compiler. (line 44)
+* FC_MODEXT: Fortran Compiler. (line 438)
+* FC_MODINC: Fortran Compiler. (line 465)
+* FC_MODOUT: Fortran Compiler. (line 501)
+* FCFLAGS <1>: Fortran Compiler. (line 44)
+* FCFLAGS: Preset Output Variables.
+ (line 126)
+* FCLIBS: Fortran Compiler. (line 92)
+* FFLAGS <1>: Fortran Compiler. (line 19)
+* FFLAGS: Preset Output Variables.
+ (line 133)
+* FGREP: Particular Programs. (line 36)
+* FLIBS: Fortran Compiler. (line 92)
+* GETGROUPS_LIBS: Particular Functions.
+ (line 155)
+* GETLOADAVG_LIBS: Particular Functions.
+ (line 161)
+* GOFLAGS: Preset Output Variables.
+ (line 170)
+* GREP: Particular Programs. (line 20)
+* host: Canonicalizing. (line 34)
+* host_alias: Canonicalizing. (line 9)
+* host_cpu: Canonicalizing. (line 34)
+* host_os: Canonicalizing. (line 34)
+* host_vendor: Canonicalizing. (line 34)
+* htmldir: Installation Directory Variables.
+ (line 40)
+* includedir: Installation Directory Variables.
+ (line 43)
+* infodir: Installation Directory Variables.
+ (line 46)
+* INSTALL: Particular Programs. (line 43)
+* INSTALL_DATA: Particular Programs. (line 43)
+* INSTALL_PROGRAM: Particular Programs. (line 43)
+* INSTALL_SCRIPT: Particular Programs. (line 43)
+* KMEM_GROUP: Particular Functions.
+ (line 161)
+* LDFLAGS: Preset Output Variables.
+ (line 140)
+* LEX: Particular Programs. (line 114)
+* LEX_OUTPUT_ROOT: Particular Programs. (line 114)
+* LEXLIB: Particular Programs. (line 114)
+* libdir: Installation Directory Variables.
+ (line 49)
+* libexecdir: Installation Directory Variables.
+ (line 52)
+* LIBOBJDIR: AC_LIBOBJ vs LIBOBJS.
+ (line 35)
+* LIBOBJS <1>: Particular Structures.
+ (line 26)
+* LIBOBJS <2>: Generic Functions. (line 56)
+* LIBOBJS: Particular Functions.
+ (line 161)
+* LIBS <1>: Obsolete Macros. (line 295)
+* LIBS: Preset Output Variables.
+ (line 154)
+* LN_S: Particular Programs. (line 168)
+* localedir: Installation Directory Variables.
+ (line 55)
+* localstatedir: Installation Directory Variables.
+ (line 60)
+* mandir: Installation Directory Variables.
+ (line 63)
+* MKDIR_P: Particular Programs. (line 80)
+* NEED_SETGID: Particular Functions.
+ (line 161)
+* OBJC: Objective C Compiler.
+ (line 7)
+* OBJCFLAGS <1>: Objective C Compiler.
+ (line 7)
+* OBJCFLAGS: Preset Output Variables.
+ (line 162)
+* OBJCPP: Objective C Compiler.
+ (line 26)
+* OBJCXX: Objective C++ Compiler.
+ (line 7)
+* OBJCXXCPP: Objective C++ Compiler.
+ (line 27)
+* OBJCXXFLAGS <1>: Objective C++ Compiler.
+ (line 7)
+* OBJCXXFLAGS: Preset Output Variables.
+ (line 166)
+* OBJEXT <1>: Obsolete Macros. (line 384)
+* OBJEXT: Compilers and Preprocessors.
+ (line 11)
+* oldincludedir: Installation Directory Variables.
+ (line 66)
+* OPENMP_CFLAGS: Generic Compiler Characteristics.
+ (line 64)
+* OPENMP_CXXFLAGS: Generic Compiler Characteristics.
+ (line 64)
+* OPENMP_FCFLAGS: Generic Compiler Characteristics.
+ (line 64)
+* OPENMP_FFLAGS: Generic Compiler Characteristics.
+ (line 64)
+* PACKAGE_BUGREPORT: Initializing configure.
+ (line 57)
+* PACKAGE_NAME: Initializing configure.
+ (line 45)
+* PACKAGE_STRING: Initializing configure.
+ (line 54)
+* PACKAGE_TARNAME: Initializing configure.
+ (line 48)
+* PACKAGE_URL: Initializing configure.
+ (line 61)
+* PACKAGE_VERSION: Initializing configure.
+ (line 51)
+* pdfdir: Installation Directory Variables.
+ (line 69)
+* POW_LIB: Particular Functions.
+ (line 408)
+* prefix: Installation Directory Variables.
+ (line 72)
+* program_transform_name: Transforming Names. (line 11)
+* psdir: Installation Directory Variables.
+ (line 77)
+* RANLIB: Particular Programs. (line 187)
+* sbindir: Installation Directory Variables.
+ (line 80)
+* SED: Particular Programs. (line 191)
+* SET_MAKE: Output. (line 45)
+* sharedstatedir: Installation Directory Variables.
+ (line 84)
+* srcdir: Preset Output Variables.
+ (line 195)
+* subdirs: Subdirectories. (line 12)
+* sysconfdir: Installation Directory Variables.
+ (line 88)
+* target: Canonicalizing. (line 41)
+* target_alias: Canonicalizing. (line 9)
+* target_cpu: Canonicalizing. (line 41)
+* target_os: Canonicalizing. (line 41)
+* target_vendor: Canonicalizing. (line 41)
+* tmp: Initialization Macros.
+ (line 77)
+* top_build_prefix: Preset Output Variables.
+ (line 184)
+* top_builddir: Preset Output Variables.
+ (line 180)
+* top_srcdir: Preset Output Variables.
+ (line 202)
+* X_CFLAGS: System Services. (line 30)
+* X_EXTRA_LIBS: System Services. (line 30)
+* X_LIBS: System Services. (line 30)
+* X_PRE_LIBS: System Services. (line 30)
+* YACC: Particular Programs. (line 200)
+
+
+File: autoconf.info, Node: Preprocessor Symbol Index, Next: Cache Variable Index, Prev: Output Variable Index, Up: Indices
+
+B.3 Preprocessor Symbol Index
+=============================
+
+This is an alphabetical list of the C preprocessor symbols that the
+Autoconf macros define. To work with Autoconf, C source code needs to
+use these names in `#if' or `#ifdef' directives.
+
+
+* Menu:
+
+* __CHAR_UNSIGNED__: C Compiler. (line 291)
+* __EXTENSIONS__: Posix Variants. (line 10)
+* __PROTOTYPES: C Compiler. (line 351)
+* _ALL_SOURCE <1>: Obsolete Macros. (line 20)
+* _ALL_SOURCE: Posix Variants. (line 10)
+* _FILE_OFFSET_BITS: System Services. (line 49)
+* _GNU_SOURCE <1>: Obsolete Macros. (line 234)
+* _GNU_SOURCE: Posix Variants. (line 10)
+* _LARGE_FILES: System Services. (line 49)
+* _LARGEFILE_SOURCE: Particular Functions.
+ (line 147)
+* _MINIX <1>: Obsolete Macros. (line 371)
+* _MINIX: Posix Variants. (line 10)
+* _OPENMP: Generic Compiler Characteristics.
+ (line 64)
+* _POSIX_1_SOURCE <1>: Obsolete Macros. (line 371)
+* _POSIX_1_SOURCE: Posix Variants. (line 10)
+* _POSIX_PTHREAD_SEMANTICS: Posix Variants. (line 10)
+* _POSIX_SOURCE <1>: Obsolete Macros. (line 371)
+* _POSIX_SOURCE: Posix Variants. (line 10)
+* _POSIX_VERSION: Particular Headers. (line 228)
+* _TANDEM_SOURCE: Posix Variants. (line 10)
+* ALIGNOF_TYPE: Generic Compiler Characteristics.
+ (line 30)
+* C_ALLOCA: Particular Functions.
+ (line 10)
+* C_GETLOADAVG: Particular Functions.
+ (line 161)
+* CLOSEDIR_VOID: Particular Functions.
+ (line 69)
+* const: C Compiler. (line 217)
+* CXX_NO_MINUS_C_MINUS_O: C++ Compiler. (line 48)
+* DGUX: Particular Functions.
+ (line 161)
+* DIRENT: Obsolete Macros. (line 158)
+* F77_DUMMY_MAIN: Fortran Compiler. (line 130)
+* F77_FUNC: Fortran Compiler. (line 202)
+* F77_FUNC_: Fortran Compiler. (line 202)
+* F77_MAIN: Fortran Compiler. (line 176)
+* F77_NO_MINUS_C_MINUS_O: Fortran Compiler. (line 76)
+* FC_DUMMY_MAIN: Fortran Compiler. (line 130)
+* FC_FUNC: Fortran Compiler. (line 202)
+* FC_FUNC_: Fortran Compiler. (line 202)
+* FC_MAIN: Fortran Compiler. (line 176)
+* FC_NO_MINUS_C_MINUS_O: Fortran Compiler. (line 76)
+* FLEXIBLE_ARRAY_MEMBER: C Compiler. (line 315)
+* GETGROUPS_T: Particular Types. (line 14)
+* GETLOADAVG_PRIVILEGED: Particular Functions.
+ (line 161)
+* GETPGRP_VOID: Particular Functions.
+ (line 205)
+* gid_t: Particular Types. (line 126)
+* GWINSZ_IN_SYS_IOCTL: Particular Headers. (line 270)
+* HAVE__BOOL: Particular Headers. (line 10)
+* HAVE_AGGREGATE_MEMBER: Generic Structures. (line 29)
+* HAVE_ALLOCA_H: Particular Functions.
+ (line 10)
+* HAVE_C_BACKSLASH_A: C Compiler. (line 176)
+* HAVE_C_VARARRAYS: C Compiler. (line 339)
+* HAVE_CHOWN: Particular Functions.
+ (line 63)
+* HAVE_CONFIG_H: Configuration Headers.
+ (line 33)
+* HAVE_DECL_STRERROR_R: Particular Functions.
+ (line 388)
+* HAVE_DECL_SYMBOL: Generic Declarations.
+ (line 34)
+* HAVE_DECL_TZNAME: Particular Structures.
+ (line 43)
+* HAVE_DIRENT_H: Particular Headers. (line 25)
+* HAVE_DOPRNT: Particular Functions.
+ (line 443)
+* HAVE_FSEEKO: Particular Functions.
+ (line 147)
+* HAVE_FUNCTION: Generic Functions. (line 27)
+* HAVE_GETGROUPS: Particular Functions.
+ (line 155)
+* HAVE_GETMNTENT: Particular Functions.
+ (line 195)
+* HAVE_HEADER: Generic Headers. (line 46)
+* HAVE_INT16_T: Particular Types. (line 40)
+* HAVE_INT32_T: Particular Types. (line 43)
+* HAVE_INT64_T: Particular Types. (line 46)
+* HAVE_INT8_T: Particular Types. (line 21)
+* HAVE_INTMAX_T: Particular Types. (line 49)
+* HAVE_INTPTR_T: Particular Types. (line 54)
+* HAVE_LONG_DOUBLE <1>: Obsolete Macros. (line 33)
+* HAVE_LONG_DOUBLE: Particular Types. (line 59)
+* HAVE_LONG_DOUBLE_WIDER: Particular Types. (line 70)
+* HAVE_LONG_FILE_NAMES: System Services. (line 71)
+* HAVE_LONG_LONG_INT: Particular Types. (line 78)
+* HAVE_LSTAT_EMPTY_STRING_BUG: Particular Functions.
+ (line 363)
+* HAVE_MALLOC: Particular Functions.
+ (line 247)
+* HAVE_MBRTOWC: Particular Functions.
+ (line 279)
+* HAVE_MMAP: Particular Functions.
+ (line 311)
+* HAVE_NDIR_H: Particular Headers. (line 25)
+* HAVE_NLIST_H: Particular Functions.
+ (line 161)
+* HAVE_OBSTACK: Particular Functions.
+ (line 319)
+* HAVE_REALLOC: Particular Functions.
+ (line 326)
+* HAVE_RESOLV_H: Particular Headers. (line 73)
+* HAVE_RESTARTABLE_SYSCALLS: Obsolete Macros. (line 548)
+* HAVE_ST_BLKSIZE: Obsolete Macros. (line 521)
+* HAVE_ST_BLOCKS: Particular Structures.
+ (line 26)
+* HAVE_ST_RDEV: Obsolete Macros. (line 530)
+* HAVE_STAT_EMPTY_STRING_BUG: Particular Functions.
+ (line 363)
+* HAVE_STDBOOL_H: Particular Headers. (line 101)
+* HAVE_STRCOLL: Particular Functions.
+ (line 379)
+* HAVE_STRERROR_R: Particular Functions.
+ (line 388)
+* HAVE_STRFTIME: Particular Functions.
+ (line 401)
+* HAVE_STRINGIZE: C Compiler. (line 305)
+* HAVE_STRNLEN: Particular Functions.
+ (line 426)
+* HAVE_STRTOLD: Particular Functions.
+ (line 420)
+* HAVE_STRUCT_DIRENT_D_INO: Particular Structures.
+ (line 9)
+* HAVE_STRUCT_DIRENT_D_TYPE: Particular Structures.
+ (line 21)
+* HAVE_STRUCT_STAT_ST_BLKSIZE: Obsolete Macros. (line 521)
+* HAVE_STRUCT_STAT_ST_BLOCKS: Particular Structures.
+ (line 26)
+* HAVE_STRUCT_STAT_ST_RDEV: Obsolete Macros. (line 530)
+* HAVE_STRUCT_TM_TM_ZONE: Particular Structures.
+ (line 43)
+* HAVE_SYS_DIR_H: Particular Headers. (line 25)
+* HAVE_SYS_NDIR_H: Particular Headers. (line 25)
+* HAVE_SYS_WAIT_H: Particular Headers. (line 204)
+* HAVE_TM_ZONE: Particular Structures.
+ (line 43)
+* HAVE_TYPE: Generic Types. (line 28)
+* HAVE_TYPEOF: C Compiler. (line 345)
+* HAVE_TZNAME: Particular Structures.
+ (line 43)
+* HAVE_UINT16_T: Particular Types. (line 138)
+* HAVE_UINT32_T: Particular Types. (line 141)
+* HAVE_UINT64_T: Particular Types. (line 144)
+* HAVE_UINT8_T: Particular Types. (line 132)
+* HAVE_UINTMAX_T: Particular Types. (line 147)
+* HAVE_UINTPTR_T: Particular Types. (line 152)
+* HAVE_UNSIGNED_LONG_LONG_INT: Particular Types. (line 157)
+* HAVE_UTIME_NULL: Particular Functions.
+ (line 433)
+* HAVE_VFORK_H: Particular Functions.
+ (line 120)
+* HAVE_VPRINTF: Particular Functions.
+ (line 443)
+* HAVE_WAIT3: Obsolete Macros. (line 216)
+* HAVE_WORKING_FORK: Particular Functions.
+ (line 120)
+* HAVE_WORKING_VFORK: Particular Functions.
+ (line 120)
+* inline: C Compiler. (line 286)
+* int16_t: Particular Types. (line 40)
+* int32_t: Particular Types. (line 43)
+* int64_t: Particular Types. (line 46)
+* int8_t: Particular Types. (line 21)
+* INT_16_BITS: Obsolete Macros. (line 275)
+* intmax_t: Particular Types. (line 49)
+* intptr_t: Particular Types. (line 54)
+* LONG_64_BITS: Obsolete Macros. (line 337)
+* LSTAT_FOLLOWS_SLASHED_SYMLINK: Particular Functions.
+ (line 228)
+* MAJOR_IN_MKDEV: Particular Headers. (line 68)
+* MAJOR_IN_SYSMACROS: Particular Headers. (line 68)
+* malloc: Particular Functions.
+ (line 247)
+* mbstate_t: Particular Types. (line 88)
+* mode_t: Particular Types. (line 96)
+* NDEBUG: Particular Headers. (line 20)
+* NDIR: Obsolete Macros. (line 158)
+* NEED_MEMORY_H: Obsolete Macros. (line 358)
+* NEED_SETGID: Particular Functions.
+ (line 161)
+* NLIST_NAME_UNION: Particular Functions.
+ (line 161)
+* NO_MINUS_C_MINUS_O: C Compiler. (line 102)
+* off_t: Particular Types. (line 102)
+* PACKAGE_BUGREPORT: Initializing configure.
+ (line 57)
+* PACKAGE_NAME: Initializing configure.
+ (line 45)
+* PACKAGE_STRING: Initializing configure.
+ (line 54)
+* PACKAGE_TARNAME: Initializing configure.
+ (line 48)
+* PACKAGE_URL: Initializing configure.
+ (line 61)
+* PACKAGE_VERSION: Initializing configure.
+ (line 51)
+* PARAMS: C Compiler. (line 351)
+* pid_t: Particular Types. (line 108)
+* PROTOTYPES: C Compiler. (line 351)
+* realloc: Particular Functions.
+ (line 326)
+* restrict: C Compiler. (line 247)
+* RETSIGTYPE: Obsolete Macros. (line 662)
+* SELECT_TYPE_ARG1: Particular Functions.
+ (line 337)
+* SELECT_TYPE_ARG234: Particular Functions.
+ (line 337)
+* SELECT_TYPE_ARG5: Particular Functions.
+ (line 337)
+* SETPGRP_VOID: Particular Functions.
+ (line 348)
+* SETVBUF_REVERSED: Obsolete Macros. (line 208)
+* size_t: Particular Types. (line 114)
+* SIZEOF_TYPE-OR-EXPR: Generic Compiler Characteristics.
+ (line 8)
+* ssize_t: Particular Types. (line 120)
+* STAT_MACROS_BROKEN: Particular Headers. (line 92)
+* STDC_HEADERS: Particular Headers. (line 135)
+* STRERROR_R_CHAR_P: Particular Functions.
+ (line 388)
+* SVR4: Particular Functions.
+ (line 161)
+* SYS_SIGLIST_DECLARED: Obsolete Macros. (line 141)
+* SYSDIR: Obsolete Macros. (line 158)
+* SYSNDIR: Obsolete Macros. (line 158)
+* TIME_WITH_SYS_TIME: Particular Headers. (line 244)
+* TM_IN_SYS_TIME: Particular Structures.
+ (line 35)
+* typeof: C Compiler. (line 345)
+* uid_t: Particular Types. (line 126)
+* uint16_t: Particular Types. (line 138)
+* uint32_t: Particular Types. (line 141)
+* uint64_t: Particular Types. (line 144)
+* uint8_t: Particular Types. (line 132)
+* uintmax_t: Particular Types. (line 147)
+* uintptr_t: Particular Types. (line 152)
+* UMAX: Particular Functions.
+ (line 161)
+* UMAX4_3: Particular Functions.
+ (line 161)
+* USG: Obsolete Macros. (line 685)
+* VARIABLE: Defining Symbols. (line 32)
+* vfork: Particular Functions.
+ (line 120)
+* volatile: C Compiler. (line 265)
+* WORDS_BIGENDIAN: C Compiler. (line 184)
+* X_DISPLAY_MISSING: System Services. (line 30)
+* YYTEXT_POINTER: Particular Programs. (line 114)
+
+
+File: autoconf.info, Node: Cache Variable Index, Next: Autoconf Macro Index, Prev: Preprocessor Symbol Index, Up: Indices
+
+B.4 Cache Variable Index
+========================
+
+This is an alphabetical list of documented cache variables used by
+macros defined in Autoconf. Autoconf macros may use additional cache
+variables internally.
+
+
+* Menu:
+
+* ac_cv_alignof_TYPE-OR-EXPR: Generic Compiler Characteristics.
+ (line 30)
+* ac_cv_c_const: C Compiler. (line 217)
+* ac_cv_c_int16_t: Particular Types. (line 40)
+* ac_cv_c_int32_t: Particular Types. (line 43)
+* ac_cv_c_int64_t: Particular Types. (line 46)
+* ac_cv_c_int8_t: Particular Types. (line 21)
+* ac_cv_c_restrict: C Compiler. (line 247)
+* ac_cv_c_uint16_t: Particular Types. (line 138)
+* ac_cv_c_uint32_t: Particular Types. (line 141)
+* ac_cv_c_uint64_t: Particular Types. (line 144)
+* ac_cv_c_uint8_t: Particular Types. (line 132)
+* ac_cv_f77_compiler_gnu: Fortran Compiler. (line 19)
+* ac_cv_f77_dummy_main: Fortran Compiler. (line 130)
+* ac_cv_f77_implicit_none: Fortran Compiler. (line 427)
+* ac_cv_f77_libs: Fortran Compiler. (line 92)
+* ac_cv_f77_main: Fortran Compiler. (line 176)
+* ac_cv_f77_mangling: Fortran Compiler. (line 202)
+* ac_cv_fc_check_bounds: Fortran Compiler. (line 413)
+* ac_cv_fc_compiler_gnu: Fortran Compiler. (line 44)
+* ac_cv_fc_dummy_main: Fortran Compiler. (line 130)
+* ac_cv_fc_fixedform: Fortran Compiler. (line 375)
+* ac_cv_fc_freeform: Fortran Compiler. (line 351)
+* ac_cv_fc_implicit_none: Fortran Compiler. (line 427)
+* ac_cv_fc_libs: Fortran Compiler. (line 92)
+* ac_cv_fc_line_length: Fortran Compiler. (line 396)
+* ac_cv_fc_main: Fortran Compiler. (line 176)
+* ac_cv_fc_mangling: Fortran Compiler. (line 202)
+* ac_cv_fc_module_ext: Fortran Compiler. (line 438)
+* ac_cv_fc_module_flag: Fortran Compiler. (line 465)
+* ac_cv_fc_module_output_flag: Fortran Compiler. (line 501)
+* ac_cv_fc_pp_define: Fortran Compiler. (line 336)
+* ac_cv_fc_pp_srcext_EXT: Fortran Compiler. (line 279)
+* ac_cv_fc_srcext_EXT: Fortran Compiler. (line 279)
+* ac_cv_file_FILE: Files. (line 13)
+* ac_cv_func_chown_works: Particular Functions.
+ (line 63)
+* ac_cv_func_closedir_void: Particular Functions.
+ (line 69)
+* ac_cv_func_fnmatch_gnu: Particular Functions.
+ (line 109)
+* ac_cv_func_fnmatch_works: Particular Functions.
+ (line 94)
+* ac_cv_func_FUNCTION: Generic Functions. (line 15)
+* ac_cv_func_getgroups_works: Particular Functions.
+ (line 155)
+* ac_cv_func_getpgrp_void: Particular Functions.
+ (line 205)
+* ac_cv_func_lstat_dereferences_slashed_symlink: Particular Functions.
+ (line 228)
+* ac_cv_func_lstat_empty_string_bug: Particular Functions.
+ (line 363)
+* ac_cv_func_malloc_0_nonnull: Particular Functions.
+ (line 247)
+* ac_cv_func_mbrtowc: Particular Functions.
+ (line 279)
+* ac_cv_func_memcmp_working: Particular Functions.
+ (line 286)
+* ac_cv_func_mmap_fixed_mapped: Particular Functions.
+ (line 311)
+* ac_cv_func_obstack: Particular Functions.
+ (line 319)
+* ac_cv_func_pow: Particular Functions.
+ (line 408)
+* ac_cv_func_realloc_0_nonnull: Particular Functions.
+ (line 326)
+* ac_cv_func_setpgrp_void: Particular Functions.
+ (line 348)
+* ac_cv_func_stat_empty_string_bug: Particular Functions.
+ (line 363)
+* ac_cv_func_strcoll_works: Particular Functions.
+ (line 379)
+* ac_cv_func_strerror_r_char_p: Particular Functions.
+ (line 388)
+* ac_cv_func_strnlen_working: Particular Functions.
+ (line 426)
+* ac_cv_func_strtod: Particular Functions.
+ (line 408)
+* ac_cv_func_strtold: Particular Functions.
+ (line 420)
+* ac_cv_func_utime_null: Particular Functions.
+ (line 433)
+* ac_cv_func_working_mktime: Particular Functions.
+ (line 299)
+* ac_cv_have_decl_SYMBOL: Generic Declarations.
+ (line 11)
+* ac_cv_header_HEADER-FILE: Generic Headers. (line 13)
+* ac_cv_header_stdbool_h: Particular Headers. (line 10)
+* ac_cv_header_stdc: Particular Headers. (line 135)
+* ac_cv_header_sys_wait_h: Particular Headers. (line 204)
+* ac_cv_header_time: Particular Headers. (line 244)
+* ac_cv_lib_error_at_line: Particular Functions.
+ (line 84)
+* ac_cv_lib_LIBRARY_FUNCTION: Libraries. (line 11)
+* ac_cv_member_AGGREGATE_MEMBER: Generic Structures. (line 11)
+* ac_cv_member_struct_stat_st_blocks: Particular Structures.
+ (line 26)
+* ac_cv_path_install: Particular Programs. (line 43)
+* ac_cv_path_mkdir: Particular Programs. (line 80)
+* ac_cv_path_SED: Particular Programs. (line 191)
+* ac_cv_path_VARIABLE: Generic Programs. (line 108)
+* ac_cv_prog_AWK: Particular Programs. (line 10)
+* ac_cv_prog_c_openmp: Generic Compiler Characteristics.
+ (line 64)
+* ac_cv_prog_cc_c89: C Compiler. (line 61)
+* ac_cv_prog_cc_c99: C Compiler. (line 161)
+* ac_cv_prog_cc_COMPILER_c_o: C Compiler. (line 102)
+* ac_cv_prog_cc_stdc: C Compiler. (line 137)
+* ac_cv_prog_cxx_openmp: Generic Compiler Characteristics.
+ (line 64)
+* ac_cv_prog_EGREP: Particular Programs. (line 29)
+* ac_cv_prog_f77_c_o: Fortran Compiler. (line 76)
+* ac_cv_prog_f77_g: Fortran Compiler. (line 19)
+* ac_cv_prog_f77_openmp: Generic Compiler Characteristics.
+ (line 64)
+* ac_cv_prog_f77_v: Fortran Compiler. (line 92)
+* ac_cv_prog_fc_c_o: Fortran Compiler. (line 76)
+* ac_cv_prog_fc_g: Fortran Compiler. (line 44)
+* ac_cv_prog_fc_openmp: Generic Compiler Characteristics.
+ (line 64)
+* ac_cv_prog_fc_v: Fortran Compiler. (line 92)
+* ac_cv_prog_FGREP: Particular Programs. (line 36)
+* ac_cv_prog_GREP: Particular Programs. (line 20)
+* ac_cv_prog_LEX: Particular Programs. (line 114)
+* ac_cv_prog_VARIABLE: Generic Programs. (line 24)
+* ac_cv_prog_YACC: Particular Programs. (line 200)
+* ac_cv_search_FUNCTION: Libraries. (line 52)
+* ac_cv_search_getmntent: Particular Functions.
+ (line 195)
+* ac_cv_sizeof_TYPE-OR-EXPR: Generic Compiler Characteristics.
+ (line 8)
+* ac_cv_sys_posix_termios: System Services. (line 75)
+* ac_cv_type_getgroups: Particular Types. (line 14)
+* ac_cv_type_long_double: Particular Types. (line 59)
+* ac_cv_type_long_double_wider: Particular Types. (line 70)
+* ac_cv_type_long_long_int: Particular Types. (line 78)
+* ac_cv_type_mbstate_t: Particular Types. (line 88)
+* ac_cv_type_mode_t: Particular Types. (line 96)
+* ac_cv_type_off_t: Particular Types. (line 102)
+* ac_cv_type_pid_t: Particular Types. (line 108)
+* ac_cv_type_size_t: Particular Types. (line 114)
+* ac_cv_type_ssize_t: Particular Types. (line 120)
+* ac_cv_type_TYPE: Generic Types. (line 11)
+* ac_cv_type_uid_t: Particular Types. (line 126)
+* ac_cv_type_unsigned_long_long_int: Particular Types. (line 157)
+
+
+File: autoconf.info, Node: Autoconf Macro Index, Next: M4 Macro Index, Prev: Cache Variable Index, Up: Indices
+
+B.5 Autoconf Macro Index
+========================
+
+This is an alphabetical list of the Autoconf macros.
+
+
+* Menu:
+
+* AC_ACT_IFELSE: AC_ACT_IFELSE vs AC_TRY_ACT.
+ (line 6)
+* AC_AIX: Obsolete Macros. (line 20)
+* AC_ALLOCA: Obsolete Macros. (line 24)
+* AC_ARG_ARRAY: Obsolete Macros. (line 27)
+* AC_ARG_ENABLE: Package Options. (line 35)
+* AC_ARG_PROGRAM: Transforming Names. (line 11)
+* AC_ARG_VAR: Setting Output Variables.
+ (line 79)
+* AC_ARG_WITH: External Software. (line 36)
+* AC_AUTOCONF_VERSION: Versioning. (line 21)
+* AC_BEFORE: Suggested Ordering. (line 28)
+* AC_C_BACKSLASH_A: C Compiler. (line 176)
+* AC_C_BIGENDIAN: C Compiler. (line 184)
+* AC_C_CHAR_UNSIGNED: C Compiler. (line 291)
+* AC_C_CONST: C Compiler. (line 217)
+* AC_C_CROSS: Obsolete Macros. (line 30)
+* AC_C_FLEXIBLE_ARRAY_MEMBER: C Compiler. (line 315)
+* AC_C_INLINE: C Compiler. (line 286)
+* AC_C_LONG_DOUBLE: Obsolete Macros. (line 33)
+* AC_C_PROTOTYPES: C Compiler. (line 351)
+* AC_C_RESTRICT: C Compiler. (line 247)
+* AC_C_STRINGIZE: C Compiler. (line 305)
+* AC_C_TYPEOF: C Compiler. (line 345)
+* AC_C_VARARRAYS: C Compiler. (line 339)
+* AC_C_VOLATILE: C Compiler. (line 265)
+* AC_CACHE_CHECK: Caching Results. (line 30)
+* AC_CACHE_LOAD: Cache Checkpointing. (line 13)
+* AC_CACHE_SAVE: Cache Checkpointing. (line 17)
+* AC_CACHE_VAL: Caching Results. (line 16)
+* AC_CANONICAL_BUILD: Canonicalizing. (line 26)
+* AC_CANONICAL_HOST: Canonicalizing. (line 34)
+* AC_CANONICAL_SYSTEM: Obsolete Macros. (line 41)
+* AC_CANONICAL_TARGET: Canonicalizing. (line 41)
+* AC_CHAR_UNSIGNED: Obsolete Macros. (line 51)
+* AC_CHECK_ALIGNOF: Generic Compiler Characteristics.
+ (line 30)
+* AC_CHECK_DECL: Generic Declarations.
+ (line 11)
+* AC_CHECK_DECLS: Generic Declarations.
+ (line 34)
+* AC_CHECK_DECLS_ONCE: Generic Declarations.
+ (line 79)
+* AC_CHECK_FILE: Files. (line 13)
+* AC_CHECK_FILES: Files. (line 21)
+* AC_CHECK_FUNC: Generic Functions. (line 15)
+* AC_CHECK_FUNCS: Generic Functions. (line 27)
+* AC_CHECK_FUNCS_ONCE: Generic Functions. (line 38)
+* AC_CHECK_HEADER: Generic Headers. (line 13)
+* AC_CHECK_HEADER_STDBOOL: Particular Headers. (line 10)
+* AC_CHECK_HEADERS: Generic Headers. (line 46)
+* AC_CHECK_HEADERS_ONCE: Generic Headers. (line 87)
+* AC_CHECK_LIB: Libraries. (line 11)
+* AC_CHECK_MEMBER: Generic Structures. (line 11)
+* AC_CHECK_MEMBERS: Generic Structures. (line 29)
+* AC_CHECK_PROG: Generic Programs. (line 24)
+* AC_CHECK_PROGS: Generic Programs. (line 36)
+* AC_CHECK_SIZEOF: Generic Compiler Characteristics.
+ (line 8)
+* AC_CHECK_TARGET_TOOL: Generic Programs. (line 48)
+* AC_CHECK_TARGET_TOOLS: Generic Programs. (line 79)
+* AC_CHECK_TOOL: Generic Programs. (line 64)
+* AC_CHECK_TOOLS: Generic Programs. (line 92)
+* AC_CHECK_TYPE <1>: Obsolete Macros. (line 54)
+* AC_CHECK_TYPE: Generic Types. (line 11)
+* AC_CHECK_TYPES: Generic Types. (line 28)
+* AC_CHECKING: Obsolete Macros. (line 101)
+* AC_COMPILE_CHECK: Obsolete Macros. (line 109)
+* AC_COMPILE_IFELSE: Running the Compiler.
+ (line 13)
+* AC_COMPUTE_INT: Generic Compiler Characteristics.
+ (line 42)
+* AC_CONFIG_AUX_DIR: Input. (line 20)
+* AC_CONFIG_COMMANDS: Configuration Commands.
+ (line 13)
+* AC_CONFIG_COMMANDS_POST: Configuration Commands.
+ (line 41)
+* AC_CONFIG_COMMANDS_PRE: Configuration Commands.
+ (line 35)
+* AC_CONFIG_FILES: Configuration Files. (line 9)
+* AC_CONFIG_HEADERS: Configuration Headers.
+ (line 33)
+* AC_CONFIG_ITEMS: Configuration Actions.
+ (line 12)
+* AC_CONFIG_LIBOBJ_DIR: Generic Functions. (line 97)
+* AC_CONFIG_LINKS: Configuration Links. (line 12)
+* AC_CONFIG_MACRO_DIR: Input. (line 48)
+* AC_CONFIG_SRCDIR: Input. (line 7)
+* AC_CONFIG_SUBDIRS: Subdirectories. (line 12)
+* AC_CONFIG_TESTDIR: Making testsuite Scripts.
+ (line 26)
+* AC_CONST: Obsolete Macros. (line 117)
+* AC_COPYRIGHT: Notices. (line 10)
+* AC_CROSS_CHECK: Obsolete Macros. (line 120)
+* AC_CYGWIN: Obsolete Macros. (line 124)
+* AC_DATAROOTDIR_CHECKED: Changed Directory Variables.
+ (line 58)
+* AC_DECL_SYS_SIGLIST: Obsolete Macros. (line 141)
+* AC_DECL_YYTEXT: Obsolete Macros. (line 154)
+* AC_DEFINE: Defining Symbols. (line 32)
+* AC_DEFINE_UNQUOTED: Defining Symbols. (line 74)
+* AC_DEFUN: Macro Definitions. (line 7)
+* AC_DEFUN_ONCE: One-Shot Macros. (line 14)
+* AC_DIAGNOSE: Reporting Messages. (line 18)
+* AC_DIR_HEADER: Obsolete Macros. (line 158)
+* AC_DISABLE_OPTION_CHECKING: Option Checking. (line 28)
+* AC_DYNIX_SEQ: Obsolete Macros. (line 170)
+* AC_EGREP_CPP: Running the Preprocessor.
+ (line 74)
+* AC_EGREP_HEADER: Running the Preprocessor.
+ (line 67)
+* AC_EMXOS2: Obsolete Macros. (line 183)
+* AC_ENABLE: Obsolete Macros. (line 189)
+* AC_ERLANG_CHECK_LIB: Erlang Libraries. (line 36)
+* AC_ERLANG_NEED_ERL: Erlang Compiler and Interpreter.
+ (line 41)
+* AC_ERLANG_NEED_ERLC: Erlang Compiler and Interpreter.
+ (line 24)
+* AC_ERLANG_PATH_ERL: Erlang Compiler and Interpreter.
+ (line 29)
+* AC_ERLANG_PATH_ERLC: Erlang Compiler and Interpreter.
+ (line 10)
+* AC_ERLANG_SUBST_ERTS_VER: Erlang Libraries. (line 12)
+* AC_ERLANG_SUBST_INSTALL_LIB_DIR <1>: Erlang Libraries. (line 86)
+* AC_ERLANG_SUBST_INSTALL_LIB_DIR: Installation Directory Variables.
+ (line 201)
+* AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR <1>: Erlang Libraries. (line 93)
+* AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR: Installation Directory Variables.
+ (line 206)
+* AC_ERLANG_SUBST_LIB_DIR: Erlang Libraries. (line 28)
+* AC_ERLANG_SUBST_ROOT_DIR: Erlang Libraries. (line 22)
+* AC_ERROR: Obsolete Macros. (line 193)
+* AC_EXEEXT: Obsolete Macros. (line 178)
+* AC_F77_DUMMY_MAIN: Fortran Compiler. (line 130)
+* AC_F77_FUNC: Fortran Compiler. (line 266)
+* AC_F77_IMPLICIT_NONE: Fortran Compiler. (line 427)
+* AC_F77_LIBRARY_LDFLAGS: Fortran Compiler. (line 92)
+* AC_F77_MAIN: Fortran Compiler. (line 176)
+* AC_F77_WRAPPERS: Fortran Compiler. (line 202)
+* AC_FATAL: Reporting Messages. (line 34)
+* AC_FC_CHECK_BOUNDS: Fortran Compiler. (line 413)
+* AC_FC_DUMMY_MAIN: Fortran Compiler. (line 130)
+* AC_FC_FIXEDFORM: Fortran Compiler. (line 375)
+* AC_FC_FREEFORM: Fortran Compiler. (line 351)
+* AC_FC_FUNC: Fortran Compiler. (line 266)
+* AC_FC_IMPLICIT_NONE: Fortran Compiler. (line 427)
+* AC_FC_LIBRARY_LDFLAGS: Fortran Compiler. (line 92)
+* AC_FC_LINE_LENGTH: Fortran Compiler. (line 396)
+* AC_FC_MAIN: Fortran Compiler. (line 176)
+* AC_FC_MODULE_EXTENSION: Fortran Compiler. (line 438)
+* AC_FC_MODULE_FLAG: Fortran Compiler. (line 465)
+* AC_FC_MODULE_OUTPUT_FLAG: Fortran Compiler. (line 501)
+* AC_FC_PP_DEFINE: Fortran Compiler. (line 336)
+* AC_FC_PP_SRCEXT: Fortran Compiler. (line 279)
+* AC_FC_SRCEXT: Fortran Compiler. (line 279)
+* AC_FC_WRAPPERS: Fortran Compiler. (line 202)
+* AC_FIND_X: Obsolete Macros. (line 196)
+* AC_FIND_XTRA: Obsolete Macros. (line 199)
+* AC_FOREACH: Obsolete Macros. (line 202)
+* AC_FUNC_ALLOCA: Particular Functions.
+ (line 10)
+* AC_FUNC_CHECK: Obsolete Macros. (line 205)
+* AC_FUNC_CHOWN: Particular Functions.
+ (line 63)
+* AC_FUNC_CLOSEDIR_VOID: Particular Functions.
+ (line 69)
+* AC_FUNC_ERROR_AT_LINE: Particular Functions.
+ (line 84)
+* AC_FUNC_FNMATCH: Particular Functions.
+ (line 94)
+* AC_FUNC_FNMATCH_GNU: Particular Functions.
+ (line 109)
+* AC_FUNC_FORK: Particular Functions.
+ (line 120)
+* AC_FUNC_FSEEKO: Particular Functions.
+ (line 147)
+* AC_FUNC_GETGROUPS: Particular Functions.
+ (line 155)
+* AC_FUNC_GETLOADAVG: Particular Functions.
+ (line 161)
+* AC_FUNC_GETMNTENT: Particular Functions.
+ (line 195)
+* AC_FUNC_GETPGRP: Particular Functions.
+ (line 205)
+* AC_FUNC_LSTAT: Particular Functions.
+ (line 363)
+* AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK: Particular Functions.
+ (line 228)
+* AC_FUNC_MALLOC: Particular Functions.
+ (line 247)
+* AC_FUNC_MBRTOWC: Particular Functions.
+ (line 279)
+* AC_FUNC_MEMCMP: Particular Functions.
+ (line 286)
+* AC_FUNC_MKTIME: Particular Functions.
+ (line 299)
+* AC_FUNC_MMAP: Particular Functions.
+ (line 311)
+* AC_FUNC_OBSTACK: Particular Functions.
+ (line 319)
+* AC_FUNC_REALLOC: Particular Functions.
+ (line 326)
+* AC_FUNC_SELECT_ARGTYPES: Particular Functions.
+ (line 337)
+* AC_FUNC_SETPGRP: Particular Functions.
+ (line 348)
+* AC_FUNC_SETVBUF_REVERSED: Obsolete Macros. (line 208)
+* AC_FUNC_STAT: Particular Functions.
+ (line 363)
+* AC_FUNC_STRCOLL: Particular Functions.
+ (line 379)
+* AC_FUNC_STRERROR_R: Particular Functions.
+ (line 388)
+* AC_FUNC_STRFTIME: Particular Functions.
+ (line 401)
+* AC_FUNC_STRNLEN: Particular Functions.
+ (line 426)
+* AC_FUNC_STRTOD: Particular Functions.
+ (line 408)
+* AC_FUNC_STRTOLD: Particular Functions.
+ (line 420)
+* AC_FUNC_UTIME_NULL: Particular Functions.
+ (line 433)
+* AC_FUNC_VPRINTF: Particular Functions.
+ (line 443)
+* AC_FUNC_WAIT3: Obsolete Macros. (line 216)
+* AC_GCC_TRADITIONAL: Obsolete Macros. (line 224)
+* AC_GETGROUPS_T: Obsolete Macros. (line 228)
+* AC_GETLOADAVG: Obsolete Macros. (line 231)
+* AC_GNU_SOURCE: Obsolete Macros. (line 234)
+* AC_HAVE_FUNCS: Obsolete Macros. (line 238)
+* AC_HAVE_HEADERS: Obsolete Macros. (line 241)
+* AC_HAVE_LIBRARY: Obsolete Macros. (line 245)
+* AC_HAVE_POUNDBANG: Obsolete Macros. (line 252)
+* AC_HEADER_ASSERT: Particular Headers. (line 20)
+* AC_HEADER_CHECK: Obsolete Macros. (line 255)
+* AC_HEADER_DIRENT: Particular Headers. (line 25)
+* AC_HEADER_EGREP: Obsolete Macros. (line 258)
+* AC_HEADER_MAJOR: Particular Headers. (line 68)
+* AC_HEADER_RESOLV: Particular Headers. (line 73)
+* AC_HEADER_STAT: Particular Headers. (line 92)
+* AC_HEADER_STDBOOL: Particular Headers. (line 101)
+* AC_HEADER_STDC: Particular Headers. (line 135)
+* AC_HEADER_SYS_WAIT: Particular Headers. (line 204)
+* AC_HEADER_TIME: Particular Headers. (line 244)
+* AC_HEADER_TIOCGWINSZ: Particular Headers. (line 270)
+* AC_HELP_STRING: Obsolete Macros. (line 261)
+* AC_INCLUDES_DEFAULT: Default Includes. (line 29)
+* AC_INIT <1>: Obsolete Macros. (line 264)
+* AC_INIT: Initializing configure.
+ (line 14)
+* AC_INLINE: Obsolete Macros. (line 272)
+* AC_INT_16_BITS: Obsolete Macros. (line 275)
+* AC_IRIX_SUN: Obsolete Macros. (line 279)
+* AC_ISC_POSIX: Obsolete Macros. (line 295)
+* AC_LANG: Language Choice. (line 14)
+* AC_LANG_ASSERT: Language Choice. (line 79)
+* AC_LANG_C: Obsolete Macros. (line 302)
+* AC_LANG_CALL: Generating Sources. (line 142)
+* AC_LANG_CONFTEST: Generating Sources. (line 12)
+* AC_LANG_CPLUSPLUS: Obsolete Macros. (line 305)
+* AC_LANG_DEFINES_PROVIDED: Generating Sources. (line 31)
+* AC_LANG_FORTRAN77: Obsolete Macros. (line 308)
+* AC_LANG_FUNC_LINK_TRY: Generating Sources. (line 154)
+* AC_LANG_POP: Language Choice. (line 66)
+* AC_LANG_PROGRAM: Generating Sources. (line 78)
+* AC_LANG_PUSH: Language Choice. (line 61)
+* AC_LANG_RESTORE: Obsolete Macros. (line 311)
+* AC_LANG_SAVE: Obsolete Macros. (line 317)
+* AC_LANG_SOURCE: Generating Sources. (line 40)
+* AC_LANG_WERROR: Generic Compiler Characteristics.
+ (line 54)
+* AC_LIBOBJ: Generic Functions. (line 56)
+* AC_LIBSOURCE: Generic Functions. (line 65)
+* AC_LIBSOURCES: Generic Functions. (line 89)
+* AC_LINK_FILES: Obsolete Macros. (line 322)
+* AC_LINK_IFELSE: Running the Linker. (line 24)
+* AC_LN_S: Obsolete Macros. (line 334)
+* AC_LONG_64_BITS: Obsolete Macros. (line 337)
+* AC_LONG_DOUBLE: Obsolete Macros. (line 342)
+* AC_LONG_FILE_NAMES: Obsolete Macros. (line 350)
+* AC_MAJOR_HEADER: Obsolete Macros. (line 355)
+* AC_MEMORY_H: Obsolete Macros. (line 358)
+* AC_MINGW32: Obsolete Macros. (line 365)
+* AC_MINIX: Obsolete Macros. (line 371)
+* AC_MINUS_C_MINUS_O: Obsolete Macros. (line 375)
+* AC_MMAP: Obsolete Macros. (line 378)
+* AC_MODE_T: Obsolete Macros. (line 381)
+* AC_MSG_CHECKING: Printing Messages. (line 24)
+* AC_MSG_ERROR: Printing Messages. (line 56)
+* AC_MSG_FAILURE: Printing Messages. (line 66)
+* AC_MSG_NOTICE: Printing Messages. (line 46)
+* AC_MSG_RESULT: Printing Messages. (line 35)
+* AC_MSG_WARN: Printing Messages. (line 72)
+* AC_OBJEXT: Obsolete Macros. (line 384)
+* AC_OBSOLETE: Obsolete Macros. (line 390)
+* AC_OFF_T: Obsolete Macros. (line 405)
+* AC_OPENMP: Generic Compiler Characteristics.
+ (line 64)
+* AC_OUTPUT <1>: Obsolete Macros. (line 408)
+* AC_OUTPUT: Output. (line 13)
+* AC_OUTPUT_COMMANDS: Obsolete Macros. (line 420)
+* AC_PACKAGE_BUGREPORT: Initializing configure.
+ (line 57)
+* AC_PACKAGE_NAME: Initializing configure.
+ (line 45)
+* AC_PACKAGE_STRING: Initializing configure.
+ (line 54)
+* AC_PACKAGE_TARNAME: Initializing configure.
+ (line 48)
+* AC_PACKAGE_URL: Initializing configure.
+ (line 61)
+* AC_PACKAGE_VERSION: Initializing configure.
+ (line 51)
+* AC_PATH_PROG: Generic Programs. (line 108)
+* AC_PATH_PROGS: Generic Programs. (line 115)
+* AC_PATH_PROGS_FEATURE_CHECK: Generic Programs. (line 123)
+* AC_PATH_TARGET_TOOL: Generic Programs. (line 159)
+* AC_PATH_TOOL: Generic Programs. (line 164)
+* AC_PATH_X: System Services. (line 10)
+* AC_PATH_XTRA: System Services. (line 30)
+* AC_PID_T: Obsolete Macros. (line 450)
+* AC_PREFIX: Obsolete Macros. (line 453)
+* AC_PREFIX_DEFAULT: Default Prefix. (line 16)
+* AC_PREFIX_PROGRAM: Default Prefix. (line 25)
+* AC_PREPROC_IFELSE: Running the Preprocessor.
+ (line 20)
+* AC_PREREQ: Versioning. (line 11)
+* AC_PRESERVE_HELP_ORDER: Help Formatting. (line 20)
+* AC_PROG_AWK: Particular Programs. (line 10)
+* AC_PROG_CC: C Compiler. (line 61)
+* AC_PROG_CC_C89: C Compiler. (line 147)
+* AC_PROG_CC_C99: C Compiler. (line 161)
+* AC_PROG_CC_C_O: C Compiler. (line 102)
+* AC_PROG_CC_STDC: C Compiler. (line 137)
+* AC_PROG_CPP: C Compiler. (line 113)
+* AC_PROG_CPP_WERROR: C Compiler. (line 126)
+* AC_PROG_CXX: C++ Compiler. (line 7)
+* AC_PROG_CXX_C_O: C++ Compiler. (line 48)
+* AC_PROG_CXXCPP: C++ Compiler. (line 35)
+* AC_PROG_EGREP: Particular Programs. (line 29)
+* AC_PROG_F77: Fortran Compiler. (line 19)
+* AC_PROG_F77_C_O: Fortran Compiler. (line 76)
+* AC_PROG_FC: Fortran Compiler. (line 44)
+* AC_PROG_FC_C_O: Fortran Compiler. (line 76)
+* AC_PROG_FGREP: Particular Programs. (line 36)
+* AC_PROG_GCC_TRADITIONAL: C Compiler. (line 361)
+* AC_PROG_GREP: Particular Programs. (line 20)
+* AC_PROG_INSTALL: Particular Programs. (line 43)
+* AC_PROG_LEX: Particular Programs. (line 114)
+* AC_PROG_LN_S: Particular Programs. (line 168)
+* AC_PROG_MAKE_SET: Output. (line 45)
+* AC_PROG_MKDIR_P: Particular Programs. (line 80)
+* AC_PROG_OBJC: Objective C Compiler.
+ (line 7)
+* AC_PROG_OBJCPP: Objective C Compiler.
+ (line 26)
+* AC_PROG_OBJCXX: Objective C++ Compiler.
+ (line 7)
+* AC_PROG_OBJCXXCPP: Objective C++ Compiler.
+ (line 27)
+* AC_PROG_RANLIB: Particular Programs. (line 187)
+* AC_PROG_SED: Particular Programs. (line 191)
+* AC_PROG_YACC: Particular Programs. (line 200)
+* AC_PROGRAM_CHECK: Obsolete Macros. (line 462)
+* AC_PROGRAM_EGREP: Obsolete Macros. (line 465)
+* AC_PROGRAM_PATH: Obsolete Macros. (line 468)
+* AC_PROGRAMS_CHECK: Obsolete Macros. (line 456)
+* AC_PROGRAMS_PATH: Obsolete Macros. (line 459)
+* AC_REMOTE_TAPE: Obsolete Macros. (line 471)
+* AC_REPLACE_FNMATCH: Particular Functions.
+ (line 452)
+* AC_REPLACE_FUNCS: Generic Functions. (line 117)
+* AC_REQUIRE: Prerequisite Macros. (line 17)
+* AC_REQUIRE_AUX_FILE: Input. (line 37)
+* AC_REQUIRE_CPP: Language Choice. (line 94)
+* AC_RESTARTABLE_SYSCALLS: Obsolete Macros. (line 474)
+* AC_RETSIGTYPE: Obsolete Macros. (line 482)
+* AC_REVISION: Notices. (line 18)
+* AC_RSH: Obsolete Macros. (line 486)
+* AC_RUN_IFELSE: Runtime. (line 20)
+* AC_SCO_INTL: Obsolete Macros. (line 489)
+* AC_SEARCH_LIBS: Libraries. (line 52)
+* AC_SET_MAKE: Obsolete Macros. (line 503)
+* AC_SETVBUF_REVERSED: Obsolete Macros. (line 498)
+* AC_SIZE_T: Obsolete Macros. (line 509)
+* AC_SIZEOF_TYPE: Obsolete Macros. (line 506)
+* AC_ST_BLKSIZE: Obsolete Macros. (line 539)
+* AC_ST_BLOCKS: Obsolete Macros. (line 542)
+* AC_ST_RDEV: Obsolete Macros. (line 545)
+* AC_STAT_MACROS_BROKEN: Obsolete Macros. (line 512)
+* AC_STDC_HEADERS: Obsolete Macros. (line 515)
+* AC_STRCOLL: Obsolete Macros. (line 518)
+* AC_STRUCT_DIRENT_D_INO: Particular Structures.
+ (line 9)
+* AC_STRUCT_DIRENT_D_TYPE: Particular Structures.
+ (line 21)
+* AC_STRUCT_ST_BLKSIZE: Obsolete Macros. (line 521)
+* AC_STRUCT_ST_BLOCKS: Particular Structures.
+ (line 26)
+* AC_STRUCT_ST_RDEV: Obsolete Macros. (line 530)
+* AC_STRUCT_TIMEZONE: Particular Structures.
+ (line 43)
+* AC_STRUCT_TM: Particular Structures.
+ (line 35)
+* AC_SUBST: Setting Output Variables.
+ (line 13)
+* AC_SUBST_FILE: Setting Output Variables.
+ (line 38)
+* AC_SYS_INTERPRETER: System Services. (line 42)
+* AC_SYS_LARGEFILE: System Services. (line 49)
+* AC_SYS_LONG_FILE_NAMES: System Services. (line 71)
+* AC_SYS_POSIX_TERMIOS: System Services. (line 75)
+* AC_SYS_RESTARTABLE_SYSCALLS: Obsolete Macros. (line 548)
+* AC_SYS_SIGLIST_DECLARED: Obsolete Macros. (line 563)
+* AC_TEST_CPP: Obsolete Macros. (line 568)
+* AC_TEST_PROGRAM: Obsolete Macros. (line 572)
+* AC_TIME_WITH_SYS_TIME: Obsolete Macros. (line 579)
+* AC_TIMEZONE: Obsolete Macros. (line 576)
+* AC_TRY_ACT: AC_ACT_IFELSE vs AC_TRY_ACT.
+ (line 6)
+* AC_TRY_COMPILE: Obsolete Macros. (line 583)
+* AC_TRY_CPP: Obsolete Macros. (line 602)
+* AC_TRY_LINK: Obsolete Macros. (line 615)
+* AC_TRY_LINK_FUNC: Obsolete Macros. (line 644)
+* AC_TRY_RUN: Obsolete Macros. (line 651)
+* AC_TYPE_GETGROUPS: Particular Types. (line 14)
+* AC_TYPE_INT16_T: Particular Types. (line 40)
+* AC_TYPE_INT32_T: Particular Types. (line 43)
+* AC_TYPE_INT64_T: Particular Types. (line 46)
+* AC_TYPE_INT8_T: Particular Types. (line 21)
+* AC_TYPE_INTMAX_T: Particular Types. (line 49)
+* AC_TYPE_INTPTR_T: Particular Types. (line 54)
+* AC_TYPE_LONG_DOUBLE: Particular Types. (line 59)
+* AC_TYPE_LONG_DOUBLE_WIDER: Particular Types. (line 70)
+* AC_TYPE_LONG_LONG_INT: Particular Types. (line 78)
+* AC_TYPE_MBSTATE_T: Particular Types. (line 88)
+* AC_TYPE_MODE_T: Particular Types. (line 96)
+* AC_TYPE_OFF_T: Particular Types. (line 102)
+* AC_TYPE_PID_T: Particular Types. (line 108)
+* AC_TYPE_SIGNAL: Obsolete Macros. (line 662)
+* AC_TYPE_SIZE_T: Particular Types. (line 114)
+* AC_TYPE_SSIZE_T: Particular Types. (line 120)
+* AC_TYPE_UID_T: Particular Types. (line 126)
+* AC_TYPE_UINT16_T: Particular Types. (line 138)
+* AC_TYPE_UINT32_T: Particular Types. (line 141)
+* AC_TYPE_UINT64_T: Particular Types. (line 144)
+* AC_TYPE_UINT8_T: Particular Types. (line 132)
+* AC_TYPE_UINTMAX_T: Particular Types. (line 147)
+* AC_TYPE_UINTPTR_T: Particular Types. (line 152)
+* AC_TYPE_UNSIGNED_LONG_LONG_INT: Particular Types. (line 157)
+* AC_UID_T: Obsolete Macros. (line 679)
+* AC_UNISTD_H: Obsolete Macros. (line 682)
+* AC_USE_SYSTEM_EXTENSIONS: Posix Variants. (line 10)
+* AC_USG: Obsolete Macros. (line 685)
+* AC_UTIME_NULL: Obsolete Macros. (line 690)
+* AC_VALIDATE_CACHED_SYSTEM_TUPLE: Obsolete Macros. (line 693)
+* AC_VERBOSE: Obsolete Macros. (line 698)
+* AC_VFORK: Obsolete Macros. (line 701)
+* AC_VPRINTF: Obsolete Macros. (line 704)
+* AC_WAIT3: Obsolete Macros. (line 707)
+* AC_WARN: Obsolete Macros. (line 712)
+* AC_WARNING: Reporting Messages. (line 26)
+* AC_WITH: Obsolete Macros. (line 715)
+* AC_WORDS_BIGENDIAN: Obsolete Macros. (line 719)
+* AC_XENIX_DIR: Obsolete Macros. (line 722)
+* AC_YYTEXT_POINTER: Obsolete Macros. (line 739)
+* AH_BOTTOM: Autoheader Macros. (line 50)
+* AH_HEADER: Configuration Headers.
+ (line 54)
+* AH_TEMPLATE: Autoheader Macros. (line 19)
+* AH_TOP: Autoheader Macros. (line 47)
+* AH_VERBATIM: Autoheader Macros. (line 40)
+* AU_ALIAS: Obsoleting Macros. (line 34)
+* AU_DEFUN: Obsoleting Macros. (line 18)
+
+
+File: autoconf.info, Node: M4 Macro Index, Next: Autotest Macro Index, Prev: Autoconf Macro Index, Up: Indices
+
+B.6 M4 Macro Index
+==================
+
+This is an alphabetical list of the M4, M4sugar, and M4sh macros.
+
+
+* Menu:
+
+* __file__: Redefined M4 Macros. (line 65)
+* __line__: Redefined M4 Macros. (line 65)
+* __oline__: Redefined M4 Macros. (line 69)
+* AS_BOURNE_COMPATIBLE: Initialization Macros.
+ (line 7)
+* AS_BOX: Common Shell Constructs.
+ (line 10)
+* AS_CASE: Common Shell Constructs.
+ (line 19)
+* AS_DIRNAME: Common Shell Constructs.
+ (line 26)
+* AS_ECHO: Common Shell Constructs.
+ (line 34)
+* AS_ECHO_N: Common Shell Constructs.
+ (line 42)
+* AS_ESCAPE: Common Shell Constructs.
+ (line 50)
+* AS_EXECUTABLE_P: Common Shell Constructs.
+ (line 90)
+* AS_EXIT: Common Shell Constructs.
+ (line 95)
+* AS_HELP_STRING: Pretty Help Strings. (line 15)
+* AS_IF: Common Shell Constructs.
+ (line 101)
+* AS_INIT: Initialization Macros.
+ (line 14)
+* AS_INIT_GENERATED: Initialization Macros.
+ (line 26)
+* AS_LINENO_PREPARE: Initialization Macros.
+ (line 67)
+* AS_LITERAL_IF: Polymorphic Variables.
+ (line 21)
+* AS_LITERAL_WORD_IF: Polymorphic Variables.
+ (line 21)
+* AS_ME_PREPARE: Initialization Macros.
+ (line 72)
+* AS_MESSAGE_FD: File Descriptor Macros.
+ (line 17)
+* AS_MESSAGE_LOG_FD: File Descriptor Macros.
+ (line 29)
+* AS_MKDIR_P: Common Shell Constructs.
+ (line 115)
+* AS_ORIGINAL_STDIN_FD: File Descriptor Macros.
+ (line 39)
+* AS_SET_CATFILE: Common Shell Constructs.
+ (line 155)
+* AS_SET_STATUS: Common Shell Constructs.
+ (line 127)
+* AS_SHELL_SANITIZE: Initialization Macros.
+ (line 101)
+* AS_TMPDIR: Initialization Macros.
+ (line 77)
+* AS_TR_CPP: Common Shell Constructs.
+ (line 135)
+* AS_TR_SH: Common Shell Constructs.
+ (line 144)
+* AS_UNSET: Common Shell Constructs.
+ (line 159)
+* AS_VAR_APPEND: Polymorphic Variables.
+ (line 63)
+* AS_VAR_ARITH: Polymorphic Variables.
+ (line 85)
+* AS_VAR_COPY: Polymorphic Variables.
+ (line 103)
+* AS_VAR_IF: Polymorphic Variables.
+ (line 122)
+* AS_VAR_POPDEF: Polymorphic Variables.
+ (line 131)
+* AS_VAR_PUSHDEF: Polymorphic Variables.
+ (line 131)
+* AS_VAR_SET: Polymorphic Variables.
+ (line 173)
+* AS_VAR_SET_IF: Polymorphic Variables.
+ (line 183)
+* AS_VAR_TEST_SET: Polymorphic Variables.
+ (line 188)
+* AS_VERSION_COMPARE: Common Shell Constructs.
+ (line 165)
+* dnl: Redefined M4 Macros. (line 76)
+* m4_append: Text processing Macros.
+ (line 16)
+* m4_append_uniq: Text processing Macros.
+ (line 16)
+* m4_append_uniq_w: Text processing Macros.
+ (line 69)
+* m4_apply: Evaluation Macros. (line 10)
+* m4_argn: Looping constructs. (line 29)
+* m4_assert: Diagnostic Macros. (line 11)
+* m4_bmatch: Conditional constructs.
+ (line 11)
+* m4_bpatsubst: Redefined M4 Macros. (line 79)
+* m4_bpatsubsts: Conditional constructs.
+ (line 18)
+* m4_bregexp: Redefined M4 Macros. (line 84)
+* m4_builtin: Redefined M4 Macros. (line 6)
+* m4_car: Looping constructs. (line 35)
+* m4_case: Conditional constructs.
+ (line 33)
+* m4_cdr: Looping constructs. (line 41)
+* m4_changecom: Redefined M4 Macros. (line 6)
+* m4_changequote: Redefined M4 Macros. (line 6)
+* m4_chomp: Text processing Macros.
+ (line 80)
+* m4_chomp_all: Text processing Macros.
+ (line 80)
+* m4_cleardivert: Diversion support. (line 125)
+* m4_cmp: Number processing Macros.
+ (line 11)
+* m4_combine: Text processing Macros.
+ (line 88)
+* m4_cond: Conditional constructs.
+ (line 42)
+* m4_copy: Redefined M4 Macros. (line 92)
+* m4_copy_force: Redefined M4 Macros. (line 92)
+* m4_count: Evaluation Macros. (line 26)
+* m4_curry: Evaluation Macros. (line 30)
+* m4_debugfile: Redefined M4 Macros. (line 6)
+* m4_debugmode: Redefined M4 Macros. (line 6)
+* m4_decr: Redefined M4 Macros. (line 6)
+* m4_default: Conditional constructs.
+ (line 73)
+* m4_default_nblank: Conditional constructs.
+ (line 73)
+* m4_default_nblank_quoted: Conditional constructs.
+ (line 73)
+* m4_default_quoted: Conditional constructs.
+ (line 73)
+* m4_define: Redefined M4 Macros. (line 6)
+* m4_define_default: Conditional constructs.
+ (line 122)
+* m4_defn: Redefined M4 Macros. (line 111)
+* m4_divert: Redefined M4 Macros. (line 119)
+* m4_divert_once: Diversion support. (line 128)
+* m4_divert_pop: Diversion support. (line 133)
+* m4_divert_push: Diversion support. (line 139)
+* m4_divert_text: Diversion support. (line 145)
+* m4_divnum: Redefined M4 Macros. (line 6)
+* m4_do: Evaluation Macros. (line 45)
+* m4_dquote: Evaluation Macros. (line 65)
+* m4_dquote_elt: Evaluation Macros. (line 70)
+* m4_dumpdef: Redefined M4 Macros. (line 131)
+* m4_dumpdefs: Redefined M4 Macros. (line 131)
+* m4_echo: Evaluation Macros. (line 75)
+* m4_errprint: Redefined M4 Macros. (line 6)
+* m4_errprintn: Diagnostic Macros. (line 16)
+* m4_escape: Text processing Macros.
+ (line 108)
+* m4_esyscmd: Redefined M4 Macros. (line 6)
+* m4_esyscmd_s: Redefined M4 Macros. (line 148)
+* m4_eval: Redefined M4 Macros. (line 6)
+* m4_exit: Redefined M4 Macros. (line 154)
+* m4_expand: Evaluation Macros. (line 79)
+* m4_fatal: Diagnostic Macros. (line 20)
+* m4_flatten: Text processing Macros.
+ (line 113)
+* m4_for: Looping constructs. (line 59)
+* m4_foreach: Looping constructs. (line 69)
+* m4_foreach_w: Looping constructs. (line 83)
+* m4_format: Redefined M4 Macros. (line 6)
+* m4_if: Redefined M4 Macros. (line 160)
+* m4_ifblank: Conditional constructs.
+ (line 127)
+* m4_ifdef: Redefined M4 Macros. (line 6)
+* m4_ifnblank: Conditional constructs.
+ (line 127)
+* m4_ifndef: Conditional constructs.
+ (line 135)
+* m4_ifset: Conditional constructs.
+ (line 139)
+* m4_ifval: Conditional constructs.
+ (line 145)
+* m4_ifvaln: Conditional constructs.
+ (line 150)
+* m4_ignore: Evaluation Macros. (line 129)
+* m4_include: Redefined M4 Macros. (line 167)
+* m4_incr: Redefined M4 Macros. (line 6)
+* m4_index: Redefined M4 Macros. (line 6)
+* m4_indir: Redefined M4 Macros. (line 6)
+* m4_init: Diversion support. (line 171)
+* m4_join: Text processing Macros.
+ (line 119)
+* m4_joinall: Text processing Macros.
+ (line 119)
+* m4_len: Redefined M4 Macros. (line 6)
+* m4_list_cmp: Number processing Macros.
+ (line 16)
+* m4_location: Diagnostic Macros. (line 24)
+* m4_make_list: Evaluation Macros. (line 142)
+* m4_maketemp: Redefined M4 Macros. (line 171)
+* m4_map: Looping constructs. (line 93)
+* m4_map_args: Looping constructs. (line 130)
+* m4_map_args_pair: Looping constructs. (line 166)
+* m4_map_args_sep: Looping constructs. (line 178)
+* m4_map_args_w: Looping constructs. (line 189)
+* m4_map_sep: Looping constructs. (line 93)
+* m4_mapall: Looping constructs. (line 93)
+* m4_mapall_sep: Looping constructs. (line 93)
+* m4_max: Number processing Macros.
+ (line 38)
+* m4_min: Number processing Macros.
+ (line 42)
+* m4_mkstemp: Redefined M4 Macros. (line 171)
+* m4_n: Conditional constructs.
+ (line 154)
+* m4_newline: Text processing Macros.
+ (line 134)
+* m4_normalize: Text processing Macros.
+ (line 140)
+* m4_pattern_allow: Forbidden Patterns. (line 30)
+* m4_pattern_forbid: Forbidden Patterns. (line 17)
+* m4_popdef: Redefined M4 Macros. (line 182)
+* m4_pushdef: Redefined M4 Macros. (line 6)
+* m4_quote: Evaluation Macros. (line 161)
+* m4_re_escape: Text processing Macros.
+ (line 148)
+* m4_rename: Redefined M4 Macros. (line 92)
+* m4_rename_force: Redefined M4 Macros. (line 92)
+* m4_reverse: Evaluation Macros. (line 167)
+* m4_set_add: Set manipulation Macros.
+ (line 19)
+* m4_set_add_all: Set manipulation Macros.
+ (line 25)
+* m4_set_contains: Set manipulation Macros.
+ (line 29)
+* m4_set_contents: Set manipulation Macros.
+ (line 49)
+* m4_set_delete: Set manipulation Macros.
+ (line 79)
+* m4_set_difference: Set manipulation Macros.
+ (line 86)
+* m4_set_dump: Set manipulation Macros.
+ (line 49)
+* m4_set_empty: Set manipulation Macros.
+ (line 109)
+* m4_set_foreach: Set manipulation Macros.
+ (line 115)
+* m4_set_intersection: Set manipulation Macros.
+ (line 86)
+* m4_set_list: Set manipulation Macros.
+ (line 136)
+* m4_set_listc: Set manipulation Macros.
+ (line 136)
+* m4_set_map: Set manipulation Macros.
+ (line 171)
+* m4_set_map_sep: Set manipulation Macros.
+ (line 184)
+* m4_set_remove: Set manipulation Macros.
+ (line 195)
+* m4_set_size: Set manipulation Macros.
+ (line 206)
+* m4_set_union: Set manipulation Macros.
+ (line 86)
+* m4_shift: Redefined M4 Macros. (line 6)
+* m4_shift2: Looping constructs. (line 199)
+* m4_shift3: Looping constructs. (line 199)
+* m4_shiftn: Looping constructs. (line 199)
+* m4_sign: Number processing Macros.
+ (line 46)
+* m4_sinclude: Redefined M4 Macros. (line 167)
+* m4_split: Text processing Macros.
+ (line 152)
+* m4_stack_foreach: Looping constructs. (line 208)
+* m4_stack_foreach_lifo: Looping constructs. (line 208)
+* m4_stack_foreach_sep: Looping constructs. (line 230)
+* m4_stack_foreach_sep_lifo: Looping constructs. (line 230)
+* m4_strip: Text processing Macros.
+ (line 158)
+* m4_substr: Redefined M4 Macros. (line 6)
+* m4_syscmd: Redefined M4 Macros. (line 6)
+* m4_sysval: Redefined M4 Macros. (line 6)
+* m4_text_box: Text processing Macros.
+ (line 167)
+* m4_text_wrap: Text processing Macros.
+ (line 182)
+* m4_tolower: Text processing Macros.
+ (line 213)
+* m4_toupper: Text processing Macros.
+ (line 213)
+* m4_traceoff: Redefined M4 Macros. (line 6)
+* m4_traceon: Redefined M4 Macros. (line 6)
+* m4_translit: Redefined M4 Macros. (line 6)
+* m4_undefine: Redefined M4 Macros. (line 186)
+* m4_undivert: Redefined M4 Macros. (line 194)
+* m4_unquote: Evaluation Macros. (line 176)
+* m4_version_compare: Number processing Macros.
+ (line 50)
+* m4_version_prereq: Number processing Macros.
+ (line 90)
+* m4_warn: Diagnostic Macros. (line 28)
+* m4_wrap: Redefined M4 Macros. (line 204)
+* m4_wrap_lifo: Redefined M4 Macros. (line 204)
+
+
+File: autoconf.info, Node: Autotest Macro Index, Next: Program & Function Index, Prev: M4 Macro Index, Up: Indices
+
+B.7 Autotest Macro Index
+========================
+
+This is an alphabetical list of the Autotest macros.
+
+
+* Menu:
+
+* AT_ARG_OPTION: Writing Testsuites. (line 50)
+* AT_ARG_OPTION_ARG: Writing Testsuites. (line 79)
+* AT_BANNER: Writing Testsuites. (line 124)
+* AT_CAPTURE_FILE: Writing Testsuites. (line 155)
+* AT_CHECK: Writing Testsuites. (line 212)
+* AT_CHECK_EUNIT: Writing Testsuites. (line 302)
+* AT_CHECK_UNQUOTED: Writing Testsuites. (line 212)
+* AT_CLEANUP: Writing Testsuites. (line 198)
+* AT_COLOR_TESTS: Writing Testsuites. (line 105)
+* AT_COPYRIGHT: Writing Testsuites. (line 41)
+* AT_DATA: Writing Testsuites. (line 202)
+* AT_FAIL_IF: Writing Testsuites. (line 160)
+* AT_INIT: Writing Testsuites. (line 31)
+* AT_KEYWORDS: Writing Testsuites. (line 142)
+* AT_PACKAGE_BUGREPORT: Making testsuite Scripts.
+ (line 12)
+* AT_PACKAGE_NAME: Making testsuite Scripts.
+ (line 12)
+* AT_PACKAGE_STRING: Making testsuite Scripts.
+ (line 12)
+* AT_PACKAGE_TARNAME: Making testsuite Scripts.
+ (line 12)
+* AT_PACKAGE_URL: Making testsuite Scripts.
+ (line 12)
+* AT_PACKAGE_VERSION: Making testsuite Scripts.
+ (line 12)
+* AT_SETUP: Writing Testsuites. (line 134)
+* AT_SKIP_IF: Writing Testsuites. (line 175)
+* AT_TESTED: Writing Testsuites. (line 109)
+* AT_XFAIL_IF: Writing Testsuites. (line 190)
+
+
+File: autoconf.info, Node: Program & Function Index, Next: Concept Index, Prev: Autotest Macro Index, Up: Indices
+
+B.8 Program and Function Index
+==============================
+
+This is an alphabetical list of the programs and functions whose
+portability is discussed in this document.
+
+
+* Menu:
+
+* !: Limitations of Builtins.
+ (line 41)
+* .: Limitations of Builtins.
+ (line 17)
+* /usr/bin/ksh on Solaris: Shellology. (line 63)
+* /usr/dt/bin/dtksh on Solaris: Shellology. (line 66)
+* /usr/xpg4/bin/sh on Solaris: Shellology. (line 64)
+* alloca: Particular Functions.
+ (line 10)
+* alloca.h: Particular Functions.
+ (line 10)
+* assert.h: Particular Headers. (line 20)
+* awk: Limitations of Usual Tools.
+ (line 10)
+* basename: Limitations of Usual Tools.
+ (line 142)
+* break: Limitations of Builtins.
+ (line 107)
+* case: Limitations of Builtins.
+ (line 110)
+* cat: Limitations of Usual Tools.
+ (line 146)
+* cc: Limitations of Usual Tools.
+ (line 149)
+* cd: Limitations of Builtins.
+ (line 203)
+* chgrp: Limitations of Usual Tools.
+ (line 183)
+* chmod: Limitations of Usual Tools.
+ (line 187)
+* chown <1>: Limitations of Usual Tools.
+ (line 183)
+* chown: Particular Functions.
+ (line 63)
+* closedir: Particular Functions.
+ (line 69)
+* cmp: Limitations of Usual Tools.
+ (line 197)
+* cp: Limitations of Usual Tools.
+ (line 204)
+* ctype.h: Particular Headers. (line 135)
+* date: Limitations of Usual Tools.
+ (line 264)
+* diff: Limitations of Usual Tools.
+ (line 274)
+* dirent.h: Particular Headers. (line 25)
+* dirname: Limitations of Usual Tools.
+ (line 280)
+* echo: Limitations of Builtins.
+ (line 233)
+* egrep: Limitations of Usual Tools.
+ (line 287)
+* error_at_line: Particular Functions.
+ (line 84)
+* eval: Limitations of Builtins.
+ (line 270)
+* exec: Limitations of Builtins.
+ (line 315)
+* exit <1>: Limitations of Builtins.
+ (line 355)
+* exit: Function Portability.
+ (line 17)
+* export: Limitations of Builtins.
+ (line 380)
+* expr: Limitations of Usual Tools.
+ (line 312)
+* expr (|): Limitations of Usual Tools.
+ (line 326)
+* false: Limitations of Builtins.
+ (line 428)
+* fgrep: Limitations of Usual Tools.
+ (line 435)
+* find: Limitations of Usual Tools.
+ (line 444)
+* float.h: Particular Headers. (line 135)
+* fnmatch: Particular Functions.
+ (line 94)
+* fnmatch.h: Particular Functions.
+ (line 452)
+* for: Limitations of Builtins.
+ (line 432)
+* fork: Particular Functions.
+ (line 120)
+* free: Function Portability.
+ (line 27)
+* fseeko: Particular Functions.
+ (line 147)
+* ftello: Particular Functions.
+ (line 147)
+* getgroups: Particular Functions.
+ (line 155)
+* getloadavg: Particular Functions.
+ (line 161)
+* getmntent: Particular Functions.
+ (line 195)
+* getpgid: Particular Functions.
+ (line 205)
+* getpgrp: Particular Functions.
+ (line 205)
+* grep: Limitations of Usual Tools.
+ (line 458)
+* if: Limitations of Builtins.
+ (line 477)
+* inttypes.h <1>: Particular Types. (line 6)
+* inttypes.h: Header Portability. (line 20)
+* isinf: Function Portability.
+ (line 32)
+* isnan: Function Portability.
+ (line 32)
+* join: Limitations of Usual Tools.
+ (line 526)
+* ksh: Shellology. (line 57)
+* ksh88: Shellology. (line 57)
+* ksh93: Shellology. (line 57)
+* linux/irda.h: Header Portability. (line 27)
+* linux/random.h: Header Portability. (line 30)
+* ln: Limitations of Usual Tools.
+ (line 543)
+* ls: Limitations of Usual Tools.
+ (line 555)
+* lstat: Particular Functions.
+ (line 228)
+* make: Portable Make. (line 6)
+* malloc <1>: Particular Functions.
+ (line 247)
+* malloc: Function Portability.
+ (line 82)
+* mbrtowc: Particular Functions.
+ (line 279)
+* memcmp: Particular Functions.
+ (line 286)
+* mkdir: Limitations of Usual Tools.
+ (line 577)
+* mkfifo: Limitations of Usual Tools.
+ (line 611)
+* mknod: Limitations of Usual Tools.
+ (line 611)
+* mktemp: Limitations of Usual Tools.
+ (line 621)
+* mktime: Particular Functions.
+ (line 299)
+* mmap: Particular Functions.
+ (line 311)
+* mv: Limitations of Usual Tools.
+ (line 646)
+* ndir.h: Particular Headers. (line 25)
+* net/if.h: Header Portability. (line 33)
+* netinet/if_ether.h: Header Portability. (line 53)
+* nlist.h: Particular Functions.
+ (line 178)
+* od: Limitations of Usual Tools.
+ (line 678)
+* pdksh: Shellology. (line 77)
+* printf: Limitations of Builtins.
+ (line 516)
+* putenv: Function Portability.
+ (line 89)
+* pwd: Limitations of Builtins.
+ (line 543)
+* read: Limitations of Builtins.
+ (line 574)
+* realloc <1>: Particular Functions.
+ (line 326)
+* realloc: Function Portability.
+ (line 105)
+* resolv.h: Particular Headers. (line 73)
+* rm: Limitations of Usual Tools.
+ (line 687)
+* rmdir: Limitations of Usual Tools.
+ (line 706)
+* sed: Limitations of Usual Tools.
+ (line 710)
+* sed (t): Limitations of Usual Tools.
+ (line 905)
+* select: Particular Functions.
+ (line 337)
+* set: Limitations of Builtins.
+ (line 580)
+* setpgrp: Particular Functions.
+ (line 348)
+* setvbuf: Obsolete Macros. (line 208)
+* shift: Limitations of Builtins.
+ (line 732)
+* sigaction: Function Portability.
+ (line 110)
+* signal: Function Portability.
+ (line 110)
+* signal.h: Obsolete Macros. (line 662)
+* sleep: Limitations of Usual Tools.
+ (line 965)
+* snprintf: Function Portability.
+ (line 124)
+* sort: Limitations of Usual Tools.
+ (line 971)
+* source: Limitations of Builtins.
+ (line 740)
+* sprintf: Function Portability.
+ (line 135)
+* sscanf: Function Portability.
+ (line 141)
+* stat: Particular Functions.
+ (line 363)
+* stdarg.h: Particular Headers. (line 135)
+* stdbool.h: Particular Headers. (line 10)
+* stdint.h <1>: Particular Types. (line 6)
+* stdint.h: Header Portability. (line 20)
+* stdlib.h <1>: Particular Types. (line 6)
+* stdlib.h <2>: Particular Headers. (line 135)
+* stdlib.h: Header Portability. (line 76)
+* strcoll: Particular Functions.
+ (line 379)
+* strerror_r <1>: Particular Functions.
+ (line 388)
+* strerror_r: Function Portability.
+ (line 149)
+* strftime: Particular Functions.
+ (line 401)
+* string.h: Particular Headers. (line 135)
+* strings.h: Particular Headers. (line 154)
+* strnlen <1>: Particular Functions.
+ (line 426)
+* strnlen: Function Portability.
+ (line 155)
+* strtod: Particular Functions.
+ (line 408)
+* strtold: Particular Functions.
+ (line 420)
+* sys/dir.h: Particular Headers. (line 25)
+* sys/ioctl.h: Particular Headers. (line 270)
+* sys/mkdev.h: Particular Headers. (line 68)
+* sys/mount.h: Header Portability. (line 79)
+* sys/ndir.h: Particular Headers. (line 25)
+* sys/ptem.h: Header Portability. (line 83)
+* sys/socket.h: Header Portability. (line 86)
+* sys/stat.h: Particular Headers. (line 92)
+* sys/sysmacros.h: Particular Headers. (line 68)
+* sys/time.h <1>: Particular Structures.
+ (line 35)
+* sys/time.h: Particular Headers. (line 244)
+* sys/types.h: Particular Types. (line 6)
+* sys/ucred.h: Header Portability. (line 89)
+* sys/wait.h: Particular Headers. (line 204)
+* sysconf: Function Portability.
+ (line 170)
+* tar: Limitations of Usual Tools.
+ (line 976)
+* termios.h: Particular Headers. (line 270)
+* test: Limitations of Builtins.
+ (line 744)
+* time.h <1>: Particular Structures.
+ (line 35)
+* time.h: Particular Headers. (line 244)
+* touch: Limitations of Usual Tools.
+ (line 981)
+* tr: Limitations of Usual Tools.
+ (line 994)
+* trap: Limitations of Builtins.
+ (line 856)
+* true: Limitations of Builtins.
+ (line 930)
+* unistd.h: Particular Headers. (line 228)
+* unlink: Function Portability.
+ (line 174)
+* unset: Limitations of Builtins.
+ (line 946)
+* unsetenv: Function Portability.
+ (line 180)
+* utime: Particular Functions.
+ (line 433)
+* va_copy: Function Portability.
+ (line 185)
+* va_list: Function Portability.
+ (line 192)
+* vfork: Particular Functions.
+ (line 120)
+* vfork.h: Particular Functions.
+ (line 120)
+* vprintf: Particular Functions.
+ (line 443)
+* vsnprintf: Function Portability.
+ (line 124)
+* vsprintf <1>: Particular Functions.
+ (line 443)
+* vsprintf: Function Portability.
+ (line 135)
+* wait: Limitations of Builtins.
+ (line 973)
+* wait3: Obsolete Macros. (line 216)
+* wchar.h: Particular Types. (line 88)
+* X11/extensions/scrnsaver.h: Header Portability. (line 92)
+* {...}: Limitations of Builtins.
+ (line 74)
+
+
+File: autoconf.info, Node: Concept Index, Prev: Program & Function Index, Up: Indices
+
+B.9 Concept Index
+=================
+
+This is an alphabetical list of the files, tools, and concepts
+introduced in this document.
+
+
+* Menu:
+
+* "$@": Shell Substitutions. (line 70)
+* $((EXPRESSION)): Shell Substitutions. (line 456)
+* $(COMMANDS): Shell Substitutions. (line 423)
+* $<, explicit rules, and VPATH: $< in Explicit Rules.
+ (line 6)
+* ${#VAR}: Shell Substitutions. (line 369)
+* ${VAR##WORD}: Shell Substitutions. (line 369)
+* ${VAR#WORD}: Shell Substitutions. (line 369)
+* ${VAR%%WORD}: Shell Substitutions. (line 369)
+* ${VAR%WORD}: Shell Substitutions. (line 369)
+* ${VAR+VALUE}: Shell Substitutions. (line 148)
+* ${VAR-VALUE}: Shell Substitutions. (line 140)
+* ${VAR=EXPANDED-VALUE}: Shell Substitutions. (line 319)
+* ${VAR=LITERAL}: Shell Substitutions. (line 295)
+* ${VAR=VALUE}: Shell Substitutions. (line 215)
+* 64-bit libraries: Site Defaults. (line 97)
+* @&t@: Quadrigraphs. (line 6)
+* @S|@: Quadrigraphs. (line 6)
+* ^ quoting: Shell Substitutions. (line 496)
+* _m4_divert_diversion: New Macros. (line 6)
+* `COMMANDS`: Shell Substitutions. (line 377)
+* abs_builddir: Preset Output Variables.
+ (line 177)
+* abs_srcdir: Preset Output Variables.
+ (line 199)
+* abs_top_builddir: Preset Output Variables.
+ (line 192)
+* abs_top_srcdir: Preset Output Variables.
+ (line 206)
+* absolute file names, detect: File System Conventions.
+ (line 52)
+* ac_objext: Generic Functions. (line 59)
+* ac_path_VARIABLE: Generic Programs. (line 123)
+* ac_path_VARIABLE_found: Generic Programs. (line 123)
+* ac_srcdir: Configuration Actions.
+ (line 85)
+* ac_top_build_prefix: Configuration Actions.
+ (line 80)
+* ac_top_srcdir: Configuration Actions.
+ (line 76)
+* acconfig.h: acconfig Header. (line 6)
+* aclocal.m4: Making configure Scripts.
+ (line 6)
+* Ash: Shellology. (line 16)
+* at_arg_OPTION: Writing Testsuites. (line 50)
+* at_optarg: Writing Testsuites. (line 62)
+* at_optarg_OPTION: Writing Testsuites. (line 62)
+* at_status: Writing Testsuites. (line 212)
+* autoconf: autoconf Invocation. (line 6)
+* Autoconf upgrading <1>: Autoconf 2.13. (line 6)
+* Autoconf upgrading: Autoconf 1. (line 6)
+* Autoconf version: Versioning. (line 6)
+* autoheader: autoheader Invocation.
+ (line 6)
+* Autoheader macros: Autoheader Macros. (line 6)
+* autom4te debugging tips: Debugging via autom4te.
+ (line 6)
+* Autom4te Library: autom4te Invocation. (line 225)
+* autom4te.cache: autom4te Invocation. (line 130)
+* autom4te.cfg: autom4te Invocation. (line 258)
+* Automake: Automake. (line 19)
+* Automatic remaking: Automatic Remaking. (line 6)
+* automatic rule rewriting and VPATH: Automatic Rule Rewriting.
+ (line 6)
+* autopoint: autoreconf Invocation.
+ (line 30)
+* autoreconf: autoreconf Invocation.
+ (line 6)
+* autoscan: autoscan Invocation. (line 6)
+* Autotest: Using Autotest. (line 6)
+* AUTOTEST_PATH: testsuite Invocation.
+ (line 60)
+* autoupdate: autoupdate Invocation.
+ (line 6)
+* Back trace <1>: autom4te Invocation. (line 86)
+* Back trace: autoconf Invocation. (line 86)
+* balancing parentheses: Balancing Parentheses.
+ (line 6)
+* Bash: Shellology. (line 43)
+* Bash 2.05 and later: Shellology. (line 49)
+* bindir: Installation Directory Variables.
+ (line 15)
+* Bootstrap: Bootstrapping. (line 6)
+* BSD make and obj/: obj/ and Make. (line 6)
+* buffer overruns: Buffer Overruns. (line 6)
+* Build directories: Build Directories. (line 6)
+* builddir: Preset Output Variables.
+ (line 174)
+* C function portability: Function Portability.
+ (line 6)
+* C types: Types. (line 6)
+* Cache: Caching Results. (line 6)
+* Cache variable: Cache Variable Names.
+ (line 6)
+* Cache, enabling: configure Invocation.
+ (line 25)
+* Canonical system type: Canonicalizing. (line 6)
+* carriage return, deleting: Limitations of Usual Tools.
+ (line 994)
+* CFLAGS: Preset Output Variables.
+ (line 23)
+* changequote: Changequote is Evil. (line 6)
+* Coding style: Coding Style. (line 6)
+* Command Substitution: Shell Substitutions. (line 377)
+* command-line, macros set on: Command-line Macros and whitespace.
+ (line 6)
+* Commands for configuration: Configuration Commands.
+ (line 6)
+* Comments in Makefile macros: Comments in Make Macros.
+ (line 6)
+* Comments in Makefile rules: Comments in Make Rules.
+ (line 6)
+* Common autoconf behavior: Common Behavior. (line 6)
+* Compilers: Compilers and Preprocessors.
+ (line 6)
+* composing variable names: Polymorphic Variables.
+ (line 131)
+* config.h: Configuration Headers.
+ (line 6)
+* config.h.bot: acconfig Header. (line 6)
+* config.h.in: Header Templates. (line 6)
+* config.h.top: acconfig Header. (line 6)
+* config.site: Site Defaults. (line 6)
+* config.status: config.status Invocation.
+ (line 6)
+* config.sub: Specifying Target Triplets.
+ (line 59)
+* CONFIG_COMMANDS: Obsolete config.status Use.
+ (line 11)
+* CONFIG_FILES: Obsolete config.status Use.
+ (line 15)
+* CONFIG_HEADERS: Obsolete config.status Use.
+ (line 20)
+* CONFIG_LINKS: Obsolete config.status Use.
+ (line 25)
+* CONFIG_SHELL: config.status Invocation.
+ (line 102)
+* CONFIG_STATUS: config.status Invocation.
+ (line 108)
+* Configuration actions: Configuration Actions.
+ (line 6)
+* Configuration commands: Configuration Commands.
+ (line 6)
+* Configuration file creation: Configuration Files. (line 6)
+* Configuration Header: Configuration Headers.
+ (line 6)
+* Configuration Header Template: Header Templates. (line 6)
+* Configuration links: Configuration Links. (line 6)
+* configure <1>: Running configure Scripts.
+ (line 6)
+* configure: Making configure Scripts.
+ (line 6)
+* Configure subdirectories: Subdirectories. (line 6)
+* configure.ac: Making configure Scripts.
+ (line 27)
+* configure.in: Making configure Scripts.
+ (line 27)
+* configure_input: Preset Output Variables.
+ (line 58)
+* Copyright Notice <1>: Writing Testsuites. (line 41)
+* Copyright Notice: Notices. (line 10)
+* CPPFLAGS: Preset Output Variables.
+ (line 72)
+* Creating configuration files: Configuration Files. (line 6)
+* Creating temporary files: Limitations of Usual Tools.
+ (line 621)
+* Cross compilation: Hosts and Cross-Compilation.
+ (line 6)
+* CXXFLAGS: Preset Output Variables.
+ (line 94)
+* Darwin: Systemology. (line 23)
+* Data structure, set: Set manipulation Macros.
+ (line 6)
+* datadir: Installation Directory Variables.
+ (line 18)
+* datarootdir <1>: Changed Directory Variables.
+ (line 6)
+* datarootdir: Installation Directory Variables.
+ (line 22)
+* debugging tips: Debugging via autom4te.
+ (line 6)
+* Declaration, checking: Declarations. (line 6)
+* Default includes: Default Includes. (line 6)
+* DEFS: Preset Output Variables.
+ (line 98)
+* deleting carriage return: Limitations of Usual Tools.
+ (line 994)
+* Dependencies between macros: Dependencies Between Macros.
+ (line 6)
+* Descriptors: File Descriptors. (line 6)
+* descriptors: File Descriptor Macros.
+ (line 6)
+* Directories, build: Build Directories. (line 6)
+* Directories, installation: Installation Directory Variables.
+ (line 6)
+* division, integer: Signed Integer Division.
+ (line 6)
+* dnl <1>: Coding Style. (line 42)
+* dnl: Macro Definitions. (line 51)
+* docdir: Installation Directory Variables.
+ (line 26)
+* double-colon rules and VPATH: VPATH and Double-colon.
+ (line 6)
+* dvidir: Installation Directory Variables.
+ (line 30)
+* ECHO_C: Preset Output Variables.
+ (line 106)
+* ECHO_N: Preset Output Variables.
+ (line 107)
+* ECHO_T: Preset Output Variables.
+ (line 108)
+* Endianness: C Compiler. (line 184)
+* environment, macros set from: Command-line Macros and whitespace.
+ (line 6)
+* Erlang: Erlang Compiler and Interpreter.
+ (line 6)
+* Erlang, Library, checking: Erlang Libraries. (line 6)
+* ERLANG_INSTALL_LIB_DIR: Installation Directory Variables.
+ (line 201)
+* ERLANG_INSTALL_LIB_DIR_: Installation Directory Variables.
+ (line 206)
+* ERLCFLAGS: Preset Output Variables.
+ (line 120)
+* exec_prefix: Installation Directory Variables.
+ (line 33)
+* exiting portably: Exiting Portably. (line 6)
+* expanded before required: Expanded Before Required.
+ (line 6)
+* explicit rules, $<, and VPATH: $< in Explicit Rules.
+ (line 6)
+* External software: External Software. (line 6)
+* F77: Fortran Compiler. (line 6)
+* FCFLAGS: Preset Output Variables.
+ (line 126)
+* FFLAGS: Preset Output Variables.
+ (line 133)
+* FHS: Site Defaults. (line 83)
+* File descriptors: File Descriptors. (line 6)
+* file descriptors: File Descriptor Macros.
+ (line 6)
+* File system conventions: File System Conventions.
+ (line 6)
+* File, checking: Files. (line 6)
+* Filesystem Hierarchy Standard: Site Defaults. (line 83)
+* floating point: Floating Point Portability.
+ (line 6)
+* Forbidden patterns: Forbidden Patterns. (line 6)
+* Fortran: Fortran Compiler. (line 6)
+* Function, checking: Particular Functions.
+ (line 6)
+* Gettext: autoreconf Invocation.
+ (line 30)
+* GNU build system: The GNU Build System.
+ (line 6)
+* Gnulib: Gnulib. (line 11)
+* Go: Go Compiler. (line 6)
+* GOFLAGS: Preset Output Variables.
+ (line 170)
+* Header portability: Header Portability. (line 6)
+* Header templates: Header Templates. (line 6)
+* Header, checking: Header Files. (line 6)
+* Help strings: Pretty Help Strings. (line 6)
+* Here-documents: Here-Documents. (line 6)
+* History of autoconf: History. (line 6)
+* htmldir: Installation Directory Variables.
+ (line 40)
+* ifnames: ifnames Invocation. (line 6)
+* Imake: Why Not Imake. (line 6)
+* includedir: Installation Directory Variables.
+ (line 43)
+* Includes, default: Default Includes. (line 6)
+* indirection, variable name: Polymorphic Variables.
+ (line 6)
+* infodir: Installation Directory Variables.
+ (line 46)
+* input: File Descriptor Macros.
+ (line 6)
+* Install prefix: Default Prefix. (line 6)
+* Installation directories: Installation Directory Variables.
+ (line 6)
+* Instantiation: Output. (line 13)
+* integer overflow <1>: Signed Overflow Advice.
+ (line 6)
+* integer overflow <2>: Signed Overflow Examples.
+ (line 6)
+* integer overflow <3>: Integer Overflow Basics.
+ (line 6)
+* integer overflow: Integer Overflow. (line 6)
+* Introduction: Introduction. (line 6)
+* invoking the shell: Invoking the Shell. (line 6)
+* Korn shell: Shellology. (line 57)
+* Ksh: Shellology. (line 57)
+* Language: Language Choice. (line 6)
+* Large file support: System Services. (line 49)
+* LDFLAGS: Preset Output Variables.
+ (line 140)
+* LFS: System Services. (line 49)
+* lib64: Site Defaults. (line 97)
+* libdir: Installation Directory Variables.
+ (line 49)
+* libexecdir: Installation Directory Variables.
+ (line 52)
+* Library, checking: Libraries. (line 6)
+* LIBS: Preset Output Variables.
+ (line 154)
+* Libtool: Libtool. (line 14)
+* License: Distributing. (line 6)
+* Limitations of make: Portable Make. (line 6)
+* Limitations of shell builtins: Limitations of Builtins.
+ (line 6)
+* Limitations of usual tools: Limitations of Usual Tools.
+ (line 6)
+* Links: Configuration Links. (line 12)
+* Links for configuration: Configuration Links. (line 6)
+* Listing directories: Limitations of Usual Tools.
+ (line 555)
+* localedir: Installation Directory Variables.
+ (line 55)
+* localstatedir: Installation Directory Variables.
+ (line 60)
+* loop induction: Optimization and Wraparound.
+ (line 6)
+* low-level output: File Descriptor Macros.
+ (line 6)
+* M4: Programming in M4. (line 6)
+* M4 quotation: M4 Quotation. (line 6)
+* M4sugar: Programming in M4sugar.
+ (line 6)
+* m4sugar debugging tips: Debugging via autom4te.
+ (line 6)
+* Macro invocation stack <1>: autom4te Invocation. (line 86)
+* Macro invocation stack: autoconf Invocation. (line 86)
+* Macros, called once: One-Shot Macros. (line 6)
+* Macros, obsoleting: Obsoleting Macros. (line 6)
+* Macros, ordering: Suggested Ordering. (line 6)
+* Macros, prerequisites: Prerequisite Macros. (line 6)
+* make -k: make -k Status. (line 6)
+* make and MAKEFLAGS: The Make Macro MAKEFLAGS.
+ (line 6)
+* make and SHELL: The Make Macro SHELL.
+ (line 6)
+* Makefile macros and comments: Comments in Make Macros.
+ (line 6)
+* Makefile macros and whitespace: Trailing whitespace in Make Macros.
+ (line 6)
+* Makefile rules and comments: Comments in Make Rules.
+ (line 6)
+* Makefile rules and newlines: Newlines in Make Rules.
+ (line 6)
+* Makefile substitutions: Makefile Substitutions.
+ (line 6)
+* MAKEFLAGS and make: The Make Macro MAKEFLAGS.
+ (line 6)
+* Making directories: Limitations of Usual Tools.
+ (line 577)
+* mandir: Installation Directory Variables.
+ (line 63)
+* Messages, from autoconf: Reporting Messages. (line 6)
+* Messages, from configure: Printing Messages. (line 6)
+* Messages, from M4sugar: Diagnostic Macros. (line 6)
+* Moving open files: Limitations of Usual Tools.
+ (line 646)
+* newline, deleting: Limitations of Usual Tools.
+ (line 994)
+* Newlines in Makefile rules: Newlines in Make Rules.
+ (line 6)
+* Notices in configure: Notices. (line 6)
+* null pointers: Null Pointers. (line 6)
+* obj/, subdirectory: obj/ and Make. (line 6)
+* OBJCFLAGS: Preset Output Variables.
+ (line 162)
+* OBJCXXFLAGS: Preset Output Variables.
+ (line 166)
+* Obsolete constructs: Obsolete Constructs. (line 6)
+* Obsoleting macros: Obsoleting Macros. (line 6)
+* obstack: Particular Functions.
+ (line 319)
+* oldincludedir: Installation Directory Variables.
+ (line 66)
+* One-shot macros: One-Shot Macros. (line 6)
+* Options, Package: Option Checking. (line 6)
+* Options, package: Package Options. (line 6)
+* Ordering macros: Suggested Ordering. (line 6)
+* Output variables <1>: Setting Output Variables.
+ (line 6)
+* Output variables: Preset Output Variables.
+ (line 6)
+* Output variables, special characters in: Special Chars in Variables.
+ (line 6)
+* output, low-level: File Descriptor Macros.
+ (line 6)
+* Outputting files: Output. (line 6)
+* overflow, signed integer <1>: Signed Overflow Advice.
+ (line 6)
+* overflow, signed integer <2>: Signed Overflow Examples.
+ (line 6)
+* overflow, signed integer <3>: Integer Overflow Basics.
+ (line 6)
+* overflow, signed integer: Integer Overflow. (line 6)
+* Package options: Package Options. (line 6)
+* package.m4: Making testsuite Scripts.
+ (line 12)
+* Parallel make: Parallel Make. (line 6)
+* parentheses, balancing: Balancing Parentheses.
+ (line 6)
+* Patterns, forbidden: Forbidden Patterns. (line 6)
+* pdfdir: Installation Directory Variables.
+ (line 69)
+* polymorphic variable name: Polymorphic Variables.
+ (line 6)
+* portability: Varieties of Unportability.
+ (line 6)
+* Portability of C functions: Function Portability.
+ (line 6)
+* Portability of headers: Header Portability. (line 6)
+* Portable C and C++ programming: Portable C and C++. (line 6)
+* Portable shell programming: Portable Shell. (line 6)
+* positional parameters: Shell Substitutions. (line 121)
+* Posix termios headers: System Services. (line 75)
+* Precious Variable: Setting Output Variables.
+ (line 65)
+* prefix: Installation Directory Variables.
+ (line 72)
+* Prefix for install: Default Prefix. (line 6)
+* preprocessor arithmetic: Preprocessor Arithmetic.
+ (line 6)
+* Preprocessors: Compilers and Preprocessors.
+ (line 6)
+* prerequisite directories and VPATH: Tru64 Directory Magic.
+ (line 6)
+* Prerequisite macros: Prerequisite Macros. (line 6)
+* Program names, transforming: Transforming Names. (line 6)
+* Programs, checking: Alternative Programs.
+ (line 6)
+* psdir: Installation Directory Variables.
+ (line 77)
+* QNX 4.25: Systemology. (line 37)
+* quadrigraphs: Quadrigraphs. (line 6)
+* quotation <1>: M4 Quotation. (line 6)
+* quotation: Autoconf Language. (line 6)
+* Remaking automatically: Automatic Remaking. (line 6)
+* Revision: Notices. (line 18)
+* Rule, Single Suffix Inference: Single Suffix Rules. (line 6)
+* sbindir: Installation Directory Variables.
+ (line 80)
+* Separated Dependencies: Single Suffix Rules. (line 9)
+* set -b: Limitations of Builtins.
+ (line 689)
+* set -e: Limitations of Builtins.
+ (line 605)
+* set -m: Limitations of Builtins.
+ (line 689)
+* set -n: Limitations of Builtins.
+ (line 713)
+* Set manipulation: Set manipulation Macros.
+ (line 6)
+* sharedstatedir: Installation Directory Variables.
+ (line 84)
+* SHELL and make: The Make Macro SHELL.
+ (line 6)
+* Shell assignments: Assignments. (line 6)
+* Shell builtins: Limitations of Builtins.
+ (line 6)
+* Shell file descriptors: File Descriptors. (line 6)
+* Shell Functions: Shell Functions. (line 6)
+* Shell here-documents: Here-Documents. (line 6)
+* shell invocation: Invoking the Shell. (line 6)
+* Shell parentheses: Parentheses. (line 6)
+* Shell pattern matching: Shell Pattern Matching.
+ (line 6)
+* Shell slashes: Slashes. (line 6)
+* Shell substitutions: Shell Substitutions. (line 6)
+* Shell variables: Special Shell Variables.
+ (line 6)
+* Shellology: Shellology. (line 6)
+* Signal handling in the shell: Signal Handling. (line 6)
+* Signals, shells and: Signal Handling. (line 6)
+* signed integer overflow <1>: Signed Overflow Advice.
+ (line 6)
+* signed integer overflow <2>: Signed Overflow Examples.
+ (line 6)
+* signed integer overflow <3>: Integer Overflow Basics.
+ (line 6)
+* signed integer overflow: Integer Overflow. (line 6)
+* Single Suffix Inference Rule: Single Suffix Rules. (line 6)
+* Site defaults: Site Defaults. (line 6)
+* Site details: Site Details. (line 6)
+* Special shell variables: Special Shell Variables.
+ (line 6)
+* srcdir <1>: Preset Output Variables.
+ (line 195)
+* srcdir: Configuration Actions.
+ (line 71)
+* standard input: File Descriptor Macros.
+ (line 6)
+* Standard symbols: Standard Symbols. (line 6)
+* Structure, checking: Structures. (line 6)
+* Subdirectory configure: Subdirectories. (line 6)
+* Substitutions in makefiles: Makefile Substitutions.
+ (line 6)
+* Symbolic links: Limitations of Usual Tools.
+ (line 543)
+* sysconfdir: Installation Directory Variables.
+ (line 88)
+* System type <1>: Canonicalizing. (line 6)
+* System type: Specifying Target Triplets.
+ (line 6)
+* Systemology: Systemology. (line 6)
+* Target triplet: Specifying Target Triplets.
+ (line 6)
+* termios Posix headers: System Services. (line 75)
+* test group: testsuite Scripts. (line 12)
+* testsuite <1>: testsuite Invocation.
+ (line 6)
+* testsuite: testsuite Scripts. (line 6)
+* timestamp resolution <1>: Timestamps and Make. (line 6)
+* timestamp resolution: Limitations of Usual Tools.
+ (line 226)
+* tmp: Configuration Actions.
+ (line 89)
+* top_build_prefix: Preset Output Variables.
+ (line 184)
+* top_builddir: Preset Output Variables.
+ (line 180)
+* top_srcdir: Preset Output Variables.
+ (line 202)
+* Transforming program names: Transforming Names. (line 6)
+* Tru64: Systemology. (line 44)
+* Types: Types. (line 6)
+* unbalanced parentheses, managing: Balancing Parentheses.
+ (line 6)
+* undefined macro: New Macros. (line 6)
+* Unix version 7: Systemology. (line 49)
+* Unordered set manipulation: Set manipulation Macros.
+ (line 6)
+* Upgrading autoconf <1>: Autoconf 2.13. (line 6)
+* Upgrading autoconf: Autoconf 1. (line 6)
+* V7: Systemology. (line 49)
+* variable name indirection: Polymorphic Variables.
+ (line 6)
+* variable names, composing: Polymorphic Variables.
+ (line 131)
+* Variable, Precious: Setting Output Variables.
+ (line 65)
+* variables and VPATH: Variables listed in VPATH.
+ (line 6)
+* Version: Versioning. (line 11)
+* version, Autoconf: Versioning. (line 6)
+* volatile objects: Volatile Objects. (line 6)
+* VPATH: VPATH and Make. (line 6)
+* VPATH and automatic rule rewriting: Automatic Rule Rewriting.
+ (line 6)
+* VPATH and double-colon rules: VPATH and Double-colon.
+ (line 6)
+* VPATH and prerequisite directories: Tru64 Directory Magic.
+ (line 6)
+* VPATH and variables: Variables listed in VPATH.
+ (line 6)
+* VPATH, explicit rules, and $<: $< in Explicit Rules.
+ (line 6)
+* VPATH, resolving target pathnames: Make Target Lookup. (line 6)
+* whitespace in command-line macros: Command-line Macros and whitespace.
+ (line 6)
+* whitespace in Makefile macros: Trailing whitespace in Make Macros.
+ (line 6)
+* wraparound arithmetic <1>: Signed Overflow Advice.
+ (line 6)
+* wraparound arithmetic <2>: Signed Overflow Examples.
+ (line 6)
+* wraparound arithmetic <3>: Integer Overflow Basics.
+ (line 6)
+* wraparound arithmetic: Integer Overflow. (line 6)
+* X Window System: System Services. (line 10)
+* Zsh: Shellology. (line 87)
+
+
+
+Tag Table:
+Node: Top1954
+Node: Introduction21371
+Node: The GNU Build System27935
+Node: Automake28914
+Node: Gnulib30863
+Node: Libtool32172
+Node: Pointers33594
+Ref: Pointers-Footnote-134895
+Node: Making configure Scripts35055
+Node: Writing Autoconf Input38404
+Node: Shell Script Compiler39867
+Node: Autoconf Language42228
+Node: Autoconf Input Layout49397
+Node: autoscan Invocation50805
+Node: ifnames Invocation53361
+Node: autoconf Invocation54561
+Node: autoreconf Invocation59846
+Node: Setup64607
+Node: Initializing configure65929
+Ref: AC_INIT66434
+Node: Versioning69318
+Node: Notices71179
+Node: Input72354
+Ref: AC_CONFIG_SRCDIR72495
+Node: Output75442
+Ref: AC_OUTPUT75877
+Ref: AC_PROG_MAKE_SET77495
+Node: Configuration Actions77920
+Node: Configuration Files83208
+Ref: AC_CONFIG_FILES83469
+Node: Makefile Substitutions84688
+Node: Preset Output Variables86431
+Node: Installation Directory Variables95945
+Node: Changed Directory Variables103793
+Node: Build Directories106387
+Node: Automatic Remaking108242
+Node: Configuration Headers110410
+Node: Header Templates113712
+Node: autoheader Invocation116447
+Node: Autoheader Macros120089
+Node: Configuration Commands122354
+Ref: AC_CONFIG_COMMANDS122866
+Node: Configuration Links124151
+Ref: AC_CONFIG_LINKS124602
+Node: Subdirectories125575
+Node: Default Prefix128055
+Ref: AC_PREFIX_PROGRAM128946
+Node: Existing Tests129477
+Node: Common Behavior131279
+Node: Standard Symbols131918
+Node: Default Includes132499
+Node: Alternative Programs134753
+Node: Particular Programs135439
+Ref: AC_PROG_LEX141187
+Ref: AC_PROG_LN_S143798
+Node: Generic Programs145416
+Ref: AC_CHECK_PROG146388
+Ref: AC_CHECK_PROGS147114
+Ref: AC_PATH_PROG151114
+Ref: AC_PATH_PROGS151488
+Node: Files154567
+Node: Libraries155767
+Ref: AC_CHECK_LIB156008
+Ref: AC_SEARCH_LIBS158267
+Node: Library Functions159451
+Node: Function Portability160074
+Node: Particular Functions169586
+Ref: AC_FUNC_ALLOCA169917
+Ref: AC_FUNC_CLOSEDIR_VOID172306
+Ref: AC_FUNC_FORK174296
+Ref: AC_FUNC_GETLOADAVG176338
+Ref: AC_FUNC_GETMNTENT177903
+Ref: AC_FUNC_MMAP182145
+Ref: AC_FUNC_STRCOLL185000
+Ref: AC_FUNC_STRFTIME185975
+Ref: AC_FUNC_UTIME_NULL187257
+Ref: AC_FUNC_VPRINTF187605
+Node: Generic Functions188821
+Ref: AC_CHECK_FUNC189347
+Ref: AC_CHECK_FUNCS189976
+Node: Header Files194602
+Node: Header Portability195235
+Node: Particular Headers198330
+Ref: AC_HEADER_DIRENT199369
+Ref: AC_HEADER_MAJOR200899
+Ref: AC_HEADER_STAT201683
+Ref: AC_HEADER_STDC203189
+Ref: AC_HEADER_TIME207928
+Node: Generic Headers209315
+Ref: AC_CHECK_HEADER209715
+Ref: AC_CHECK_HEADERS211588
+Node: Declarations214153
+Node: Particular Declarations214749
+Node: Generic Declarations214973
+Ref: AC_CHECK_DECLS216358
+Node: Structures218884
+Node: Particular Structures219499
+Ref: AC_STRUCT_ST_BLOCKS220568
+Ref: AC_STRUCT_TIMEZONE221264
+Node: Generic Structures221593
+Ref: AC_CHECK_MEMBERS222584
+Node: Types223417
+Node: Particular Types223937
+Ref: AC_TYPE_GETGROUPS224380
+Ref: AC_TYPE_MODE_T227416
+Ref: AC_TYPE_OFF_T227599
+Ref: AC_TYPE_PID_T227779
+Ref: AC_TYPE_SIZE_T227959
+Ref: AC_TYPE_UID_T228328
+Node: Generic Types229973
+Node: Compilers and Preprocessors232128
+Node: Specific Compiler Characteristics233402
+Node: Generic Compiler Characteristics234507
+Ref: AC_CHECK_SIZEOF234747
+Node: C Compiler239537
+Ref: AC_PROG_CC_C_O243988
+Ref: AC_C_BIGENDIAN247796
+Ref: AC_C_CONST249637
+Ref: AC_C_INLINE252955
+Ref: AC_C_CHAR_UNSIGNED253178
+Ref: AC_PROG_GCC_TRADITIONAL255800
+Node: C++ Compiler256212
+Node: Objective C Compiler258609
+Node: Objective C++ Compiler259983
+Node: Erlang Compiler and Interpreter261433
+Node: Fortran Compiler263478
+Node: Go Compiler288878
+Node: System Services289923
+Ref: AC_PATH_X290168
+Ref: AC_PATH_XTRA291161
+Ref: AC_SYS_INTERPRETER291738
+Ref: AC_SYS_LONG_FILE_NAMES293150
+Node: Posix Variants293527
+Ref: AC_USE_SYSTEM_EXTENSIONS293827
+Node: Erlang Libraries294903
+Node: Writing Tests299841
+Node: Language Choice301865
+Ref: AC_LANG302362
+Ref: AC_LANG_PUSH304161
+Ref: Language Choice-Footnote-1306034
+Node: Writing Test Programs306190
+Node: Guidelines306768
+Node: Test Functions309028
+Node: Generating Sources310426
+Node: Running the Preprocessor316510
+Ref: AC_PREPROC_IFELSE317242
+Ref: AC_EGREP_HEADER319172
+Ref: AC_EGREP_CPP319501
+Node: Running the Compiler319926
+Node: Running the Linker321681
+Ref: AC_LINK_IFELSE322821
+Node: Runtime323697
+Ref: AC_RUN_IFELSE324472
+Node: Systemology329322
+Node: Multiple Cases331671
+Node: Results333372
+Node: Defining Symbols334191
+Node: Setting Output Variables339082
+Node: Special Chars in Variables344973
+Node: Caching Results346233
+Node: Cache Variable Names349951
+Node: Cache Files351602
+Node: Cache Checkpointing353927
+Node: Printing Messages355301
+Ref: AC_MSG_RESULT356815
+Ref: AC_MSG_NOTICE357322
+Ref: AC_MSG_ERROR357686
+Ref: AC_MSG_WARN358519
+Node: Programming in M4358942
+Node: M4 Quotation359747
+Node: Active Characters360716
+Ref: Active Characters-Footnote-1362106
+Ref: Active Characters-Footnote-2362220
+Node: One Macro Call362242
+Node: Quoting and Parameters363798
+Node: Quotation and Nested Macros366134
+Node: Changequote is Evil369144
+Node: Quadrigraphs371674
+Node: Balancing Parentheses374356
+Node: Quotation Rule Of Thumb378450
+Node: Using autom4te381348
+Ref: Using autom4te-Footnote-1381999
+Node: autom4te Invocation382048
+Node: Customizing autom4te390550
+Node: Programming in M4sugar391831
+Node: Redefined M4 Macros393012
+Node: Diagnostic Macros401342
+Ref: m4_fatal402095
+Ref: m4_warn402334
+Node: Diversion support403102
+Node: Conditional constructs410888
+Node: Looping constructs417742
+Ref: m4_foreach_w421354
+Node: Evaluation Macros428706
+Node: Text processing Macros437395
+Node: Number processing Macros447105
+Ref: m4_version_compare449057
+Node: Set manipulation Macros451364
+Node: Forbidden Patterns460480
+Node: Debugging via autom4te461971
+Node: Programming in M4sh463790
+Node: Common Shell Constructs465163
+Node: Polymorphic Variables473136
+Node: Initialization Macros482725
+Node: File Descriptor Macros488314
+Ref: AS_MESSAGE_LOG_FD489466
+Node: Writing Autoconf Macros490968
+Node: Macro Definitions491773
+Node: Macro Names495452
+Node: Reporting Messages499213
+Node: Dependencies Between Macros501057
+Node: Prerequisite Macros501752
+Node: Suggested Ordering507827
+Node: One-Shot Macros509370
+Node: Obsoleting Macros510723
+Ref: AU_DEFUN511477
+Node: Coding Style512506
+Node: Portable Shell520313
+Node: Shellology524621
+Node: Invoking the Shell528792
+Node: Here-Documents529974
+Node: File Descriptors533594
+Node: Signal Handling540032
+Node: File System Conventions545240
+Node: Shell Pattern Matching551052
+Node: Shell Substitutions551616
+Node: Assignments569492
+Node: Parentheses571383
+Node: Slashes572340
+Node: Special Shell Variables573194
+Node: Shell Functions586526
+Node: Limitations of Builtins589933
+Ref: case593955
+Ref: echo599113
+Ref: export606087
+Ref: if609507
+Ref: set613318
+Ref: trap625040
+Ref: unset628851
+Node: Limitations of Usual Tools629946
+Ref: awk630245
+Ref: grep648349
+Ref: mkdir653981
+Ref: sed659801
+Ref: touch670932
+Node: Portable Make674207
+Node: $< in Ordinary Make Rules675869
+Node: Failure in Make Rules676335
+Node: Special Chars in Names677363
+Node: Backslash-Newline-Empty678335
+Node: Backslash-Newline Comments679367
+Node: Long Lines in Makefiles680256
+Node: Macros and Submakes680632
+Node: The Make Macro MAKEFLAGS683319
+Node: The Make Macro SHELL684204
+Node: Parallel Make686703
+Node: Comments in Make Rules690387
+Node: Newlines in Make Rules691557
+Node: Comments in Make Macros692602
+Node: Trailing whitespace in Make Macros693812
+Node: Command-line Macros and whitespace694563
+Node: obj/ and Make695233
+Node: make -k Status695884
+Node: VPATH and Make696506
+Node: Variables listed in VPATH697830
+Node: VPATH and Double-colon698369
+Node: $< in Explicit Rules698775
+Node: Automatic Rule Rewriting699242
+Node: Tru64 Directory Magic705924
+Node: Make Target Lookup706750
+Node: Single Suffix Rules711192
+Node: Timestamps and Make712538
+Node: Portable C and C++714223
+Node: Varieties of Unportability715864
+Node: Integer Overflow717961
+Node: Integer Overflow Basics718974
+Node: Signed Overflow Examples720722
+Node: Optimization and Wraparound724224
+Node: Signed Overflow Advice727186
+Node: Signed Integer Division729860
+Node: Preprocessor Arithmetic730471
+Node: Null Pointers731220
+Node: Buffer Overruns731854
+Node: Volatile Objects734643
+Node: Floating Point Portability740321
+Node: Exiting Portably740828
+Node: Manual Configuration742304
+Node: Specifying Target Triplets743137
+Ref: Specifying Names743310
+Node: Canonicalizing746185
+Node: Using System Type748448
+Node: Site Configuration751252
+Node: Help Formatting752224
+Node: External Software753168
+Ref: AC_ARG_WITH754714
+Node: Package Options759039
+Ref: AC_ARG_ENABLE760494
+Node: Pretty Help Strings761655
+Ref: AS_HELP_STRING762241
+Node: Option Checking764582
+Node: Site Details766310
+Node: Transforming Names767539
+Node: Transformation Options768621
+Node: Transformation Examples769098
+Node: Transformation Rules770819
+Node: Site Defaults772365
+Node: Running configure Scripts777706
+Node: Basic Installation778771
+Node: Compilers and Options782868
+Node: Multiple Architectures783522
+Node: Installation Names785102
+Node: Optional Features787997
+Node: Particular Systems789351
+Node: System Type790775
+Node: Sharing Defaults792103
+Node: Defining Variables792741
+Node: configure Invocation793639
+Node: config.status Invocation795345
+Ref: CONFIG_SHELL799092
+Node: Obsolete Constructs800258
+Node: Obsolete config.status Use801221
+Node: acconfig Header802999
+Node: autoupdate Invocation805021
+Node: Obsolete Macros806887
+Ref: AC_FUNC_SETVBUF_REVERSED814529
+Ref: AC_TYPE_SIGNAL831075
+Node: Autoconf 1834053
+Node: Changed File Names835119
+Node: Changed Makefiles835869
+Node: Changed Macros836957
+Node: Changed Results838211
+Node: Changed Macro Writing840335
+Node: Autoconf 2.13841615
+Node: Changed Quotation842823
+Node: New Macros844741
+Node: Hosts and Cross-Compilation846536
+Node: AC_LIBOBJ vs LIBOBJS850691
+Node: AC_ACT_IFELSE vs AC_TRY_ACT852306
+Ref: AC_FOO_IFELSE vs AC_TRY_FOO852495
+Node: Using Autotest854308
+Node: Using an Autotest Test Suite856712
+Node: testsuite Scripts857003
+Node: Autotest Logs861485
+Node: Writing Testsuites863826
+Node: testsuite Invocation880858
+Node: Making testsuite Scripts886205
+Node: FAQ891343
+Node: Distributing892203
+Node: Why GNU M4893252
+Node: Bootstrapping894121
+Node: Why Not Imake894731
+Node: Defining Directories899482
+Node: Autom4te Cache901640
+Node: Present But Cannot Be Compiled903478
+Node: Expanded Before Required907195
+Node: Debugging912093
+Node: History917116
+Node: Genesis917985
+Node: Exodus919163
+Node: Leviticus922208
+Node: Numbers923736
+Node: Deuteronomy925651
+Node: GNU Free Documentation License928322
+Node: Indices953487
+Node: Environment Variable Index954206
+Node: Output Variable Index965546
+Node: Preprocessor Symbol Index982426
+Node: Cache Variable Index1000695
+Node: Autoconf Macro Index1011383
+Node: M4 Macro Index1045712
+Node: Autotest Macro Index1066462
+Node: Program & Function Index1068865
+Node: Concept Index1089579
+
+End Tag Table
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
new file mode 100644
index 0000000..34ca213
--- /dev/null
+++ b/doc/autoconf.texi
@@ -0,0 +1,26667 @@
+\input texinfo @c -*-texinfo-*-
+@comment ========================================================
+@comment %**start of header
+@setfilename autoconf.info
+@include version.texi
+@settitle Autoconf
+@setchapternewpage odd
+@ifnothtml
+@setcontentsaftertitlepage
+@end ifnothtml
+@finalout
+
+@c @ovar(ARG)
+@c ----------
+@c The ARG is an optional argument. To be used for macro arguments in
+@c their documentation (@defmac).
+@macro ovar{varname}
+@r{[}@var{\varname\}@r{]}@c
+@end macro
+
+@c @dvar(ARG, DEFAULT)
+@c -------------------
+@c The ARG is an optional argument, defaulting to DEFAULT. To be used
+@c for macro arguments in their documentation (@defmac).
+@macro dvar{varname, default}
+@r{[}@var{\varname\} = @samp{\default\}@r{]}@c
+@end macro
+
+@c Handling the indexes with Texinfo yields several different problems.
+@c
+@c Because we want to drop out the AC_ part of the macro names in the
+@c printed manual, but not in the other outputs, we need a layer above
+@c the usual @acindex{} etc. That's why we first define indexes such as
+@c acx meant to become the macro @acindex. First of all, using ``ac_''
+@c does not work with makeinfo, and using ``ac1'' doesn't work with TeX.
+@c So use something more regular ``acx''. Then you finish with a printed
+@c index saying ``index is not existent''. Of course: you ought to use
+@c two letters :( So you use capitals.
+@c
+@c Second, when defining a macro in the TeX world, following spaces are
+@c eaten. But then, since we embed @acxindex commands that use the end
+@c of line as an end marker, the whole things wrecks itself. So make
+@c sure you do *force* an additional end of line, add a ``@c''.
+@c
+@c Finally, you might want to get rid of TeX expansion, using --expand
+@c with texi2dvi. But then you wake up an old problem: we use macros
+@c in @defmac etc. where TeX does perform the expansion, but not makeinfo.
+
+@c Define an environment variable index, for variables users may set
+@c in their environment or on the configure command line.
+@defcodeindex ev
+@c Define an output variable index, for commonly AC_SUBST'ed variables.
+@defcodeindex ov
+@c Define a cache variable index, for variables matching *_cv_*.
+@defcodeindex CA
+@c Other shell variables not fitting the above categories should be
+@c listed in the predefined vrindex, which we merge in the concept index.
+@syncodeindex vr cp
+@c Define a CPP preprocessor macro index, for #define'd strings.
+@defcodeindex cv
+@c Define an Autoconf macro index that @defmac doesn't write to.
+@defcodeindex AC
+@c Define an Autotest macro index that @defmac doesn't write to.
+@defcodeindex AT
+@c Define an M4sugar macro index that @defmac doesn't write to.
+@defcodeindex MS
+@c Define an index for *foreign* programs: `mv' etc. Used for the
+@c portability sections and so on.
+@defindex pr
+
+@c shortindexflag
+@c --------------
+@c Shall we factor AC_ out of the Autoconf macro index etc.?
+@iftex
+@set shortindexflag
+@end iftex
+
+@c @acindex{MACRO}
+@c ---------------
+@c Registering an AC_\MACRO\.
+@ifset shortindexflag
+@macro acindex{macro}
+@ACindex \macro\
+@c
+@end macro
+@end ifset
+@ifclear shortindexflag
+@macro acindex{macro}
+@ACindex AC_\macro\
+@end macro
+@end ifclear
+
+@c @ahindex{MACRO}
+@c ---------------
+@c Registering an AH_\MACRO\.
+@macro ahindex{macro}
+@ACindex AH_\macro\
+@c
+@end macro
+
+@c @asindex{MACRO}
+@c ---------------
+@c Registering an AS_\MACRO\.
+@ifset shortindexflag
+@macro asindex{macro}
+@MSindex \macro\
+@c
+@end macro
+@end ifset
+@ifclear shortindexflag
+@macro asindex{macro}
+@MSindex AS_\macro\
+@end macro
+@end ifclear
+
+@c @atindex{MACRO}
+@c ---------------
+@c Registering an AT_\MACRO\.
+@ifset shortindexflag
+@macro atindex{macro}
+@ATindex \macro\
+@c
+@end macro
+@end ifset
+@ifclear shortindexflag
+@macro atindex{macro}
+@ATindex AT_\macro\
+@end macro
+@end ifclear
+
+@c @auindex{MACRO}
+@c ---------------
+@c Registering an AU_\MACRO\.
+@macro auindex{macro}
+@ACindex AU_\macro\
+@c
+@end macro
+
+@c @hdrindex{MACRO}
+@c ----------------
+@c Indexing a header.
+@macro hdrindex{macro}
+@prindex @file{\macro\}
+@c
+@end macro
+
+@c @msindex{MACRO}
+@c ---------------
+@c Registering an m4_\MACRO\.
+@ifset shortindexflag
+@macro msindex{macro}
+@MSindex \macro\
+@c
+@end macro
+@end ifset
+@ifclear shortindexflag
+@macro msindex{macro}
+@MSindex m4_\macro\
+@end macro
+@end ifclear
+
+
+@c @caindex{VARIABLE}
+@c ------------------
+@c Registering an ac_cv_\VARIABLE\ cache variable.
+@ifset shortindexflag
+@macro caindex{macro}
+@CAindex \macro\
+@end macro
+@end ifset
+@ifclear shortindexflag
+@macro caindex{macro}
+@CAindex ac_cv_\macro\
+@end macro
+@end ifclear
+
+@c Define an index for functions: `alloca' etc. Used for the
+@c portability sections and so on. We can't use `fn' (aka `fnindex),
+@c since `@defmac' goes into it => we'd get all the macros too.
+
+@c FIXME: Aaarg! It seems there are too many indices for TeX :(
+@c
+@c ! No room for a new @write .
+@c l.112 @defcodeindex fu
+@c
+@c so don't define yet another one :( Just put some tags before each
+@c @prindex which is actually a @funindex.
+@c
+@c @defcodeindex fu
+@c
+@c
+@c @c Put the programs and functions into their own index.
+@c @syncodeindex fu pr
+
+@comment %**end of header
+@comment ========================================================
+
+@copying
+
+This manual (@value{UPDATED}) is for GNU Autoconf
+(version @value{VERSION}),
+a package for creating scripts to configure source code packages using
+templates and an M4 macro package.
+
+Copyright @copyright{} 1992-1996, 1998-2012 Free Software Foundation,
+Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License,
+Version 1.3 or any later version published by the Free Software
+Foundation; with no Invariant Sections, no Front-Cover texts, and
+no Back-Cover Texts. A copy of the license is included in the section
+entitled ``GNU Free Documentation License.''
+@end quotation
+@end copying
+
+
+
+@dircategory Software development
+@direntry
+* Autoconf: (autoconf). Create source code configuration scripts.
+@end direntry
+
+@dircategory Individual utilities
+@direntry
+* autoscan: (autoconf)autoscan Invocation.
+ Semi-automatic @file{configure.ac} writing
+* ifnames: (autoconf)ifnames Invocation. Listing conditionals in source.
+* autoconf-invocation: (autoconf)autoconf Invocation.
+ How to create configuration scripts
+* autoreconf: (autoconf)autoreconf Invocation.
+ Remaking multiple @command{configure} scripts
+* autoheader: (autoconf)autoheader Invocation.
+ How to create configuration templates
+* autom4te: (autoconf)autom4te Invocation.
+ The Autoconf executables backbone
+* configure: (autoconf)configure Invocation. Configuring a package.
+* autoupdate: (autoconf)autoupdate Invocation.
+ Automatic update of @file{configure.ac}
+* config.status: (autoconf)config.status Invocation. Recreating configurations.
+* testsuite: (autoconf)testsuite Invocation. Running an Autotest test suite.
+@end direntry
+
+@titlepage
+@title Autoconf
+@subtitle Creating Automatic Configuration Scripts
+@subtitle for version @value{VERSION}, @value{UPDATED}
+@author David MacKenzie
+@author Ben Elliston
+@author Akim Demaille
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+
+@ifnottex
+@node Top
+@top Autoconf
+@insertcopying
+@end ifnottex
+
+@c The master menu, created with texinfo-master-menu, goes here.
+
+@menu
+* Introduction:: Autoconf's purpose, strengths, and weaknesses
+* The GNU Build System:: A set of tools for portable software packages
+* Making configure Scripts:: How to organize and produce Autoconf scripts
+* Setup:: Initialization and output
+* Existing Tests:: Macros that check for particular features
+* Writing Tests:: How to write new feature checks
+* Results:: What to do with results from feature checks
+* Programming in M4:: Layers on top of which Autoconf is written
+* Programming in M4sh:: Shell portability layer
+* Writing Autoconf Macros:: Adding new macros to Autoconf
+* Portable Shell:: Shell script portability pitfalls
+* Portable Make:: Makefile portability pitfalls
+* Portable C and C++:: C and C++ portability pitfalls
+* Manual Configuration:: Selecting features that can't be guessed
+* Site Configuration:: Local defaults for @command{configure}
+* Running configure Scripts:: How to use the Autoconf output
+* config.status Invocation:: Recreating a configuration
+* Obsolete Constructs:: Kept for backward compatibility
+* Using Autotest:: Creating portable test suites
+* FAQ:: Frequent Autoconf Questions, with answers
+* History:: History of Autoconf
+* GNU Free Documentation License:: License for copying this manual
+* Indices:: Indices of symbols, concepts, etc.
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+The GNU Build System
+
+* Automake:: Escaping makefile hell
+* Gnulib:: The GNU portability library
+* Libtool:: Building libraries portably
+* Pointers:: More info on the GNU build system
+
+Making @command{configure} Scripts
+
+* Writing Autoconf Input:: What to put in an Autoconf input file
+* autoscan Invocation:: Semi-automatic @file{configure.ac} writing
+* ifnames Invocation:: Listing the conditionals in source code
+* autoconf Invocation:: How to create configuration scripts
+* autoreconf Invocation:: Remaking multiple @command{configure} scripts
+
+Writing @file{configure.ac}
+
+* Shell Script Compiler:: Autoconf as solution of a problem
+* Autoconf Language:: Programming in Autoconf
+* Autoconf Input Layout:: Standard organization of @file{configure.ac}
+
+Initialization and Output Files
+
+* Initializing configure:: Option processing etc.
+* Versioning:: Dealing with Autoconf versions
+* Notices:: Copyright, version numbers in @command{configure}
+* Input:: Where Autoconf should find files
+* Output:: Outputting results from the configuration
+* Configuration Actions:: Preparing the output based on results
+* Configuration Files:: Creating output files
+* Makefile Substitutions:: Using output variables in makefiles
+* Configuration Headers:: Creating a configuration header file
+* Configuration Commands:: Running arbitrary instantiation commands
+* Configuration Links:: Links depending on the configuration
+* Subdirectories:: Configuring independent packages together
+* Default Prefix:: Changing the default installation prefix
+
+Substitutions in Makefiles
+
+* Preset Output Variables:: Output variables that are always set
+* Installation Directory Variables:: Other preset output variables
+* Changed Directory Variables:: Warnings about @file{datarootdir}
+* Build Directories:: Supporting multiple concurrent compiles
+* Automatic Remaking:: Makefile rules for configuring
+
+Configuration Header Files
+
+* Header Templates:: Input for the configuration headers
+* autoheader Invocation:: How to create configuration templates
+* Autoheader Macros:: How to specify CPP templates
+
+Existing Tests
+
+* Common Behavior:: Macros' standard schemes
+* Alternative Programs:: Selecting between alternative programs
+* Files:: Checking for the existence of files
+* Libraries:: Library archives that might be missing
+* Library Functions:: C library functions that might be missing
+* Header Files:: Header files that might be missing
+* Declarations:: Declarations that may be missing
+* Structures:: Structures or members that might be missing
+* Types:: Types that might be missing
+* Compilers and Preprocessors:: Checking for compiling programs
+* System Services:: Operating system services
+* Posix Variants:: Special kludges for specific Posix variants
+* Erlang Libraries:: Checking for the existence of Erlang libraries
+
+Common Behavior
+
+* Standard Symbols:: Symbols defined by the macros
+* Default Includes:: Includes used by the generic macros
+
+Alternative Programs
+
+* Particular Programs:: Special handling to find certain programs
+* Generic Programs:: How to find other programs
+
+Library Functions
+
+* Function Portability:: Pitfalls with usual functions
+* Particular Functions:: Special handling to find certain functions
+* Generic Functions:: How to find other functions
+
+Header Files
+
+* Header Portability:: Collected knowledge on common headers
+* Particular Headers:: Special handling to find certain headers
+* Generic Headers:: How to find other headers
+
+Declarations
+
+* Particular Declarations:: Macros to check for certain declarations
+* Generic Declarations:: How to find other declarations
+
+Structures
+
+* Particular Structures:: Macros to check for certain structure members
+* Generic Structures:: How to find other structure members
+
+Types
+
+* Particular Types:: Special handling to find certain types
+* Generic Types:: How to find other types
+
+Compilers and Preprocessors
+
+* Specific Compiler Characteristics:: Some portability issues
+* Generic Compiler Characteristics:: Language independent tests and features
+* C Compiler:: Checking its characteristics
+* C++ Compiler:: Likewise
+* Objective C Compiler:: Likewise
+* Objective C++ Compiler:: Likewise
+* Erlang Compiler and Interpreter:: Likewise
+* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
+
+Writing Tests
+
+* Language Choice:: Selecting which language to use for testing
+* Writing Test Programs:: Forging source files for compilers
+* Running the Preprocessor:: Detecting preprocessor symbols
+* Running the Compiler:: Detecting language or header features
+* Running the Linker:: Detecting library features
+* Runtime:: Testing for runtime features
+* Systemology:: A zoology of operating systems
+* Multiple Cases:: Tests for several possible values
+
+Writing Test Programs
+
+* Guidelines:: General rules for writing test programs
+* Test Functions:: Avoiding pitfalls in test programs
+* Generating Sources:: Source program boilerplate
+
+Results of Tests
+
+* Defining Symbols:: Defining C preprocessor symbols
+* Setting Output Variables:: Replacing variables in output files
+* Special Chars in Variables:: Characters to beware of in variables
+* Caching Results:: Speeding up subsequent @command{configure} runs
+* Printing Messages:: Notifying @command{configure} users
+
+Caching Results
+
+* Cache Variable Names:: Shell variables used in caches
+* Cache Files:: Files @command{configure} uses for caching
+* Cache Checkpointing:: Loading and saving the cache file
+
+Programming in M4
+
+* M4 Quotation:: Protecting macros from unwanted expansion
+* Using autom4te:: The Autoconf executables backbone
+* Programming in M4sugar:: Convenient pure M4 macros
+* Debugging via autom4te:: Figuring out what M4 was doing
+
+M4 Quotation
+
+* Active Characters:: Characters that change the behavior of M4
+* One Macro Call:: Quotation and one macro call
+* Quoting and Parameters:: M4 vs. shell parameters
+* Quotation and Nested Macros:: Macros calling macros
+* Changequote is Evil:: Worse than INTERCAL: M4 + changequote
+* Quadrigraphs:: Another way to escape special characters
+* Balancing Parentheses:: Dealing with unbalanced parentheses
+* Quotation Rule Of Thumb:: One parenthesis, one quote
+
+Using @command{autom4te}
+
+* autom4te Invocation:: A GNU M4 wrapper
+* Customizing autom4te:: Customizing the Autoconf package
+
+Programming in M4sugar
+
+* Redefined M4 Macros:: M4 builtins changed in M4sugar
+* Diagnostic Macros:: Diagnostic messages from M4sugar
+* Diversion support:: Diversions in M4sugar
+* Conditional constructs:: Conditions in M4
+* Looping constructs:: Iteration in M4
+* Evaluation Macros:: More quotation and evaluation control
+* Text processing Macros:: String manipulation in M4
+* Number processing Macros:: Arithmetic computation in M4
+* Set manipulation Macros:: Set manipulation in M4
+* Forbidden Patterns:: Catching unexpanded macros
+
+Programming in M4sh
+
+* Common Shell Constructs:: Portability layer for common shell constructs
+* Polymorphic Variables:: Support for indirect variable names
+* Initialization Macros:: Macros to establish a sane shell environment
+* File Descriptor Macros:: File descriptor macros for input and output
+
+Writing Autoconf Macros
+
+* Macro Definitions:: Basic format of an Autoconf macro
+* Macro Names:: What to call your new macros
+* Reporting Messages:: Notifying @command{autoconf} users
+* Dependencies Between Macros:: What to do when macros depend on other macros
+* Obsoleting Macros:: Warning about old ways of doing things
+* Coding Style:: Writing Autoconf macros @`a la Autoconf
+
+Dependencies Between Macros
+
+* Prerequisite Macros:: Ensuring required information
+* Suggested Ordering:: Warning about possible ordering problems
+* One-Shot Macros:: Ensuring a macro is called only once
+
+Portable Shell Programming
+
+* Shellology:: A zoology of shells
+* Invoking the Shell:: Invoking the shell as a command
+* Here-Documents:: Quirks and tricks
+* File Descriptors:: FDs and redirections
+* Signal Handling:: Shells, signals, and headaches
+* File System Conventions:: File names
+* Shell Pattern Matching:: Pattern matching
+* Shell Substitutions:: Variable and command expansions
+* Assignments:: Varying side effects of assignments
+* Parentheses:: Parentheses in shell scripts
+* Slashes:: Slashes in shell scripts
+* Special Shell Variables:: Variables you should not change
+* Shell Functions:: What to look out for if you use them
+* Limitations of Builtins:: Portable use of not so portable /bin/sh
+* Limitations of Usual Tools:: Portable use of portable tools
+
+Portable Make Programming
+
+* $< in Ordinary Make Rules:: $< in ordinary rules
+* Failure in Make Rules:: Failing portably in rules
+* Special Chars in Names:: Special Characters in Macro Names
+* Backslash-Newline-Empty:: Empty lines after backslash-newline
+* Backslash-Newline Comments:: Spanning comments across line boundaries
+* Long Lines in Makefiles:: Line length limitations
+* Macros and Submakes:: @code{make macro=value} and submakes
+* The Make Macro MAKEFLAGS:: @code{$(MAKEFLAGS)} portability issues
+* The Make Macro SHELL:: @code{$(SHELL)} portability issues
+* Parallel Make:: Parallel @command{make} quirks
+* Comments in Make Rules:: Other problems with Make comments
+* Newlines in Make Rules:: Using literal newlines in rules
+* Comments in Make Macros:: Other problems with Make comments in macros
+* Trailing whitespace in Make Macros:: Macro substitution problems
+* Command-line Macros and whitespace:: Whitespace trimming of values
+* obj/ and Make:: Don't name a subdirectory @file{obj}
+* make -k Status:: Exit status of @samp{make -k}
+* VPATH and Make:: @code{VPATH} woes
+* Single Suffix Rules:: Single suffix rules and separated dependencies
+* Timestamps and Make:: Subsecond timestamp resolution
+
+@code{VPATH} and Make
+
+* Variables listed in VPATH:: @code{VPATH} must be literal on ancient hosts
+* VPATH and Double-colon:: Problems with @samp{::} on ancient hosts
+* $< in Explicit Rules:: @code{$<} does not work in ordinary rules
+* Automatic Rule Rewriting:: @code{VPATH} goes wild on Solaris
+* Tru64 Directory Magic:: @command{mkdir} goes wild on Tru64
+* Make Target Lookup:: More details about @code{VPATH} lookup
+
+Portable C and C++ Programming
+
+* Varieties of Unportability:: How to make your programs unportable
+* Integer Overflow:: When integers get too large
+* Preprocessor Arithmetic:: @code{#if} expression problems
+* Null Pointers:: Properties of null pointers
+* Buffer Overruns:: Subscript errors and the like
+* Volatile Objects:: @code{volatile} and signals
+* Floating Point Portability:: Portable floating-point arithmetic
+* Exiting Portably:: Exiting and the exit status
+
+Integer Overflow
+
+* Integer Overflow Basics:: Why integer overflow is a problem
+* Signed Overflow Examples:: Examples of code assuming wraparound
+* Optimization and Wraparound:: Optimizations that break uses of wraparound
+* Signed Overflow Advice:: Practical advice for signed overflow issues
+* Signed Integer Division:: @code{INT_MIN / -1} and @code{INT_MIN % -1}
+
+Manual Configuration
+
+* Specifying Target Triplets:: Specifying target triplets
+* Canonicalizing:: Getting the canonical system type
+* Using System Type:: What to do with the system type
+
+Site Configuration
+
+* Help Formatting:: Customizing @samp{configure --help}
+* External Software:: Working with other optional software
+* Package Options:: Selecting optional features
+* Pretty Help Strings:: Formatting help string
+* Option Checking:: Controlling checking of @command{configure} options
+* Site Details:: Configuring site details
+* Transforming Names:: Changing program names when installing
+* Site Defaults:: Giving @command{configure} local defaults
+
+Transforming Program Names When Installing
+
+* Transformation Options:: @command{configure} options to transform names
+* Transformation Examples:: Sample uses of transforming names
+* Transformation Rules:: Makefile uses of transforming names
+
+Running @command{configure} Scripts
+
+* Basic Installation:: Instructions for typical cases
+* Compilers and Options:: Selecting compilers and optimization
+* Multiple Architectures:: Compiling for multiple architectures at once
+* Installation Names:: Installing in different directories
+* Optional Features:: Selecting optional features
+* Particular Systems:: Particular systems
+* System Type:: Specifying the system type
+* Sharing Defaults:: Setting site-wide defaults for @command{configure}
+* Defining Variables:: Specifying the compiler etc.
+* configure Invocation:: Changing how @command{configure} runs
+
+Obsolete Constructs
+
+* Obsolete config.status Use:: Obsolete convention for @command{config.status}
+* acconfig Header:: Additional entries in @file{config.h.in}
+* autoupdate Invocation:: Automatic update of @file{configure.ac}
+* Obsolete Macros:: Backward compatibility macros
+* Autoconf 1:: Tips for upgrading your files
+* Autoconf 2.13:: Some fresher tips
+
+Upgrading From Version 1
+
+* Changed File Names:: Files you might rename
+* Changed Makefiles:: New things to put in @file{Makefile.in}
+* Changed Macros:: Macro calls you might replace
+* Changed Results:: Changes in how to check test results
+* Changed Macro Writing:: Better ways to write your own macros
+
+Upgrading From Version 2.13
+
+* Changed Quotation:: Broken code which used to work
+* New Macros:: Interaction with foreign macros
+* Hosts and Cross-Compilation:: Bugward compatibility kludges
+* AC_LIBOBJ vs LIBOBJS:: LIBOBJS is a forbidden token
+* AC_ACT_IFELSE vs AC_TRY_ACT:: A more generic scheme for testing sources
+
+Generating Test Suites with Autotest
+
+* Using an Autotest Test Suite:: Autotest and the user
+* Writing Testsuites:: Autotest macros
+* testsuite Invocation:: Running @command{testsuite} scripts
+* Making testsuite Scripts:: Using autom4te to create @command{testsuite}
+
+Using an Autotest Test Suite
+
+* testsuite Scripts:: The concepts of Autotest
+* Autotest Logs:: Their contents
+
+Frequent Autoconf Questions, with answers
+
+* Distributing:: Distributing @command{configure} scripts
+* Why GNU M4:: Why not use the standard M4?
+* Bootstrapping:: Autoconf and GNU M4 require each other?
+* Why Not Imake:: Why GNU uses @command{configure} instead of Imake
+* Defining Directories:: Passing @code{datadir} to program
+* Autom4te Cache:: What is it? Can I remove it?
+* Present But Cannot Be Compiled:: Compiler and Preprocessor Disagree
+* Expanded Before Required:: Expanded Before Required
+* Debugging:: Debugging @command{configure} scripts
+
+History of Autoconf
+
+* Genesis:: Prehistory and naming of @command{configure}
+* Exodus:: The plagues of M4 and Perl
+* Leviticus:: The priestly code of portability arrives
+* Numbers:: Growth and contributors
+* Deuteronomy:: Approaching the promises of easy configuration
+
+Indices
+
+* Environment Variable Index:: Index of environment variables used
+* Output Variable Index:: Index of variables set in output files
+* Preprocessor Symbol Index:: Index of C preprocessor symbols defined
+* Cache Variable Index:: Index of documented cache variables
+* Autoconf Macro Index:: Index of Autoconf macros
+* M4 Macro Index:: Index of M4, M4sugar, and M4sh macros
+* Autotest Macro Index:: Index of Autotest macros
+* Program & Function Index:: Index of those with portability problems
+* Concept Index:: General index
+
+@end detailmenu
+@end menu
+
+@c ============================================================= Introduction.
+
+@node Introduction
+@chapter Introduction
+@cindex Introduction
+
+@flushright
+A physicist, an engineer, and a computer scientist were discussing the
+nature of God. ``Surely a Physicist,'' said the physicist, ``because
+early in the Creation, God made Light; and you know, Maxwell's
+equations, the dual nature of electromagnetic waves, the relativistic
+consequences@enddots{}'' ``An Engineer!,'' said the engineer, ``because
+before making Light, God split the Chaos into Land and Water; it takes a
+hell of an engineer to handle that big amount of mud, and orderly
+separation of solids from liquids@enddots{}'' The computer scientist
+shouted: ``And the Chaos, where do you think it was coming from, hmm?''
+
+---Anonymous
+@end flushright
+@c (via Franc,ois Pinard)
+
+Autoconf is a tool for producing shell scripts that automatically
+configure software source code packages to adapt to many kinds of
+Posix-like systems. The configuration scripts produced by Autoconf
+are independent of Autoconf when they are run, so their users do not
+need to have Autoconf.
+
+The configuration scripts produced by Autoconf require no manual user
+intervention when run; they do not normally even need an argument
+specifying the system type. Instead, they individually test for the
+presence of each feature that the software package they are for might need.
+(Before each check, they print a one-line message stating what they are
+checking for, so the user doesn't get too bored while waiting for the
+script to finish.) As a result, they deal well with systems that are
+hybrids or customized from the more common Posix variants. There is
+no need to maintain files that list the features supported by each
+release of each variant of Posix.
+
+For each software package that Autoconf is used with, it creates a
+configuration script from a template file that lists the system features
+that the package needs or can use. After the shell code to recognize
+and respond to a system feature has been written, Autoconf allows it to
+be shared by many software packages that can use (or need) that feature.
+If it later turns out that the shell code needs adjustment for some
+reason, it needs to be changed in only one place; all of the
+configuration scripts can be regenerated automatically to take advantage
+of the updated code.
+
+@c "Those who do not understand Unix are condemned to reinvent it, poorly."
+@c --Henry Spencer, 1987 (see http://en.wikipedia.org/wiki/Unix_philosophy)
+Those who do not understand Autoconf are condemned to reinvent it, poorly.
+The primary goal of Autoconf is making the @emph{user's} life easier;
+making the @emph{maintainer's} life easier is only a secondary goal.
+Put another way, the primary goal is not to make the generation of
+@file{configure} automatic for package maintainers (although patches
+along that front are welcome, since package maintainers form the user
+base of Autoconf); rather, the goal is to make @file{configure}
+painless, portable, and predictable for the end user of each
+@dfn{autoconfiscated} package. And to this degree, Autoconf is highly
+successful at its goal --- most complaints to the Autoconf list are
+about difficulties in writing Autoconf input, and not in the behavior of
+the resulting @file{configure}. Even packages that don't use Autoconf
+will generally provide a @file{configure} script, and the most common
+complaint about these alternative home-grown scripts is that they fail
+to meet one or more of the GNU Coding Standards (@pxref{Configuration, , ,
+standards, The GNU Coding Standards}) that users
+have come to expect from Autoconf-generated @file{configure} scripts.
+
+The Metaconfig package is similar in purpose to Autoconf, but the
+scripts it produces require manual user intervention, which is quite
+inconvenient when configuring large source trees. Unlike Metaconfig
+scripts, Autoconf scripts can support cross-compiling, if some care is
+taken in writing them.
+
+Autoconf does not solve all problems related to making portable
+software packages---for a more complete solution, it should be used in
+concert with other GNU build tools like Automake and
+Libtool. These other tools take on jobs like the creation of a
+portable, recursive makefile with all of the standard targets,
+linking of shared libraries, and so on. @xref{The GNU Build System},
+for more information.
+
+Autoconf imposes some restrictions on the names of macros used with
+@code{#if} in C programs (@pxref{Preprocessor Symbol Index}).
+
+Autoconf requires GNU M4 version 1.4.6 or later in order to
+generate the scripts. It uses features that some versions of M4,
+including GNU M4 1.3, do not have. Autoconf works better
+with GNU M4 version 1.4.14 or later, though this is not
+required.
+
+@xref{Autoconf 1}, for information about upgrading from version 1.
+@xref{History}, for the story of Autoconf's development. @xref{FAQ},
+for answers to some common questions about Autoconf.
+
+See the @uref{http://@/www.gnu.org/@/software/@/autoconf/,
+Autoconf web page} for up-to-date information, details on the mailing
+lists, pointers to a list of known bugs, etc.
+
+Mail suggestions to @email{autoconf@@gnu.org, the Autoconf mailing
+list}. Past suggestions are
+@uref{http://@/lists.gnu.org/@/archive/@/html/@/autoconf/, archived}.
+
+Mail bug reports to @email{bug-autoconf@@gnu.org, the
+Autoconf Bugs mailing list}. Past bug reports are
+@uref{http://@/lists.gnu.org/@/archive/@/html/@/bug-autoconf/, archived}.
+
+If possible, first check that your bug is
+not already solved in current development versions, and that it has not
+been reported yet. Be sure to include all the needed information and a
+short @file{configure.ac} that demonstrates the problem.
+
+Autoconf's development tree is accessible via @command{git}; see the
+@uref{http://@/savannah.gnu.org/@/projects/@/autoconf/, Autoconf
+Summary} for details, or view
+@uref{http://@/git.sv.gnu.org/@/gitweb/@/?p=autoconf.git, the actual
+repository}. Anonymous CVS access is also available, see
+@file{README} for more details. Patches relative to the
+current @command{git} version can be sent for review to the
+@email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}, with
+discussion on prior patches
+@uref{http://@/lists.gnu.org/@/archive/@/html/@/autoconf-@/patches/,
+archived}; and all commits are posted in the read-only
+@email{autoconf-commit@@gnu.org, Autoconf Commit mailing list}, which is
+also @uref{http://@/lists.gnu.org/@/archive/@/html/@/autoconf-commit/,
+archived}.
+
+Because of its mission, the Autoconf package itself
+includes only a set of often-used
+macros that have already demonstrated their usefulness. Nevertheless,
+if you wish to share your macros, or find existing ones, see the
+@uref{http://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
+Archive}, which is kindly run by @email{simons@@cryp.to,
+Peter Simons}.
+
+
+@c ================================================= The GNU Build System
+
+@node The GNU Build System
+@chapter The GNU Build System
+@cindex GNU build system
+
+Autoconf solves an important problem---reliable discovery of
+system-specific build and runtime information---but this is only one
+piece of the puzzle for the development of portable software. To this
+end, the GNU project has developed a suite of integrated
+utilities to finish the job Autoconf started: the GNU build
+system, whose most important components are Autoconf, Automake, and
+Libtool. In this chapter, we introduce you to those tools, point you
+to sources of more information, and try to convince you to use the
+entire GNU build system for your software.
+
+@menu
+* Automake:: Escaping makefile hell
+* Gnulib:: The GNU portability library
+* Libtool:: Building libraries portably
+* Pointers:: More info on the GNU build system
+@end menu
+
+@node Automake
+@section Automake
+
+The ubiquity of @command{make} means that a makefile is almost the
+only viable way to distribute automatic build rules for software, but
+one quickly runs into its numerous limitations. Its lack of
+support for automatic dependency tracking, recursive builds in
+subdirectories, reliable timestamps (e.g., for network file systems), and
+so on, mean that developers must painfully (and often incorrectly)
+reinvent the wheel for each project. Portability is non-trivial, thanks
+to the quirks of @command{make} on many systems. On top of all this is the
+manual labor required to implement the many standard targets that users
+have come to expect (@code{make install}, @code{make distclean},
+@code{make uninstall}, etc.). Since you are, of course, using Autoconf,
+you also have to insert repetitive code in your @file{Makefile.in} to
+recognize @code{@@CC@@}, @code{@@CFLAGS@@}, and other substitutions
+provided by @command{configure}. Into this mess steps @dfn{Automake}.
+@cindex Automake
+
+Automake allows you to specify your build needs in a @file{Makefile.am}
+file with a vastly simpler and more powerful syntax than that of a plain
+makefile, and then generates a portable @file{Makefile.in} for
+use with Autoconf. For example, the @file{Makefile.am} to build and
+install a simple ``Hello world'' program might look like:
+
+@example
+bin_PROGRAMS = hello
+hello_SOURCES = hello.c
+@end example
+
+@noindent
+The resulting @file{Makefile.in} (~400 lines) automatically supports all
+the standard targets, the substitutions provided by Autoconf, automatic
+dependency tracking, @code{VPATH} building, and so on. @command{make}
+builds the @code{hello} program, and @code{make install} installs it
+in @file{/usr/local/bin} (or whatever prefix was given to
+@command{configure}, if not @file{/usr/local}).
+
+The benefits of Automake increase for larger packages (especially ones
+with subdirectories), but even for small programs the added convenience
+and portability can be substantial. And that's not all@enddots{}
+
+@node Gnulib
+@section Gnulib
+
+GNU software has a well-deserved reputation for running on
+many different types of systems. While our primary goal is to write
+software for the GNU system, many users and developers have
+been introduced to us through the systems that they were already using.
+
+@cindex Gnulib
+Gnulib is a central location for common GNU code, intended to
+be shared among free software packages. Its components are typically
+shared at the source level, rather than being a library that gets built,
+installed, and linked against. The idea is to copy files from Gnulib
+into your own source tree. There is no distribution tarball; developers
+should just grab source modules from the repository. The source files
+are available online, under various licenses, mostly GNU
+GPL or GNU LGPL.
+
+Gnulib modules typically contain C source code along with Autoconf
+macros used to configure the source code. For example, the Gnulib
+@code{stdbool} module implements a @file{stdbool.h} header that nearly
+conforms to C99, even on old-fashioned hosts that lack @file{stdbool.h}.
+This module contains a source file for the replacement header, along
+with an Autoconf macro that arranges to use the replacement header on
+old-fashioned systems.
+
+@node Libtool
+@section Libtool
+
+Often, one wants to build not only programs, but libraries, so that
+other programs can benefit from the fruits of your labor. Ideally, one
+would like to produce @emph{shared} (dynamically linked) libraries,
+which can be used by multiple programs without duplication on disk or in
+memory and can be updated independently of the linked programs.
+Producing shared libraries portably, however, is the stuff of
+nightmares---each system has its own incompatible tools, compiler flags,
+and magic incantations. Fortunately, GNU provides a solution:
+@dfn{Libtool}.
+@cindex Libtool
+
+Libtool handles all the requirements of building shared libraries for
+you, and at this time seems to be the @emph{only} way to do so with any
+portability. It also handles many other headaches, such as: the
+interaction of Make rules with the variable suffixes of
+shared libraries, linking reliably with shared libraries before they are
+installed by the superuser, and supplying a consistent versioning system
+(so that different versions of a library can be installed or upgraded
+without breaking binary compatibility). Although Libtool, like
+Autoconf, can be used without Automake, it is most simply utilized in
+conjunction with Automake---there, Libtool is used automatically
+whenever shared libraries are needed, and you need not know its syntax.
+
+@node Pointers
+@section Pointers
+
+Developers who are used to the simplicity of @command{make} for small
+projects on a single system might be daunted at the prospect of
+learning to use Automake and Autoconf. As your software is
+distributed to more and more users, however, you otherwise
+quickly find yourself putting lots of effort into reinventing the
+services that the GNU build tools provide, and making the
+same mistakes that they once made and overcame. (Besides, since
+you're already learning Autoconf, Automake is a piece of cake.)
+
+There are a number of places that you can go to for more information on
+the GNU build tools.
+
+@itemize @minus
+
+@item Web
+
+The project home pages for
+@uref{http://@/www@/.gnu@/.org/@/software/@/autoconf/, Autoconf},
+@uref{http://@/www@/.gnu@/.org/@/software/@/automake/, Automake},
+@uref{http://@/www@/.gnu@/.org/@/software/@/gnulib/, Gnulib}, and
+@uref{http://@/www@/.gnu@/.org/@/software/@/libtool/, Libtool}.
+
+@item Automake Manual
+
+@xref{Top, , Automake, automake, GNU Automake}, for more
+information on Automake.
+
+@item Books
+
+The book @cite{GNU Autoconf, Automake and
+Libtool}@footnote{@cite{GNU Autoconf, Automake and Libtool},
+by G. V. Vaughan, B. Elliston, T. Tromey, and I. L. Taylor. SAMS (originally
+New Riders), 2000, ISBN 1578701902.} describes the complete GNU
+build environment. You can also find
+@uref{http://@/sources.redhat.com/@/autobook/, the entire book on-line}.
+
+@end itemize
+
+@c ================================================= Making configure Scripts.
+
+@node Making configure Scripts
+@chapter Making @command{configure} Scripts
+@cindex @file{aclocal.m4}
+@cindex @command{configure}
+
+The configuration scripts that Autoconf produces are by convention
+called @command{configure}. When run, @command{configure} creates several
+files, replacing configuration parameters in them with appropriate
+values. The files that @command{configure} creates are:
+
+@itemize @minus
+@item
+one or more @file{Makefile} files, usually one in each subdirectory of the
+package (@pxref{Makefile Substitutions});
+
+@item
+optionally, a C header file, the name of which is configurable,
+containing @code{#define} directives (@pxref{Configuration Headers});
+
+@item
+a shell script called @file{config.status} that, when run, recreates
+the files listed above (@pxref{config.status Invocation});
+
+@item
+an optional shell script normally called @file{config.cache}
+(created when using @samp{configure --config-cache}) that
+saves the results of running many of the tests (@pxref{Cache Files});
+
+@item
+a file called @file{config.log} containing any messages produced by
+compilers, to help debugging if @command{configure} makes a mistake.
+@end itemize
+
+@cindex @file{configure.in}
+@cindex @file{configure.ac}
+To create a @command{configure} script with Autoconf, you need to write an
+Autoconf input file @file{configure.ac} (or @file{configure.in}) and run
+@command{autoconf} on it. If you write your own feature tests to
+supplement those that come with Autoconf, you might also write files
+called @file{aclocal.m4} and @file{acsite.m4}. If you use a C header
+file to contain @code{#define} directives, you might also run
+@command{autoheader}, and you can distribute the generated file
+@file{config.h.in} with the package.
+
+Here is a diagram showing how the files that can be used in
+configuration are produced. Programs that are executed are suffixed by
+@samp{*}. Optional files are enclosed in square brackets (@samp{[]}).
+@command{autoconf} and @command{autoheader} also read the installed Autoconf
+macro files (by reading @file{autoconf.m4}).
+
+@noindent
+Files used in preparing a software package for distribution, when using
+just Autoconf:
+@example
+your source files --> [autoscan*] --> [configure.scan] --> configure.ac
+
+@group
+configure.ac --.
+ | .------> autoconf* -----> configure
+[aclocal.m4] --+---+
+ | `-----> [autoheader*] --> [config.h.in]
+[acsite.m4] ---'
+@end group
+
+Makefile.in
+@end example
+
+@noindent
+Additionally, if you use Automake, the following additional productions
+come into play:
+
+@example
+@group
+[acinclude.m4] --.
+ |
+[local macros] --+--> aclocal* --> aclocal.m4
+ |
+configure.ac ----'
+@end group
+
+@group
+configure.ac --.
+ +--> automake* --> Makefile.in
+Makefile.am ---'
+@end group
+@end example
+
+@noindent
+Files used in configuring a software package:
+@example
+@group
+ .-------------> [config.cache]
+configure* ------------+-------------> config.log
+ |
+[config.h.in] -. v .-> [config.h] -.
+ +--> config.status* -+ +--> make*
+Makefile.in ---' `-> Makefile ---'
+@end group
+@end example
+
+@menu
+* Writing Autoconf Input:: What to put in an Autoconf input file
+* autoscan Invocation:: Semi-automatic @file{configure.ac} writing
+* ifnames Invocation:: Listing the conditionals in source code
+* autoconf Invocation:: How to create configuration scripts
+* autoreconf Invocation:: Remaking multiple @command{configure} scripts
+@end menu
+
+@node Writing Autoconf Input
+@section Writing @file{configure.ac}
+
+To produce a @command{configure} script for a software package, create a
+file called @file{configure.ac} that contains invocations of the
+Autoconf macros that test the system features your package needs or can
+use. Autoconf macros already exist to check for many features; see
+@ref{Existing Tests}, for their descriptions. For most other features,
+you can use Autoconf template macros to produce custom checks; see
+@ref{Writing Tests}, for information about them. For especially tricky
+or specialized features, @file{configure.ac} might need to contain some
+hand-crafted shell commands; see @ref{Portable Shell, , Portable Shell
+Programming}. The @command{autoscan} program can give you a good start
+in writing @file{configure.ac} (@pxref{autoscan Invocation}, for more
+information).
+
+Previous versions of Autoconf promoted the name @file{configure.in},
+which is somewhat ambiguous (the tool needed to process this file is not
+described by its extension), and introduces a slight confusion with
+@file{config.h.in} and so on (for which @samp{.in} means ``to be
+processed by @command{configure}''). Using @file{configure.ac} is now
+preferred.
+
+@menu
+* Shell Script Compiler:: Autoconf as solution of a problem
+* Autoconf Language:: Programming in Autoconf
+* Autoconf Input Layout:: Standard organization of @file{configure.ac}
+@end menu
+
+@node Shell Script Compiler
+@subsection A Shell Script Compiler
+
+Just as for any other computer language, in order to properly program
+@file{configure.ac} in Autoconf you must understand @emph{what} problem
+the language tries to address and @emph{how} it does so.
+
+The problem Autoconf addresses is that the world is a mess. After all,
+you are using Autoconf in order to have your package compile easily on
+all sorts of different systems, some of them being extremely hostile.
+Autoconf itself bears the price for these differences: @command{configure}
+must run on all those systems, and thus @command{configure} must limit itself
+to their lowest common denominator of features.
+
+Naturally, you might then think of shell scripts; who needs
+@command{autoconf}? A set of properly written shell functions is enough to
+make it easy to write @command{configure} scripts by hand. Sigh!
+Unfortunately, even in 2008, where shells without any function support are
+far and few between, there are pitfalls to avoid when making use of them.
+Also, finding a Bourne shell that accepts shell functions is not trivial,
+even though there is almost always one on interesting porting targets.
+
+So, what is really needed is some kind of compiler, @command{autoconf},
+that takes an Autoconf program, @file{configure.ac}, and transforms it
+into a portable shell script, @command{configure}.
+
+How does @command{autoconf} perform this task?
+
+There are two obvious possibilities: creating a brand new language or
+extending an existing one. The former option is attractive: all
+sorts of optimizations could easily be implemented in the compiler and
+many rigorous checks could be performed on the Autoconf program
+(e.g., rejecting any non-portable construct). Alternatively, you can
+extend an existing language, such as the @code{sh} (Bourne shell)
+language.
+
+Autoconf does the latter: it is a layer on top of @code{sh}. It was
+therefore most convenient to implement @command{autoconf} as a macro
+expander: a program that repeatedly performs @dfn{macro expansions} on
+text input, replacing macro calls with macro bodies and producing a pure
+@code{sh} script in the end. Instead of implementing a dedicated
+Autoconf macro expander, it is natural to use an existing
+general-purpose macro language, such as M4, and implement the extensions
+as a set of M4 macros.
+
+
+@node Autoconf Language
+@subsection The Autoconf Language
+@cindex quotation
+
+The Autoconf language differs from many other computer
+languages because it treats actual code the same as plain text. Whereas
+in C, for instance, data and instructions have different syntactic
+status, in Autoconf their status is rigorously the same. Therefore, we
+need a means to distinguish literal strings from text to be expanded:
+quotation.
+
+When calling macros that take arguments, there must not be any white
+space between the macro name and the open parenthesis.
+
+@example
+AC_INIT ([oops], [1.0]) # incorrect
+AC_INIT([hello], [1.0]) # good
+@end example
+
+Arguments should
+be enclosed within the quote characters @samp{[} and @samp{]}, and be
+separated by commas. Any leading blanks or newlines in arguments are ignored,
+unless they are quoted. You should always quote an argument that
+might contain a macro name, comma, parenthesis, or a leading blank or
+newline. This rule applies recursively for every macro
+call, including macros called from other macros. For more details on
+quoting rules, see @ref{Programming in M4}.
+
+For instance:
+
+@example
+AC_CHECK_HEADER([stdio.h],
+ [AC_DEFINE([HAVE_STDIO_H], [1],
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+@end example
+
+@noindent
+is quoted properly. You may safely simplify its quotation to:
+
+@example
+AC_CHECK_HEADER([stdio.h],
+ [AC_DEFINE([HAVE_STDIO_H], 1,
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+@end example
+
+@noindent
+because @samp{1} cannot contain a macro call. Here, the argument of
+@code{AC_MSG_ERROR} must be quoted; otherwise, its comma would be
+interpreted as an argument separator. Also, the second and third arguments
+of @samp{AC_CHECK_HEADER} must be quoted, since they contain
+macro calls. The three arguments @samp{HAVE_STDIO_H}, @samp{stdio.h},
+and @samp{Define to 1 if you have <stdio.h>.} do not need quoting, but
+if you unwisely defined a macro with a name like @samp{Define} or
+@samp{stdio} then they would need quoting. Cautious Autoconf users
+would keep the quotes, but many Autoconf users find such precautions
+annoying, and would rewrite the example as follows:
+
+@example
+AC_CHECK_HEADER(stdio.h,
+ [AC_DEFINE(HAVE_STDIO_H, 1,
+ [Define to 1 if you have <stdio.h>.])],
+ [AC_MSG_ERROR([sorry, can't do anything for you])])
+@end example
+
+@noindent
+This is safe, so long as you adopt good naming conventions and do not
+define macros with names like @samp{HAVE_STDIO_H}, @samp{stdio}, or
+@samp{h}. Though it is also safe here to omit the quotes around
+@samp{Define to 1 if you have <stdio.h>.} this is not recommended, as
+message strings are more likely to inadvertently contain commas.
+
+The following example is wrong and dangerous, as it is underquoted:
+
+@example
+AC_CHECK_HEADER(stdio.h,
+ AC_DEFINE(HAVE_STDIO_H, 1,
+ Define to 1 if you have <stdio.h>.),
+ AC_MSG_ERROR([sorry, can't do anything for you]))
+@end example
+
+In other cases, you may have to use text that also resembles a macro
+call. You must quote that text even when it is not passed as a macro
+argument. For example, these two approaches in @file{configure.ac}
+(quoting just the potential problems, or quoting the entire line) will
+protect your script in case autoconf ever adds a macro @code{AC_DC}:
+
+@example
+echo "Hard rock was here! --[AC_DC]"
+[echo "Hard rock was here! --AC_DC"]
+@end example
+
+@noindent
+which results in this text in @file{configure}:
+
+@example
+echo "Hard rock was here! --AC_DC"
+echo "Hard rock was here! --AC_DC"
+@end example
+
+@noindent
+When you use the same text in a macro argument, you must therefore have
+an extra quotation level (since one is stripped away by the macro
+substitution). In general, then, it is a good idea to @emph{use double
+quoting for all literal string arguments}, either around just the
+problematic portions, or over the entire argument:
+
+@example
+AC_MSG_WARN([[AC_DC] stinks --Iron Maiden])
+AC_MSG_WARN([[AC_DC stinks --Iron Maiden]])
+@end example
+
+However, the above example triggers a warning about a possibly
+unexpanded macro when running @command{autoconf}, because it collides
+with the namespace of macros reserved for the Autoconf language. To be
+really safe, you can use additional escaping (either a quadrigraph, or
+creative shell constructs) to silence that particular warning:
+
+@example
+echo "Hard rock was here! --AC""_DC"
+AC_MSG_WARN([[AC@@&t@@_DC stinks --Iron Maiden]])
+@end example
+
+You are now able to understand one of the constructs of Autoconf that
+has been continually misunderstood@enddots{} The rule of thumb is that
+@emph{whenever you expect macro expansion, expect quote expansion};
+i.e., expect one level of quotes to be lost. For instance:
+
+@example
+AC_COMPILE_IFELSE(AC_LANG_SOURCE([char b[10];]), [],
+ [AC_MSG_ERROR([you lose])])
+@end example
+
+@noindent
+is incorrect: here, the first argument of @code{AC_LANG_SOURCE} is
+@samp{char b[10];} and is expanded once, which results in
+@samp{char b10;}; and the @code{AC_LANG_SOURCE} is also expanded prior
+to being passed to @code{AC_COMPILE_IFELSE}. (There was an idiom common
+in Autoconf's past to
+address this issue via the M4 @code{changequote} primitive, but do not
+use it!) Let's take a closer look: the author meant the first argument
+to be understood as a literal, and therefore it must be quoted twice;
+likewise, the intermediate @code{AC_LANG_SOURCE} macro should be quoted
+once so that it is only expanded after the rest of the body of
+@code{AC_COMPILE_IFELSE} is in place:
+
+@example
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char b[10];]])], [],
+ [AC_MSG_ERROR([you lose])])
+@end example
+
+@noindent
+Voil@`a, you actually produce @samp{char b[10];} this time!
+
+On the other hand, descriptions (e.g., the last parameter of
+@code{AC_DEFINE} or @code{AS_HELP_STRING}) are not literals---they
+are subject to line breaking, for example---and should not be double quoted.
+Even if these descriptions are short and are not actually broken, double
+quoting them yields weird results.
+
+Some macros take optional arguments, which this documentation represents
+as @ovar{arg} (not to be confused with the quote characters). You may
+just leave them empty, or use @samp{[]} to make the emptiness of the
+argument explicit, or you may simply omit the trailing commas. The
+three lines below are equivalent:
+
+@example
+AC_CHECK_HEADERS([stdio.h], [], [], [])
+AC_CHECK_HEADERS([stdio.h],,,)
+AC_CHECK_HEADERS([stdio.h])
+@end example
+
+It is best to put each macro call on its own line in
+@file{configure.ac}. Most of the macros don't add extra newlines; they
+rely on the newline after the macro call to terminate the commands.
+This approach makes the generated @command{configure} script a little
+easier to read by not inserting lots of blank lines. It is generally
+safe to set shell variables on the same line as a macro call, because
+the shell allows assignments without intervening newlines.
+
+You can include comments in @file{configure.ac} files by starting them
+with the @samp{#}. For example, it is helpful to begin
+@file{configure.ac} files with a line like this:
+
+@example
+# Process this file with autoconf to produce a configure script.
+@end example
+
+@node Autoconf Input Layout
+@subsection Standard @file{configure.ac} Layout
+
+The order in which @file{configure.ac} calls the Autoconf macros is not
+important, with a few exceptions. Every @file{configure.ac} must
+contain a call to @code{AC_INIT} before the checks, and a call to
+@code{AC_OUTPUT} at the end (@pxref{Output}). Additionally, some macros
+rely on other macros having been called first, because they check
+previously set values of some variables to decide what to do. These
+macros are noted in the individual descriptions (@pxref{Existing
+Tests}), and they also warn you when @command{configure} is created if they
+are called out of order.
+
+To encourage consistency, here is a suggested order for calling the
+Autoconf macros. Generally speaking, the things near the end of this
+list are those that could depend on things earlier in it. For example,
+library functions could be affected by types and libraries.
+
+@display
+@group
+Autoconf requirements
+@code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
+information on the package
+checks for programs
+checks for libraries
+checks for header files
+checks for types
+checks for structures
+checks for compiler characteristics
+checks for library functions
+checks for system services
+@code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
+@code{AC_OUTPUT}
+@end group
+@end display
+
+
+@node autoscan Invocation
+@section Using @command{autoscan} to Create @file{configure.ac}
+@cindex @command{autoscan}
+
+The @command{autoscan} program can help you create and/or maintain a
+@file{configure.ac} file for a software package. @command{autoscan}
+examines source files in the directory tree rooted at a directory given
+as a command line argument, or the current directory if none is given.
+It searches the source files for common portability problems and creates
+a file @file{configure.scan} which is a preliminary @file{configure.ac}
+for that package, and checks a possibly existing @file{configure.ac} for
+completeness.
+
+When using @command{autoscan} to create a @file{configure.ac}, you
+should manually examine @file{configure.scan} before renaming it to
+@file{configure.ac}; it probably needs some adjustments.
+Occasionally, @command{autoscan} outputs a macro in the wrong order
+relative to another macro, so that @command{autoconf} produces a warning;
+you need to move such macros manually. Also, if you want the package to
+use a configuration header file, you must add a call to
+@code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers}). You might
+also have to change or add some @code{#if} directives to your program in
+order to make it work with Autoconf (@pxref{ifnames Invocation}, for
+information about a program that can help with that job).
+
+When using @command{autoscan} to maintain a @file{configure.ac}, simply
+consider adding its suggestions. The file @file{autoscan.log}
+contains detailed information on why a macro is requested.
+
+@command{autoscan} uses several data files (installed along with Autoconf)
+to determine which macros to output when it finds particular symbols in
+a package's source files. These data files all have the same format:
+each line consists of a symbol, one or more blanks, and the Autoconf macro to
+output if that symbol is encountered. Lines starting with @samp{#} are
+comments.
+
+@command{autoscan} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Print the names of the files it examines and the potentially interesting
+symbols it finds in them. This output can be voluminous.
+
+@item --debug
+@itemx -d
+Don't remove temporary files.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Append @var{dir} to the include path. Multiple invocations accumulate.
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend @var{dir} to the include path. Multiple invocations accumulate.
+@end table
+
+@node ifnames Invocation
+@section Using @command{ifnames} to List Conditionals
+@cindex @command{ifnames}
+
+@command{ifnames} can help you write @file{configure.ac} for a software
+package. It prints the identifiers that the package already uses in C
+preprocessor conditionals. If a package has already been set up to have
+some portability, @command{ifnames} can thus help you figure out what its
+@command{configure} needs to check for. It may help fill in some gaps in a
+@file{configure.ac} generated by @command{autoscan} (@pxref{autoscan
+Invocation}).
+
+@command{ifnames} scans all of the C source files named on the command line
+(or the standard input, if none are given) and writes to the standard
+output a sorted list of all the identifiers that appear in those files
+in @code{#if}, @code{#elif}, @code{#ifdef}, or @code{#ifndef}
+directives. It prints each identifier on a line, followed by a
+space-separated list of the files in which that identifier occurs.
+
+@noindent
+@command{ifnames} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+@end table
+
+@node autoconf Invocation
+@section Using @command{autoconf} to Create @command{configure}
+@cindex @command{autoconf}
+
+To create @command{configure} from @file{configure.ac}, run the
+@command{autoconf} program with no arguments. @command{autoconf} processes
+@file{configure.ac} with the M4 macro processor, using the
+Autoconf macros. If you give @command{autoconf} an argument, it reads that
+file instead of @file{configure.ac} and writes the configuration script
+to the standard output instead of to @command{configure}. If you give
+@command{autoconf} the argument @option{-}, it reads from the standard
+input instead of @file{configure.ac} and writes the configuration script
+to the standard output.
+
+The Autoconf macros are defined in several files. Some of the files are
+distributed with Autoconf; @command{autoconf} reads them first. Then it
+looks for the optional file @file{acsite.m4} in the directory that
+contains the distributed Autoconf macro files, and for the optional file
+@file{aclocal.m4} in the current directory. Those files can contain
+your site's or the package's own Autoconf macro definitions
+(@pxref{Writing Autoconf Macros}, for more information). If a macro is
+defined in more than one of the files that @command{autoconf} reads, the
+last definition it reads overrides the earlier ones.
+
+@command{autoconf} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Report processing steps.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files.
+
+@item --force
+@itemx -f
+Remake @file{configure} even if newer than its input files.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Append @var{dir} to the include path. Multiple invocations accumulate.
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend @var{dir} to the include path. Multiple invocations accumulate.
+
+@item --output=@var{file}
+@itemx -o @var{file}
+Save output (script or trace) to @var{file}. The file @option{-} stands
+for the standard output.
+
+@item --warnings=@var{category}
+@itemx -W @var{category}
+@evindex WARNINGS
+Report the warnings related to @var{category} (which can actually be a
+comma separated list). @xref{Reporting Messages}, macro
+@code{AC_DIAGNOSE}, for a comprehensive list of categories. Special
+values include:
+
+@table @samp
+@item all
+report all the warnings
+
+@item none
+report none
+
+@item error
+treats warnings as errors
+
+@item no-@var{category}
+disable warnings falling into @var{category}
+@end table
+
+Warnings about @samp{syntax} are enabled by default, and the environment
+variable @env{WARNINGS}, a comma separated list of categories, is
+honored as well. Passing @option{-W @var{category}} actually behaves as if
+you had passed @option{--warnings syntax,$WARNINGS,@var{category}}. To
+disable the defaults and @env{WARNINGS}, and then
+enable warnings about obsolete constructs, use @option{-W
+none,obsolete}.
+
+@cindex Back trace
+@cindex Macro invocation stack
+Because @command{autoconf} uses @command{autom4te} behind the scenes, it
+displays a back trace for errors, but not for warnings; if you want
+them, just pass @option{-W error}. @xref{autom4te Invocation}, for some
+examples.
+
+@item --trace=@var{macro}[:@var{format}]
+@itemx -t @var{macro}[:@var{format}]
+Do not create the @command{configure} script, but list the calls to
+@var{macro} according to the @var{format}. Multiple @option{--trace}
+arguments can be used to list several macros. Multiple @option{--trace}
+arguments for a single macro are not cumulative; instead, you should
+just make @var{format} as long as needed.
+
+The @var{format} is a regular string, with newlines if desired, and
+several special escape codes. It defaults to @samp{$f:$l:$n:$%}; see
+@ref{autom4te Invocation}, for details on the @var{format}.
+
+@item --initialization
+@itemx -i
+By default, @option{--trace} does not trace the initialization of the
+Autoconf macros (typically the @code{AC_DEFUN} definitions). This
+results in a noticeable speedup, but can be disabled by this option.
+@end table
+
+
+It is often necessary to check the content of a @file{configure.ac}
+file, but parsing it yourself is extremely fragile and error-prone. It
+is suggested that you rely upon @option{--trace} to scan
+@file{configure.ac}. For instance, to find the list of variables that
+are substituted, use:
+
+@example
+@group
+$ @kbd{autoconf -t AC_SUBST}
+configure.ac:2:AC_SUBST:ECHO_C
+configure.ac:2:AC_SUBST:ECHO_N
+configure.ac:2:AC_SUBST:ECHO_T
+@i{More traces deleted}
+@end group
+@end example
+
+@noindent
+The example below highlights the difference between @samp{$@@},
+@samp{$*}, and @samp{$%}.
+
+@example
+@group
+$ @kbd{cat configure.ac}
+AC_DEFINE(This, is, [an
+[example]])
+$ @kbd{autoconf -t 'AC_DEFINE:@@: $@@}
+*: $*
+%: $%'
+@@: [This],[is],[an
+[example]]
+*: This,is,an
+[example]
+%: This:is:an [example]
+@end group
+@end example
+
+@noindent
+The @var{format} gives you a lot of freedom:
+
+@example
+@group
+$ @kbd{autoconf -t 'AC_SUBST:$$ac_subst@{"$1"@} = "$f:$l";'}
+$ac_subst@{"ECHO_C"@} = "configure.ac:2";
+$ac_subst@{"ECHO_N"@} = "configure.ac:2";
+$ac_subst@{"ECHO_T"@} = "configure.ac:2";
+@i{More traces deleted}
+@end group
+@end example
+
+@noindent
+A long @var{separator} can be used to improve the readability of complex
+structures, and to ease their parsing (for instance when no single
+character is suitable as a separator):
+
+@example
+@group
+$ @kbd{autoconf -t 'AM_MISSING_PROG:$@{|:::::|@}*'}
+ACLOCAL|:::::|aclocal|:::::|$missing_dir
+AUTOCONF|:::::|autoconf|:::::|$missing_dir
+AUTOMAKE|:::::|automake|:::::|$missing_dir
+@i{More traces deleted}
+@end group
+@end example
+
+@node autoreconf Invocation
+@section Using @command{autoreconf} to Update @command{configure} Scripts
+@cindex @command{autoreconf}
+
+Installing the various components of the GNU Build System can be
+tedious: running @command{autopoint} for Gettext, @command{automake} for
+@file{Makefile.in} etc.@: in each directory. It may be needed either
+because some tools such as @command{automake} have been updated on your
+system, or because some of the sources such as @file{configure.ac} have
+been updated, or finally, simply in order to install the GNU Build
+System in a fresh tree.
+
+@command{autoreconf} runs @command{autoconf}, @command{autoheader},
+@command{aclocal}, @command{automake}, @command{libtoolize}, and
+@command{autopoint} (when appropriate) repeatedly to update the
+GNU Build System in the specified directories and their
+subdirectories (@pxref{Subdirectories}). By default, it only remakes
+those files that are older than their sources. The environment variables
+@env{AUTOM4TE}, @env{AUTOCONF}, @env{AUTOHEADER}, @env{AUTOMAKE},
+@env{ACLOCAL}, @env{AUTOPOINT}, @env{LIBTOOLIZE}, @env{M4}, and @env{MAKE}
+may be used to override the invocation of the respective tools.
+
+If you install a new version of some tool, you can make
+@command{autoreconf} remake @emph{all} of the files by giving it the
+@option{--force} option.
+
+@xref{Automatic Remaking}, for Make rules to automatically
+rebuild @command{configure} scripts when their source files change. That
+method handles the timestamps of configuration header templates
+properly, but does not pass @option{--autoconf-dir=@var{dir}} or
+@option{--localdir=@var{dir}}.
+
+@cindex Gettext
+@cindex @command{autopoint}
+Gettext supplies the @command{autopoint} command to add translation
+infrastructure to a source package. If you use @command{autopoint},
+your @file{configure.ac} should invoke both @code{AM_GNU_GETTEXT} and
+@code{AM_GNU_GETTEXT_VERSION(@var{gettext-version})}. @xref{autopoint
+Invocation, , Invoking the @code{autopoint} Program, gettext,
+GNU @code{gettext} utilities}, for further details.
+
+@noindent
+@command{autoreconf} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Print the name of each directory @command{autoreconf} examines and the
+commands it runs. If given two or more times, pass @option{--verbose}
+to subordinate tools that support it.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files.
+
+@item --force
+@itemx -f
+Remake even @file{configure} scripts and configuration headers that are
+newer than their input files (@file{configure.ac} and, if present,
+@file{aclocal.m4}).
+
+@item --install
+@itemx -i
+Install the missing auxiliary files in the package. By default, files
+are copied; this can be changed with @option{--symlink}.
+
+If deemed appropriate, this option triggers calls to
+@samp{automake --add-missing},
+@samp{libtoolize}, @samp{autopoint}, etc.
+
+@item --no-recursive
+Do not rebuild files in subdirectories to configure (see @ref{Subdirectories},
+macro @code{AC_CONFIG_SUBDIRS}).
+
+@item --symlink
+@itemx -s
+When used with @option{--install}, install symbolic links to the missing
+auxiliary files instead of copying them.
+
+@item --make
+@itemx -m
+When the directories were configured, update the configuration by
+running @samp{./config.status --recheck && ./config.status}, and then
+run @samp{make}.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Append @var{dir} to the include path. Multiple invocations accumulate.
+Passed on to @command{aclocal}, @command{autoconf} and
+@command{autoheader} internally.
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend @var{dir} to the include path. Multiple invocations accumulate.
+Passed on to @command{autoconf} and @command{autoheader} internally.
+
+@item --warnings=@var{category}
+@itemx -W @var{category}
+@evindex WARNINGS
+Report the warnings related to @var{category} (which can actually be a
+comma separated list).
+
+@table @samp
+@item cross
+related to cross compilation issues.
+
+@item obsolete
+report the uses of obsolete constructs.
+
+@item portability
+portability issues
+
+@item syntax
+dubious syntactic constructs.
+
+@item all
+report all the warnings
+
+@item none
+report none
+
+@item error
+treats warnings as errors
+
+@item no-@var{category}
+disable warnings falling into @var{category}
+@end table
+
+Warnings about @samp{syntax} are enabled by default, and the environment
+variable @env{WARNINGS}, a comma separated list of categories, is
+honored as well. Passing @option{-W @var{category}} actually behaves as if
+you had passed @option{--warnings syntax,$WARNINGS,@var{category}}. To
+disable the defaults and @env{WARNINGS}, and then
+enable warnings about obsolete constructs, use @option{-W
+none,obsolete}.
+@end table
+
+If you want @command{autoreconf} to pass flags that are not listed here
+on to @command{aclocal}, set @code{ACLOCAL_AMFLAGS} in your @file{Makefile.am}.
+Due to a limitation in the Autoconf implementation these flags currently
+must be set on a single line in @file{Makefile.am}, without any
+backslash-newlines.
+
+@c ========================================= Initialization and Output Files.
+
+@node Setup
+@chapter Initialization and Output Files
+
+Autoconf-generated @command{configure} scripts need some information about
+how to initialize, such as how to find the package's source files and
+about the output files to produce. The following sections describe the
+initialization and the creation of output files.
+
+@menu
+* Initializing configure:: Option processing etc.
+* Versioning:: Dealing with Autoconf versions
+* Notices:: Copyright, version numbers in @command{configure}
+* Input:: Where Autoconf should find files
+* Output:: Outputting results from the configuration
+* Configuration Actions:: Preparing the output based on results
+* Configuration Files:: Creating output files
+* Makefile Substitutions:: Using output variables in makefiles
+* Configuration Headers:: Creating a configuration header file
+* Configuration Commands:: Running arbitrary instantiation commands
+* Configuration Links:: Links depending on the configuration
+* Subdirectories:: Configuring independent packages together
+* Default Prefix:: Changing the default installation prefix
+@end menu
+
+@node Initializing configure
+@section Initializing @command{configure}
+
+Every @command{configure} script must call @code{AC_INIT} before doing
+anything else that produces output. Calls to silent macros, such as
+@code{AC_DEFUN}, may also occur prior to @code{AC_INIT}, although these
+are generally used via @file{aclocal.m4}, since that is implicitly
+included before the start of @file{configure.ac}. The only other
+required macro is @code{AC_OUTPUT} (@pxref{Output}).
+
+@anchor{AC_INIT}
+@defmac AC_INIT (@var{package}, @var{version}, @ovar{bug-report}, @
+ @ovar{tarname}, @ovar{url})
+@acindex{INIT}
+Process any command-line arguments and perform initialization
+and verification.
+
+Set the name of the @var{package} and its @var{version}. These are
+typically used in @option{--version} support, including that of
+@command{configure}. The optional argument @var{bug-report} should be
+the email to which users should send bug reports. The package
+@var{tarname} differs from @var{package}: the latter designates the full
+package name (e.g., @samp{GNU Autoconf}), while the former is meant for
+distribution tar ball names (e.g., @samp{autoconf}). It defaults to
+@var{package} with @samp{GNU } stripped, lower-cased, and all characters
+other than alphanumerics and underscores are changed to @samp{-}. If
+provided, @var{url} should be the home page for the package.
+
+The arguments of @code{AC_INIT} must be static, i.e., there should not
+be any shell computation, quotes, or newlines, but they can be computed
+by M4. This is because the package information strings are expanded at
+M4 time into several contexts, and must give the same text at shell time
+whether used in single-quoted strings, double-quoted strings, quoted
+here-documents, or unquoted here-documents. It is permissible to use
+@code{m4_esyscmd} or @code{m4_esyscmd_s} for computing a version string
+that changes with every commit to a version control system (in fact,
+Autoconf does just that, for all builds of the development tree made
+between releases).
+
+The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables
+(e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
+@code{PACKAGE_NAME}), are defined by @code{AC_INIT}:
+
+@table @asis
+@item @code{AC_PACKAGE_NAME}, @code{PACKAGE_NAME}
+@acindex{PACKAGE_NAME}
+@ovindex PACKAGE_NAME
+@cvindex PACKAGE_NAME
+Exactly @var{package}.
+
+@item @code{AC_PACKAGE_TARNAME}, @code{PACKAGE_TARNAME}
+@acindex{PACKAGE_TARNAME}
+@ovindex PACKAGE_TARNAME
+@cvindex PACKAGE_TARNAME
+Exactly @var{tarname}, possibly generated from @var{package}.
+
+@item @code{AC_PACKAGE_VERSION}, @code{PACKAGE_VERSION}
+@acindex{PACKAGE_VERSION}
+@ovindex PACKAGE_VERSION
+@cvindex PACKAGE_VERSION
+Exactly @var{version}.
+
+@item @code{AC_PACKAGE_STRING}, @code{PACKAGE_STRING}
+@acindex{PACKAGE_STRING}
+@ovindex PACKAGE_STRING
+@cvindex PACKAGE_STRING
+Exactly @samp{@var{package} @var{version}}.
+
+@item @code{AC_PACKAGE_BUGREPORT}, @code{PACKAGE_BUGREPORT}
+@acindex{PACKAGE_BUGREPORT}
+@ovindex PACKAGE_BUGREPORT
+@cvindex PACKAGE_BUGREPORT
+Exactly @var{bug-report}, if one was provided. Typically an email
+address, or URL to a bug management web page.
+
+@item @code{AC_PACKAGE_URL}, @code{PACKAGE_URL}
+@acindex{PACKAGE_URL}
+@ovindex PACKAGE_URL
+@cvindex PACKAGE_URL
+Exactly @var{url}, if one was provided. If @var{url} was empty, but
+@var{package} begins with @samp{GNU }, then this defaults to
+@samp{http://@/www.gnu.org/@/software/@/@var{tarname}/}, otherwise, no URL is
+assumed.
+@end table
+@end defmac
+
+If your @command{configure} script does its own option processing, it
+should inspect @samp{$@@} or @samp{$*} immediately after calling
+@code{AC_INIT}, because other Autoconf macros liberally use the
+@command{set} command to process strings, and this has the side effect
+of updating @samp{$@@} and @samp{$*}. However, we suggest that you use
+standard macros like @code{AC_ARG_ENABLE} instead of attempting to
+implement your own option processing. @xref{Site Configuration}.
+
+@node Versioning
+@section Dealing with Autoconf versions
+@cindex Autoconf version
+@cindex version, Autoconf
+
+The following optional macros can be used to help choose the minimum
+version of Autoconf that can successfully compile a given
+@file{configure.ac}.
+
+@defmac AC_PREREQ (@var{version})
+@acindex{PREREQ}
+@cindex Version
+Ensure that a recent enough version of Autoconf is being used. If the
+version of Autoconf being used to create @command{configure} is
+earlier than @var{version}, print an error message to the standard
+error output and exit with failure (exit status is 63). For example:
+
+@example
+AC_PREREQ([@value{VERSION}])
+@end example
+
+This macro may be used before @code{AC_INIT}.
+@end defmac
+
+@defmac AC_AUTOCONF_VERSION
+@acindex{AUTOCONF_VERSION}
+This macro was introduced in Autoconf 2.62. It identifies the version
+of Autoconf that is currently parsing the input file, in a format
+suitable for @code{m4_version_compare} (@pxref{m4_version_compare}); in
+other words, for this release of Autoconf, its value is
+@samp{@value{VERSION}}. One potential use of this macro is for writing
+conditional fallbacks based on when a feature was added to Autoconf,
+rather than using @code{AC_PREREQ} to require the newer version of
+Autoconf. However, remember that the Autoconf philosophy favors feature
+checks over version checks.
+
+You should not expand this macro directly; use
+@samp{m4_defn([AC_AUTOCONF_VERSION])} instead. This is because some
+users might
+have a beta version of Autoconf installed, with arbitrary letters
+included in its version string. This means it is possible for the
+version string to contain the name of a defined macro, such that
+expanding @code{AC_AUTOCONF_VERSION} would trigger the expansion of that
+macro during rescanning, and change the version string to be different
+than what you intended to check.
+@end defmac
+
+@node Notices
+@section Notices in @command{configure}
+@cindex Notices in @command{configure}
+
+The following macros manage version numbers for @command{configure}
+scripts. Using them is optional.
+
+@defmac AC_COPYRIGHT (@var{copyright-notice})
+@acindex{COPYRIGHT}
+@cindex Copyright Notice
+State that, in addition to the Free Software Foundation's copyright on
+the Autoconf macros, parts of your @command{configure} are covered by the
+@var{copyright-notice}.
+
+The @var{copyright-notice} shows up in both the head of
+@command{configure} and in @samp{configure --version}.
+@end defmac
+
+
+@defmac AC_REVISION (@var{revision-info})
+@acindex{REVISION}
+@cindex Revision
+Copy revision stamp @var{revision-info} into the @command{configure}
+script, with any dollar signs or double-quotes removed. This macro lets
+you put a revision stamp from @file{configure.ac} into @command{configure}
+without RCS or CVS changing it when you check in
+@command{configure}. That way, you can determine easily which revision of
+@file{configure.ac} a particular @command{configure} corresponds to.
+
+For example, this line in @file{configure.ac}:
+
+@c The @w prevents RCS from changing the example in the manual.
+@example
+AC_REVISION([@w{$}Revision: 1.30 $])
+@end example
+
+@noindent
+produces this in @command{configure}:
+
+@example
+#!/bin/sh
+# From configure.ac Revision: 1.30
+@end example
+@end defmac
+
+
+@node Input
+@section Finding @command{configure} Input
+
+@anchor{AC_CONFIG_SRCDIR}
+@defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
+@acindex{CONFIG_SRCDIR}
+@var{unique-file-in-source-dir} is some file that is in the package's
+source directory; @command{configure} checks for this file's existence to
+make sure that the directory that it is told contains the source code in
+fact does. Occasionally people accidentally specify the wrong directory
+with @option{--srcdir}; this is a safety check. @xref{configure
+Invocation}, for more information.
+@end defmac
+
+
+@c FIXME: Remove definitively once --install explained.
+@c
+@c Small packages may store all their macros in @code{aclocal.m4}. As the
+@c set of macros grows, or for maintenance reasons, a maintainer may prefer
+@c to split the macros in several files. In this case, Autoconf must be
+@c told which files to load, and in which order.
+@c
+@c @defmac AC_INCLUDE (@var{file}@dots{})
+@c @acindex{INCLUDE}
+@c @c FIXME: There is no longer shell globbing.
+@c Read the macro definitions that appear in the listed files. A list of
+@c space-separated file names or shell globbing patterns is expected. The
+@c files are read in the order they're listed.
+@c
+@c Because the order of definition of macros is important (only the last
+@c definition of a macro is used), beware that it is @code{AC_INIT} that
+@c loads @file{acsite.m4} and @file{aclocal.m4}. Note that
+@c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
+@c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
+@c the latter case, non-macro lines from included files may end up in the
+@c @file{configure} script, whereas in the former case, they'd be discarded
+@c just like any text that appear before @code{AC_INIT}.
+@c @end defmac
+
+Packages that do manual configuration or use the @command{install} program
+might need to tell @command{configure} where to find some other shell
+scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
+it looks are correct for most cases.
+
+@defmac AC_CONFIG_AUX_DIR (@var{dir})
+@acindex{CONFIG_AUX_DIR}
+Use the auxiliary build tools (e.g., @file{install-sh},
+@file{config.sub}, @file{config.guess}, Cygnus @command{configure},
+Automake and Libtool scripts, etc.)@: that are in directory @var{dir}.
+These are auxiliary files used in configuration. @var{dir} can be
+either absolute or relative to @file{@var{srcdir}}. The default is
+@file{@var{srcdir}} or @file{@var{srcdir}/..} or
+@file{@var{srcdir}/../..}, whichever is the first that contains
+@file{install-sh}. The other files are not checked for, so that using
+@code{AC_PROG_INSTALL} does not automatically require distributing the
+other auxiliary files. It checks for @file{install.sh} also, but that
+name is obsolete because some @command{make} have a rule that creates
+@file{install} from it if there is no makefile.
+
+The auxiliary directory is commonly named @file{build-aux}.
+If you need portability to DOS variants, do not name the
+auxiliary directory @file{aux}. @xref{File System Conventions}.
+@end defmac
+
+@defmac AC_REQUIRE_AUX_FILE (@var{file})
+@acindex{REQUIRE_AUX_FILE}
+Declares that @var{file} is expected in the directory defined above. In
+Autoconf proper, this macro does nothing: its sole purpose is to be
+traced by third-party tools to produce a list of expected auxiliary
+files. For instance it is called by macros like @code{AC_PROG_INSTALL}
+(@pxref{Particular Programs}) or @code{AC_CANONICAL_BUILD}
+(@pxref{Canonicalizing}) to register the auxiliary files they need.
+@end defmac
+
+Similarly, packages that use @command{aclocal} should declare where
+local macros can be found using @code{AC_CONFIG_MACRO_DIR}.
+
+@defmac AC_CONFIG_MACRO_DIR (@var{dir})
+@acindex{CONFIG_MACRO_DIR}
+Specify @var{dir} as the location of additional local Autoconf macros.
+This macro is intended for use by future versions of commands like
+@command{autoreconf} that trace macro calls. It should be called
+directly from @file{configure.ac} so that tools that install macros for
+@command{aclocal} can find the macros' declarations.
+
+Note that if you use @command{aclocal} from Automake to generate
+@file{aclocal.m4}, you must also set @code{ACLOCAL_AMFLAGS = -I
+@var{dir}} in your top-level @file{Makefile.am}. Due to a limitation in
+the Autoconf implementation of @command{autoreconf}, these include
+directives currently must be set on a single line in @file{Makefile.am},
+without any backslash-newlines.
+@end defmac
+
+
+@node Output
+@section Outputting Files
+@cindex Outputting files
+
+Every Autoconf script, e.g., @file{configure.ac}, should finish by
+calling @code{AC_OUTPUT}. That is the macro that generates and runs
+@file{config.status}, which in turn creates the makefiles and any
+other files resulting from configuration. This is the only required
+macro besides @code{AC_INIT} (@pxref{Input}).
+
+@anchor{AC_OUTPUT}
+@defmac AC_OUTPUT
+@acindex{OUTPUT}
+@cindex Instantiation
+Generate @file{config.status} and launch it. Call this macro once, at
+the end of @file{configure.ac}.
+
+@file{config.status} performs all the configuration actions: all the
+output files (see @ref{Configuration Files}, macro
+@code{AC_CONFIG_FILES}), header files (see @ref{Configuration Headers},
+macro @code{AC_CONFIG_HEADERS}), commands (see @ref{Configuration
+Commands}, macro @code{AC_CONFIG_COMMANDS}), links (see
+@ref{Configuration Links}, macro @code{AC_CONFIG_LINKS}), subdirectories
+to configure (see @ref{Subdirectories}, macro @code{AC_CONFIG_SUBDIRS})
+are honored.
+
+The location of your @code{AC_OUTPUT} invocation is the exact point
+where configuration actions are taken: any code afterwards is
+executed by @command{configure} once @command{config.status} was run. If
+you want to bind actions to @command{config.status} itself
+(independently of whether @command{configure} is being run), see
+@ref{Configuration Commands, , Running Arbitrary Configuration
+Commands}.
+@end defmac
+
+Historically, the usage of @code{AC_OUTPUT} was somewhat different.
+@xref{Obsolete Macros}, for a description of the arguments that
+@code{AC_OUTPUT} used to support.
+
+
+If you run @command{make} in subdirectories, you should run it using the
+@command{make} variable @code{MAKE}. Most versions of @command{make} set
+@code{MAKE} to the name of the @command{make} program plus any options it
+was given. (But many do not include in it the values of any variables
+set on the command line, so those are not passed on automatically.)
+Some old versions of @command{make} do not set this variable. The
+following macro allows you to use it even with those versions.
+
+@anchor{AC_PROG_MAKE_SET}
+@defmac AC_PROG_MAKE_SET
+@acindex{PROG_MAKE_SET}
+@ovindex SET_MAKE
+If the Make command, @code{$MAKE} if set or else @samp{make}, predefines
+@code{$(MAKE)}, define output variable @code{SET_MAKE} to be empty.
+Otherwise, define @code{SET_MAKE} to a macro definition that sets
+@code{$(MAKE)}, such as @samp{MAKE=make}. Calls @code{AC_SUBST} for
+@code{SET_MAKE}.
+@end defmac
+
+If you use this macro, place a line like this in each @file{Makefile.in}
+that runs @command{MAKE} on other directories:
+
+@example
+@@SET_MAKE@@
+@end example
+
+
+
+@node Configuration Actions
+@section Performing Configuration Actions
+@cindex Configuration actions
+
+@file{configure} is designed so that it appears to do everything itself,
+but there is actually a hidden slave: @file{config.status}.
+@file{configure} is in charge of examining your system, but it is
+@file{config.status} that actually takes the proper actions based on the
+results of @file{configure}. The most typical task of
+@file{config.status} is to @emph{instantiate} files.
+
+@acindex{CONFIG_@var{ITEMS}}
+This section describes the common behavior of the four standard
+instantiating macros: @code{AC_CONFIG_FILES}, @code{AC_CONFIG_HEADERS},
+@code{AC_CONFIG_COMMANDS} and @code{AC_CONFIG_LINKS}. They all
+have this prototype:
+
+@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
+@c awful.
+@example
+AC_CONFIG_@var{ITEMS}(@var{tag}@dots{}, @r{[}@var{commands}@r{]}, @r{[}@var{init-cmds}@r{]})
+@end example
+
+@noindent
+where the arguments are:
+
+@table @var
+@item tag@dots{}
+A blank-or-newline-separated list of tags, which are typically the names of
+the files to instantiate.
+
+You are encouraged to use literals as @var{tags}. In particular, you
+should avoid
+
+@example
+@dots{} && my_foos="$my_foos fooo"
+@dots{} && my_foos="$my_foos foooo"
+AC_CONFIG_@var{ITEMS}([$my_foos])
+@end example
+
+@noindent
+and use this instead:
+
+@example
+@dots{} && AC_CONFIG_@var{ITEMS}([fooo])
+@dots{} && AC_CONFIG_@var{ITEMS}([foooo])
+@end example
+
+The macros @code{AC_CONFIG_FILES} and @code{AC_CONFIG_HEADERS} use
+special @var{tag} values: they may have the form @samp{@var{output}} or
+@samp{@var{output}:@var{inputs}}. The file @var{output} is instantiated
+from its templates, @var{inputs} (defaulting to @samp{@var{output}.in}).
+
+@samp{AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk])},
+for example, asks for
+the creation of the file @file{Makefile} that contains the expansion of the
+output variables in the concatenation of @file{boiler/top.mk} and
+@file{boiler/bot.mk}.
+
+The special value @samp{-} might be used to denote the standard output
+when used in @var{output}, or the standard input when used in the
+@var{inputs}. You most probably don't need to use this in
+@file{configure.ac}, but it is convenient when using the command line
+interface of @file{./config.status}, see @ref{config.status Invocation},
+for more details.
+
+The @var{inputs} may be absolute or relative file names. In the latter
+case they are first looked for in the build tree, and then in the source
+tree. Input files should be text files, and a line length below 2000
+bytes should be safe.
+
+@item commands
+Shell commands output literally into @file{config.status}, and
+associated with a tag that the user can use to tell @file{config.status}
+which commands to run. The commands are run each time a @var{tag}
+request is given to @file{config.status}, typically each time the file
+@file{@var{tag}} is created.
+
+The variables set during the execution of @command{configure} are
+@emph{not} available here: you first need to set them via the
+@var{init-cmds}. Nonetheless the following variables are precomputed:
+
+@table @code
+@item srcdir
+@vrindex srcdir
+The name of the top source directory, assuming that the working
+directory is the top build directory. This
+is what the @command{configure} option @option{--srcdir} sets.
+
+@item ac_top_srcdir
+@vrindex ac_top_srcdir
+The name of the top source directory, assuming that the working
+directory is the current build directory.
+
+@item ac_top_build_prefix
+@vrindex ac_top_build_prefix
+The name of the top build directory, assuming that the working
+directory is the current build directory.
+It can be empty, or else ends with a slash, so that you may concatenate
+it.
+
+@item ac_srcdir
+@vrindex ac_srcdir
+The name of the corresponding source directory, assuming that the
+working directory is the current build directory.
+
+@item tmp
+@vrindex tmp
+The name of a temporary directory within the build tree, which you
+can use if you need to create additional temporary files. The
+directory is cleaned up when @command{config.status} is done or
+interrupted. Please use package-specific file name prefixes to
+avoid clashing with files that @command{config.status} may use
+internally.
+@end table
+
+@noindent
+The @dfn{current} directory refers to the directory (or
+pseudo-directory) containing the input part of @var{tags}. For
+instance, running
+
+@example
+AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [@dots{}], [@dots{}])
+@end example
+
+@noindent
+ with @option{--srcdir=../package} produces the following values:
+
+@example
+# Argument of --srcdir
+srcdir='../package'
+# Reversing deep/dir
+ac_top_build_prefix='../../'
+# Concatenation of $ac_top_build_prefix and srcdir
+ac_top_srcdir='../../../package'
+# Concatenation of $ac_top_srcdir and deep/dir
+ac_srcdir='../../../package/deep/dir'
+@end example
+
+@noindent
+independently of @samp{in/in.in}.
+
+@item init-cmds
+Shell commands output @emph{unquoted} near the beginning of
+@file{config.status}, and executed each time @file{config.status} runs
+(regardless of the tag). Because they are unquoted, for example,
+@samp{$var} is output as the value of @code{var}. @var{init-cmds}
+is typically used by @file{configure} to give @file{config.status} some
+variables it needs to run the @var{commands}.
+
+You should be extremely cautious in your variable names: all the
+@var{init-cmds} share the same name space and may overwrite each other
+in unpredictable ways. Sorry@enddots{}
+@end table
+
+All these macros can be called multiple times, with different
+@var{tag} values, of course!
+
+
+@node Configuration Files
+@section Creating Configuration Files
+@cindex Creating configuration files
+@cindex Configuration file creation
+
+Be sure to read the previous section, @ref{Configuration Actions}.
+
+@anchor{AC_CONFIG_FILES}
+@defmac AC_CONFIG_FILES (@var{file}@dots{}, @ovar{cmds}, @ovar{init-cmds})
+@acindex{CONFIG_FILES}
+Make @code{AC_OUTPUT} create each @file{@var{file}} by copying an input
+file (by default @file{@var{file}.in}), substituting the output variable
+values.
+@c Before we used to have this feature, which was later rejected
+@c because it complicates the writing of makefiles:
+@c If the file would be unchanged, it is left untouched, to preserve
+@c timestamp.
+This macro is one of the instantiating macros; see @ref{Configuration
+Actions}. @xref{Makefile Substitutions}, for more information on using
+output variables. @xref{Setting Output Variables}, for more information
+on creating them. This macro creates the directory that the file is in
+if it doesn't exist. Usually, makefiles are created this way,
+but other files, such as @file{.gdbinit}, can be specified as well.
+
+Typical calls to @code{AC_CONFIG_FILES} look like this:
+
+@example
+AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
+AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
+@end example
+
+You can override an input file name by appending to @var{file} a
+colon-separated list of input files. Examples:
+
+@example
+AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
+ [lib/Makefile:boiler/lib.mk])
+@end example
+
+@noindent
+Doing this allows you to keep your file names acceptable to
+DOS variants, or
+to prepend and/or append boilerplate to the file.
+@end defmac
+
+
+
+@node Makefile Substitutions
+@section Substitutions in Makefiles
+@cindex Substitutions in makefiles
+@cindex Makefile substitutions
+
+Each subdirectory in a distribution that contains something to be
+compiled or installed should come with a file @file{Makefile.in}, from
+which @command{configure} creates a file @file{Makefile} in that directory.
+To create @file{Makefile}, @command{configure} performs a simple variable
+substitution, replacing occurrences of @samp{@@@var{variable}@@} in
+@file{Makefile.in} with the value that @command{configure} has determined
+for that variable. Variables that are substituted into output files in
+this way are called @dfn{output variables}. They are ordinary shell
+variables that are set in @command{configure}. To make @command{configure}
+substitute a particular variable into the output files, the macro
+@code{AC_SUBST} must be called with that variable name as an argument.
+Any occurrences of @samp{@@@var{variable}@@} for other variables are
+left unchanged. @xref{Setting Output Variables}, for more information
+on creating output variables with @code{AC_SUBST}.
+
+A software package that uses a @command{configure} script should be
+distributed with a file @file{Makefile.in}, but no makefile; that
+way, the user has to properly configure the package for the local system
+before compiling it.
+
+@xref{Makefile Conventions, , Makefile Conventions, standards, The
+GNU Coding Standards}, for more information on what to put in
+makefiles.
+
+@menu
+* Preset Output Variables:: Output variables that are always set
+* Installation Directory Variables:: Other preset output variables
+* Changed Directory Variables:: Warnings about @file{datarootdir}
+* Build Directories:: Supporting multiple concurrent compiles
+* Automatic Remaking:: Makefile rules for configuring
+@end menu
+
+@node Preset Output Variables
+@subsection Preset Output Variables
+@cindex Output variables
+
+Some output variables are preset by the Autoconf macros. Some of the
+Autoconf macros set additional output variables, which are mentioned in
+the descriptions for those macros. @xref{Output Variable Index}, for a
+complete list of output variables. @xref{Installation Directory
+Variables}, for the list of the preset ones related to installation
+directories. Below are listed the other preset ones, many of which are
+precious variables (@pxref{Setting Output Variables},
+@code{AC_ARG_VAR}).
+
+The preset variables which are available during @file{config.status}
+(@pxref{Configuration Actions}) may also be used during
+@command{configure} tests. For example, it is permissible to reference
+@samp{$srcdir} when constructing a list of directories to pass via
+option @option{-I} during a compiler feature check. When used in this
+manner, coupled with the fact that @command{configure} is always run
+from the top build directory, it is sufficient to use just
+@samp{$srcdir} instead of @samp{$top_srcdir}.
+
+@c Just say no to ASCII sorting! We're humans, not computers.
+@c These variables are listed as they would be in a dictionary:
+@c actor
+@c Actress
+@c actress
+
+@defvar CFLAGS
+@evindex CFLAGS
+@ovindex CFLAGS
+Debugging and optimization options for the C compiler. If it is not set
+in the environment when @command{configure} runs, the default value is set
+when you call @code{AC_PROG_CC} (or empty if you don't). @command{configure}
+uses this variable when compiling or linking programs to test for C features.
+
+If a compiler option affects only the behavior of the preprocessor
+(e.g., @option{-D@var{name}}), it should be put into @code{CPPFLAGS}
+instead. If it affects only the linker (e.g., @option{-L@var{directory}}),
+it should be put into @code{LDFLAGS} instead. If it
+affects only the compiler proper, @code{CFLAGS} is the natural home for
+it. If an option affects multiple phases of the compiler, though,
+matters get tricky. One approach to put such options directly into
+@code{CC}, e.g., @code{CC='gcc -m64'}. Another is to put them into both
+@code{CPPFLAGS} and @code{LDFLAGS}, but not into @code{CFLAGS}.
+
+However, remember that some @file{Makefile} variables are reserved by
+the GNU Coding Standards for the use of the ``user''---the person
+building the package. For instance, @code{CFLAGS} is one such variable.
+
+Sometimes package developers are tempted to set user variables such as
+@code{CFLAGS} because it appears to make their job easier. However, the
+package itself should never set a user variable, particularly not to
+include switches that are required for proper compilation of the
+package. Since these variables are documented as being for the package
+builder, that person rightfully expects to be able to override any of
+these variables at build time. If the package developer needs to add
+switches without interfering with the user, the proper way to do that is
+to introduce an additional variable. Automake makes this easy by
+introducing @code{AM_CFLAGS} (@pxref{Flag Variables Ordering, , ,
+automake, GNU Automake}), but the concept is the same even if
+Automake is not used.
+@end defvar
+
+@defvar configure_input
+@ovindex configure_input
+A comment saying that the file was generated automatically by
+@command{configure} and giving the name of the input file.
+@code{AC_OUTPUT} adds a comment line containing this variable to the top
+of every makefile it creates. For other files, you should
+reference this variable in a comment at the top of each input file. For
+example, an input shell script should begin like this:
+
+@example
+#!/bin/sh
+# @@configure_input@@
+@end example
+
+@noindent
+The presence of that line also reminds people editing the file that it
+needs to be processed by @command{configure} in order to be used.
+@end defvar
+
+@defvar CPPFLAGS
+@evindex CPPFLAGS
+@ovindex CPPFLAGS
+Preprocessor options for the C, C++, Objective C, and Objective C++
+preprocessors and compilers. If
+it is not set in the environment when @command{configure} runs, the default
+value is empty. @command{configure} uses this variable when preprocessing
+or compiling programs to test for C, C++, Objective C, and Objective C++
+features.
+
+This variable's contents should contain options like @option{-I},
+@option{-D}, and @option{-U} that affect only the behavior of the
+preprocessor. Please see the explanation of @code{CFLAGS} for what you
+can do if an option affects other phases of the compiler as well.
+
+Currently, @command{configure} always links as part of a single
+invocation of the compiler that also preprocesses and compiles, so it
+uses this variable also when linking programs. However, it is unwise to
+depend on this behavior because the GNU Coding Standards do
+not require it and many packages do not use @code{CPPFLAGS} when linking
+programs.
+
+@xref{Special Chars in Variables}, for limitations that @code{CPPFLAGS}
+might run into.
+@end defvar
+
+@defvar CXXFLAGS
+@evindex CXXFLAGS
+@ovindex CXXFLAGS
+Debugging and optimization options for the C++ compiler. It acts like
+@code{CFLAGS}, but for C++ instead of C.
+@end defvar
+
+@defvar DEFS
+@ovindex DEFS
+@option{-D} options to pass to the C compiler. If @code{AC_CONFIG_HEADERS}
+is called, @command{configure} replaces @samp{@@DEFS@@} with
+@option{-DHAVE_CONFIG_H} instead (@pxref{Configuration Headers}). This
+variable is not defined while @command{configure} is performing its tests,
+only when creating the output files. @xref{Setting Output Variables}, for
+how to check the results of previous tests.
+@end defvar
+
+@defvar ECHO_C
+@defvarx ECHO_N
+@defvarx ECHO_T
+@ovindex ECHO_C
+@ovindex ECHO_N
+@ovindex ECHO_T
+How does one suppress the trailing newline from @command{echo} for
+question-answer message pairs? These variables provide a way:
+
+@example
+echo $ECHO_N "And the winner is... $ECHO_C"
+sleep 100000000000
+echo "$@{ECHO_T@}dead."
+@end example
+
+@noindent
+Some old and uncommon @command{echo} implementations offer no means to
+achieve this, in which case @code{ECHO_T} is set to tab. You might not
+want to use it.
+@end defvar
+
+@defvar ERLCFLAGS
+@evindex ERLCFLAGS
+@ovindex ERLCFLAGS
+Debugging and optimization options for the Erlang compiler. If it is not set
+in the environment when @command{configure} runs, the default value is empty.
+@command{configure} uses this variable when compiling
+programs to test for Erlang features.
+@end defvar
+
+@defvar FCFLAGS
+@evindex FCFLAGS
+@ovindex FCFLAGS
+Debugging and optimization options for the Fortran compiler. If it
+is not set in the environment when @command{configure} runs, the default
+value is set when you call @code{AC_PROG_FC} (or empty if you don't).
+@command{configure} uses this variable when compiling or linking
+programs to test for Fortran features.
+@end defvar
+
+@defvar FFLAGS
+@evindex FFLAGS
+@ovindex FFLAGS
+Debugging and optimization options for the Fortran 77 compiler. If it
+is not set in the environment when @command{configure} runs, the default
+value is set when you call @code{AC_PROG_F77} (or empty if you don't).
+@command{configure} uses this variable when compiling or linking
+programs to test for Fortran 77 features.
+@end defvar
+
+@defvar LDFLAGS
+@evindex LDFLAGS
+@ovindex LDFLAGS
+Options for the linker. If it is not set
+in the environment when @command{configure} runs, the default value is empty.
+@command{configure} uses this variable when linking programs to test for
+C, C++, Objective C, Objective C++, Fortran, and Go features.
+
+This variable's contents should contain options like @option{-s} and
+@option{-L} that affect only the behavior of the linker. Please see the
+explanation of @code{CFLAGS} for what you can do if an option also
+affects other phases of the compiler.
+
+Don't use this variable to pass library names
+(@option{-l}) to the linker; use @code{LIBS} instead.
+@end defvar
+
+@defvar LIBS
+@evindex LIBS
+@ovindex LIBS
+@option{-l} options to pass to the linker. The default value is empty,
+but some Autoconf macros may prepend extra libraries to this variable if
+those libraries are found and provide necessary functions, see
+@ref{Libraries}. @command{configure} uses this variable when linking
+programs to test for C, C++, Objective C, Objective C++, Fortran, and Go
+features.
+@end defvar
+
+@defvar OBJCFLAGS
+@evindex OBJCFLAGS
+@ovindex OBJCFLAGS
+Debugging and optimization options for the Objective C compiler. It
+acts like @code{CFLAGS}, but for Objective C instead of C.
+@end defvar
+
+@defvar OBJCXXFLAGS
+@evindex OBJCXXFLAGS
+@ovindex OBJCXXFLAGS
+Debugging and optimization options for the Objective C++ compiler. It
+acts like @code{CXXFLAGS}, but for Objective C++ instead of C++.
+@end defvar
+
+@defvar GOFLAGS
+@evindex GOFLAGS
+@ovindex GOFLAGS
+Debugging and optimization options for the Go compiler. It acts like
+@code{CFLAGS}, but for Go instead of C.
+@end defvar
+
+@defvar builddir
+@ovindex builddir
+Rigorously equal to @samp{.}. Added for symmetry only.
+@end defvar
+
+@defvar abs_builddir
+@ovindex abs_builddir
+Absolute name of @code{builddir}.
+@end defvar
+
+@defvar top_builddir
+@ovindex top_builddir
+The relative name of the top level of the current build tree. In the
+top-level directory, this is the same as @code{builddir}.
+@end defvar
+
+@defvar top_build_prefix
+@ovindex top_build_prefix
+The relative name of the top level of the current build tree with final
+slash if nonempty. This is the same as @code{top_builddir}, except that
+it contains zero or more runs of @code{../}, so it should not be
+appended with a slash for concatenation. This helps for @command{make}
+implementations that otherwise do not treat @file{./file} and @file{file}
+as equal in the toplevel build directory.
+@end defvar
+
+@defvar abs_top_builddir
+@ovindex abs_top_builddir
+Absolute name of @code{top_builddir}.
+@end defvar
+
+@defvar srcdir
+@ovindex srcdir
+The name of the directory that contains the source code for
+that makefile.
+@end defvar
+
+@defvar abs_srcdir
+@ovindex abs_srcdir
+Absolute name of @code{srcdir}.
+@end defvar
+
+@defvar top_srcdir
+@ovindex top_srcdir
+The name of the top-level source code directory for the
+package. In the top-level directory, this is the same as @code{srcdir}.
+@end defvar
+
+@defvar abs_top_srcdir
+@ovindex abs_top_srcdir
+Absolute name of @code{top_srcdir}.
+@end defvar
+
+@node Installation Directory Variables
+@subsection Installation Directory Variables
+@cindex Installation directories
+@cindex Directories, installation
+
+The following variables specify the directories for
+package installation, see @ref{Directory Variables, , Variables for
+Installation Directories, standards, The GNU Coding
+Standards}, for more information. Each variable corresponds to an
+argument of @command{configure}; trailing slashes are stripped so that
+expressions such as @samp{$@{prefix@}/lib} expand with only one slash
+between directory names. See the end of this section for
+details on when and how to use these variables.
+
+@defvar bindir
+@ovindex bindir
+The directory for installing executables that users run.
+@end defvar
+
+@defvar datadir
+@ovindex datadir
+The directory for installing idiosyncratic read-only
+architecture-independent data.
+@end defvar
+
+@defvar datarootdir
+@ovindex datarootdir
+The root of the directory tree for read-only architecture-independent
+data files.
+@end defvar
+
+@defvar docdir
+@ovindex docdir
+The directory for installing documentation files (other than Info and
+man).
+@end defvar
+
+@defvar dvidir
+@ovindex dvidir
+The directory for installing documentation files in DVI format.
+@end defvar
+
+@defvar exec_prefix
+@ovindex exec_prefix
+The installation prefix for architecture-dependent files. By default
+it's the same as @code{prefix}. You should avoid installing anything
+directly to @code{exec_prefix}. However, the default value for
+directories containing architecture-dependent files should be relative
+to @code{exec_prefix}.
+@end defvar
+
+@defvar htmldir
+@ovindex htmldir
+The directory for installing HTML documentation.
+@end defvar
+
+@defvar includedir
+@ovindex includedir
+The directory for installing C header files.
+@end defvar
+
+@defvar infodir
+@ovindex infodir
+The directory for installing documentation in Info format.
+@end defvar
+
+@defvar libdir
+@ovindex libdir
+The directory for installing object code libraries.
+@end defvar
+
+@defvar libexecdir
+@ovindex libexecdir
+The directory for installing executables that other programs run.
+@end defvar
+
+@defvar localedir
+@ovindex localedir
+The directory for installing locale-dependent but
+architecture-independent data, such as message catalogs. This directory
+usually has a subdirectory per locale.
+@end defvar
+
+@defvar localstatedir
+@ovindex localstatedir
+The directory for installing modifiable single-machine data.
+@end defvar
+
+@defvar mandir
+@ovindex mandir
+The top-level directory for installing documentation in man format.
+@end defvar
+
+@defvar oldincludedir
+@ovindex oldincludedir
+The directory for installing C header files for non-GCC compilers.
+@end defvar
+
+@defvar pdfdir
+@ovindex pdfdir
+The directory for installing PDF documentation.
+@end defvar
+
+@defvar prefix
+@ovindex prefix
+The common installation prefix for all files. If @code{exec_prefix}
+is defined to a different value, @code{prefix} is used only for
+architecture-independent files.
+@end defvar
+
+@defvar psdir
+@ovindex psdir
+The directory for installing PostScript documentation.
+@end defvar
+
+@defvar sbindir
+@ovindex sbindir
+The directory for installing executables that system
+administrators run.
+@end defvar
+
+@defvar sharedstatedir
+@ovindex sharedstatedir
+The directory for installing modifiable architecture-independent data.
+@end defvar
+
+@defvar sysconfdir
+@ovindex sysconfdir
+The directory for installing read-only single-machine data.
+@end defvar
+
+
+Most of these variables have values that rely on @code{prefix} or
+@code{exec_prefix}. It is deliberate that the directory output
+variables keep them unexpanded: typically @samp{@@datarootdir@@} is
+replaced by @samp{$@{prefix@}/share}, not @samp{/usr/local/share}, and
+@samp{@@datadir@@} is replaced by @samp{$@{datarootdir@}}.
+
+This behavior is mandated by the GNU Coding Standards, so that when
+the user runs:
+
+@table @samp
+@item make
+she can still specify a different prefix from the one specified to
+@command{configure}, in which case, if needed, the package should hard
+code dependencies corresponding to the make-specified prefix.
+
+@item make install
+she can specify a different installation location, in which case the
+package @emph{must} still depend on the location which was compiled in
+(i.e., never recompile when @samp{make install} is run). This is an
+extremely important feature, as many people may decide to install all
+the files of a package grouped together, and then install links from
+the final locations to there.
+@end table
+
+In order to support these features, it is essential that
+@code{datarootdir} remains defined as @samp{$@{prefix@}/share},
+so that its value can be expanded based
+on the current value of @code{prefix}.
+
+A corollary is that you should not use these variables except in
+makefiles. For instance, instead of trying to evaluate @code{datadir}
+in @file{configure} and hard-coding it in makefiles using
+e.g., @samp{AC_DEFINE_UNQUOTED([DATADIR], ["$datadir"], [Data directory.])},
+you should add
+@option{-DDATADIR='$(datadir)'} to your makefile's definition of
+@code{CPPFLAGS} (@code{AM_CPPFLAGS} if you are also using Automake).
+
+Similarly, you should not rely on @code{AC_CONFIG_FILES} to replace
+@code{bindir} and friends in your shell scripts and other files; instead,
+let @command{make} manage their replacement. For instance Autoconf
+ships templates of its shell scripts ending with @samp{.in}, and uses a
+makefile snippet similar to the following to build scripts like
+@command{autoheader} and @command{autom4te}:
+
+@example
+@group
+edit = sed \
+ -e 's|@@bindir[@@]|$(bindir)|g' \
+ -e 's|@@pkgdatadir[@@]|$(pkgdatadir)|g' \
+ -e 's|@@prefix[@@]|$(prefix)|g'
+@end group
+
+@group
+autoheader autom4te: Makefile
+ rm -f $@@ $@@.tmp
+ srcdir=''; \
+ test -f ./$@@.in || srcdir=$(srcdir)/; \
+ $(edit) $$@{srcdir@}$@@.in >$@@.tmp
+@c $$ restore font-lock
+ chmod +x $@@.tmp
+ chmod a-w $@@.tmp
+ mv $@@.tmp $@@
+@end group
+
+@group
+autoheader: $(srcdir)/autoheader.in
+autom4te: $(srcdir)/autom4te.in
+@end group
+@end example
+
+Some details are noteworthy:
+
+@table @asis
+@item @samp{@@bindir[@@]}
+The brackets prevent @command{configure} from replacing
+@samp{@@bindir@@} in the Sed expression itself.
+Brackets are preferable to a backslash here, since
+Posix says @samp{\@@} is not portable.
+
+@item @samp{$(bindir)}
+Don't use @samp{@@bindir@@}! Use the matching makefile variable
+instead.
+
+@item @samp{$(pkgdatadir)}
+The example takes advantage of the variable @samp{$(pkgdatadir)}
+provided by Automake; it is equivalent to @samp{$(datadir)/$(PACKAGE)}.
+
+@item @samp{/}
+Don't use @samp{/} in the Sed expressions that replace file names since
+most likely the
+variables you use, such as @samp{$(bindir)}, contain @samp{/}.
+Use a shell metacharacter instead, such as @samp{|}.
+
+@item special characters
+File names, file name components, and the value of @code{VPATH} should
+not contain shell metacharacters or white
+space. @xref{Special Chars in Variables}.
+
+@item dependency on @file{Makefile}
+Since @code{edit} uses values that depend on the configuration specific
+values (@code{prefix}, etc.)@: and not only on @code{VERSION} and so forth,
+the output depends on @file{Makefile}, not @file{configure.ac}.
+
+@item @samp{$@@}
+The main rule is generic, and uses @samp{$@@} extensively to
+avoid the need for multiple copies of the rule.
+
+@item Separated dependencies and single suffix rules
+You can't use them! The above snippet cannot be (portably) rewritten
+as:
+
+@example
+autoconf autoheader: Makefile
+@group
+.in:
+ rm -f $@@ $@@.tmp
+ $(edit) $< >$@@.tmp
+ chmod +x $@@.tmp
+ mv $@@.tmp $@@
+@end group
+@end example
+
+@xref{Single Suffix Rules}, for details.
+
+@item @samp{$(srcdir)}
+Be sure to specify the name of the source directory,
+otherwise the package won't support separated builds.
+@end table
+
+For the more specific installation of Erlang libraries, the following variables
+are defined:
+
+@defvar ERLANG_INSTALL_LIB_DIR
+@ovindex ERLANG_INSTALL_LIB_DIR
+@acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
+The common parent directory of Erlang library installation directories.
+This variable is set by calling the @code{AC_ERLANG_SUBST_INSTALL_LIB_DIR}
+macro in @file{configure.ac}.
+@end defvar
+
+@defvar ERLANG_INSTALL_LIB_DIR_@var{library}
+@ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
+@acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
+The installation directory for Erlang library @var{library}.
+This variable is set by using the
+@samp{AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR}
+macro in @file{configure.ac}.
+@end defvar
+
+@xref{Erlang Libraries}, for details.
+
+
+@node Changed Directory Variables
+@subsection Changed Directory Variables
+@cindex @file{datarootdir}
+
+In Autoconf 2.60, the set of directory variables has changed, and the
+defaults of some variables have been adjusted
+(@pxref{Installation Directory Variables}) to changes in the
+GNU Coding Standards. Notably, @file{datadir}, @file{infodir}, and
+@file{mandir} are now expressed in terms of @file{datarootdir}. If you are
+upgrading from an earlier Autoconf version, you may need to adjust your files
+to ensure that the directory variables are substituted correctly
+(@pxref{Defining Directories}), and that a definition of @file{datarootdir} is
+in place. For example, in a @file{Makefile.in}, adding
+
+@example
+datarootdir = @@datarootdir@@
+@end example
+
+@noindent
+is usually sufficient. If you use Automake to create @file{Makefile.in},
+it will add this for you.
+
+To help with the transition, Autoconf warns about files that seem to use
+@code{datarootdir} without defining it. In some cases, it then expands
+the value of @code{$datarootdir} in substitutions of the directory
+variables. The following example shows such a warning:
+
+@example
+$ @kbd{cat configure.ac}
+AC_INIT
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+$ @kbd{cat Makefile.in}
+prefix = @@prefix@@
+datadir = @@datadir@@
+$ @kbd{autoconf}
+$ @kbd{configure}
+configure: creating ./config.status
+config.status: creating Makefile
+config.status: WARNING:
+ Makefile.in seems to ignore the --datarootdir setting
+$ @kbd{cat Makefile}
+prefix = /usr/local
+datadir = $@{prefix@}/share
+@end example
+
+Usually one can easily change the file to accommodate both older and newer
+Autoconf releases:
+
+@example
+$ @kbd{cat Makefile.in}
+prefix = @@prefix@@
+datarootdir = @@datarootdir@@
+datadir = @@datadir@@
+$ @kbd{configure}
+configure: creating ./config.status
+config.status: creating Makefile
+$ @kbd{cat Makefile}
+prefix = /usr/local
+datarootdir = $@{prefix@}/share
+datadir = $@{datarootdir@}
+@end example
+
+@acindex{DATAROOTDIR_CHECKED}
+In some cases, however, the checks may not be able to detect that a suitable
+initialization of @code{datarootdir} is in place, or they may fail to detect
+that such an initialization is necessary in the output file. If, after
+auditing your package, there are still spurious @file{configure} warnings about
+@code{datarootdir}, you may add the line
+
+@example
+AC_DEFUN([AC_DATAROOTDIR_CHECKED])
+@end example
+
+@noindent
+to your @file{configure.ac} to disable the warnings. This is an exception
+to the usual rule that you should not define a macro whose name begins with
+@code{AC_} (@pxref{Macro Names}).
+
+
+
+@node Build Directories
+@subsection Build Directories
+@cindex Build directories
+@cindex Directories, build
+
+You can support compiling a software package for several architectures
+simultaneously from the same copy of the source code. The object files
+for each architecture are kept in their own directory.
+
+To support doing this, @command{make} uses the @code{VPATH} variable to
+find the files that are in the source directory. GNU Make
+can do this. Most other recent @command{make} programs can do this as
+well, though they may have difficulties and it is often simpler to
+recommend GNU @command{make} (@pxref{VPATH and Make}). Older
+@command{make} programs do not support @code{VPATH}; when using them, the
+source code must be in the same directory as the object files.
+
+If you are using GNU Automake, the remaining details in this
+section are already covered for you, based on the contents of your
+@file{Makefile.am}. But if you are using Autoconf in isolation, then
+supporting @code{VPATH} requires the following in your
+@file{Makefile.in}:
+
+@example
+srcdir = @@srcdir@@
+VPATH = @@srcdir@@
+@end example
+
+Do not set @code{VPATH} to the value of another variable (@pxref{Variables
+listed in VPATH}.
+
+@command{configure} substitutes the correct value for @code{srcdir} when
+it produces @file{Makefile}.
+
+Do not use the @command{make} variable @code{$<}, which expands to the
+file name of the file in the source directory (found with @code{VPATH}),
+except in implicit rules. (An implicit rule is one such as @samp{.c.o},
+which tells how to create a @file{.o} file from a @file{.c} file.) Some
+versions of @command{make} do not set @code{$<} in explicit rules; they
+expand it to an empty value.
+
+Instead, Make command lines should always refer to source
+files by prefixing them with @samp{$(srcdir)/}. For example:
+
+@example
+time.info: time.texinfo
+ $(MAKEINFO) '$(srcdir)/time.texinfo'
+@end example
+
+@node Automatic Remaking
+@subsection Automatic Remaking
+@cindex Automatic remaking
+@cindex Remaking automatically
+
+You can put rules like the following in the top-level @file{Makefile.in}
+for a package to automatically update the configuration information when
+you change the configuration files. This example includes all of the
+optional files, such as @file{aclocal.m4} and those related to
+configuration header files. Omit from the @file{Makefile.in} rules for
+any of these files that your package does not use.
+
+The @samp{$(srcdir)/} prefix is included because of limitations in the
+@code{VPATH} mechanism.
+
+The @file{stamp-} files are necessary because the timestamps of
+@file{config.h.in} and @file{config.h} are not changed if remaking
+them does not change their contents. This feature avoids unnecessary
+recompilation. You should include the file @file{stamp-h.in} in your
+package's distribution, so that @command{make} considers
+@file{config.h.in} up to date. Don't use @command{touch}
+(@pxref{touch, , Limitations of Usual Tools}); instead, use
+@command{echo} (using
+@command{date} would cause needless differences, hence CVS
+conflicts, etc.).
+
+@example
+@group
+$(srcdir)/configure: configure.ac aclocal.m4
+ cd '$(srcdir)' && autoconf
+
+# autoheader might not change config.h.in, so touch a stamp file.
+$(srcdir)/config.h.in: stamp-h.in
+$(srcdir)/stamp-h.in: configure.ac aclocal.m4
+ cd '$(srcdir)' && autoheader
+ echo timestamp > '$(srcdir)/stamp-h.in'
+
+config.h: stamp-h
+stamp-h: config.h.in config.status
+ ./config.status
+
+Makefile: Makefile.in config.status
+ ./config.status
+
+config.status: configure
+ ./config.status --recheck
+@end group
+@end example
+
+@noindent
+(Be careful if you copy these lines directly into your makefile, as you
+need to convert the indented lines to start with the tab character.)
+
+In addition, you should use
+
+@example
+AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
+@end example
+
+@noindent
+so @file{config.status} ensures that @file{config.h} is considered up to
+date. @xref{Output}, for more information about @code{AC_OUTPUT}.
+
+@xref{config.status Invocation}, for more examples of handling
+configuration-related dependencies.
+
+@node Configuration Headers
+@section Configuration Header Files
+@cindex Configuration Header
+@cindex @file{config.h}
+
+When a package contains more than a few tests that define C preprocessor
+symbols, the command lines to pass @option{-D} options to the compiler
+can get quite long. This causes two problems. One is that the
+@command{make} output is hard to visually scan for errors. More
+seriously, the command lines can exceed the length limits of some
+operating systems. As an alternative to passing @option{-D} options to
+the compiler, @command{configure} scripts can create a C header file
+containing @samp{#define} directives. The @code{AC_CONFIG_HEADERS}
+macro selects this kind of output. Though it can be called anywhere
+between @code{AC_INIT} and @code{AC_OUTPUT}, it is customary to call
+it right after @code{AC_INIT}.
+
+The package should @samp{#include} the configuration header file before
+any other header files, to prevent inconsistencies in declarations (for
+example, if it redefines @code{const}).
+
+To provide for VPATH builds, remember to pass the C compiler a @option{-I.}
+option (or @option{-I..}; whichever directory contains @file{config.h}).
+Even if you use @samp{#include "config.h"}, the preprocessor searches only
+the directory of the currently read file, i.e., the source directory, not
+the build directory.
+
+With the appropriate @option{-I} option, you can use
+@samp{#include <config.h>}. Actually, it's a good habit to use it,
+because in the rare case when the source directory contains another
+@file{config.h}, the build directory should be searched first.
+
+
+@defmac AC_CONFIG_HEADERS (@var{header} @dots{}, @ovar{cmds}, @ovar{init-cmds})
+@acindex{CONFIG_HEADERS}
+@cvindex HAVE_CONFIG_H
+This macro is one of the instantiating macros; see @ref{Configuration
+Actions}. Make @code{AC_OUTPUT} create the file(s) in the
+blank-or-newline-separated list @var{header} containing C preprocessor
+@code{#define} statements, and replace @samp{@@DEFS@@} in generated
+files with @option{-DHAVE_CONFIG_H} instead of the value of @code{DEFS}.
+The usual name for @var{header} is @file{config.h}.
+
+If @var{header} already exists and its contents are identical to what
+@code{AC_OUTPUT} would put in it, it is left alone. Doing this allows
+making some changes in the configuration without needlessly causing
+object files that depend on the header file to be recompiled.
+
+Usually the input file is named @file{@var{header}.in}; however, you can
+override the input file name by appending to @var{header} a
+colon-separated list of input files. For example, you might need to make
+the input file name acceptable to DOS variants:
+
+@example
+AC_CONFIG_HEADERS([config.h:config.hin])
+@end example
+
+@end defmac
+
+@defmac AH_HEADER
+@ahindex{HEADER}
+This macro is defined as the name of the first declared config header
+and undefined if no config headers have been declared up to this point.
+A third-party macro may, for example, require use of a config header
+without invoking AC_CONFIG_HEADERS twice, like this:
+
+@example
+AC_CONFIG_COMMANDS_PRE(
+ [m4_ifndef([AH_HEADER], [AC_CONFIG_HEADERS([config.h])])])
+@end example
+
+@end defmac
+
+@xref{Configuration Actions}, for more details on @var{header}.
+
+@menu
+* Header Templates:: Input for the configuration headers
+* autoheader Invocation:: How to create configuration templates
+* Autoheader Macros:: How to specify CPP templates
+@end menu
+
+@node Header Templates
+@subsection Configuration Header Templates
+@cindex Configuration Header Template
+@cindex Header templates
+@cindex @file{config.h.in}
+
+Your distribution should contain a template file that looks as you want
+the final header file to look, including comments, with @code{#undef}
+statements which are used as hooks. For example, suppose your
+@file{configure.ac} makes these calls:
+
+@example
+AC_CONFIG_HEADERS([conf.h])
+AC_CHECK_HEADERS([unistd.h])
+@end example
+
+@noindent
+Then you could have code like the following in @file{conf.h.in}.
+The @file{conf.h} created by @command{configure} defines @samp{HAVE_UNISTD_H}
+to 1, if and only if the system has @file{unistd.h}.
+
+@example
+@group
+/* Define as 1 if you have unistd.h. */
+#undef HAVE_UNISTD_H
+@end group
+@end example
+
+The format of the template file is stricter than what the C preprocessor
+is required to accept. A directive line should contain only whitespace,
+@samp{#undef}, and @samp{HAVE_UNISTD_H}. The use of @samp{#define}
+instead of @samp{#undef}, or of comments on the same line as
+@samp{#undef}, is strongly discouraged. Each hook should only be listed
+once. Other preprocessor lines, such as @samp{#ifdef} or
+@samp{#include}, are copied verbatim from the template into the
+generated header.
+
+Since it is a tedious task to keep a template header up to date, you may
+use @command{autoheader} to generate it, see @ref{autoheader Invocation}.
+
+During the instantiation of the header, each @samp{#undef} line in the
+template file for each symbol defined by @samp{AC_DEFINE} is changed to an
+appropriate @samp{#define}. If the corresponding @samp{AC_DEFINE} has not
+been executed during the @command{configure} run, the @samp{#undef} line is
+commented out. (This is important, e.g., for @samp{_POSIX_SOURCE}:
+on many systems, it can be implicitly defined by the compiler, and
+undefining it in the header would then break compilation of subsequent
+headers.)
+
+Currently, @emph{all} remaining @samp{#undef} lines in the header
+template are commented out, whether or not there was a corresponding
+@samp{AC_DEFINE} for the macro name; but this behavior is not guaranteed
+for future releases of Autoconf.
+
+Generally speaking, since you should not use @samp{#define}, and you
+cannot guarantee whether a @samp{#undef} directive in the header
+template will be converted to a @samp{#define} or commented out in the
+generated header file, the template file cannot be used for conditional
+definition effects. Consequently, if you need to use the construct
+
+@example
+@group
+#ifdef THIS
+# define THAT
+#endif
+@end group
+@end example
+
+@noindent
+you must place it outside of the template.
+If you absolutely need to hook it to the config header itself, please put
+the directives to a separate file, and @samp{#include} that file from the
+config header template. If you are using @command{autoheader}, you would
+probably use @samp{AH_BOTTOM} to append the @samp{#include} directive.
+
+
+@node autoheader Invocation
+@subsection Using @command{autoheader} to Create @file{config.h.in}
+@cindex @command{autoheader}
+
+The @command{autoheader} program can create a template file of C
+@samp{#define} statements for @command{configure} to use.
+It searches for the first invocation of @code{AC_CONFIG_HEADERS} in
+@file{configure} sources to determine the name of the template.
+(If the first call of @code{AC_CONFIG_HEADERS} specifies more than one
+input file name, @command{autoheader} uses the first one.)
+
+It is recommended that only one input file is used. If you want to append
+a boilerplate code, it is preferable to use
+@samp{AH_BOTTOM([#include <conf_post.h>])}.
+File @file{conf_post.h} is not processed during the configuration then,
+which make things clearer. Analogically, @code{AH_TOP} can be used to
+prepend a boilerplate code.
+
+In order to do its job, @command{autoheader} needs you to document all
+of the symbols that you might use. Typically this is done via an
+@code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED} call whose first argument
+is a literal symbol and whose third argument describes the symbol
+(@pxref{Defining Symbols}). Alternatively, you can use
+@code{AH_TEMPLATE} (@pxref{Autoheader Macros}), or you can supply a
+suitable input file for a subsequent configuration header file.
+Symbols defined by Autoconf's builtin tests are already documented properly;
+you need to document only those that you
+define yourself.
+
+You might wonder why @command{autoheader} is needed: after all, why
+would @command{configure} need to ``patch'' a @file{config.h.in} to
+produce a @file{config.h} instead of just creating @file{config.h} from
+scratch? Well, when everything rocks, the answer is just that we are
+wasting our time maintaining @command{autoheader}: generating
+@file{config.h} directly is all that is needed. When things go wrong,
+however, you'll be thankful for the existence of @command{autoheader}.
+
+The fact that the symbols are documented is important in order to
+@emph{check} that @file{config.h} makes sense. The fact that there is a
+well-defined list of symbols that should be defined (or not) is
+also important for people who are porting packages to environments where
+@command{configure} cannot be run: they just have to @emph{fill in the
+blanks}.
+
+But let's come back to the point: the invocation of @command{autoheader}@dots{}
+
+If you give @command{autoheader} an argument, it uses that file instead
+of @file{configure.ac} and writes the header file to the standard output
+instead of to @file{config.h.in}. If you give @command{autoheader} an
+argument of @option{-}, it reads the standard input instead of
+@file{configure.ac} and writes the header file to the standard output.
+
+@command{autoheader} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Report processing steps.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files.
+
+@item --force
+@itemx -f
+Remake the template file even if newer than its input files.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Append @var{dir} to the include path. Multiple invocations accumulate.
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend @var{dir} to the include path. Multiple invocations accumulate.
+
+@item --warnings=@var{category}
+@itemx -W @var{category}
+@evindex WARNINGS
+Report the warnings related to @var{category} (which can actually be a
+comma separated list). Current categories include:
+
+@table @samp
+@item obsolete
+report the uses of obsolete constructs
+
+@item all
+report all the warnings
+
+@item none
+report none
+
+@item error
+treats warnings as errors
+
+@item no-@var{category}
+disable warnings falling into @var{category}
+@end table
+
+@end table
+
+
+
+@node Autoheader Macros
+@subsection Autoheader Macros
+@cindex Autoheader macros
+
+@command{autoheader} scans @file{configure.ac} and figures out which C
+preprocessor symbols it might define. It knows how to generate
+templates for symbols defined by @code{AC_CHECK_HEADERS},
+@code{AC_CHECK_FUNCS} etc., but if you @code{AC_DEFINE} any additional
+symbol, you must define a template for it. If there are missing
+templates, @command{autoheader} fails with an error message.
+
+The template for a @var{symbol} is created
+by @command{autoheader} from
+the @var{description} argument to an @code{AC_DEFINE};
+see @ref{Defining Symbols}.
+
+For special needs, you can use the following macros.
+
+
+@defmac AH_TEMPLATE (@var{key}, @var{description})
+@ahindex{TEMPLATE}
+Tell @command{autoheader} to generate a template for @var{key}. This macro
+generates standard templates just like @code{AC_DEFINE} when a
+@var{description} is given.
+
+For example:
+
+@example
+AH_TEMPLATE([CRAY_STACKSEG_END],
+ [Define to one of _getb67, GETB67, getb67
+ for Cray-2 and Cray-YMP systems. This
+ function is required for alloca.c support
+ on those systems.])
+@end example
+
+@noindent
+generates the following template, with the description properly
+justified.
+
+@example
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and
+ Cray-YMP systems. This function is required for alloca.c
+ support on those systems. */
+#undef CRAY_STACKSEG_END
+@end example
+@end defmac
+
+
+@defmac AH_VERBATIM (@var{key}, @var{template})
+@ahindex{VERBATIM}
+Tell @command{autoheader} to include the @var{template} as-is in the header
+template file. This @var{template} is associated with the @var{key},
+which is used to sort all the different templates and guarantee their
+uniqueness. It should be a symbol that can be defined via @code{AC_DEFINE}.
+@end defmac
+
+
+@defmac AH_TOP (@var{text})
+@ahindex{TOP}
+Include @var{text} at the top of the header template file.
+@end defmac
+
+
+@defmac AH_BOTTOM (@var{text})
+@ahindex{BOTTOM}
+Include @var{text} at the bottom of the header template file.
+@end defmac
+
+
+Please note that @var{text} gets included ``verbatim'' to the template file,
+not to the resulting config header, so it can easily get mangled when the
+template is processed. There is rarely a need for something other than
+
+@example
+AH_BOTTOM([#include <custom.h>])
+@end example
+
+
+
+@node Configuration Commands
+@section Running Arbitrary Configuration Commands
+@cindex Configuration commands
+@cindex Commands for configuration
+
+You can execute arbitrary commands before, during, and after
+@file{config.status} is run. The three following macros accumulate the
+commands to run when they are called multiple times.
+@code{AC_CONFIG_COMMANDS} replaces the obsolete macro
+@code{AC_OUTPUT_COMMANDS}; see @ref{Obsolete Macros}, for details.
+
+@anchor{AC_CONFIG_COMMANDS}
+@defmac AC_CONFIG_COMMANDS (@var{tag}@dots{}, @ovar{cmds}, @ovar{init-cmds})
+@acindex{CONFIG_COMMANDS}
+Specify additional shell commands to run at the end of
+@file{config.status}, and shell commands to initialize any variables
+from @command{configure}. Associate the commands with @var{tag}.
+Since typically the @var{cmds} create a file, @var{tag} should
+naturally be the name of that file. If needed, the directory hosting
+@var{tag} is created. This macro is one of the instantiating macros;
+see @ref{Configuration Actions}.
+
+Here is an unrealistic example:
+@example
+fubar=42
+AC_CONFIG_COMMANDS([fubar],
+ [echo this is extra $fubar, and so on.],
+ [fubar=$fubar])
+@end example
+
+Here is a better one:
+@example
+AC_CONFIG_COMMANDS([timestamp], [date >timestamp])
+@end example
+@end defmac
+
+The following two macros look similar, but in fact they are not of the same
+breed: they are executed directly by @file{configure}, so you cannot use
+@file{config.status} to rerun them.
+
+@c Yet it is good to leave them here. The user sees them together and
+@c decides which best fits their needs.
+
+@defmac AC_CONFIG_COMMANDS_PRE (@var{cmds})
+@acindex{CONFIG_COMMANDS_PRE}
+Execute the @var{cmds} right before creating @file{config.status}.
+
+This macro presents the last opportunity to call @code{AC_SUBST},
+@code{AC_DEFINE}, or @code{AC_CONFIG_@var{ITEMS}} macros.
+@end defmac
+
+@defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
+@acindex{CONFIG_COMMANDS_POST}
+Execute the @var{cmds} right after creating @file{config.status}.
+@end defmac
+
+
+
+
+@node Configuration Links
+@section Creating Configuration Links
+@cindex Configuration links
+@cindex Links for configuration
+
+You may find it convenient to create links whose destinations depend upon
+results of tests. One can use @code{AC_CONFIG_COMMANDS} but the
+creation of relative symbolic links can be delicate when the package is
+built in a directory different from the source directory.
+
+@anchor{AC_CONFIG_LINKS}
+@defmac AC_CONFIG_LINKS (@var{dest}:@var{source}@dots{}, @ovar{cmds}, @
+ @ovar{init-cmds})
+@acindex{CONFIG_LINKS}
+@cindex Links
+Make @code{AC_OUTPUT} link each of the existing files @var{source} to
+the corresponding link name @var{dest}. Makes a symbolic link if
+possible, otherwise a hard link if possible, otherwise a copy. The
+@var{dest} and @var{source} names should be relative to the top level
+source or build directory. This macro is one of the instantiating
+macros; see @ref{Configuration Actions}.
+
+For example, this call:
+
+@example
+AC_CONFIG_LINKS([host.h:config/$machine.h
+ object.h:config/$obj_format.h])
+@end example
+
+@noindent
+creates in the current directory @file{host.h} as a link to
+@file{@var{srcdir}/config/$machine.h}, and @file{object.h} as a
+link to @file{@var{srcdir}/config/$obj_format.h}.
+
+The tempting value @samp{.} for @var{dest} is invalid: it makes it
+impossible for @samp{config.status} to guess the links to establish.
+
+One can then run:
+@example
+./config.status host.h object.h
+@end example
+@noindent
+to create the links.
+@end defmac
+
+
+
+@node Subdirectories
+@section Configuring Other Packages in Subdirectories
+@cindex Configure subdirectories
+@cindex Subdirectory configure
+
+In most situations, calling @code{AC_OUTPUT} is sufficient to produce
+makefiles in subdirectories. However, @command{configure} scripts
+that control more than one independent package can use
+@code{AC_CONFIG_SUBDIRS} to run @command{configure} scripts for other
+packages in subdirectories.
+
+@defmac AC_CONFIG_SUBDIRS (@var{dir} @dots{})
+@acindex{CONFIG_SUBDIRS}
+@ovindex subdirs
+Make @code{AC_OUTPUT} run @command{configure} in each subdirectory
+@var{dir} in the given blank-or-newline-separated list. Each @var{dir} should
+be a literal, i.e., please do not use:
+
+@example
+@c If you change this example, adjust tests/torture.at:Non-literal AC_CONFIG_SUBDIRS.
+if test "x$package_foo_enabled" = xyes; then
+ my_subdirs="$my_subdirs foo"
+fi
+AC_CONFIG_SUBDIRS([$my_subdirs])
+@end example
+
+@noindent
+because this prevents @samp{./configure --help=recursive} from
+displaying the options of the package @code{foo}. Instead, you should
+write:
+
+@example
+if test "x$package_foo_enabled" = xyes; then
+ AC_CONFIG_SUBDIRS([foo])
+fi
+@end example
+
+If a given @var{dir} is not found at @command{configure} run time, a
+warning is reported; if the subdirectory is optional, write:
+
+@example
+if test -d "$srcdir/foo"; then
+ AC_CONFIG_SUBDIRS([foo])
+fi
+@end example
+
+@c NB: Yes, below we mean configure.in, not configure.ac.
+If a given @var{dir} contains @command{configure.gnu}, it is run instead
+of @command{configure}. This is for packages that might use a
+non-Autoconf script @command{Configure}, which can't be called through a
+wrapper @command{configure} since it would be the same file on
+case-insensitive file systems. Likewise, if a @var{dir} contains
+@file{configure.in} but no @command{configure}, the Cygnus
+@command{configure} script found by @code{AC_CONFIG_AUX_DIR} is used.
+
+The subdirectory @command{configure} scripts are given the same command
+line options that were given to this @command{configure} script, with minor
+changes if needed, which include:
+
+@itemize @minus
+@item
+adjusting a relative name for the cache file;
+
+@item
+adjusting a relative name for the source directory;
+
+@item
+propagating the current value of @code{$prefix}, including if it was
+defaulted, and if the default values of the top level and of the subdirectory
+@file{configure} differ.
+@end itemize
+
+This macro also sets the output variable @code{subdirs} to the list of
+directories @samp{@var{dir} @dots{}}. Make rules can use
+this variable to determine which subdirectories to recurse into.
+
+This macro may be called multiple times.
+@end defmac
+
+@node Default Prefix
+@section Default Prefix
+@cindex Install prefix
+@cindex Prefix for install
+
+By default, @command{configure} sets the prefix for files it installs to
+@file{/usr/local}. The user of @command{configure} can select a different
+prefix using the @option{--prefix} and @option{--exec-prefix} options.
+There are two ways to change the default: when creating
+@command{configure}, and when running it.
+
+Some software packages might want to install in a directory other than
+@file{/usr/local} by default. To accomplish that, use the
+@code{AC_PREFIX_DEFAULT} macro.
+
+@defmac AC_PREFIX_DEFAULT (@var{prefix})
+@acindex{PREFIX_DEFAULT}
+Set the default installation prefix to @var{prefix} instead of
+@file{/usr/local}.
+@end defmac
+
+It may be convenient for users to have @command{configure} guess the
+installation prefix from the location of a related program that they
+have already installed. If you wish to do that, you can call
+@code{AC_PREFIX_PROGRAM}.
+
+@anchor{AC_PREFIX_PROGRAM}
+@defmac AC_PREFIX_PROGRAM (@var{program})
+@acindex{PREFIX_PROGRAM}
+If the user did not specify an installation prefix (using the
+@option{--prefix} option), guess a value for it by looking for
+@var{program} in @env{PATH}, the way the shell does. If @var{program}
+is found, set the prefix to the parent of the directory containing
+@var{program}, else default the prefix as described above
+(@file{/usr/local} or @code{AC_PREFIX_DEFAULT}). For example, if
+@var{program} is @code{gcc} and the @env{PATH} contains
+@file{/usr/local/gnu/bin/gcc}, set the prefix to @file{/usr/local/gnu}.
+@end defmac
+
+
+
+@c ======================================================== Existing tests
+
+@node Existing Tests
+@chapter Existing Tests
+
+These macros test for particular system features that packages might
+need or want to use. If you need to test for a kind of feature that
+none of these macros check for, you can probably do it by calling
+primitive test macros with appropriate arguments (@pxref{Writing
+Tests}).
+
+These tests print messages telling the user which feature they're
+checking for, and what they find. They cache their results for future
+@command{configure} runs (@pxref{Caching Results}).
+
+Some of these macros set output variables. @xref{Makefile
+Substitutions}, for how to get their values. The phrase ``define
+@var{name}'' is used below as a shorthand to mean ``define the C
+preprocessor symbol @var{name} to the value 1''. @xref{Defining
+Symbols}, for how to get those symbol definitions into your program.
+
+@menu
+* Common Behavior:: Macros' standard schemes
+* Alternative Programs:: Selecting between alternative programs
+* Files:: Checking for the existence of files
+* Libraries:: Library archives that might be missing
+* Library Functions:: C library functions that might be missing
+* Header Files:: Header files that might be missing
+* Declarations:: Declarations that may be missing
+* Structures:: Structures or members that might be missing
+* Types:: Types that might be missing
+* Compilers and Preprocessors:: Checking for compiling programs
+* System Services:: Operating system services
+* Posix Variants:: Special kludges for specific Posix variants
+* Erlang Libraries:: Checking for the existence of Erlang libraries
+@end menu
+
+@node Common Behavior
+@section Common Behavior
+@cindex Common autoconf behavior
+
+Much effort has been expended to make Autoconf easy to learn. The most
+obvious way to reach this goal is simply to enforce standard interfaces
+and behaviors, avoiding exceptions as much as possible. Because of
+history and inertia, unfortunately, there are still too many exceptions
+in Autoconf; nevertheless, this section describes some of the common
+rules.
+
+@menu
+* Standard Symbols:: Symbols defined by the macros
+* Default Includes:: Includes used by the generic macros
+@end menu
+
+@node Standard Symbols
+@subsection Standard Symbols
+@cindex Standard symbols
+
+All the generic macros that @code{AC_DEFINE} a symbol as a result of
+their test transform their @var{argument} values to a standard alphabet.
+First, @var{argument} is converted to upper case and any asterisks
+(@samp{*}) are each converted to @samp{P}. Any remaining characters
+that are not alphanumeric are converted to underscores.
+
+For instance,
+
+@example
+AC_CHECK_TYPES([struct $Expensive*])
+@end example
+
+@noindent
+defines the symbol @samp{HAVE_STRUCT__EXPENSIVEP} if the check
+succeeds.
+
+
+@node Default Includes
+@subsection Default Includes
+@cindex Default includes
+@cindex Includes, default
+
+Several tests depend upon a set of header files. Since these headers
+are not universally available, tests actually have to provide a set of
+protected includes, such as:
+
+@example
+@group
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+@end group
+@end example
+
+@noindent
+Unless you know exactly what you are doing, you should avoid using
+unconditional includes, and check the existence of the headers you
+include beforehand (@pxref{Header Files}).
+
+Most generic macros use the following macro to provide the default set
+of includes:
+
+@defmac AC_INCLUDES_DEFAULT (@ovar{include-directives})
+@acindex{INCLUDES_DEFAULT}
+Expand to @var{include-directives} if defined, otherwise to:
+
+@example
+@group
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+@end group
+@end example
+
+If the default includes are used, then check for the presence of these
+headers and their compatibility, i.e., you don't need to run
+@code{AC_HEADER_STDC}, nor check for @file{stdlib.h} etc.
+
+These headers are checked for in the same order as they are included.
+For instance, on some systems @file{string.h} and @file{strings.h} both
+exist, but conflict. Then @code{HAVE_STRING_H} is defined, not
+@code{HAVE_STRINGS_H}.
+@end defmac
+
+@node Alternative Programs
+@section Alternative Programs
+@cindex Programs, checking
+
+These macros check for the presence or behavior of particular programs.
+They are used to choose between several alternative programs and to
+decide what to do once one has been chosen. If there is no macro
+specifically defined to check for a program you need, and you don't need
+to check for any special properties of it, then you can use one of the
+general program-check macros.
+
+@menu
+* Particular Programs:: Special handling to find certain programs
+* Generic Programs:: How to find other programs
+@end menu
+
+@node Particular Programs
+@subsection Particular Program Checks
+
+These macros check for particular programs---whether they exist, and
+in some cases whether they support certain features.
+
+@defmac AC_PROG_AWK
+@acindex{PROG_AWK}
+@ovindex AWK
+@caindex prog_AWK
+Check for @code{gawk}, @code{mawk}, @code{nawk}, and @code{awk}, in that
+order, and set output variable @code{AWK} to the first one that is found.
+It tries @code{gawk} first because that is reported to be the
+best implementation. The result can be overridden by setting the
+variable @code{AWK} or the cache variable @code{ac_cv_prog_AWK}.
+
+Using this macro is sufficient to avoid the pitfalls of traditional
+@command{awk} (@pxref{awk, , Limitations of Usual Tools}).
+@end defmac
+
+@defmac AC_PROG_GREP
+@acindex{PROG_GREP}
+@ovindex GREP
+@caindex prog_GREP
+Look for the best available @code{grep} or @code{ggrep} that accepts the
+longest input lines possible, and that supports multiple @option{-e} options.
+Set the output variable @code{GREP} to whatever is chosen.
+@xref{grep, , Limitations of Usual Tools}, for more information about
+portability problems with the @command{grep} command family. The result
+can be overridden by setting the @code{GREP} variable and is cached in the
+@code{ac_cv_path_GREP} variable.
+@end defmac
+
+@defmac AC_PROG_EGREP
+@acindex{PROG_EGREP}
+@ovindex EGREP
+@caindex prog_EGREP
+Check whether @code{$GREP -E} works, or else look for the best available
+@code{egrep} or @code{gegrep} that accepts the longest input lines possible.
+Set the output variable @code{EGREP} to whatever is chosen. The result
+can be overridden by setting the @code{EGREP} variable and is cached in the
+@code{ac_cv_path_EGREP} variable.
+@end defmac
+
+@defmac AC_PROG_FGREP
+@acindex{PROG_FGREP}
+@ovindex FGREP
+@caindex prog_FGREP
+Check whether @code{$GREP -F} works, or else look for the best available
+@code{fgrep} or @code{gfgrep} that accepts the longest input lines possible.
+Set the output variable @code{FGREP} to whatever is chosen. The result
+can be overridden by setting the @code{FGREP} variable and is cached in the
+@code{ac_cv_path_FGREP} variable.
+@end defmac
+
+@defmac AC_PROG_INSTALL
+@acindex{PROG_INSTALL}
+@ovindex INSTALL
+@ovindex INSTALL_PROGRAM
+@ovindex INSTALL_DATA
+@ovindex INSTALL_SCRIPT
+@caindex path_install
+Set output variable @code{INSTALL} to the name of a BSD-compatible
+@command{install} program, if one is found in the current @env{PATH}.
+Otherwise, set @code{INSTALL} to @samp{@var{dir}/install-sh -c},
+checking the directories specified to @code{AC_CONFIG_AUX_DIR} (or its
+default directories) to determine @var{dir} (@pxref{Output}). Also set
+the variables @code{INSTALL_PROGRAM} and @code{INSTALL_SCRIPT} to
+@samp{$@{INSTALL@}} and @code{INSTALL_DATA} to @samp{$@{INSTALL@} -m 644}.
+
+@samp{@@INSTALL@@} is special, as its value may vary for different
+configuration files.
+
+This macro screens out various instances of @command{install} known not to
+work. It prefers to find a C program rather than a shell script, for
+speed. Instead of @file{install-sh}, it can also use @file{install.sh},
+but that name is obsolete because some @command{make} programs have a rule
+that creates @file{install} from it if there is no makefile. Further, this
+macro requires @command{install} to be able to install multiple files into a
+target directory in a single invocation.
+
+Autoconf comes with a copy of @file{install-sh} that you can use. If
+you use @code{AC_PROG_INSTALL}, you must include either
+@file{install-sh} or @file{install.sh} in your distribution; otherwise
+@command{configure} produces an error message saying it can't find
+them---even if the system you're on has a good @command{install} program.
+This check is a safety measure to prevent you from accidentally leaving
+that file out, which would prevent your package from installing on
+systems that don't have a BSD-compatible @command{install} program.
+
+If you need to use your own installation program because it has features
+not found in standard @command{install} programs, there is no reason to use
+@code{AC_PROG_INSTALL}; just put the file name of your program into your
+@file{Makefile.in} files.
+
+The result of the test can be overridden by setting the variable
+@code{INSTALL} or the cache variable @code{ac_cv_path_install}.
+@end defmac
+
+@defmac AC_PROG_MKDIR_P
+@acindex{PROG_MKDIR_P}
+@ovindex MKDIR_P
+@caindex path_mkdir
+Set output variable @code{MKDIR_P} to a program that ensures that for
+each argument, a directory named by this argument exists, creating it
+and its parent directories if needed, and without race conditions when
+two instances of the program attempt to make the same directory at
+nearly the same time.
+
+This macro uses the @samp{mkdir -p} command if possible. Otherwise, it
+falls back on invoking @command{install-sh} with the @option{-d} option,
+so your package should
+contain @file{install-sh} as described under @code{AC_PROG_INSTALL}.
+An @file{install-sh} file that predates Autoconf 2.60 or Automake 1.10
+is vulnerable to race conditions, so if you want to support parallel
+installs from
+different packages into the same directory you need to make sure you
+have an up-to-date @file{install-sh}. In particular, be careful about
+using @samp{autoreconf -if} if your Automake predates Automake 1.10.
+
+This macro is related to the @code{AS_MKDIR_P} macro (@pxref{Programming
+in M4sh}), but it sets an output variable intended for use in other
+files, whereas @code{AS_MKDIR_P} is intended for use in scripts like
+@command{configure}. Also, @code{AS_MKDIR_P} does not accept options,
+but @code{MKDIR_P} supports the @option{-m} option, e.g., a makefile
+might invoke @code{$(MKDIR_P) -m 0 dir} to create an inaccessible
+directory, and conversely a makefile should use @code{$(MKDIR_P) --
+$(FOO)} if @var{FOO} might yield a value that begins with @samp{-}.
+Finally, @code{AS_MKDIR_P} does not check for race condition
+vulnerability, whereas @code{AC_PROG_MKDIR_P} does.
+
+@samp{@@MKDIR_P@@} is special, as its value may vary for different
+configuration files.
+
+The result of the test can be overridden by setting the variable
+@code{MKDIR_P} or the cache variable @code{ac_cv_path_mkdir}.
+@end defmac
+
+@anchor{AC_PROG_LEX}
+@defmac AC_PROG_LEX
+@acindex{PROG_LEX}
+@ovindex LEX
+@ovindex LEXLIB
+@cvindex YYTEXT_POINTER
+@ovindex LEX_OUTPUT_ROOT
+@caindex prog_LEX
+If @code{flex} is found, set output variable @code{LEX} to @samp{flex}
+and @code{LEXLIB} to @option{-lfl}, if that library is in a standard
+place. Otherwise set @code{LEX} to @samp{lex} and @code{LEXLIB} to
+@option{-ll}, if found. If neither variant is available, set @code{LEX}
+to @samp{:}; for packages that ship the generated @file{file.yy.c}
+alongside the source @file{file.l}, this default allows users without a
+lexer generator to still build the package even if the timestamp for
+@file{file.l} is inadvertently changed.
+
+Define @code{YYTEXT_POINTER} if @code{yytext} defaults to @samp{char *} instead
+of to @samp{char []}. Also set output variable @code{LEX_OUTPUT_ROOT} to
+the base of the file name that the lexer generates; usually
+@file{lex.yy}, but sometimes something else. These results vary
+according to whether @code{lex} or @code{flex} is being used.
+
+You are encouraged to use Flex in your sources, since it is both more
+pleasant to use than plain Lex and the C source it produces is portable.
+In order to ensure portability, however, you must either provide a
+function @code{yywrap} or, if you don't use it (e.g., your scanner has
+no @samp{#include}-like feature), simply include a @samp{%noyywrap}
+statement in the scanner's source. Once this done, the scanner is
+portable (unless @emph{you} felt free to use nonportable constructs) and
+does not depend on any library. In this case, and in this case only, it
+is suggested that you use this Autoconf snippet:
+
+@example
+AC_PROG_LEX
+if test "x$LEX" != xflex; then
+ LEX="$SHELL $missing_dir/missing flex"
+ AC_SUBST([LEX_OUTPUT_ROOT], [lex.yy])
+ AC_SUBST([LEXLIB], [''])
+fi
+@end example
+
+The shell script @command{missing} can be found in the Automake
+distribution.
+
+Remember that the user may have supplied an alternate location in
+@env{LEX}, so if Flex is required, it is better to check that the user
+provided something sufficient by parsing the output of @samp{$LEX
+--version} than by simply relying on @code{test "x$LEX" = xflex}.
+
+To ensure backward compatibility, Automake's @code{AM_PROG_LEX} invokes
+(indirectly) this macro twice, which causes an annoying but benign
+``@code{AC_PROG_LEX} invoked multiple times'' warning. Future versions
+of Automake will fix this issue; meanwhile, just ignore this message.
+
+As part of running the test, this macro may delete any file in the
+configuration directory named @file{lex.yy.c} or @file{lexyy.c}.
+
+The result of this test can be influenced by setting the variable
+@code{LEX} or the cache variable @code{ac_cv_prog_LEX}.
+@end defmac
+
+@anchor{AC_PROG_LN_S}
+@defmac AC_PROG_LN_S
+@acindex{PROG_LN_S}
+@ovindex LN_S
+If @samp{ln -s} works on the current file system (the operating system
+and file system support symbolic links), set the output variable
+@code{LN_S} to @samp{ln -s}; otherwise, if @samp{ln} works, set
+@code{LN_S} to @samp{ln}, and otherwise set it to @samp{cp -pR}.
+
+If you make a link in a directory other than the current directory, its
+meaning depends on whether @samp{ln} or @samp{ln -s} is used. To safely
+create links using @samp{$(LN_S)}, either find out which form is used
+and adjust the arguments, or always invoke @code{ln} in the directory
+where the link is to be created.
+
+In other words, it does not work to do:
+@example
+$(LN_S) foo /x/bar
+@end example
+
+Instead, do:
+
+@example
+(cd /x && $(LN_S) foo bar)
+@end example
+@end defmac
+
+@defmac AC_PROG_RANLIB
+@acindex{PROG_RANLIB}
+@ovindex RANLIB
+@c @caindex prog_RANLIB
+@c @caindex prog_ac_ct_RANLIB
+Set output variable @code{RANLIB} to @samp{ranlib} if @code{ranlib}
+is found, and otherwise to @samp{:} (do nothing).
+@end defmac
+
+@defmac AC_PROG_SED
+@acindex{PROG_SED}
+@ovindex SED
+@caindex path_SED
+Set output variable @code{SED} to a Sed implementation that conforms to
+Posix and does not have arbitrary length limits. Report an error if no
+acceptable Sed is found. @xref{sed, , Limitations of Usual Tools}, for more
+information about portability problems with Sed.
+
+The result of this test can be overridden by setting the @code{SED} variable
+and is cached in the @code{ac_cv_path_SED} variable.
+@end defmac
+
+@defmac AC_PROG_YACC
+@acindex{PROG_YACC}
+@evindex YACC
+@evindex YFLAGS
+@ovindex YACC
+@caindex prog_YACC
+If @code{bison} is found, set output variable @code{YACC} to @samp{bison
+-y}. Otherwise, if @code{byacc} is found, set @code{YACC} to
+@samp{byacc}. Otherwise set @code{YACC} to @samp{yacc}.
+The result of this test can be influenced by setting the variable
+@code{YACC} or the cache variable @code{ac_cv_prog_YACC}.
+@end defmac
+
+@node Generic Programs
+@subsection Generic Program and File Checks
+
+These macros are used to find programs not covered by the ``particular''
+test macros. If you need to check the behavior of a program as well as
+find out whether it is present, you have to write your own test for it
+(@pxref{Writing Tests}). By default, these macros use the environment
+variable @env{PATH}. If you need to check for a program that might not
+be in the user's @env{PATH}, you can pass a modified path to use
+instead, like this:
+
+@example
+AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd],
+ [$PATH$PATH_SEPARATOR/usr/libexec$PATH_SEPARATOR]dnl
+[/usr/sbin$PATH_SEPARATOR/usr/etc$PATH_SEPARATOR/etc])
+@end example
+
+You are strongly encouraged to declare the @var{variable} passed to
+@code{AC_CHECK_PROG} etc.@: as precious. @xref{Setting Output Variables},
+@code{AC_ARG_VAR}, for more details.
+
+@anchor{AC_CHECK_PROG}
+@defmac AC_CHECK_PROG (@var{variable}, @var{prog-to-check-for}, @
+ @var{value-if-found}, @ovar{value-if-not-found}, @dvar{path, $PATH}, @
+ @ovar{reject})
+@acindex{CHECK_PROG}
+@caindex prog_@var{variable}
+Check whether program @var{prog-to-check-for} exists in @var{path}. If
+it is found, set @var{variable} to @var{value-if-found}, otherwise to
+@var{value-if-not-found}, if given. Always pass over @var{reject} (an
+absolute file name) even if it is the first found in the search path; in
+that case, set @var{variable} using the absolute file name of the
+@var{prog-to-check-for} found that is not @var{reject}. If
+@var{variable} was already set, do nothing. Calls @code{AC_SUBST} for
+@var{variable}. The result of this test can be overridden by setting the
+@var{variable} variable or the cache variable
+@code{ac_cv_prog_@var{variable}}.
+@end defmac
+
+@anchor{AC_CHECK_PROGS}
+@defmac AC_CHECK_PROGS (@var{variable}, @var{progs-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{CHECK_PROGS}
+@caindex prog_@var{variable}
+Check for each program in the blank-separated list
+@var{progs-to-check-for} existing in the @var{path}. If one is found, set
+@var{variable} to the name of that program. Otherwise, continue
+checking the next program in the list. If none of the programs in the
+list are found, set @var{variable} to @var{value-if-not-found}; if
+@var{value-if-not-found} is not specified, the value of @var{variable}
+is not changed. Calls @code{AC_SUBST} for @var{variable}. The result of
+this test can be overridden by setting the @var{variable} variable or the
+cache variable @code{ac_cv_prog_@var{variable}}.
+@end defmac
+
+@defmac AC_CHECK_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{CHECK_TARGET_TOOL}
+Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
+with a prefix of the target type as determined by
+@code{AC_CANONICAL_TARGET}, followed by a dash (@pxref{Canonicalizing}).
+If the tool cannot be found with a prefix, and if the build and target
+types are equal, then it is also searched for without a prefix.
+
+As noted in @ref{Specifying Target Triplets}, the
+target is rarely specified, because most of the time it is the same
+as the host: it is the type of system for which any compiler tool in
+the package produces code. What this macro looks for is,
+for example, @emph{a tool @r{(assembler, linker, etc.)}@: that the
+compiler driver @r{(@command{gcc} for the GNU C Compiler)}
+uses to produce objects, archives or executables}.
+@end defmac
+
+@defmac AC_CHECK_TOOL (@var{variable}, @var{prog-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{CHECK_TOOL}
+@c @caindex prog_@var{VARIABLE}
+@c @caindex prog_ac_ct_@var{VARIABLE}
+Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
+with a prefix of the host type as specified by @option{--host}, followed by a
+dash. For example, if the user runs
+@samp{configure --build=x86_64-gnu --host=i386-gnu}, then this call:
+@example
+AC_CHECK_TOOL([RANLIB], [ranlib], [:])
+@end example
+@noindent
+sets @code{RANLIB} to @file{i386-gnu-ranlib} if that program exists in
+@var{path}, or otherwise to @samp{ranlib} if that program exists in
+@var{path}, or to @samp{:} if neither program exists.
+
+When cross-compiling, this macro will issue a warning if no program
+prefixed with the host type could be found.
+For more information, see @ref{Specifying Target Triplets}.
+@end defmac
+
+@defmac AC_CHECK_TARGET_TOOLS (@var{variable}, @var{progs-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{CHECK_TARGET_TOOLS}
+Like @code{AC_CHECK_TARGET_TOOL}, each of the tools in the list
+@var{progs-to-check-for} are checked with a prefix of the target type as
+determined by @code{AC_CANONICAL_TARGET}, followed by a dash
+(@pxref{Canonicalizing}). If none of the tools can be found with a
+prefix, and if the build and target types are equal, then the first one
+without a prefix is used. If a tool is found, set @var{variable} to
+the name of that program. If none of the tools in the list are found,
+set @var{variable} to @var{value-if-not-found}; if @var{value-if-not-found}
+is not specified, the value of @var{variable} is not changed. Calls
+@code{AC_SUBST} for @var{variable}.
+@end defmac
+
+@defmac AC_CHECK_TOOLS (@var{variable}, @var{progs-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{CHECK_TOOLS}
+Like @code{AC_CHECK_TOOL}, each of the tools in the list
+@var{progs-to-check-for} are checked with a prefix of the host type as
+determined by @code{AC_CANONICAL_HOST}, followed by a dash
+(@pxref{Canonicalizing}). If none of the tools can be found with a
+prefix, then the first one without a prefix is used. If a tool is found,
+set @var{variable} to the name of that program. If none of the tools in
+the list are found, set @var{variable} to @var{value-if-not-found}; if
+@var{value-if-not-found} is not specified, the value of @var{variable}
+is not changed. Calls @code{AC_SUBST} for @var{variable}.
+
+When cross-compiling, this macro will issue a warning if no program
+prefixed with the host type could be found.
+For more information, see @ref{Specifying Target Triplets}.
+@end defmac
+
+@anchor{AC_PATH_PROG}
+@defmac AC_PATH_PROG (@var{variable}, @var{prog-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{PATH_PROG}
+@caindex path_@var{variable}
+Like @code{AC_CHECK_PROG}, but set @var{variable} to the absolute
+name of @var{prog-to-check-for} if found. The result of this test
+can be overridden by setting the @var{variable} variable. A positive
+result of this test is cached in the @code{ac_cv_path_@var{variable}}
+variable.
+@end defmac
+
+@anchor{AC_PATH_PROGS}
+@defmac AC_PATH_PROGS (@var{variable}, @var{progs-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{PATH_PROGS}
+@caindex path_@var{variable}
+Like @code{AC_CHECK_PROGS}, but if any of @var{progs-to-check-for}
+are found, set @var{variable} to the absolute name of the program
+found. The result of this test can be overridden by setting the
+@var{variable} variable. A positive result of this test is cached in
+the @code{ac_cv_path_@var{variable}} variable.
+@end defmac
+
+@defmac AC_PATH_PROGS_FEATURE_CHECK (@var{variable}, @
+ @var{progs-to-check-for}, @var{feature-test}, @
+ @ovar{action-if-not-found}, @dvar{path, $PATH})
+@acindex{PATH_PROGS_FEATURE_CHECK}
+@caindex path_@var{variable}
+@vrindex ac_path_@var{variable}
+@vrindex ac_path_@var{variable}_found
+This macro was introduced in Autoconf 2.62. If @var{variable} is not
+empty, then set the cache variable @code{ac_cv_path_@var{variable}} to
+its value. Otherwise, check for each program in the blank-separated
+list @var{progs-to-check-for} existing in @var{path}. For each program
+found, execute @var{feature-test} with @code{ac_path_@var{variable}}
+set to the absolute name of the candidate program. If no invocation of
+@var{feature-test} sets the shell variable
+@code{ac_cv_path_@var{variable}}, then @var{action-if-not-found} is
+executed. @var{feature-test} will be run even when
+@code{ac_cv_path_@var{variable}} is set, to provide the ability to
+choose a better candidate found later in @var{path}; to accept the
+current setting and bypass all further checks, @var{feature-test} can
+execute @code{ac_path_@var{variable}_found=:}.
+
+Note that this macro has some subtle differences from
+@code{AC_CHECK_PROGS}. It is designed to be run inside
+@code{AC_CACHE_VAL}, therefore, it should have no side effects. In
+particular, @var{variable} is not set to the final value of
+@code{ac_cv_path_@var{variable}}, nor is @code{AC_SUBST} automatically
+run. Also, on failure, any action can be performed, whereas
+@code{AC_CHECK_PROGS} only performs
+@code{@var{variable}=@var{value-if-not-found}}.
+
+Here is an example, similar to what Autoconf uses in its own configure
+script. It will search for an implementation of @command{m4} that
+supports the @code{indir} builtin, even if it goes by the name
+@command{gm4} or is not the first implementation on @env{PATH}.
+
+@example
+AC_CACHE_CHECK([for m4 that supports indir], [ac_cv_path_M4],
+ [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4],
+ [[m4out=`echo 'changequote([,])indir([divnum])' | $ac_path_M4`
+ test "x$m4out" = x0 \
+ && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]],
+ [AC_MSG_ERROR([could not find m4 that supports indir])])])
+AC_SUBST([M4], [$ac_cv_path_M4])
+@end example
+@end defmac
+
+@defmac AC_PATH_TARGET_TOOL (@var{variable}, @var{prog-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{PATH_TARGET_TOOL}
+Like @code{AC_CHECK_TARGET_TOOL}, but set @var{variable} to the absolute
+name of the program if it is found.
+@end defmac
+
+@defmac AC_PATH_TOOL (@var{variable}, @var{prog-to-check-for}, @
+ @ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{PATH_TOOL}
+Like @code{AC_CHECK_TOOL}, but set @var{variable} to the absolute
+name of the program if it is found.
+
+When cross-compiling, this macro will issue a warning if no program
+prefixed with the host type could be found.
+For more information, see @ref{Specifying Target Triplets}.
+@end defmac
+
+
+@node Files
+@section Files
+@cindex File, checking
+
+You might also need to check for the existence of files. Before using
+these macros, ask yourself whether a runtime test might not be a better
+solution. Be aware that, like most Autoconf macros, they test a feature
+of the host machine, and therefore, they die when cross-compiling.
+
+@defmac AC_CHECK_FILE (@var{file}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{CHECK_FILE}
+@caindex file_@var{file}
+Check whether file @var{file} exists on the native system. If it is
+found, execute @var{action-if-found}, otherwise do
+@var{action-if-not-found}, if given. The result of this test is cached
+in the @code{ac_cv_file_@var{file}} variable, with characters not
+suitable for a variable name mapped to underscores.
+@end defmac
+
+@defmac AC_CHECK_FILES (@var{files}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{CHECK_FILES}
+@caindex file_@var{file}
+Executes @code{AC_CHECK_FILE} once for each file listed in @var{files}.
+Additionally, defines @samp{HAVE_@var{file}} (@pxref{Standard Symbols})
+for each file found. The results of each test are cached in the
+@code{ac_cv_file_@var{file}} variable, with characters not suitable for
+a variable name mapped to underscores.
+@end defmac
+
+
+@node Libraries
+@section Library Files
+@cindex Library, checking
+
+The following macros check for the presence of certain C, C++, Fortran,
+or Go library archive files.
+
+@anchor{AC_CHECK_LIB}
+@defmac AC_CHECK_LIB (@var{library}, @var{function}, @
+ @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
+@acindex{CHECK_LIB}
+@caindex lib_@var{library}_@var{function}
+Test whether the library @var{library} is available by trying to link
+a test program that calls function @var{function} with the library.
+@var{function} should be a function provided by the library.
+Use the base
+name of the library; e.g., to check for @option{-lmp}, use @samp{mp} as
+the @var{library} argument.
+
+@var{action-if-found} is a list of shell commands to run if the link
+with the library succeeds; @var{action-if-not-found} is a list of shell
+commands to run if the link fails. If @var{action-if-found} is not
+specified, the default action prepends @option{-l@var{library}} to
+@code{LIBS} and defines @samp{HAVE_LIB@var{library}} (in all
+capitals). This macro is intended to support building @code{LIBS} in
+a right-to-left (least-dependent to most-dependent) fashion such that
+library dependencies are satisfied as a natural side effect of
+consecutive tests. Linkers are sensitive to library ordering
+so the order in which @code{LIBS} is generated is important to reliable
+detection of libraries.
+
+If linking with @var{library} results in unresolved symbols that would
+be resolved by linking with additional libraries, give those libraries
+as the @var{other-libraries} argument, separated by spaces:
+e.g., @option{-lXt -lX11}. Otherwise, this macro may fail to detect
+that @var{library} is present, because linking the test program can
+fail with unresolved symbols. The @var{other-libraries} argument
+should be limited to cases where it is desirable to test for one library
+in the presence of another that is not already in @code{LIBS}.
+
+@code{AC_CHECK_LIB} requires some care in usage, and should be avoided
+in some common cases. Many standard functions like @code{gethostbyname}
+appear in the standard C library on some hosts, and in special libraries
+like @code{nsl} on other hosts. On some hosts the special libraries
+contain variant implementations that you may not want to use. These
+days it is normally better to use @code{AC_SEARCH_LIBS([gethostbyname],
+[nsl])} instead of @code{AC_CHECK_LIB([nsl], [gethostbyname])}.
+
+The result of this test is cached in the
+@code{ac_cv_lib_@var{library}_@var{function}} variable.
+@end defmac
+
+@anchor{AC_SEARCH_LIBS}
+@defmac AC_SEARCH_LIBS (@var{function}, @var{search-libs}, @
+ @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
+@acindex{SEARCH_LIBS}
+@caindex search_@var{function}
+Search for a library defining @var{function} if it's not already
+available. This equates to calling
+@samp{AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])])} first with
+no libraries, then for each library listed in @var{search-libs}.
+
+Prepend @option{-l@var{library}} to @code{LIBS} for the first library found
+to contain @var{function}, and run @var{action-if-found}. If the
+function is not found, run @var{action-if-not-found}.
+
+If linking with @var{library} results in unresolved symbols that would
+be resolved by linking with additional libraries, give those libraries
+as the @var{other-libraries} argument, separated by spaces:
+e.g., @option{-lXt -lX11}. Otherwise, this macro fails to detect
+that @var{function} is present, because linking the test program
+always fails with unresolved symbols.
+
+The result of this test is cached in the
+@code{ac_cv_search_@var{function}} variable as @samp{none required} if
+@var{function} is already available, as @samp{no} if no library
+containing @var{function} was found, otherwise as the
+@option{-l@var{library}} option that needs to be prepended to @code{LIBS}.
+@end defmac
+
+
+
+@node Library Functions
+@section Library Functions
+
+The following macros check for particular C library functions.
+If there is no macro specifically defined to check for a function you need,
+and you don't need to check for any special properties of
+it, then you can use one of the general function-check macros.
+
+@menu
+* Function Portability:: Pitfalls with usual functions
+* Particular Functions:: Special handling to find certain functions
+* Generic Functions:: How to find other functions
+@end menu
+
+@node Function Portability
+@subsection Portability of C Functions
+@cindex Portability of C functions
+@cindex C function portability
+
+Most usual functions can either be missing, or be buggy, or be limited
+on some architectures. This section tries to make an inventory of these
+portability issues. By definition, this list always requires
+additions. A much more complete list is maintained by the Gnulib
+project (@pxref{Gnulib}), covering @ref{Function Substitutes, ,
+Current Posix Functions, gnulib, GNU gnulib}, @ref{Legacy Function
+Substitutes, , Legacy Functions, gnulib, GNU gnulib}, and @ref{Glibc
+Function Substitutes, , Glibc Functions, gnulib, GNU gnulib}. Please
+help us keep the gnulib list as complete as possible.
+
+@table @asis
+@item @code{exit}
+@c @fuindex exit
+@prindex @code{exit}
+On ancient hosts, @code{exit} returned @code{int}.
+This is because @code{exit} predates @code{void}, and there was a long
+tradition of it returning @code{int}.
+
+On current hosts, the problem more likely is that @code{exit} is not
+declared, due to C++ problems of some sort or another. For this reason
+we suggest that test programs not invoke @code{exit}, but return from
+@code{main} instead.
+
+@item @code{free}
+@c @fuindex free
+@prindex @code{free}
+The C standard says a call @code{free (NULL)} does nothing, but
+some old systems don't support this (e.g., NextStep).
+
+@item @code{isinf}
+@itemx @code{isnan}
+@c @fuindex isinf
+@c @fuindex isnan
+@prindex @code{isinf}
+@prindex @code{isnan}
+The C99 standard says that @code{isinf} and @code{isnan} are
+macros. On some systems just macros are available
+(e.g., HP-UX and Solaris 10), on
+some systems both macros and functions (e.g., glibc 2.3.2), and on some
+systems only functions (e.g., IRIX 6 and Solaris 9). In some cases
+these functions are declared in nonstandard headers like
+@code{<sunmath.h>} and defined in non-default libraries like
+@option{-lm} or @option{-lsunmath}.
+
+The C99 @code{isinf} and @code{isnan} macros work correctly with
+@code{long double} arguments, but pre-C99 systems that use functions
+typically assume @code{double} arguments. On such a system,
+@code{isinf} incorrectly returns true for a finite @code{long double}
+argument that is outside the range of @code{double}.
+
+The best workaround for these issues is to use gnulib modules
+@code{isinf} and @code{isnan} (@pxref{Gnulib}). But a lighter weight
+solution involves code like the following.
+
+@smallexample
+#include <math.h>
+
+#ifndef isnan
+# define isnan(x) \
+ (sizeof (x) == sizeof (long double) ? isnan_ld (x) \
+ : sizeof (x) == sizeof (double) ? isnan_d (x) \
+ : isnan_f (x))
+static inline int isnan_f (float x) @{ return x != x; @}
+static inline int isnan_d (double x) @{ return x != x; @}
+static inline int isnan_ld (long double x) @{ return x != x; @}
+#endif
+
+#ifndef isinf
+# define isinf(x) \
+ (sizeof (x) == sizeof (long double) ? isinf_ld (x) \
+ : sizeof (x) == sizeof (double) ? isinf_d (x) \
+ : isinf_f (x))
+static inline int isinf_f (float x)
+@{ return !isnan (x) && isnan (x - x); @}
+static inline int isinf_d (double x)
+@{ return !isnan (x) && isnan (x - x); @}
+static inline int isinf_ld (long double x)
+@{ return !isnan (x) && isnan (x - x); @}
+#endif
+@end smallexample
+
+Use @code{AC_C_INLINE} (@pxref{C Compiler}) so that this code works on
+compilers that lack the @code{inline} keyword. Some optimizing
+compilers mishandle these definitions, but systems with that bug
+typically have many other floating point corner-case compliance problems
+anyway, so it's probably not worth worrying about.
+
+@item @code{malloc}
+@c @fuindex malloc
+@prindex @code{malloc}
+The C standard says a call @code{malloc (0)} is implementation
+dependent. It can return either @code{NULL} or a new non-null pointer.
+The latter is more common (e.g., the GNU C Library) but is by
+no means universal. @code{AC_FUNC_MALLOC}
+can be used to insist on non-@code{NULL} (@pxref{Particular Functions}).
+
+@item @code{putenv}
+@c @fuindex putenv
+@prindex @code{putenv}
+Posix prefers @code{setenv} to @code{putenv}; among other things,
+@code{putenv} is not required of all Posix implementations, but
+@code{setenv} is.
+
+Posix specifies that @code{putenv} puts the given string directly in
+@code{environ}, but some systems make a copy of it instead (e.g.,
+glibc 2.0, or BSD). And when a copy is made, @code{unsetenv} might
+not free it, causing a memory leak (e.g., FreeBSD 4).
+
+On some systems @code{putenv ("FOO")} removes @samp{FOO} from the
+environment, but this is not standard usage and it dumps core
+on some systems (e.g., AIX).
+
+On MinGW, a call @code{putenv ("FOO=")} removes @samp{FOO} from the
+environment, rather than inserting it with an empty value.
+
+@item @code{realloc}
+@c @fuindex realloc
+@prindex @code{realloc}
+The C standard says a call @code{realloc (NULL, size)} is equivalent
+to @code{malloc (size)}, but some old systems don't support this (e.g.,
+NextStep).
+
+@item @code{signal} handler
+@c @fuindex signal
+@prindex @code{signal}
+@prindex @code{sigaction}
+Normally @code{signal} takes a handler function with a return type of
+@code{void}, but some old systems required @code{int} instead. Any
+actual @code{int} value returned is not used; this is only a
+difference in the function prototype demanded.
+
+All systems we know of in current use return @code{void}. The
+@code{int} was to support K&R C, where of course @code{void} is not
+available. The obsolete macro @code{AC_TYPE_SIGNAL}
+(@pxref{AC_TYPE_SIGNAL}) can be used to establish the correct type in
+all cases.
+
+In most cases, it is more robust to use @code{sigaction} when it is
+available, rather than @code{signal}.
+
+@item @code{snprintf}
+@c @fuindex snprintf
+@prindex @code{snprintf}
+@c @fuindex vsnprintf
+@prindex @code{vsnprintf}
+The C99 standard says that if the output array isn't big enough
+and if no other errors occur, @code{snprintf} and @code{vsnprintf}
+truncate the output and return the number of bytes that ought to have
+been produced. Some older systems return the truncated length (e.g.,
+GNU C Library 2.0.x or IRIX 6.5), some a negative value
+(e.g., earlier GNU C Library versions), and some the buffer
+length without truncation (e.g., 32-bit Solaris 7). Also, some buggy
+older systems ignore the length and overrun the buffer (e.g., 64-bit
+Solaris 7).
+
+@item @code{sprintf}
+@c @fuindex sprintf
+@prindex @code{sprintf}
+@c @fuindex vsprintf
+@prindex @code{vsprintf}
+The C standard says @code{sprintf} and @code{vsprintf} return the
+number of bytes written. On some ancient systems (SunOS 4 for
+instance) they return the buffer pointer instead, but these no
+longer need to be worried about.
+
+@item @code{sscanf}
+@c @fuindex sscanf
+@prindex @code{sscanf}
+On various old systems, e.g., HP-UX 9, @code{sscanf} requires
+that its
+input string be writable (though it doesn't actually change it). This
+can be a problem when using @command{gcc} since it normally puts
+constant strings in read-only memory (@pxref{Incompatibilities,
+Incompatibilities of GCC, , gcc, Using and
+Porting the GNU Compiler Collection}). Apparently in some cases even
+having format strings read-only can be a problem.
+
+@item @code{strerror_r}
+@c @fuindex strerror_r
+@prindex @code{strerror_r}
+Posix specifies that @code{strerror_r} returns an @code{int}, but many
+systems (e.g., GNU C Library version 2.2.4) provide a
+different version returning a @code{char *}. @code{AC_FUNC_STRERROR_R}
+can detect which is in use (@pxref{Particular Functions}).
+
+@item @code{strnlen}
+@c @fuindex strnlen
+@prindex @code{strnlen}
+AIX 4.3 provides a broken version which produces the
+following results:
+
+@example
+strnlen ("foobar", 0) = 0
+strnlen ("foobar", 1) = 3
+strnlen ("foobar", 2) = 2
+strnlen ("foobar", 3) = 1
+strnlen ("foobar", 4) = 0
+strnlen ("foobar", 5) = 6
+strnlen ("foobar", 6) = 6
+strnlen ("foobar", 7) = 6
+strnlen ("foobar", 8) = 6
+strnlen ("foobar", 9) = 6
+@end example
+
+@item @code{sysconf}
+@c @fuindex sysconf
+@prindex @code{sysconf}
+@code{_SC_PAGESIZE} is standard, but some older systems (e.g., HP-UX
+9) have @code{_SC_PAGE_SIZE} instead. This can be tested with
+@code{#ifdef}.
+
+@item @code{unlink}
+@c @fuindex unlink
+@prindex @code{unlink}
+The Posix spec says that @code{unlink} causes the given file to be
+removed only after there are no more open file handles for it. Some
+non-Posix hosts have trouble with this requirement, though,
+and some DOS variants even corrupt the file system.
+
+@item @code{unsetenv}
+@c @fuindex unsetenv
+@prindex @code{unsetenv}
+On MinGW, @code{unsetenv} is not available, but a variable @samp{FOO}
+can be removed with a call @code{putenv ("FOO=")}, as described under
+@code{putenv} above.
+
+@item @code{va_copy}
+@c @fuindex va_copy
+@prindex @code{va_copy}
+The C99 standard provides @code{va_copy} for copying
+@code{va_list} variables. It may be available in older environments
+too, though possibly as @code{__va_copy} (e.g., @command{gcc} in strict
+pre-C99 mode). These can be tested with @code{#ifdef}. A fallback to
+@code{memcpy (&dst, &src, sizeof (va_list))} gives maximum
+portability.
+
+@item @code{va_list}
+@c @fuindex va_list
+@prindex @code{va_list}
+@code{va_list} is not necessarily just a pointer. It can be a
+@code{struct} (e.g., @command{gcc} on Alpha), which means @code{NULL} is
+not portable. Or it can be an array (e.g., @command{gcc} in some
+PowerPC configurations), which means as a function parameter it can be
+effectively call-by-reference and library routines might modify the
+value back in the caller (e.g., @code{vsnprintf} in the GNU C Library
+2.1).
+
+@item Signed @code{>>}
+Normally the C @code{>>} right shift of a signed type replicates the
+high bit, giving a so-called ``arithmetic'' shift. But care should be
+taken since Standard C doesn't require that behavior. On those
+few processors without a native arithmetic shift (for instance Cray
+vector systems) zero bits may be shifted in, the same as a shift of an
+unsigned type.
+
+@item Integer @code{/}
+C divides signed integers by truncating their quotient toward zero,
+yielding the same result as Fortran. However, before C99 the standard
+allowed C implementations to take the floor or ceiling of the quotient
+in some cases. Hardly any implementations took advantage of this
+freedom, though, and it's probably not worth worrying about this issue
+nowadays.
+@end table
+
+
+@node Particular Functions
+@subsection Particular Function Checks
+@cindex Function, checking
+
+These macros check for particular C functions---whether they exist, and
+in some cases how they respond when given certain arguments.
+
+@anchor{AC_FUNC_ALLOCA}
+@defmac AC_FUNC_ALLOCA
+@acindex{FUNC_ALLOCA}
+@cvindex C_ALLOCA
+@cvindex HAVE_ALLOCA_H
+@ovindex ALLOCA
+@c @fuindex alloca
+@prindex @code{alloca}
+@hdrindex{alloca.h}
+@c @caindex working_alloca_h
+Check how to get @code{alloca}. Tries to get a builtin version by
+checking for @file{alloca.h} or the predefined C preprocessor macros
+@code{__GNUC__} and @code{_AIX}. If this macro finds @file{alloca.h},
+it defines @code{HAVE_ALLOCA_H}.
+
+If those attempts fail, it looks for the function in the standard C
+library. If any of those methods succeed, it defines
+@code{HAVE_ALLOCA}. Otherwise, it sets the output variable
+@code{ALLOCA} to @samp{$@{LIBOBJDIR@}alloca.o} and defines
+@code{C_ALLOCA} (so programs can periodically call @samp{alloca (0)} to
+garbage collect). This variable is separate from @code{LIBOBJS} so
+multiple programs can share the value of @code{ALLOCA} without needing
+to create an actual library, in case only some of them use the code in
+@code{LIBOBJS}. The @samp{$@{LIBOBJDIR@}} prefix serves the same
+purpose as in @code{LIBOBJS} (@pxref{AC_LIBOBJ vs LIBOBJS}).
+
+This macro does not try to get @code{alloca} from the System V R3
+@file{libPW} or the System V R4 @file{libucb} because those libraries
+contain some incompatible functions that cause trouble. Some versions
+do not even contain @code{alloca} or contain a buggy version. If you
+still want to use their @code{alloca}, use @code{ar} to extract
+@file{alloca.o} from them instead of compiling @file{alloca.c}.
+
+Source files that use @code{alloca} should start with a piece of code
+like the following, to declare it properly.
+
+@example
+@group
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+#elif !defined alloca
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# elif defined _AIX
+# define alloca __alloca
+# elif defined _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# elif !defined HAVE_ALLOCA
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+# endif
+#endif
+@end group
+@end example
+@end defmac
+
+@defmac AC_FUNC_CHOWN
+@acindex{FUNC_CHOWN}
+@cvindex HAVE_CHOWN
+@c @fuindex chown
+@prindex @code{chown}
+@caindex func_chown_works
+If the @code{chown} function is available and works (in particular, it
+should accept @option{-1} for @code{uid} and @code{gid}), define
+@code{HAVE_CHOWN}. The result of this macro is cached in the
+@code{ac_cv_func_chown_works} variable.
+@end defmac
+
+@anchor{AC_FUNC_CLOSEDIR_VOID}
+@defmac AC_FUNC_CLOSEDIR_VOID
+@acindex{FUNC_CLOSEDIR_VOID}
+@cvindex CLOSEDIR_VOID
+@c @fuindex closedir
+@prindex @code{closedir}
+@caindex func_closedir_void
+If the @code{closedir} function does not return a meaningful value,
+define @code{CLOSEDIR_VOID}. Otherwise, callers ought to check its
+return value for an error indicator.
+
+Currently this test is implemented by running a test program. When
+cross compiling the pessimistic assumption that @code{closedir} does not
+return a meaningful value is made.
+
+The result of this macro is cached in the @code{ac_cv_func_closedir_void}
+variable.
+
+This macro is obsolescent, as @code{closedir} returns a meaningful value
+on current systems. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_ERROR_AT_LINE
+@acindex{FUNC_ERROR_AT_LINE}
+@c @fuindex error_at_line
+@prindex @code{error_at_line}
+@caindex lib_error_at_line
+If the @code{error_at_line} function is not found, require an
+@code{AC_LIBOBJ} replacement of @samp{error}.
+
+The result of this macro is cached in the @code{ac_cv_lib_error_at_line}
+variable.
+
+The @code{AC_FUNC_ERROR_AT_LINE} macro is obsolescent. New programs
+should use Gnulib's @code{error} module. @xref{Gnulib}.
+@end defmac
+
+@defmac AC_FUNC_FNMATCH
+@acindex{FUNC_FNMATCH}
+@c @fuindex fnmatch
+@prindex @code{fnmatch}
+@caindex func_fnmatch_works
+If the @code{fnmatch} function conforms to Posix, define
+@code{HAVE_FNMATCH}. Detect common implementation bugs, for example,
+the bugs in Solaris 2.4.
+
+Unlike the other specific
+@code{AC_FUNC} macros, @code{AC_FUNC_FNMATCH} does not replace a
+broken/missing @code{fnmatch}. This is for historical reasons.
+See @code{AC_REPLACE_FNMATCH} below.
+
+The result of this macro is cached in the @code{ac_cv_func_fnmatch_works}
+variable.
+
+This macro is obsolescent. New programs should use Gnulib's
+@code{fnmatch-posix} module. @xref{Gnulib}.
+@end defmac
+
+@defmac AC_FUNC_FNMATCH_GNU
+@acindex{FUNC_FNMATCH_GNU}
+@c @fuindex fnmatch
+@prindex @code{fnmatch}
+@caindex func_fnmatch_gnu
+Behave like @code{AC_REPLACE_FNMATCH} (@emph{replace}) but also test
+whether @code{fnmatch} supports GNU extensions. Detect common
+implementation bugs, for example, the bugs in the GNU C
+Library 2.1.
+
+The result of this macro is cached in the @code{ac_cv_func_fnmatch_gnu}
+variable.
+
+This macro is obsolescent. New programs should use Gnulib's
+@code{fnmatch-gnu} module. @xref{Gnulib}.
+@end defmac
+
+@anchor{AC_FUNC_FORK}
+@defmac AC_FUNC_FORK
+@acindex{FUNC_FORK}
+@cvindex HAVE_VFORK_H
+@cvindex HAVE_WORKING_FORK
+@cvindex HAVE_WORKING_VFORK
+@cvindex vfork
+@c @fuindex fork
+@prindex @code{fork}
+@c @fuindex vfork
+@prindex @code{vfork}
+@hdrindex{vfork.h}
+@c @caindex func_fork
+@c @caindex func_fork_works
+This macro checks for the @code{fork} and @code{vfork} functions. If a
+working @code{fork} is found, define @code{HAVE_WORKING_FORK}. This macro
+checks whether @code{fork} is just a stub by trying to run it.
+
+If @file{vfork.h} is found, define @code{HAVE_VFORK_H}. If a working
+@code{vfork} is found, define @code{HAVE_WORKING_VFORK}. Otherwise,
+define @code{vfork} to be @code{fork} for backward compatibility with
+previous versions of @command{autoconf}. This macro checks for several known
+errors in implementations of @code{vfork} and considers the system to not
+have a working @code{vfork} if it detects any of them. It is not considered
+to be an implementation error if a child's invocation of @code{signal}
+modifies the parent's signal handler, since child processes rarely change
+their signal handlers.
+
+Since this macro defines @code{vfork} only for backward compatibility with
+previous versions of @command{autoconf} you're encouraged to define it
+yourself in new code:
+@example
+@group
+#ifndef HAVE_WORKING_VFORK
+# define vfork fork
+#endif
+@end group
+@end example
+
+The results of this macro are cached in the @code{ac_cv_func_fork_works}
+and @code{ac_cv_func_vfork_works} variables. In order to override the
+test, you also need to set the @code{ac_cv_func_fork} and
+@code{ac_cv_func_vfork} variables.
+@end defmac
+
+@defmac AC_FUNC_FSEEKO
+@acindex{FUNC_FSEEKO}
+@cvindex _LARGEFILE_SOURCE
+@cvindex HAVE_FSEEKO
+@c @fuindex fseeko
+@prindex @code{fseeko}
+@c @fuindex ftello
+@prindex @code{ftello}
+@c @caindex sys_largefile_source
+If the @code{fseeko} function is available, define @code{HAVE_FSEEKO}.
+Define @code{_LARGEFILE_SOURCE} if necessary to make the prototype
+visible on some systems (e.g., glibc 2.2). Otherwise linkage problems
+may occur when compiling with @code{AC_SYS_LARGEFILE} on
+largefile-sensitive systems where @code{off_t} does not default to a
+64bit entity. All systems with @code{fseeko} also supply @code{ftello}.
+@end defmac
+
+@defmac AC_FUNC_GETGROUPS
+@acindex{FUNC_GETGROUPS}
+@cvindex HAVE_GETGROUPS
+@ovindex GETGROUPS_LIBS
+@c @fuindex getgroups
+@prindex @code{getgroups}
+@caindex func_getgroups_works
+If the @code{getgroups} function is available and works (unlike on
+Ultrix 4.3, where @samp{getgroups (0, 0)} always fails), define
+@code{HAVE_GETGROUPS}. Set @code{GETGROUPS_LIBS} to any libraries
+needed to get that function. This macro runs @code{AC_TYPE_GETGROUPS}.
+@end defmac
+
+@anchor{AC_FUNC_GETLOADAVG}
+@defmac AC_FUNC_GETLOADAVG
+@acindex{FUNC_GETLOADAVG}
+@cvindex SVR4
+@cvindex DGUX
+@cvindex UMAX
+@cvindex UMAX4_3
+@cvindex HAVE_NLIST_H
+@cvindex NLIST_NAME_UNION
+@cvindex GETLOADAVG_PRIVILEGED
+@cvindex NEED_SETGID
+@cvindex C_GETLOADAVG
+@ovindex LIBOBJS
+@ovindex NEED_SETGID
+@ovindex KMEM_GROUP
+@ovindex GETLOADAVG_LIBS
+@c @fuindex getloadavg
+@prindex @code{getloadavg}
+Check how to get the system load averages. To perform its tests
+properly, this macro needs the file @file{getloadavg.c}; therefore, be
+sure to set the @code{AC_LIBOBJ} replacement directory properly (see
+@ref{Generic Functions}, @code{AC_CONFIG_LIBOBJ_DIR}).
+
+If the system has the @code{getloadavg} function, define
+@code{HAVE_GETLOADAVG}, and set @code{GETLOADAVG_LIBS} to any libraries
+necessary to get that function. Also add @code{GETLOADAVG_LIBS} to
+@code{LIBS}. Otherwise, require an @code{AC_LIBOBJ} replacement for
+@samp{getloadavg} with source code in @file{@var{dir}/getloadavg.c}, and
+possibly define several other C preprocessor macros and output
+variables:
+
+@enumerate
+@item
+Define @code{C_GETLOADAVG}.
+
+@item
+Define @code{SVR4}, @code{DGUX}, @code{UMAX}, or @code{UMAX4_3} if on
+those systems.
+
+@item
+@hdrindex{nlist.h}
+If @file{nlist.h} is found, define @code{HAVE_NLIST_H}.
+
+@item
+If @samp{struct nlist} has an @samp{n_un.n_name} member, define
+@code{HAVE_STRUCT_NLIST_N_UN_N_NAME}. The obsolete symbol
+@code{NLIST_NAME_UNION} is still defined, but do not depend upon it.
+
+@item
+Programs may need to be installed set-group-ID (or set-user-ID) for
+@code{getloadavg} to work. In this case, define
+@code{GETLOADAVG_PRIVILEGED}, set the output variable @code{NEED_SETGID}
+to @samp{true} (and otherwise to @samp{false}), and set
+@code{KMEM_GROUP} to the name of the group that should own the installed
+program.
+@end enumerate
+
+The @code{AC_FUNC_GETLOADAVG} macro is obsolescent. New programs should
+use Gnulib's @code{getloadavg} module. @xref{Gnulib}.
+@end defmac
+
+@anchor{AC_FUNC_GETMNTENT}
+@defmac AC_FUNC_GETMNTENT
+@acindex{FUNC_GETMNTENT}
+@cvindex HAVE_GETMNTENT
+@c @fuindex getmntent
+@prindex @code{getmntent}
+@caindex search_getmntent
+Check for @code{getmntent} in the standard C library, and then in the
+@file{sun}, @file{seq}, and @file{gen} libraries, for UNICOS,
+IRIX 4, PTX, and UnixWare, respectively. Then, if
+@code{getmntent} is available, define @code{HAVE_GETMNTENT} and set
+@code{ac_cv_func_getmntent} to @code{yes}. Otherwise set
+@code{ac_cv_func_getmntent} to @code{no}.
+
+The result of this macro can be overridden by setting the cache variable
+@code{ac_cv_search_getmntent}.
+@end defmac
+
+@defmac AC_FUNC_GETPGRP
+@acindex{FUNC_GETPGRP}
+@cvindex GETPGRP_VOID
+@c @fuindex getpgid
+@c @fuindex getpgrp
+@prindex @code{getpgid}
+@prindex @code{getpgrp}
+@caindex func_getpgrp_void
+Define @code{GETPGRP_VOID} if it is an error to pass 0 to
+@code{getpgrp}; this is the Posix behavior. On older BSD
+systems, you must pass 0 to @code{getpgrp}, as it takes an argument and
+behaves like Posix's @code{getpgid}.
+
+@example
+#ifdef GETPGRP_VOID
+ pid = getpgrp ();
+#else
+ pid = getpgrp (0);
+#endif
+@end example
+
+This macro does not check whether
+@code{getpgrp} exists at all; if you need to work in that situation,
+first call @code{AC_CHECK_FUNC} for @code{getpgrp}.
+
+The result of this macro is cached in the @code{ac_cv_func_getpgrp_void}
+variable.
+
+This macro is obsolescent, as current systems have a @code{getpgrp}
+whose signature conforms to Posix. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+@acindex{FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK}
+@cvindex LSTAT_FOLLOWS_SLASHED_SYMLINK
+@c @fuindex lstat
+@prindex @code{lstat}
+@caindex func_lstat_dereferences_slashed_symlink
+If @file{link} is a symbolic link, then @code{lstat} should treat
+@file{link/} the same as @file{link/.}. However, many older
+@code{lstat} implementations incorrectly ignore trailing slashes.
+
+It is safe to assume that if @code{lstat} incorrectly ignores
+trailing slashes, then other symbolic-link-aware functions like
+@code{unlink} also incorrectly ignore trailing slashes.
+
+If @code{lstat} behaves properly, define
+@code{LSTAT_FOLLOWS_SLASHED_SYMLINK}, otherwise require an
+@code{AC_LIBOBJ} replacement of @code{lstat}.
+
+The result of this macro is cached in the
+@code{ac_cv_func_lstat_dereferences_slashed_symlink} variable.
+
+The @code{AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK} macro is obsolescent.
+New programs should use Gnulib's @code{lstat} module. @xref{Gnulib}.
+@end defmac
+
+@defmac AC_FUNC_MALLOC
+@acindex{FUNC_MALLOC}
+@cvindex HAVE_MALLOC
+@cvindex malloc
+@c @fuindex malloc
+@prindex @code{malloc}
+@caindex func_malloc_0_nonnull
+If the @code{malloc} function is compatible with the GNU C
+library @code{malloc} (i.e., @samp{malloc (0)} returns a valid
+pointer), define @code{HAVE_MALLOC} to 1. Otherwise define
+@code{HAVE_MALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
+@samp{malloc}, and define @code{malloc} to @code{rpl_malloc} so that the
+native @code{malloc} is not used in the main project.
+
+Typically, the replacement file @file{malloc.c} should look like (note
+the @samp{#undef malloc}):
+
+@verbatim
+#include <config.h>
+#undef malloc
+
+#include <sys/types.h>
+
+void *malloc ();
+
+/* Allocate an N-byte block of memory from the heap.
+ If N is zero, allocate a 1-byte block. */
+
+void *
+rpl_malloc (size_t n)
+{
+ if (n == 0)
+ n = 1;
+ return malloc (n);
+}
+@end verbatim
+
+The result of this macro is cached in the
+@code{ac_cv_func_malloc_0_nonnull} variable.
+@end defmac
+
+@defmac AC_FUNC_MBRTOWC
+@acindex{FUNC_MBRTOWC}
+@cvindex HAVE_MBRTOWC
+@c @fuindex mbrtowc
+@prindex @code{mbrtowc}
+@caindex func_mbrtowc
+Define @code{HAVE_MBRTOWC} to 1 if the function @code{mbrtowc} and the
+type @code{mbstate_t} are properly declared.
+
+The result of this macro is cached in the @code{ac_cv_func_mbrtowc}
+variable.
+@end defmac
+
+@defmac AC_FUNC_MEMCMP
+@acindex{FUNC_MEMCMP}
+@ovindex LIBOBJS
+@c @fuindex memcmp
+@prindex @code{memcmp}
+@caindex func_memcmp_working
+If the @code{memcmp} function is not available, or does not work on
+8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
+bytes or more and with at least one buffer not starting on a 4-byte
+boundary (such as the one on NeXT x86 OpenStep), require an
+@code{AC_LIBOBJ} replacement for @samp{memcmp}.
+
+The result of this macro is cached in the
+@code{ac_cv_func_memcmp_working} variable.
+
+This macro is obsolescent, as current systems have a working
+@code{memcmp}. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_MKTIME
+@acindex{FUNC_MKTIME}
+@ovindex LIBOBJS
+@c @fuindex mktime
+@prindex @code{mktime}
+@caindex func_working_mktime
+If the @code{mktime} function is not available, or does not work
+correctly, require an @code{AC_LIBOBJ} replacement for @samp{mktime}.
+For the purposes of this test, @code{mktime} should conform to the
+Posix standard and should be the inverse of
+@code{localtime}.
+
+The result of this macro is cached in the
+@code{ac_cv_func_working_mktime} variable.
+
+The @code{AC_FUNC_MKTIME} macro is obsolescent. New programs should
+use Gnulib's @code{mktime} module. @xref{Gnulib}.
+@end defmac
+
+@anchor{AC_FUNC_MMAP}
+@defmac AC_FUNC_MMAP
+@acindex{FUNC_MMAP}
+@cvindex HAVE_MMAP
+@c @fuindex mmap
+@prindex @code{mmap}
+@caindex func_mmap_fixed_mapped
+If the @code{mmap} function exists and works correctly, define
+@code{HAVE_MMAP}. This checks only private fixed mapping of already-mapped
+memory.
+
+The result of this macro is cached in the
+@code{ac_cv_func_mmap_fixed_mapped} variable.
+@end defmac
+
+@defmac AC_FUNC_OBSTACK
+@acindex{FUNC_OBSTACK}
+@cvindex HAVE_OBSTACK
+@cindex obstack
+@caindex func_obstack
+If the obstacks are found, define @code{HAVE_OBSTACK}, else require an
+@code{AC_LIBOBJ} replacement for @samp{obstack}.
+
+The result of this macro is cached in the @code{ac_cv_func_obstack}
+variable.
+@end defmac
+
+@defmac AC_FUNC_REALLOC
+@acindex{FUNC_REALLOC}
+@cvindex HAVE_REALLOC
+@cvindex realloc
+@c @fuindex realloc
+@prindex @code{realloc}
+@caindex func_realloc_0_nonnull
+If the @code{realloc} function is compatible with the GNU C
+library @code{realloc} (i.e., @samp{realloc (NULL, 0)} returns a
+valid pointer), define @code{HAVE_REALLOC} to 1. Otherwise define
+@code{HAVE_REALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
+@samp{realloc}, and define @code{realloc} to @code{rpl_realloc} so that
+the native @code{realloc} is not used in the main project. See
+@code{AC_FUNC_MALLOC} for details.
+
+The result of this macro is cached in the
+@code{ac_cv_func_realloc_0_nonnull} variable.
+@end defmac
+
+@defmac AC_FUNC_SELECT_ARGTYPES
+@acindex{FUNC_SELECT_ARGTYPES}
+@cvindex SELECT_TYPE_ARG1
+@cvindex SELECT_TYPE_ARG234
+@cvindex SELECT_TYPE_ARG5
+@c @fuindex select
+@prindex @code{select}
+@c @caindex func_select_args
+Determines the correct type to be passed for each of the
+@code{select} function's arguments, and defines those types
+in @code{SELECT_TYPE_ARG1}, @code{SELECT_TYPE_ARG234}, and
+@code{SELECT_TYPE_ARG5} respectively. @code{SELECT_TYPE_ARG1} defaults
+to @samp{int}, @code{SELECT_TYPE_ARG234} defaults to @samp{int *},
+and @code{SELECT_TYPE_ARG5} defaults to @samp{struct timeval *}.
+
+This macro is obsolescent, as current systems have a @code{select} whose
+signature conforms to Posix. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_SETPGRP
+@acindex{FUNC_SETPGRP}
+@cvindex SETPGRP_VOID
+@c @fuindex setpgrp
+@prindex @code{setpgrp}
+@caindex func_setpgrp_void
+If @code{setpgrp} takes no argument (the Posix version), define
+@code{SETPGRP_VOID}. Otherwise, it is the BSD version, which takes
+two process IDs as arguments. This macro does not check whether
+@code{setpgrp} exists at all; if you need to work in that situation,
+first call @code{AC_CHECK_FUNC} for @code{setpgrp}.
+
+The result of this macro is cached in the @code{ac_cv_func_setpgrp_void}
+variable.
+
+This macro is obsolescent, as current systems have a @code{setpgrp}
+whose signature conforms to Posix. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_STAT
+@defmacx AC_FUNC_LSTAT
+@acindex{FUNC_STAT}
+@acindex{FUNC_LSTAT}
+@cvindex HAVE_STAT_EMPTY_STRING_BUG
+@cvindex HAVE_LSTAT_EMPTY_STRING_BUG
+@c @fuindex stat
+@prindex @code{stat}
+@c @fuindex lstat
+@prindex @code{lstat}
+@caindex func_stat_empty_string_bug
+@caindex func_lstat_empty_string_bug
+Determine whether @code{stat} or @code{lstat} have the bug that it
+succeeds when given the zero-length file name as argument. The @code{stat}
+and @code{lstat} from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
+this.
+
+If it does, then define @code{HAVE_STAT_EMPTY_STRING_BUG} (or
+@code{HAVE_LSTAT_EMPTY_STRING_BUG}) and ask for an @code{AC_LIBOBJ}
+replacement of it.
+
+The results of these macros are cached in the
+@code{ac_cv_func_stat_empty_string_bug} and the
+@code{ac_cv_func_lstat_empty_string_bug} variables, respectively.
+
+These macros are obsolescent, as no current systems have the bug.
+New programs need not use these macros.
+@end defmac
+
+@anchor{AC_FUNC_STRCOLL}
+@defmac AC_FUNC_STRCOLL
+@acindex{FUNC_STRCOLL}
+@cvindex HAVE_STRCOLL
+@c @fuindex strcoll
+@prindex @code{strcoll}
+@caindex func_strcoll_works
+If the @code{strcoll} function exists and works correctly, define
+@code{HAVE_STRCOLL}. This does a bit more than
+@samp{AC_CHECK_FUNCS(strcoll)}, because some systems have incorrect
+definitions of @code{strcoll} that should not be used.
+
+The result of this macro is cached in the @code{ac_cv_func_strcoll_works}
+variable.
+@end defmac
+
+@defmac AC_FUNC_STRERROR_R
+@acindex{FUNC_STRERROR_R}
+@cvindex HAVE_STRERROR_R
+@cvindex HAVE_DECL_STRERROR_R
+@cvindex STRERROR_R_CHAR_P
+@c @fuindex strerror_r
+@caindex func_strerror_r_char_p
+@prindex @code{strerror_r}
+If @code{strerror_r} is available, define @code{HAVE_STRERROR_R}, and if
+it is declared, define @code{HAVE_DECL_STRERROR_R}. If it returns a
+@code{char *} message, define @code{STRERROR_R_CHAR_P}; otherwise it
+returns an @code{int} error number. The Thread-Safe Functions option of
+Posix requires @code{strerror_r} to return @code{int}, but
+many systems (including, for example, version 2.2.4 of the GNU C
+Library) return a @code{char *} value that is not necessarily equal to
+the buffer argument.
+
+The result of this macro is cached in the
+@code{ac_cv_func_strerror_r_char_p} variable.
+@end defmac
+
+@anchor{AC_FUNC_STRFTIME}
+@defmac AC_FUNC_STRFTIME
+@acindex{FUNC_STRFTIME}
+@cvindex HAVE_STRFTIME
+@c @fuindex strftime
+@prindex @code{strftime}
+Check for @code{strftime} in the @file{intl} library, for SCO Unix.
+Then, if @code{strftime} is available, define @code{HAVE_STRFTIME}.
+
+This macro is obsolescent, as no current systems require the @file{intl}
+library for @code{strftime}. New programs need not use this macro.
+@end defmac
+
+@defmac AC_FUNC_STRTOD
+@acindex{FUNC_STRTOD}
+@ovindex POW_LIB
+@c @fuindex strtod
+@prindex @code{strtod}
+@caindex func_strtod
+@caindex func_pow
+If the @code{strtod} function does not exist or doesn't work correctly,
+ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}. In this case,
+because @file{strtod.c} is likely to need @samp{pow}, set the output
+variable @code{POW_LIB} to the extra library needed.
+
+This macro caches its result in the @code{ac_cv_func_strtod} variable
+and depends upon the result in the @code{ac_cv_func_pow} variable.
+
+The @code{AC_FUNC_STRTOD} macro is obsolescent. New programs should
+use Gnulib's @code{strtod} module. @xref{Gnulib}.
+@end defmac
+
+@defmac AC_FUNC_STRTOLD
+@acindex{FUNC_STRTOLD}
+@cvindex HAVE_STRTOLD
+@prindex @code{strtold}
+@caindex func_strtold
+If the @code{strtold} function exists and conforms to C99, define
+@code{HAVE_STRTOLD}.
+
+This macro caches its result in the @code{ac_cv_func_strtold} variable.
+@end defmac
+
+@defmac AC_FUNC_STRNLEN
+@acindex{FUNC_STRNLEN}
+@cvindex HAVE_STRNLEN
+@c @fuindex strnlen
+@prindex @code{strnlen}
+@caindex func_strnlen_working
+If the @code{strnlen} function is not available, or is buggy (like the one
+from AIX 4.3), require an @code{AC_LIBOBJ} replacement for it.
+
+This macro caches its result in the @code{ac_cv_func_strnlen_working}
+variable.
+@end defmac
+
+@anchor{AC_FUNC_UTIME_NULL}
+@defmac AC_FUNC_UTIME_NULL
+@acindex{FUNC_UTIME_NULL}
+@cvindex HAVE_UTIME_NULL
+@c @fuindex utime
+@prindex @code{utime}
+@caindex func_utime_null
+If @samp{utime (@var{file}, NULL)} sets @var{file}'s timestamp to
+the present, define @code{HAVE_UTIME_NULL}.
+
+This macro caches its result in the @code{ac_cv_func_utime_null}
+variable.
+
+This macro is obsolescent, as all current systems have a @code{utime}
+that behaves this way. New programs need not use this macro.
+@end defmac
+
+@anchor{AC_FUNC_VPRINTF}
+@defmac AC_FUNC_VPRINTF
+@acindex{FUNC_VPRINTF}
+@cvindex HAVE_VPRINTF
+@cvindex HAVE_DOPRNT
+@c @fuindex vprintf
+@prindex @code{vprintf}
+@c @fuindex vsprintf
+@prindex @code{vsprintf}
+If @code{vprintf} is found, define @code{HAVE_VPRINTF}. Otherwise, if
+@code{_doprnt} is found, define @code{HAVE_DOPRNT}. (If @code{vprintf}
+is available, you may assume that @code{vfprintf} and @code{vsprintf}
+are also available.)
+
+This macro is obsolescent, as all current systems have @code{vprintf}.
+New programs need not use this macro.
+@end defmac
+
+@defmac AC_REPLACE_FNMATCH
+@acindex{REPLACE_FNMATCH}
+@c @fuindex fnmatch
+@prindex @code{fnmatch}
+@hdrindex{fnmatch.h}
+@caindex func_fnmatch_works
+If the @code{fnmatch} function does not conform to Posix (see
+@code{AC_FUNC_FNMATCH}), ask for its @code{AC_LIBOBJ} replacement.
+
+The files @file{fnmatch.c}, @file{fnmatch_loop.c}, and @file{fnmatch_.h}
+in the @code{AC_LIBOBJ} replacement directory are assumed to contain a
+copy of the source code of GNU @code{fnmatch}. If necessary,
+this source code is compiled as an @code{AC_LIBOBJ} replacement, and the
+@file{fnmatch_.h} file is linked to @file{fnmatch.h} so that it can be
+included in place of the system @code{<fnmatch.h>}.
+
+This macro caches its result in the @code{ac_cv_func_fnmatch_works}
+variable.
+
+This macro is obsolescent, as it assumes the use of particular source
+files. New programs should use Gnulib's @code{fnmatch-posix} module,
+which provides this macro along with the source files. @xref{Gnulib}.
+@end defmac
+
+
+
+@node Generic Functions
+@subsection Generic Function Checks
+
+These macros are used to find functions not covered by the ``particular''
+test macros. If the functions might be in libraries other than the
+default C library, first call @code{AC_CHECK_LIB} for those libraries.
+If you need to check the behavior of a function as well as find out
+whether it is present, you have to write your own test for
+it (@pxref{Writing Tests}).
+
+@anchor{AC_CHECK_FUNC}
+@defmac AC_CHECK_FUNC (@var{function}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{CHECK_FUNC}
+@caindex func_@var{function}
+If C function @var{function} is available, run shell commands
+@var{action-if-found}, otherwise @var{action-if-not-found}. If you just
+want to define a symbol if the function is available, consider using
+@code{AC_CHECK_FUNCS} instead. This macro checks for functions with C
+linkage even when @code{AC_LANG(C++)} has been called, since C is more
+standardized than C++. (@pxref{Language Choice}, for more information
+about selecting the language for checks.)
+
+This macro caches its result in the @code{ac_cv_func_@var{function}}
+variable.
+@end defmac
+
+@anchor{AC_CHECK_FUNCS}
+@defmac AC_CHECK_FUNCS (@var{function}@dots{}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{CHECK_FUNCS}
+@cvindex HAVE_@var{function}
+For each @var{function} enumerated in the blank-or-newline-separated argument
+list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
+If @var{action-if-found} is given, it is additional shell code to
+execute when one of the functions is found. You can give it a value of
+@samp{break} to break out of the loop on the first match. If
+@var{action-if-not-found} is given, it is executed when one of the
+functions is not found.
+
+Results are cached for each @var{function} as in @code{AC_CHECK_FUNC}.
+@end defmac
+
+@defmac AC_CHECK_FUNCS_ONCE (@var{function}@dots{})
+@acindex{CHECK_FUNCS_ONCE}
+@cvindex HAVE_@var{function}
+For each @var{function} enumerated in the blank-or-newline-separated argument
+list, define @code{HAVE_@var{function}} (in all capitals) if it is available.
+This is a once-only variant of @code{AC_CHECK_FUNCS}. It generates the
+checking code at most once, so that @command{configure} is smaller and
+faster; but the checks cannot be conditionalized and are always done once,
+early during the @command{configure} run.
+@end defmac
+
+@sp 1
+
+Autoconf follows a philosophy that was formed over the years by those
+who have struggled for portability: isolate the portability issues in
+specific files, and then program as if you were in a Posix
+environment. Some functions may be missing or unfixable, and your
+package must be ready to replace them.
+
+Suitable replacements for many such problem functions are available from
+Gnulib (@pxref{Gnulib}).
+
+@defmac AC_LIBOBJ (@var{function})
+@acindex{LIBOBJ}
+@ovindex LIBOBJS
+Specify that @samp{@var{function}.c} must be included in the executables
+to replace a missing or broken implementation of @var{function}.
+
+@vrindex ac_objext
+Technically, it adds @samp{@var{function}.$ac_objext} to the output
+variable @code{LIBOBJS} if it is not already in, and calls
+@code{AC_LIBSOURCE} for @samp{@var{function}.c}. You should not
+directly change @code{LIBOBJS}, since this is not traceable.
+@end defmac
+
+@defmac AC_LIBSOURCE (@var{file})
+@acindex{LIBSOURCE}
+Specify that @var{file} might be needed to compile the project. If you
+need to know what files might be needed by a @file{configure.ac}, you
+should trace @code{AC_LIBSOURCE}. @var{file} must be a literal.
+
+This macro is called automatically from @code{AC_LIBOBJ}, but you must
+call it explicitly if you pass a shell variable to @code{AC_LIBOBJ}. In
+that case, since shell variables cannot be traced statically, you must
+pass to @code{AC_LIBSOURCE} any possible files that the shell variable
+might cause @code{AC_LIBOBJ} to need. For example, if you want to pass
+a variable @code{$foo_or_bar} to @code{AC_LIBOBJ} that holds either
+@code{"foo"} or @code{"bar"}, you should do:
+
+@example
+AC_LIBSOURCE([foo.c])
+AC_LIBSOURCE([bar.c])
+AC_LIBOBJ([$foo_or_bar])
+@end example
+
+@noindent
+There is usually a way to avoid this, however, and you are encouraged to
+simply call @code{AC_LIBOBJ} with literal arguments.
+
+Note that this macro replaces the obsolete @code{AC_LIBOBJ_DECL}, with
+slightly different semantics: the old macro took the function name,
+e.g., @code{foo}, as its argument rather than the file name.
+@end defmac
+
+@defmac AC_LIBSOURCES (@var{files})
+@acindex{LIBSOURCES}
+Like @code{AC_LIBSOURCE}, but accepts one or more @var{files} in a
+comma-separated M4 list. Thus, the above example might be rewritten:
+
+@example
+AC_LIBSOURCES([foo.c, bar.c])
+AC_LIBOBJ([$foo_or_bar])
+@end example
+@end defmac
+
+@defmac AC_CONFIG_LIBOBJ_DIR (@var{directory})
+@acindex{CONFIG_LIBOBJ_DIR}
+Specify that @code{AC_LIBOBJ} replacement files are to be found in
+@var{directory}, a name relative to the top level of the
+source tree. The replacement directory defaults to @file{.}, the top
+level directory, and the most typical value is @file{lib}, corresponding
+to @samp{AC_CONFIG_LIBOBJ_DIR([lib])}.
+
+@command{configure} might need to know the replacement directory for the
+following reasons: (i) some checks use the replacement files, (ii) some
+macros bypass broken system headers by installing links to the
+replacement headers (iii) when used in conjunction with Automake,
+within each makefile, @var{directory} is used as a relative path
+from @code{$(top_srcdir)} to each object named in @code{LIBOBJS} and
+@code{LTLIBOBJS}, etc.
+@end defmac
+
+@sp 1
+
+It is common to merely check for the existence of a function, and ask
+for its @code{AC_LIBOBJ} replacement if missing. The following macro is
+a convenient shorthand.
+
+@defmac AC_REPLACE_FUNCS (@var{function}@dots{})
+@acindex{REPLACE_FUNCS}
+@cvindex HAVE_@var{function}
+@ovindex LIBOBJS
+Like @code{AC_CHECK_FUNCS}, but uses @samp{AC_LIBOBJ(@var{function})} as
+@var{action-if-not-found}. You can declare your replacement function by
+enclosing the prototype in @samp{#ifndef HAVE_@var{function}}. If the
+system has the function, it probably declares it in a header file you
+should be including, so you shouldn't redeclare it lest your declaration
+conflict.
+@end defmac
+
+@node Header Files
+@section Header Files
+@cindex Header, checking
+
+The following macros check for the presence of certain C header files.
+If there is no macro specifically defined to check for a header file you need,
+and you don't need to check for any special properties of
+it, then you can use one of the general header-file check macros.
+
+@menu
+* Header Portability:: Collected knowledge on common headers
+* Particular Headers:: Special handling to find certain headers
+* Generic Headers:: How to find other headers
+@end menu
+
+@node Header Portability
+@subsection Portability of Headers
+@cindex Portability of headers
+@cindex Header portability
+
+This section documents some collected knowledge about common headers,
+and the problems they cause. By definition, this list always requires
+additions. A much more complete list is maintained by the Gnulib
+project (@pxref{Gnulib}), covering @ref{Header File Substitutes, ,
+Posix Headers, gnulib, GNU gnulib} and @ref{Glibc Header File
+Substitutes, , Glibc Headers, gnulib, GNU gnulib}. Please help us keep
+the gnulib list as complete as possible.
+
+@table @asis
+
+@item @file{limits.h}
+C99 says that @file{limits.h} defines @code{LLONG_MIN},
+@code{LLONG_MAX}, and @code{ULLONG_MAX}, but many almost-C99
+environments (e.g., default GCC 4.0.2 + glibc 2.4) do not
+define them.
+
+@item @file{inttypes.h} vs.@: @file{stdint.h}
+@hdrindex{inttypes.h}
+@hdrindex{stdint.h}
+The C99 standard says that @file{inttypes.h} includes
+@file{stdint.h}, so there's no need to include @file{stdint.h}
+separately in a standard environment. Some implementations have
+@file{inttypes.h} but not @file{stdint.h} (e.g., Solaris 7), but we don't
+know of any implementation that has @file{stdint.h} but not
+@file{inttypes.h}.
+
+@item @file{linux/irda.h}
+@hdrindex{linux/irda.h}
+It requires @file{linux/types.h} and @file{sys/socket.h}.
+
+@item @file{linux/random.h}
+@hdrindex{linux/random.h}
+It requires @file{linux/types.h}.
+
+@item @file{net/if.h}
+@hdrindex{net/if.h}
+On Darwin, this file requires that @file{sys/socket.h} be included
+beforehand. One should run:
+
+@example
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([net/if.h], [], [],
+[#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+@end example
+
+@item @file{netinet/if_ether.h}
+@hdrindex{netinet/if_ether.h}
+On Darwin, this file requires that @file{stdio.h} and
+@file{sys/socket.h} be included beforehand. One should run:
+
+@example
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([netinet/if_ether.h], [], [],
+[#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+])
+@end example
+
+@item @file{stdint.h}
+See above, item @file{inttypes.h} vs.@: @file{stdint.h}.
+
+@item @file{stdlib.h}
+@hdrindex{stdlib.h}
+On many systems (e.g., Darwin), @file{stdio.h} is a prerequisite.
+
+@item @file{sys/mount.h}
+@hdrindex{sys/mount.h}
+On FreeBSD 4.8 on ia32 and using gcc version 2.95.4,
+@file{sys/params.h} is a prerequisite.
+
+@item @file{sys/ptem.h}
+@hdrindex{sys/ptem.h}
+On Solaris 8, @file{sys/stream.h} is a prerequisite.
+
+@item @file{sys/socket.h}
+@hdrindex{sys/socket.h}
+On Darwin, @file{stdlib.h} is a prerequisite.
+
+@item @file{sys/ucred.h}
+@hdrindex{sys/ucred.h}
+On Tru64 5.1, @file{sys/types.h} is a prerequisite.
+
+@item @file{X11/extensions/scrnsaver.h}
+@hdrindex{X11/extensions/scrnsaver.h}
+Using XFree86, this header requires @file{X11/Xlib.h}, which is probably
+so required that you might not even consider looking for it.
+
+@example
+AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [],
+[[#include <X11/Xlib.h>
+]])
+@end example
+@end table
+
+
+@node Particular Headers
+@subsection Particular Header Checks
+
+These macros check for particular system header files---whether they
+exist, and in some cases whether they declare certain symbols.
+
+@defmac AC_CHECK_HEADER_STDBOOL
+@acindex{CHECK_HEADER_STDBOOL}
+@cvindex HAVE__BOOL
+@hdrindex{stdbool.h}
+@caindex header_stdbool_h
+Check whether @file{stdbool.h} exists and conforms to C99, and cache the
+result in the @code{ac_cv_header_stdbool_h} variable. If the type
+@code{_Bool} is defined, define @code{HAVE__BOOL} to 1.
+
+This macro is intended for use by Gnulib (@pxref{Gnulib}) and other
+packages that supply a substitute @file{stdbool.h} on platforms lacking
+a conforming one. The @code{AC_HEADER_STDBOOL} macro is better for code
+that explicitly checks for @file{stdbool.h}.
+@end defmac
+
+@defmac AC_HEADER_ASSERT
+@acindex{HEADER_ASSERT}
+@cvindex NDEBUG
+@hdrindex{assert.h}
+Check whether to enable assertions in the style of @file{assert.h}.
+Assertions are enabled by default, but the user can override this by
+invoking @command{configure} with the @option{--disable-assert} option.
+@end defmac
+
+@anchor{AC_HEADER_DIRENT}
+@defmac AC_HEADER_DIRENT
+@acindex{HEADER_DIRENT}
+@cvindex HAVE_DIRENT_H
+@cvindex HAVE_NDIR_H
+@cvindex HAVE_SYS_DIR_H
+@cvindex HAVE_SYS_NDIR_H
+@hdrindex{dirent.h}
+@hdrindex{sys/ndir.h}
+@hdrindex{sys/dir.h}
+@hdrindex{ndir.h}
+Check for the following header files. For the first one that is
+found and defines @samp{DIR}, define the listed C preprocessor macro:
+
+@multitable {@file{sys/ndir.h}} {@code{HAVE_SYS_NDIR_H}}
+@item @file{dirent.h} @tab @code{HAVE_DIRENT_H}
+@item @file{sys/ndir.h} @tab @code{HAVE_SYS_NDIR_H}
+@item @file{sys/dir.h} @tab @code{HAVE_SYS_DIR_H}
+@item @file{ndir.h} @tab @code{HAVE_NDIR_H}
+@end multitable
+
+The directory-library declarations in your source code should look
+something like the following:
+
+@example
+@group
+#include <sys/types.h>
+#ifdef HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen ((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) ((dirent)->d_namlen)
+# ifdef HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+@end group
+@end example
+
+Using the above declarations, the program would declare variables to be
+of type @code{struct dirent}, not @code{struct direct}, and would access
+the length of a directory entry name by passing a pointer to a
+@code{struct dirent} to the @code{NAMLEN} macro.
+
+This macro also checks for the SCO Xenix @file{dir} and @file{x} libraries.
+
+This macro is obsolescent, as all current systems with directory
+libraries have @code{<dirent.h>}. New programs need not use this macro.
+
+Also see @code{AC_STRUCT_DIRENT_D_INO} and
+@code{AC_STRUCT_DIRENT_D_TYPE} (@pxref{Particular Structures}).
+@end defmac
+
+@anchor{AC_HEADER_MAJOR}
+@defmac AC_HEADER_MAJOR
+@acindex{HEADER_MAJOR}
+@cvindex MAJOR_IN_MKDEV
+@cvindex MAJOR_IN_SYSMACROS
+@hdrindex{sys/mkdev.h}
+@hdrindex{sys/sysmacros.h}
+If @file{sys/types.h} does not define @code{major}, @code{minor}, and
+@code{makedev}, but @file{sys/mkdev.h} does, define
+@code{MAJOR_IN_MKDEV}; otherwise, if @file{sys/sysmacros.h} does, define
+@code{MAJOR_IN_SYSMACROS}.
+@end defmac
+
+@defmac AC_HEADER_RESOLV
+@acindex{HEADER_RESOLV}
+@cvindex HAVE_RESOLV_H
+@hdrindex{resolv.h}
+Checks for header @file{resolv.h}, checking for prerequisites first.
+To properly use @file{resolv.h}, your code should contain something like
+the following:
+
+@verbatim
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h> /* inet_ functions / structs */
+#endif
+#ifdef HAVE_ARPA_NAMESER_H
+# include <arpa/nameser.h> /* DNS HEADER struct */
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif
+#include <resolv.h>
+@end verbatim
+@end defmac
+
+@anchor{AC_HEADER_STAT}
+@defmac AC_HEADER_STAT
+@acindex{HEADER_STAT}
+@cvindex STAT_MACROS_BROKEN
+@hdrindex{sys/stat.h}
+If the macros @code{S_ISDIR}, @code{S_ISREG}, etc.@: defined in
+@file{sys/stat.h} do not work properly (returning false positives),
+define @code{STAT_MACROS_BROKEN}. This is the case on Tektronix UTekV,
+Amdahl UTS and Motorola System V/88.
+
+This macro is obsolescent, as no current systems have the bug.
+New programs need not use this macro.
+@end defmac
+
+@defmac AC_HEADER_STDBOOL
+@acindex{HEADER_STDBOOL}
+@cvindex HAVE_STDBOOL_H
+@cvindex HAVE__BOOL
+@hdrindex{stdbool.h}
+@caindex header_stdbool_h
+If @file{stdbool.h} exists and conforms to C99, define
+@code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define
+@code{HAVE__BOOL} to 1. To fulfill the C99 requirements, your
+program could contain the following code:
+
+@example
+@group
+#ifdef HAVE_STDBOOL_H
+# include <stdbool.h>
+#else
+# ifndef HAVE__BOOL
+# ifdef __cplusplus
+typedef bool _Bool;
+# else
+# define _Bool signed char
+# endif
+# endif
+# define bool _Bool
+# define false 0
+# define true 1
+# define __bool_true_false_are_defined 1
+#endif
+@end group
+@end example
+
+Alternatively you can use the @samp{stdbool} package of Gnulib
+(@pxref{Gnulib}). It simplifies your code so that it can say just
+@code{#include <stdbool.h>}, and it adds support for less-common
+platforms.
+
+This macro caches its result in the @code{ac_cv_header_stdbool_h}
+variable.
+
+This macro differs from @code{AC_CHECK_HEADER_STDBOOL} only in that it
+defines @code{HAVE_STDBOOL_H} whereas @code{AC_CHECK_HEADER_STDBOOL}
+does not.
+@end defmac
+
+@anchor{AC_HEADER_STDC}
+@defmac AC_HEADER_STDC
+@acindex{HEADER_STDC}
+@cvindex STDC_HEADERS
+@hdrindex{stdlib.h}
+@hdrindex{stdarg.h}
+@hdrindex{string.h}
+@hdrindex{float.h}
+@hdrindex{ctype.h}
+@caindex header_stdc
+Define @code{STDC_HEADERS} if the system has C header files
+conforming to ANSI C89 (ISO C90).
+Specifically, this macro checks for @file{stdlib.h}, @file{stdarg.h},
+@file{string.h}, and @file{float.h}; if the system has those, it
+probably has the rest of the C89 header files. This macro also
+checks whether @file{string.h} declares @code{memchr} (and thus
+presumably the other @code{mem} functions), whether @file{stdlib.h}
+declare @code{free} (and thus presumably @code{malloc} and other related
+functions), and whether the @file{ctype.h} macros work on characters
+with the high bit set, as the C standard requires.
+
+If you use this macro, your code can refer to @code{STDC_HEADERS} to
+determine whether the system has conforming header files (and probably C
+library functions).
+
+This macro caches its result in the @code{ac_cv_header_stdc} variable.
+
+This macro is obsolescent, as current systems have conforming header
+files. New programs need not use this macro.
+
+@hdrindex{string.h}
+@hdrindex{strings.h}
+Nowadays @file{string.h} is part of the C standard and declares functions like
+@code{strcpy}, and @file{strings.h} is standardized by Posix and declares
+BSD functions like @code{bcopy}; but
+historically, string functions were a major sticking point in this area.
+If you still want to worry about portability to ancient systems without
+standard headers, there is so much variation
+that it is probably easier to declare the functions you use than to
+figure out exactly what the system header files declare. Some ancient systems
+contained a mix of functions from the C standard and from BSD;
+some were mostly standard but lacked @samp{memmove}; some defined the
+BSD functions as macros in @file{string.h} or
+@file{strings.h}; some had only the BSD functions but
+@file{string.h}; some declared the memory functions in @file{memory.h},
+some in @file{string.h}; etc. It is probably sufficient to check for
+one string function and one memory function; if the library had the
+standard versions of those then it probably had most of the others.
+If you put the following in @file{configure.ac}:
+
+@example
+# This example is obsolescent.
+# Nowadays you can omit these macro calls.
+AC_HEADER_STDC
+AC_CHECK_FUNCS([strchr memcpy])
+@end example
+
+@noindent
+then, in your code, you can use declarations like this:
+
+@example
+@group
+/* This example is obsolescent.
+ Nowadays you can just #include <string.h>. */
+#ifdef STDC_HEADERS
+# include <string.h>
+#else
+# ifndef HAVE_STRCHR
+# define strchr index
+# define strrchr rindex
+# endif
+char *strchr (), *strrchr ();
+# ifndef HAVE_MEMCPY
+# define memcpy(d, s, n) bcopy ((s), (d), (n))
+# define memmove(d, s, n) bcopy ((s), (d), (n))
+# endif
+#endif
+@end group
+@end example
+
+@noindent
+If you use a function like @code{memchr}, @code{memset}, @code{strtok},
+or @code{strspn}, which have no BSD equivalent, then macros don't
+suffice to port to ancient hosts; you must provide an implementation of
+each function. An easy
+way to incorporate your implementations only when needed (since the ones
+in system C libraries may be hand optimized) is to, taking @code{memchr}
+for example, put it in @file{memchr.c} and use
+@samp{AC_REPLACE_FUNCS([memchr])}.
+@end defmac
+
+@defmac AC_HEADER_SYS_WAIT
+@acindex{HEADER_SYS_WAIT}
+@cvindex HAVE_SYS_WAIT_H
+@hdrindex{sys/wait.h}
+@caindex header_sys_wait_h
+If @file{sys/wait.h} exists and is compatible with Posix, define
+@code{HAVE_SYS_WAIT_H}. Incompatibility can occur if @file{sys/wait.h}
+does not exist, or if it uses the old BSD @code{union wait} instead
+of @code{int} to store a status value. If @file{sys/wait.h} is not
+Posix compatible, then instead of including it, define the
+Posix macros with their usual interpretations. Here is an
+example:
+
+@example
+@group
+#include <sys/types.h>
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+@end group
+@end example
+
+@noindent
+This macro caches its result in the @code{ac_cv_header_sys_wait_h}
+variable.
+
+This macro is obsolescent, as current systems are compatible with Posix.
+New programs need not use this macro.
+@end defmac
+
+@cvindex _POSIX_VERSION
+@hdrindex{unistd.h}
+@code{_POSIX_VERSION} is defined when @file{unistd.h} is included on
+Posix systems. If there is no @file{unistd.h}, it is definitely
+not a Posix system. However, some non-Posix systems do
+have @file{unistd.h}.
+
+The way to check whether the system supports Posix is:
+
+@example
+@group
+#ifdef HAVE_UNISTD_H
+# include <sys/types.h>
+# include <unistd.h>
+#endif
+
+#ifdef _POSIX_VERSION
+/* Code for Posix systems. */
+#endif
+@end group
+@end example
+
+@anchor{AC_HEADER_TIME}
+@defmac AC_HEADER_TIME
+@acindex{HEADER_TIME}
+@cvindex TIME_WITH_SYS_TIME
+@hdrindex{time.h}
+@hdrindex{sys/time.h}
+@caindex header_time
+If a program may include both @file{time.h} and @file{sys/time.h},
+define @code{TIME_WITH_SYS_TIME}. On some ancient systems,
+@file{sys/time.h} included @file{time.h}, but @file{time.h} was not
+protected against multiple inclusion, so programs could not explicitly
+include both files. This macro is useful in programs that use, for
+example, @code{struct timeval} as well as
+@code{struct tm}. It is best used in conjunction with
+@code{HAVE_SYS_TIME_H}, which can be checked for using
+@code{AC_CHECK_HEADERS([sys/time.h])}.
+
+@example
+@group
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+@end group
+@end example
+
+@noindent
+This macro caches its result in the @code{ac_cv_header_time} variable.
+
+This macro is obsolescent, as current systems can include both files
+when they exist. New programs need not use this macro.
+@end defmac
+
+
+@defmac AC_HEADER_TIOCGWINSZ
+@acindex{HEADER_TIOCGWINSZ}
+@cvindex GWINSZ_IN_SYS_IOCTL
+@hdrindex{sys/ioctl.h}
+@hdrindex{termios.h}
+@c FIXME: I need clarifications from Jim.
+If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
+define @code{GWINSZ_IN_SYS_IOCTL}. Otherwise @code{TIOCGWINSZ} can be
+found in @file{<termios.h>}.
+
+Use:
+
+@example
+@group
+#ifdef HAVE_TERMIOS_H
+# include <termios.h>
+#endif
+
+#ifdef GWINSZ_IN_SYS_IOCTL
+# include <sys/ioctl.h>
+#endif
+@end group
+@end example
+@end defmac
+
+@node Generic Headers
+@subsection Generic Header Checks
+
+These macros are used to find system header files not covered by the
+``particular'' test macros. If you need to check the contents of a header
+as well as find out whether it is present, you have to write your own
+test for it (@pxref{Writing Tests}).
+
+@anchor{AC_CHECK_HEADER}
+@defmac AC_CHECK_HEADER (@var{header-file}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @ovar{includes})
+@acindex{CHECK_HEADER}
+@caindex header_@var{header-file}
+If the system header file @var{header-file} is compilable, execute shell
+commands @var{action-if-found}, otherwise execute
+@var{action-if-not-found}. If you just want to define a symbol if the
+header file is available, consider using @code{AC_CHECK_HEADERS}
+instead.
+
+@var{includes} is decoded to determine the appropriate include
+directives. If omitted or empty, @file{configure} will check for both header
+existence (with the preprocessor) and usability (with the compiler),
+using @code{AC_INCLUDES_DEFAULT} for the compile test. If
+there is a discrepancy between the results, a warning is issued to the
+user, and the compiler results are favored (@pxref{Present But
+Cannot Be Compiled}). In general, favoring the compiler results means
+that a header will be treated as not found even though the file exists,
+because you did not provide enough prerequisites.
+
+Providing a non-empty @var{includes} argument allows the code to provide
+any prerequisites prior to including the header under test; it is common
+to use the argument @code{AC_INCLUDES_DEFAULT} (@pxref{Default
+Includes}). With an explicit fourth argument, no preprocessor test is
+needed. As a special case, an @var{includes} of exactly @samp{-}
+triggers the older preprocessor check, which merely determines existence
+of the file in the preprocessor search path; this should only be used as
+a last resort (it is safer to determine the actual prerequisites and
+perform a compiler check, or else use @code{AC_PREPROC_IFELSE} to make
+it obvious that only a preprocessor check is desired).
+
+This macro caches its result in the @code{ac_cv_header_@var{header-file}}
+variable, with characters not suitable for a variable name mapped to
+underscores.
+@end defmac
+
+@anchor{AC_CHECK_HEADERS}
+@defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @
+ @ovar{action-if-found}, @ovar{action-if-not-found}, @
+ @ovar{includes})
+@acindex{CHECK_HEADERS}
+@cvindex HAVE_@var{header}
+@caindex header_@var{header-file}
+For each given system header file @var{header-file} in the
+blank-separated argument list that exists, define
+@code{HAVE_@var{header-file}} (in all capitals). If @var{action-if-found}
+is given, it is additional shell code to execute when one of the header
+files is found. You can give it a value of @samp{break} to break out of
+the loop on the first match. If @var{action-if-not-found} is given, it
+is executed when one of the header files is not found.
+
+@var{includes} is interpreted as in @code{AC_CHECK_HEADER}, in order to
+choose the set of preprocessor directives supplied before the header
+under test.
+
+This macro caches its result in the @code{ac_cv_header_@var{header-file}}
+variable, with characters not suitable for a variable name mapped to
+underscores.
+@end defmac
+
+Previous versions of Autoconf merely checked whether the header was
+accepted by the preprocessor. This was changed because the old test was
+inappropriate for typical uses. Headers are typically used to compile,
+not merely to preprocess, and the old behavior sometimes accepted
+headers that clashed at compile-time (@pxref{Present But Cannot Be
+Compiled}). If you need to check whether a header is preprocessable,
+you can use @code{AC_PREPROC_IFELSE} (@pxref{Running the Preprocessor}).
+
+Actually requiring a header to compile improves the robustness of the
+test, but it also requires
+that you make sure that headers that must be included before the
+@var{header-file} be part of the @var{includes}, (@pxref{Default
+Includes}). If looking for @file{bar.h}, which requires that
+@file{foo.h} be included before if it exists, we suggest the following
+scheme:
+
+@verbatim
+AC_CHECK_HEADERS([foo.h])
+AC_CHECK_HEADERS([bar.h], [], [],
+[#ifdef HAVE_FOO_H
+# include <foo.h>
+#endif
+])
+@end verbatim
+
+The following variant generates smaller, faster @command{configure}
+files if you do not need the full power of @code{AC_CHECK_HEADERS}.
+
+@defmac AC_CHECK_HEADERS_ONCE (@var{header-file}@dots{})
+@acindex{CHECK_HEADERS_ONCE}
+@cvindex HAVE_@var{header}
+For each given system header file @var{header-file} in the
+blank-separated argument list that exists, define
+@code{HAVE_@var{header-file}} (in all capitals).
+This is a once-only variant of @code{AC_CHECK_HEADERS}. It generates the
+checking code at most once, so that @command{configure} is smaller and
+faster; but the checks cannot be conditionalized and are always done once,
+early during the @command{configure} run. Thus, this macro is only safe
+for checking headers that do not have prerequisites beyond what
+@code{AC_INCLUDES_DEFAULT} provides.
+@end defmac
+
+@node Declarations
+@section Declarations
+@cindex Declaration, checking
+
+The following macros check for the declaration of variables and
+functions. If there is no macro specifically defined to check for a
+symbol you need, then you can use the general macros (@pxref{Generic
+Declarations}) or, for more complex tests, you may use
+@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
+
+@menu
+* Particular Declarations:: Macros to check for certain declarations
+* Generic Declarations:: How to find other declarations
+@end menu
+
+@node Particular Declarations
+@subsection Particular Declaration Checks
+
+There are no specific macros for declarations.
+
+@node Generic Declarations
+@subsection Generic Declaration Checks
+
+These macros are used to find declarations not covered by the ``particular''
+test macros.
+
+@defmac AC_CHECK_DECL (@var{symbol}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_DECL}
+@caindex have_decl_@var{symbol}
+If @var{symbol} (a function, variable, or constant) is not declared in
+@var{includes} and a declaration is needed, run the shell commands
+@var{action-if-not-found}, otherwise @var{action-if-found}.
+@var{includes} is a series of include directives, defaulting to
+@code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
+prior to the declaration under test.
+
+This macro actually tests whether @var{symbol} is defined as a macro or
+can be used as an r-value, not whether it is really declared, because it
+is much safer to avoid introducing extra declarations when they are not
+needed. In order to facilitate use of C++ and overloaded function
+declarations, it is possible to specify function argument types in
+parentheses for types which can be zero-initialized:
+
+@example
+AC_CHECK_DECL([basename(char *)])
+@end example
+
+This macro caches its result in the @code{ac_cv_have_decl_@var{symbol}}
+variable, with characters not suitable for a variable name mapped to
+underscores.
+@end defmac
+
+@anchor{AC_CHECK_DECLS}
+@defmac AC_CHECK_DECLS (@var{symbols}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_DECLS}
+@cvindex HAVE_DECL_@var{symbol}
+@caindex have_decl_@var{symbol}
+For each of the @var{symbols} (@emph{comma}-separated list with optional
+function argument types for C++ overloads), define
+@code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
+@var{symbol} is declared, otherwise to @samp{0}. If
+@var{action-if-not-found} is given, it is additional shell code to
+execute when one of the function declarations is needed, otherwise
+@var{action-if-found} is executed.
+
+@var{includes} is a series of include directives, defaulting to
+@code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
+prior to the declarations under test.
+
+This macro uses an M4 list as first argument:
+@example
+AC_CHECK_DECLS([strdup])
+AC_CHECK_DECLS([strlen])
+AC_CHECK_DECLS([malloc, realloc, calloc, free])
+AC_CHECK_DECLS([j0], [], [], [[#include <math.h>]])
+AC_CHECK_DECLS([[basename(char *)], [dirname(char *)]])
+@end example
+
+Unlike the other @samp{AC_CHECK_*S} macros, when a @var{symbol} is not
+declared, @code{HAVE_DECL_@var{symbol}} is defined to @samp{0} instead
+of leaving @code{HAVE_DECL_@var{symbol}} undeclared. When you are
+@emph{sure} that the check was performed, use
+@code{HAVE_DECL_@var{symbol}} in @code{#if}:
+
+@example
+#if !HAVE_DECL_SYMBOL
+extern char *symbol;
+#endif
+@end example
+
+@noindent
+If the test may have not been performed, however, because it is safer
+@emph{not} to declare a symbol than to use a declaration that conflicts
+with the system's one, you should use:
+
+@example
+#if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
+void *malloc (size_t *s);
+#endif
+@end example
+
+@noindent
+You fall into the second category only in extreme situations: either
+your files may be used without being configured, or they are used during
+the configuration. In most cases the traditional approach is enough.
+
+This macro caches its results in @code{ac_cv_have_decl_@var{symbol}}
+variables, with characters not suitable for a variable name mapped to
+underscores.
+@end defmac
+
+@defmac AC_CHECK_DECLS_ONCE (@var{symbols})
+@acindex{CHECK_DECLS_ONCE}
+@cvindex HAVE_DECL_@var{symbol}
+For each of the @var{symbols} (@emph{comma}-separated list), define
+@code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
+@var{symbol} is declared in the default include files, otherwise to
+@samp{0}. This is a once-only variant of @code{AC_CHECK_DECLS}. It
+generates the checking code at most once, so that @command{configure} is
+smaller and faster; but the checks cannot be conditionalized and are
+always done once, early during the @command{configure} run.
+@end defmac
+
+
+@node Structures
+@section Structures
+@cindex Structure, checking
+
+The following macros check for the presence of certain members in C
+structures. If there is no macro specifically defined to check for a
+member you need, then you can use the general structure-member macros
+(@pxref{Generic Structures}) or, for more complex tests, you may use
+@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
+
+@menu
+* Particular Structures:: Macros to check for certain structure members
+* Generic Structures:: How to find other structure members
+@end menu
+
+@node Particular Structures
+@subsection Particular Structure Checks
+
+The following macros check for certain structures or structure members.
+
+@defmac AC_STRUCT_DIRENT_D_INO
+@acindex{STRUCT_DIRENT_D_INO}
+@cvindex HAVE_STRUCT_DIRENT_D_INO
+@c @caindex header_dirent_dirent_h
+@c @caindex member_struct_dirent_d_ino
+Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
+Headers}). Then, if @code{struct dirent} contains a @code{d_ino}
+member, define @code{HAVE_STRUCT_DIRENT_D_INO}.
+
+@code{HAVE_STRUCT_DIRENT_D_INO} indicates only the presence of
+@code{d_ino}, not whether its contents are always reliable.
+Traditionally, a zero @code{d_ino} indicated a deleted directory entry,
+though current systems hide this detail from the user and never return
+zero @code{d_ino} values.
+Many current systems report an incorrect @code{d_ino} for a directory
+entry that is a mount point.
+@end defmac
+
+@defmac AC_STRUCT_DIRENT_D_TYPE
+@acindex{STRUCT_DIRENT_D_TYPE}
+@cvindex HAVE_STRUCT_DIRENT_D_TYPE
+@c @caindex header_dirent_dirent_h
+@c @caindex member_struct_dirent_d_type
+Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular
+Headers}). Then, if @code{struct dirent} contains a @code{d_type}
+member, define @code{HAVE_STRUCT_DIRENT_D_TYPE}.
+@end defmac
+
+@anchor{AC_STRUCT_ST_BLOCKS}
+@defmac AC_STRUCT_ST_BLOCKS
+@acindex{STRUCT_ST_BLOCKS}
+@cvindex HAVE_STRUCT_STAT_ST_BLOCKS
+@cvindex HAVE_ST_BLOCKS
+@ovindex LIBOBJS
+@caindex member_struct_stat_st_blocks
+If @code{struct stat} contains an @code{st_blocks} member, define
+@code{HAVE_STRUCT_STAT_ST_BLOCKS}. Otherwise, require an
+@code{AC_LIBOBJ} replacement of @samp{fileblocks}. The former name,
+@code{HAVE_ST_BLOCKS} is to be avoided, as its support will cease in the
+future.
+
+This macro caches its result in the @code{ac_cv_member_struct_stat_st_blocks}
+variable.
+@end defmac
+
+@defmac AC_STRUCT_TM
+@acindex{STRUCT_TM}
+@cvindex TM_IN_SYS_TIME
+@hdrindex{time.h}
+@hdrindex{sys/time.h}
+If @file{time.h} does not define @code{struct tm}, define
+@code{TM_IN_SYS_TIME}, which means that including @file{sys/time.h}
+had better define @code{struct tm}.
+
+This macro is obsolescent, as @file{time.h} defines @code{struct tm} in
+current systems. New programs need not use this macro.
+@end defmac
+
+@anchor{AC_STRUCT_TIMEZONE}
+@defmac AC_STRUCT_TIMEZONE
+@acindex{STRUCT_TIMEZONE}
+@cvindex HAVE_DECL_TZNAME
+@cvindex HAVE_STRUCT_TM_TM_ZONE
+@cvindex HAVE_TM_ZONE
+@cvindex HAVE_TZNAME
+@c @caindex member_struct_tm_tm_zone
+@c @caindex struct_tm
+Figure out how to get the current timezone. If @code{struct tm} has a
+@code{tm_zone} member, define @code{HAVE_STRUCT_TM_TM_ZONE} (and the
+obsoleted @code{HAVE_TM_ZONE}). Otherwise, if the external array
+@code{tzname} is found, define @code{HAVE_TZNAME}; if it is declared,
+define @code{HAVE_DECL_TZNAME}.
+@end defmac
+
+@node Generic Structures
+@subsection Generic Structure Checks
+
+These macros are used to find structure members not covered by the
+``particular'' test macros.
+
+@defmac AC_CHECK_MEMBER (@var{aggregate}.@var{member}, @
+ @ovar{action-if-found}, @ovar{action-if-not-found}, @
+ @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_MEMBER}
+@caindex member_@var{aggregate}_@var{member}
+Check whether @var{member} is a member of the aggregate @var{aggregate}.
+If no @var{includes} are specified, the default includes are used
+(@pxref{Default Includes}).
+
+@example
+AC_CHECK_MEMBER([struct passwd.pw_gecos], [],
+ [AC_MSG_ERROR([we need `passwd.pw_gecos'])],
+ [[#include <pwd.h>]])
+@end example
+
+You can use this macro for submembers:
+
+@example
+AC_CHECK_MEMBER(struct top.middle.bot)
+@end example
+
+This macro caches its result in the
+@code{ac_cv_member_@var{aggregate}_@var{member}} variable, with
+characters not suitable for a variable name mapped to underscores.
+@end defmac
+
+@anchor{AC_CHECK_MEMBERS}
+@defmac AC_CHECK_MEMBERS (@var{members}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_MEMBERS}
+@cvindex HAVE_@var{aggregate}_@var{member}
+Check for the existence of each @samp{@var{aggregate}.@var{member}} of
+@var{members} using the previous macro. When @var{member} belongs to
+@var{aggregate}, define @code{HAVE_@var{aggregate}_@var{member}} (in all
+capitals, with spaces and dots replaced by underscores). If
+@var{action-if-found} is given, it is executed for each of the found
+members. If @var{action-if-not-found} is given, it is executed for each
+of the members that could not be found.
+
+@var{includes} is a series of include directives, defaulting to
+@code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
+prior to the members under test.
+
+This macro uses M4 lists:
+@example
+AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
+@end example
+@end defmac
+
+
+@node Types
+@section Types
+@cindex Types
+@cindex C types
+
+The following macros check for C types, either builtin or typedefs. If
+there is no macro specifically defined to check for a type you need, and
+you don't need to check for any special properties of it, then you can
+use a general type-check macro.
+
+@menu
+* Particular Types:: Special handling to find certain types
+* Generic Types:: How to find other types
+@end menu
+
+@node Particular Types
+@subsection Particular Type Checks
+
+@hdrindex{sys/types.h}
+@hdrindex{stdlib.h}
+@hdrindex{stdint.h}
+@hdrindex{inttypes.h}
+These macros check for particular C types in @file{sys/types.h},
+@file{stdlib.h}, @file{stdint.h}, @file{inttypes.h} and others, if they
+exist.
+
+The Gnulib @code{stdint} module is an alternate way to define many of
+these symbols; it is useful if you prefer your code to assume a
+C99-or-better environment. @xref{Gnulib}.
+
+@anchor{AC_TYPE_GETGROUPS}
+@defmac AC_TYPE_GETGROUPS
+@acindex{TYPE_GETGROUPS}
+@cvindex GETGROUPS_T
+@caindex type_getgroups
+Define @code{GETGROUPS_T} to be whichever of @code{gid_t} or @code{int}
+is the base type of the array argument to @code{getgroups}.
+
+This macro caches the base type in the @code{ac_cv_type_getgroups}
+variable.
+@end defmac
+
+@defmac AC_TYPE_INT8_T
+@acindex{TYPE_INT8_T}
+@cvindex HAVE_INT8_T
+@cvindex int8_t
+@caindex c_int8_t
+If @file{stdint.h} or @file{inttypes.h} does not define the type
+@code{int8_t}, define @code{int8_t} to a signed
+integer type that is exactly 8 bits wide and that uses two's complement
+representation, if such a type exists.
+If you are worried about porting to hosts that lack such a type, you can
+use the results of this macro in C89-or-later code as follows:
+
+@example
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#if defined INT8_MAX || defined int8_t
+ @emph{code using int8_t}
+#else
+ @emph{complicated alternative using >8-bit 'signed char'}
+#endif
+@end example
+
+This macro caches the type in the @code{ac_cv_c_int8_t} variable.
+@end defmac
+
+@defmac AC_TYPE_INT16_T
+@acindex{TYPE_INT16_T}
+@cvindex HAVE_INT16_T
+@cvindex int16_t
+@caindex c_int16_t
+This is like @code{AC_TYPE_INT8_T}, except for 16-bit integers.
+@end defmac
+
+@defmac AC_TYPE_INT32_T
+@acindex{TYPE_INT32_T}
+@cvindex HAVE_INT32_T
+@cvindex int32_t
+@caindex c_int32_t
+This is like @code{AC_TYPE_INT8_T}, except for 32-bit integers.
+@end defmac
+
+@defmac AC_TYPE_INT64_T
+@acindex{TYPE_INT64_T}
+@cvindex HAVE_INT64_T
+@cvindex int64_t
+@caindex c_int64_t
+This is like @code{AC_TYPE_INT8_T}, except for 64-bit integers.
+@end defmac
+
+@defmac AC_TYPE_INTMAX_T
+@acindex{TYPE_INTMAX_T}
+@cvindex HAVE_INTMAX_T
+@cvindex intmax_t
+@c @caindex type_intmax_t
+If @file{stdint.h} or @file{inttypes.h} defines the type @code{intmax_t},
+define @code{HAVE_INTMAX_T}. Otherwise, define @code{intmax_t} to the
+widest signed integer type.
+@end defmac
+
+@defmac AC_TYPE_INTPTR_T
+@acindex{TYPE_INTPTR_T}
+@cvindex HAVE_INTPTR_T
+@cvindex intptr_t
+@c @caindex type_intptr_t
+If @file{stdint.h} or @file{inttypes.h} defines the type @code{intptr_t},
+define @code{HAVE_INTPTR_T}. Otherwise, define @code{intptr_t} to a
+signed integer type wide enough to hold a pointer, if such a type
+exists.
+@end defmac
+
+@defmac AC_TYPE_LONG_DOUBLE
+@acindex{TYPE_LONG_DOUBLE}
+@cvindex HAVE_LONG_DOUBLE
+@caindex type_long_double
+If the C compiler supports a working @code{long double} type, define
+@code{HAVE_LONG_DOUBLE}. The @code{long double} type might have the
+same range and precision as @code{double}.
+
+This macro caches its result in the @code{ac_cv_type_long_double}
+variable.
+
+This macro is obsolescent, as current C compilers support @code{long
+double}. New programs need not use this macro.
+@end defmac
+
+@defmac AC_TYPE_LONG_DOUBLE_WIDER
+@acindex{TYPE_LONG_DOUBLE_WIDER}
+@cvindex HAVE_LONG_DOUBLE_WIDER
+@caindex type_long_double_wider
+If the C compiler supports a working @code{long double} type with more
+range or precision than the @code{double} type, define
+@code{HAVE_LONG_DOUBLE_WIDER}.
+
+This macro caches its result in the @code{ac_cv_type_long_double_wider}
+variable.
+@end defmac
+
+@defmac AC_TYPE_LONG_LONG_INT
+@acindex{TYPE_LONG_LONG_INT}
+@cvindex HAVE_LONG_LONG_INT
+@caindex type_long_long_int
+If the C compiler supports a working @code{long long int} type, define
+@code{HAVE_LONG_LONG_INT}. However, this test does not test
+@code{long long int} values in preprocessor @code{#if} expressions,
+because too many compilers mishandle such expressions.
+@xref{Preprocessor Arithmetic}.
+
+This macro caches its result in the @code{ac_cv_type_long_long_int}
+variable.
+@end defmac
+
+@defmac AC_TYPE_MBSTATE_T
+@acindex{TYPE_MBSTATE_T}
+@cvindex mbstate_t
+@hdrindex{wchar.h}
+@caindex type_mbstate_t
+Define @code{HAVE_MBSTATE_T} if @code{<wchar.h>} declares the
+@code{mbstate_t} type. Also, define @code{mbstate_t} to be a type if
+@code{<wchar.h>} does not declare it.
+
+This macro caches its result in the @code{ac_cv_type_mbstate_t}
+variable.
+@end defmac
+
+@anchor{AC_TYPE_MODE_T}
+@defmac AC_TYPE_MODE_T
+@acindex{TYPE_MODE_T}
+@cvindex mode_t
+@caindex type_mode_t
+Define @code{mode_t} to a suitable type, if standard headers do not
+define it.
+
+This macro caches its result in the @code{ac_cv_type_mode_t} variable.
+@end defmac
+
+@anchor{AC_TYPE_OFF_T}
+@defmac AC_TYPE_OFF_T
+@acindex{TYPE_OFF_T}
+@cvindex off_t
+@caindex type_off_t
+Define @code{off_t} to a suitable type, if standard headers do not
+define it.
+
+This macro caches its result in the @code{ac_cv_type_off_t} variable.
+@end defmac
+
+@anchor{AC_TYPE_PID_T}
+@defmac AC_TYPE_PID_T
+@acindex{TYPE_PID_T}
+@cvindex pid_t
+@caindex type_pid_t
+Define @code{pid_t} to a suitable type, if standard headers do not
+define it.
+
+This macro caches its result in the @code{ac_cv_type_pid_t} variable.
+@end defmac
+
+@anchor{AC_TYPE_SIZE_T}
+@defmac AC_TYPE_SIZE_T
+@acindex{TYPE_SIZE_T}
+@cvindex size_t
+@caindex type_size_t
+Define @code{size_t} to a suitable type, if standard headers do not
+define it.
+
+This macro caches its result in the @code{ac_cv_type_size_t} variable.
+@end defmac
+
+@defmac AC_TYPE_SSIZE_T
+@acindex{TYPE_SSIZE_T}
+@cvindex ssize_t
+@caindex type_ssize_t
+Define @code{ssize_t} to a suitable type, if standard headers do not
+define it.
+
+This macro caches its result in the @code{ac_cv_type_ssize_t} variable.
+@end defmac
+
+@anchor{AC_TYPE_UID_T}
+@defmac AC_TYPE_UID_T
+@acindex{TYPE_UID_T}
+@cvindex uid_t
+@cvindex gid_t
+@caindex type_uid_t
+Define @code{uid_t} and @code{gid_t} to suitable types, if standard
+headers do not define them.
+
+This macro caches its result in the @code{ac_cv_type_uid_t} variable.
+@end defmac
+
+@defmac AC_TYPE_UINT8_T
+@acindex{TYPE_UINT8_T}
+@cvindex HAVE_UINT8_T
+@cvindex uint8_t
+@caindex c_uint8_t
+If @file{stdint.h} or @file{inttypes.h} does not define the type
+@code{uint8_t}, define @code{uint8_t} to an
+unsigned integer type that is exactly 8 bits wide, if such a type
+exists.
+This is like @code{AC_TYPE_INT8_T}, except for unsigned integers.
+@end defmac
+
+@defmac AC_TYPE_UINT16_T
+@acindex{TYPE_UINT16_T}
+@cvindex HAVE_UINT16_T
+@cvindex uint16_t
+@caindex c_uint16_t
+This is like @code{AC_TYPE_UINT8_T}, except for 16-bit integers.
+@end defmac
+
+@defmac AC_TYPE_UINT32_T
+@acindex{TYPE_UINT32_T}
+@cvindex HAVE_UINT32_T
+@cvindex uint32_t
+@caindex c_uint32_t
+This is like @code{AC_TYPE_UINT8_T}, except for 32-bit integers.
+@end defmac
+
+@defmac AC_TYPE_UINT64_T
+@acindex{TYPE_UINT64_T}
+@cvindex HAVE_UINT64_T
+@cvindex uint64_t
+@caindex c_uint64_t
+This is like @code{AC_TYPE_UINT8_T}, except for 64-bit integers.
+@end defmac
+
+@defmac AC_TYPE_UINTMAX_T
+@acindex{TYPE_UINTMAX_T}
+@cvindex HAVE_UINTMAX_T
+@cvindex uintmax_t
+@c @caindex type_uintmax_t
+If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintmax_t},
+define @code{HAVE_UINTMAX_T}. Otherwise, define @code{uintmax_t} to the
+widest unsigned integer type.
+@end defmac
+
+@defmac AC_TYPE_UINTPTR_T
+@acindex{TYPE_UINTPTR_T}
+@cvindex HAVE_UINTPTR_T
+@cvindex uintptr_t
+@c @caindex type_uintptr_t
+If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintptr_t},
+define @code{HAVE_UINTPTR_T}. Otherwise, define @code{uintptr_t} to an
+unsigned integer type wide enough to hold a pointer, if such a type
+exists.
+@end defmac
+
+@defmac AC_TYPE_UNSIGNED_LONG_LONG_INT
+@acindex{TYPE_UNSIGNED_LONG_LONG_INT}
+@cvindex HAVE_UNSIGNED_LONG_LONG_INT
+@caindex type_unsigned_long_long_int
+If the C compiler supports a working @code{unsigned long long int} type,
+define @code{HAVE_UNSIGNED_LONG_LONG_INT}. However, this test does not test
+@code{unsigned long long int} values in preprocessor @code{#if} expressions,
+because too many compilers mishandle such expressions.
+@xref{Preprocessor Arithmetic}.
+
+This macro caches its result in the @code{ac_cv_type_unsigned_long_long_int}
+variable.
+@end defmac
+
+@node Generic Types
+@subsection Generic Type Checks
+
+These macros are used to check for types not covered by the ``particular''
+test macros.
+
+@defmac AC_CHECK_TYPE (@var{type}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_TYPE}
+@caindex type_@var{type}
+Check whether @var{type} is defined. It may be a compiler builtin type
+or defined by the @var{includes}. @var{includes} is a series of include
+directives, defaulting to @code{AC_INCLUDES_DEFAULT} (@pxref{Default
+Includes}), which are used prior to the type under test.
+
+In C, @var{type} must be a type-name, so that the expression @samp{sizeof
+(@var{type})} is valid (but @samp{sizeof ((@var{type}))} is not). The
+same test is applied when compiling for C++, which means that in C++
+@var{type} should be a type-id and should not be an anonymous
+@samp{struct} or @samp{union}.
+
+This macro caches its result in the @code{ac_cv_type_@var{type}}
+variable, with @samp{*} mapped to @samp{p} and other characters not
+suitable for a variable name mapped to underscores.
+@end defmac
+
+
+@defmac AC_CHECK_TYPES (@var{types}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_TYPES}
+@cvindex HAVE_@var{type}
+For each @var{type} of the @var{types} that is defined, define
+@code{HAVE_@var{type}} (in all capitals). Each @var{type} must follow
+the rules of @code{AC_CHECK_TYPE}. If no @var{includes} are
+specified, the default includes are used (@pxref{Default Includes}). If
+@var{action-if-found} is given, it is additional shell code to execute
+when one of the types is found. If @var{action-if-not-found} is given,
+it is executed when one of the types is not found.
+
+This macro uses M4 lists:
+@example
+AC_CHECK_TYPES([ptrdiff_t])
+AC_CHECK_TYPES([unsigned long long int, uintmax_t])
+AC_CHECK_TYPES([float_t], [], [], [[#include <math.h>]])
+@end example
+
+@end defmac
+
+Autoconf, up to 2.13, used to provide to another version of
+@code{AC_CHECK_TYPE}, broken by design. In order to keep backward
+compatibility, a simple heuristic, quite safe but not totally, is
+implemented. In case of doubt, read the documentation of the former
+@code{AC_CHECK_TYPE}, see @ref{Obsolete Macros}.
+
+
+@node Compilers and Preprocessors
+@section Compilers and Preprocessors
+@cindex Compilers
+@cindex Preprocessors
+
+@ovindex EXEEXT
+All the tests for compilers (@code{AC_PROG_CC}, @code{AC_PROG_CXX},
+@code{AC_PROG_F77}) define the output variable @code{EXEEXT} based on
+the output of the compiler, typically to the empty string if
+Posix and @samp{.exe} if a DOS variant.
+
+@ovindex OBJEXT
+They also define the output variable @code{OBJEXT} based on the
+output of the compiler, after @file{.c} files have been excluded, typically
+to @samp{o} if Posix, @samp{obj} if a DOS variant.
+
+If the compiler being used does not produce executables, the tests fail. If
+the executables can't be run, and cross-compilation is not enabled, they
+fail too. @xref{Manual Configuration}, for more on support for cross
+compiling.
+
+@menu
+* Specific Compiler Characteristics:: Some portability issues
+* Generic Compiler Characteristics:: Language independent tests and features
+* C Compiler:: Checking its characteristics
+* C++ Compiler:: Likewise
+* Objective C Compiler:: Likewise
+* Objective C++ Compiler:: Likewise
+* Erlang Compiler and Interpreter:: Likewise
+* Fortran Compiler:: Likewise
+* Go Compiler:: Likewise
+@end menu
+
+@node Specific Compiler Characteristics
+@subsection Specific Compiler Characteristics
+
+Some compilers exhibit different behaviors.
+
+@table @asis
+@item Static/Dynamic Expressions
+Autoconf relies on a trick to extract one bit of information from the C
+compiler: using negative array sizes. For instance the following
+excerpt of a C source demonstrates how to test whether @samp{int} objects are 4
+bytes wide:
+
+@example
+static int test_array[sizeof (int) == 4 ? 1 : -1];
+@end example
+
+@noindent
+To our knowledge, there is a single compiler that does not support this
+trick: the HP C compilers (the real ones, not only the
+``bundled'') on HP-UX 11.00.
+They incorrectly reject the above program with the diagnostic
+``Variable-length arrays cannot have static storage.''
+This bug comes from HP compilers' mishandling of @code{sizeof (int)},
+not from the @code{? 1 : -1}, and
+Autoconf works around this problem by casting @code{sizeof (int)} to
+@code{long int} before comparing it.
+@end table
+
+@node Generic Compiler Characteristics
+@subsection Generic Compiler Characteristics
+
+@anchor{AC_CHECK_SIZEOF}
+@defmac AC_CHECK_SIZEOF (@var{type-or-expr}, @ovar{unused}, @
+ @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_SIZEOF}
+@cvindex SIZEOF_@var{type-or-expr}
+@caindex sizeof_@var{type-or-expr}
+Define @code{SIZEOF_@var{type-or-expr}} (@pxref{Standard Symbols}) to be
+the size in bytes of @var{type-or-expr}, which may be either a type or
+an expression returning a value that has a size. If the expression
+@samp{sizeof (@var{type-or-expr})} is invalid, the result is 0.
+@var{includes} is a series of include directives, defaulting to
+@code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), which are used
+prior to the expression under test.
+
+This macro now works even when cross-compiling. The @var{unused}
+argument was used when cross-compiling.
+
+For example, the call
+
+@example
+@c If you change this example, adjust tests/semantics.at:AC_CHECK_SIZEOF struct.
+AC_CHECK_SIZEOF([int *])
+@end example
+
+@noindent
+defines @code{SIZEOF_INT_P} to be 8 on DEC Alpha AXP systems.
+
+This macro caches its result in the @code{ac_cv_sizeof_@var{type-or-expr}}
+variable, with @samp{*} mapped to @samp{p} and other characters not
+suitable for a variable name mapped to underscores.
+@end defmac
+
+@defmac AC_CHECK_ALIGNOF (@var{type}, @dvar{includes, AC_INCLUDES_DEFAULT})
+@acindex{CHECK_ALIGNOF}
+@cvindex ALIGNOF_@var{type}
+@caindex alignof_@var{type-or-expr}
+Define @code{ALIGNOF_@var{type}} (@pxref{Standard Symbols}) to be the
+alignment in bytes of @var{type}. @samp{@var{type} y;} must be valid as
+a structure member declaration. If @samp{type} is unknown, the result
+is 0. If no @var{includes} are specified, the default includes are used
+(@pxref{Default Includes}).
+
+This macro caches its result in the @code{ac_cv_alignof_@var{type-or-expr}}
+variable, with @samp{*} mapped to @samp{p} and other characters not
+suitable for a variable name mapped to underscores.
+@end defmac
+
+@defmac AC_COMPUTE_INT (@var{var}, @var{expression}, @
+ @dvar{includes, AC_INCLUDES_DEFAULT}, @ovar{action-if-fails})
+@acindex{COMPUTE_INT}
+Store into the shell variable @var{var} the value of the integer
+@var{expression}. The
+value should fit in an initializer in a C variable of type @code{signed
+long}. To support cross compilation (in which case, the macro only works on
+hosts that use twos-complement arithmetic), it should be possible to evaluate
+the expression at compile-time. If no @var{includes} are specified, the
+default includes are used (@pxref{Default Includes}).
+
+Execute @var{action-if-fails} if the value cannot be determined correctly.
+@end defmac
+
+@defmac AC_LANG_WERROR
+@acindex{LANG_WERROR}
+Normally Autoconf ignores warnings generated by the compiler, linker, and
+preprocessor. If this macro is used, warnings count as fatal
+errors for the current language. This macro is useful when the
+results of configuration are used where warnings are unacceptable; for
+instance, if parts of a program are built with the GCC
+@option{-Werror}
+option. If the whole program is built using @option{-Werror} it is
+often simpler to put @option{-Werror} in the compiler flags (@code{CFLAGS},
+etc.).
+@end defmac
+
+@defmac AC_OPENMP
+@acindex{OPENMP}
+@cvindex _OPENMP
+@ovindex OPENMP_CFLAGS
+@ovindex OPENMP_CXXFLAGS
+@ovindex OPENMP_FFLAGS
+@ovindex OPENMP_FCFLAGS
+@caindex prog_c_openmp
+@caindex prog_cxx_openmp
+@caindex prog_f77_openmp
+@caindex prog_fc_openmp
+@uref{http://@/www.openmp.org/, OpenMP} specifies extensions of C, C++,
+and Fortran that simplify optimization of shared memory parallelism,
+which is a common problem on multicore CPUs.
+
+If the current language is C, the macro @code{AC_OPENMP} sets the
+variable @code{OPENMP_CFLAGS} to the C compiler flags needed for
+supporting OpenMP@. @code{OPENMP_CFLAGS} is set to empty if the
+compiler already supports OpenMP, if it has no way to activate OpenMP
+support, or if the user rejects OpenMP support by invoking
+@samp{configure} with the @samp{--disable-openmp} option.
+
+@code{OPENMP_CFLAGS} needs to be used when compiling programs, when
+preprocessing program source, and when linking programs. Therefore you
+need to add @code{$(OPENMP_CFLAGS)} to the @code{CFLAGS} of C programs
+that use OpenMP@. If you preprocess OpenMP-specific C code, you also
+need to add @code{$(OPENMP_CFLAGS)} to @code{CPPFLAGS}. The presence of
+OpenMP support is revealed at compile time by the preprocessor macro
+@code{_OPENMP}.
+
+Linking a program with @code{OPENMP_CFLAGS} typically adds one more
+shared library to the program's dependencies, so its use is recommended
+only on programs that actually require OpenMP.
+
+If the current language is C++, @code{AC_OPENMP} sets the variable
+@code{OPENMP_CXXFLAGS}, suitably for the C++ compiler. The same remarks
+hold as for C.
+
+If the current language is Fortran 77 or Fortran, @code{AC_OPENMP} sets
+the variable @code{OPENMP_FFLAGS} or @code{OPENMP_FCFLAGS},
+respectively. Similar remarks as for C hold, except that
+@code{CPPFLAGS} is not used for Fortran, and no preprocessor macro
+signals OpenMP support.
+
+For portability, it is best to avoid spaces between @samp{#} and
+@samp{pragma omp}. That is, write @samp{#pragma omp}, not
+@samp{# pragma omp}. The Sun WorkShop 6.2 C compiler chokes on the
+latter.
+
+This macro caches its result in the @code{ac_cv_prog_c_openmp},
+@code{ac_cv_prog_cxx_openmp}, @code{ac_cv_prog_f77_openmp}, or
+@code{ac_cv_prog_fc_openmp} variable, depending on the current language.
+@end defmac
+
+@node C Compiler
+@subsection C Compiler Characteristics
+
+The following macros provide ways to find and exercise a C Compiler.
+There are a few constructs that ought to be avoided, but do not deserve
+being checked for, since they can easily be worked around.
+
+@table @asis
+@item Don't use lines containing solitary backslashes
+They tickle a bug in the HP-UX C compiler (checked on
+HP-UX 10.20,
+11.00, and 11i). When given the following source:
+
+@example
+#ifdef __STDC__
+/\
+* A comment with backslash-newlines in it. %@{ %@} *\
+\
+/
+char str[] = "\\
+" A string with backslash-newlines in it %@{ %@} \\
+"";
+char apostrophe = '\\
+\
+'\
+';
+#endif
+@end example
+
+@noindent
+the compiler incorrectly fails with the diagnostics ``Non-terminating
+comment at end of file'' and ``Missing @samp{#endif} at end of file.''
+Removing the lines with solitary backslashes solves the problem.
+
+@item Don't compile several files at once if output matters to you
+Some compilers, such as HP's, report names of files being
+compiled when given more than one file operand. For instance:
+
+@example
+$ @kbd{cc a.c b.c}
+a.c:
+b.c:
+@end example
+
+@noindent
+This can cause problems if you observe the output of the compiler to
+detect failures. Invoking @samp{cc -c a.c && cc -c b.c && cc -o c a.o
+b.o} solves the issue.
+
+@item Don't rely on @code{#error} failing
+The IRIX C compiler does not fail when #error is preprocessed; it
+simply emits a diagnostic and continues, exiting successfully. So,
+instead of an error directive like @code{#error "Unsupported word size"}
+it is more portable to use an invalid directive like @code{#Unsupported
+word size} in Autoconf tests. In ordinary source code, @code{#error} is
+OK, since installers with inadequate compilers like IRIX can simply
+examine these compilers' diagnostic output.
+
+@item Don't rely on correct @code{#line} support
+On Solaris, @command{c89} (at least Sun C 5.3 through 5.8)
+diagnoses @code{#line} directives whose line
+numbers are greater than 32767. Nothing in Posix
+makes this invalid. That is why Autoconf stopped issuing
+@code{#line} directives.
+@end table
+
+@defmac AC_PROG_CC (@ovar{compiler-search-list})
+@acindex{PROG_CC}
+@evindex CC
+@evindex CFLAGS
+@ovindex CC
+@ovindex CFLAGS
+@caindex prog_cc_c89
+Determine a C compiler to use. If @code{CC} is not already set in the
+environment, check for @code{gcc} and @code{cc}, then for other C
+compilers. Set output variable @code{CC} to the name of the compiler
+found.
+
+This macro may, however, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of C compilers to
+search for. This just gives the user an opportunity to specify an
+alternative search list for the C compiler. For example, if you didn't
+like the default order, then you could invoke @code{AC_PROG_CC} like
+this:
+
+@example
+AC_PROG_CC([gcc cl cc])
+@end example
+
+If the C compiler does not handle function prototypes correctly by
+default, try to add an option to output variable @code{CC} to make it
+so. This macro tries various options that select standard-conformance
+modes on various systems.
+
+After calling this macro you can check whether the C compiler has been
+set to accept ANSI C89 (ISO C90); if not, the shell
+variable
+@code{ac_cv_prog_cc_c89} is set to @samp{no}. See also
+@code{AC_C_PROTOTYPES} below.
+
+If using the GNU C compiler, set shell variable @code{GCC} to
+@samp{yes}. If output variable @code{CFLAGS} was not already set, set
+it to @option{-g -O2} for the GNU C compiler (@option{-O2} on systems
+where GCC does not accept @option{-g}), or @option{-g} for
+other compilers. If your package does not like this default, then it is
+acceptable to insert the line @samp{: $@{CFLAGS=""@}} after @code{AC_INIT}
+and before @code{AC_PROG_CC} to select an empty default instead.
+
+Many Autoconf macros use a compiler, and thus call
+@samp{AC_REQUIRE([AC_PROG_CC])} to ensure that the compiler has been
+determined before the body of the outermost @code{AC_DEFUN} macro.
+Although @code{AC_PROG_CC} is safe to directly expand multiple times, it
+performs certain checks (such as the proper value of @env{EXEEXT}) only
+on the first invocation. Therefore, care must be used when invoking
+this macro from within another macro rather than at the top level
+(@pxref{Expanded Before Required}).
+@end defmac
+
+@anchor{AC_PROG_CC_C_O}
+@defmac AC_PROG_CC_C_O
+@acindex{PROG_CC_C_O}
+@cvindex NO_MINUS_C_MINUS_O
+@caindex prog_cc_@var{compiler}_c_o
+If the C compiler does not accept the @option{-c} and @option{-o} options
+simultaneously, define @code{NO_MINUS_C_MINUS_O}. This macro actually
+tests both the compiler found by @code{AC_PROG_CC}, and, if different,
+the first @code{cc} in the path. The test fails if one fails. This
+macro was created for GNU Make to choose the default C compilation
+rule.
+
+For the compiler @var{compiler}, this macro caches its result in the
+@code{ac_cv_prog_cc_@var{compiler}_c_o} variable.
+@end defmac
+
+
+@defmac AC_PROG_CPP
+@acindex{PROG_CPP}
+@evindex CPP
+@ovindex CPP
+Set output variable @code{CPP} to a command that runs the
+C preprocessor. If @samp{$CC -E} doesn't work, @file{/lib/cpp} is used.
+It is only portable to run @code{CPP} on files with a @file{.c}
+extension.
+
+Some preprocessors don't indicate missing include files by the error
+status. For such preprocessors an internal variable is set that causes
+other macros to check the standard error from the preprocessor and
+consider the test failed if any warnings have been reported.
+For most preprocessors, though, warnings do not cause include-file
+tests to fail unless @code{AC_PROG_CPP_WERROR} is also specified.
+@end defmac
+
+@defmac AC_PROG_CPP_WERROR
+@acindex{PROG_CPP_WERROR}
+@ovindex CPP
+This acts like @code{AC_PROG_CPP}, except it treats warnings from the
+preprocessor as errors even if the preprocessor exit status indicates
+success. This is useful for avoiding headers that generate mandatory
+warnings, such as deprecation notices.
+@end defmac
+
+
+The following macros check for C compiler or machine architecture
+features. To check for characteristics not listed here, use
+@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
+@code{AC_RUN_IFELSE} (@pxref{Runtime}).
+
+@defmac AC_PROG_CC_STDC
+@acindex{PROG_CC_STDC}
+@caindex prog_cc_stdc
+If the C compiler cannot compile ISO Standard C (currently
+C99), try to add an option to output variable @code{CC} to make it work.
+If the compiler does not support C99, fall back to supporting
+ANSI C89 (ISO C90).
+
+After calling this macro you can check whether the C compiler has been
+set to accept Standard C; if not, the shell variable
+@code{ac_cv_prog_cc_stdc} is set to @samp{no}.
+@end defmac
+
+@defmac AC_PROG_CC_C89
+@acindex{PROG_CC_C89}
+@caindex prog_cc_c89
+If the C compiler is not in ANSI C89 (ISO C90) mode by
+default, try to add an option to output variable @code{CC} to make it
+so. This macro tries various options that select ANSI C89 on
+some system or another, preferring extended functionality modes over
+strict conformance modes. It considers the compiler to be in
+ANSI C89 mode if it handles function prototypes correctly.
+
+After calling this macro you can check whether the C compiler has been
+set to accept ANSI C89; if not, the shell variable
+@code{ac_cv_prog_cc_c89} is set to @samp{no}.
+
+This macro is called automatically by @code{AC_PROG_CC}.
+@end defmac
+
+@defmac AC_PROG_CC_C99
+@acindex{PROG_CC_C99}
+@caindex prog_cc_c99
+If the C compiler is not in C99 mode by default, try to add an
+option to output variable @code{CC} to make it so. This macro tries
+various options that select C99 on some system or another, preferring
+extended functionality modes over strict conformance modes. It
+considers the compiler to be in C99 mode if it handles @code{_Bool},
+@code{//} comments, flexible array members, @code{inline}, signed and
+unsigned @code{long long int}, mixed code and declarations, named
+initialization of structs,
+@code{restrict}, @code{va_copy}, varargs macros, variable declarations
+in @code{for} loops, and variable length arrays.
+
+After calling this macro you can check whether the C compiler has been
+set to accept C99; if not, the shell variable
+@code{ac_cv_prog_cc_c99} is set to @samp{no}.
+@end defmac
+
+@defmac AC_C_BACKSLASH_A
+@acindex{C_BACKSLASH_A}
+@cvindex HAVE_C_BACKSLASH_A
+Define @samp{HAVE_C_BACKSLASH_A} to 1 if the C compiler understands
+@samp{\a}.
+
+This macro is obsolescent, as current C compilers understand @samp{\a}.
+New programs need not use this macro.
+@end defmac
+
+@anchor{AC_C_BIGENDIAN}
+@defmac AC_C_BIGENDIAN (@ovar{action-if-true}, @ovar{action-if-false}, @
+ @ovar{action-if-unknown}, @ovar{action-if-universal})
+@acindex{C_BIGENDIAN}
+@cvindex WORDS_BIGENDIAN
+@cindex Endianness
+If words are stored with the most significant byte first (like Motorola
+and SPARC CPUs), execute @var{action-if-true}. If words are stored with
+the least significant byte first (like Intel and VAX CPUs), execute
+@var{action-if-false}.
+
+This macro runs a test-case if endianness cannot be determined from the
+system header files. When cross-compiling, the test-case is not run but
+grep'ed for some magic values. @var{action-if-unknown} is executed if
+the latter case fails to determine the byte sex of the host system.
+
+In some cases a single run of a compiler can generate code for multiple
+architectures. This can happen, for example, when generating Mac OS X
+universal binary files, which work on both PowerPC and Intel
+architectures. In this case, the different variants might be for
+different architectures whose endiannesses differ. If
+@command{configure} detects this, it executes @var{action-if-universal}
+instead of @var{action-if-unknown}.
+
+The default for @var{action-if-true} is to define
+@samp{WORDS_BIGENDIAN}. The default for @var{action-if-false} is to do
+nothing. The default for @var{action-if-unknown} is to
+abort configure and tell the installer how to bypass this test.
+And finally, the default for @var{action-if-universal} is to ensure that
+@samp{WORDS_BIGENDIAN} is defined if and only if a universal build is
+detected and the current code is big-endian; this default works only if
+@command{autoheader} is used (@pxref{autoheader Invocation}).
+
+If you use this macro without specifying @var{action-if-universal}, you
+should also use @code{AC_CONFIG_HEADERS}; otherwise
+@samp{WORDS_BIGENDIAN} may be set incorrectly for Mac OS X universal
+binary files.
+@end defmac
+
+@anchor{AC_C_CONST}
+@defmac AC_C_CONST
+@acindex{C_CONST}
+@cvindex const
+@caindex c_const
+If the C compiler does not fully support the @code{const} keyword,
+define @code{const} to be empty. Some C compilers that do
+not define @code{__STDC__} do support @code{const}; some compilers that
+define @code{__STDC__} do not completely support @code{const}. Programs
+can simply use @code{const} as if every C compiler supported it; for
+those that don't, the makefile or configuration header file
+defines it as empty.
+
+Occasionally installers use a C++ compiler to compile C code, typically
+because they lack a C compiler. This causes problems with @code{const},
+because C and C++ treat @code{const} differently. For example:
+
+@example
+const int foo;
+@end example
+
+@noindent
+is valid in C but not in C++. These differences unfortunately cannot be
+papered over by defining @code{const} to be empty.
+
+If @command{autoconf} detects this situation, it leaves @code{const} alone,
+as this generally yields better results in practice. However, using a
+C++ compiler to compile C code is not recommended or supported, and
+installers who run into trouble in this area should get a C compiler
+like GCC to compile their C code.
+
+This macro caches its result in the @code{ac_cv_c_const} variable.
+
+This macro is obsolescent, as current C compilers support @code{const}.
+New programs need not use this macro.
+@end defmac
+
+@defmac AC_C_RESTRICT
+@acindex{C_RESTRICT}
+@cvindex restrict
+@caindex c_restrict
+If the C compiler recognizes a variant spelling for the @code{restrict}
+keyword (@code{__restrict}, @code{__restrict__}, or @code{_Restrict}),
+then define @code{restrict} to that; this is more likely to do the right
+thing with compilers that support language variants where plain
+@code{restrict} is not a keyword. Otherwise, if the C compiler
+recognizes the @code{restrict} keyword, don't do anything.
+Otherwise, define @code{restrict} to be empty.
+Thus, programs may simply use @code{restrict} as if every C compiler
+supported it; for those that do not, the makefile
+or configuration header defines it away.
+
+Although support in C++ for the @code{restrict} keyword is not
+required, several C++ compilers do accept the keyword.
+This macro works for them, too.
+
+This macro caches @samp{no} in the @code{ac_cv_c_restrict} variable
+if @code{restrict} is not supported, and a supported spelling otherwise.
+@end defmac
+
+@defmac AC_C_VOLATILE
+@acindex{C_VOLATILE}
+@cvindex volatile
+If the C compiler does not understand the keyword @code{volatile},
+define @code{volatile} to be empty. Programs can simply use
+@code{volatile} as if every C compiler supported it; for those that do
+not, the makefile or configuration header defines it as
+empty.
+
+If the correctness of your program depends on the semantics of
+@code{volatile}, simply defining it to be empty does, in a sense, break
+your code. However, given that the compiler does not support
+@code{volatile}, you are at its mercy anyway. At least your
+program compiles, when it wouldn't before.
+@xref{Volatile Objects}, for more about @code{volatile}.
+
+In general, the @code{volatile} keyword is a standard C feature, so
+you might expect that @code{volatile} is available only when
+@code{__STDC__} is defined. However, Ultrix 4.3's native compiler does
+support volatile, but does not define @code{__STDC__}.
+
+This macro is obsolescent, as current C compilers support @code{volatile}.
+New programs need not use this macro.
+@end defmac
+
+@anchor{AC_C_INLINE}
+@defmac AC_C_INLINE
+@acindex{C_INLINE}
+@cvindex inline
+If the C compiler supports the keyword @code{inline}, do nothing.
+Otherwise define @code{inline} to @code{__inline__} or @code{__inline}
+if it accepts one of those, otherwise define @code{inline} to be empty.
+@end defmac
+
+@anchor{AC_C_CHAR_UNSIGNED}
+@defmac AC_C_CHAR_UNSIGNED
+@acindex{C_CHAR_UNSIGNED}
+@cvindex __CHAR_UNSIGNED__
+If the C type @code{char} is unsigned, define @code{__CHAR_UNSIGNED__},
+unless the C compiler predefines it.
+
+These days, using this macro is not necessary. The same information can
+be determined by this portable alternative, thus avoiding the use of
+preprocessor macros in the namespace reserved for the implementation.
+
+@example
+#include <limits.h>
+#if CHAR_MIN == 0
+# define CHAR_UNSIGNED 1
+#endif
+@end example
+@end defmac
+
+@defmac AC_C_STRINGIZE
+@acindex{C_STRINGIZE}
+@cvindex HAVE_STRINGIZE
+If the C preprocessor supports the stringizing operator, define
+@code{HAVE_STRINGIZE}. The stringizing operator is @samp{#} and is
+found in macros such as this:
+
+@example
+#define x(y) #y
+@end example
+
+This macro is obsolescent, as current C compilers support the
+stringizing operator. New programs need not use this macro.
+@end defmac
+
+@defmac AC_C_FLEXIBLE_ARRAY_MEMBER
+@acindex{C_FLEXIBLE_ARRAY_MEMBER}
+@cvindex FLEXIBLE_ARRAY_MEMBER
+If the C compiler supports flexible array members, define
+@code{FLEXIBLE_ARRAY_MEMBER} to nothing; otherwise define it to 1.
+That way, a declaration like this:
+
+@example
+struct s
+ @{
+ size_t n_vals;
+ double val[FLEXIBLE_ARRAY_MEMBER];
+ @};
+@end example
+
+@noindent
+will let applications use the ``struct hack'' even with compilers that
+do not support flexible array members. To allocate and use such an
+object, you can use code like this:
+
+@example
+size_t i;
+size_t n = compute_value_count ();
+struct s *p =
+ malloc (offsetof (struct s, val)
+ + n * sizeof (double));
+p->n_vals = n;
+for (i = 0; i < n; i++)
+ p->val[i] = compute_value (i);
+@end example
+@end defmac
+
+@defmac AC_C_VARARRAYS
+@acindex{C_VARARRAYS}
+@cvindex HAVE_C_VARARRAYS
+If the C compiler supports variable-length arrays, define
+@code{HAVE_C_VARARRAYS}. A variable-length array is an array of automatic
+storage duration whose length is determined at run time, when the array
+is declared.
+@end defmac
+
+@defmac AC_C_TYPEOF
+@acindex{C_TYPEOF}
+@cvindex HAVE_TYPEOF
+@cvindex typeof
+If the C compiler supports GCC's @code{typeof} syntax either
+directly or
+through a different spelling of the keyword (e.g., @code{__typeof__}),
+define @code{HAVE_TYPEOF}. If the support is available only through a
+different spelling, define @code{typeof} to that spelling.
+@end defmac
+
+@defmac AC_C_PROTOTYPES
+@acindex{C_PROTOTYPES}
+@cvindex PROTOTYPES
+@cvindex __PROTOTYPES
+@cvindex PARAMS
+If function prototypes are understood by the compiler (as determined by
+@code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
+Defining @code{__PROTOTYPES} is for the benefit of
+header files that cannot use macros that infringe on user name space.
+
+This macro is obsolescent, as current C compilers support prototypes.
+New programs need not use this macro.
+@end defmac
+
+@anchor{AC_PROG_GCC_TRADITIONAL}
+@defmac AC_PROG_GCC_TRADITIONAL
+@acindex{PROG_GCC_TRADITIONAL}
+@ovindex CC
+Add @option{-traditional} to output variable @code{CC} if using the
+GNU C compiler and @code{ioctl} does not work properly without
+@option{-traditional}. That usually happens when the fixed header files
+have not been installed on an old system.
+
+This macro is obsolescent, since current versions of the GNU C
+compiler fix the header files automatically when installed.
+@end defmac
+
+
+@node C++ Compiler
+@subsection C++ Compiler Characteristics
+
+
+@defmac AC_PROG_CXX (@ovar{compiler-search-list})
+@acindex{PROG_CXX}
+@evindex CXX
+@evindex CXXFLAGS
+@ovindex CXX
+@ovindex CXXFLAGS
+Determine a C++ compiler to use. Check whether the environment variable
+@code{CXX} or @code{CCC} (in that order) is set; if so, then set output
+variable @code{CXX} to its value.
+
+Otherwise, if the macro is invoked without an argument, then search for
+a C++ compiler under the likely names (first @code{g++} and @code{c++}
+then other names). If none of those checks succeed, then as a last
+resort set @code{CXX} to @code{g++}.
+
+This macro may, however, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of C++ compilers to
+search for. This just gives the user an opportunity to specify an
+alternative search list for the C++ compiler. For example, if you
+didn't like the default order, then you could invoke @code{AC_PROG_CXX}
+like this:
+
+@example
+AC_PROG_CXX([gcc cl KCC CC cxx cc++ xlC aCC c++ g++])
+@end example
+
+If using the GNU C++ compiler, set shell variable @code{GXX} to
+@samp{yes}. If output variable @code{CXXFLAGS} was not already set, set
+it to @option{-g -O2} for the GNU C++ compiler (@option{-O2} on
+systems where G++ does not accept @option{-g}), or @option{-g} for other
+compilers. If your package does not like this default, then it is
+acceptable to insert the line @samp{: $@{CXXFLAGS=""@}} after @code{AC_INIT}
+and before @code{AC_PROG_CXX} to select an empty default instead.
+
+@end defmac
+
+@defmac AC_PROG_CXXCPP
+@acindex{PROG_CXXCPP}
+@evindex CXXCPP
+@ovindex CXXCPP
+Set output variable @code{CXXCPP} to a command that runs the C++
+preprocessor. If @samp{$CXX -E} doesn't work, @file{/lib/cpp} is used.
+It is portable to run @code{CXXCPP} only on files with a @file{.c},
+@file{.C}, @file{.cc}, or @file{.cpp} extension.
+
+Some preprocessors don't indicate missing include files by the error
+status. For such preprocessors an internal variable is set that causes
+other macros to check the standard error from the preprocessor and
+consider the test failed if any warnings have been reported. However,
+it is not known whether such broken preprocessors exist for C++.
+@end defmac
+
+@defmac AC_PROG_CXX_C_O
+@acindex{PROG_CXX_C_O}
+@cvindex CXX_NO_MINUS_C_MINUS_O
+Test whether the C++ compiler accepts the options @option{-c} and
+@option{-o} simultaneously, and define @code{CXX_NO_MINUS_C_MINUS_O},
+if it does not.
+@end defmac
+
+
+@node Objective C Compiler
+@subsection Objective C Compiler Characteristics
+
+
+@defmac AC_PROG_OBJC (@ovar{compiler-search-list})
+@acindex{PROG_OBJC}
+@evindex OBJC
+@evindex OBJCFLAGS
+@ovindex OBJC
+@ovindex OBJCFLAGS
+Determine an Objective C compiler to use. If @code{OBJC} is not already
+set in the environment, check for Objective C compilers. Set output
+variable @code{OBJC} to the name of the compiler found.
+
+This macro may, however, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of Objective C compilers to
+search for. This just gives the user an opportunity to specify an
+alternative search list for the Objective C compiler. For example, if you
+didn't like the default order, then you could invoke @code{AC_PROG_OBJC}
+like this:
+
+@example
+AC_PROG_OBJC([gcc objcc objc])
+@end example
+
+If using the GNU Objective C compiler, set shell variable
+@code{GOBJC} to @samp{yes}. If output variable @code{OBJCFLAGS} was not
+already set, set it to @option{-g -O2} for the GNU Objective C
+compiler (@option{-O2} on systems where @command{gcc} does not accept
+@option{-g}), or @option{-g} for other compilers.
+@end defmac
+
+@defmac AC_PROG_OBJCPP
+@acindex{PROG_OBJCPP}
+@evindex OBJCPP
+@ovindex OBJCPP
+Set output variable @code{OBJCPP} to a command that runs the Objective C
+preprocessor. If @samp{$OBJC -E} doesn't work, @file{/lib/cpp} is used.
+@end defmac
+
+
+@node Objective C++ Compiler
+@subsection Objective C++ Compiler Characteristics
+
+
+@defmac AC_PROG_OBJCXX (@ovar{compiler-search-list})
+@acindex{PROG_OBJCXX}
+@evindex OBJCXX
+@evindex OBJCXXFLAGS
+@ovindex OBJCXX
+@ovindex OBJCXXFLAGS
+Determine an Objective C++ compiler to use. If @code{OBJCXX} is not already
+set in the environment, check for Objective C++ compilers. Set output
+variable @code{OBJCXX} to the name of the compiler found.
+
+This macro may, however, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of Objective C++ compilers
+to search for. This just gives the user an opportunity to specify an
+alternative search list for the Objective C++ compiler. For example, if you
+didn't like the default order, then you could invoke @code{AC_PROG_OBJCXX}
+like this:
+
+@example
+AC_PROG_OBJCXX([gcc g++ objcc++ objcxx])
+@end example
+
+If using the GNU Objective C++ compiler, set shell variable
+@code{GOBJCXX} to @samp{yes}. If output variable @code{OBJCXXFLAGS} was not
+already set, set it to @option{-g -O2} for the GNU Objective C++
+compiler (@option{-O2} on systems where @command{gcc} does not accept
+@option{-g}), or @option{-g} for other compilers.
+@end defmac
+
+@defmac AC_PROG_OBJCXXCPP
+@acindex{PROG_OBJCXXCPP}
+@evindex OBJCXXCPP
+@ovindex OBJCXXCPP
+Set output variable @code{OBJCXXCPP} to a command that runs the Objective C++
+preprocessor. If @samp{$OBJCXX -E} doesn't work, @file{/lib/cpp} is used.
+@end defmac
+
+
+@node Erlang Compiler and Interpreter
+@subsection Erlang Compiler and Interpreter Characteristics
+@cindex Erlang
+
+Autoconf defines the following macros for determining paths to the essential
+Erlang/OTP programs:
+
+@defmac AC_ERLANG_PATH_ERLC (@ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{ERLANG_PATH_ERLC}
+@evindex ERLC
+@evindex ERLCFLAGS
+@ovindex ERLC
+@ovindex ERLCFLAGS
+Determine an Erlang compiler to use. If @code{ERLC} is not already set in the
+environment, check for @command{erlc}. Set output variable @code{ERLC} to the
+complete path of the compiler command found. In addition, if @code{ERLCFLAGS}
+is not set in the environment, set it to an empty value.
+
+The two optional arguments have the same meaning as the two last arguments of
+macro @code{AC_PATH_PROG} for looking for the @command{erlc} program. For
+example, to look for @command{erlc} only in the @file{/usr/lib/erlang/bin}
+directory:
+
+@example
+AC_ERLANG_PATH_ERLC([not found], [/usr/lib/erlang/bin])
+@end example
+@end defmac
+
+@defmac AC_ERLANG_NEED_ERLC (@dvar{path, $PATH})
+@acindex{ERLANG_NEED_ERLC}
+A simplified variant of the @code{AC_ERLANG_PATH_ERLC} macro, that prints an
+error message and exits the @command{configure} script if the @command{erlc}
+program is not found.
+@end defmac
+
+@defmac AC_ERLANG_PATH_ERL (@ovar{value-if-not-found}, @dvar{path, $PATH})
+@acindex{ERLANG_PATH_ERL}
+@evindex ERL
+@ovindex ERL
+Determine an Erlang interpreter to use. If @code{ERL} is not already
+set in the
+environment, check for @command{erl}. Set output variable @code{ERL} to the
+complete path of the interpreter command found.
+
+The two optional arguments have the same meaning as the two last arguments of
+macro @code{AC_PATH_PROG} for looking for the @command{erl} program. For
+example, to look for @command{erl} only in the @file{/usr/lib/erlang/bin}
+directory:
+
+@example
+AC_ERLANG_PATH_ERL([not found], [/usr/lib/erlang/bin])
+@end example
+@end defmac
+
+@defmac AC_ERLANG_NEED_ERL (@dvar{path, $PATH})
+@acindex{ERLANG_NEED_ERL}
+A simplified variant of the @code{AC_ERLANG_PATH_ERL} macro, that prints an
+error message and exits the @command{configure} script if the @command{erl}
+program is not found.
+@end defmac
+
+
+@node Fortran Compiler
+@subsection Fortran Compiler Characteristics
+@cindex Fortran
+@cindex F77
+
+The Autoconf Fortran support is divided into two categories: legacy
+Fortran 77 macros (@code{F77}), and modern Fortran macros (@code{FC}).
+The former are intended for traditional Fortran 77 code, and have output
+variables like @code{F77}, @code{FFLAGS}, and @code{FLIBS}. The latter
+are for newer programs that can (or must) compile under the newer
+Fortran standards, and have output variables like @code{FC},
+@code{FCFLAGS}, and @code{FCLIBS}.
+
+Except for the macros @code{AC_FC_SRCEXT}, @code{AC_FC_FREEFORM},
+@code{AC_FC_FIXEDFORM}, and @code{AC_FC_LINE_LENGTH} (see below), the
+@code{FC} and @code{F77} macros behave almost identically, and so they
+are documented together in this section.
+
+
+@defmac AC_PROG_F77 (@ovar{compiler-search-list})
+@acindex{PROG_F77}
+@evindex F77
+@evindex FFLAGS
+@ovindex F77
+@ovindex FFLAGS
+@caindex f77_compiler_gnu
+@caindex prog_f77_g
+Determine a Fortran 77 compiler to use. If @code{F77} is not already
+set in the environment, then check for @code{g77} and @code{f77}, and
+then some other names. Set the output variable @code{F77} to the name
+of the compiler found.
+
+This macro may, however, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of Fortran 77
+compilers to search for. This just gives the user an opportunity to
+specify an alternative search list for the Fortran 77 compiler. For
+example, if you didn't like the default order, then you could invoke
+@code{AC_PROG_F77} like this:
+
+@example
+AC_PROG_F77([fl32 f77 fort77 xlf g77 f90 xlf90])
+@end example
+
+If using @code{g77} (the GNU Fortran 77 compiler), then
+set the shell variable @code{G77} to @samp{yes}.
+If the output variable @code{FFLAGS} was not already set in the
+environment, then set it to @option{-g -02} for @code{g77} (or @option{-O2}
+where @code{g77} does not accept @option{-g}). Otherwise, set
+@code{FFLAGS} to @option{-g} for all other Fortran 77 compilers.
+
+The result of the GNU test is cached in the
+@code{ac_cv_f77_compiler_gnu} variable, acceptance of @option{-g} in the
+@code{ac_cv_prog_f77_g} variable.
+@end defmac
+
+@defmac AC_PROG_FC (@ovar{compiler-search-list}, @ovar{dialect})
+@acindex{PROG_FC}
+@evindex FC
+@evindex FCFLAGS
+@ovindex FC
+@ovindex FCFLAGS
+@caindex fc_compiler_gnu
+@caindex prog_fc_g
+Determine a Fortran compiler to use. If @code{FC} is not already set in
+the environment, then @code{dialect} is a hint to indicate what Fortran
+dialect to search for; the default is to search for the newest available
+dialect. Set the output variable @code{FC} to the name of the compiler
+found.
+
+By default, newer dialects are preferred over older dialects, but if
+@code{dialect} is specified then older dialects are preferred starting
+with the specified dialect. @code{dialect} can currently be one of
+Fortran 77, Fortran 90, or Fortran 95. However, this is only a hint of
+which compiler @emph{name} to prefer (e.g., @code{f90} or @code{f95}),
+and no attempt is made to guarantee that a particular language standard
+is actually supported. Thus, it is preferable that you avoid the
+@code{dialect} option, and use AC_PROG_FC only for code compatible with
+the latest Fortran standard.
+
+This macro may, alternatively, be invoked with an optional first argument
+which, if specified, must be a blank-separated list of Fortran
+compilers to search for, just as in @code{AC_PROG_F77}.
+
+If using @code{gfortran} or @code{g77} (the GNU Fortran compilers), then
+set the shell variable @code{GFC} to @samp{yes}.
+If the output variable @code{FCFLAGS} was not already set in the
+environment, then set it to @option{-g -02} for GNU @code{g77} (or
+@option{-O2} where @code{g77} does not accept @option{-g}). Otherwise,
+set @code{FCFLAGS} to @option{-g} for all other Fortran compilers.
+
+The result of the GNU test is cached in the @code{ac_cv_fc_compiler_gnu}
+variable, acceptance of @option{-g} in the @code{ac_cv_prog_fc_g}
+variable.
+@end defmac
+
+@defmac AC_PROG_F77_C_O
+@defmacx AC_PROG_FC_C_O
+@acindex{PROG_F77_C_O}
+@acindex{PROG_FC_C_O}
+@cvindex F77_NO_MINUS_C_MINUS_O
+@cvindex FC_NO_MINUS_C_MINUS_O
+@caindex prog_f77_c_o
+@caindex prog_fc_c_o
+Test whether the Fortran compiler accepts the options @option{-c} and
+@option{-o} simultaneously, and define @code{F77_NO_MINUS_C_MINUS_O} or
+@code{FC_NO_MINUS_C_MINUS_O}, respectively, if it does not.
+
+The result of the test is cached in the @code{ac_cv_prog_f77_c_o} or
+@code{ac_cv_prog_fc_c_o} variable, respectively.
+@end defmac
+
+The following macros check for Fortran compiler characteristics.
+To check for characteristics not listed here, use
+@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
+@code{AC_RUN_IFELSE} (@pxref{Runtime}), making sure to first set the
+current language to Fortran 77 or Fortran via @code{AC_LANG([Fortran 77])}
+or @code{AC_LANG(Fortran)} (@pxref{Language Choice}).
+
+
+@defmac AC_F77_LIBRARY_LDFLAGS
+@defmacx AC_FC_LIBRARY_LDFLAGS
+@acindex{F77_LIBRARY_LDFLAGS}
+@ovindex FLIBS
+@acindex{FC_LIBRARY_LDFLAGS}
+@ovindex FCLIBS
+@caindex prog_f77_v
+@caindex prog_fc_v
+@caindex f77_libs
+@caindex fc_libs
+Determine the linker flags (e.g., @option{-L} and @option{-l}) for the
+@dfn{Fortran intrinsic and runtime libraries} that are required to
+successfully link a Fortran program or shared library. The output
+variable @code{FLIBS} or @code{FCLIBS} is set to these flags (which
+should be included after @code{LIBS} when linking).
+
+This macro is intended to be used in those situations when it is
+necessary to mix, e.g., C++ and Fortran source code in a single
+program or shared library (@pxref{Mixing Fortran 77 With C and C++, , ,
+automake, GNU Automake}).
+
+For example, if object files from a C++ and Fortran compiler must be
+linked together, then the C++ compiler/linker must be used for linking
+(since special C++-ish things need to happen at link time like calling
+global constructors, instantiating templates, enabling exception
+support, etc.).
+
+However, the Fortran intrinsic and runtime libraries must be linked in
+as well, but the C++ compiler/linker doesn't know by default how to add
+these Fortran 77 libraries. Hence, this macro was created to determine
+these Fortran libraries.
+
+The macros @code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
+@code{AC_F77_MAIN} and @code{AC_FC_MAIN} are probably also necessary to
+link C/C++ with Fortran; see below. Further, it is highly recommended
+that you use @code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers})
+because the complex defines that the function wrapper macros create
+may not work with C/C++ compiler drivers.
+
+These macros internally compute the flag needed to verbose linking
+output and cache it in @code{ac_cv_prog_f77_v} or @code{ac_cv_prog_fc_v}
+variables, respectively. The computed linker flags are cached in
+@code{ac_cv_f77_libs} or @code{ac_cv_fc_libs}, respectively.
+@end defmac
+
+@defmac AC_F77_DUMMY_MAIN (@ovar{action-if-found}, @dvar{action-if-not-found, @
+ AC_MSG_FAILURE})
+@defmacx AC_FC_DUMMY_MAIN (@ovar{action-if-found}, @dvar{action-if-not-found, @
+ AC_MSG_FAILURE})
+@acindex{F77_DUMMY_MAIN}
+@cvindex F77_DUMMY_MAIN
+@acindex{FC_DUMMY_MAIN}
+@cvindex FC_DUMMY_MAIN
+@caindex f77_dummy_main
+@caindex fc_dummy_main
+With many compilers, the Fortran libraries detected by
+@code{AC_F77_LIBRARY_LDFLAGS} or @code{AC_FC_LIBRARY_LDFLAGS} provide
+their own @code{main} entry function that initializes things like
+Fortran I/O, and which then calls a user-provided entry function named
+(say) @code{MAIN__} to run the user's program. The
+@code{AC_F77_DUMMY_MAIN} and @code{AC_FC_DUMMY_MAIN} or
+@code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros figure out how to deal with
+this interaction.
+
+When using Fortran for purely numerical functions (no I/O, etc.)@: often
+one prefers to provide one's own @code{main} and skip the Fortran
+library initializations. In this case, however, one may still need to
+provide a dummy @code{MAIN__} routine in order to prevent linking errors
+on some systems. @code{AC_F77_DUMMY_MAIN} or @code{AC_FC_DUMMY_MAIN}
+detects whether any such routine is @emph{required} for linking, and
+what its name is; the shell variable @code{F77_DUMMY_MAIN} or
+@code{FC_DUMMY_MAIN} holds this name, @code{unknown} when no solution
+was found, and @code{none} when no such dummy main is needed.
+
+By default, @var{action-if-found} defines @code{F77_DUMMY_MAIN} or
+@code{FC_DUMMY_MAIN} to the name of this routine (e.g., @code{MAIN__})
+@emph{if} it is required. @var{action-if-not-found} defaults to
+exiting with an error.
+
+In order to link with Fortran routines, the user's C/C++ program should
+then include the following code to define the dummy main if it is
+needed:
+
+@example
+@c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN () @{ return 1; @}
+#endif
+@end example
+
+(Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
+
+Note that this macro is called automatically from @code{AC_F77_WRAPPERS}
+or @code{AC_FC_WRAPPERS}; there is generally no need to call it
+explicitly unless one wants to change the default actions.
+
+The result of this macro is cached in the @code{ac_cv_f77_dummy_main} or
+@code{ac_cv_fc_dummy_main} variable, respectively.
+@end defmac
+
+@defmac AC_F77_MAIN
+@defmacx AC_FC_MAIN
+@acindex{F77_MAIN}
+@cvindex F77_MAIN
+@acindex{FC_MAIN}
+@cvindex FC_MAIN
+@caindex f77_main
+@caindex fc_main
+As discussed above, many Fortran libraries allow you to provide an entry
+point called (say) @code{MAIN__} instead of the usual @code{main}, which
+is then called by a @code{main} function in the Fortran libraries that
+initializes things like Fortran I/O@. The
+@code{AC_F77_MAIN} and @code{AC_FC_MAIN} macros detect whether it is
+@emph{possible} to utilize such an alternate main function, and defines
+@code{F77_MAIN} and @code{FC_MAIN} to the name of the function. (If no
+alternate main function name is found, @code{F77_MAIN} and @code{FC_MAIN} are
+simply defined to @code{main}.)
+
+Thus, when calling Fortran routines from C that perform things like I/O,
+one should use this macro and declare the "main" function like so:
+
+@example
+@c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
+#ifdef __cplusplus
+ extern "C"
+#endif
+int F77_MAIN (int argc, char *argv[]);
+@end example
+
+(Again, replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
+
+The result of this macro is cached in the @code{ac_cv_f77_main} or
+@code{ac_cv_fc_main} variable, respectively.
+@end defmac
+
+@defmac AC_F77_WRAPPERS
+@defmacx AC_FC_WRAPPERS
+@acindex{F77_WRAPPERS}
+@cvindex F77_FUNC
+@cvindex F77_FUNC_
+@acindex{FC_WRAPPERS}
+@cvindex FC_FUNC
+@cvindex FC_FUNC_
+@caindex f77_mangling
+@caindex fc_mangling
+Defines C macros @code{F77_FUNC (name, NAME)}, @code{FC_FUNC (name, NAME)},
+@code{F77_FUNC_(name, NAME)}, and @code{FC_FUNC_(name, NAME)} to properly
+mangle the names of C/C++ identifiers, and identifiers with underscores,
+respectively, so that they match the name-mangling scheme used by the
+Fortran compiler.
+
+Fortran is case-insensitive, and in order to achieve this the Fortran
+compiler converts all identifiers into a canonical case and format. To
+call a Fortran subroutine from C or to write a C function that is
+callable from Fortran, the C program must explicitly use identifiers in
+the format expected by the Fortran compiler. In order to do this, one
+simply wraps all C identifiers in one of the macros provided by
+@code{AC_F77_WRAPPERS} or @code{AC_FC_WRAPPERS}. For example, suppose
+you have the following Fortran 77 subroutine:
+
+@example
+@c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
+ subroutine foobar (x, y)
+ double precision x, y
+ y = 3.14159 * x
+ return
+ end
+@end example
+
+You would then declare its prototype in C or C++ as:
+
+@example
+@c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
+#define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void FOOBAR_F77 (double *x, double *y);
+@end example
+
+Note that we pass both the lowercase and uppercase versions of the
+function name to @code{F77_FUNC} so that it can select the right one.
+Note also that all parameters to Fortran 77 routines are passed as
+pointers (@pxref{Mixing Fortran 77 With C and C++, , , automake, GNU
+Automake}).
+
+(Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
+
+Although Autoconf tries to be intelligent about detecting the
+name-mangling scheme of the Fortran compiler, there may be Fortran
+compilers that it doesn't support yet. In this case, the above code
+generates a compile-time error, but some other behavior
+(e.g., disabling Fortran-related features) can be induced by checking
+whether @code{F77_FUNC} or @code{FC_FUNC} is defined.
+
+Now, to call that routine from a C program, we would do something like:
+
+@example
+@c If you change this example, adjust tests/fortran.at:AC_F77_DUMMY_MAIN usage.
+@{
+ double x = 2.7183, y;
+ FOOBAR_F77 (&x, &y);
+@}
+@end example
+
+If the Fortran identifier contains an underscore (e.g., @code{foo_bar}),
+you should use @code{F77_FUNC_} or @code{FC_FUNC_} instead of
+@code{F77_FUNC} or @code{FC_FUNC} (with the same arguments). This is
+because some Fortran compilers mangle names differently if they contain
+an underscore.
+
+The name mangling scheme is encoded in the @code{ac_cv_f77_mangling} or
+@code{ac_cv_fc_mangling} cache variable, respectively, and also used for
+the @code{AC_F77_FUNC} and @code{AC_FC_FUNC} macros described below.
+@end defmac
+
+@defmac AC_F77_FUNC (@var{name}, @ovar{shellvar})
+@defmacx AC_FC_FUNC (@var{name}, @ovar{shellvar})
+@acindex{F77_FUNC}
+@acindex{FC_FUNC}
+Given an identifier @var{name}, set the shell variable @var{shellvar} to
+hold the mangled version @var{name} according to the rules of the
+Fortran linker (see also @code{AC_F77_WRAPPERS} or
+@code{AC_FC_WRAPPERS}). @var{shellvar} is optional; if it is not
+supplied, the shell variable is simply @var{name}. The purpose of
+this macro is to give the caller a way to access the name-mangling
+information other than through the C preprocessor as above, for example,
+to call Fortran routines from some language other than C/C++.
+@end defmac
+
+@defmac AC_FC_SRCEXT (@var{ext}, @ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@defmacx AC_FC_PP_SRCEXT (@var{ext}, @ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{FC_SRCEXT}
+@acindex{FC_PP_SRCEXT}
+@caindex fc_srcext_@var{ext}
+@caindex fc_pp_srcext_@var{ext}
+By default, the @code{FC} macros perform their tests using a @file{.f}
+extension for source-code files. Some compilers, however, only enable
+newer language features for appropriately named files, e.g., Fortran 90
+features only for @file{.f90} files, or preprocessing only with
+@file{.F} files or maybe other upper-case extensions. On the other
+hand, some other compilers expect all source files to end in @file{.f}
+and require special flags to support other file name extensions. The
+@code{AC_FC_SRCEXT} and @code{AC_FC_PP_SRCEXT} macros deal with these
+issues.
+
+The @code{AC_FC_SRCEXT} macro tries to get the @code{FC} compiler to
+accept files ending with the extension @file{.@var{ext}} (i.e.,
+@var{ext} does @emph{not} contain the dot). If any special compiler
+flags are needed for this, it stores them in the output variable
+@code{FCFLAGS_@var{ext}}. This extension and these flags are then used
+for all subsequent @code{FC} tests (until @code{AC_FC_SRCEXT} or
+@code{AC_FC_PP_SRCEXT} is called another time).
+
+For example, you would use @code{AC_FC_SRCEXT(f90)} to employ the
+@file{.f90} extension in future tests, and it would set the
+@code{FCFLAGS_f90} output variable with any extra flags that are needed
+to compile such files.
+
+Similarly, the @code{AC_FC_PP_SRCEXT} macro tries to get the @code{FC}
+compiler to preprocess and compile files with the extension
+@file{.@var{ext}}. When both @command{fpp} and @command{cpp} style
+preprocessing are provided, the former is preferred, as the latter may
+treat continuation lines, @code{//} tokens, and white space differently
+from what some Fortran dialects expect. Conversely, if you do not want
+files to be preprocessed, use only lower-case characters in the file
+name extension. Like with @code{AC_FC_SRCEXT(f90)}, any needed flags
+are stored in the @code{FCFLAGS_@var{ext}} variable.
+
+The @code{FCFLAGS_@var{ext}} flags can @emph{not} be simply absorbed
+into @code{FCFLAGS}, for two reasons based on the limitations of some
+compilers. First, only one @code{FCFLAGS_@var{ext}} can be used at a
+time, so files with different extensions must be compiled separately.
+Second, @code{FCFLAGS_@var{ext}} must appear @emph{immediately} before
+the source-code file name when compiling. So, continuing the example
+above, you might compile a @file{foo.f90} file in your makefile with the
+command:
+
+@example
+foo.o: foo.f90
+ $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) '$(srcdir)/foo.f90'
+@end example
+
+If @code{AC_FC_SRCEXT} or @code{AC_FC_PP_SRCEXT} succeeds in compiling
+files with the @var{ext} extension, it calls @var{action-if-success}
+(defaults to nothing). If it fails, and cannot find a way to make the
+@code{FC} compiler accept such files, it calls @var{action-if-failure}
+(defaults to exiting with an error message).
+
+The @code{AC_FC_SRCEXT} and @code{AC_FC_PP_SRCEXT} macros cache their
+results in @code{ac_cv_fc_srcext_@var{ext}} and
+@code{ac_cv_fc_pp_srcext_@var{ext}} variables, respectively.
+@end defmac
+
+@defmac AC_FC_PP_DEFINE (@ovar{action-if-success}, @dvar{action-if-failure, @
+ AC_MSG_FAILURE})
+@acindex{FC_PP_DEFINE}
+@caindex fc_pp_define
+
+Find a flag to specify defines for preprocessed Fortran. Not all
+Fortran compilers use @option{-D}. Substitute @code{FC_DEFINE} with
+the result and call @var{action-if-success} (defaults to nothing) if
+successful, and @var{action-if-failure} (defaults to failing with an
+error message) if not.
+
+This macro calls @code{AC_FC_PP_SRCEXT([F])} in order to learn how to
+preprocess a @file{conftest.F} file, but restores a previously used
+Fortran source file extension afterwards again.
+
+The result of this test is cached in the @code{ac_cv_fc_pp_define}
+variable.
+@end defmac
+
+@defmac AC_FC_FREEFORM (@ovar{action-if-success}, @dvar{action-if-failure, @
+ AC_MSG_FAILURE})
+@acindex{FC_FREEFORM}
+@caindex fc_freeform
+
+Try to ensure that the Fortran compiler (@code{$FC}) allows free-format
+source code (as opposed to the older fixed-format style from Fortran
+77). If necessary, it may add some additional flags to @code{FCFLAGS}.
+
+This macro is most important if you are using the default @file{.f}
+extension, since many compilers interpret this extension as indicating
+fixed-format source unless an additional flag is supplied. If you
+specify a different extension with @code{AC_FC_SRCEXT}, such as
+@file{.f90}, then @code{AC_FC_FREEFORM} ordinarily succeeds without
+modifying @code{FCFLAGS}. For extensions which the compiler does not
+know about, the flag set by the @code{AC_FC_SRCEXT} macro might let
+the compiler assume Fortran 77 by default, however.
+
+If @code{AC_FC_FREEFORM} succeeds in compiling free-form source, it
+calls @var{action-if-success} (defaults to nothing). If it fails, it
+calls @var{action-if-failure} (defaults to exiting with an error
+message).
+
+The result of this test, or @samp{none} or @samp{unknown}, is cached in
+the @code{ac_cv_fc_freeform} variable.
+@end defmac
+
+@defmac AC_FC_FIXEDFORM (@ovar{action-if-success}, @dvar{action-if-failure, @
+ AC_MSG_FAILURE})
+@acindex{FC_FIXEDFORM}
+@caindex fc_fixedform
+
+Try to ensure that the Fortran compiler (@code{$FC}) allows the old
+fixed-format source code (as opposed to free-format style). If
+necessary, it may add some additional flags to @code{FCFLAGS}.
+
+This macro is needed for some compilers alias names like @command{xlf95}
+which assume free-form source code by default, and in case you want to
+use fixed-form source with an extension like @file{.f90} which many
+compilers interpret as free-form by default. If you specify a different
+extension with @code{AC_FC_SRCEXT}, such as @file{.f}, then
+@code{AC_FC_FIXEDFORM} ordinarily succeeds without modifying
+@code{FCFLAGS}.
+
+If @code{AC_FC_FIXEDFORM} succeeds in compiling fixed-form source, it
+calls @var{action-if-success} (defaults to nothing). If it fails, it
+calls @var{action-if-failure} (defaults to exiting with an error
+message).
+
+The result of this test, or @samp{none} or @samp{unknown}, is cached in
+the @code{ac_cv_fc_fixedform} variable.
+@end defmac
+
+@defmac AC_FC_LINE_LENGTH (@ovar{length}, @ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{FC_LINE_LENGTH}
+@caindex fc_line_length
+
+Try to ensure that the Fortran compiler (@code{$FC}) accepts long source
+code lines. The @var{length} argument may be given as 80, 132, or
+unlimited, and defaults to 132. Note that line lengths above 254
+columns are not portable, and some compilers do not accept more than 132
+columns at least for fixed format source. If necessary, it may add some
+additional flags to @code{FCFLAGS}.
+
+If @code{AC_FC_LINE_LENGTH} succeeds in compiling fixed-form source, it
+calls @var{action-if-success} (defaults to nothing). If it fails, it
+calls @var{action-if-failure} (defaults to exiting with an error
+message).
+
+The result of this test, or @samp{none} or @samp{unknown}, is cached in
+the @code{ac_cv_fc_line_length} variable.
+@end defmac
+
+@defmac AC_FC_CHECK_BOUNDS (@ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{FC_CHECK_BOUNDS}
+@caindex fc_check_bounds
+
+The @code{AC_FC_CHECK_BOUNDS} macro tries to enable array bounds checking
+in the Fortran compiler. If successful, the @var{action-if-success}
+is called and any needed flags are added to @code{FCFLAGS}. Otherwise,
+@var{action-if-failure} is called, which defaults to failing with an error
+message. The macro currently requires Fortran 90 or a newer dialect.
+
+The result of the macro is cached in the @code{ac_cv_fc_check_bounds}
+variable.
+@end defmac
+
+@defmac AC_F77_IMPLICIT_NONE (@ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@defmacx AC_FC_IMPLICIT_NONE (@ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{F77_IMPLICIT_NONE}
+@acindex{FC_IMPLICIT_NONE}
+@caindex f77_implicit_none
+@caindex fc_implicit_none
+
+Try to disallow implicit declarations in the Fortran compiler. If
+successful, @var{action-if-success} is called and any needed flags
+are added to @code{FFLAGS} or @code{FCFLAGS}, respectively. Otherwise,
+@var{action-if-failure} is called, which defaults to failing with an error
+message.
+
+The result of these macros are cached in the
+@code{ac_cv_f77_implicit_none} and @code{ac_cv_fc_implicit_none}
+variables, respectively.
+@end defmac
+
+@defmac AC_FC_MODULE_EXTENSION
+@acindex{FC_MODULE_EXTENSION}
+@caindex fc_module_ext
+@ovindex FC_MODEXT
+
+Find the Fortran 90 module file name extension. Most Fortran 90
+compilers store module information in files separate from the object
+files. The module files are usually named after the name of the module
+rather than the source file name, with characters possibly turned to
+upper case, plus an extension, often @file{.mod}.
+
+Not all compilers use module files at all, or by default. The Cray
+Fortran compiler requires @option{-e m} in order to store and search
+module information in @file{.mod} files rather than in object files.
+Likewise, the Fujitsu Fortran compilers uses the @option{-Am} option to
+indicate how module information is stored.
+
+The @code{AC_FC_MODULE_EXTENSION} macro computes the module extension
+without the leading dot, and stores that in the @code{FC_MODEXT}
+variable. If the compiler does not produce module files, or the
+extension cannot be determined, @code{FC_MODEXT} is empty. Typically,
+the result of this macro may be used in cleanup @command{make} rules as
+follows:
+
+@example
+clean-modules:
+ -test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT)
+@end example
+
+The extension, or @samp{unknown}, is cached in the
+@code{ac_cv_fc_module_ext} variable.
+@end defmac
+
+@defmac AC_FC_MODULE_FLAG (@ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{FC_MODULE_FLAG}
+@caindex fc_module_flag
+@ovindex FC_MODINC
+@ovindex ac_empty
+
+Find the compiler flag to include Fortran 90 module information from
+another directory, and store that in the @code{FC_MODINC} variable.
+Call @var{action-if-success} (defaults to nothing) if successful, and
+set @code{FC_MODINC} to empty and call @var{action-if-failure} (defaults
+to exiting with an error message) if not.
+
+Most Fortran 90 compilers provide a way to specify module directories.
+Some have separate flags for the directory to write module files to,
+and directories to search them in, whereas others only allow writing to
+the current directory or to the first directory specified in the include
+path. Further, with some compilers, the module search path and the
+preprocessor search path can only be modified with the same flag. Thus,
+for portability, write module files to the current directory only and
+list that as first directory in the search path.
+
+There may be no whitespace between @code{FC_MODINC} and the following
+directory name, but @code{FC_MODINC} may contain trailing white space.
+For example, if you use Automake and would like to search @file{../lib}
+for module files, you can use the following:
+
+@example
+AM_FCFLAGS = $(FC_MODINC). $(FC_MODINC)../lib
+@end example
+
+Inside @command{configure} tests, you can use:
+
+@example
+if test -n "$FC_MODINC"; then
+ FCFLAGS="$FCFLAGS $FC_MODINC. $FC_MODINC../lib"
+fi
+@end example
+
+The flag is cached in the @code{ac_cv_fc_module_flag} variable.
+The substituted value of @code{FC_MODINC} may refer to the
+@code{ac_empty} dummy placeholder empty variable, to avoid losing
+the significant trailing whitespace in a @file{Makefile}.
+@end defmac
+
+@defmac AC_FC_MODULE_OUTPUT_FLAG (@ovar{action-if-success}, @
+ @dvar{action-if-failure, AC_MSG_FAILURE})
+@acindex{FC_MODULE_OUTPUT_FLAG}
+@caindex fc_module_output_flag
+@ovindex FC_MODOUT
+
+Find the compiler flag to write Fortran 90 module information to
+another directory, and store that in the @code{FC_MODOUT} variable.
+Call @var{action-if-success} (defaults to nothing) if successful, and
+set @code{FC_MODOUT} to empty and call @var{action-if-failure} (defaults
+to exiting with an error message) if not.
+
+Not all Fortran 90 compilers write module files, and of those that do,
+not all allow writing to a directory other than the current one, nor
+do all have separate flags for writing and reading; see the description
+of @code{AC_FC_MODULE_FLAG} above. If you need to be able to write to
+another directory, for maximum portability use @code{FC_MODOUT} before
+any @code{FC_MODINC} and include both the current directory and the one
+you write to in the search path:
+
+@example
+AM_FCFLAGS = $(FC_MODOUT)../mod $(FC_MODINC)../mod $(FC_MODINC). @dots{}
+@end example
+
+The flag is cached in the @code{ac_cv_fc_module_output_flag} variable.
+The substituted value of @code{FC_MODOUT} may refer to the
+@code{ac_empty} dummy placeholder empty variable, to avoid losing
+the significant trailing whitespace in a @file{Makefile}.
+@end defmac
+
+
+@node Go Compiler
+@subsection Go Compiler Characteristics
+@cindex Go
+
+Autoconf provides basic support for the Go programming language when
+using the @code{gccgo} compiler (there is currently no support for the
+@code{6g} and @code{8g} compilers).
+
+@defmac AC_PROG_GO (@ovar{compiler-search-list})
+Find the Go compiler to use. Check whether the environment variable
+@code{GOC} is set; if so, then set output variable @code{GOC} to its
+value.
+
+Otherwise, if the macro is invoked without an argument, then search for
+a Go compiler named @code{gccgo}. If it is not found, then as a last
+resort set @code{GOC} to @code{gccgo}.
+
+This macro may be invoked with an optional first argument which, if
+specified, must be a blank-separated list of Go compilers to search for.
+
+If output variable @code{GOFLAGS} was not already set, set it to
+@option{-g -O2}. If your package does not like this default,
+@code{GOFLAGS} may be set before @code{AC_PROG_GO}.
+@end defmac
+
+
+@node System Services
+@section System Services
+
+The following macros check for operating system services or capabilities.
+
+@anchor{AC_PATH_X}
+@defmac AC_PATH_X
+@acindex{PATH_X}
+@evindex XMKMF
+@cindex X Window System
+Try to locate the X Window System include files and libraries. If the
+user gave the command line options @option{--x-includes=@var{dir}} and
+@option{--x-libraries=@var{dir}}, use those directories.
+
+If either or both were not given, get the missing values by running
+@code{xmkmf} (or an executable pointed to by the @code{XMKMF}
+environment variable) on a trivial @file{Imakefile} and examining the
+makefile that it produces. Setting @code{XMKMF} to @samp{false}
+disables this method.
+
+If this method fails to find the X Window System, @command{configure}
+looks for the files in several directories where they often reside.
+If either method is successful, set the shell variables
+@code{x_includes} and @code{x_libraries} to their locations, unless they
+are in directories the compiler searches by default.
+
+If both methods fail, or the user gave the command line option
+@option{--without-x}, set the shell variable @code{no_x} to @samp{yes};
+otherwise set it to the empty string.
+@end defmac
+
+@anchor{AC_PATH_XTRA}
+@defmac AC_PATH_XTRA
+@acindex{PATH_XTRA}
+@ovindex X_CFLAGS
+@ovindex X_LIBS
+@ovindex X_EXTRA_LIBS
+@ovindex X_PRE_LIBS
+@cvindex X_DISPLAY_MISSING
+An enhanced version of @code{AC_PATH_X}. It adds the C compiler flags
+that X needs to output variable @code{X_CFLAGS}, and the X linker flags
+to @code{X_LIBS}. Define @code{X_DISPLAY_MISSING} if X is not
+available.
+
+This macro also checks for special libraries that some systems need in
+order to compile X programs. It adds any that the system needs to
+output variable @code{X_EXTRA_LIBS}. And it checks for special X11R6
+libraries that need to be linked with before @option{-lX11}, and adds
+any found to the output variable @code{X_PRE_LIBS}.
+
+@c This is an incomplete kludge. Make a real way to do it.
+@c If you need to check for other X functions or libraries yourself, then
+@c after calling this macro, add the contents of @code{X_EXTRA_LIBS} to
+@c @code{LIBS} temporarily, like this: (FIXME - add example)
+@end defmac
+
+@anchor{AC_SYS_INTERPRETER}
+@defmac AC_SYS_INTERPRETER
+@acindex{SYS_INTERPRETER}
+Check whether the system supports starting scripts with a line of the
+form @samp{#!/bin/sh} to select the interpreter to use for the script.
+After running this macro, shell code in @file{configure.ac} can check
+the shell variable @code{interpval}; it is set to @samp{yes}
+if the system supports @samp{#!}, @samp{no} if not.
+@end defmac
+
+@defmac AC_SYS_LARGEFILE
+@acindex{SYS_LARGEFILE}
+@cvindex _FILE_OFFSET_BITS
+@cvindex _LARGE_FILES
+@ovindex CC
+@cindex Large file support
+@cindex LFS
+Arrange for 64-bit file offsets, known as
+@uref{http://@/www.unix-systems@/.org/@/version2/@/whatsnew/@/lfs20mar.html,
+large-file support}. On some hosts, one must use special compiler
+options to build programs that can access large files. Append any such
+options to the output variable @code{CC}. Define
+@code{_FILE_OFFSET_BITS} and @code{_LARGE_FILES} if necessary.
+
+Large-file support can be disabled by configuring with the
+@option{--disable-largefile} option.
+
+If you use this macro, check that your program works even when
+@code{off_t} is wider than @code{long int}, since this is common when
+large-file support is enabled. For example, it is not correct to print
+an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
+(long int) X)}.
+
+The LFS introduced the @code{fseeko} and @code{ftello} functions to
+replace their C counterparts @code{fseek} and @code{ftell} that do not
+use @code{off_t}. Take care to use @code{AC_FUNC_FSEEKO} to make their
+prototypes available when using them and large-file support is
+enabled.
+@end defmac
+
+@anchor{AC_SYS_LONG_FILE_NAMES}
+@defmac AC_SYS_LONG_FILE_NAMES
+@acindex{SYS_LONG_FILE_NAMES}
+@cvindex HAVE_LONG_FILE_NAMES
+If the system supports file names longer than 14 characters, define
+@code{HAVE_LONG_FILE_NAMES}.
+@end defmac
+
+@defmac AC_SYS_POSIX_TERMIOS
+@acindex{SYS_POSIX_TERMIOS}
+@cindex Posix termios headers
+@cindex termios Posix headers
+@caindex sys_posix_termios
+Check to see if the Posix termios headers and functions are available on the
+system. If so, set the shell variable @code{ac_cv_sys_posix_termios} to
+@samp{yes}. If not, set the variable to @samp{no}.
+@end defmac
+
+@node Posix Variants
+@section Posix Variants
+
+The following macro makes it possible to use features of Posix that are
+extensions to C, as well as platform extensions not defined by Posix.
+
+@anchor{AC_USE_SYSTEM_EXTENSIONS}
+@defmac AC_USE_SYSTEM_EXTENSIONS
+@acindex{USE_SYSTEM_EXTENSIONS}
+@cvindex _ALL_SOURCE
+@cvindex _GNU_SOURCE
+@cvindex _MINIX
+@cvindex _POSIX_1_SOURCE
+@cvindex _POSIX_PTHREAD_SEMANTICS
+@cvindex _POSIX_SOURCE
+@cvindex _TANDEM_SOURCE
+@cvindex __EXTENSIONS__
+This macro was introduced in Autoconf 2.60. If possible, enable
+extensions to C or Posix on hosts that normally disable the extensions,
+typically due to standards-conformance namespace issues. This should be
+called before any macros that run the C compiler. The following
+preprocessor macros are defined where appropriate:
+
+@table @code
+@item _GNU_SOURCE
+Enable extensions on GNU/Linux.
+@item __EXTENSIONS__
+Enable general extensions on Solaris.
+@item _POSIX_PTHREAD_SEMANTICS
+Enable threading extensions on Solaris.
+@item _TANDEM_SOURCE
+Enable extensions for the HP NonStop platform.
+@item _ALL_SOURCE
+Enable extensions for AIX 3, and for Interix.
+@item _POSIX_SOURCE
+Enable Posix functions for Minix.
+@item _POSIX_1_SOURCE
+Enable additional Posix functions for Minix.
+@item _MINIX
+Identify Minix platform. This particular preprocessor macro is
+obsolescent, and may be removed in a future release of Autoconf.
+@end table
+@end defmac
+
+
+@node Erlang Libraries
+@section Erlang Libraries
+@cindex Erlang, Library, checking
+
+The following macros check for an installation of Erlang/OTP, and for the
+presence of certain Erlang libraries. All those macros require the
+configuration of an Erlang interpreter and an Erlang compiler
+(@pxref{Erlang Compiler and Interpreter}).
+
+@defmac AC_ERLANG_SUBST_ERTS_VER
+@acindex{ERLANG_SUBST_ERTS_VER}
+@ovindex ERLANG_ERTS_VER
+Set the output variable @code{ERLANG_ERTS_VER} to the version of the
+Erlang runtime system (as returned by Erlang's
+@code{erlang:system_info(version)} function). The result of this test
+is cached if caching is enabled when running @command{configure}. The
+@code{ERLANG_ERTS_VER} variable is not intended to be used for testing
+for features of specific ERTS versions, but to be used for substituting
+the ERTS version in Erlang/OTP release resource files (@code{.rel}
+files), as shown below.
+@end defmac
+
+@defmac AC_ERLANG_SUBST_ROOT_DIR
+@acindex{ERLANG_SUBST_ROOT_DIR}
+@ovindex ERLANG_ROOT_DIR
+Set the output variable @code{ERLANG_ROOT_DIR} to the path to the base
+directory in which Erlang/OTP is installed (as returned by Erlang's
+@code{code:root_dir/0} function). The result of this test is cached if
+caching is enabled when running @command{configure}.
+@end defmac
+
+@defmac AC_ERLANG_SUBST_LIB_DIR
+@acindex{ERLANG_SUBST_LIB_DIR}
+@ovindex ERLANG_LIB_DIR
+Set the output variable @code{ERLANG_LIB_DIR} to the path of the library
+directory of Erlang/OTP (as returned by Erlang's
+@code{code:lib_dir/0} function), which subdirectories each contain an installed
+Erlang/OTP library. The result of this test is cached if caching is enabled
+when running @command{configure}.
+@end defmac
+
+@defmac AC_ERLANG_CHECK_LIB (@var{library}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{ERLANG_CHECK_LIB}
+@ovindex ERLANG_LIB_DIR_@var{library}
+@ovindex ERLANG_LIB_VER_@var{library}
+Test whether the Erlang/OTP library @var{library} is installed by
+calling Erlang's @code{code:lib_dir/1} function. The result of this
+test is cached if caching is enabled when running @command{configure}.
+@var{action-if-found} is a list of shell commands to run if the library
+is installed; @var{action-if-not-found} is a list of shell commands to
+run if it is not. Additionally, if the library is installed, the output
+variable @samp{ERLANG_LIB_DIR_@var{library}} is set to the path to the
+library installation directory, and the output variable
+@samp{ERLANG_LIB_VER_@var{library}} is set to the version number that is
+part of the subdirectory name, if it is in the standard form
+(@code{@var{library}-@var{version}}). If the directory name does not
+have a version part, @samp{ERLANG_LIB_VER_@var{library}} is set to the
+empty string. If the library is not installed,
+@samp{ERLANG_LIB_DIR_@var{library}} and
+@samp{ERLANG_LIB_VER_@var{library}} are set to @code{"not found"}. For
+example, to check if library @code{stdlib} is installed:
+
+@example
+AC_ERLANG_CHECK_LIB([stdlib],
+ [echo "stdlib version \"$ERLANG_LIB_VER_stdlib\""
+ echo "is installed in \"$ERLANG_LIB_DIR_stdlib\""],
+ [AC_MSG_ERROR([stdlib was not found!])])
+@end example
+
+The @samp{ERLANG_LIB_VER_@var{library}} variables (set by
+@code{AC_ERLANG_CHECK_LIB}) and the @code{ERLANG_ERTS_VER} variable (set
+by @code{AC_ERLANG_SUBST_ERTS_VER}) are not intended to be used for
+testing for features of specific versions of libraries or of the Erlang
+runtime system. Those variables are intended to be substituted in
+Erlang release resource files (@code{.rel} files). For instance, to
+generate a @file{example.rel} file for an application depending on the
+@code{stdlib} library, @file{configure.ac} could contain:
+
+@example
+AC_ERLANG_SUBST_ERTS_VER
+AC_ERLANG_CHECK_LIB([stdlib],
+ [],
+ [AC_MSG_ERROR([stdlib was not found!])])
+AC_CONFIG_FILES([example.rel])
+@end example
+
+@noindent
+The @file{example.rel.in} file used to generate @file{example.rel}
+should contain:
+
+@example
+@{release,
+ @{"@@PACKAGE@@", "@@VERSION@@"@},
+ @{erts, "@@ERLANG_ERTS_VER@@"@},
+ [@{stdlib, "@@ERLANG_LIB_VER_stdlib@@"@},
+ @{@@PACKAGE@@, "@@VERSION@@"@}]@}.
+@end example
+@end defmac
+
+In addition to the above macros, which test installed Erlang libraries, the
+following macros determine the paths to the directories into which newly built
+Erlang libraries are to be installed:
+
+@defmac AC_ERLANG_SUBST_INSTALL_LIB_DIR
+@acindex{ERLANG_SUBST_INSTALL_LIB_DIR}
+@ovindex ERLANG_INSTALL_LIB_DIR
+
+Set the @code{ERLANG_INSTALL_LIB_DIR} output variable to the directory into
+which every built Erlang library should be installed in a separate
+subdirectory.
+If this variable is not set in the environment when @command{configure} runs,
+its default value is @code{$@{libdir@}/erlang/lib}.
+@end defmac
+
+@defmac AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR (@var{library}, @var{version})
+@acindex{ERLANG_SUBST_INSTALL_LIB_SUBDIR}
+@ovindex ERLANG_INSTALL_LIB_DIR_@var{library}
+
+Set the @samp{ERLANG_INSTALL_LIB_DIR_@var{library}} output variable to the
+directory into which the built Erlang library @var{library} version
+@var{version} should be installed. If this variable is not set in the
+environment when @command{configure} runs, its default value is
+@samp{$ERLANG_INSTALL_LIB_DIR/@var{library}-@var{version}}, the value of the
+@code{ERLANG_INSTALL_LIB_DIR} variable being set by the
+@code{AC_ERLANG_SUBST_INSTALL_LIB_DIR} macro.
+@end defmac
+
+
+
+
+
+@c ========================================================= Writing Tests
+
+@node Writing Tests
+@chapter Writing Tests
+
+If the existing feature tests don't do something you need, you have to
+write new ones. These macros are the building blocks. They provide
+ways for other macros to check whether various kinds of features are
+available and report the results.
+
+This chapter contains some suggestions and some of the reasons why the
+existing tests are written the way they are. You can also learn a lot
+about how to write Autoconf tests by looking at the existing ones. If
+something goes wrong in one or more of the Autoconf tests, this
+information can help you understand the assumptions behind them, which
+might help you figure out how to best solve the problem.
+
+These macros check the output of the compiler system of the current
+language (@pxref{Language Choice}). They do not cache the results of
+their tests for future use (@pxref{Caching Results}), because they don't
+know enough about the information they are checking for to generate a
+cache variable name. They also do not print any messages, for the same
+reason. The checks for particular kinds of features call these macros
+and do cache their results and print messages about what they're
+checking for.
+
+When you write a feature test that could be applicable to more than one
+software package, the best thing to do is encapsulate it in a new macro.
+@xref{Writing Autoconf Macros}, for how to do that.
+
+@menu
+* Language Choice:: Selecting which language to use for testing
+* Writing Test Programs:: Forging source files for compilers
+* Running the Preprocessor:: Detecting preprocessor symbols
+* Running the Compiler:: Detecting language or header features
+* Running the Linker:: Detecting library features
+* Runtime:: Testing for runtime features
+* Systemology:: A zoology of operating systems
+* Multiple Cases:: Tests for several possible values
+@end menu
+
+@node Language Choice
+@section Language Choice
+@cindex Language
+
+Autoconf-generated @command{configure} scripts check for the C compiler and
+its features by default. Packages that use other programming languages
+(maybe more than one, e.g., C and C++) need to test features of the
+compilers for the respective languages. The following macros determine
+which programming language is used in the subsequent tests in
+@file{configure.ac}.
+
+@anchor{AC_LANG}
+@defmac AC_LANG (@var{language})
+@acindex{LANG}
+Do compilation tests using the compiler, preprocessor, and file
+extensions for the specified @var{language}.
+
+Supported languages are:
+
+@table @samp
+@item C
+Do compilation tests using @code{CC} and @code{CPP} and use extension
+@file{.c} for test programs. Use compilation flags: @code{CPPFLAGS} with
+@code{CPP}, and both @code{CPPFLAGS} and @code{CFLAGS} with @code{CC}.
+
+@item C++
+Do compilation tests using @code{CXX} and @code{CXXCPP} and use
+extension @file{.C} for test programs. Use compilation flags:
+@code{CPPFLAGS} with @code{CXXCPP}, and both @code{CPPFLAGS} and
+@code{CXXFLAGS} with @code{CXX}.
+
+@item Fortran 77
+Do compilation tests using @code{F77} and use extension @file{.f} for
+test programs. Use compilation flags: @code{FFLAGS}.
+
+@item Fortran
+Do compilation tests using @code{FC} and use extension @file{.f} (or
+whatever has been set by @code{AC_FC_SRCEXT}) for test programs. Use
+compilation flags: @code{FCFLAGS}.
+
+@item Erlang
+@ovindex ERLC
+@ovindex ERL
+@ovindex ERLCFLAGS
+Compile and execute tests using @code{ERLC} and @code{ERL} and use extension
+@file{.erl} for test Erlang modules. Use compilation flags: @code{ERLCFLAGS}.
+
+@item Objective C
+Do compilation tests using @code{OBJC} and @code{OBJCPP} and use
+extension @file{.m} for test programs. Use compilation flags:
+@code{CPPFLAGS} with @code{OBJCPP}, and both @code{CPPFLAGS} and
+@code{OBJCFLAGS} with @code{OBJC}.
+
+@item Objective C++
+Do compilation tests using @code{OBJCXX} and @code{OBJCXXCPP} and use
+extension @file{.mm} for test programs. Use compilation flags:
+@code{CPPFLAGS} with @code{OBJCXXCPP}, and both @code{CPPFLAGS} and
+@code{OBJCXXFLAGS} with @code{OBJCXX}.
+
+@item Go
+Do compilation tests using @code{GOC} and use extension @file{.go} for
+test programs. Use compilation flags @code{GOFLAGS}.
+@end table
+@end defmac
+
+@anchor{AC_LANG_PUSH}
+@defmac AC_LANG_PUSH (@var{language})
+@acindex{LANG_PUSH}
+Remember the current language (as set by @code{AC_LANG}) on a stack, and
+then select the @var{language}. Use this macro and @code{AC_LANG_POP}
+in macros that need to temporarily switch to a particular language.
+@end defmac
+
+@defmac AC_LANG_POP (@ovar{language})
+@acindex{LANG_POP}
+Select the language that is saved on the top of the stack, as set by
+@code{AC_LANG_PUSH}, and remove it from the stack.
+
+If given, @var{language} specifies the language we just @emph{quit}. It
+is a good idea to specify it when it's known (which should be the
+case@dots{}), since Autoconf detects inconsistencies.
+
+@example
+AC_LANG_PUSH([Fortran 77])
+# Perform some tests on Fortran 77.
+# @dots{}
+AC_LANG_POP([Fortran 77])
+@end example
+@end defmac
+
+@defmac AC_LANG_ASSERT (@var{language})
+@acindex{LANG_ASSERT}
+Check statically that the current language is @var{language}.
+You should use this in your language specific macros
+to avoid that they be called with an inappropriate language.
+
+This macro runs only at @command{autoconf} time, and incurs no cost at
+@command{configure} time. Sadly enough and because Autoconf is a two
+layer language @footnote{Because M4 is not aware of Sh code,
+especially conditionals, some optimizations that look nice statically
+may produce incorrect results at runtime.}, the macros
+@code{AC_LANG_PUSH} and @code{AC_LANG_POP} cannot be ``optimizing'',
+therefore as much as possible you ought to avoid using them to wrap
+your code, rather, require from the user to run the macro with a
+correct current language, and check it with @code{AC_LANG_ASSERT}.
+And anyway, that may help the user understand she is running a Fortran
+macro while expecting a result about her Fortran 77 compiler@enddots{}
+@end defmac
+
+
+@defmac AC_REQUIRE_CPP
+@acindex{REQUIRE_CPP}
+Ensure that whichever preprocessor would currently be used for tests has
+been found. Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
+argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
+depending on which language is current.
+@end defmac
+
+
+@node Writing Test Programs
+@section Writing Test Programs
+
+Autoconf tests follow a common scheme: feed some program with some
+input, and most of the time, feed a compiler with some source file.
+This section is dedicated to these source samples.
+
+@menu
+* Guidelines:: General rules for writing test programs
+* Test Functions:: Avoiding pitfalls in test programs
+* Generating Sources:: Source program boilerplate
+@end menu
+
+@node Guidelines
+@subsection Guidelines for Test Programs
+
+The most important rule to follow when writing testing samples is:
+
+@center @emph{Look for realism.}
+
+This motto means that testing samples must be written with the same
+strictness as real programs are written. In particular, you should
+avoid ``shortcuts'' and simplifications.
+
+Don't just play with the preprocessor if you want to prepare a
+compilation. For instance, using @command{cpp} to check whether a header is
+functional might let your @command{configure} accept a header which
+causes some @emph{compiler} error. Do not hesitate to check a header with
+other headers included before, especially required headers.
+
+Make sure the symbols you use are properly defined, i.e., refrain from
+simply declaring a function yourself instead of including the proper
+header.
+
+Test programs should not write to standard output. They
+should exit with status 0 if the test succeeds, and with status 1
+otherwise, so that success
+can be distinguished easily from a core dump or other failure;
+segmentation violations and other failures produce a nonzero exit
+status. Unless you arrange for @code{exit} to be declared, test
+programs should @code{return}, not @code{exit}, from @code{main},
+because on many systems @code{exit} is not declared by default.
+
+Test programs can use @code{#if} or @code{#ifdef} to check the values of
+preprocessor macros defined by tests that have already run. For
+example, if you call @code{AC_HEADER_STDBOOL}, then later on in
+@file{configure.ac} you can have a test program that includes
+@file{stdbool.h} conditionally:
+
+@example
+@group
+#ifdef HAVE_STDBOOL_H
+# include <stdbool.h>
+#endif
+@end group
+@end example
+
+Both @code{#if HAVE_STDBOOL_H} and @code{#ifdef HAVE_STDBOOL_H} will
+work with any standard C compiler. Some developers prefer @code{#if}
+because it is easier to read, while others prefer @code{#ifdef} because
+it avoids diagnostics with picky compilers like GCC with the
+@option{-Wundef} option.
+
+If a test program needs to use or create a data file, give it a name
+that starts with @file{conftest}, such as @file{conftest.data}. The
+@command{configure} script cleans up by running @samp{rm -f -r conftest*}
+after running test programs and if the script is interrupted.
+
+@node Test Functions
+@subsection Test Functions
+
+These days it's safe to assume support for function prototypes
+(introduced in C89).
+
+Functions that test programs declare should also be conditionalized for
+C++, which requires @samp{extern "C"} prototypes. Make sure to not
+include any header files containing clashing prototypes.
+
+@example
+#ifdef __cplusplus
+extern "C"
+#endif
+void *valloc (size_t);
+@end example
+
+If a test program calls a function with invalid parameters (just to see
+whether it exists), organize the program to ensure that it never invokes
+that function. You can do this by calling it in another function that is
+never invoked. You can't do it by putting it after a call to
+@code{exit}, because GCC version 2 knows that @code{exit}
+never returns
+and optimizes out any code that follows it in the same block.
+
+If you include any header files, be sure to call the functions
+relevant to them with the correct number of arguments, even if they are
+just 0, to avoid compilation errors due to prototypes. GCC
+version 2
+has internal prototypes for several functions that it automatically
+inlines; for example, @code{memcpy}. To avoid errors when checking for
+them, either pass them the correct number of arguments or redeclare them
+with a different return type (such as @code{char}).
+
+
+@node Generating Sources
+@subsection Generating Sources
+
+Autoconf provides a set of macros that can be used to generate test
+source files. They are written to be language generic, i.e., they
+actually depend on the current language (@pxref{Language Choice}) to
+``format'' the output properly.
+
+
+@defmac AC_LANG_CONFTEST (@var{source})
+@acindex{LANG_CONFTEST}
+Save the @var{source} text in the current test source file:
+@file{conftest.@var{extension}} where the @var{extension} depends on the
+current language. As of Autoconf 2.63b, the source file also contains
+the results of all of the @code{AC_DEFINE} performed so far.
+
+Note that the @var{source} is evaluated exactly once, like regular
+Autoconf macro arguments, and therefore (i) you may pass a macro
+invocation, (ii) if not, be sure to double quote if needed.
+
+This macro issues a warning during @command{autoconf} processing if
+@var{source} does not include an expansion of the macro
+@code{AC_LANG_DEFINES_PROVIDED} (note that both @code{AC_LANG_SOURCE} and
+@code{AC_LANG_PROGRAM} call this macro, and thus avoid the warning).
+
+This macro is seldom called directly, but is used under the hood by more
+common macros such as @code{AC_COMPILE_IFELSE} and @code{AC_RUN_IFELSE}.
+@end defmac
+
+@defmac AC_LANG_DEFINES_PROVIDED
+@acindex{LANG_DEFINES_PROVIDED}
+This macro is called as a witness that the file
+@file{conftest.@var{extension}} appropriate for the current language is
+complete, including all previously determined results from
+@code{AC_DEFINE}. This macro is seldom called directly, but exists if
+you have a compelling reason to write a conftest file without using
+@code{AC_LANG_SOURCE}, yet still want to avoid a syntax warning from
+@code{AC_LANG_CONFTEST}.
+@end defmac
+
+@defmac AC_LANG_SOURCE (@var{source})
+@acindex{LANG_SOURCE}
+Expands into the @var{source}, with the definition of
+all the @code{AC_DEFINE} performed so far. This macro includes an
+expansion of @code{AC_LANG_DEFINES_PROVIDED}.
+
+In many cases, you may find it more convenient to use the wrapper
+@code{AC_LANG_PROGRAM}.
+@end defmac
+
+For instance, executing (observe the double quotation!):
+
+@example
+@c If you change this example, adjust tests/compile.at:AC_LANG_SOURCE example.
+AC_INIT([Hello], [1.0], [bug-hello@@example.org], [],
+ [http://www.example.org/])
+AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+AC_LANG([C])
+AC_LANG_CONFTEST(
+ [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
+gcc -E -dD conftest.c
+@end example
+
+@noindent
+on a system with @command{gcc} installed, results in:
+
+@example
+@c If you change this example, adjust tests/compile.at:AC_LANG_SOURCE example.
+@dots{}
+# 1 "conftest.c"
+
+#define PACKAGE_NAME "Hello"
+#define PACKAGE_TARNAME "hello"
+#define PACKAGE_VERSION "1.0"
+#define PACKAGE_STRING "Hello 1.0"
+#define PACKAGE_BUGREPORT "bug-hello@@example.org"
+#define PACKAGE_URL "http://www.example.org/"
+#define HELLO_WORLD "Hello, World\n"
+
+const char hw[] = "Hello, World\n";
+@end example
+
+When the test language is Fortran, Erlang, or Go, the @code{AC_DEFINE}
+definitions are not automatically translated into constants in the
+source code by this macro.
+
+@defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
+@acindex{LANG_PROGRAM}
+Expands into a source file which consists of the @var{prologue}, and
+then @var{body} as body of the main function (e.g., @code{main} in
+C). Since it uses @code{AC_LANG_SOURCE}, the features of the latter are
+available.
+@end defmac
+
+For instance:
+
+@example
+@c If you change this example, adjust tests/compile.at:AC_LANG_PROGRAM example.
+AC_INIT([Hello], [1.0], [bug-hello@@example.org], [],
+ [http://www.example.org/])
+AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+AC_LANG_CONFTEST(
+[AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])])
+gcc -E -dD conftest.c
+@end example
+
+@noindent
+on a system with @command{gcc} installed, results in:
+
+@example
+@c If you change this example, adjust tests/compile.at:AC_LANG_PROGRAM example.
+@dots{}
+# 1 "conftest.c"
+
+#define PACKAGE_NAME "Hello"
+#define PACKAGE_TARNAME "hello"
+#define PACKAGE_VERSION "1.0"
+#define PACKAGE_STRING "Hello 1.0"
+#define PACKAGE_BUGREPORT "bug-hello@@example.org"
+#define PACKAGE_URL "http://www.example.org/"
+#define HELLO_WORLD "Hello, World\n"
+
+const char hw[] = "Hello, World\n";
+int
+main ()
+@{
+fputs (hw, stdout);
+ ;
+ return 0;
+@}
+@end example
+
+In Erlang tests, the created source file is that of an Erlang module called
+@code{conftest} (@file{conftest.erl}). This module defines and exports
+at least
+one @code{start/0} function, which is called to perform the test. The
+@var{prologue} is optional code that is inserted between the module header and
+the @code{start/0} function definition. @var{body} is the body of the
+@code{start/0} function without the final period (@pxref{Runtime}, about
+constraints on this function's behavior).
+
+For instance:
+
+@example
+AC_INIT([Hello], [1.0], [bug-hello@@example.org])
+AC_LANG(Erlang)
+AC_LANG_CONFTEST(
+[AC_LANG_PROGRAM([[-define(HELLO_WORLD, "Hello, world!").]],
+ [[io:format("~s~n", [?HELLO_WORLD])]])])
+cat conftest.erl
+@end example
+
+@noindent
+results in:
+
+@example
+-module(conftest).
+-export([start/0]).
+-define(HELLO_WORLD, "Hello, world!").
+start() ->
+io:format("~s~n", [?HELLO_WORLD])
+.
+@end example
+
+@defmac AC_LANG_CALL (@var{prologue}, @var{function})
+@acindex{LANG_CALL}
+Expands into a source file which consists of the @var{prologue}, and
+then a call to the @var{function} as body of the main function (e.g.,
+@code{main} in C). Since it uses @code{AC_LANG_PROGRAM}, the feature
+of the latter are available.
+
+This function will probably be replaced in the future by a version
+which would enable specifying the arguments. The use of this macro is
+not encouraged, as it violates strongly the typing system.
+
+This macro cannot be used for Erlang tests.
+@end defmac
+
+@defmac AC_LANG_FUNC_LINK_TRY (@var{function})
+@acindex{LANG_FUNC_LINK_TRY}
+Expands into a source file which uses the @var{function} in the body of
+the main function (e.g., @code{main} in C). Since it uses
+@code{AC_LANG_PROGRAM}, the features of the latter are available.
+
+As @code{AC_LANG_CALL}, this macro is documented only for completeness.
+It is considered to be severely broken, and in the future will be
+removed in favor of actual function calls (with properly typed
+arguments).
+
+This macro cannot be used for Erlang tests.
+@end defmac
+
+@node Running the Preprocessor
+@section Running the Preprocessor
+
+Sometimes one might need to run the preprocessor on some source file.
+@emph{Usually it is a bad idea}, as you typically need to @emph{compile}
+your project, not merely run the preprocessor on it; therefore you
+certainly want to run the compiler, not the preprocessor. Resist the
+temptation of following the easiest path.
+
+Nevertheless, if you need to run the preprocessor, then use
+@code{AC_PREPROC_IFELSE}.
+
+The macros described in this section cannot be used for tests in Erlang,
+Fortran, or Go, since those languages require no preprocessor.
+
+@anchor{AC_PREPROC_IFELSE}
+@defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @
+ @ovar{action-if-false})
+@acindex{PREPROC_IFELSE}
+Run the preprocessor of the current language (@pxref{Language Choice})
+on the @var{input}, run the shell commands @var{action-if-true} on
+success, @var{action-if-false} otherwise. The @var{input} can be made
+by @code{AC_LANG_PROGRAM} and friends.
+
+This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
+@option{-g}, @option{-O}, etc.@: are not valid options to many C
+preprocessors.
+
+It is customary to report unexpected failures with
+@code{AC_MSG_FAILURE}. If needed, @var{action-if-true} can further access
+the preprocessed output in the file @file{conftest.i}.
+@end defmac
+
+For instance:
+
+@example
+AC_INIT([Hello], [1.0], [bug-hello@@example.org])
+AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+AC_PREPROC_IFELSE(
+ [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])],
+ [AC_MSG_RESULT([OK])],
+ [AC_MSG_FAILURE([unexpected preprocessor failure])])
+@end example
+
+@noindent
+results in:
+
+@example
+checking for gcc... gcc
+checking for C compiler default output file name... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ISO C89... none needed
+checking how to run the C preprocessor... gcc -E
+OK
+@end example
+
+@sp 1
+
+The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
+role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
+it impossible to use it to elaborate sources. You are encouraged to
+get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
+@code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
+to run the @emph{preprocessor} and not the compiler?
+
+@anchor{AC_EGREP_HEADER}
+@defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @
+ @var{action-if-found}, @ovar{action-if-not-found})
+@acindex{EGREP_HEADER}
+If the output of running the preprocessor on the system header file
+@var{header-file} matches the extended regular expression
+@var{pattern}, execute shell commands @var{action-if-found}, otherwise
+execute @var{action-if-not-found}.
+@end defmac
+
+@anchor{AC_EGREP_CPP}
+@defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @
+ @ovar{action-if-found}, @ovar{action-if-not-found})
+@acindex{EGREP_CPP}
+@var{program} is the text of a C or C++ program, on which shell
+variable, back quote, and backslash substitutions are performed. If the
+output of running the preprocessor on @var{program} matches the
+extended regular expression @var{pattern}, execute shell commands
+@var{action-if-found}, otherwise execute @var{action-if-not-found}.
+@end defmac
+
+
+
+@node Running the Compiler
+@section Running the Compiler
+
+To check for a syntax feature of the current language's (@pxref{Language
+Choice}) compiler, such as whether it recognizes a certain keyword, or
+simply to try some library feature, use @code{AC_COMPILE_IFELSE} to try
+to compile a small program that uses that feature.
+
+@defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-true}, @
+ @ovar{action-if-false})
+@acindex{COMPILE_IFELSE}
+Run the compiler and compilation flags of the current language
+(@pxref{Language Choice}) on the @var{input}, run the shell commands
+@var{action-if-true} on success, @var{action-if-false} otherwise. The
+@var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
+
+It is customary to report unexpected failures with
+@code{AC_MSG_FAILURE}. This macro does not try to link; use
+@code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
+Linker}). If needed, @var{action-if-true} can further access the
+just-compiled object file @file{conftest.$OBJEXT}.
+
+This macro uses @code{AC_REQUIRE} for the compiler associated with the
+current language, which means that if the compiler has not yet been
+determined, the compiler determination will be made prior to the body of
+the outermost @code{AC_DEFUN} macro that triggered this macro to
+expand (@pxref{Expanded Before Required}).
+@end defmac
+
+@ovindex ERL
+For tests in Erlang, the @var{input} must be the source code of a module named
+@code{conftest}. @code{AC_COMPILE_IFELSE} generates a @file{conftest.beam}
+file that can be interpreted by the Erlang virtual machine (@code{ERL}). It is
+recommended to use @code{AC_LANG_PROGRAM} to specify the test program,
+to ensure that the Erlang module has the right name.
+
+@node Running the Linker
+@section Running the Linker
+
+To check for a library, a function, or a global variable, Autoconf
+@command{configure} scripts try to compile and link a small program that
+uses it. This is unlike Metaconfig, which by default uses @code{nm} or
+@code{ar} on the C library to try to figure out which functions are
+available. Trying to link with the function is usually a more reliable
+approach because it avoids dealing with the variations in the options
+and output formats of @code{nm} and @code{ar} and in the location of the
+standard libraries. It also allows configuring for cross-compilation or
+checking a function's runtime behavior if needed. On the other hand,
+it can be slower than scanning the libraries once, but accuracy is more
+important than speed.
+
+@code{AC_LINK_IFELSE} is used to compile test programs to test for
+functions and global variables. It is also used by @code{AC_CHECK_LIB}
+to check for libraries (@pxref{Libraries}), by adding the library being
+checked for to @code{LIBS} temporarily and trying to link a small
+program.
+
+@anchor{AC_LINK_IFELSE}
+@defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-true}, @
+ @ovar{action-if-false})
+@acindex{LINK_IFELSE}
+Run the compiler (and compilation flags) and the linker of the current
+language (@pxref{Language Choice}) on the @var{input}, run the shell
+commands @var{action-if-true} on success, @var{action-if-false}
+otherwise. The @var{input} can be made by @code{AC_LANG_PROGRAM} and
+friends. If needed, @var{action-if-true} can further access the
+just-linked program file @file{conftest$EXEEXT}.
+
+@code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
+current compilation flags.
+
+It is customary to report unexpected failures with
+@code{AC_MSG_FAILURE}. This macro does not try to execute the program;
+use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Runtime}).
+@end defmac
+
+The @code{AC_LINK_IFELSE} macro cannot be used for Erlang tests, since Erlang
+programs are interpreted and do not require linking.
+
+
+
+@node Runtime
+@section Checking Runtime Behavior
+
+Sometimes you need to find out how a system performs at runtime, such
+as whether a given function has a certain capability or bug. If you
+can, make such checks when your program runs instead of when it is
+configured. You can check for things like the machine's endianness when
+your program initializes itself.
+
+If you really need to test for a runtime behavior while configuring,
+you can write a test program to determine the result, and compile and
+run it using @code{AC_RUN_IFELSE}. Avoid running test programs if
+possible, because this prevents people from configuring your package for
+cross-compiling.
+
+@anchor{AC_RUN_IFELSE}
+@defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-true}, @
+ @ovar{action-if-false}, @dvar{action-if-cross-compiling, AC_MSG_FAILURE})
+@acindex{RUN_IFELSE}
+Run the compiler (and compilation flags) and the linker of the current
+language (@pxref{Language Choice}) on the @var{input}, then execute the
+resulting program. If the program returns an exit
+status of 0 when executed, run shell commands @var{action-if-true}.
+Otherwise, run shell commands @var{action-if-false}.
+
+The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
+@code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
+compilation flags of the current language (@pxref{Language Choice}).
+Additionally, @var{action-if-true} can run @command{./conftest$EXEEXT}
+for further testing.
+
+In the @var{action-if-false} section, the failing exit status is
+available in the shell variable @samp{$?}. This exit status might be
+that of a failed compilation, or it might be that of a failed program
+execution.
+
+If cross-compilation mode is enabled (this is the case if either the
+compiler being used does not produce executables that run on the system
+where @command{configure} is being run, or if the options @code{--build}
+and @code{--host} were both specified and their values are different),
+then the test program is
+not run. If the optional shell commands @var{action-if-cross-compiling}
+are given, those commands are run instead; typically these commands
+provide pessimistic defaults that allow cross-compilation to work even
+if the guess was wrong. If the fourth argument is empty or omitted, but
+cross-compilation is detected, then @command{configure} prints an error
+message and exits. If you want your package to be useful in a
+cross-compilation scenario, you @emph{should} provide a non-empty
+@var{action-if-cross-compiling} clause, as well as wrap the
+@code{AC_RUN_IFELSE} compilation inside an @code{AC_CACHE_CHECK}
+(@pxref{Caching Results}) which allows the user to override the
+pessimistic default if needed.
+
+It is customary to report unexpected failures with
+@code{AC_MSG_FAILURE}.
+@end defmac
+
+@command{autoconf} prints a warning message when creating
+@command{configure} each time it encounters a call to
+@code{AC_RUN_IFELSE} with no @var{action-if-cross-compiling} argument
+given. If you are not concerned about users configuring your package
+for cross-compilation, you may ignore the warning. A few of the macros
+distributed with Autoconf produce this warning message; but if this is a
+problem for you, please report it as a bug, along with an appropriate
+pessimistic guess to use instead.
+
+To configure for cross-compiling you can also choose a value for those
+parameters based on the canonical system name (@pxref{Manual
+Configuration}). Alternatively, set up a test results cache file with
+the correct values for the host system (@pxref{Caching Results}).
+
+@ovindex cross_compiling
+To provide a default for calls of @code{AC_RUN_IFELSE} that are embedded
+in other macros, including a few of the ones that come with Autoconf,
+you can test whether the shell variable @code{cross_compiling} is set to
+@samp{yes}, and then use an alternate method to get the results instead
+of calling the macros.
+
+It is also permissible to temporarily assign to @code{cross_compiling}
+in order to force tests to behave as though they are in a
+cross-compilation environment, particularly since this provides a way to
+test your @var{action-if-cross-compiling} even when you are not using a
+cross-compiler.
+
+@example
+# We temporarily set cross-compile mode to force AC_COMPUTE_INT
+# to use the slow link-only method
+save_cross_compiling=$cross_compiling
+cross_compiling=yes
+AC_COMPUTE_INT([@dots{}])
+cross_compiling=$save_cross_compiling
+@end example
+
+A C or C++ runtime test should be portable.
+@xref{Portable C and C++}.
+
+Erlang tests must exit themselves the Erlang VM by calling the @code{halt/1}
+function: the given status code is used to determine the success of the test
+(status is @code{0}) or its failure (status is different than @code{0}), as
+explained above. It must be noted that data output through the standard output
+(e.g., using @code{io:format/2}) may be truncated when halting the VM.
+Therefore, if a test must output configuration information, it is recommended
+to create and to output data into the temporary file named @file{conftest.out},
+using the functions of module @code{file}. The @code{conftest.out} file is
+automatically deleted by the @code{AC_RUN_IFELSE} macro. For instance, a
+simplified implementation of Autoconf's @code{AC_ERLANG_SUBST_LIB_DIR}
+macro is:
+
+@example
+AC_INIT([LibdirTest], [1.0], [bug-libdirtest@@example.org])
+AC_ERLANG_NEED_ERL
+AC_LANG(Erlang)
+AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ file:write_file("conftest.out", code:lib_dir()),
+ halt(0)])],
+ [echo "code:lib_dir() returned: `cat conftest.out`"],
+ [AC_MSG_FAILURE([test Erlang program execution failed])])
+@end example
+
+
+@node Systemology
+@section Systemology
+@cindex Systemology
+
+This section aims at presenting some systems and pointers to
+documentation. It may help you addressing particular problems reported
+by users.
+
+@uref{http://@/www.opengroup.org/@/susv3, Posix-conforming systems} are
+derived from the @uref{http://@/www.bell-labs.com/@/history/@/unix/, Unix
+operating system}.
+
+The @uref{http://@/bhami.com/@/rosetta.html, Rosetta Stone for Unix}
+contains a table correlating the features of various Posix-conforming
+systems. @uref{http://@/www.levenez.com/@/unix/, Unix History} is a
+simplified diagram of how many Unix systems were derived from each
+other.
+
+@uref{http://@/heirloom.sourceforge.net/, The Heirloom Project}
+provides some variants of traditional implementations of Unix utilities.
+
+@table @asis
+@item Darwin
+@cindex Darwin
+Darwin is also known as Mac OS X@. Beware that the file system @emph{can} be
+case-preserving, but case insensitive. This can cause nasty problems,
+since for instance the installation attempt for a package having an
+@file{INSTALL} file can result in @samp{make install} report that
+nothing was to be done!
+
+That's all dependent on whether the file system is a UFS (case
+sensitive) or HFS+ (case preserving). By default Apple wants you to
+install the OS on HFS+. Unfortunately, there are some pieces of
+software which really need to be built on UFS@. We may want to rebuild
+Darwin to have both UFS and HFS+ available (and put the /local/build
+tree on the UFS).
+
+@item QNX 4.25
+@cindex QNX 4.25
+@c FIXME: Please, if you feel like writing something more precise,
+@c it'd be great. In particular, I can't understand the difference with
+@c QNX Neutrino.
+QNX is a realtime operating system running on Intel architecture
+meant to be scalable from the small embedded systems to the hundred
+processor super-computer. It claims to be Posix certified. More
+information is available on the
+@uref{http://@/www.qnx.com/, QNX home page}.
+
+@item Tru64
+@cindex Tru64
+@uref{http://@/h30097.www3.hp.com/@/docs/,
+Documentation of several versions of Tru64} is available in different
+formats.
+
+@item Unix version 7
+@cindex Unix version 7
+@cindex V7
+Officially this was called the ``Seventh Edition'' of ``the UNIX
+time-sharing system'' but we use the more-common name ``Unix version 7''.
+Documentation is available in the
+@uref{http://@/plan9.bell-labs.com/@/7thEdMan/, Unix Seventh Edition Manual}.
+Previous versions of Unix are called ``Unix version 6'', etc., but
+they were not as widely used.
+@end table
+
+
+@node Multiple Cases
+@section Multiple Cases
+
+Some operations are accomplished in several possible ways, depending on
+the OS variant. Checking for them essentially requires a ``case
+statement''. Autoconf does not directly provide one; however, it is
+easy to simulate by using a shell variable to keep track of whether a
+way to perform the operation has been found yet.
+
+Here is an example that uses the shell variable @code{fstype} to keep
+track of whether the remaining cases need to be checked. Note that
+since the value of @code{fstype} is under our control, we don't have to
+use the longer @samp{test "x$fstype" = xno}.
+
+@example
+@group
+AC_MSG_CHECKING([how to get file system type])
+fstype=no
+# The order of these tests is important.
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
+#include <sys/fstyp.h>]])],
+ [AC_DEFINE([FSTYPE_STATVFS], [1],
+ [Define if statvfs exists.])
+ fstype=SVR4])
+if test $fstype = no; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
+#include <sys/fstyp.h>]])],
+ [AC_DEFINE([FSTYPE_USG_STATFS], [1],
+ [Define if USG statfs.])
+ fstype=SVR3])
+fi
+if test $fstype = no; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
+#include <sys/vmount.h>]])]),
+ [AC_DEFINE([FSTYPE_AIX_STATFS], [1],
+ [Define if AIX statfs.])
+ fstype=AIX])
+fi
+# (more cases omitted here)
+AC_MSG_RESULT([$fstype])
+@end group
+@end example
+
+@c ====================================================== Results of Tests.
+
+@node Results
+@chapter Results of Tests
+
+Once @command{configure} has determined whether a feature exists, what can
+it do to record that information? There are four sorts of things it can
+do: define a C preprocessor symbol, set a variable in the output files,
+save the result in a cache file for future @command{configure} runs, and
+print a message letting the user know the result of the test.
+
+@menu
+* Defining Symbols:: Defining C preprocessor symbols
+* Setting Output Variables:: Replacing variables in output files
+* Special Chars in Variables:: Characters to beware of in variables
+* Caching Results:: Speeding up subsequent @command{configure} runs
+* Printing Messages:: Notifying @command{configure} users
+@end menu
+
+@node Defining Symbols
+@section Defining C Preprocessor Symbols
+
+A common action to take in response to a feature test is to define a C
+preprocessor symbol indicating the results of the test. That is done by
+calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
+
+By default, @code{AC_OUTPUT} places the symbols defined by these macros
+into the output variable @code{DEFS}, which contains an option
+@option{-D@var{symbol}=@var{value}} for each symbol defined. Unlike in
+Autoconf version 1, there is no variable @code{DEFS} defined while
+@command{configure} is running. To check whether Autoconf macros have
+already defined a certain C preprocessor symbol, test the value of the
+appropriate cache variable, as in this example:
+
+@example
+AC_CHECK_FUNC([vprintf], [AC_DEFINE([HAVE_VPRINTF], [1],
+ [Define if vprintf exists.])])
+if test "x$ac_cv_func_vprintf" != xyes; then
+ AC_CHECK_FUNC([_doprnt], [AC_DEFINE([HAVE_DOPRNT], [1],
+ [Define if _doprnt exists.])])
+fi
+@end example
+
+If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
+@code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
+correct values into @code{#define} statements in a template file.
+@xref{Configuration Headers}, for more information about this kind of
+output.
+
+@defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description})
+@defmacx AC_DEFINE (@var{variable})
+@cvindex @var{variable}
+@acindex{DEFINE}
+Define @var{variable} to @var{value} (verbatim), by defining a C
+preprocessor macro for @var{variable}. @var{variable} should be a C
+identifier, optionally suffixed by a parenthesized argument list to
+define a C preprocessor macro with arguments. The macro argument list,
+if present, should be a comma-separated list of C identifiers, possibly
+terminated by an ellipsis @samp{...} if C99 syntax is employed.
+@var{variable} should not contain comments, white space, trigraphs,
+backslash-newlines, universal character names, or non-ASCII
+characters.
+
+@var{value} may contain backslash-escaped newlines, which will be
+preserved if you use @code{AC_CONFIG_HEADERS} but flattened if passed
+via @code{@@DEFS@@} (with no effect on the compilation, since the
+preprocessor sees only one line in the first place). @var{value} should
+not contain raw newlines. If you are not using
+@code{AC_CONFIG_HEADERS}, @var{value} should not contain any @samp{#}
+characters, as @command{make} tends to eat them. To use a shell
+variable, use @code{AC_DEFINE_UNQUOTED} instead.
+
+@var{description} is only useful if you are using
+@code{AC_CONFIG_HEADERS}. In this case, @var{description} is put into
+the generated @file{config.h.in} as the comment before the macro define.
+The following example defines the C preprocessor variable
+@code{EQUATION} to be the string constant @samp{"$a > $b"}:
+
+@example
+AC_DEFINE([EQUATION], ["$a > $b"],
+ [Equation string.])
+@end example
+
+If neither @var{value} nor @var{description} are given, then
+@var{value} defaults to 1 instead of to the empty string. This is for
+backwards compatibility with older versions of Autoconf, but this usage
+is obsolescent and may be withdrawn in future versions of Autoconf.
+
+If the @var{variable} is a literal string, it is passed to
+@code{m4_pattern_allow} (@pxref{Forbidden Patterns}).
+
+If multiple @code{AC_DEFINE} statements are executed for the same
+@var{variable} name (not counting any parenthesized argument list),
+the last one wins.
+@end defmac
+
+@defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
+@defmacx AC_DEFINE_UNQUOTED (@var{variable})
+@acindex{DEFINE_UNQUOTED}
+@cvindex @var{variable}
+Like @code{AC_DEFINE}, but three shell expansions are
+performed---once---on @var{variable} and @var{value}: variable expansion
+(@samp{$}), command substitution (@samp{`}), and backslash escaping
+(@samp{\}), as if in an unquoted here-document. Single and double quote
+characters in the value have no
+special meaning. Use this macro instead of @code{AC_DEFINE} when
+@var{variable} or @var{value} is a shell variable. Examples:
+
+@example
+AC_DEFINE_UNQUOTED([config_machfile], ["$machfile"],
+ [Configuration machine file.])
+AC_DEFINE_UNQUOTED([GETGROUPS_T], [$ac_cv_type_getgroups],
+ [getgroups return type.])
+AC_DEFINE_UNQUOTED([$ac_tr_hdr], [1],
+ [Translated header name.])
+@end example
+@end defmac
+
+Due to a syntactical bizarreness of the Bourne shell, do not use
+semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
+calls from other macro calls or shell code; that can cause syntax errors
+in the resulting @command{configure} script. Use either blanks or
+newlines. That is, do this:
+
+@example
+AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4]) LIBS="-lelf $LIBS"])
+@end example
+
+@noindent
+or this:
+
+@example
+AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4])
+ LIBS="-lelf $LIBS"])
+@end example
+
+@noindent
+instead of this:
+
+@example
+AC_CHECK_HEADER([elf.h],
+ [AC_DEFINE([SVR4], [1], [System V Release 4]); LIBS="-lelf $LIBS"])
+@end example
+
+@node Setting Output Variables
+@section Setting Output Variables
+@cindex Output variables
+
+Another way to record the results of tests is to set @dfn{output
+variables}, which are shell variables whose values are substituted into
+files that @command{configure} outputs. The two macros below create new
+output variables. @xref{Preset Output Variables}, for a list of output
+variables that are always available.
+
+@defmac AC_SUBST (@var{variable}, @ovar{value})
+@acindex{SUBST}
+Create an output variable from a shell variable. Make @code{AC_OUTPUT}
+substitute the variable @var{variable} into output files (typically one
+or more makefiles). This means that @code{AC_OUTPUT}
+replaces instances of @samp{@@@var{variable}@@} in input files with the
+value that the shell variable @var{variable} has when @code{AC_OUTPUT}
+is called. The value can contain any non-@code{NUL} character, including
+newline. If you are using Automake 1.11 or newer, for newlines in values
+you might want to consider using @code{AM_SUBST_NOTMAKE} to prevent
+@command{automake} from adding a line @code{@var{variable} =
+@@@var{variable}@@} to the @file{Makefile.in} files (@pxref{Optional, ,
+Automake, automake, Other things Automake recognizes}).
+
+Variable occurrences should not overlap: e.g., an input file should
+not contain @samp{@@@var{var1}@@@var{var2}@@} if @var{var1} and @var{var2}
+are variable names.
+The substituted value is not rescanned for more output variables;
+occurrences of @samp{@@@var{variable}@@} in the value are inserted
+literally into the output file. (The algorithm uses the special marker
+@code{|#_!!_#|} internally, so neither the substituted value nor the
+output file may contain @code{|#_!!_#|}.)
+
+If @var{value} is given, in addition assign it to @var{variable}.
+
+The string @var{variable} is passed to @code{m4_pattern_allow}
+(@pxref{Forbidden Patterns}).
+@end defmac
+
+@defmac AC_SUBST_FILE (@var{variable})
+@acindex{SUBST_FILE}
+Another way to create an output variable from a shell variable. Make
+@code{AC_OUTPUT} insert (without substitutions) the contents of the file
+named by shell variable @var{variable} into output files. This means
+that @code{AC_OUTPUT} replaces instances of
+@samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
+with the contents of the file that the shell variable @var{variable}
+names when @code{AC_OUTPUT} is called. Set the variable to
+@file{/dev/null} for cases that do not have a file to insert.
+This substitution occurs only when the @samp{@@@var{variable}@@} is on a
+line by itself, optionally surrounded by spaces and tabs. The
+substitution replaces the whole line, including the spaces, tabs, and
+the terminating newline.
+
+This macro is useful for inserting makefile fragments containing
+special dependencies or other @command{make} directives for particular host
+or target types into makefiles. For example, @file{configure.ac}
+could contain:
+
+@example
+AC_SUBST_FILE([host_frag])
+host_frag=$srcdir/conf/sun4.mh
+@end example
+
+@noindent
+and then a @file{Makefile.in} could contain:
+
+@example
+@@host_frag@@
+@end example
+
+The string @var{variable} is passed to @code{m4_pattern_allow}
+(@pxref{Forbidden Patterns}).
+@end defmac
+
+@cindex Precious Variable
+@cindex Variable, Precious
+Running @command{configure} in varying environments can be extremely
+dangerous. If for instance the user runs @samp{CC=bizarre-cc
+./configure}, then the cache, @file{config.h}, and many other output
+files depend upon @command{bizarre-cc} being the C compiler. If
+for some reason the user runs @command{./configure} again, or if it is
+run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
+and @pxref{config.status Invocation}), then the configuration can be
+inconsistent, composed of results depending upon two different
+compilers.
+
+Environment variables that affect this situation, such as @samp{CC}
+above, are called @dfn{precious variables}, and can be declared as such
+by @code{AC_ARG_VAR}.
+
+@defmac AC_ARG_VAR (@var{variable}, @var{description})
+@acindex{ARG_VAR}
+Declare @var{variable} is a precious variable, and include its
+@var{description} in the variable section of @samp{./configure --help}.
+
+Being precious means that
+@itemize @minus
+@item
+@var{variable} is substituted via @code{AC_SUBST}.
+
+@item
+The value of @var{variable} when @command{configure} was launched is
+saved in the cache, including if it was not specified on the command
+line but via the environment. Indeed, while @command{configure} can
+notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
+it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
+which, unfortunately, is what most users do.
+
+We emphasize that it is the @emph{initial} value of @var{variable} which
+is saved, not that found during the execution of @command{configure}.
+Indeed, specifying @samp{./configure FOO=foo} and letting
+@samp{./configure} guess that @code{FOO} is @code{foo} can be two
+different things.
+
+@item
+@var{variable} is checked for consistency between two
+@command{configure} runs. For instance:
+
+@example
+$ @kbd{./configure --silent --config-cache}
+$ @kbd{CC=cc ./configure --silent --config-cache}
+configure: error: `CC' was not set in the previous run
+configure: error: changes in the environment can compromise \
+the build
+configure: error: run `make distclean' and/or \
+`rm config.cache' and start over
+@end example
+
+@noindent
+and similarly if the variable is unset, or if its content is changed.
+If the content has white space changes only, then the error is degraded
+to a warning only, but the old value is reused.
+
+@item
+@var{variable} is kept during automatic reconfiguration
+(@pxref{config.status Invocation}) as if it had been passed as a command
+line argument, including when no cache is used:
+
+@example
+$ @kbd{CC=/usr/bin/cc ./configure var=raboof --silent}
+$ @kbd{./config.status --recheck}
+running CONFIG_SHELL=/bin/sh /bin/sh ./configure var=raboof \
+ CC=/usr/bin/cc --no-create --no-recursion
+@end example
+@end itemize
+@end defmac
+
+@node Special Chars in Variables
+@section Special Characters in Output Variables
+@cindex Output variables, special characters in
+
+Many output variables are intended to be evaluated both by
+@command{make} and by the shell. Some characters are expanded
+differently in these two contexts, so to avoid confusion these
+variables' values should not contain any of the following characters:
+
+@example
+" # $ & ' ( ) * ; < > ? [ \ ^ ` |
+@end example
+
+Also, these variables' values should neither contain newlines, nor start
+with @samp{~}, nor contain white space or @samp{:} immediately followed
+by @samp{~}. The values can contain nonempty sequences of white space
+characters like tabs and spaces, but each such sequence might
+arbitrarily be replaced by a single space during substitution.
+
+These restrictions apply both to the values that @command{configure}
+computes, and to the values set directly by the user. For example, the
+following invocations of @command{configure} are problematic, since they
+attempt to use special characters within @code{CPPFLAGS} and white space
+within @code{$(srcdir)}:
+
+@example
+CPPFLAGS='-DOUCH="&\"#$*?"' '../My Source/ouch-1.0/configure'
+
+'../My Source/ouch-1.0/configure' CPPFLAGS='-DOUCH="&\"#$*?"'
+@end example
+
+@node Caching Results
+@section Caching Results
+@cindex Cache
+
+To avoid checking for the same features repeatedly in various
+@command{configure} scripts (or in repeated runs of one script),
+@command{configure} can optionally save the results of many checks in a
+@dfn{cache file} (@pxref{Cache Files}). If a @command{configure} script
+runs with caching enabled and finds a cache file, it reads the results
+of previous runs from the cache and avoids rerunning those checks. As a
+result, @command{configure} can then run much faster than if it had to
+perform all of the checks every time.
+
+@defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
+@acindex{CACHE_VAL}
+Ensure that the results of the check identified by @var{cache-id} are
+available. If the results of the check were in the cache file that was
+read, and @command{configure} was not given the @option{--quiet} or
+@option{--silent} option, print a message saying that the result was
+cached; otherwise, run the shell commands @var{commands-to-set-it}. If
+the shell commands are run to determine the value, the value is
+saved in the cache file just before @command{configure} creates its output
+files. @xref{Cache Variable Names}, for how to choose the name of the
+@var{cache-id} variable.
+
+The @var{commands-to-set-it} @emph{must have no side effects} except for
+setting the variable @var{cache-id}, see below.
+@end defmac
+
+@defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @
+ @var{commands-to-set-it})
+@acindex{CACHE_CHECK}
+A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
+messages. This macro provides a convenient shorthand for the most
+common way to use these macros. It calls @code{AC_MSG_CHECKING} for
+@var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
+@var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
+
+The @var{commands-to-set-it} @emph{must have no side effects} except for
+setting the variable @var{cache-id}, see below.
+@end defmac
+
+It is common to find buggy macros using @code{AC_CACHE_VAL} or
+@code{AC_CACHE_CHECK}, because people are tempted to call
+@code{AC_DEFINE} in the @var{commands-to-set-it}. Instead, the code that
+@emph{follows} the call to @code{AC_CACHE_VAL} should call
+@code{AC_DEFINE}, by examining the value of the cache variable. For
+instance, the following macro is broken:
+
+@example
+@c If you change this example, adjust tests/base.at:AC_CACHE_CHECK.
+@group
+AC_DEFUN([AC_SHELL_TRUE],
+[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi])
+])
+@end group
+@end example
+
+@noindent
+This fails if the cache is enabled: the second time this macro is run,
+@code{TRUE_WORKS} @emph{will not be defined}. The proper implementation
+is:
+
+@example
+@c If you change this example, adjust tests/base.at:AC_CACHE_CHECK.
+@group
+AC_DEFUN([AC_SHELL_TRUE],
+[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes])
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi
+])
+@end group
+@end example
+
+Also, @var{commands-to-set-it} should not print any messages, for
+example with @code{AC_MSG_CHECKING}; do that before calling
+@code{AC_CACHE_VAL}, so the messages are printed regardless of whether
+the results of the check are retrieved from the cache or determined by
+running the shell commands.
+
+@menu
+* Cache Variable Names:: Shell variables used in caches
+* Cache Files:: Files @command{configure} uses for caching
+* Cache Checkpointing:: Loading and saving the cache file
+@end menu
+
+@node Cache Variable Names
+@subsection Cache Variable Names
+@cindex Cache variable
+
+The names of cache variables should have the following format:
+
+@example
+@var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@ovar{additional-options}
+@end example
+
+@noindent
+for example, @samp{ac_cv_header_stat_broken} or
+@samp{ac_cv_prog_gcc_traditional}. The parts of the variable name are:
+
+@table @asis
+@item @var{package-prefix}
+An abbreviation for your package or organization; the same prefix you
+begin local Autoconf macros with, except lowercase by convention.
+For cache values used by the distributed Autoconf macros, this value is
+@samp{ac}.
+
+@item @code{_cv_}
+Indicates that this shell variable is a cache value. This string
+@emph{must} be present in the variable name, including the leading
+underscore.
+
+@item @var{value-type}
+A convention for classifying cache values, to produce a rational naming
+system. The values used in Autoconf are listed in @ref{Macro Names}.
+
+@item @var{specific-value}
+Which member of the class of cache values this test applies to.
+For example, which function (@samp{alloca}), program (@samp{gcc}), or
+output variable (@samp{INSTALL}).
+
+@item @var{additional-options}
+Any particular behavior of the specific member that this test applies to.
+For example, @samp{broken} or @samp{set}. This part of the name may
+be omitted if it does not apply.
+@end table
+
+The values assigned to cache variables may not contain newlines.
+Usually, their values are Boolean (@samp{yes} or @samp{no}) or the
+names of files or functions; so this is not an important restriction.
+@ref{Cache Variable Index} for an index of cache variables with
+documented semantics.
+
+
+@node Cache Files
+@subsection Cache Files
+
+A cache file is a shell script that caches the results of configure
+tests run on one system so they can be shared between configure scripts
+and configure runs. It is not useful on other systems. If its contents
+are invalid for some reason, the user may delete or edit it, or override
+documented cache variables on the @command{configure} command line.
+
+By default, @command{configure} uses no cache file,
+to avoid problems caused by accidental
+use of stale cache files.
+
+To enable caching, @command{configure} accepts @option{--config-cache} (or
+@option{-C}) to cache results in the file @file{config.cache}.
+Alternatively, @option{--cache-file=@var{file}} specifies that
+@var{file} be the cache file. The cache file is created if it does not
+exist already. When @command{configure} calls @command{configure} scripts in
+subdirectories, it uses the @option{--cache-file} argument so that they
+share the same cache. @xref{Subdirectories}, for information on
+configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
+
+@file{config.status} only pays attention to the cache file if it is
+given the @option{--recheck} option, which makes it rerun
+@command{configure}.
+
+It is wrong to try to distribute cache files for particular system types.
+There is too much room for error in doing that, and too much
+administrative overhead in maintaining them. For any features that
+can't be guessed automatically, use the standard method of the canonical
+system type and linking files (@pxref{Manual Configuration}).
+
+The site initialization script can specify a site-wide cache file to
+use, instead of the usual per-program cache. In this case, the cache
+file gradually accumulates information whenever someone runs a new
+@command{configure} script. (Running @command{configure} merges the new cache
+results with the existing cache file.) This may cause problems,
+however, if the system configuration (e.g., the installed libraries or
+compilers) changes and the stale cache file is not deleted.
+
+If @command{configure} is interrupted at the right time when it updates
+a cache file outside of the build directory where the @command{configure}
+script is run, it may leave behind a temporary file named after the
+cache file with digits following it. You may safely delete such a file.
+
+
+@node Cache Checkpointing
+@subsection Cache Checkpointing
+
+If your configure script, or a macro called from @file{configure.ac}, happens
+to abort the configure process, it may be useful to checkpoint the cache
+a few times at key points using @code{AC_CACHE_SAVE}. Doing so
+reduces the amount of time it takes to rerun the configure script with
+(hopefully) the error that caused the previous abort corrected.
+
+@c FIXME: Do we really want to document this guy?
+@defmac AC_CACHE_LOAD
+@acindex{CACHE_LOAD}
+Loads values from existing cache file, or creates a new cache file if a
+cache file is not found. Called automatically from @code{AC_INIT}.
+@end defmac
+
+@defmac AC_CACHE_SAVE
+@acindex{CACHE_SAVE}
+Flushes all cached values to the cache file. Called automatically from
+@code{AC_OUTPUT}, but it can be quite useful to call
+@code{AC_CACHE_SAVE} at key points in @file{configure.ac}.
+@end defmac
+
+For instance:
+
+@example
+@r{ @dots{} AC_INIT, etc. @dots{}}
+@group
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_AWK
+@r{ @dots{} more program checks @dots{}}
+AC_CACHE_SAVE
+@end group
+
+@group
+# Checks for libraries.
+AC_CHECK_LIB([nsl], [gethostbyname])
+AC_CHECK_LIB([socket], [connect])
+@r{ @dots{} more lib checks @dots{}}
+AC_CACHE_SAVE
+@end group
+
+@group
+# Might abort@dots{}
+AM_PATH_GTK([1.0.2], [], [AC_MSG_ERROR([GTK not in path])])
+AM_PATH_GTKMM([0.9.5], [], [AC_MSG_ERROR([GTK not in path])])
+@end group
+@r{ @dots{} AC_OUTPUT, etc. @dots{}}
+@end example
+
+@node Printing Messages
+@section Printing Messages
+@cindex Messages, from @command{configure}
+
+@command{configure} scripts need to give users running them several kinds
+of information. The following macros print messages in ways appropriate
+for each kind. The arguments to all of them get enclosed in shell
+double quotes, so the shell performs variable and back-quote
+substitution on them.
+
+These macros are all wrappers around the @command{echo} shell command.
+They direct output to the appropriate file descriptor (@pxref{File
+Descriptor Macros}).
+@command{configure} scripts should rarely need to run @command{echo} directly
+to print messages for the user. Using these macros makes it easy to
+change how and when each kind of message is printed; such changes need
+only be made to the macro definitions and all the callers change
+automatically.
+
+To diagnose static issues, i.e., when @command{autoconf} is run, see
+@ref{Diagnostic Macros}.
+
+@defmac AC_MSG_CHECKING (@var{feature-description})
+@acindex{MSG_CHECKING}
+Notify the user that @command{configure} is checking for a particular
+feature. This macro prints a message that starts with @samp{checking }
+and ends with @samp{...} and no newline. It must be followed by a call
+to @code{AC_MSG_RESULT} to print the result of the check and the
+newline. The @var{feature-description} should be something like
+@samp{whether the Fortran compiler accepts C++ comments} or @samp{for
+c89}.
+
+This macro prints nothing if @command{configure} is run with the
+@option{--quiet} or @option{--silent} option.
+@end defmac
+
+@anchor{AC_MSG_RESULT}
+@defmac AC_MSG_RESULT (@var{result-description})
+@acindex{MSG_RESULT}
+Notify the user of the results of a check. @var{result-description} is
+almost always the value of the cache variable for the check, typically
+@samp{yes}, @samp{no}, or a file name. This macro should follow a call
+to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
+the completion of the message printed by the call to
+@code{AC_MSG_CHECKING}.
+
+This macro prints nothing if @command{configure} is run with the
+@option{--quiet} or @option{--silent} option.
+@end defmac
+
+@anchor{AC_MSG_NOTICE}
+@defmac AC_MSG_NOTICE (@var{message})
+@acindex{MSG_NOTICE}
+Deliver the @var{message} to the user. It is useful mainly to print a
+general description of the overall purpose of a group of feature checks,
+e.g.,
+
+@example
+AC_MSG_NOTICE([checking if stack overflow is detectable])
+@end example
+
+This macro prints nothing if @command{configure} is run with the
+@option{--quiet} or @option{--silent} option.
+@end defmac
+
+@anchor{AC_MSG_ERROR}
+@defmac AC_MSG_ERROR (@var{error-description}, @dvar{exit-status, $?/1})
+@acindex{MSG_ERROR}
+Notify the user of an error that prevents @command{configure} from
+completing. This macro prints an error message to the standard error
+output and exits @command{configure} with @var{exit-status} (@samp{$?}
+by default, except that @samp{0} is converted to @samp{1}).
+@var{error-description} should be something like @samp{invalid value
+$HOME for \$HOME}.
+
+The @var{error-description} should start with a lower-case letter, and
+``cannot'' is preferred to ``can't''.
+@end defmac
+
+@defmac AC_MSG_FAILURE (@var{error-description}, @ovar{exit-status})
+@acindex{MSG_FAILURE}
+This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
+prevents @command{configure} from completing @emph{and} that additional
+details are provided in @file{config.log}. This is typically used when
+abnormal results are found during a compilation.
+@end defmac
+
+@anchor{AC_MSG_WARN}
+@defmac AC_MSG_WARN (@var{problem-description})
+@acindex{MSG_WARN}
+Notify the @command{configure} user of a possible problem. This macro
+prints the message to the standard error output; @command{configure}
+continues running afterward, so macros that call @code{AC_MSG_WARN} should
+provide a default (back-up) behavior for the situations they warn about.
+@var{problem-description} should be something like @samp{ln -s seems to
+make hard links}.
+@end defmac
+
+
+
+@c ====================================================== Programming in M4.
+
+@node Programming in M4
+@chapter Programming in M4
+@cindex M4
+
+Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
+convenient macros for pure M4 programming, and @dfn{M4sh}, which
+provides macros dedicated to shell script generation.
+
+As of this version of Autoconf, these two layers still contain
+experimental macros, whose interface might change in the future. As a
+matter of fact, @emph{anything that is not documented must not be used}.
+
+@menu
+* M4 Quotation:: Protecting macros from unwanted expansion
+* Using autom4te:: The Autoconf executables backbone
+* Programming in M4sugar:: Convenient pure M4 macros
+* Debugging via autom4te:: Figuring out what M4 was doing
+@end menu
+
+@node M4 Quotation
+@section M4 Quotation
+@cindex M4 quotation
+@cindex quotation
+
+The most common problem with existing macros is an improper quotation.
+This section, which users of Autoconf can skip, but which macro writers
+@emph{must} read, first justifies the quotation scheme that was chosen
+for Autoconf and then ends with a rule of thumb. Understanding the
+former helps one to follow the latter.
+
+@menu
+* Active Characters:: Characters that change the behavior of M4
+* One Macro Call:: Quotation and one macro call
+* Quoting and Parameters:: M4 vs. shell parameters
+* Quotation and Nested Macros:: Macros calling macros
+* Changequote is Evil:: Worse than INTERCAL: M4 + changequote
+* Quadrigraphs:: Another way to escape special characters
+* Balancing Parentheses:: Dealing with unbalanced parentheses
+* Quotation Rule Of Thumb:: One parenthesis, one quote
+@end menu
+
+@node Active Characters
+@subsection Active Characters
+
+To fully understand where proper quotation is important, you first need
+to know what the special characters are in Autoconf: @samp{#} introduces
+a comment inside which no macro expansion is performed, @samp{,}
+separates arguments, @samp{[} and @samp{]} are the quotes
+themselves@footnote{By itself, M4 uses @samp{`} and @samp{'}; it is the
+M4sugar layer that sets up the preferred quotes of @samp{[} and @samp{]}.},
+@samp{(} and @samp{)} (which M4 tries to match by pairs), and finally
+@samp{$} inside a macro definition.
+
+In order to understand the delicate case of macro calls, we first have
+to present some obvious failures. Below they are ``obvious-ified'',
+but when you find them in real life, they are usually in disguise.
+
+Comments, introduced by a hash and running up to the newline, are opaque
+tokens to the top level: active characters are turned off, and there is
+no macro expansion:
+
+@example
+# define([def], ine)
+@result{}# define([def], ine)
+@end example
+
+Each time there can be a macro expansion, there is a quotation
+expansion, i.e., one level of quotes is stripped:
+
+@example
+int tab[10];
+@result{}int tab10;
+[int tab[10];]
+@result{}int tab[10];
+@end example
+
+Without this in mind, the reader might try hopelessly to use her macro
+@code{array}:
+
+@example
+define([array], [int tab[10];])
+array
+@result{}int tab10;
+[array]
+@result{}array
+@end example
+
+@noindent
+How can you correctly output the intended results@footnote{Using
+@code{defn}.}?
+
+
+@node One Macro Call
+@subsection One Macro Call
+
+Let's proceed on the interaction between active characters and macros
+with this small macro, which just returns its first argument:
+
+@example
+define([car], [$1])
+@end example
+
+@noindent
+The two pairs of quotes above are not part of the arguments of
+@code{define}; rather, they are understood by the top level when it
+tries to find the arguments of @code{define}. Therefore, assuming
+@code{car} is not already defined, it is equivalent to write:
+
+@example
+define(car, $1)
+@end example
+
+@noindent
+But, while it is acceptable for a @file{configure.ac} to avoid unnecessary
+quotes, it is bad practice for Autoconf macros which must both be more
+robust and also advocate perfect style.
+
+At the top level, there are only two possibilities: either you
+quote or you don't:
+
+@example
+car(foo, bar, baz)
+@result{}foo
+[car(foo, bar, baz)]
+@result{}car(foo, bar, baz)
+@end example
+
+Let's pay attention to the special characters:
+
+@example
+car(#)
+@error{}EOF in argument list
+@end example
+
+The closing parenthesis is hidden in the comment; with a hypothetical
+quoting, the top level understood it this way:
+
+@example
+car([#)]
+@end example
+
+@noindent
+Proper quotation, of course, fixes the problem:
+
+@example
+car([#])
+@result{}#
+@end example
+
+Here are more examples:
+
+@example
+car(foo, bar)
+@result{}foo
+car([foo, bar])
+@result{}foo, bar
+car((foo, bar))
+@result{}(foo, bar)
+car([(foo], [bar)])
+@result{}(foo
+define([a], [b])
+@result{}
+car(a)
+@result{}b
+car([a])
+@result{}b
+car([[a]])
+@result{}a
+car([[[a]]])
+@result{}[a]
+@end example
+
+@node Quoting and Parameters
+@subsection Quoting and Parameters
+
+When M4 encounters @samp{$} within a macro definition, followed
+immediately by a character it recognizes (@samp{0}@dots{}@samp{9},
+@samp{#}, @samp{@@}, or @samp{*}), it will perform M4 parameter
+expansion. This happens regardless of how many layers of quotes the
+parameter expansion is nested within, or even if it occurs in text that
+will be rescanned as a comment.
+
+@example
+define([none], [$1])
+@result{}
+define([one], [[$1]])
+@result{}
+define([two], [[[$1]]])
+@result{}
+define([comment], [# $1])
+@result{}
+define([active], [ACTIVE])
+@result{}
+none([active])
+@result{}ACTIVE
+one([active])
+@result{}active
+two([active])
+@result{}[active]
+comment([active])
+@result{}# active
+@end example
+
+On the other hand, since autoconf generates shell code, you often want
+to output shell variable expansion, rather than performing M4 parameter
+expansion. To do this, you must use M4 quoting to separate the @samp{$}
+from the next character in the definition of your macro. If the macro
+definition occurs in single-quoted text, then insert another level of
+quoting; if the usage is already inside a double-quoted string, then
+split it into concatenated strings.
+
+@example
+define([single], [a single-quoted $[]1 definition])
+@result{}
+define([double], [[a double-quoted $][1 definition]])
+@result{}
+single
+@result{}a single-quoted $1 definition
+double
+@result{}a double-quoted $1 definition
+@end example
+
+Posix states that M4 implementations are free to provide implementation
+extensions when @samp{$@{} is encountered in a macro definition.
+Autoconf reserves the longer sequence @samp{$@{@{} for use with planned
+extensions that will be available in the future GNU M4 2.0,
+but guarantees that all other instances of @samp{$@{} will be output
+literally. Therefore, this idiom can also be used to output shell code
+parameter references:
+
+@example
+define([first], [$@{1@}])first
+@result{}$@{1@}
+@end example
+
+Posix also states that @samp{$11} should expand to the first parameter
+concatenated with a literal @samp{1}, although some versions of
+GNU M4 expand the eleventh parameter instead. For
+portability, you should only use single-digit M4 parameter expansion.
+
+With this in mind, we can explore the cases where macros invoke
+macros@enddots{}
+
+@node Quotation and Nested Macros
+@subsection Quotation and Nested Macros
+
+The examples below use the following macros:
+
+@example
+define([car], [$1])
+define([active], [ACT, IVE])
+define([array], [int tab[10]])
+@end example
+
+Each additional embedded macro call introduces other possible
+interesting quotations:
+
+@example
+car(active)
+@result{}ACT
+car([active])
+@result{}ACT, IVE
+car([[active]])
+@result{}active
+@end example
+
+In the first case, the top level looks for the arguments of @code{car},
+and finds @samp{active}. Because M4 evaluates its arguments
+before applying the macro, @samp{active} is expanded, which results in:
+
+@example
+car(ACT, IVE)
+@result{}ACT
+@end example
+
+@noindent
+In the second case, the top level gives @samp{active} as first and only
+argument of @code{car}, which results in:
+
+@example
+active
+@result{}ACT, IVE
+@end example
+
+@noindent
+i.e., the argument is evaluated @emph{after} the macro that invokes it.
+In the third case, @code{car} receives @samp{[active]}, which results in:
+
+@example
+[active]
+@result{}active
+@end example
+
+@noindent
+exactly as we already saw above.
+
+The example above, applied to a more realistic example, gives:
+
+@example
+car(int tab[10];)
+@result{}int tab10;
+car([int tab[10];])
+@result{}int tab10;
+car([[int tab[10];]])
+@result{}int tab[10];
+@end example
+
+@noindent
+Huh? The first case is easily understood, but why is the second wrong,
+and the third right? To understand that, you must know that after
+M4 expands a macro, the resulting text is immediately subjected
+to macro expansion and quote removal. This means that the quote removal
+occurs twice---first before the argument is passed to the @code{car}
+macro, and second after the @code{car} macro expands to the first
+argument.
+
+As the author of the Autoconf macro @code{car}, you then consider it to
+be incorrect that your users have to double-quote the arguments of
+@code{car}, so you ``fix'' your macro. Let's call it @code{qar} for
+quoted car:
+
+@example
+define([qar], [[$1]])
+@end example
+
+@noindent
+and check that @code{qar} is properly fixed:
+
+@example
+qar([int tab[10];])
+@result{}int tab[10];
+@end example
+
+@noindent
+Ahhh! That's much better.
+
+But note what you've done: now that the result of @code{qar} is always
+a literal string, the only time a user can use nested macros is if she
+relies on an @emph{unquoted} macro call:
+
+@example
+qar(active)
+@result{}ACT
+qar([active])
+@result{}active
+@end example
+
+@noindent
+leaving no way for her to reproduce what she used to do with @code{car}:
+
+@example
+car([active])
+@result{}ACT, IVE
+@end example
+
+@noindent
+Worse yet: she wants to use a macro that produces a set of @code{cpp}
+macros:
+
+@example
+define([my_includes], [#include <stdio.h>])
+car([my_includes])
+@result{}#include <stdio.h>
+qar(my_includes)
+@error{}EOF in argument list
+@end example
+
+This macro, @code{qar}, because it double quotes its arguments, forces
+its users to leave their macro calls unquoted, which is dangerous.
+Commas and other active symbols are interpreted by M4 before
+they are given to the macro, often not in the way the users expect.
+Also, because @code{qar} behaves differently from the other macros,
+it's an exception that should be avoided in Autoconf.
+
+@node Changequote is Evil
+@subsection @code{changequote} is Evil
+@cindex @code{changequote}
+
+The temptation is often high to bypass proper quotation, in particular
+when it's late at night. Then, many experienced Autoconf hackers
+finally surrender to the dark side of the force and use the ultimate
+weapon: @code{changequote}.
+
+The M4 builtin @code{changequote} belongs to a set of primitives that
+allow one to adjust the syntax of the language to adjust it to one's
+needs. For instance, by default M4 uses @samp{`} and @samp{'} as
+quotes, but in the context of shell programming (and actually of most
+programming languages), that's about the worst choice one can make:
+because of strings and back-quoted expressions in shell code (such as
+@samp{'this'} and @samp{`that`}), and because of literal characters in usual
+programming languages (as in @samp{'0'}), there are many unbalanced
+@samp{`} and @samp{'}. Proper M4 quotation then becomes a nightmare, if
+not impossible. In order to make M4 useful in such a context, its
+designers have equipped it with @code{changequote}, which makes it
+possible to choose another pair of quotes. M4sugar, M4sh, Autoconf, and
+Autotest all have chosen to use @samp{[} and @samp{]}. Not especially
+because they are unlikely characters, but @emph{because they are
+characters unlikely to be unbalanced}.
+
+There are other magic primitives, such as @code{changecom} to specify
+what syntactic forms are comments (it is common to see
+@samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
+@code{changeword} and @code{changesyntax} to change other syntactic
+details (such as the character to denote the @var{n}th argument, @samp{$} by
+default, the parentheses around arguments, etc.).
+
+These primitives are really meant to make M4 more useful for specific
+domains: they should be considered like command line options:
+@option{--quotes}, @option{--comments}, @option{--words}, and
+@option{--syntax}. Nevertheless, they are implemented as M4 builtins, as
+it makes M4 libraries self contained (no need for additional options).
+
+There lies the problem@enddots{}
+
+@sp 1
+
+The problem is that it is then tempting to use them in the middle of an
+M4 script, as opposed to its initialization. This, if not carefully
+thought out, can lead to disastrous effects: @emph{you are changing the
+language in the middle of the execution}. Changing and restoring the
+syntax is often not enough: if you happened to invoke macros in between,
+these macros are lost, as the current syntax is probably not
+the one they were implemented with.
+
+@c FIXME: I've been looking for a short, real case example, but I
+@c lost them all :(
+
+
+@node Quadrigraphs
+@subsection Quadrigraphs
+@cindex quadrigraphs
+@cindex @samp{@@S|@@}
+@cindex @samp{@@&t@@}
+@c Info cannot handle `:' in index entries.
+@ifnotinfo
+@cindex @samp{@@<:@@}
+@cindex @samp{@@:>@@}
+@cindex @samp{@@%:@@}
+@cindex @samp{@@@{:@@}
+@cindex @samp{@@:@}@@}
+@end ifnotinfo
+
+When writing an Autoconf macro you may occasionally need to generate
+special characters that are difficult to express with the standard
+Autoconf quoting rules. For example, you may need to output the regular
+expression @samp{[^[]}, which matches any character other than @samp{[}.
+This expression contains unbalanced brackets so it cannot be put easily
+into an M4 macro.
+
+Additionally, there are a few m4sugar macros (such as @code{m4_split}
+and @code{m4_expand}) which internally use special markers in addition
+to the regular quoting characters. If the arguments to these macros
+contain the literal strings @samp{-=<@{(} or @samp{)@}>=-}, the macros
+might behave incorrectly.
+
+You can work around these problems by using one of the following
+@dfn{quadrigraphs}:
+
+@table @samp
+@item @@<:@@
+@samp{[}
+@item @@:>@@
+@samp{]}
+@item @@S|@@
+@samp{$}
+@item @@%:@@
+@samp{#}
+@item @@@{:@@
+@samp{(}
+@item @@:@}@@
+@samp{)}
+@item @@&t@@
+Expands to nothing.
+@end table
+
+Quadrigraphs are replaced at a late stage of the translation process,
+after @command{m4} is run, so they do not get in the way of M4 quoting.
+For example, the string @samp{^@@<:@@}, independently of its quotation,
+appears as @samp{^[} in the output.
+
+The empty quadrigraph can be used:
+
+@itemize @minus
+@item to mark trailing spaces explicitly
+
+Trailing spaces are smashed by @command{autom4te}. This is a feature.
+
+@item to produce quadrigraphs and other strings reserved by m4sugar
+
+For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}. For a more
+contrived example:
+
+@example
+m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
+m4_split([a )@}>=- b -=<@{( c])
+@result{}[a], [], [B], [], [c]
+m4_split([a )@}@@&t@@>=- b -=<@@&t@@@{( c])
+@result{}[a], [)@}>=-], [b], [-=<@{(], [c]
+@end example
+
+@item to escape @emph{occurrences} of forbidden patterns
+
+For instance you might want to mention @code{AC_FOO} in a comment, while
+still being sure that @command{autom4te} still catches unexpanded
+@samp{AC_*}. Then write @samp{AC@@&t@@_FOO}.
+@end itemize
+
+The name @samp{@@&t@@} was suggested by Paul Eggert:
+
+@quotation
+I should give some credit to the @samp{@@&t@@} pun. The @samp{&} is my
+own invention, but the @samp{t} came from the source code of the
+ALGOL68C compiler, written by Steve Bourne (of Bourne shell fame),
+and which used @samp{mt} to denote the empty string. In C, it would
+have looked like something like:
+
+@example
+char const mt[] = "";
+@end example
+
+@noindent
+but of course the source code was written in Algol 68.
+
+I don't know where he got @samp{mt} from: it could have been his own
+invention, and I suppose it could have been a common pun around the
+Cambridge University computer lab at the time.
+@end quotation
+
+
+@node Balancing Parentheses
+@subsection Dealing with unbalanced parentheses
+@cindex balancing parentheses
+@cindex parentheses, balancing
+@cindex unbalanced parentheses, managing
+
+One of the pitfalls of portable shell programming is that @command{case}
+statements require unbalanced parentheses (@pxref{case, , Limitations of
+Shell Builtins}). With syntax highlighting
+editors, the presence of unbalanced @samp{)} can interfere with editors
+that perform syntax highlighting of macro contents based on finding the
+matching @samp{(}. Another concern is how much editing must be done
+when transferring code snippets between shell scripts and macro
+definitions. But most importantly, the presence of unbalanced
+parentheses can introduce expansion bugs.
+
+For an example, here is an underquoted attempt to use the macro
+@code{my_case}, which happens to expand to a portable @command{case}
+statement:
+
+@example
+AC_DEFUN([my_case],
+[case $file_name in
+ *.c) echo "C source code";;
+esac])
+AS_IF(:, my_case)
+@end example
+
+@noindent
+In the above example, the @code{AS_IF} call underquotes its arguments.
+As a result, the unbalanced @samp{)} generated by the premature
+expansion of @code{my_case} results in expanding @code{AS_IF} with a
+truncated parameter, and the expansion is syntactically invalid:
+
+@example
+if :; then
+ case $file_name in
+ *.c
+fi echo "C source code";;
+esac)
+@end example
+
+If nothing else, this should emphasize the importance of the quoting
+arguments to macro calls. On the other hand, there are several
+variations for defining @code{my_case} to be more robust, even when used
+without proper quoting, each with some benefits and some drawbacks.
+
+@itemize @w{}
+@item Creative literal shell comment
+@example
+AC_DEFUN([my_case],
+[case $file_name in #(
+ *.c) echo "C source code";;
+esac])
+@end example
+@noindent
+This version provides balanced parentheses to several editors, and can
+be copied and pasted into a terminal as is. Unfortunately, it is still
+unbalanced as an Autoconf argument, since @samp{#(} is an M4 comment
+that masks the normal properties of @samp{(}.
+
+@item Quadrigraph shell comment
+@example
+AC_DEFUN([my_case],
+[case $file_name in @@%:@@(
+ *.c) echo "C source code";;
+esac])
+@end example
+@noindent
+This version provides balanced parentheses to even more editors, and can
+be used as a balanced Autoconf argument. Unfortunately, it requires
+some editing before it can be copied and pasted into a terminal, and the
+use of the quadrigraph @samp{@@%:@@} for @samp{#} reduces readability.
+
+@item Quoting just the parenthesis
+@example
+AC_DEFUN([my_case],
+[case $file_name in
+ *.c[)] echo "C source code";;
+esac])
+@end example
+@noindent
+This version quotes the @samp{)}, so that it can be used as a balanced
+Autoconf argument. As written, this is not balanced to an editor, but
+it can be coupled with @samp{[#(]} to meet that need, too. However, it
+still requires some edits before it can be copied and pasted into a
+terminal.
+
+@item Double-quoting the entire statement
+@example
+AC_DEFUN([my_case],
+[[case $file_name in #(
+ *.c) echo "C source code";;
+esac]])
+@end example
+@noindent
+Since the entire macro is double-quoted, there is no problem with using
+this as an Autoconf argument; and since the double-quoting is over the
+entire statement, this code can be easily copied and pasted into a
+terminal. However, the double quoting prevents the expansion of any
+macros inside the case statement, which may cause its own set of
+problems.
+
+@item Using @code{AS_CASE}
+@example
+AC_DEFUN([my_case],
+[AS_CASE([$file_name],
+ [*.c], [echo "C source code"])])
+@end example
+@noindent
+This version avoids the balancing issue altogether, by relying on
+@code{AS_CASE} (@pxref{Common Shell Constructs}); it also allows for the
+expansion of @code{AC_REQUIRE} to occur prior to the entire case
+statement, rather than within a branch of the case statement that might
+not be taken. However, the abstraction comes with a penalty that it is
+no longer a quick copy, paste, and edit to get back to shell code.
+@end itemize
+
+
+@node Quotation Rule Of Thumb
+@subsection Quotation Rule Of Thumb
+
+To conclude, the quotation rule of thumb is:
+
+@center @emph{One pair of quotes per pair of parentheses.}
+
+Never over-quote, never under-quote, in particular in the definition of
+macros. In the few places where the macros need to use brackets
+(usually in C program text or regular expressions), properly quote
+@emph{the arguments}!
+
+It is common to read Autoconf programs with snippets like:
+
+@example
+AC_TRY_LINK(
+changequote(<<, >>)dnl
+<<#include <time.h>
+#ifndef tzname /* For SGI. */
+extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+#endif>>,
+changequote([, ])dnl
+[atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
+@end example
+
+@noindent
+which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
+double quoting, so you just need:
+
+@example
+AC_TRY_LINK(
+[#include <time.h>
+#ifndef tzname /* For SGI. */
+extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+#endif],
+ [atoi (*tzname);],
+ [ac_cv_var_tzname=yes],
+ [ac_cv_var_tzname=no])
+@end example
+
+@noindent
+The M4-fluent reader might note that these two examples are rigorously
+equivalent, since M4 swallows both the @samp{changequote(<<, >>)}
+and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
+quotes are not part of the arguments!
+
+Simplified, the example above is just doing this:
+
+@example
+changequote(<<, >>)dnl
+<<[]>>
+changequote([, ])dnl
+@end example
+
+@noindent
+instead of simply:
+
+@example
+[[]]
+@end example
+
+With macros that do not double quote their arguments (which is the
+rule), double-quote the (risky) literals:
+
+@example
+AC_LINK_IFELSE([AC_LANG_PROGRAM(
+[[#include <time.h>
+#ifndef tzname /* For SGI. */
+extern char *tzname[]; /* RS6000 and others reject char **tzname. */
+#endif]],
+ [atoi (*tzname);])],
+ [ac_cv_var_tzname=yes],
+ [ac_cv_var_tzname=no])
+@end example
+
+Please note that the macro @code{AC_TRY_LINK} is obsolete, so you really
+should be using @code{AC_LINK_IFELSE} instead.
+
+@xref{Quadrigraphs}, for what to do if you run into a hopeless case
+where quoting does not suffice.
+
+When you create a @command{configure} script using newly written macros,
+examine it carefully to check whether you need to add more quotes in
+your macros. If one or more words have disappeared in the M4
+output, you need more quotes. When in doubt, quote.
+
+However, it's also possible to put on too many layers of quotes. If
+this happens, the resulting @command{configure} script may contain
+unexpanded macros. The @command{autoconf} program checks for this problem
+by looking for the string @samp{AC_} in @file{configure}. However, this
+heuristic does not work in general: for example, it does not catch
+overquoting in @code{AC_DEFINE} descriptions.
+
+
+@c ---------------------------------------- Using autom4te
+
+@node Using autom4te
+@section Using @command{autom4te}
+
+The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
+to Autoconf per se, heavily rely on M4. All these different uses
+revealed common needs factored into a layer over M4:
+@command{autom4te}@footnote{
+@c
+Yet another great name from Lars J. Aas.
+@c
+}.
+
+@command{autom4te} is a preprocessor that is like @command{m4}.
+It supports M4 extensions designed for use in tools like Autoconf.
+
+@menu
+* autom4te Invocation:: A GNU M4 wrapper
+* Customizing autom4te:: Customizing the Autoconf package
+@end menu
+
+@node autom4te Invocation
+@subsection Invoking @command{autom4te}
+
+The command line arguments are modeled after M4's:
+
+@example
+autom4te @var{options} @var{files}
+@end example
+
+@noindent
+@evindex M4
+where the @var{files} are directly passed to @command{m4}. By default,
+GNU M4 is found during configuration, but the environment
+variable
+@env{M4} can be set to tell @command{autom4te} where to look. In addition
+to the regular expansion, it handles the replacement of the quadrigraphs
+(@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
+output. It supports an extended syntax for the @var{files}:
+
+@table @file
+@item @var{file}.m4f
+This file is an M4 frozen file. Note that @emph{all the previous files
+are ignored}. See the option @option{--melt} for the rationale.
+
+@item @var{file}?
+If found in the library path, the @var{file} is included for expansion,
+otherwise it is ignored instead of triggering a failure.
+@end table
+
+@sp 1
+
+Of course, it supports the Autoconf common subset of options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Report processing steps.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files and be even more verbose.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Also look for input files in @var{dir}. Multiple invocations
+accumulate.
+
+@item --output=@var{file}
+@itemx -o @var{file}
+Save output (script or trace) to @var{file}. The file @option{-} stands
+for the standard output.
+@end table
+
+@sp 1
+
+As an extension of @command{m4}, it includes the following options:
+
+@table @option
+@item --warnings=@var{category}
+@itemx -W @var{category}
+@evindex WARNINGS
+@c FIXME: Point to the M4sugar macros, not Autoconf's.
+Report the warnings related to @var{category} (which can actually be a
+comma separated list). @xref{Reporting Messages}, macro
+@code{AC_DIAGNOSE}, for a comprehensive list of categories. Special
+values include:
+
+@table @samp
+@item all
+report all the warnings
+
+@item none
+report none
+
+@item error
+treats warnings as errors
+
+@item no-@var{category}
+disable warnings falling into @var{category}
+@end table
+
+Warnings about @samp{syntax} are enabled by default, and the environment
+variable @env{WARNINGS}, a comma separated list of categories, is
+honored. @samp{autom4te -W @var{category}} actually
+behaves as if you had run:
+
+@example
+autom4te --warnings=syntax,$WARNINGS,@var{category}
+@end example
+
+@noindent
+For example, if you want to disable defaults and @env{WARNINGS}
+of @command{autom4te}, but enable the warnings about obsolete
+constructs, you would use @option{-W none,obsolete}.
+
+@cindex Back trace
+@cindex Macro invocation stack
+@command{autom4te} displays a back trace for errors, but not for
+warnings; if you want them, just pass @option{-W error}.
+
+@item --melt
+@itemx -M
+Do not use frozen files. Any argument @code{@var{file}.m4f} is
+replaced by @code{@var{file}.m4}. This helps tracing the macros which
+are executed only when the files are frozen, typically
+@code{m4_define}. For instance, running:
+
+@example
+autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
+@end example
+
+@noindent
+is roughly equivalent to running:
+
+@example
+m4 1.m4 2.m4 3.m4 4.m4 input.m4
+@end example
+
+@noindent
+while
+
+@example
+autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
+@end example
+
+@noindent
+is equivalent to:
+
+@example
+m4 --reload-state=4.m4f input.m4
+@end example
+
+@item --freeze
+@itemx -F
+Produce a frozen state file. @command{autom4te} freezing is stricter
+than M4's: it must produce no warnings, and no output other than empty
+lines (a line with white space is @emph{not} empty) and comments
+(starting with @samp{#}). Unlike @command{m4}'s similarly-named option,
+this option takes no argument:
+
+@example
+autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
+@end example
+
+@noindent
+corresponds to
+
+@example
+m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
+@end example
+
+@item --mode=@var{octal-mode}
+@itemx -m @var{octal-mode}
+Set the mode of the non-traces output to @var{octal-mode}; by default
+@samp{0666}.
+@end table
+
+@sp 1
+
+@cindex @file{autom4te.cache}
+As another additional feature over @command{m4}, @command{autom4te}
+caches its results. GNU M4 is able to produce a regular
+output and traces at the same time. Traces are heavily used in the
+GNU Build System: @command{autoheader} uses them to build
+@file{config.h.in}, @command{autoreconf} to determine what
+GNU Build System components are used, @command{automake} to
+``parse'' @file{configure.ac} etc. To avoid recomputation,
+traces are cached while performing regular expansion,
+and conversely. This cache is (actually, the caches are) stored in
+the directory @file{autom4te.cache}. @emph{It can safely be removed}
+at any moment (especially if for some reason @command{autom4te}
+considers it trashed).
+
+@table @option
+@item --cache=@var{directory}
+@itemx -C @var{directory}
+Specify the name of the directory where the result should be cached.
+Passing an empty value disables caching. Be sure to pass a relative
+file name, as for the time being, global caches are not supported.
+
+@item --no-cache
+Don't cache the results.
+
+@item --force
+@itemx -f
+If a cache is used, consider it obsolete (but update it anyway).
+@end table
+
+@sp 1
+
+Because traces are so important to the GNU Build System,
+@command{autom4te} provides high level tracing features as compared to
+M4, and helps exploiting the cache:
+
+@table @option
+@item --trace=@var{macro}[:@var{format}]
+@itemx -t @var{macro}[:@var{format}]
+Trace the invocations of @var{macro} according to the @var{format}.
+Multiple @option{--trace} arguments can be used to list several macros.
+Multiple @option{--trace} arguments for a single macro are not
+cumulative; instead, you should just make @var{format} as long as
+needed.
+
+The @var{format} is a regular string, with newlines if desired, and
+several special escape codes. It defaults to @samp{$f:$l:$n:$%}. It can
+use the following special escapes:
+
+@table @samp
+@item $$
+@c $$ restore font-lock
+The character @samp{$}.
+
+@item $f
+The file name from which @var{macro} is called.
+
+@item $l
+The line number from which @var{macro} is called.
+
+@item $d
+The depth of the @var{macro} call. This is an M4 technical detail that
+you probably don't want to know about.
+
+@item $n
+The name of the @var{macro}.
+
+@item $@var{num}
+The @var{num}th argument of the call to @var{macro}.
+
+@item $@@
+@itemx $@var{sep}@@
+@itemx $@{@var{separator}@}@@
+All the arguments passed to @var{macro}, separated by the character
+@var{sep} or the string @var{separator} (@samp{,} by default). Each
+argument is quoted, i.e., enclosed in a pair of square brackets.
+
+@item $*
+@itemx $@var{sep}*
+@itemx $@{@var{separator}@}*
+As above, but the arguments are not quoted.
+
+@item $%
+@itemx $@var{sep}%
+@itemx $@{@var{separator}@}%
+As above, but the arguments are not quoted, all new line characters in
+the arguments are smashed, and the default separator is @samp{:}.
+
+The escape @samp{$%} produces single-line trace outputs (unless you put
+newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
+not.
+@end table
+
+@xref{autoconf Invocation}, for examples of trace uses.
+
+@item --preselect=@var{macro}
+@itemx -p @var{macro}
+Cache the traces of @var{macro}, but do not enable traces. This is
+especially important to save CPU cycles in the future. For instance,
+when invoked, @command{autoconf} preselects all the macros that
+@command{autoheader}, @command{automake}, @command{autoreconf}, etc.,
+trace, so that running @command{m4} is not needed to trace them: the
+cache suffices. This results in a huge speed-up.
+@end table
+
+@sp 1
+
+@cindex Autom4te Library
+Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
+libraries}. They consists in a powerful yet extremely simple feature:
+sets of combined command line arguments:
+
+@table @option
+@item --language=@var{language}
+@itemx -l @var{language}
+Use the @var{language} Autom4te library. Current languages include:
+
+@table @code
+@item M4sugar
+create M4sugar output.
+
+@item M4sh
+create M4sh executable shell scripts.
+
+@item Autotest
+create Autotest executable test suites.
+
+@item Autoconf-without-aclocal-m4
+create Autoconf executable configure scripts without
+reading @file{aclocal.m4}.
+
+@item Autoconf
+create Autoconf executable configure scripts. This language inherits
+all the characteristics of @code{Autoconf-without-aclocal-m4} and
+additionally reads @file{aclocal.m4}.
+@end table
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend directory @var{dir} to the search path. This is used to include
+the language-specific files before any third-party macros.
+
+@end table
+
+@cindex @file{autom4te.cfg}
+As an example, if Autoconf is installed in its default location,
+@file{/usr/local}, the command @samp{autom4te -l m4sugar foo.m4} is
+strictly equivalent to the command:
+
+@example
+autom4te --prepend-include /usr/local/share/autoconf \
+ m4sugar/m4sugar.m4f --warnings syntax foo.m4
+@end example
+
+@noindent
+Recursive expansion applies here: the command @samp{autom4te -l m4sh foo.m4}
+is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
+foo.m4}, i.e.:
+
+@example
+autom4te --prepend-include /usr/local/share/autoconf \
+ m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4
+@end example
+
+@noindent
+The definition of the languages is stored in @file{autom4te.cfg}.
+
+@node Customizing autom4te
+@subsection Customizing @command{autom4te}
+
+One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
+as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
+as found in the directory from which @command{autom4te} is run). The
+order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
+then @file{./.autom4te.cfg}, and finally the command line arguments.
+
+In these text files, comments are introduced with @code{#}, and empty
+lines are ignored. Customization is performed on a per-language basis,
+wrapped in between a @samp{begin-language: "@var{language}"},
+@samp{end-language: "@var{language}"} pair.
+
+Customizing a language stands for appending options (@pxref{autom4te
+Invocation}) to the current definition of the language. Options, and
+more generally arguments, are introduced by @samp{args:
+@var{arguments}}. You may use the traditional shell syntax to quote the
+@var{arguments}.
+
+As an example, to disable Autoconf caches (@file{autom4te.cache})
+globally, include the following lines in @file{~/.autom4te.cfg}:
+
+@verbatim
+## ------------------ ##
+## User Preferences. ##
+## ------------------ ##
+
+begin-language: "Autoconf-without-aclocal-m4"
+args: --no-cache
+end-language: "Autoconf-without-aclocal-m4"
+@end verbatim
+
+
+@node Programming in M4sugar
+@section Programming in M4sugar
+
+@cindex M4sugar
+M4 by itself provides only a small, but sufficient, set of all-purpose
+macros. M4sugar introduces additional generic macros. Its name was
+coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
+M4sugar''.
+
+M4sugar reserves the macro namespace @samp{^_m4_} for internal use, and
+the macro namespace @samp{^m4_} for M4sugar macros. You should not
+define your own macros into these namespaces.
+
+@menu
+* Redefined M4 Macros:: M4 builtins changed in M4sugar
+* Diagnostic Macros:: Diagnostic messages from M4sugar
+* Diversion support:: Diversions in M4sugar
+* Conditional constructs:: Conditions in M4
+* Looping constructs:: Iteration in M4
+* Evaluation Macros:: More quotation and evaluation control
+* Text processing Macros:: String manipulation in M4
+* Number processing Macros:: Arithmetic computation in M4
+* Set manipulation Macros:: Set manipulation in M4
+* Forbidden Patterns:: Catching unexpanded macros
+@end menu
+
+@node Redefined M4 Macros
+@subsection Redefined M4 Macros
+
+@msindex{builtin}
+@msindex{changecom}
+@msindex{changequote}
+@msindex{debugfile}
+@msindex{debugmode}
+@msindex{decr}
+@msindex{define}
+@msindex{divnum}
+@msindex{errprint}
+@msindex{esyscmd}
+@msindex{eval}
+@msindex{format}
+@msindex{ifdef}
+@msindex{incr}
+@msindex{index}
+@msindex{indir}
+@msindex{len}
+@msindex{pushdef}
+@msindex{shift}
+@msindex{substr}
+@msindex{syscmd}
+@msindex{sysval}
+@msindex{traceoff}
+@msindex{traceon}
+@msindex{translit}
+With a few exceptions, all the M4 native macros are moved in the
+@samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
+@code{m4_define} etc.
+
+The list of macros unchanged from M4, except for their name, is:
+@itemize @minus
+@item m4_builtin
+@item m4_changecom
+@item m4_changequote
+@item m4_debugfile
+@item m4_debugmode
+@item m4_decr
+@item m4_define
+@item m4_divnum
+@item m4_errprint
+@item m4_esyscmd
+@item m4_eval
+@item m4_format
+@item m4_ifdef
+@item m4_incr
+@item m4_index
+@item m4_indir
+@item m4_len
+@item m4_pushdef
+@item m4_shift
+@item m4_substr
+@item m4_syscmd
+@item m4_sysval
+@item m4_traceoff
+@item m4_traceon
+@item m4_translit
+@end itemize
+
+Some M4 macros are redefined, and are slightly incompatible with their
+native equivalent.
+
+@defmac __file__
+@defmacx __line__
+@MSindex __file__
+@MSindex __line__
+All M4 macros starting with @samp{__} retain their original name: for
+example, no @code{m4__file__} is defined.
+@end defmac
+
+@defmac __oline__
+@MSindex __oline__
+This is not technically a macro, but a feature of Autom4te. The
+sequence @code{__oline__} can be used similarly to the other m4sugar
+location macros, but rather than expanding to the location of the input
+file, it is translated to the line number where it appears in the output
+file after all other M4 expansions.
+@end defmac
+
+@defmac dnl
+@MSindex dnl
+This macro kept its original name: no @code{m4_dnl} is defined.
+@end defmac
+
+@defmac m4_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
+@msindex{bpatsubst}
+This macro corresponds to @code{patsubst}. The name @code{m4_patsubst}
+is kept for future versions of M4sugar, once GNU M4 2.0 is
+released and supports extended regular expression syntax.
+@end defmac
+
+@defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
+@msindex{bregexp}
+This macro corresponds to @code{regexp}. The name @code{m4_regexp}
+is kept for future versions of M4sugar, once GNU M4 2.0 is
+released and supports extended regular expression syntax.
+@end defmac
+
+@defmac m4_copy (@var{source}, @var{dest})
+@defmacx m4_copy_force (@var{source}, @var{dest})
+@defmacx m4_rename (@var{source}, @var{dest})
+@defmacx m4_rename_force (@var{source}, @var{dest})
+@msindex{copy}
+@msindex{copy_force}
+@msindex{rename}
+@msindex{rename_force}
+These macros aren't directly builtins, but are closely related to
+@code{m4_pushdef} and @code{m4_defn}. @code{m4_copy} and
+@code{m4_rename} ensure that @var{dest} is undefined, while
+@code{m4_copy_force} and @code{m4_rename_force} overwrite any existing
+definition. All four macros then proceed to copy the entire pushdef
+stack of definitions of @var{source} over to @var{dest}. @code{m4_copy}
+and @code{m4_copy_force} preserve the source (including in the special
+case where @var{source} is undefined), while @code{m4_rename} and
+@code{m4_rename_force} undefine the original macro name (making it an
+error to rename an undefined @var{source}).
+
+Note that attempting to invoke a renamed macro might not work, since the
+macro may have a dependence on helper macros accessed via composition of
+@samp{$0} but that were not also renamed; likewise, other macros may
+have a hard-coded dependence on @var{source} and could break if
+@var{source} has been deleted. On the other hand, it is always safe to
+rename a macro to temporarily move it out of the way, then rename it
+back later to restore original semantics.
+@end defmac
+
+@defmac m4_defn (@var{macro}@dots{})
+@msindex{defn}
+This macro fails if @var{macro} is not defined, even when using older
+versions of M4 that did not warn. See @code{m4_undefine}.
+Unfortunately, in order to support these older versions of M4, there are
+some situations involving unbalanced quotes where concatenating multiple
+macros together will work in newer M4 but not in m4sugar; use
+quadrigraphs to work around this.
+@end defmac
+
+@defmac m4_divert (@var{diversion})
+@msindex{divert}
+M4sugar relies heavily on diversions, so rather than behaving as a
+primitive, @code{m4_divert} behaves like:
+@example
+m4_divert_pop()m4_divert_push([@var{diversion}])
+@end example
+@noindent
+@xref{Diversion support}, for more details about the use of the
+diversion stack. In particular, this implies that @var{diversion}
+should be a named diversion rather than a raw number. But be aware that
+it is seldom necessary to explicitly change the diversion stack, and
+that when done incorrectly, it can lead to syntactically invalid
+scripts.
+@end defmac
+
+@defmac m4_dumpdef (@var{name}@dots{})
+@defmacx m4_dumpdefs (@var{name}@dots{})
+@msindex{dumpdef}
+@msindex{dumpdefs}
+@code{m4_dumpdef} is like the M4 builtin, except that this version
+requires at least one argument, output always goes to standard error
+rather than the current debug file, no sorting is done on multiple
+arguments, and an error is issued if any
+@var{name} is undefined. @code{m4_dumpdefs} is a convenience macro that
+calls @code{m4_dumpdef} for all of the
+@code{m4_pushdef} stack of definitions, starting with the current, and
+silently does nothing if @var{name} is undefined.
+
+Unfortunately, due to a limitation in M4 1.4.x, any macro defined as a
+builtin is output as the empty string. This behavior is rectified by
+using M4 1.6 or newer. However, this behavior difference means that
+@code{m4_dumpdef} should only be used while developing m4sugar macros,
+and never in the final published form of a macro.
+@end defmac
+
+@defmac m4_esyscmd_s (@var{command})
+@msindex{esyscmd_s}
+Like @code{m4_esyscmd}, this macro expands to the result of running
+@var{command} in a shell. The difference is that any trailing newlines
+are removed, so that the output behaves more like shell command
+substitution.
+@end defmac
+
+@defmac m4_exit (@var{exit-status})
+@msindex{exit}
+This macro corresponds to @code{m4exit}.
+@end defmac
+
+@defmac m4_if (@var{comment})
+@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
+@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal-1}, @
+ @var{string-3}, @var{string-4}, @var{equal-2}, @dots{}, @ovar{not-equal})
+@msindex{if}
+This macro corresponds to @code{ifelse}. @var{string-1} and
+@var{string-2} are compared literally, so usually one of the two
+arguments is passed unquoted. @xref{Conditional constructs}, for more
+conditional idioms.
+@end defmac
+
+@defmac m4_include (@var{file})
+@defmacx m4_sinclude (@var{file})
+@msindex{include}
+@msindex{sinclude}
+Like the M4 builtins, but warn against multiple inclusions of @var{file}.
+@end defmac
+
+@defmac m4_mkstemp (@var{template})
+@defmacx m4_maketemp (@var{template})
+@msindex{maketemp}
+@msindex{mkstemp}
+Posix requires @code{maketemp} to replace the trailing @samp{X}
+characters in @var{template} with the process id, without regards to the
+existence of a file by that name, but this a security hole. When this
+was pointed out to the Posix folks, they agreed to invent a new macro
+@code{mkstemp} that always creates a uniquely named file, but not all
+versions of GNU M4 support the new macro. In M4sugar,
+@code{m4_maketemp} and @code{m4_mkstemp} are synonyms for each other,
+and both have the secure semantics regardless of which macro the
+underlying M4 provides.
+@end defmac
+
+@defmac m4_popdef (@var{macro}@dots{})
+@msindex{popdef}
+This macro fails if @var{macro} is not defined, even when using older
+versions of M4 that did not warn. See @code{m4_undefine}.
+@end defmac
+
+@defmac m4_undefine (@var{macro}@dots{})
+@msindex{undefine}
+This macro fails if @var{macro} is not defined, even when using older
+versions of M4 that did not warn. Use
+
+@example
+m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
+@end example
+
+@noindent
+if you are not sure whether @var{macro} is defined.
+@end defmac
+
+@defmac m4_undivert (@var{diversion}@dots{})
+@msindex{undivert}
+Unlike the M4 builtin, at least one @var{diversion} must be specified.
+Also, since the M4sugar diversion stack prefers named
+diversions, the use of @code{m4_undivert} to include files is risky.
+@xref{Diversion support}, for more details about the use of the
+diversion stack. But be aware that it is seldom necessary to explicitly
+change the diversion stack, and that when done incorrectly, it can lead
+to syntactically invalid scripts.
+@end defmac
+
+@defmac m4_wrap (@var{text})
+@defmacx m4_wrap_lifo (@var{text})
+@msindex{wrap}
+@msindex{wrap_lifo}
+These macros correspond to @code{m4wrap}. Posix requires arguments of
+multiple wrap calls to be reprocessed at EOF in the same order
+as the original calls (first-in, first-out). GNU M4 versions
+through 1.4.10, however, reprocess them in reverse order (last-in,
+first-out). Both orders are useful, therefore, you can rely on
+@code{m4_wrap} to provide FIFO semantics and @code{m4_wrap_lifo} for
+LIFO semantics, regardless of the underlying GNU M4 version.
+
+Unlike the GNU M4 builtin, these macros only recognize one
+argument, and avoid token pasting between consecutive invocations. On
+the other hand, nested calls to @code{m4_wrap} from within wrapped text
+work just as in the builtin.
+@end defmac
+
+
+@node Diagnostic Macros
+@subsection Diagnostic messages from M4sugar
+@cindex Messages, from @command{M4sugar}
+
+When macros statically diagnose abnormal situations, benign or fatal,
+they should report them using these macros. For issuing dynamic issues,
+i.e., when @command{configure} is run, see @ref{Printing Messages}.
+
+@defmac m4_assert (@var{expression}, @dvar{exit-status, 1})
+@msindex{assert}
+Assert that the arithmetic @var{expression} evaluates to non-zero.
+Otherwise, issue a fatal error, and exit @command{autom4te} with
+@var{exit-status}.
+@end defmac
+
+@defmac m4_errprintn (@var{message})
+@msindex{errprintn}
+Similar to the builtin @code{m4_errprint}, except that a newline is
+guaranteed after @var{message}.
+@end defmac
+
+@anchor{m4_fatal}
+@defmac m4_fatal (@var{message})
+@msindex{fatal}
+Report a severe error @var{message} prefixed with the current location,
+and have @command{autom4te} die.
+@end defmac
+
+@defmac m4_location
+@msindex{location}
+Useful as a prefix in a message line. Short for:
+@example
+__file__:__line__
+@end example
+@end defmac
+
+@anchor{m4_warn}
+@defmac m4_warn (@var{category}, @var{message})
+@msindex{warn}
+Report @var{message} as a warning (or as an error if requested by the
+user) if warnings of the @var{category} are turned on. If the message
+is emitted, it is prefixed with the current location, and followed by a
+call trace of all macros defined via @code{AC_DEFUN} used to get to the
+current expansion. You are encouraged to use standard categories, which
+currently include:
+
+@table @samp
+@item all
+messages that don't fall into one of the following categories. Use of an
+empty @var{category} is equivalent.
+
+@item cross
+related to cross compilation issues.
+
+@item obsolete
+use of an obsolete construct.
+
+@item syntax
+dubious syntactic constructs, incorrectly ordered macro calls.
+@end table
+@end defmac
+
+
+@node Diversion support
+@subsection Diversion support
+
+M4sugar makes heavy use of diversions under the hood, because it is
+often the case that
+text that must appear early in the output is not discovered until late
+in the input. Additionally, some of the topological sorting algorithms
+used in resolving macro dependencies use diversions. However, most
+macros should not need to change diversions directly, but rather rely on
+higher-level M4sugar macros to manage diversions transparently. If you
+change diversions improperly, you risk generating a syntactically
+invalid script, because an incorrect diversion will violate assumptions
+made by many macros about whether prerequisite text has been previously
+output. In short, if you manually change the diversion, you should not
+expect any macros provided by the Autoconf package to work until you
+have restored the diversion stack back to its original state.
+
+In the rare case that it is necessary to write a macro that explicitly
+outputs text to a different diversion, it is important to be aware of an
+M4 limitation regarding diversions: text only goes to a diversion if it
+is not part of argument collection. Therefore, any macro that changes
+the current diversion cannot be used as an unquoted argument to another
+macro, but must be expanded at the top level. The macro
+@code{m4_expand} will diagnose any attempt to change diversions, since
+it is generally useful only as an argument to another macro. The
+following example shows what happens when diversion manipulation is
+attempted within macro arguments:
+
+@example
+m4_do([normal text]
+m4_divert_push([KILL])unwanted[]m4_divert_pop([KILL])
+[m4_divert_push([KILL])discarded[]m4_divert_pop([KILL])])dnl
+@result{}normal text
+@result{}unwanted
+@end example
+
+@noindent
+Notice that the unquoted text @code{unwanted} is output, even though it
+was processed while the current diversion was @code{KILL}, because it
+was collected as part of the argument to @code{m4_do}. However, the
+text @code{discarded} disappeared as desired, because the diversion
+changes were single-quoted, and were not expanded until the top-level
+rescan of the output of @code{m4_do}.
+
+To make diversion management easier, M4sugar uses the concept of named
+diversions. Rather than using diversion numbers directly, it is nicer
+to associate a name with each diversion. The diversion number associated
+with a particular diversion name is an implementation detail, and a
+syntax warning is issued if a diversion number is used instead of a
+name. In general, you should not output text
+to a named diversion until after calling the appropriate initialization
+routine for your language (@code{m4_init}, @code{AS_INIT},
+@code{AT_INIT}, @dots{}), although there are some exceptions documented
+below.
+
+M4sugar defines two named diversions.
+@table @code
+@item KILL
+Text written to this diversion is discarded. This is the default
+diversion once M4sugar is initialized.
+@item GROW
+This diversion is used behind the scenes by topological sorting macros,
+such as @code{AC_REQUIRE}.
+@end table
+
+M4sh adds several more named diversions.
+@table @code
+@item BINSH
+This diversion is reserved for the @samp{#!} interpreter line.
+@item HEADER-REVISION
+This diversion holds text from @code{AC_REVISION}.
+@item HEADER-COMMENT
+This diversion holds comments about the purpose of a file.
+@item HEADER-COPYRIGHT
+This diversion is managed by @code{AC_COPYRIGHT}.
+@item M4SH-SANITIZE
+This diversion contains M4sh sanitization code, used to ensure M4sh is
+executing in a reasonable shell environment.
+@item M4SH-INIT
+This diversion contains M4sh initialization code, initializing variables
+that are required by other M4sh macros.
+@item BODY
+This diversion contains the body of the shell code, and is the default
+diversion once M4sh is initialized.
+@end table
+
+Autotest inherits diversions from M4sh, and changes the default
+diversion from @code{BODY} back to @code{KILL}. It also adds several
+more named diversions, with the following subset designed for developer
+use.
+@table @code
+@item PREPARE_TESTS
+This diversion contains initialization sequences which are executed
+after @file{atconfig} and @file{atlocal}, and after all command line
+arguments have been parsed, but prior to running any tests. It can be
+used to set up state that is required across all tests. This diversion
+will work even before @code{AT_INIT}.
+@end table
+
+Autoconf inherits diversions from M4sh, and adds the following named
+diversions which developers can utilize.
+@table @code
+@item DEFAULTS
+This diversion contains shell variable assignments to set defaults that
+must be in place before arguments are parsed. This diversion is placed
+early enough in @file{configure} that it is unsafe to expand any
+autoconf macros into this diversion.
+@item HELP_ENABLE
+If @code{AC_PRESERVE_HELP_ORDER} was used, then text placed in this
+diversion will be included as part of a quoted here-doc providing all of
+the @option{--help} output of @file{configure} related to options
+created by @code{AC_ARG_WITH} and @code{AC_ARG_ENABLE}.
+@item INIT_PREPARE
+This diversion occurs after all command line options have been parsed,
+but prior to the main body of the @file{configure} script. This
+diversion is the last chance to insert shell code such as variable
+assignments or shell function declarations that will used by the
+expansion of other macros.
+@end table
+
+For now, the remaining named diversions of Autoconf, Autoheader, and
+Autotest are not documented. In other words,
+intentionally outputting text into an undocumented diversion is subject
+to breakage in a future release of Autoconf.
+
+@defmac m4_cleardivert (@var{diversion}@dots{})
+@msindex{cleardivert}
+Permanently discard any text that has been diverted into
+@var{diversion}.
+@end defmac
+
+@defmac m4_divert_once (@var{diversion}, @ovar{content})
+@msindex{divert_once}
+Similar to @code{m4_divert_text}, except that @var{content} is only
+output to @var{diversion} if this is the first time that
+@code{m4_divert_once} has been called with its particular arguments.
+@end defmac
+
+@defmac m4_divert_pop (@ovar{diversion})
+@msindex{divert_pop}
+If provided, check that the current diversion is indeed @var{diversion}.
+Then change to the diversion located earlier on the stack, giving an
+error if an attempt is made to pop beyond the initial m4sugar diversion
+of @code{KILL}.
+@end defmac
+
+@defmac m4_divert_push (@var{diversion})
+@msindex{divert_push}
+Remember the former diversion on the diversion stack, and output
+subsequent text into @var{diversion}. M4sugar maintains a diversion
+stack, and issues an error if there is not a matching pop for every
+push.
+@end defmac
+
+@defmac m4_divert_text (@var{diversion}, @ovar{content})
+@msindex{divert_text}
+Output @var{content} and a newline into @var{diversion}, without
+affecting the current diversion. Shorthand for:
+@example
+m4_divert_push([@var{diversion}])@var{content}
+m4_divert_pop([@var{diversion}])dnl
+@end example
+
+One use of @code{m4_divert_text} is to develop two related macros, where
+macro @samp{MY_A} does the work, but adjusts what work is performed
+based on whether the optional macro @samp{MY_B} has also been expanded.
+Of course, it is possible to use @code{AC_BEFORE} within @code{MY_A} to
+require that @samp{MY_B} occurs first, if it occurs at all. But this
+imposes an ordering restriction on the user; it would be nicer if macros
+@samp{MY_A} and @samp{MY_B} can be invoked in either order. The trick
+is to let @samp{MY_B} leave a breadcrumb in an early diversion, which
+@samp{MY_A} can then use to determine whether @samp{MY_B} has been
+expanded.
+
+@example
+AC_DEFUN([MY_A],
+[# various actions
+if test -n "$b_was_used"; then
+ # extra action
+fi])
+AC_DEFUN([MY_B],
+[AC_REQUIRE([MY_A])dnl
+m4_divert_text([INIT_PREPARE], [b_was_used=true])])
+@end example
+
+@end defmac
+
+@defmac m4_init
+@msindex{init}
+Initialize the M4sugar environment, setting up the default named
+diversion to be @code{KILL}.
+@end defmac
+
+@node Conditional constructs
+@subsection Conditional constructs
+
+The following macros provide additional conditional constructs as
+convenience wrappers around @code{m4_if}.
+
+@defmac m4_bmatch (@var{string}, @var{regex-1}, @var{value-1}, @
+ @ovar{regex-2}, @ovar{value-2}, @dots{}, @ovar{default})
+@msindex{bmatch}
+The string @var{string} is repeatedly compared against a series of
+@var{regex} arguments; if a match is found, the expansion is the
+corresponding @var{value}, otherwise, the macro moves on to the next
+@var{regex}. If no @var{regex} match, then the result is the optional
+@var{default}, or nothing.
+@end defmac
+
+@defmac m4_bpatsubsts (@var{string}, @var{regex-1}, @var{subst-1}, @
+ @ovar{regex-2}, @ovar{subst-2}, @dots{})
+@msindex{bpatsubsts}
+The string @var{string} is altered by @var{regex-1} and @var{subst-1},
+as if by:
+@example
+m4_bpatsubst([[@var{string}]], [@var{regex}], [@var{subst}])
+@end example
+
+@noindent
+The result of the substitution is then passed through the next set of
+@var{regex} and @var{subst}, and so forth. An empty @var{subst} implies
+deletion of any matched portions in the current string. Note that this
+macro over-quotes @var{string}; this behavior is intentional, so that
+the result of each step of the recursion remains as a quoted string.
+However, it means that anchors (@samp{^} and @samp{$} in the @var{regex}
+will line up with the extra quotations, and not the characters of the
+original string. The overquoting is removed after the final
+substitution.
+@end defmac
+
+@defmac m4_case (@var{string}, @var{value-1}, @var{if-value-1}, @
+ @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
+@msindex{case}
+Test @var{string} against multiple @var{value} possibilities, resulting
+in the first @var{if-value} for a match, or in the optional
+@var{default}. This is shorthand for:
+@example
+m4_if([@var{string}], [@var{value-1}], [@var{if-value-1}],
+ [@var{string}], [@var{value-2}], [@var{if-value-2}], @dots{},
+ [@var{default}])
+@end example
+@end defmac
+
+@defmac m4_cond (@var{test-1}, @var{value-1}, @var{if-value-1}, @
+ @ovar{test-2}, @ovar{value-2}, @ovar{if-value-2}, @dots{}, @ovar{default})
+@msindex{cond}
+This macro was introduced in Autoconf 2.62. Similar to @code{m4_if},
+except that each @var{test} is expanded only when it is encountered.
+This is useful for short-circuiting expensive tests; while @code{m4_if}
+requires all its strings to be expanded up front before doing
+comparisons, @code{m4_cond} only expands a @var{test} when all earlier
+tests have failed.
+
+For an example, these two sequences give the same result, but in the
+case where @samp{$1} does not contain a backslash, the @code{m4_cond}
+version only expands @code{m4_index} once, instead of five times, for
+faster computation if this is a common case for @samp{$1}. Notice that
+every third argument is unquoted for @code{m4_if}, and quoted for
+@code{m4_cond}:
+
+@example
+m4_if(m4_index([$1], [\]), [-1], [$2],
+ m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
+ m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
+ m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
+ m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
+ [$2])
+m4_cond([m4_index([$1], [\])], [-1], [$2],
+ [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
+ [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
+ [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
+ [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
+ [$2])
+@end example
+@end defmac
+
+@defmac m4_default (@var{expr-1}, @var{expr-2})
+@defmacx m4_default_quoted (@var{expr-1}, @var{expr-2})
+@defmacx m4_default_nblank (@var{expr-1}, @ovar{expr-2})
+@defmacx m4_default_nblank_quoted (@var{expr-1}, @ovar{expr-2})
+@msindex{default}
+@msindex{default_quoted}
+@msindex{default_nblank}
+@msindex{default_nblank_quoted}
+If @var{expr-1} contains text, use it. Otherwise, select @var{expr-2}.
+@code{m4_default} expands the result, while @code{m4_default_quoted}
+does not. Useful for providing a fixed default if the expression that
+results in @var{expr-1} would otherwise be empty. The difference
+between @code{m4_default} and @code{m4_default_nblank} is whether an
+argument consisting of just blanks (space, tab, newline) is
+significant. When using the expanding versions, note that an argument
+may contain text but still expand to an empty string.
+
+@example
+m4_define([active], [ACTIVE])dnl
+m4_define([empty], [])dnl
+m4_define([demo1], [m4_default([$1], [$2])])dnl
+m4_define([demo2], [m4_default_quoted([$1], [$2])])dnl
+m4_define([demo3], [m4_default_nblank([$1], [$2])])dnl
+m4_define([demo4], [m4_default_nblank_quoted([$1], [$2])])dnl
+demo1([active], [default])
+@result{}ACTIVE
+demo1([], [active])
+@result{}ACTIVE
+demo1([empty], [text])
+@result{}
+-demo1([ ], [active])-
+@result{}- -
+demo2([active], [default])
+@result{}active
+demo2([], [active])
+@result{}active
+demo2([empty], [text])
+@result{}empty
+-demo2([ ], [active])-
+@result{}- -
+demo3([active], [default])
+@result{}ACTIVE
+demo3([], [active])
+@result{}ACTIVE
+demo3([empty], [text])
+@result{}
+-demo3([ ], [active])-
+@result{}-ACTIVE-
+demo4([active], [default])
+@result{}active
+demo4([], [active])
+@result{}active
+demo4([empty], [text])
+@result{}empty
+-demo4([ ], [active])-
+@result{}-active-
+@end example
+@end defmac
+
+@defmac m4_define_default (@var{macro}, @ovar{default-definition})
+@msindex{define_default}
+If @var{macro} does not already have a definition, then define it to
+@var{default-definition}.
+@end defmac
+
+@defmac m4_ifblank (@var{cond}, @ovar{if-blank}, @ovar{if-text})
+@defmacx m4_ifnblank (@var{cond}, @ovar{if-text}, @ovar{if-blank})
+@msindex{ifblank}
+@msindex{ifnblank}
+If @var{cond} is empty or consists only of blanks (space, tab, newline),
+then expand @var{if-blank}; otherwise, expand @var{if-text}. Two
+variants exist, in order to make it easier to select the correct logical
+sense when using only two parameters. Note that this is more efficient
+than the equivalent behavior of:
+@example
+m4_ifval(m4_normalize([@var{cond}]), @var{if-text}, @var{if-blank})
+@end example
+@end defmac
+
+@defmac m4_ifndef (@var{macro}, @var{if-not-defined}, @ovar{if-defined})
+@msindex{ifndef}
+This is shorthand for:
+@example
+m4_ifdef([@var{macro}], [@var{if-defined}], [@var{if-not-defined}])
+@end example
+@end defmac
+
+@defmac m4_ifset (@var{macro}, @ovar{if-true}, @ovar{if-false})
+@msindex{ifset}
+If @var{macro} is undefined, or is defined as the empty string, expand
+to @var{if-false}. Otherwise, expands to @var{if-true}. Similar to:
+@example
+m4_ifval(m4_defn([@var{macro}]), [@var{if-true}], [@var{if-false}])
+@end example
+@noindent
+except that it is not an error if @var{macro} is undefined.
+@end defmac
+
+@defmac m4_ifval (@var{cond}, @ovar{if-true}, @ovar{if-false})
+@msindex{ifval}
+Expands to @var{if-true} if @var{cond} is not empty, otherwise to
+@var{if-false}. This is shorthand for:
+@example
+m4_if([@var{cond}], [], [@var{if-false}], [@var{if-true}])
+@end example
+@end defmac
+
+@defmac m4_ifvaln (@var{cond}, @ovar{if-true}, @ovar{if-false})
+@msindex{ifvaln}
+Similar to @code{m4_ifval}, except guarantee that a newline is present
+after any non-empty expansion. Often followed by @code{dnl}.
+@end defmac
+
+@defmac m4_n (@var{text})
+@msindex{n}
+Expand to @var{text}, and add a newline if @var{text} is not empty.
+Often followed by @code{dnl}.
+@end defmac
+
+
+@node Looping constructs
+@subsection Looping constructs
+
+The following macros are useful in implementing recursive algorithms in
+M4, including loop operations. An M4 list is formed by quoting a list
+of quoted elements; generally the lists are comma-separated, although
+@code{m4_foreach_w} is whitespace-separated. For example, the list
+@samp{[[a], [b,c]]} contains two elements: @samp{[a]} and @samp{[b,c]}.
+It is common to see lists with unquoted elements when those elements are
+not likely to be macro names, as in @samp{[fputc_unlocked,
+fgetc_unlocked]}.
+
+Although not generally recommended, it is possible for quoted lists to
+have side effects; all side effects are expanded only once, and prior to
+visiting any list element. On the other hand, the fact that unquoted
+macros are expanded exactly once means that macros without side effects
+can be used to generate lists. For example,
+
+@example
+m4_foreach([i], [[1], [2], [3]m4_errprintn([hi])], [i])
+@error{}hi
+@result{}123
+m4_define([list], [[1], [2], [3]])
+@result{}
+m4_foreach([i], [list], [i])
+@result{}123
+@end example
+
+@defmac m4_argn (@var{n}, @ovar{arg}@dots{})
+@msindex{argn}
+Extracts argument @var{n} (larger than 0) from the remaining arguments.
+If there are too few arguments, the empty string is used. For any
+@var{n} besides 1, this is more efficient than the similar
+@samp{m4_car(m4_shiftn([@var{n}], [], [@var{arg}@dots{}]))}.
+@end defmac
+
+@defmac m4_car (@var{arg}@dots{})
+@msindex{car}
+Expands to the quoted first @var{arg}. Can be used with @code{m4_cdr}
+to recursively iterate
+through a list. Generally, when using quoted lists of quoted elements,
+@code{m4_car} should be called without any extra quotes.
+@end defmac
+
+@defmac m4_cdr (@var{arg}@dots{})
+@msindex{cdr}
+Expands to a quoted list of all but the first @var{arg}, or the empty
+string if there was only one argument. Generally, when using quoted
+lists of quoted elements, @code{m4_cdr} should be called without any
+extra quotes.
+
+For example, this is a simple implementation of @code{m4_map}; note how
+each iteration checks for the end of recursion, then merely applies the
+first argument to the first element of the list, then repeats with the
+rest of the list. (The actual implementation in M4sugar is a bit more
+involved, to gain some speed and share code with @code{m4_map_sep}, and
+also to avoid expanding side effects in @samp{$2} twice).
+@example
+m4_define([m4_map], [m4_ifval([$2],
+ [m4_apply([$1], m4_car($2))[]$0([$1], m4_cdr($2))])])dnl
+m4_map([ m4_eval], [[[1]], [[1+1]], [[10],[16]]])
+@result{} 1 2 a
+@end example
+@end defmac
+
+@defmac m4_for (@var{var}, @var{first}, @var{last}, @ovar{step}, @
+ @var{expression})
+@msindex{for}
+Loop over the numeric values between @var{first} and @var{last}
+including bounds by increments of @var{step}. For each iteration,
+expand @var{expression} with the numeric value assigned to @var{var}.
+If @var{step} is omitted, it defaults to @samp{1} or @samp{-1} depending
+on the order of the limits. If given, @var{step} has to match this
+order. The number of iterations is determined independently from
+definition of @var{var}; iteration cannot be short-circuited or
+lengthened by modifying @var{var} from within @var{expression}.
+@end defmac
+
+@defmac m4_foreach (@var{var}, @var{list}, @var{expression})
+@msindex{foreach}
+Loop over the comma-separated M4 list @var{list}, assigning each value
+to @var{var}, and expand @var{expression}. The following example
+outputs two lines:
+
+@example
+m4_foreach([myvar], [[foo], [bar, baz]],
+ [echo myvar
+])dnl
+@result{}echo foo
+@result{}echo bar, baz
+@end example
+
+Note that for some forms of @var{expression}, it may be faster to use
+@code{m4_map_args}.
+@end defmac
+
+@anchor{m4_foreach_w}
+@defmac m4_foreach_w (@var{var}, @var{list}, @var{expression})
+@msindex{foreach_w}
+Loop over the white-space-separated list @var{list}, assigning each value
+to @var{var}, and expand @var{expression}. If @var{var} is only
+referenced once in @var{expression}, it is more efficient to use
+@code{m4_map_args_w}.
+
+The deprecated macro @code{AC_FOREACH} is an alias of
+@code{m4_foreach_w}.
+@end defmac
+
+@defmac m4_map (@var{macro}, @var{list})
+@defmacx m4_mapall (@var{macro}, @var{list})
+@defmacx m4_map_sep (@var{macro}, @var{separator}, @var{list})
+@defmacx m4_mapall_sep (@var{macro}, @var{separator}, @var{list})
+@msindex{map}
+@msindex{mapall}
+@msindex{map_sep}
+@msindex{mapall_sep}
+Loop over the comma separated quoted list of argument descriptions in
+@var{list}, and invoke @var{macro} with the arguments. An argument
+description is in turn a comma-separated quoted list of quoted elements,
+suitable for @code{m4_apply}. The macros @code{m4_map} and
+@code{m4_map_sep} ignore empty argument descriptions, while
+@code{m4_mapall} and @code{m4_mapall_sep} invoke @var{macro} with no
+arguments. The macros @code{m4_map_sep} and @code{m4_mapall_sep}
+additionally expand @var{separator} between invocations of @var{macro}.
+
+Note that @var{separator} is expanded, unlike in @code{m4_join}. When
+separating output with commas, this means that the map result can be
+used as a series of arguments, by using a single-quoted comma as
+@var{separator}, or as a single string, by using a double-quoted comma.
+
+@example
+m4_map([m4_count], [])
+@result{}
+m4_map([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+@result{} 1 2
+m4_mapall([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+@result{} 0 1 2
+m4_map_sep([m4_eval], [,], [[[1+2]],
+ [[10], [16]]])
+@result{}3,a
+m4_map_sep([m4_echo], [,], [[[a]], [[b]]])
+@result{}a,b
+m4_count(m4_map_sep([m4_echo], [,], [[[a]], [[b]]]))
+@result{}2
+m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]])
+@result{}a,b
+m4_count(m4_map_sep([m4_echo], [[,]], [[[a]], [[b]]]))
+@result{}1
+@end example
+@end defmac
+
+@defmac m4_map_args (@var{macro}, @var{arg}@dots{})
+@msindex{map_args}
+Repeatedly invoke @var{macro} with each successive @var{arg} as its only
+argument. In the following example, three solutions are presented with
+the same expansion; the solution using @code{m4_map_args} is the most
+efficient.
+@example
+m4_define([active], [ACTIVE])dnl
+m4_foreach([var], [[plain], [active]], [ m4_echo(m4_defn([var]))])
+@result{} plain active
+m4_map([ m4_echo], [[[plain]], [[active]]])
+@result{} plain active
+m4_map_args([ m4_echo], [plain], [active])
+@result{} plain active
+@end example
+
+In cases where it is useful to operate on additional parameters besides
+the list elements, the macro @code{m4_curry} can be used in @var{macro}
+to supply the argument currying necessary to generate the desired
+argument list. In the following example, @code{list_add_n} is more
+efficient than @code{list_add_x}. On the other hand, using
+@code{m4_map_args_sep} can be even more efficient.
+
+@example
+m4_define([list], [[1], [2], [3]])dnl
+m4_define([add], [m4_eval(([$1]) + ([$2]))])dnl
+dnl list_add_n(N, ARG...)
+dnl Output a list consisting of each ARG added to N
+m4_define([list_add_n],
+[m4_shift(m4_map_args([,m4_curry([add], [$1])], m4_shift($@@)))])dnl
+list_add_n([1], list)
+@result{}2,3,4
+list_add_n([2], list)
+@result{}3,4,5
+m4_define([list_add_x],
+[m4_shift(m4_foreach([var], m4_dquote(m4_shift($@@)),
+ [,add([$1],m4_defn([var]))]))])dnl
+list_add_x([1], list)
+@result{}2,3,4
+@end example
+@end defmac
+
+@defmac m4_map_args_pair (@var{macro}, @dvar{macro-end, macro}, @
+ @var{arg}@dots{})
+@msindex{map_args_pair}
+For every pair of arguments @var{arg}, invoke @var{macro} with two
+arguments. If there is an odd number of arguments, invoke
+@var{macro-end}, which defaults to @var{macro}, with the remaining
+argument.
+
+@example
+m4_map_args_pair([, m4_reverse], [], [1], [2], [3])
+@result{}, 2, 1, 3
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3])
+@result{}, 2, 1, [3]
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3], [4])
+@result{}, 2, 1, 4, 3
+@end example
+@end defmac
+
+@defmac m4_map_args_sep (@ovar{pre}, @ovar{post}, @ovar{sep}, @var{arg}@dots{})
+@msindex{map_args_sep}
+Expand the sequence @code{@var{pre}[@var{arg}]@var{post}} for each
+argument, additionally expanding @var{sep} between arguments. One
+common use of this macro is constructing a macro call, where the opening
+and closing parentheses are split between @var{pre} and @var{post}; in
+particular, @code{m4_map_args([@var{macro}], [@var{arg}])} is equivalent
+to @code{m4_map_args_sep([@var{macro}(], [)], [], [@var{arg}])}. This
+macro provides the most efficient means for iterating over an arbitrary
+list of arguments, particularly when repeatedly constructing a macro
+call with more arguments than @var{arg}.
+@end defmac
+
+@defmac m4_map_args_w (@var{string}, @ovar{pre}, @ovar{post}, @ovar{sep})
+@msindex{map_args_w}
+Expand the sequence @code{@var{pre}[word]@var{post}} for each word in
+the whitespace-separated @var{string}, additionally expanding @var{sep}
+between words. This macro provides the most efficient means for
+iterating over a whitespace-separated string. In particular,
+@code{m4_map_args_w([@var{string}], [@var{action}(], [)])} is more
+efficient than @code{m4_foreach_w([var], [@var{string}],
+[@var{action}(m4_defn([var]))])}.
+@end defmac
+
+@defmac m4_shiftn (@var{count}, @dots{})
+@defmacx m4_shift2 (@dots{})
+@defmacx m4_shift3 (@dots{})
+@msindex{shift2}
+@msindex{shift3}
+@msindex{shiftn}
+@code{m4_shiftn} performs @var{count} iterations of @code{m4_shift},
+along with validation that enough arguments were passed in to match the
+shift count, and that the count is positive. @code{m4_shift2} and
+@code{m4_shift3} are specializations
+of @code{m4_shiftn}, introduced in Autoconf 2.62, and are more efficient
+for two and three shifts, respectively.
+@end defmac
+
+@defmac m4_stack_foreach (@var{macro}, @var{action})
+@defmacx m4_stack_foreach_lifo (@var{macro}, @var{action})
+@msindex{stack_foreach}
+@msindex{stack_foreach_lifo}
+For each of the @code{m4_pushdef} definitions of @var{macro}, expand
+@var{action} with the single argument of a definition of @var{macro}.
+@code{m4_stack_foreach} starts with the oldest definition, while
+@code{m4_stack_foreach_lifo} starts with the current definition.
+@var{action} should not push or pop definitions of @var{macro}, nor is
+there any guarantee that the current definition of @var{macro} matches
+the argument that was passed to @var{action}. The macro @code{m4_curry}
+can be used if @var{action} needs more than one argument, although in
+that case it is more efficient to use @var{m4_stack_foreach_sep}.
+
+Due to technical limitations, there are a few low-level m4sugar
+functions, such as @code{m4_pushdef}, that cannot be used as the
+@var{macro} argument.
+
+@example
+m4_pushdef([a], [1])m4_pushdef([a], [2])dnl
+m4_stack_foreach([a], [ m4_incr])
+@result{} 2 3
+m4_stack_foreach_lifo([a], [ m4_curry([m4_substr], [abcd])])
+@result{} cd bcd
+@end example
+@end defmac
+
+@defmac m4_stack_foreach_sep (@var{macro}, @ovar{pre}, @ovar{post}, @ovar{sep})
+@defmacx m4_stack_foreach_sep_lifo (@var{macro}, @ovar{pre}, @ovar{post}, @
+ @ovar{sep})
+@msindex{stack_foreach_sep}
+@msindex{stack_foreach_sep_lifo}
+Expand the sequence @code{@var{pre}[definition]@var{post}} for each
+@code{m4_pushdef} definition of @var{macro}, additionally expanding
+@var{sep} between definitions. @code{m4_stack_foreach_sep} visits the
+oldest definition first, while @code{m4_stack_foreach_sep_lifo} visits
+the current definition first. This macro provides the most efficient
+means for iterating over a pushdef stack. In particular,
+@code{m4_stack_foreach([@var{macro}], [@var{action}])} is short for
+@code{m4_stack_foreach_sep([@var{macro}], [@var{action}(], [)])}.
+@end defmac
+
+@node Evaluation Macros
+@subsection Evaluation Macros
+
+The following macros give some control over the order of the evaluation
+by adding or removing levels of quotes.
+
+@defmac m4_apply (@var{macro}, @var{list})
+@msindex{apply}
+Apply the elements of the quoted, comma-separated @var{list} as the
+arguments to @var{macro}. If @var{list} is empty, invoke @var{macro}
+without arguments. Note the difference between @code{m4_indir}, which
+expects its first argument to be a macro name but can use names that are
+otherwise invalid, and @code{m4_apply}, where @var{macro} can contain
+other text, but must end in a valid macro name.
+@example
+m4_apply([m4_count], [])
+@result{}0
+m4_apply([m4_count], [[]])
+@result{}1
+m4_apply([m4_count], [[1], [2]])
+@result{}2
+m4_apply([m4_join], [[|], [1], [2]])
+@result{}1|2
+@end example
+@end defmac
+
+@defmac m4_count (@var{arg}, @dots{})
+@msindex{count}
+This macro returns the decimal count of the number of arguments it was
+passed.
+@end defmac
+
+@defmac m4_curry (@var{macro}, @var{arg}@dots{})
+@msindex{curry}
+This macro performs argument currying. The expansion of this macro is
+another macro name that expects exactly one argument; that argument is
+then appended to the @var{arg} list, and then @var{macro} is expanded
+with the resulting argument list.
+
+@example
+m4_curry([m4_curry], [m4_reverse], [1])([2])([3])
+@result{}3, 2, 1
+@end example
+
+Unfortunately, due to a limitation in M4 1.4.x, it is not possible to
+pass the definition of a builtin macro as the argument to the output of
+@code{m4_curry}; the empty string is used instead of the builtin token.
+This behavior is rectified by using M4 1.6 or newer.
+@end defmac
+
+@defmac m4_do (@var{arg}, @dots{})
+@msindex{do}
+This macro loops over its arguments and expands each @var{arg} in
+sequence. Its main use is for readability; it allows the use of
+indentation and fewer @code{dnl} to result in the same expansion. This
+macro guarantees that no expansion will be concatenated with subsequent
+text; to achieve full concatenation, use @code{m4_unquote(m4_join([],
+@var{arg@dots{}}))}.
+
+@example
+m4_define([ab],[1])m4_define([bc],[2])m4_define([abc],[3])dnl
+m4_do([a],[b])c
+@result{}abc
+m4_unquote(m4_join([],[a],[b]))c
+@result{}3
+m4_define([a],[A])m4_define([b],[B])m4_define([c],[C])dnl
+m4_define([AB],[4])m4_define([BC],[5])m4_define([ABC],[6])dnl
+m4_do([a],[b])c
+@result{}ABC
+m4_unquote(m4_join([],[a],[b]))c
+@result{}3
+@end example
+@end defmac
+
+@defmac m4_dquote (@var{arg}, @dots{})
+@msindex{dquote}
+Return the arguments as a quoted list of quoted arguments.
+Conveniently, if there is just one @var{arg}, this effectively adds a
+level of quoting.
+@end defmac
+
+@defmac m4_dquote_elt (@var{arg}, @dots{})
+@msindex{dquote_elt}
+Return the arguments as a series of double-quoted arguments. Whereas
+@code{m4_dquote} returns a single argument, @code{m4_dquote_elt} returns
+as many arguments as it was passed.
+@end defmac
+
+@defmac m4_echo (@var{arg}, @dots{})
+@msindex{echo}
+Return the arguments, with the same level of quoting. Other than
+discarding whitespace after unquoted commas, this macro is a no-op.
+@end defmac
+
+@defmac m4_expand (@var{arg})
+@msindex{expand}
+Return the expansion of @var{arg} as a quoted string. Whereas
+@code{m4_quote} is designed to collect expanded text into a single
+argument, @code{m4_expand} is designed to perform one level of expansion
+on quoted text. One distinction is in the treatment of whitespace
+following a comma in the original @var{arg}. Any time multiple
+arguments are collected into one with @code{m4_quote}, the M4 argument
+collection rules discard the whitespace. However, with @code{m4_expand},
+whitespace is preserved, even after the expansion of macros contained in
+@var{arg}. Additionally, @code{m4_expand} is able to expand text that
+would involve an unterminated comment, whereas expanding that same text
+as the argument to @code{m4_quote} runs into difficulty in finding the
+end of the argument. Since manipulating diversions during argument
+collection is inherently unsafe, @code{m4_expand} issues an error if
+@var{arg} attempts to change the current diversion (@pxref{Diversion
+support}).
+
+@example
+m4_define([active], [ACT, IVE])dnl
+m4_define([active2], [[ACT, IVE]])dnl
+m4_quote(active, active)
+@result{}ACT,IVE,ACT,IVE
+m4_expand([active, active])
+@result{}ACT, IVE, ACT, IVE
+m4_quote(active2, active2)
+@result{}ACT, IVE,ACT, IVE
+m4_expand([active2, active2])
+@result{}ACT, IVE, ACT, IVE
+m4_expand([# m4_echo])
+@result{}# m4_echo
+m4_quote(# m4_echo)
+)
+@result{}# m4_echo)
+@result{}
+@end example
+
+Note that @code{m4_expand} cannot handle an @var{arg} that expands to
+literal unbalanced quotes, but that quadrigraphs can be used when
+unbalanced output is necessary. Likewise, unbalanced parentheses should
+be supplied with double quoting or a quadrigraph.
+
+@example
+m4_define([pattern], [[!@@<:@@]])dnl
+m4_define([bar], [BAR])dnl
+m4_expand([case $foo in
+ m4_defn([pattern])@@:@}@@ bar ;;
+ *[)] blah ;;
+esac])
+@result{}case $foo in
+@result{} [![]) BAR ;;
+@result{} *) blah ;;
+@result{}esac
+@end example
+@end defmac
+
+@defmac m4_ignore (@dots{})
+@msindex{ignore}
+This macro was introduced in Autoconf 2.62. Expands to nothing,
+ignoring all of its arguments. By itself, this isn't very useful.
+However, it can be used to conditionally ignore an arbitrary number of
+arguments, by deciding which macro name to apply to a list of arguments.
+@example
+dnl foo outputs a message only if [debug] is defined.
+m4_define([foo],
+[m4_ifdef([debug],[AC_MSG_NOTICE],[m4_ignore])([debug message])])
+@end example
+
+Note that for earlier versions of Autoconf, the macro @code{__gnu__} can
+serve the same purpose, although it is less readable.
+@end defmac
+
+@defmac m4_make_list (@var{arg}, @dots{})
+@msindex{make_list}
+This macro exists to aid debugging of M4sugar algorithms. Its net
+effect is similar to @code{m4_dquote}---it produces a quoted list of
+quoted arguments, for each @var{arg}. The difference is that this
+version uses a comma-newline separator instead of just comma, to improve
+readability of the list; with the result that it is less efficient than
+@code{m4_dquote}.
+@example
+m4_define([zero],[0])m4_define([one],[1])m4_define([two],[2])dnl
+m4_dquote(zero, [one], [[two]])
+@result{}[0],[one],[[two]]
+m4_make_list(zero, [one], [[two]])
+@result{}[0],
+@result{}[one],
+@result{}[[two]]
+m4_foreach([number], m4_dquote(zero, [one], [[two]]), [ number])
+@result{} 0 1 two
+m4_foreach([number], m4_make_list(zero, [one], [[two]]), [ number])
+@result{} 0 1 two
+@end example
+@end defmac
+
+@c m4_noquote is too dangerous to document - it invokes macros that
+@c probably rely on @samp{[]} nested quoting for proper operation. The
+@c user should generally prefer m4_unquote instead.
+
+@defmac m4_quote (@var{arg}, @dots{})
+@msindex{quote}
+Return the arguments as a single entity, i.e., wrap them into a pair of
+quotes. This effectively collapses multiple arguments into one,
+although it loses whitespace after unquoted commas in the process.
+@end defmac
+
+@defmac m4_reverse (@var{arg}, @dots{})
+@msindex{reverse}
+Outputs each argument with the same level of quoting, but in reverse
+order, and with space following each comma for readability.
+
+@example
+m4_define([active], [ACT,IVE])
+@result{}
+m4_reverse(active, [active])
+@result{}active, IVE, ACT
+@end example
+@end defmac
+
+@defmac m4_unquote (@var{arg}, @dots{})
+@msindex{unquote}
+This macro was introduced in Autoconf 2.62. Expand each argument,
+separated by commas. For a single @var{arg}, this effectively removes a
+layer of quoting, and @code{m4_unquote([@var{arg}])} is more efficient
+than the equivalent @code{m4_do([@var{arg}])}. For multiple arguments,
+this results in an unquoted list of expansions. This is commonly used
+with @code{m4_split}, in order to convert a single quoted list into a
+series of quoted elements.
+@end defmac
+
+The following example aims at emphasizing the difference between several
+scenarios: not using these macros, using @code{m4_defn}, using
+@code{m4_quote}, using @code{m4_dquote}, and using @code{m4_expand}.
+
+@example
+$ @kbd{cat example.m4}
+dnl Overquote, so that quotes are visible.
+m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
+m4_define([a], [A])
+m4_define([mkargs], [1, 2[,] 3])
+m4_define([arg1], [[$1]])
+m4_divert([0])dnl
+show(a, b)
+show([a, b])
+show(m4_quote(a, b))
+show(m4_dquote(a, b))
+show(m4_expand([a, b]))
+
+arg1(mkargs)
+arg1([mkargs])
+arg1(m4_defn([mkargs]))
+arg1(m4_quote(mkargs))
+arg1(m4_dquote(mkargs))
+arg1(m4_expand([mkargs]))
+$ @kbd{autom4te -l m4sugar example.m4}
+$1 = A, $@@ = [A],[b]
+$1 = a, b, $@@ = [a, b]
+$1 = A,b, $@@ = [A,b]
+$1 = [A],[b], $@@ = [[A],[b]]
+$1 = A, b, $@@ = [A, b]
+
+1
+mkargs
+1, 2[,] 3
+1,2, 3
+[1],[2, 3]
+1, 2, 3
+@end example
+
+
+@node Text processing Macros
+@subsection String manipulation in M4
+
+The following macros may be used to manipulate strings in M4. Many of
+the macros in this section intentionally result in quoted strings as
+output, rather than subjecting the arguments to further expansions. As
+a result, if you are manipulating text that contains active M4
+characters, the arguments are passed with single quoting rather than
+double.
+
+@defmac m4_append (@var{macro-name}, @var{string}, @ovar{separator})
+@defmacx m4_append_uniq (@var{macro-name}, @var{string}, @ovar{separator} @
+ @ovar{if-uniq}, @ovar{if-duplicate})
+@msindex{append}
+@msindex{append_uniq}
+Redefine @var{macro-name} to its former contents with @var{separator}
+and @var{string} added at the end. If @var{macro-name} was undefined
+before (but not if it was defined but empty), then no @var{separator} is
+added. As of Autoconf 2.62, neither @var{string} nor @var{separator}
+are expanded during this macro; instead, they are expanded when
+@var{macro-name} is invoked.
+
+@code{m4_append} can be used to grow strings, and @code{m4_append_uniq}
+to grow strings without duplicating substrings. Additionally,
+@code{m4_append_uniq} takes two optional parameters as of Autoconf 2.62;
+@var{if-uniq} is expanded if @var{string} was appended, and
+@var{if-duplicate} is expanded if @var{string} was already present.
+Also, @code{m4_append_uniq} warns if @var{separator} is not empty, but
+occurs within @var{string}, since that can lead to duplicates.
+
+Note that @code{m4_append} can scale linearly in the length of the final
+string, depending on the quality of the underlying M4 implementation,
+while @code{m4_append_uniq} has an inherent quadratic scaling factor.
+If an algorithm can tolerate duplicates in the final string, use the
+former for speed. If duplicates must be avoided, consider using
+@code{m4_set_add} instead (@pxref{Set manipulation Macros}).
+
+@example
+m4_define([active], [ACTIVE])dnl
+m4_append([sentence], [This is an])dnl
+m4_append([sentence], [ active ])dnl
+m4_append([sentence], [symbol.])dnl
+sentence
+@result{}This is an ACTIVE symbol.
+m4_undefine([active])dnl
+@result{}This is an active symbol.
+m4_append_uniq([list], [one], [, ], [new], [existing])
+@result{}new
+m4_append_uniq([list], [one], [, ], [new], [existing])
+@result{}existing
+m4_append_uniq([list], [two], [, ], [new], [existing])
+@result{}new
+m4_append_uniq([list], [three], [, ], [new], [existing])
+@result{}new
+m4_append_uniq([list], [two], [, ], [new], [existing])
+@result{}existing
+list
+@result{}one, two, three
+m4_dquote(list)
+@result{}[one],[two],[three]
+m4_append([list2], [one], [[, ]])dnl
+m4_append_uniq([list2], [two], [[, ]])dnl
+m4_append([list2], [three], [[, ]])dnl
+list2
+@result{}one, two, three
+m4_dquote(list2)
+@result{}[one, two, three]
+@end example
+@end defmac
+
+@defmac m4_append_uniq_w (@var{macro-name}, @var{strings})
+@msindex{append_uniq_w}
+This macro was introduced in Autoconf 2.62. It is similar to
+@code{m4_append_uniq}, but treats @var{strings} as a whitespace
+separated list of words to append, and only appends unique words.
+@var{macro-name} is updated with a single space between new words.
+@example
+m4_append_uniq_w([numbers], [1 1 2])dnl
+m4_append_uniq_w([numbers], [ 2 3 ])dnl
+numbers
+@result{}1 2 3
+@end example
+@end defmac
+
+@defmac m4_chomp (@var{string})
+@defmacx m4_chomp_all (@var{string})
+@msindex{chomp}
+@msindex{chomp_all}
+Output @var{string} in quotes, but without a trailing newline. The
+macro @code{m4_chomp} is slightly faster, and removes at most one
+newline; the macro @code{m4_chomp_all} removes all consecutive trailing
+newlines. Unlike @code{m4_flatten}, embedded newlines are left intact,
+and backslash does not influence the result.
+@end defmac
+
+@defmac m4_combine (@ovar{separator}, @var{prefix-list}, @ovar{infix}, @
+ @var{suffix-1}, @ovar{suffix-2}, @dots{})
+@msindex{combine}
+This macro produces a quoted string containing the pairwise combination
+of every element of the quoted, comma-separated @var{prefix-list}, and
+every element from the @var{suffix} arguments. Each pairwise
+combination is joined with @var{infix} in the middle, and successive
+pairs are joined by @var{separator}. No expansion occurs on any of the
+arguments. No output occurs if either the @var{prefix} or @var{suffix}
+list is empty, but the lists can contain empty elements.
+@example
+m4_define([a], [oops])dnl
+m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
+@result{}a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
+m4_combine([, ], [[a], [b]], [-])
+@result{}
+m4_combine([, ], [[a], [b]], [-], [])
+@result{}a-, b-
+m4_combine([, ], [], [-], [1], [2])
+@result{}
+m4_combine([, ], [[]], [-], [1], [2])
+@result{}-1, -2
+@end example
+@end defmac
+
+@defmac m4_escape (@var{string})
+@msindex{escape}
+Convert all instances of @samp{[}, @samp{]}, @samp{#}, and @samp{$}
+within @var{string} into their respective quadrigraphs. The result is
+still a quoted string.
+@end defmac
+
+@defmac m4_flatten (@var{string})
+@msindex{flatten}
+Flatten @var{string} into a single line. Delete all backslash-newline
+pairs, and replace all remaining newlines with a space. The result is
+still a quoted string.
+@end defmac
+
+@defmac m4_join (@ovar{separator}, @var{args}@dots{})
+@defmacx m4_joinall (@ovar{separator}, @var{args}@dots{})
+@msindex{join}
+@msindex{joinall}
+Concatenate each @var{arg}, separated by @var{separator}.
+@code{joinall} uses every argument, while @code{join} omits empty
+arguments so that there are no back-to-back separators in the output.
+The result is a quoted string.
+@example
+m4_define([active], [ACTIVE])dnl
+m4_join([|], [one], [], [active], [two])
+@result{}one|active|two
+m4_joinall([|], [one], [], [active], [two])
+@result{}one||active|two
+@end example
+
+Note that if all you intend to do is join @var{args} with commas between
+them, to form a quoted list suitable for @code{m4_foreach}, it is more
+efficient to use @code{m4_dquote}.
+@end defmac
+
+@defmac m4_newline (@ovar{text})
+@msindex{newline}
+This macro was introduced in Autoconf 2.62, and expands to a newline,
+followed by any @var{text}.
+It is primarily useful for maintaining macro formatting, and ensuring
+that M4 does not discard leading whitespace during argument collection.
+@end defmac
+
+@defmac m4_normalize (@var{string})
+@msindex{normalize}
+Remove leading and trailing spaces and tabs, sequences of
+backslash-then-newline, and replace multiple spaces, tabs, and newlines
+with a single space. This is a combination of @code{m4_flatten} and
+@code{m4_strip}. To determine if @var{string} consists only of bytes
+that would be removed by @code{m4_normalize}, you can use
+@code{m4_ifblank}.
+@end defmac
+
+@defmac m4_re_escape (@var{string})
+@msindex{re_escape}
+Backslash-escape all characters in @var{string} that are active in
+regexps.
+@end defmac
+
+@c We cannot use @dvar because the macro expansion mistreats backslashes.
+@defmac m4_split (@var{string}, @r{[}@var{regexp} = @samp{[\t ]+}@r{]})
+@msindex{split}
+Split @var{string} into an M4 list of elements quoted by @samp{[} and
+@samp{]}, while keeping white space at the beginning and at the end.
+If @var{regexp} is given, use it instead of @samp{[\t ]+} for splitting.
+If @var{string} is empty, the result is an empty list.
+@end defmac
+
+@defmac m4_strip (@var{string})
+@msindex{strip}
+Strip whitespace from @var{string}. Sequences of spaces and tabs are
+reduced to a single space, then leading and trailing spaces are removed.
+The result is still a quoted string. Note that this does not interfere
+with newlines; if you want newlines stripped as well, consider
+@code{m4_flatten}, or do it all at once with @code{m4_normalize}. To
+quickly test if @var{string} has only whitespace, use @code{m4_ifblank}.
+@end defmac
+
+@defmac m4_text_box (@var{message}, @dvar{frame, -})
+@msindex{text_box}
+Add a text box around @var{message}, using @var{frame} as the border
+character above and below the message. The @var{frame} argument must be
+a single byte, and does not support quadrigraphs.
+The frame correctly accounts for
+the subsequent expansion of @var{message}. For example:
+@example
+m4_define([macro], [abc])dnl
+m4_text_box([macro])
+@result{}## --- ##
+@result{}## abc ##
+@result{}## --- ##
+@end example
+
+The @var{message} must contain balanced quotes and parentheses, although
+quadrigraphs can be used to work around this.
+@end defmac
+
+@defmac m4_text_wrap (@var{string}, @ovar{prefix}, @
+ @dvar{prefix1, @var{prefix}}, @dvar{width, 79})
+@msindex{text_wrap}
+Break @var{string} into a series of whitespace-separated words, then
+output those words separated by spaces, and wrapping lines any time the
+output would exceed @var{width} columns. If given, @var{prefix1} begins
+the first line, and @var{prefix} begins all wrapped lines. If
+@var{prefix1} is longer than @var{prefix}, then the first line consists
+of just @var{prefix1}. If @var{prefix} is longer than @var{prefix1},
+padding is inserted so that the first word of @var{string} begins at the
+same indentation as all wrapped lines. Note that using literal tab
+characters in any of the arguments will interfere with the calculation
+of width. No expansions occur on @var{prefix}, @var{prefix1}, or the
+words of @var{string}, although quadrigraphs are recognized.
+
+For some examples:
+@example
+m4_text_wrap([Short string */], [ ], [/* ], [20])
+@result{}/* Short string */
+m4_text_wrap([Much longer string */], [ ], [/* ], [20])
+@result{}/* Much longer
+@result{} string */
+m4_text_wrap([Short doc.], [ ], [ --short ], [30])
+@result{} --short Short doc.
+m4_text_wrap([Short doc.], [ ], [ --too-wide ], [30])
+@result{} --too-wide
+@result{} Short doc.
+m4_text_wrap([Super long documentation.], [ ],
+ [ --too-wide ], 30)
+@result{} --too-wide
+@result{} Super long
+@result{} documentation.
+@end example
+@end defmac
+
+@defmac m4_tolower (@var{string})
+@defmacx m4_toupper (@var{string})
+@msindex{tolower}
+@msindex{toupper}
+Return @var{string} with letters converted to upper or lower case,
+respectively.
+@end defmac
+
+@node Number processing Macros
+@subsection Arithmetic computation in M4
+
+The following macros facilitate integer arithmetic operations.
+Where a parameter is documented as taking an arithmetic expression, you
+can use anything that can be parsed by @code{m4_eval}.
+
+@defmac m4_cmp (@var{expr-1}, @var{expr-2})
+@msindex{cmp}
+Compare the arithmetic expressions @var{expr-1} and @var{expr-2}, and
+expand to @samp{-1} if @var{expr-1} is smaller, @samp{0} if they are
+equal, and @samp{1} if @var{expr-1} is larger.
+@end defmac
+
+@defmac m4_list_cmp (@var{list-1}, @var{list-2})
+@msindex{list_cmp}
+Compare the two M4 lists consisting of comma-separated arithmetic
+expressions, left to right. Expand to @samp{-1} for the first element
+pairing where the value from @var{list-1} is smaller, @samp{1} where the
+value from @var{list-2} is smaller, or @samp{0} if both lists have the
+same values. If one list is shorter than the other, the remaining
+elements of the longer list are compared against zero.
+@example
+m4_list_cmp([1, 0], [1])
+@result{}0
+m4_list_cmp([1, [1 * 0]], [1, 0])
+@result{}0
+m4_list_cmp([1, 2], [1, 0])
+@result{}1
+m4_list_cmp([1, [1+1], 3],[1, 2])
+@result{}1
+m4_list_cmp([1, 2, -3], [1, 2])
+@result{}-1
+m4_list_cmp([1, 0], [1, 2])
+@result{}-1
+m4_list_cmp([1], [1, 2])
+@result{}-1
+@end example
+@end defmac
+
+@defmac m4_max (@var{arg}, @dots{})
+@msindex{max}
+This macro was introduced in Autoconf 2.62. Expand to the decimal value
+of the maximum arithmetic expression among all the arguments.
+@end defmac
+
+@defmac m4_min (@var{arg}, @dots{})
+@msindex{min}
+This macro was introduced in Autoconf 2.62. Expand to the decimal value
+of the minimum arithmetic expression among all the arguments.
+@end defmac
+
+@defmac m4_sign (@var{expr})
+@msindex{sign}
+Expand to @samp{-1} if the arithmetic expression @var{expr} is negative,
+@samp{1} if it is positive, and @samp{0} if it is zero.
+@end defmac
+
+@anchor{m4_version_compare}
+@defmac m4_version_compare (@var{version-1}, @var{version-2})
+@msindex{version_compare}
+This macro was introduced in Autoconf 2.53, but had a number of
+usability limitations that were not lifted until Autoconf 2.62. Compare
+the version strings @var{version-1} and @var{version-2}, and expand to
+@samp{-1} if @var{version-1} is smaller, @samp{0} if they are the same,
+or @samp{1} @var{version-2} is smaller. Version strings must be a list
+of elements separated by @samp{.}, @samp{,} or @samp{-}, where each
+element is a number along with optional case-insensitive letters
+designating beta releases. The comparison stops at the leftmost element
+that contains a difference, although a 0 element compares equal to a
+missing element.
+
+It is permissible to include commit identifiers in @var{version}, such
+as an abbreviated SHA1 of the commit, provided there is still a
+monotonically increasing prefix to allow for accurate version-based
+comparisons. For example, this paragraph was written when the
+development snapshot of autoconf claimed to be at version
+@samp{2.61a-248-dc51}, or 248 commits after the 2.61a release, with an
+abbreviated commit identification of @samp{dc51}.
+
+@example
+m4_version_compare([1.1], [2.0])
+@result{}-1
+m4_version_compare([2.0b], [2.0a])
+@result{}1
+m4_version_compare([1.1.1], [1.1.1a])
+@result{}-1
+m4_version_compare([1.2], [1.1.1a])
+@result{}1
+m4_version_compare([1.0], [1])
+@result{}0
+m4_version_compare([1.1pre], [1.1PRE])
+@result{}0
+m4_version_compare([1.1a], [1,10])
+@result{}-1
+m4_version_compare([2.61a], [2.61a-248-dc51])
+@result{}-1
+m4_version_compare([2.61b], [2.61a-248-dc51])
+@result{}1
+@end example
+@end defmac
+
+@defmac m4_version_prereq (@var{version}, @ovar{if-new-enough}, @
+ @dvar{if-old, m4_fatal})
+@msindex{version_prereq}
+Compares @var{version} against the version of Autoconf currently
+running. If the running version is at @var{version} or newer, expand
+@var{if-new-enough}, but if @var{version} is larger than the version
+currently executing, expand @var{if-old}, which defaults to printing an
+error message and exiting m4sugar with status 63. When given only one
+argument, this behaves like @code{AC_PREREQ} (@pxref{Versioning}).
+Remember that the autoconf philosophy favors feature checks over version
+checks.
+@end defmac
+
+@node Set manipulation Macros
+@subsection Set manipulation in M4
+@cindex Set manipulation
+@cindex Data structure, set
+@cindex Unordered set manipulation
+
+Sometimes, it is necessary to track a set of data, where the order does
+not matter and where there are no duplicates in the set. The following
+macros facilitate set manipulations. Each set is an opaque object,
+which can only be accessed via these basic operations. The underlying
+implementation guarantees linear scaling for set creation, which is more
+efficient than using the quadratic @code{m4_append_uniq}. Both set
+names and values can be arbitrary strings, except for unbalanced quotes.
+This implementation ties up memory for removed elements until the next
+operation that must traverse all the elements of a set; and although
+that may slow down some operations until the memory for removed elements
+is pruned, it still guarantees linear performance.
+
+@defmac m4_set_add (@var{set}, @var{value}, @ovar{if-uniq}, @ovar{if-dup})
+@msindex{set_add}
+Adds the string @var{value} as a member of set @var{set}. Expand
+@var{if-uniq} if the element was added, or @var{if-dup} if it was
+previously in the set. Operates in amortized constant time, so that set
+creation scales linearly.
+@end defmac
+
+@defmac m4_set_add_all (@var{set}, @var{value}@dots{})
+@msindex{set_add_all}
+Adds each @var{value} to the set @var{set}. This is slightly more
+efficient than repeatedly invoking @code{m4_set_add}.
+@end defmac
+
+@defmac m4_set_contains (@var{set}, @var{value}, @ovar{if-present}, @
+ @ovar{if-absent})
+@msindex{set_contains}
+Expands @var{if-present} if the string @var{value} is a member of
+@var{set}, otherwise @var{if-absent}.
+
+@example
+m4_set_contains([a], [1], [yes], [no])
+@result{}no
+m4_set_add([a], [1], [added], [dup])
+@result{}added
+m4_set_add([a], [1], [added], [dup])
+@result{}dup
+m4_set_contains([a], [1], [yes], [no])
+@result{}yes
+m4_set_remove([a], [1], [removed], [missing])
+@result{}removed
+m4_set_contains([a], [1], [yes], [no])
+@result{}no
+m4_set_remove([a], [1], [removed], [missing])
+@result{}missing
+@end example
+@end defmac
+
+@defmac m4_set_contents (@var{set}, @ovar{sep})
+@defmacx m4_set_dump (@var{set}, @ovar{sep})
+@msindex{set_contents}
+@msindex{set_dump}
+Expands to a single string consisting of all the members of the set
+@var{set}, each separated by @var{sep}, which is not expanded.
+@code{m4_set_contents} leaves the elements in @var{set} but reclaims any
+memory occupied by removed elements, while @code{m4_set_dump} is a
+faster one-shot action that also deletes the set. No provision is made
+for disambiguating members that contain a non-empty @var{sep} as a
+substring; use @code{m4_set_empty} to distinguish between an empty set
+and the set containing only the empty string. The order of the output
+is unspecified; in the current implementation, part of the speed of
+@code{m4_set_dump} results from using a different output order than
+@code{m4_set_contents}. These macros scale linearly in the size of the
+set before memory pruning, and @code{m4_set_contents([@var{set}],
+[@var{sep}])} is faster than
+@code{m4_joinall([@var{sep}]m4_set_listc([@var{set}]))}.
+
+@example
+m4_set_add_all([a], [1], [2], [3])
+@result{}
+m4_set_contents([a], [-])
+@result{}1-2-3
+m4_joinall([-]m4_set_listc([a]))
+@result{}1-2-3
+m4_set_dump([a], [-])
+@result{}3-2-1
+m4_set_contents([a])
+@result{}
+m4_set_add([a], [])
+@result{}
+m4_set_contents([a], [-])
+@result{}
+@end example
+@end defmac
+
+@defmac m4_set_delete (@var{set})
+@msindex{set_delete}
+Delete all elements and memory associated with @var{set}. This is
+linear in the set size, and faster than removing one element at a time.
+@end defmac
+
+@defmac m4_set_difference (@var{seta}, @var{setb})
+@defmacx m4_set_intersection (@var{seta}, @var{setb})
+@defmacx m4_set_union (@var{seta}, @var{setb})
+@msindex{set_difference}
+@msindex{set_intersection}
+@msindex{set_union}
+Compute the relation between @var{seta} and @var{setb}, and output the
+result as a list of quoted arguments without duplicates and with a
+leading comma. Set difference selects the elements in @var{seta} but
+not @var{setb}, intersection selects only elements in both sets, and
+union selects elements in either set. These actions are linear in the
+sum of the set sizes. The leading comma is necessary to distinguish
+between no elements and the empty string as the only element.
+
+@example
+m4_set_add_all([a], [1], [2], [3])
+@result{}
+m4_set_add_all([b], [3], [], [4])
+@result{}
+m4_set_difference([a], [b])
+@result{},1,2
+m4_set_difference([b], [a])
+@result{},,4
+m4_set_intersection([a], [b])
+@result{},3
+m4_set_union([a], [b])
+@result{},1,2,3,,4
+@end example
+@end defmac
+
+@defmac m4_set_empty (@var{set}, @ovar{if-empty}, @ovar{if-elements})
+@msindex{set_empty}
+Expand @var{if-empty} if the set @var{set} has no elements, otherwise
+expand @var{if-elements}. This macro operates in constant time. Using
+this macro can help disambiguate output from @code{m4_set_contents} or
+@code{m4_set_list}.
+@end defmac
+
+@defmac m4_set_foreach (@var{set}, @var{variable}, @var{action})
+@msindex{set_foreach}
+For each element in the set @var{set}, expand @var{action} with the
+macro @var{variable} defined as the set element. Behavior is
+unspecified if @var{action} recursively lists the contents of @var{set}
+(although listing other sets is acceptable), or if it modifies the set
+in any way other than removing the element currently contained in
+@var{variable}. This macro is faster than the corresponding
+@code{m4_foreach([@var{variable}],
+m4_indir([m4_dquote]m4_set_listc([@var{set}])), [@var{action}])},
+although @code{m4_set_map} might be faster still.
+
+@example
+m4_set_add_all([a]m4_for([i], [1], [5], [], [,i]))
+@result{}
+m4_set_contents([a])
+@result{}12345
+m4_set_foreach([a], [i],
+ [m4_if(m4_eval(i&1), [0], [m4_set_remove([a], i, [i])])])
+@result{}24
+m4_set_contents([a])
+@result{}135
+@end example
+@end defmac
+
+@defmac m4_set_list (@var{set})
+@defmacx m4_set_listc (@var{set})
+@msindex{set_list}
+@msindex{set_listc}
+Produce a list of arguments, where each argument is a quoted element
+from the set @var{set}. The variant @code{m4_set_listc} is unambiguous,
+by adding a leading comma if there are any set elements, whereas the
+variant @code{m4_set_list} cannot distinguish between an empty set and a
+set containing only the empty string. These can be directly used in
+macros that take multiple arguments, such as @code{m4_join} or
+@code{m4_set_add_all}, or wrapped by @code{m4_dquote} for macros that
+take a quoted list, such as @code{m4_map} or @code{m4_foreach}. Any
+memory occupied by removed elements is reclaimed during these macros.
+
+@example
+m4_set_add_all([a], [1], [2], [3])
+@result{}
+m4_set_list([a])
+@result{}1,2,3
+m4_set_list([b])
+@result{}
+m4_set_listc([b])
+@result{}
+m4_count(m4_set_list([b]))
+@result{}1
+m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
+@result{}0
+m4_set_add([b], [])
+@result{}
+m4_set_list([b])
+@result{}
+m4_set_listc([b])
+@result{},
+m4_count(m4_set_list([b]))
+@result{}1
+m4_set_empty([b], [0], [m4_count(m4_set_list([b]))])
+@result{}1
+@end example
+@end defmac
+
+@defmac m4_set_map (@var{set}, @var{action})
+@msindex{set_map}
+For each element in the set @var{set}, expand @var{action} with a single
+argument of the set element. Behavior is unspecified if @var{action}
+recursively lists the contents of @var{set} (although listing other sets
+is acceptable), or if it modifies the set in any way other than removing
+the element passed as an argument. This macro is faster than either
+corresponding counterpart of
+@code{m4_map_args([@var{action}]m4_set_listc([@var{set}]))} or
+@code{m4_set_foreach([@var{set}], [var],
+[@var{action}(m4_defn([var]))])}. It is possible to use @code{m4_curry}
+if more than one argument is needed for @var{action}, although it is
+more efficient to use @code{m4_set_map_sep} in that case.
+@end defmac
+
+@defmac m4_set_map_sep (@var{set}, @ovar{pre}, @ovar{post}, @ovar{sep})
+@msindex{set_map_sep}
+For each element in the set @var{set}, expand
+@code{@var{pre}[element]@var{post}}, additionally expanding @var{sep}
+between elements. Behavior is unspecified if the expansion recursively
+lists the contents of @var{set} (although listing other sets
+is acceptable), or if it modifies the set in any way other than removing
+the element visited by the expansion. This macro provides the most
+efficient means for non-destructively visiting the elements of a set; in
+particular, @code{m4_set_map([@var{set}], [@var{action}])} is equivalent
+to @code{m4_set_map_sep([@var{set}], [@var{action}(], [)])}.
+@end defmac
+
+@defmac m4_set_remove (@var{set}, @var{value}, @ovar{if-present}, @
+ @ovar{if-absent})
+@msindex{set_remove}
+If @var{value} is an element in the set @var{set}, then remove it and
+expand @var{if-present}. Otherwise expand @var{if-absent}. This macro
+operates in constant time so that multiple removals will scale linearly
+rather than quadratically; but when used outside of
+@code{m4_set_foreach} or @code{m4_set_map}, it leaves memory occupied
+until the set is later
+compacted by @code{m4_set_contents} or @code{m4_set_list}. Several
+other set operations are then less efficient between the time of element
+removal and subsequent memory compaction, but still maintain their
+guaranteed scaling performance.
+@end defmac
+
+@defmac m4_set_size (@var{set})
+@msindex{set_size}
+Expand to the size of the set @var{set}. This implementation operates
+in constant time, and is thus more efficient than
+@code{m4_eval(m4_count(m4_set_listc([set])) - 1)}.
+@end defmac
+
+
+@node Forbidden Patterns
+@subsection Forbidden Patterns
+@cindex Forbidden patterns
+@cindex Patterns, forbidden
+
+M4sugar provides a means to define suspicious patterns, patterns
+describing tokens which should not be found in the output. For
+instance, if an Autoconf @file{configure} script includes tokens such as
+@samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
+wrong (typically a macro was not evaluated because of overquotation).
+
+M4sugar forbids all the tokens matching @samp{^_?m4_} and @samp{^dnl$}.
+Additional layers, such as M4sh and Autoconf, add additional forbidden
+patterns to the list.
+
+@defmac m4_pattern_forbid (@var{pattern})
+@msindex{pattern_forbid}
+Declare that no token matching @var{pattern} must be found in the output.
+Comments are not checked; this can be a problem if, for instance, you
+have some macro left unexpanded after an @samp{#include}. No consensus
+is currently found in the Autoconf community, as some people consider it
+should be valid to name macros in comments (which doesn't make sense to
+the authors of this documentation: input, such as macros, should be
+documented by @samp{dnl} comments; reserving @samp{#}-comments to
+document the output).
+@end defmac
+
+Of course, you might encounter exceptions to these generic rules, for
+instance you might have to refer to @samp{$m4_flags}.
+
+@defmac m4_pattern_allow (@var{pattern})
+@msindex{pattern_allow}
+Any token matching @var{pattern} is allowed, including if it matches an
+@code{m4_pattern_forbid} pattern.
+@end defmac
+
+@node Debugging via autom4te
+@section Debugging via autom4te
+@cindex debugging tips
+@cindex autom4te debugging tips
+@cindex m4sugar debugging tips
+At times, it is desirable to see what was happening inside m4, to see
+why output was not matching expectations. However, post-processing done
+by @command{autom4te} means that directly using the m4 builtin
+@code{m4_traceon} is likely to interfere with operation. Also, frequent
+diversion changes and the concept of forbidden tokens make it difficult
+to use @code{m4_defn} to generate inline comments in the final output.
+
+There are a couple of tools to help with this. One is the use of the
+@option{--trace} option provided by @command{autom4te} (as well as each
+of the programs that wrap @command{autom4te}, such as
+@command{autoconf}), in order to inspect when a macro is called and with
+which arguments. For example, when this paragraph was written, the
+autoconf version could be found by:
+
+@example
+$ @kbd{autoconf --trace=AC_INIT}
+configure.ac:23:AC_INIT:GNU Autoconf:2.63b.95-3963:bug-autoconf@@gnu.org
+$ @kbd{autoconf --trace='AC_INIT:version is $2'}
+version is 2.63b.95-3963
+@end example
+
+Another trick is to print out the expansion of various m4 expressions to
+standard error or to an independent file, with no further m4 expansion,
+and without interfering with diversion changes or the post-processing
+done to standard output. @code{m4_errprintn} shows a given expression
+on standard error. For example, if you want to see the expansion of an
+autoconf primitive or of one of your autoconf macros, you can do it like
+this:
+
+@example
+$ @kbd{cat <<\EOF > configure.ac}
+AC_INIT
+m4_errprintn([The definition of AC_DEFINE_UNQUOTED:])
+m4_errprintn(m4_defn([AC_DEFINE_UNQUOTED]))
+AC_OUTPUT
+EOF
+$ @kbd{autoconf}
+@error{}The definition of AC_DEFINE_UNQUOTED:
+@error{}_AC_DEFINE_Q([], $@@)
+@end example
+
+@node Programming in M4sh
+@chapter Programming in M4sh
+
+M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
+scripts. This name was coined by Lars J. Aas, who notes that,
+according to the Webster's Revised Unabridged Dictionary (1913):
+
+@quotation
+Mash \Mash\, n. [Akin to G. meisch, maisch, meische, maische, mash,
+wash, and prob.@: to AS. miscian to mix. See ``Mix''.]
+
+@enumerate 1
+@item
+A mass of mixed ingredients reduced to a soft pulpy state by beating or
+pressure@enddots{}
+
+@item
+A mixture of meal or bran and water fed to animals.
+
+@item
+A mess; trouble. [Obs.] --Beau.@: & Fl.
+@end enumerate
+@end quotation
+
+M4sh reserves the M4 macro namespace @samp{^_AS_} for internal use, and
+the namespace @samp{^AS_} for M4sh macros. It also reserves the shell
+and environment variable namespace @samp{^as_}, and the here-document
+delimiter namespace @samp{^_AS[A-Z]} in the output file. You should not
+define your own macros or output shell code that conflicts with these
+namespaces.
+
+@menu
+* Common Shell Constructs:: Portability layer for common shell constructs
+* Polymorphic Variables:: Support for indirect variable names
+* Initialization Macros:: Macros to establish a sane shell environment
+* File Descriptor Macros:: File descriptor macros for input and output
+@end menu
+
+@node Common Shell Constructs
+@section Common Shell Constructs
+
+M4sh provides portable alternatives for some common shell constructs
+that unfortunately are not portable in practice.
+
+@c Deprecated, to be replaced by a better API
+@ignore
+@defmac AS_BASENAME (@var{file-name})
+@asindex{BASENAME}
+Output the non-directory portion of @var{file-name}. For example,
+if @code{$file} is @samp{/one/two/three}, the command
+@code{base=`AS_BASENAME(["$file"])`} sets @code{base} to @samp{three}.
+@end defmac
+@end ignore
+
+@defmac AS_BOX (@var{text}, @dvar{char, -})
+@asindex{BOX}
+Expand into shell code that will output @var{text} surrounded by a box
+with @var{char} in the top and bottom border. @var{text} should not
+contain a newline, but may contain shell expansions valid for unquoted
+here-documents. @var{char} defaults to @samp{-}, but can be any
+character except @samp{/}, @samp{'}, @samp{"}, @samp{\},
+@samp{&}, or @samp{`}. This is useful for outputting a comment box into
+log files to separate distinct phases of script operation.
+@end defmac
+
+@defmac AS_CASE (@var{word}, @ovar{pattern1}, @ovar{if-matched1}, @
+ @dots{}, @ovar{default})
+@asindex{CASE}
+Expand into a shell @samp{case} statement, where @var{word} is matched
+against one or more patterns. @var{if-matched} is run if the
+corresponding pattern matched @var{word}, else @var{default} is run.
+Avoids several portability issues (@pxref{case, , Limitations of Shell
+Builtins}).
+@end defmac
+
+@c Deprecated, to be replaced by a better API
+@defmac AS_DIRNAME (@var{file-name})
+@asindex{DIRNAME}
+Output the directory portion of @var{file-name}. For example,
+if @code{$file} is @samp{/one/two/three}, the command
+@code{dir=`AS_DIRNAME(["$file"])`} sets @code{dir} to @samp{/one/two}.
+
+This interface may be improved in the future to avoid forks and losing
+trailing newlines.
+@end defmac
+
+@defmac AS_ECHO (@var{word})
+@asindex{ECHO}
+Emits @var{word} to the standard output, followed by a newline. @var{word}
+must be a single shell word (typically a quoted string). The bytes of
+@var{word} are output as-is, even if it starts with "-" or contains "\".
+Redirections can be placed outside the macro invocation. This is much
+more portable than using @command{echo} (@pxref{echo, , Limitations of
+Shell Builtins}).
+@end defmac
+
+@defmac AS_ECHO_N (@var{word})
+@asindex{ECHO_N}
+Emits @var{word} to the standard output, without a following newline.
+@var{word} must be a single shell word (typically a quoted string) and,
+for portability, should not include more than one newline. The bytes of
+@var{word} are output as-is, even if it starts with "-" or contains "\".
+Redirections can be placed outside the macro invocation.
+@end defmac
+
+@c We cannot use @dvar because the macro expansion mistreats backslashes.
+@defmac AS_ESCAPE (@var{string}, @r{[}@var{chars} = @samp{`\"$}@r{]})
+@asindex{ESCAPE}
+Expands to @var{string}, with any characters in @var{chars} escaped with
+a backslash (@samp{\}). @var{chars} should be at most four bytes long,
+and only contain characters from the set @samp{`\"$}; however,
+characters may be safely listed more than once in @var{chars} for the
+sake of syntax highlighting editors. The current implementation expands
+@var{string} after adding escapes; if @var{string} contains macro calls
+that in turn expand to text needing shell quoting, you can use
+@code{AS_ESCAPE(m4_dquote(m4_expand([string])))}.
+
+The default for @var{chars} (@samp{\"$`}) is the set of characters
+needing escapes when @var{string} will be used literally within double
+quotes. One common variant is the set of characters to protect when
+@var{string} will be used literally within back-ticks or an unquoted
+here-document (@samp{\$`}). Another common variant is @samp{""}, which can
+be used to form a double-quoted string containing the same expansions
+that would have occurred if @var{string} were expanded in an unquoted
+here-document; however, when using this variant, care must be taken that
+@var{string} does not use double quotes within complex variable
+expansions (such as @samp{$@{foo-`echo "hi"`@}}) that would be broken
+with improper escapes.
+
+This macro is often used with @code{AS_ECHO}. For an example, observe
+the output generated by the shell code generated from this snippet:
+
+@example
+foo=bar
+AS_ECHO(["AS_ESCAPE(["$foo" = ])AS_ESCAPE(["$foo"], [""])"])
+@result{}"$foo" = "bar"
+m4_define([macro], [a, [\b]])
+AS_ECHO(["AS_ESCAPE([[macro]])"])
+@result{}macro
+AS_ECHO(["AS_ESCAPE([macro])"])
+@result{}a, b
+AS_ECHO(["AS_ESCAPE(m4_dquote(m4_expand([macro])))"])
+@result{}a, \b
+@end example
+
+@comment Should we add AS_ESCAPE_SINGLE? If we do, we can optimize in
+@comment the case of @var{string} that does not contain '.
+To escape a string that will be placed within single quotes, use:
+
+@example
+m4_bpatsubst([[@var{string}]], ['], ['\\''])
+@end example
+@end defmac
+
+@defmac AS_EXECUTABLE_P (@var{file})
+@asindex{EXECUTABLE_P}
+Emit code to probe whether @var{file} is a regular file with executable
+permissions (and not a directory with search permissions). The caller
+is responsible for quoting @var{file}.
+@end defmac
+
+@defmac AS_EXIT (@dvar{status, $?})
+@asindex{EXIT}
+Emit code to exit the shell with @var{status}, defaulting to @samp{$?}.
+This macro
+works around shells that see the exit status of the command prior to
+@code{exit} inside a @samp{trap 0} handler (@pxref{trap, , Limitations
+of Shell Builtins}).
+@end defmac
+
+@defmac AS_IF (@var{test1}, @ovar{run-if-true1}, @dots{}, @ovar{run-if-false})
+@asindex{IF}
+Run shell code @var{test1}. If @var{test1} exits with a zero status then
+run shell code @var{run-if-true1}, else examine further tests. If no test
+exits with a zero status, run shell code @var{run-if-false}, with
+simplifications if either @var{run-if-true1} or @var{run-if-false}
+is empty. For example,
+
+@example
+AS_IF([test "x$foo" = xyes], [HANDLE_FOO([yes])],
+ [test "x$foo" != xno], [HANDLE_FOO([maybe])],
+ [echo foo not specified])
+@end example
+
+@noindent
+ensures any required macros of @code{HANDLE_FOO}
+are expanded before the first test.
+@end defmac
+
+@defmac AS_MKDIR_P (@var{file-name})
+@asindex{MKDIR_P}
+Make the directory @var{file-name}, including intervening directories
+as necessary. This is equivalent to @samp{mkdir -p -- @var{file-name}},
+except that it is portable to older versions of @command{mkdir} that
+lack support for the @option{-p} option or for the @option{--}
+delimiter (@pxref{mkdir, , Limitations of Usual Tools}). Also,
+@code{AS_MKDIR_P}
+succeeds if @var{file-name} is a symbolic link to an existing directory,
+even though Posix is unclear whether @samp{mkdir -p} should
+succeed in that case. If creation of @var{file-name} fails, exit the
+script.
+
+Also see the @code{AC_PROG_MKDIR_P} macro (@pxref{Particular Programs}).
+@end defmac
+
+@defmac AS_SET_STATUS (@var{status})
+@asindex{SET_STATUS}
+Emit shell code to set the value of @samp{$?} to @var{status}, as
+efficiently as possible. However, this is not guaranteed to abort a
+shell running with @code{set -e} (@pxref{set, , Limitations of Shell
+Builtins}). This should also be used at the end of a complex shell
+function instead of @samp{return} (@pxref{Shell Functions}) to avoid
+a DJGPP shell bug.
+@end defmac
+
+@defmac AS_TR_CPP (@var{expression})
+@asindex{TR_CPP}
+Transform @var{expression} into a valid right-hand side for a C @code{#define}.
+For example:
+
+@example
+# This outputs "#define HAVE_CHAR_P 1".
+# Notice the m4 quoting around #, to prevent an m4 comment
+type="char *"
+echo "[#]define AS_TR_CPP([HAVE_$type]) 1"
+@end example
+@end defmac
+
+@defmac AS_TR_SH (@var{expression})
+@asindex{TR_SH}
+Transform @var{expression} into shell code that generates a valid shell
+variable name. The result is literal when possible at m4 time, but must
+be used with @code{eval} if @var{expression} causes shell indirections.
+For example:
+
+@example
+# This outputs "Have it!".
+header="sys/some file.h"
+eval AS_TR_SH([HAVE_$header])=yes
+if test "x$HAVE_sys_some_file_h" = xyes; then echo "Have it!"; fi
+@end example
+@end defmac
+
+@defmac AS_SET_CATFILE (@var{var}, @var{dir}, @var{file})
+@asindex{SET_CATFILE}
+Set the polymorphic shell variable @var{var} to @var{dir}/@var{file},
+but optimizing the common cases (@var{dir} or @var{file} is @samp{.},
+@var{file} is absolute, etc.).
+@end defmac
+
+@defmac AS_UNSET (@var{var})
+@asindex{UNSET}
+Unsets the shell variable @var{var}, working around bugs in older
+shells (@pxref{unset, , Limitations of Shell
+Builtins}). @var{var} can be a literal or indirect variable name.
+@end defmac
+
+@defmac AS_VERSION_COMPARE (@var{version-1}, @var{version-2}, @
+ @ovar{action-if-less}, @ovar{action-if-equal}, @ovar{action-if-greater})
+@asindex{VERSION_COMPARE}
+Compare two strings @var{version-1} and @var{version-2}, possibly
+containing shell variables, as version strings, and expand
+@var{action-if-less}, @var{action-if-equal}, or @var{action-if-greater}
+depending upon the result.
+The algorithm to compare is similar to the one used by strverscmp in
+glibc (@pxref{String/Array Comparison, , String/Array Comparison, libc,
+The GNU C Library}).
+@end defmac
+
+@node Polymorphic Variables
+@section Support for indirect variable names
+@cindex variable name indirection
+@cindex polymorphic variable name
+@cindex indirection, variable name
+
+Often, it is convenient to write a macro that will emit shell code
+operating on a shell variable. The simplest case is when the variable
+name is known. But a more powerful idiom is writing shell code that can
+work through an indirection, where another variable or command
+substitution produces the name of the variable to actually manipulate.
+M4sh supports the notion of polymorphic shell variables, making it easy
+to write a macro that can deal with either literal or indirect variable
+names and output shell code appropriate for both use cases. Behavior is
+undefined if expansion of an indirect variable does not result in a
+literal variable name.
+
+@defmac AS_LITERAL_IF (@var{expression}, @ovar{if-literal}, @ovar{if-not}, @
+ @dvar{if-simple-ref, @var{if-not}})
+@defmacx AS_LITERAL_WORD_IF (@var{expression}, @ovar{if-literal}, @
+ @ovar{if-not}, @dvar{if-simple-ref, @var{if-not}})
+@asindex{LITERAL_IF}
+@asindex{LITERAL_WORD_IF}
+If the expansion of @var{expression} is definitely a shell literal,
+expand @var{if-literal}. If the expansion of @var{expression} looks
+like it might contain shell indirections (such as @code{$var} or
+@code{`expr`}), then @var{if-not} is expanded. Sometimes, it is
+possible to output optimized code if @var{expression} consists only of
+shell variable expansions (such as @code{$@{var@}}), in which case
+@var{if-simple-ref} can be provided; but defaulting to @var{if-not}
+should always be safe. @code{AS_LITERAL_WORD_IF} only expands
+@var{if-literal} if @var{expression} looks like a single shell word,
+containing no whitespace; while @code{AS_LITERAL_IF} allows whitespace
+in @var{expression}.
+
+In order to reduce the time spent recognizing whether an
+@var{expression} qualifies as a literal or a simple indirection, the
+implementation is somewhat conservative: @var{expression} must be a
+single shell word (possibly after stripping whitespace), consisting only
+of bytes that would have the same meaning whether unquoted or enclosed
+in double quotes (for example, @samp{a.b} results in @var{if-literal},
+even though it is not a valid shell variable name; while both @samp{'a'}
+and @samp{[$]} result in @var{if-not}, because they behave differently
+than @samp{"'a'"} and @samp{"[$]"}). This macro can be used in contexts
+for recognizing portable file names (such as in the implementation of
+@code{AC_LIBSOURCE}), or coupled with some transliterations for forming
+valid variable names (such as in the implementation of @code{AS_TR_SH},
+which uses an additional @code{m4_translit} to convert @samp{.} to
+@samp{_}).
+
+This example shows how to read the contents of the shell variable
+@code{bar}, exercising all three arguments to @code{AS_LITERAL_IF}. It
+results in a script that will output the line @samp{hello} three times.
+
+@example
+AC_DEFUN([MY_ACTION],
+[AS_LITERAL_IF([$1],
+ [echo "$$1"],
+@c $$
+ [AS_VAR_COPY([var], [$1])
+ echo "$var"],
+ [eval 'echo "$'"$1"\"])])
+foo=bar bar=hello
+MY_ACTION([bar])
+MY_ACTION([`echo bar`])
+MY_ACTION([$foo])
+@end example
+@end defmac
+
+@defmac AS_VAR_APPEND (@var{var}, @var{text})
+@asindex{VAR_APPEND}
+Emit shell code to append the shell expansion of @var{text} to the end
+of the current contents of the polymorphic shell variable @var{var},
+taking advantage of shells that provide the @samp{+=} extension for more
+efficient scaling.
+
+For situations where the final contents of @var{var} are relatively
+short (less than 256 bytes), it is more efficient to use the simpler
+code sequence of @code{@var{var}=$@{@var{var}@}@var{text}} (or its
+polymorphic equivalent of @code{AS_VAR_COPY([t], [@var{var}])} and
+@code{AS_VAR_SET([@var{var}], ["$t"@var{text}])}). But in the case
+when the script will be repeatedly appending text into @code{var},
+issues of scaling start to become apparent. A naive implementation
+requires execution time linear to the length of the current contents of
+@var{var} as well as the length of @var{text} for a single append, for
+an overall quadratic scaling with multiple appends. This macro takes
+advantage of shells which provide the extension
+@code{@var{var}+=@var{text}}, which can provide amortized constant time
+for a single append, for an overall linear scaling with multiple
+appends. Note that unlike @code{AS_VAR_SET}, this macro requires that
+@var{text} be quoted properly to avoid field splitting and file name
+expansion.
+@end defmac
+
+@defmac AS_VAR_ARITH (@var{var}, @var{expression})
+@asindex{VAR_ARITH}
+Emit shell code to compute the arithmetic expansion of @var{expression},
+assigning the result as the contents of the polymorphic shell variable
+@var{var}. The code takes advantage of shells that provide @samp{$(())}
+for fewer forks, but uses @command{expr} as a fallback. Therefore, the
+syntax for a valid @var{expression} is rather limited: all operators
+must occur as separate shell arguments and with proper quoting, there is
+no portable equality operator, all variables containing numeric values
+must be expanded prior to the computation, all numeric values must be
+provided in decimal without leading zeroes, and the first shell argument
+should not be a negative number. In the following example, this snippet
+will print @samp{(2+3)*4 == 20}.
+
+@example
+bar=3
+AS_VAR_ARITH([foo], [\( 2 + $bar \) \* 4])
+echo "(2+$bar)*4 == $foo"
+@end example
+@end defmac
+
+@defmac AS_VAR_COPY (@var{dest}, @var{source})
+@asindex{VAR_COPY}
+Emit shell code to assign the contents of the polymorphic shell variable
+@var{source} to the polymorphic shell variable @var{dest}. For example,
+executing this M4sh snippet will output @samp{bar hi}:
+
+@example
+foo=bar bar=hi
+AS_VAR_COPY([a], [foo])
+AS_VAR_COPY([b], [$foo])
+echo "$a $b"
+@end example
+
+When it is necessary to access the contents of an indirect variable
+inside a shell double-quoted context, the recommended idiom is to first
+copy the contents into a temporary literal shell variable.
+
+@smallexample
+for header in stdint_h inttypes_h ; do
+ AS_VAR_COPY([var], [ac_cv_header_$header])
+ echo "$header detected: $var"
+done
+@end smallexample
+@end defmac
+
+@comment AS_VAR_GET is intentionally undocumented; it can't handle
+@comment trailing newlines uniformly, and forks too much.
+
+@defmac AS_VAR_IF (@var{var}, @ovar{word}, @ovar{if-equal}, @
+ @ovar{if-not-equal})
+@asindex{VAR_IF}
+Output a shell conditional statement. If the contents of the
+polymorphic shell variable @var{var} match the string @var{word},
+execute @var{if-equal}; otherwise execute @var{if-not-equal}. @var{word}
+must be a single shell word (typically a quoted string). Avoids
+shell bugs if an interrupt signal arrives while a command substitution
+in @var{var} is being expanded.
+@end defmac
+
+@defmac AS_VAR_PUSHDEF (@var{m4-name}, @var{value})
+@defmacx AS_VAR_POPDEF (@var{m4-name})
+@asindex{VAR_PUSHDEF}
+@asindex{VAR_POPDEF}
+@cindex composing variable names
+@cindex variable names, composing
+A common M4sh idiom involves composing shell variable names from an m4
+argument (for example, writing a macro that uses a cache variable).
+@var{value} can be an arbitrary string, which will be transliterated
+into a valid shell name by @code{AS_TR_SH}. In order to access the
+composed variable name based on @var{value}, it is easier to declare a
+temporary m4 macro @var{m4-name} with @code{AS_VAR_PUSHDEF}, then use
+that macro as the argument to subsequent @code{AS_VAR} macros as a
+polymorphic variable name, and finally free the temporary macro with
+@code{AS_VAR_POPDEF}. These macros are often followed with @code{dnl},
+to avoid excess newlines in the output.
+
+Here is an involved example, that shows the power of writing macros that
+can handle composed shell variable names:
+
+@example
+m4_define([MY_CHECK_HEADER],
+[AS_VAR_PUSHDEF([my_Header], [ac_cv_header_$1])dnl
+AS_VAR_IF([my_Header], [yes], [echo "header $1 detected"])dnl
+AS_VAR_POPDEF([my_Header])dnl
+])
+MY_CHECK_HEADER([stdint.h])
+for header in inttypes.h stdlib.h ; do
+ MY_CHECK_HEADER([$header])
+done
+@end example
+
+@noindent
+In the above example, @code{MY_CHECK_HEADER} can operate on polymorphic
+variable names. In the first invocation, the m4 argument is
+@code{stdint.h}, which transliterates into a literal @code{stdint_h}.
+As a result, the temporary macro @code{my_Header} expands to the literal
+shell name @samp{ac_cv_header_stdint_h}. In the second invocation, the
+m4 argument to @code{MY_CHECK_HEADER} is @code{$header}, and the
+temporary macro @code{my_Header} expands to the indirect shell name
+@samp{$as_my_Header}. During the shell execution of the for loop, when
+@samp{$header} contains @samp{inttypes.h}, then @samp{$as_my_Header}
+contains @samp{ac_cv_header_inttypes_h}. If this script is then run on a
+platform where all three headers have been previously detected, the
+output of the script will include:
+
+@smallexample
+header stdint.h detected
+header inttypes.h detected
+header stdlib.h detected
+@end smallexample
+@end defmac
+
+@defmac AS_VAR_SET (@var{var}, @ovar{value})
+@asindex{VAR_SET}
+Emit shell code to assign the contents of the polymorphic shell variable
+@var{var} to the shell expansion of @var{value}. @var{value} is not
+subject to field splitting or file name expansion, so if command
+substitution is used, it may be done with @samp{`""`} rather than using
+an intermediate variable (@pxref{Shell Substitutions}). However,
+@var{value} does undergo rescanning for additional macro names; behavior
+is unspecified if late expansion results in any shell meta-characters.
+@end defmac
+
+@defmac AS_VAR_SET_IF (@var{var}, @ovar{if-set}, @ovar{if-undef})
+@asindex{VAR_SET_IF}
+Emit a shell conditional statement, which executes @var{if-set} if the
+polymorphic shell variable @code{var} is set to any value, and
+@var{if-undef} otherwise.
+@end defmac
+
+@defmac AS_VAR_TEST_SET (@var{var})
+@asindex{VAR_TEST_SET}
+Emit a shell statement that results in a successful exit status only if
+the polymorphic shell variable @code{var} is set.
+@end defmac
+
+@node Initialization Macros
+@section Initialization Macros
+
+@defmac AS_BOURNE_COMPATIBLE
+@asindex{BOURNE_COMPATIBLE}
+Set up the shell to be more compatible with the Bourne shell as
+standardized by Posix, if possible. This may involve setting
+environment variables, or setting options, or similar
+implementation-specific actions. This macro is deprecated, since
+@code{AS_INIT} already invokes it.
+@end defmac
+
+@defmac AS_INIT
+@asindex{INIT}
+@evindex LC_ALL
+@evindex SHELL
+Initialize the M4sh environment. This macro calls @code{m4_init}, then
+outputs the @code{#! /bin/sh} line, a notice about where the output was
+generated from, and code to sanitize the environment for the rest of the
+script. Among other initializations, this sets @env{SHELL} to the shell
+chosen to run the script (@pxref{CONFIG_SHELL}), and @env{LC_ALL} to
+ensure the C locale. Finally, it changes the current diversion to
+@code{BODY}. @code{AS_INIT} is called automatically by @code{AC_INIT}
+and @code{AT_INIT}, so shell code in @file{configure},
+@file{config.status}, and @file{testsuite} all benefit from a sanitized
+shell environment.
+@end defmac
+
+@defmac AS_INIT_GENERATED (@var{file}, @ovar{comment})
+@asindex{INIT_GENERATED}
+Emit shell code to start the creation of a subsidiary shell script in
+@var{file}, including changing @var{file} to be executable. This macro
+populates the child script with information learned from the parent
+(thus, the emitted code is equivalent in effect, but more efficient,
+than the code output by @code{AS_INIT}, @code{AS_BOURNE_COMPATIBLE}, and
+@code{AS_SHELL_SANITIZE}). If present, @var{comment} is output near the
+beginning of the child, prior to the shell initialization code, and is
+subject to parameter expansion, command substitution, and backslash
+quote removal. The
+parent script should check the exit status after this macro, in case
+@var{file} could not be properly created (for example, if the disk was
+full). If successfully created, the parent script can then proceed to
+append additional M4sh constructs into the child script.
+
+Note that the child script starts life without a log file open, so if
+the parent script uses logging (@pxref{AS_MESSAGE_LOG_FD}), you
+must temporarily disable any attempts to use the log file until after
+emitting code to open a log within the child. On the other hand, if the
+parent script has @code{AS_MESSAGE_FD} redirected somewhere besides
+@samp{1}, then the child script already has code that copies stdout to
+that descriptor. Currently, the suggested
+idiom for writing a M4sh shell script from within another script is:
+
+@example
+AS_INIT_GENERATED([@var{file}], [[# My child script.
+]]) || @{ AS_ECHO(["Failed to create child script"]); AS_EXIT; @}
+m4_pushdef([AS_MESSAGE_LOG_FD])dnl
+cat >> "@var{file}" <<\__EOF__
+# Code to initialize AS_MESSAGE_LOG_FD
+m4_popdef([AS_MESSAGE_LOG_FD])dnl
+# Additional code
+__EOF__
+@end example
+
+This, however, may change in the future as the M4sh interface is
+stabilized further.
+
+Also, be aware that use of @env{LINENO} within the child script may
+report line numbers relative to their location in the parent script,
+even when using @code{AS_LINENO_PREPARE}, if the parent script was
+unable to locate a shell with working @env{LINENO} support.
+@end defmac
+
+@defmac AS_LINENO_PREPARE
+@asindex{LINENO_PREPARE}
+@evindex LINENO
+Find a shell that supports the special variable @env{LINENO}, which
+contains the number of the currently executing line. This macro is
+automatically invoked by @code{AC_INIT} in configure scripts.
+@end defmac
+
+@defmac AS_ME_PREPARE
+@asindex{ME_PREPARE}
+Set up variable @env{as_me} to be the basename of the currently executing
+script. This macro is automatically invoked by @code{AC_INIT} in
+configure scripts.
+@end defmac
+
+@defmac AS_TMPDIR (@var{prefix}, @dvar{dir, $@{TMPDIR:=/tmp@}})
+@asindex{TMPDIR}
+@evindex TMPDIR
+@ovindex tmp
+Create, as safely as possible, a temporary sub-directory within
+@var{dir} with a name starting with @var{prefix}. @var{prefix} should
+be 2-4 characters, to make it slightly easier to identify the owner of
+the directory. If @var{dir} is omitted, then the value of @env{TMPDIR}
+will be used (defaulting to @samp{/tmp}). On success, the name of the
+newly created directory is stored in the shell variable @code{tmp}. On
+error, the script is aborted.
+
+Typically, this macro is coupled with some exit traps to delete the created
+directory and its contents on exit or interrupt. However, there is a
+slight window between when the directory is created and when the name is
+actually known to the shell, so an interrupt at the right moment might
+leave the temporary directory behind. Hence it is important to use a
+@var{prefix} that makes it easier to determine if a leftover temporary
+directory from an interrupted script is safe to delete.
+
+The use of the output variable @samp{$tmp} rather than something in the
+@samp{as_} namespace is historical; it has the unfortunate consequence
+that reusing this otherwise common name for any other purpose inside
+your script has the potential to break any cleanup traps designed to
+remove the temporary directory.
+@end defmac
+
+@defmac AS_SHELL_SANITIZE
+@asindex{SHELL_SANITIZE}
+Initialize the shell suitably for @command{configure} scripts. This has
+the effect of @code{AS_BOURNE_COMPATIBLE}, and sets some other
+environment variables for predictable results from configuration tests.
+For example, it sets @env{LC_ALL} to change to the default C locale.
+@xref{Special Shell Variables}. This macro is deprecated, since
+@code{AS_INIT} already invokes it.
+@end defmac
+
+
+@node File Descriptor Macros
+@section File Descriptor Macros
+@cindex input
+@cindex standard input
+@cindex file descriptors
+@cindex descriptors
+@cindex low-level output
+@cindex output, low-level
+
+The following macros define file descriptors used to output messages
+(or input values) from @file{configure} scripts.
+For example:
+
+@example
+echo "$wombats found" >&AS_MESSAGE_LOG_FD
+echo 'Enter desired kangaroo count:' >&AS_MESSAGE_FD
+read kangaroos <&AS_ORIGINAL_STDIN_FD`
+@end example
+
+@noindent
+However doing so is seldom needed, because Autoconf provides higher
+level macros as described below.
+
+@defmac AS_MESSAGE_FD
+@asindex{MESSAGE_FD}
+The file descriptor for @samp{checking for...} messages and results.
+By default, @code{AS_INIT} sets this to @samp{1} for standalone M4sh
+clients. However, @code{AC_INIT} shuffles things around to another file
+descriptor, in order to allow the @option{-q} option of
+@command{configure} to choose whether messages should go to the script's
+standard output or be discarded.
+
+If you want to display some messages, consider using one of the printing
+macros (@pxref{Printing Messages}) instead. Copies of messages output
+via these macros are also recorded in @file{config.log}.
+@end defmac
+
+@anchor{AS_MESSAGE_LOG_FD}
+@defmac AS_MESSAGE_LOG_FD
+@asindex{MESSAGE_LOG_FD}
+This must either be empty, or expand to a file descriptor for log
+messages. By default, @code{AS_INIT} sets this macro to the empty
+string for standalone M4sh clients, thus disabling logging. However,
+@code{AC_INIT} shuffles things around so that both @command{configure}
+and @command{config.status} use @file{config.log} for log messages.
+Macros that run tools, like @code{AC_COMPILE_IFELSE} (@pxref{Running the
+Compiler}), redirect all output to this descriptor. You may want to do
+so if you develop such a low-level macro.
+@end defmac
+
+@defmac AS_ORIGINAL_STDIN_FD
+@asindex{ORIGINAL_STDIN_FD}
+This must expand to a file descriptor for the original standard input.
+By default, @code{AS_INIT} sets this macro to @samp{0} for standalone
+M4sh clients. However, @code{AC_INIT} shuffles things around for
+safety.
+
+When @command{configure} runs, it may accidentally execute an
+interactive command that has the same name as the non-interactive meant
+to be used or checked. If the standard input was the terminal, such
+interactive programs would cause @command{configure} to stop, pending
+some user input. Therefore @command{configure} redirects its standard
+input from @file{/dev/null} during its initialization. This is not
+normally a problem, since @command{configure} normally does not need
+user input.
+
+In the extreme case where your @file{configure} script really needs to
+obtain some values from the original standard input, you can read them
+explicitly from @code{AS_ORIGINAL_STDIN_FD}.
+@end defmac
+
+
+@c =================================================== Writing Autoconf Macros.
+
+@node Writing Autoconf Macros
+@chapter Writing Autoconf Macros
+
+When you write a feature test that could be applicable to more than one
+software package, the best thing to do is encapsulate it in a new macro.
+Here are some instructions and guidelines for writing Autoconf macros.
+
+@menu
+* Macro Definitions:: Basic format of an Autoconf macro
+* Macro Names:: What to call your new macros
+* Reporting Messages:: Notifying @command{autoconf} users
+* Dependencies Between Macros:: What to do when macros depend on other macros
+* Obsoleting Macros:: Warning about old ways of doing things
+* Coding Style:: Writing Autoconf macros @`a la Autoconf
+@end menu
+
+@node Macro Definitions
+@section Macro Definitions
+
+@defmac AC_DEFUN (@var{name}, @ovar{body})
+@acindex{DEFUN}
+Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
+similar to the M4 builtin @code{m4_define} macro; this creates a macro
+named @var{name} and with @var{body} as its expansion. In addition to
+defining a macro, @code{AC_DEFUN} adds to it some code that is used to
+constrain the order in which macros are called, while avoiding redundant
+output (@pxref{Prerequisite Macros}).
+@end defmac
+
+An Autoconf macro definition looks like this:
+
+@example
+AC_DEFUN(@var{macro-name}, @var{macro-body})
+@end example
+
+You can refer to any arguments passed to the macro as @samp{$1},
+@samp{$2}, etc. @xref{Definitions, , How to define new macros, m4.info,
+GNU M4}, for more complete information on writing M4 macros.
+
+Most macros fall in one of two general categories. The first category
+includes macros which take arguments, in order to generate output
+parameterized by those arguments. Macros in this category are designed
+to be directly expanded, often multiple times, and should not be used as
+the argument to @code{AC_REQUIRE}. The other category includes macros
+which are shorthand for a fixed block of text, and therefore do not take
+arguments. For this category of macros, directly expanding the macro
+multiple times results in redundant output, so it is more common to use
+the macro as the argument to @code{AC_REQUIRE}, or to declare the macro
+with @code{AC_DEFUN_ONCE} (@pxref{One-Shot Macros}).
+
+Be sure to properly quote both the @var{macro-body} @emph{and} the
+@var{macro-name} to avoid any problems if the macro happens to have
+been previously defined.
+
+Each macro should have a header comment that gives its prototype, and a
+brief description. When arguments have default values, display them in
+the prototype. For example:
+
+@example
+# AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
+# --------------------------------------
+m4_define([AC_MSG_ERROR],
+ [@{ AS_MESSAGE([error: $1], [2])
+ exit m4_default([$2], [1]); @}])
+@end example
+
+Comments about the macro should be left in the header comment. Most
+other comments make their way into @file{configure}, so just keep
+using @samp{#} to introduce comments.
+
+@cindex @code{dnl}
+If you have some special comments about pure M4 code, comments
+that make no sense in @file{configure} and in the header comment, then
+use the builtin @code{dnl}: it causes M4 to discard the text
+through the next newline.
+
+Keep in mind that @code{dnl} is rarely needed to introduce comments;
+@code{dnl} is more useful to get rid of the newlines following macros
+that produce no output, such as @code{AC_REQUIRE}.
+
+Public third-party macros need to use @code{AC_DEFUN}, and not
+@code{m4_define}, in order to be found by @command{aclocal}
+(@pxref{Extending aclocal,,, automake, GNU Automake}).
+Additionally, if it is ever determined that a macro should be made
+obsolete, it is easy to convert from @code{AC_DEFUN} to @code{AU_DEFUN}
+in order to have @command{autoupdate} assist the user in choosing a
+better alternative, but there is no corresponding way to make
+@code{m4_define} issue an upgrade notice (@pxref{AU_DEFUN}).
+
+There is another subtle, but important, difference between using
+@code{m4_define} and @code{AC_DEFUN}: only the former is unaffected by
+@code{AC_REQUIRE}. When writing a file, it is always safe to replace a
+block of text with a @code{m4_define} macro that will expand to the same
+text. But replacing a block of text with an @code{AC_DEFUN} macro with
+the same content does not necessarily give the same results, because it
+changes the location where any embedded but unsatisfied
+@code{AC_REQUIRE} invocations within the block will be expanded. For an
+example of this, see @ref{Expanded Before Required}.
+
+@node Macro Names
+@section Macro Names
+
+All of the public Autoconf macros have all-uppercase names in the
+namespace @samp{^AC_} to prevent them from accidentally conflicting with
+other text; Autoconf also reserves the namespace @samp{^_AC_} for
+internal macros. All shell variables that they use for internal
+purposes have mostly-lowercase names starting with @samp{ac_}. Autoconf
+also uses here-document delimiters in the namespace @samp{^_AC[A-Z]}. During
+@command{configure}, files produced by Autoconf make heavy use of the
+file system namespace @samp{^conf}.
+
+Since Autoconf is built on top of M4sugar (@pxref{Programming in
+M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
+of those namespaces (@samp{^_?\(m4\|AS\)_}). And since
+@file{configure.ac} is also designed to be scanned by Autoheader,
+Autoscan, Autoupdate, and Automake, you should be aware of the
+@samp{^_?A[HNUM]_} namespaces. In general, you @emph{should not use}
+the namespace of a package that does not own the macro or shell code you
+are writing.
+
+To ensure that your macros don't conflict with present or future
+Autoconf macros, you should prefix your own macro names and any shell
+variables they use with some other sequence. Possibilities include your
+initials, or an abbreviation for the name of your organization or
+software package. Historically, people have not always followed the
+rule of using a namespace appropriate for their package, and this has
+made it difficult for determining the origin of a macro (and where to
+report bugs about that macro), as well as difficult for the true
+namespace owner to add new macros without interference from pre-existing
+uses of third-party macros. Perhaps the best example of this confusion
+is the @code{AM_GNU_GETTEXT} macro, which belongs, not to Automake, but
+to Gettext.
+
+Most of the Autoconf macros' names follow a structured naming convention
+that indicates the kind of feature check by the name. The macro names
+consist of several words, separated by underscores, going from most
+general to most specific. The names of their cache variables use the
+same convention (@pxref{Cache Variable Names}, for more information on
+them).
+
+The first word of the name after the namespace initials (such as
+@samp{AC_}) usually tells the category
+of the feature being tested. Here are the categories used in Autoconf for
+specific test macros, the kind of macro that you are more likely to
+write. They are also used for cache variables, in all-lowercase. Use
+them where applicable; where they're not, invent your own categories.
+
+@table @code
+@item C
+C language builtin features.
+@item DECL
+Declarations of C variables in header files.
+@item FUNC
+Functions in libraries.
+@item GROUP
+Posix group owners of files.
+@item HEADER
+Header files.
+@item LIB
+C libraries.
+@item PROG
+The base names of programs.
+@item MEMBER
+Members of aggregates.
+@item SYS
+Operating system features.
+@item TYPE
+C builtin or declared types.
+@item VAR
+C variables in libraries.
+@end table
+
+After the category comes the name of the particular feature being
+tested. Any further words in the macro name indicate particular aspects
+of the feature. For example, @code{AC_PROG_CC_STDC} checks whether the
+C compiler supports ISO Standard C.
+
+An internal macro should have a name that starts with an underscore;
+Autoconf internals should therefore start with @samp{_AC_}.
+Additionally, a macro that is an internal subroutine of another macro
+should have a name that starts with an underscore and the name of that
+other macro, followed by one or more words saying what the internal
+macro does. For example, @code{AC_PATH_X} has internal macros
+@code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
+
+@node Reporting Messages
+@section Reporting Messages
+@cindex Messages, from @command{autoconf}
+
+When macros statically diagnose abnormal situations, benign or fatal, it
+is possible to make @command{autoconf} detect the problem, and refuse to
+create @file{configure} in the case of an error. The macros in this
+section are considered obsolescent, and new code should use M4sugar
+macros for this purpose, see @ref{Diagnostic Macros}.
+
+On the other hand, it is possible to want to detect errors when
+@command{configure} is run, which are dependent on the environment of
+the user rather than the maintainer. For dynamic diagnostics, see
+@ref{Printing Messages}.
+
+@defmac AC_DIAGNOSE (@var{category}, @var{message})
+@acindex{DIAGNOSE}
+Report @var{message} as a warning (or as an error if requested by the
+user) if warnings of the @var{category} are turned on. This macro is
+obsolescent; you are encouraged to use:
+@example
+m4_warn([@var{category}], [@var{message}])
+@end example
+@noindent
+instead. @xref{m4_warn}, for more details, including valid
+@var{category} names.
+@end defmac
+
+@defmac AC_WARNING (@var{message})
+@acindex{WARNING}
+Report @var{message} as a syntax warning. This macro is obsolescent;
+you are encouraged to use:
+@example
+m4_warn([syntax], [@var{message}])
+@end example
+@noindent
+instead. @xref{m4_warn}, for more details, as well as better
+finer-grained categories of warnings (not all problems have to do with
+syntax).
+@end defmac
+
+@defmac AC_FATAL (@var{message})
+@acindex{FATAL}
+Report a severe error @var{message}, and have @command{autoconf} die.
+This macro is obsolescent; you are encouraged to use:
+@example
+m4_fatal([@var{message}])
+@end example
+@noindent
+instead. @xref{m4_fatal}, for more details.
+@end defmac
+
+When the user runs @samp{autoconf -W error}, warnings from
+@code{m4_warn} (including those issued through @code{AC_DIAGNOSE} and
+@code{AC_WARNING}) are reported as errors, see @ref{autoconf Invocation}.
+
+@node Dependencies Between Macros
+@section Dependencies Between Macros
+@cindex Dependencies between macros
+
+Some Autoconf macros depend on other macros having been called first in
+order to work correctly. Autoconf provides a way to ensure that certain
+macros are called if needed and a way to warn the user if macros are
+called in an order that might cause incorrect operation.
+
+@menu
+* Prerequisite Macros:: Ensuring required information
+* Suggested Ordering:: Warning about possible ordering problems
+* One-Shot Macros:: Ensuring a macro is called only once
+@end menu
+
+@node Prerequisite Macros
+@subsection Prerequisite Macros
+@cindex Prerequisite macros
+@cindex Macros, prerequisites
+
+A macro that you write might need to use values that have previously
+been computed by other macros. For example, @code{AC_DECL_YYTEXT}
+examines the output of @code{flex} or @code{lex}, so it depends on
+@code{AC_PROG_LEX} having been called first to set the shell variable
+@code{LEX}.
+
+Rather than forcing the user of the macros to keep track of the
+dependencies between them, you can use the @code{AC_REQUIRE} macro to do
+it automatically. @code{AC_REQUIRE} can ensure that a macro is only
+called if it is needed, and only called once.
+
+@defmac AC_REQUIRE (@var{macro-name})
+@acindex{REQUIRE}
+If the M4 macro @var{macro-name} has not already been called, call it
+(without any arguments). Make sure to quote @var{macro-name} with
+square brackets. @var{macro-name} must have been defined using
+@code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
+that it has been called.
+
+@code{AC_REQUIRE} must be used inside a macro defined by @code{AC_DEFUN}; it
+must not be called from the top level. Also, it does not make sense to
+require a macro that takes parameters.
+@end defmac
+
+@code{AC_REQUIRE} is often misunderstood. It really implements
+dependencies between macros in the sense that if one macro depends upon
+another, the latter is expanded @emph{before} the body of the
+former. To be more precise, the required macro is expanded before
+the outermost defined macro in the current expansion stack.
+In particular, @samp{AC_REQUIRE([FOO])} is not replaced with the body of
+@code{FOO}. For instance, this definition of macros:
+
+@example
+@group
+AC_DEFUN([TRAVOLTA],
+[test "$body_temperature_in_celsius" -gt "38" &&
+ dance_floor=occupied])
+AC_DEFUN([NEWTON_JOHN],
+[test "x$hair_style" = xcurly &&
+ dance_floor=occupied])
+@end group
+
+@group
+AC_DEFUN([RESERVE_DANCE_FLOOR],
+[if date | grep '^Sat.*pm' >/dev/null 2>&1; then
+ AC_REQUIRE([TRAVOLTA])
+ AC_REQUIRE([NEWTON_JOHN])
+fi])
+@end group
+@end example
+
+@noindent
+with this @file{configure.ac}
+
+@example
+AC_INIT([Dance Manager], [1.0], [bug-dance@@example.org])
+RESERVE_DANCE_FLOOR
+if test "x$dance_floor" = xoccupied; then
+ AC_MSG_ERROR([cannot pick up here, let's move])
+fi
+@end example
+
+@noindent
+does not leave you with a better chance to meet a kindred soul at
+other times than Saturday night since it expands into:
+
+@example
+@group
+test "$body_temperature_in_Celsius" -gt "38" &&
+ dance_floor=occupied
+test "x$hair_style" = xcurly &&
+ dance_floor=occupied
+fi
+if date | grep '^Sat.*pm' >/dev/null 2>&1; then
+
+
+fi
+@end group
+@end example
+
+This behavior was chosen on purpose: (i) it prevents messages in
+required macros from interrupting the messages in the requiring macros;
+(ii) it avoids bad surprises when shell conditionals are used, as in:
+
+@example
+@group
+if @dots{}; then
+ AC_REQUIRE([SOME_CHECK])
+fi
+@dots{}
+SOME_CHECK
+@end group
+@end example
+
+However, this implementation can lead to another class of problems.
+Consider the case where an outer macro first expands, then indirectly
+requires, an inner macro:
+
+@example
+AC_DEFUN([TESTA], [[echo in A
+if test -n "$SEEN_A" ; then echo duplicate ; fi
+SEEN_A=:]])
+AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
+if test -z "$SEEN_A" ; then echo bug ; fi]])
+AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+AC_DEFUN([OUTER], [[echo in OUTER]
+TESTA
+TESTC])
+OUTER
+@end example
+
+@noindent
+Prior to Autoconf 2.64, the implementation of @code{AC_REQUIRE}
+recognized that @code{TESTB} needed to be hoisted prior to the expansion
+of @code{OUTER}, but because @code{TESTA} had already been directly
+expanded, it failed to hoist @code{TESTA}. Therefore, the expansion of
+@code{TESTB} occurs prior to its prerequisites, leading to the following
+output:
+
+@example
+in B
+bug
+in OUTER
+in A
+in C
+@end example
+
+@noindent
+Newer Autoconf is smart enough to recognize this situation, and hoists
+@code{TESTA} even though it has already been expanded, but issues a
+syntax warning in the process. This is because the hoisted expansion of
+@code{TESTA} defeats the purpose of using @code{AC_REQUIRE} to avoid
+redundant code, and causes its own set of problems if the hoisted macro
+is not idempotent:
+
+@example
+in A
+in B
+in OUTER
+in A
+duplicate
+in C
+@end example
+
+The bug is not in Autoconf, but in the macro definitions. If you ever
+pass a particular macro name to @code{AC_REQUIRE}, then you are implying
+that the macro only needs to be expanded once. But to enforce this,
+either the macro must be declared with @code{AC_DEFUN_ONCE} (although
+this only helps in Autoconf 2.64 or newer), or all
+uses of that macro should be through @code{AC_REQUIRE}; directly
+expanding the macro defeats the point of using @code{AC_REQUIRE} to
+eliminate redundant expansion. In the example, this rule of thumb was
+violated because @code{TESTB} requires @code{TESTA} while @code{OUTER}
+directly expands it. One way of fixing the bug is to factor
+@code{TESTA} into two macros, the portion designed for direct and
+repeated use (here, named @code{TESTA}), and the portion designed for
+one-shot output and used only inside @code{AC_REQUIRE} (here, named
+@code{TESTA_PREREQ}). Then, by fixing all clients to use the correct
+calling convention according to their needs:
+
+@example
+AC_DEFUN([TESTA], [AC_REQUIRE([TESTA_PREREQ])[echo in A]])
+AC_DEFUN([TESTA_PREREQ], [[echo in A_PREREQ
+if test -n "$SEEN_A" ; then echo duplicate ; fi
+SEEN_A=:]])
+AC_DEFUN([TESTB], [AC_REQUIRE([TESTA_PREREQ])[echo in B
+if test -z "$SEEN_A" ; then echo bug ; fi]])
+AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+AC_DEFUN([OUTER], [[echo in OUTER]
+TESTA
+TESTC])
+OUTER
+@end example
+
+@noindent
+the resulting output will then obey all dependency rules and avoid any
+syntax warnings, whether the script is built with old or new Autoconf
+versions:
+
+@example
+in A_PREREQ
+in B
+in OUTER
+in A
+in C
+@end example
+
+The helper macros @code{AS_IF} and @code{AS_CASE} may be used to
+enforce expansion of required macros outside of shell conditional
+constructs. You are furthermore encouraged, although not required, to
+put all @code{AC_REQUIRE} calls
+at the beginning of a macro. You can use @code{dnl} to avoid the empty
+lines they leave.
+
+@node Suggested Ordering
+@subsection Suggested Ordering
+@cindex Macros, ordering
+@cindex Ordering macros
+
+Some macros should be run before another macro if both are called, but
+neither @emph{requires} that the other be called. For example, a macro
+that changes the behavior of the C compiler should be called before any
+macros that run the C compiler. Many of these dependencies are noted in
+the documentation.
+
+Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
+with this kind of dependency appear out of order in a
+@file{configure.ac} file. The warning occurs when creating
+@command{configure} from @file{configure.ac}, not when running
+@command{configure}.
+
+For example, @code{AC_PROG_CPP} checks whether the C compiler
+can run the C preprocessor when given the @option{-E} option. It should
+therefore be called after any macros that change which C compiler is
+being used, such as @code{AC_PROG_CC}. So @code{AC_PROG_CC} contains:
+
+@example
+AC_BEFORE([$0], [AC_PROG_CPP])dnl
+@end example
+
+@noindent
+This warns the user if a call to @code{AC_PROG_CPP} has already occurred
+when @code{AC_PROG_CC} is called.
+
+@defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
+@acindex{BEFORE}
+Make M4 print a warning message to the standard error output if
+@var{called-macro-name} has already been called. @var{this-macro-name}
+should be the name of the macro that is calling @code{AC_BEFORE}. The
+macro @var{called-macro-name} must have been defined using
+@code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
+that it has been called.
+@end defmac
+
+@node One-Shot Macros
+@subsection One-Shot Macros
+@cindex One-shot macros
+@cindex Macros, called once
+
+Some macros should be called only once, either because calling them
+multiple time is unsafe, or because it is bad style. For instance
+Autoconf ensures that @code{AC_CANONICAL_BUILD} and cousins
+(@pxref{Canonicalizing}) are evaluated only once, because it makes no
+sense to run these expensive checks more than once. Such one-shot
+macros can be defined using @code{AC_DEFUN_ONCE}.
+
+@defmac AC_DEFUN_ONCE (@var{macro-name}, @var{macro-body})
+@acindex{DEFUN_ONCE}
+Declare macro @var{macro-name} like @code{AC_DEFUN} would (@pxref{Macro
+Definitions}), but add additional logic that guarantees that only the
+first use of the macro (whether by direct expansion or
+@code{AC_REQUIRE}) causes an expansion of @var{macro-body}; the
+expansion will occur before the start of any enclosing macro defined by
+@code{AC_DEFUN}. Subsequent expansions are silently ignored.
+Generally, it does not make sense for @var{macro-body} to use parameters
+such as @code{$1}.
+@end defmac
+
+Prior to Autoconf 2.64, a macro defined by @code{AC_DEFUN_ONCE} would
+emit a warning if it was directly expanded a second time, so for
+portability, it is better to use @code{AC_REQUIRE} than direct
+invocation of @var{macro-name} inside a macro defined by @code{AC_DEFUN}
+(@pxref{Prerequisite Macros}).
+
+@node Obsoleting Macros
+@section Obsoleting Macros
+@cindex Obsoleting macros
+@cindex Macros, obsoleting
+
+Configuration and portability technology has evolved over the years.
+Often better ways of solving a particular problem are developed, or
+ad-hoc approaches are systematized. This process has occurred in many
+parts of Autoconf. One result is that some of the macros are now
+considered @dfn{obsolete}; they still work, but are no longer considered
+the best thing to do, hence they should be replaced with more modern
+macros. Ideally, @command{autoupdate} should replace the old macro calls
+with their modern implementation.
+
+Autoconf provides a simple means to obsolete a macro.
+
+@anchor{AU_DEFUN}
+@defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
+@auindex{DEFUN}
+Define @var{old-macro} as @var{implementation}. The only difference
+with @code{AC_DEFUN} is that the user is warned that
+@var{old-macro} is now obsolete.
+
+If she then uses @command{autoupdate}, the call to @var{old-macro} is
+replaced by the modern @var{implementation}. @var{message} should
+include information on what to do after running @command{autoupdate};
+@command{autoupdate} prints it as a warning, and includes it
+in the updated @file{configure.ac} file.
+
+The details of this macro are hairy: if @command{autoconf} encounters an
+@code{AU_DEFUN}ed macro, all macros inside its second argument are expanded
+as usual. However, when @command{autoupdate} is run, only M4 and M4sugar
+macros are expanded here, while all other macros are disabled and
+appear literally in the updated @file{configure.ac}.
+@end defmac
+
+@defmac AU_ALIAS (@var{old-name}, @var{new-name})
+@auindex{ALIAS}
+Used if the @var{old-name} is to be replaced by a call to @var{new-macro}
+with the same parameters. This happens for example if the macro was renamed.
+@end defmac
+
+@node Coding Style
+@section Coding Style
+@cindex Coding style
+
+The Autoconf macros follow a strict coding style. You are encouraged to
+follow this style, especially if you intend to distribute your macro,
+either by contributing it to Autoconf itself or the
+@uref{http://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
+Archive}, or by other means.
+
+The first requirement is to pay great attention to the quotation. For
+more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
+
+Do not try to invent new interfaces. It is likely that there is a macro
+in Autoconf that resembles the macro you are defining: try to stick to
+this existing interface (order of arguments, default values, etc.). We
+@emph{are} conscious that some of these interfaces are not perfect;
+nevertheless, when harmless, homogeneity should be preferred over
+creativity.
+
+Be careful about clashes both between M4 symbols and between shell
+variables.
+
+If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
+you are unlikely to generate conflicts. Nevertheless, when you need to
+set a special value, @emph{avoid using a regular macro name}; rather,
+use an ``impossible'' name. For instance, up to version 2.13, the macro
+@code{AC_SUBST} used to remember what @var{symbol} macros were already defined
+by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
+But since there is a macro named @code{AC_SUBST_FILE}, it was just
+impossible to @samp{AC_SUBST(FILE)}! In this case,
+@code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
+have been used (yes, with the parentheses).
+@c or better yet, high-level macros such as @code{m4_expand_once}
+
+No Autoconf macro should ever enter the user-variable name space; i.e.,
+except for the variables that are the actual result of running the
+macro, all shell variables should start with @code{ac_}. In
+addition, small macros or any macro that is likely to be embedded in
+other macros should be careful not to use obvious names.
+
+@cindex @code{dnl}
+Do not use @code{dnl} to introduce comments: most of the comments you
+are likely to write are either header comments which are not output
+anyway, or comments that should make their way into @file{configure}.
+There are exceptional cases where you do want to comment special M4
+constructs, in which case @code{dnl} is right, but keep in mind that it
+is unlikely.
+
+M4 ignores the leading blanks and newlines before each argument.
+Use this feature to
+indent in such a way that arguments are (more or less) aligned with the
+opening parenthesis of the macro being called. For instance, instead of
+
+@example
+AC_CACHE_CHECK(for EMX OS/2 environment,
+ac_cv_emxos2,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
+[ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
+@end example
+
+@noindent
+write
+
+@example
+AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+@end example
+
+@noindent
+or even
+
+@example
+AC_CACHE_CHECK([for EMX OS/2 environment],
+ [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+ [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+@end example
+
+When using @code{AC_RUN_IFELSE} or any macro that cannot work when
+cross-compiling, provide a pessimistic value (typically @samp{no}).
+
+Feel free to use various tricks to prevent auxiliary tools, such as
+syntax-highlighting editors, from behaving improperly. For instance,
+instead of:
+
+@example
+m4_bpatsubst([$1], [$"])
+@end example
+
+@noindent
+use
+
+@example
+m4_bpatsubst([$1], [$""])
+@end example
+
+@noindent
+so that Emacsen do not open an endless ``string'' at the first quote.
+For the same reasons, avoid:
+
+@example
+test $[#] != 0
+@end example
+
+@noindent
+and use:
+
+@example
+test $[@@%:@@] != 0
+@end example
+
+@noindent
+Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
+breaking the bracket-matching highlighting from Emacsen. Note the
+preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc. Do
+not escape when it is unnecessary. Common examples of useless quotation
+are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
+etc. If you add portability issues to the picture, you'll prefer
+@samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
+better than hacking Autoconf @code{:-)}.
+
+When using @command{sed}, don't use @option{-e} except for indenting
+purposes. With the @code{s} and @code{y} commands, the preferred
+separator is @samp{/} unless @samp{/} itself might appear in the pattern
+or replacement, in which case you should use @samp{|}, or optionally
+@samp{,} if you know the pattern and replacement cannot contain a file
+name. If none of these characters will do, choose a printable character
+that cannot appear in the pattern or replacement. Characters from the
+set @samp{"#$&'()*;<=>?`|~} are good choices if the pattern or
+replacement might contain a file name, since they have special meaning
+to the shell and are less likely to occur in file names.
+
+@xref{Macro Definitions}, for details on how to define a macro. If a
+macro doesn't use @code{AC_REQUIRE}, is expected to never be the object
+of an @code{AC_REQUIRE} directive, and macros required by other macros
+inside arguments do not need to be expanded before this macro, then
+use @code{m4_define}. In case of doubt, use @code{AC_DEFUN}.
+Also take into account that public third-party macros need to use
+@code{AC_DEFUN} in order to be found by @command{aclocal}
+(@pxref{Extending aclocal,,, automake, GNU Automake}).
+All the @code{AC_REQUIRE} statements should be at the beginning of the
+macro, and each statement should be followed by @code{dnl}.
+
+You should not rely on the number of arguments: instead of checking
+whether an argument is missing, test that it is not empty. It provides
+both a simpler and a more predictable interface to the user, and saves
+room for further arguments.
+
+Unless the macro is short, try to leave the closing @samp{])} at the
+beginning of a line, followed by a comment that repeats the name of the
+macro being defined. This introduces an additional newline in
+@command{configure}; normally, that is not a problem, but if you want to
+remove it you can use @samp{[]dnl} on the last line. You can similarly
+use @samp{[]dnl} after a macro call to remove its newline. @samp{[]dnl}
+is recommended instead of @samp{dnl} to ensure that M4 does not
+interpret the @samp{dnl} as being attached to the preceding text or
+macro output. For example, instead of:
+
+@example
+AC_DEFUN([AC_PATH_X],
+[AC_MSG_CHECKING([for X])
+AC_REQUIRE_CPP()
+@r{# @dots{}omitted@dots{}}
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+fi])
+@end example
+
+@noindent
+you would write:
+
+@example
+AC_DEFUN([AC_PATH_X],
+[AC_REQUIRE_CPP()[]dnl
+AC_MSG_CHECKING([for X])
+@r{# @dots{}omitted@dots{}}
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+fi[]dnl
+])# AC_PATH_X
+@end example
+
+If the macro is long, try to split it into logical chunks. Typically,
+macros that check for a bug in a function and prepare its
+@code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
+this setup. Do not hesitate to introduce auxiliary macros to factor
+your code.
+
+In order to highlight the recommended coding style, here is a macro
+written the old way:
+
+@example
+dnl Check for EMX on OS/2.
+dnl _AC_EMXOS2
+AC_DEFUN(_AC_EMXOS2,
+[AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
+ac_cv_emxos2=yes, ac_cv_emxos2=no)])
+test "x$ac_cv_emxos2" = xyes && EMXOS2=yes])
+@end example
+
+@noindent
+and the new way:
+
+@example
+# _AC_EMXOS2
+# ----------
+# Check for EMX on OS/2.
+m4_define([_AC_EMXOS2],
+[AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+ [ac_cv_emxos2=yes],
+ [ac_cv_emxos2=no])])
+test "x$ac_cv_emxos2" = xyes && EMXOS2=yes[]dnl
+])# _AC_EMXOS2
+@end example
+
+
+
+
+@c ============================================= Portable Shell Programming
+
+@node Portable Shell
+@chapter Portable Shell Programming
+@cindex Portable shell programming
+
+When writing your own checks, there are some shell-script programming
+techniques you should avoid in order to make your code portable. The
+Bourne shell and upward-compatible shells like the Korn shell and Bash
+have evolved over the years, and many features added to the original
+System7 shell are now supported on all interesting porting targets.
+However, the following discussion between Russ Allbery and Robert Lipe
+is worth reading:
+
+@noindent
+Russ Allbery:
+
+@quotation
+The GNU assumption that @command{/bin/sh} is the one and only shell
+leads to a permanent deadlock. Vendors don't want to break users'
+existing shell scripts, and there are some corner cases in the Bourne
+shell that are not completely compatible with a Posix shell. Thus,
+vendors who have taken this route will @emph{never} (OK@dots{}``never say
+never'') replace the Bourne shell (as @command{/bin/sh}) with a
+Posix shell.
+@end quotation
+
+@noindent
+Robert Lipe:
+
+@quotation
+This is exactly the problem. While most (at least most System V's) do
+have a Bourne shell that accepts shell functions most vendor
+@command{/bin/sh} programs are not the Posix shell.
+
+So while most modern systems do have a shell @emph{somewhere} that meets the
+Posix standard, the challenge is to find it.
+@end quotation
+
+For this reason, part of the job of M4sh (@pxref{Programming in M4sh})
+is to find such a shell. But to prevent trouble, if you're not using
+M4sh you should not take advantage of features that were added after Unix
+version 7, circa 1977 (@pxref{Systemology}); you should not use aliases,
+negated character classes, or even @command{unset}. @code{#} comments,
+while not in Unix version 7, were retrofitted in the original Bourne
+shell and can be assumed to be part of the least common denominator.
+
+On the other hand, if you're using M4sh you can assume that the shell
+has the features that were added in SVR2 (circa 1984), including shell
+functions,
+@command{return}, @command{unset}, and I/O redirection for builtins. For
+more information, refer to @uref{http://@/www.in-ulm.de/@/~mascheck/@/bourne/}.
+However, some pitfalls have to be avoided for portable use of these
+constructs; these will be documented in the rest of this chapter.
+See in particular @ref{Shell Functions} and @ref{Limitations of
+Builtins, , Limitations of Shell Builtins}.
+
+Some ancient systems have quite
+small limits on the length of the @samp{#!} line; for instance, 32
+bytes (not including the newline) on SunOS 4.
+However, these ancient systems are no longer of practical concern.
+
+The set of external programs you should run in a @command{configure} script
+is fairly small. @xref{Utilities in Makefiles, , Utilities in
+Makefiles, standards, The GNU Coding Standards}, for the list. This
+restriction allows users to start out with a fairly small set of
+programs and build the rest, avoiding too many interdependencies between
+packages.
+
+Some of these external utilities have a portable subset of features; see
+@ref{Limitations of Usual Tools}.
+
+There are other sources of documentation about shells. The
+specification for the Posix
+@uref{http://@/www.opengroup.org/@/susv3/@/utilities/@/xcu_chap02@/.html, Shell
+Command Language}, though more generous than the restrictive shell
+subset described above, is fairly portable nowadays. Also please see
+@uref{http://@/www.faqs.org/@/faqs/@/unix-faq/@/shell/, the Shell FAQs}.
+
+@menu
+* Shellology:: A zoology of shells
+* Invoking the Shell:: Invoking the shell as a command
+* Here-Documents:: Quirks and tricks
+* File Descriptors:: FDs and redirections
+* Signal Handling:: Shells, signals, and headaches
+* File System Conventions:: File names
+* Shell Pattern Matching:: Pattern matching
+* Shell Substitutions:: Variable and command expansions
+* Assignments:: Varying side effects of assignments
+* Parentheses:: Parentheses in shell scripts
+* Slashes:: Slashes in shell scripts
+* Special Shell Variables:: Variables you should not change
+* Shell Functions:: What to look out for if you use them
+* Limitations of Builtins:: Portable use of not so portable /bin/sh
+* Limitations of Usual Tools:: Portable use of portable tools
+@end menu
+
+@node Shellology
+@section Shellology
+@cindex Shellology
+
+There are several families of shells, most prominently the Bourne family
+and the C shell family which are deeply incompatible. If you want to
+write portable shell scripts, avoid members of the C shell family. The
+@uref{http://@/www.faqs.org/@/faqs/@/unix-faq/@/shell/@/shell-differences/, the
+Shell difference FAQ} includes a small history of Posix shells, and a
+comparison between several of them.
+
+Below we describe some of the members of the Bourne shell family.
+
+@table @asis
+@item Ash
+@cindex Ash
+Ash is often used on GNU/Linux and BSD
+systems as a light-weight Bourne-compatible shell. Ash 0.2 has some
+bugs that are fixed in the 0.3.x series, but portable shell scripts
+should work around them, since version 0.2 is still shipped with many
+GNU/Linux distributions.
+
+To be compatible with Ash 0.2:
+
+@itemize @minus
+@item
+don't use @samp{$?} after expanding empty or unset variables,
+or at the start of an @command{eval}:
+
+@example
+foo=
+false
+$foo
+echo "Do not use it: $?"
+false
+eval 'echo "Do not use it: $?"'
+@end example
+
+@item
+don't use command substitution within variable expansion:
+
+@example
+cat $@{FOO=`bar`@}
+@end example
+
+@item
+beware that single builtin substitutions are not performed by a
+subshell, hence their effect applies to the current shell! @xref{Shell
+Substitutions}, item ``Command Substitution''.
+@end itemize
+
+@item Bash
+@cindex Bash
+To detect whether you are running Bash, test whether
+@code{BASH_VERSION} is set. To require
+Posix compatibility, run @samp{set -o posix}. @xref{Bash POSIX
+Mode, , Bash Posix Mode, bash, The GNU Bash Reference
+Manual}, for details.
+
+@item Bash 2.05 and later
+@cindex Bash 2.05 and later
+Versions 2.05 and later of Bash use a different format for the
+output of the @command{set} builtin, designed to make evaluating its
+output easier. However, this output is not compatible with earlier
+versions of Bash (or with many other shells, probably). So if
+you use Bash 2.05 or higher to execute @command{configure},
+you'll need to use Bash 2.05 for all other build tasks as well.
+
+@item Ksh
+@cindex Ksh
+@cindex Korn shell
+@prindex @samp{ksh}
+@prindex @samp{ksh88}
+@prindex @samp{ksh93}
+The Korn shell is compatible with the Bourne family and it mostly
+conforms to Posix. It has two major variants commonly
+called @samp{ksh88} and @samp{ksh93}, named after the years of initial
+release. It is usually called @command{ksh}, but is called @command{sh}
+on some hosts if you set your path appropriately.
+
+Solaris systems have three variants:
+@prindex @command{/usr/bin/ksh} on Solaris
+@command{/usr/bin/ksh} is @samp{ksh88}; it is
+standard on Solaris 2.0 and later.
+@prindex @command{/usr/xpg4/bin/sh} on Solaris
+@command{/usr/xpg4/bin/sh} is a Posix-compliant variant of
+@samp{ksh88}; it is standard on Solaris 9 and later.
+@prindex @command{/usr/dt/bin/dtksh} on Solaris
+@command{/usr/dt/bin/dtksh} is @samp{ksh93}.
+Variants that are not standard may be parts of optional
+packages. There is no extra charge for these packages, but they are
+not part of a minimal OS install and therefore some installations may
+not have it.
+
+Starting with Tru64 Version 4.0, the Korn shell @command{/usr/bin/ksh}
+is also available as @command{/usr/bin/posix/sh}. If the environment
+variable @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
+the standard shell conform to Posix.
+
+@item Pdksh
+@prindex @samp{pdksh}
+A public-domain clone of the Korn shell called @command{pdksh} is widely
+available: it has most of the @samp{ksh88} features along with a few of
+its own. It usually sets @code{KSH_VERSION}, except if invoked as
+@command{/bin/sh} on OpenBSD, and similarly to Bash you can require
+Posix compatibility by running @samp{set -o posix}. Unfortunately, with
+@command{pdksh} 5.2.14 (the latest stable version as of January 2007)
+Posix mode is buggy and causes @command{pdksh} to depart from Posix in
+at least one respect, see @ref{Shell Substitutions}.
+
+@item Zsh
+@cindex Zsh
+To detect whether you are running @command{zsh}, test whether
+@code{ZSH_VERSION} is set. By default @command{zsh} is @emph{not}
+compatible with the Bourne shell: you must execute @samp{emulate sh},
+and for @command{zsh} versions before 3.1.6-dev-18 you must also
+set @code{NULLCMD} to @samp{:}. @xref{Compatibility, , Compatibility,
+zsh, The Z Shell Manual}, for details.
+
+The default Mac OS X @command{sh} was originally Zsh; it was changed to
+Bash in Mac OS X 10.2.
+@end table
+
+@node Invoking the Shell
+@section Invoking the Shell
+@cindex invoking the shell
+@cindex shell invocation
+
+The Korn shell (up to at least version M-12/28/93d) has a bug when
+invoked on a file whose name does not contain a slash. It first
+searches for the file's name in @env{PATH}, and if found it executes
+that rather than the original file. For example, assuming there is a
+binary executable @file{/usr/bin/script} in your @env{PATH}, the last
+command in the following example fails because the Korn shell finds
+@file{/usr/bin/script} and refuses to execute it as a shell script:
+
+@example
+$ @kbd{touch xxyzzyz script}
+$ @kbd{ksh xxyzzyz}
+$ @kbd{ksh ./script}
+$ @kbd{ksh script}
+ksh: script: cannot execute
+@end example
+
+Bash 2.03 has a bug when invoked with the @option{-c} option: if the
+option-argument ends in backslash-newline, Bash incorrectly reports a
+syntax error. The problem does not occur if a character follows the
+backslash:
+
+@example
+$ @kbd{$ bash -c 'echo foo \}
+> @kbd{'}
+bash: -c: line 2: syntax error: unexpected end of file
+$ @kbd{bash -c 'echo foo \}
+> @kbd{ '}
+foo
+@end example
+
+@noindent
+@xref{Backslash-Newline-Empty}, for how this can cause problems in makefiles.
+
+@node Here-Documents
+@section Here-Documents
+@cindex Here-documents
+@cindex Shell here-documents
+
+Don't rely on @samp{\} being preserved just because it has no special
+meaning together with the next symbol. In the native @command{sh}
+on OpenBSD 2.7 @samp{\"} expands to @samp{"} in here-documents with
+unquoted delimiter. As a general rule, if @samp{\\} expands to @samp{\}
+use @samp{\\} to get @samp{\}.
+
+With OpenBSD 2.7's @command{sh}
+
+@example
+@group
+$ @kbd{cat <<EOF
+> \" \\
+> EOF}
+" \
+@end group
+@end example
+
+@noindent
+and with Bash:
+
+@example
+@group
+bash-2.04$ @kbd{cat <<EOF
+> \" \\
+> EOF}
+\" \
+@end group
+@end example
+
+Using command substitutions in a here-document that is fed to a shell
+function is not portable. For example, with Solaris 10 @command{/bin/sh}:
+
+@example
+$ @kbd{kitty () @{ cat; @}}
+$ @kbd{kitty <<EOF
+> `echo ok`
+> EOF}
+/tmp/sh199886: cannot open
+$ @kbd{echo $?}
+1
+@end example
+
+Some shells mishandle large here-documents: for example,
+Solaris 10 @command{dtksh} and the UnixWare 7.1.1 Posix shell, which are
+derived from Korn shell version M-12/28/93d, mishandle braced variable
+expansion that crosses a 1024- or 4096-byte buffer boundary
+within a here-document. Only the part of the variable name after the boundary
+is used. For example, @code{$@{variable@}} could be replaced by the expansion
+of @code{$@{ble@}}. If the end of the variable name is aligned with the block
+boundary, the shell reports an error, as if you used @code{$@{@}}.
+Instead of @code{$@{variable-default@}}, the shell may expand
+@code{$@{riable-default@}}, or even @code{$@{fault@}}. This bug can often
+be worked around by omitting the braces: @code{$variable}. The bug was
+fixed in
+@samp{ksh93g} (1998-04-30) but as of 2006 many operating systems were
+still shipping older versions with the bug.
+
+Empty here-documents are not portable either; with the following code,
+@command{zsh} up to at least version 4.3.10 creates a file with a single
+newline, whereas other shells create an empty file:
+
+@example
+cat >file <<EOF
+EOF
+@end example
+
+Many shells (including the Bourne shell) implement here-documents
+inefficiently. In particular, some shells can be extremely inefficient when
+a single statement contains many here-documents. For instance if your
+@file{configure.ac} includes something like:
+
+@example
+@group
+if <cross_compiling>; then
+ assume this and that
+else
+ check this
+ check that
+ check something else
+ @dots{}
+ on and on forever
+ @dots{}
+fi
+@end group
+@end example
+
+A shell parses the whole @code{if}/@code{fi} construct, creating
+temporary files for each here-document in it. Some shells create links
+for such here-documents on every @code{fork}, so that the clean-up code
+they had installed correctly removes them. It is creating the links
+that can take the shell forever.
+
+Moving the tests out of the @code{if}/@code{fi}, or creating multiple
+@code{if}/@code{fi} constructs, would improve the performance
+significantly. Anyway, this kind of construct is not exactly the
+typical use of Autoconf. In fact, it's even not recommended, because M4
+macros can't look into shell conditionals, so we may fail to expand a
+macro when it was expanded before in a conditional path, and the
+condition turned out to be false at runtime, and we end up not
+executing the macro at all.
+
+Be careful with the use of @samp{<<-} to unindent here-documents. The
+behavior is only portable for stripping leading @key{TAB}s, and things
+can silently break if an overzealous editor converts to using leading
+spaces (not all shells are nice enough to warn about unterminated
+here-documents).
+
+@example
+$ @kbd{printf 'cat <<-x\n\t1\n\t 2\n\tx\n' | bash && echo done}
+1
+ 2
+done
+$ @kbd{printf 'cat <<-x\n 1\n 2\n x\n' | bash-3.2 && echo done}
+ 1
+ 2
+ x
+done
+@end example
+
+@node File Descriptors
+@section File Descriptors
+@cindex Descriptors
+@cindex File descriptors
+@cindex Shell file descriptors
+
+Most shells, if not all (including Bash, Zsh, Ash), output traces on
+stderr, even for subshells. This might result in undesirable content
+if you meant to capture the standard-error output of the inner command:
+
+@example
+$ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
+$ @kbd{cat stderr}
++ eval echo foo >&2
++ echo foo
+foo
+$ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
+$ @kbd{cat stderr}
++ eval 'echo foo >&2'
+++ echo foo
+foo
+$ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
+@i{# Traces on startup files deleted here.}
+$ @kbd{cat stderr}
++zsh:1> eval echo foo >&2
++zsh:1> echo foo
+foo
+@end example
+
+@noindent
+One workaround is to grep out uninteresting lines, hoping not to remove
+good ones.
+
+If you intend to redirect both standard error and standard output,
+redirect standard output first. This works better with HP-UX,
+since its shell mishandles tracing if standard error is redirected
+first:
+
+@example
+$ @kbd{sh -x -c ': 2>err >out'}
++ :
++ 2> err $ @kbd{cat err}
+1> out
+@end example
+
+Don't try to redirect the standard error of a command substitution. It
+must be done @emph{inside} the command substitution. When running
+@samp{: `cd /zorglub` 2>/dev/null} expect the error message to
+escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
+
+On the other hand, some shells, such as Solaris or FreeBSD
+@command{/bin/sh}, warn about missing programs before performing
+redirections. Therefore, to silently check whether a program exists, it
+is necessary to perform redirections on a subshell or brace group:
+@example
+$ @kbd{/bin/sh -c 'nosuch 2>/dev/null'}
+nosuch: not found
+$ @kbd{/bin/sh -c '(nosuch) 2>/dev/null'}
+$ @kbd{/bin/sh -c '@{ nosuch; @} 2>/dev/null'}
+$ @kbd{bash -c 'nosuch 2>/dev/null'}
+@end example
+
+FreeBSD 6.2 sh may mix the trace output lines from the statements in a
+shell pipeline.
+
+It is worth noting that Zsh (but not Ash nor Bash) makes it possible
+in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
+
+Some shells, like @command{ash}, don't recognize bi-directional
+redirection (@samp{<>}). And even on shells that recognize it, it is
+not portable to use on fifos: Posix does not require read-write support
+for named pipes, and Cygwin does not support it:
+
+@example
+$ @kbd{mkfifo fifo}
+$ @kbd{exec 5<>fifo}
+$ @kbd{echo hi >&5}
+bash: echo: write error: Communication error on send
+@end example
+
+@noindent
+Furthermore, versions of @command{dash} before 0.5.6 mistakenly truncate
+regular files when using @samp{<>}:
+
+@example
+$ @kbd{echo a > file}
+$ @kbd{bash -c ': 1<>file'; cat file}
+a
+$ @kbd{dash -c ': 1<>file'; cat file}
+$ rm a
+@end example
+
+When catering to old systems, don't redirect the same file descriptor
+several times, as you are doomed to failure under Ultrix.
+
+@example
+ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
+UWS V4.4 (Rev. 11)
+$ @kbd{eval 'echo matter >fullness' >void}
+illegal io
+$ @kbd{eval '(echo matter >fullness)' >void}
+illegal io
+$ @kbd{(eval '(echo matter >fullness)') >void}
+Ambiguous output redirect.
+@end example
+
+@noindent
+In each case the expected result is of course @file{fullness} containing
+@samp{matter} and @file{void} being empty. However, this bug is
+probably not of practical concern to modern platforms.
+
+Solaris 10 @command{sh} will try to optimize away a @command{:} command
+(even if it is redirected) in a loop after the first iteration, or in a
+shell function after the first call:
+
+@example
+$ @kbd{for i in 1 2 3 ; do : >x$i; done}
+$ @kbd{ls x*}
+x1
+$ @kbd{f () @{ : >$1; @}; f y1; f y2; f y3;}
+$ @kbd{ls y*}
+y1
+@end example
+
+@noindent
+As a workaround, @command{echo} or @command{eval} can be used.
+
+Don't rely on file descriptors 0, 1, and 2 remaining closed in a
+subsidiary program. If any of these descriptors is closed, the
+operating system may open an unspecified file for the descriptor in the
+new process image. Posix 2008 says this may be done only if the
+subsidiary program is set-user-ID or set-group-ID, but HP-UX 11.23 does
+it even for ordinary programs, and the next version of Posix will allow
+HP-UX behavior.
+
+If you want a file descriptor above 2 to be inherited into a child
+process, then you must use redirections specific to that command or a
+containing subshell or command group, rather than relying on
+@command{exec} in the shell. In @command{ksh} as well as HP-UX
+@command{sh}, file descriptors above 2 which are opened using
+@samp{exec @var{n}>file} are closed by a subsequent @samp{exec} (such as
+that involved in the fork-and-exec which runs a program or script):
+
+@example
+$ @kbd{echo 'echo hello >&5' >k}
+$ @kbd{/bin/sh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
+hello
+$ @kbd{bash -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
+hello
+$ @kbd{ksh -c 'exec 5>t; ksh ./k; exec 5>&-; cat t}
+./k[1]: 5: cannot open [Bad file number]
+$ @kbd{ksh -c '(ksh ./k) 5>t; cat t'}
+hello
+$ @kbd{ksh -c '@{ ksh ./k; @} 5>t; cat t'}
+hello
+$ @kbd{ksh -c '5>t ksh ./k; cat t}
+hello
+@end example
+
+Don't rely on duplicating a closed file descriptor to cause an
+error. With Solaris @command{/bin/sh}, failed duplication is silently
+ignored, which can cause unintended leaks to the original file
+descriptor. In this example, observe the leak to standard output:
+
+@example
+$ @kbd{bash -c 'echo hi >&3' 3>&-; echo $?}
+bash: 3: Bad file descriptor
+1
+$ @kbd{/bin/sh -c 'echo hi >&3' 3>&-; echo $?}
+hi
+0
+@end example
+
+Fortunately, an attempt to close an already closed file descriptor will
+portably succeed. Likewise, it is safe to use either style of
+@samp{@var{n}<&-} or @samp{@var{n}>&-} for closing a file descriptor,
+even if it doesn't match the read/write mode that the file descriptor
+was opened with.
+
+DOS variants cannot rename or remove open files, such as in
+@samp{mv foo bar >foo} or @samp{rm foo >foo}, even though this is
+perfectly portable among Posix hosts.
+
+A few ancient systems reserved some file descriptors. By convention,
+file descriptor 3 was opened to @file{/dev/tty} when you logged into
+Eighth Edition (1985) through Tenth Edition Unix (1989). File
+descriptor 4 had a special use on the Stardent/Kubota Titan (circa
+1990), though we don't now remember what it was. Both these systems are
+obsolete, so it's now safe to treat file descriptors 3 and 4 like any
+other file descriptors.
+
+On the other hand, you can't portably use multi-digit file descriptors.
+Solaris @command{ksh} doesn't understand any file descriptor larger than
+@samp{9}:
+
+@example
+$ @kbd{bash -c 'exec 10>&-'; echo $?}
+0
+$ @kbd{ksh -c 'exec 9>&-'; echo $?}
+0
+$ @kbd{ksh -c 'exec 10>&-'; echo $?}
+ksh[1]: exec: 10: not found
+127
+@end example
+
+@c <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
+@node Signal Handling
+@section Signal Handling
+@cindex Signal handling in the shell
+@cindex Signals, shells and
+
+Portable handling of signals within the shell is another major source of
+headaches. This is worsened by the fact that various different, mutually
+incompatible approaches are possible in this area, each with its
+distinctive merits and demerits. A detailed description of these possible
+approaches, as well as of their pros and cons, can be found in
+@uref{http://www.cons.org/cracauer/sigint.html, this article}.
+
+Solaris 10 @command{/bin/sh} automatically traps most signals by default;
+@c See: <http://dbaspot.com/shell/396118-bourne-shell-exit-code-term.html>
+the shell still exits with error upon termination by one of those signals,
+but in such a case the exit status might be somewhat unexpected (even if
+allowed by POSIX, strictly speaking):
+
+@example
+$ @kbd{bash -c 'kill -1 $$'; echo $?} # Will exit 128 + (signal number).
+Hangup
+129
+$ @kbd{/bin/ksh -c 'kill -15 $$'; echo $?} # Likewise.
+Terminated
+143
+$ @kbd{for sig in 1 2 3 15; do}
+> @kbd{ echo $sig:}
+> @kbd{ /bin/sh -c "kill -$s \$\$"; echo $?}
+> @kbd{done}
+signal 1:
+Hangup
+129
+signal 2:
+208
+signal 3:
+208
+signal 15:
+208
+@end example
+
+This gets even worse if one is using the POSIX `wait' interface to get
+details about the shell process terminations: it will result in the shell
+having exited normally, rather than by receiving a signal.
+
+@example
+$ @kbd{cat > foo.c <<'END'}
+#include <stdio.h> /* for printf */
+#include <stdlib.h> /* for system */
+#include <sys/wait.h> /* for WIF* macros */
+int main(void)
+@{
+ int status = system ("kill -15 $$");
+ printf ("Terminated by signal: %s\n",
+ WIFSIGNALED (status) ? "yes" : "no");
+ printf ("Exited normally: %s\n",
+ WIFEXITED (status) ? "yes" : "no");
+ return 0;
+@}
+END
+@c $$ font-lock
+$ @kbd{cc -o foo foo.c}
+$ @kbd{./a.out} # On GNU/Linux
+Terminated by signal: no
+Exited normally: yes
+$ @kbd{./a.out} # On Solaris 10
+Terminated by signal: yes
+Exited normally: no
+@end example
+
+Various shells seem to handle @code{SIGQUIT} specially: they ignore it even
+if it is not blocked, and even if the shell is not running interactively
+(in fact, even if the shell has no attached tty); among these shells
+are at least Bash (from version 2 onwards), Zsh 4.3.12, Solaris 10
+@code{/bin/ksh} and @code{/usr/xpg4/bin/sh}, and AT&T @code{ksh93} (2011).
+Still, @code{SIGQUIT} seems to be trappable quite portably within all
+these shells. OTOH, some other shells doesn't special-case the handling
+of @code{SIGQUIT}; among these shells are at least @code{pdksh} 5.2.14,
+Solaris 10 and NetBSD 5.1 @code{/bin/sh}, and the Almquist Shell 0.5.5.1.
+
+@c See: <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
+Some shells (especially Korn shells and derivatives) might try to
+propagate to themselves a signal that has killed a child process; this is
+not a bug, but a conscious design choice (although its overall value might
+be debatable). The exact details of how this is attained vary from shell
+to shell. For example, upon running @code{perl -e 'kill 2, $$'}, after
+the perl process has been interrupted AT&T @code{ksh93} (2011) will
+proceed to send itself a @code{SIGINT}, while Solaris 10 @code{/bin/ksh}
+and @code{/usr/xpg4/bin/sh} will proceed to exit with status 130 (i.e.,
+128 + 2). In any case, if there is an active trap associated with
+@code{SIGINT}, those shells will correctly execute it.
+
+@c See: <http://www.austingroupbugs.net/view.php?id=51>
+Some Korn shells, when a child process die due receiving a signal with
+signal number @var{n}, can leave in @samp{$?} an exit status of
+256+@var{n} instead of the more common 128+@var{n}. Observe the
+difference between AT&T @code{ksh93} (2011) and @code{bash} 4.1.5 on
+Debian:
+
+@example
+$ @kbd{/bin/ksh -c 'sh -c "kill -1 \$\$"; echo $?'}
+/bin/ksh: line 1: 7837: Hangup
+257
+$ @kbd{/bin/bash -c 'sh -c "kill -1 \$\$"; echo $?'}
+/bin/bash: line 1: 7861 Hangup (sh -c "kill -1 \$\$")
+129
+@end example
+
+@noindent
+This @command{ksh} behavior is allowed by POSIX, if implemented with
+due care; see this @uref{http://www.austingroupbugs.net/view.php?id=51,
+Austin Group discussion} for more background. However, if it is not
+implemented with proper care, such a behavior might cause problems
+in some corner cases. To see why, assume we have a ``wrapper'' script
+like this:
+
+@example
+#!/bin/sh
+# Ignore some signals in the shell only, not in its child processes.
+trap : 1 2 13 15
+wrapped_command "$@@"
+ret=$?
+other_command
+exit $ret
+@end example
+
+@noindent
+If @command{wrapped_command} is interrupted by a @code{SIGHUP} (which
+has signal number 1), @code{ret} will be set to 257. Unless the
+@command{exit} shell builtin is smart enough to understand that such
+a value can only have originated from a signal, and adjust the final
+wait status of the shell appropriately, the value 257 will just get
+truncated to 1 by the closing @code{exit} call, so that a caller of
+the script will have no way to determine that termination by a signal
+was involved. Observe the different behavior of AT&T @code{ksh93}
+(2011) and @code{bash} 4.1.5 on Debian:
+
+@example
+$ @kbd{cat foo.sh}
+#!/bin/sh
+sh -c 'kill -1 $$'
+ret=$?
+echo $ret
+exit $ret
+$ @kbd{/bin/ksh foo.sh; echo $?}
+foo.sh: line 2: 12479: Hangup
+257
+1
+$ @kbd{/bin/bash foo.sh; echo $?}
+foo.sh: line 2: 12487 Hangup (sh -c 'kill -1 $$')
+129
+129
+@end example
+
+@node File System Conventions
+@section File System Conventions
+@cindex File system conventions
+
+Autoconf uses shell-script processing extensively, so the file names
+that it processes should not contain characters that are special to the
+shell. Special characters include space, tab, newline, NUL, and
+the following:
+
+@example
+" # $ & ' ( ) * ; < = > ? [ \ ` |
+@end example
+
+Also, file names should not begin with @samp{~} or @samp{-}, and should
+contain neither @samp{-} immediately after @samp{/} nor @samp{~}
+immediately after @samp{:}. On Posix-like platforms, directory names
+should not contain @samp{:}, as this runs afoul of @samp{:} used as the
+path separator.
+
+These restrictions apply not only to the files that you distribute, but
+also to the absolute file names of your source, build, and destination
+directories.
+
+On some Posix-like platforms, @samp{!} and @samp{^} are special too, so
+they should be avoided.
+
+Posix lets implementations treat leading @file{//} specially, but
+requires leading @file{///} and beyond to be equivalent to @file{/}.
+Most Unix variants treat @file{//} like @file{/}. However, some treat
+@file{//} as a ``super-root'' that can provide access to files that are
+not otherwise reachable from @file{/}. The super-root tradition began
+with Apollo Domain/OS, which died out long ago, but unfortunately Cygwin
+has revived it.
+
+While @command{autoconf} and friends are usually run on some Posix
+variety, they can be used on other systems, most notably DOS
+variants. This impacts several assumptions regarding file names.
+
+@noindent
+For example, the following code:
+
+@example
+case $foo_dir in
+ /*) # Absolute
+ ;;
+ *)
+ foo_dir=$dots$foo_dir ;;
+esac
+@end example
+
+@noindent
+fails to properly detect absolute file names on those systems, because
+they can use a drivespec, and usually use a backslash as directory
+separator. If you want to be portable to DOS variants (at the
+price of rejecting valid but oddball Posix file names like @file{a:\b}),
+you can check for absolute file names like this:
+
+@cindex absolute file names, detect
+@example
+case $foo_dir in
+ [\\/]* | ?:[\\/]* ) # Absolute
+ ;;
+ *)
+ foo_dir=$dots$foo_dir ;;
+esac
+@end example
+
+@noindent
+Make sure you quote the brackets if appropriate and keep the backslash as
+first character (@pxref{case, , Limitations of Shell Builtins}).
+
+Also, because the colon is used as part of a drivespec, these systems don't
+use it as path separator. When creating or accessing paths, you can use the
+@code{PATH_SEPARATOR} output variable instead. @command{configure} sets this
+to the appropriate value for the build system (@samp{:} or @samp{;}) when it
+starts up.
+
+File names need extra care as well. While DOS variants
+that are Posixy enough to run @command{autoconf} (such as DJGPP)
+are usually able to handle long file names properly, there are still
+limitations that can seriously break packages. Several of these issues
+can be easily detected by the
+@uref{ftp://@/ftp.gnu.org/@/gnu/@/non-gnu/@/doschk/@/doschk-1.1.tar.gz, doschk}
+package.
+
+A short overview follows; problems are marked with SFN/LFN to
+indicate where they apply: SFN means the issues are only relevant to
+plain DOS, not to DOS under Microsoft Windows
+variants, while LFN identifies problems that exist even under
+Microsoft Windows variants.
+
+@table @asis
+@item No multiple dots (SFN)
+DOS cannot handle multiple dots in file names. This is an especially
+important thing to remember when building a portable configure script,
+as @command{autoconf} uses a .in suffix for template files.
+
+This is perfectly OK on Posix variants:
+
+@example
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([source.c foo.bar])
+AC_OUTPUT
+@end example
+
+@noindent
+but it causes problems on DOS, as it requires @samp{config.h.in},
+@samp{source.c.in} and @samp{foo.bar.in}. To make your package more portable
+to DOS-based environments, you should use this instead:
+
+@example
+AC_CONFIG_HEADERS([config.h:config.hin])
+AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
+AC_OUTPUT
+@end example
+
+@item No leading dot (SFN)
+DOS cannot handle file names that start with a dot. This is usually
+not important for @command{autoconf}.
+
+@item Case insensitivity (LFN)
+DOS is case insensitive, so you cannot, for example, have both a
+file called @samp{INSTALL} and a directory called @samp{install}. This
+also affects @command{make}; if there's a file called @samp{INSTALL} in
+the directory, @samp{make install} does nothing (unless the
+@samp{install} target is marked as PHONY).
+
+@item The 8+3 limit (SFN)
+Because the DOS file system only stores the first 8 characters of
+the file name and the first 3 of the extension, those must be unique.
+That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
+@file{foobar-prettybird.c} all resolve to the same file name
+(@file{FOOBAR-P.C}). The same goes for @file{foo.bar} and
+@file{foo.bartender}.
+
+The 8+3 limit is not usually a problem under Microsoft Windows, as it
+uses numeric
+tails in the short version of file names to make them unique. However, a
+registry setting can turn this behavior off. While this makes it
+possible to share file trees containing long file names between SFN
+and LFN environments, it also means the above problem applies there
+as well.
+
+@item Invalid characters (LFN)
+Some characters are invalid in DOS file names, and should therefore
+be avoided. In a LFN environment, these are @samp{/}, @samp{\},
+@samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
+In a SFN environment, other characters are also invalid. These
+include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
+
+@item Invalid names (LFN)
+Some DOS file names are reserved, and cause problems if you
+try to use files with those names. These names include @file{CON},
+@file{AUX}, @file{COM1}, @file{COM2}, @file{COM3}, @file{COM4},
+@file{LPT1}, @file{LPT2}, @file{LPT3}, @file{NUL}, and @file{PRN}.
+File names are case insensitive, so even names like
+@file{aux/config.guess} are disallowed.
+
+@end table
+
+@node Shell Pattern Matching
+@section Shell Pattern Matching
+@cindex Shell pattern matching
+
+Nowadays portable patterns can use negated character classes like
+@samp{[!-aeiou]}. The older syntax @samp{[^-aeiou]} is supported by
+some shells but not others; hence portable scripts should never use
+@samp{^} as the first character of a bracket pattern.
+
+Outside the C locale, patterns like @samp{[a-z]} are problematic since
+they may match characters that are not lower-case letters.
+
+@node Shell Substitutions
+@section Shell Substitutions
+@cindex Shell substitutions
+
+Contrary to a persistent urban legend, the Bourne shell does not
+systematically split variables and back-quoted expressions, in particular
+on the right-hand side of assignments and in the argument of @code{case}.
+For instance, the following code:
+
+@example
+case "$given_srcdir" in
+.) top_srcdir="`echo "$dots" | sed 's|/$||'`" ;;
+*) top_srcdir="$dots$given_srcdir" ;;
+esac
+@end example
+
+@noindent
+is more readable when written as:
+
+@example
+case $given_srcdir in
+.) top_srcdir=`echo "$dots" | sed 's|/$||'` ;;
+*) top_srcdir=$dots$given_srcdir ;;
+esac
+@end example
+
+@noindent
+and in fact it is even @emph{more} portable: in the first case of the
+first attempt, the computation of @code{top_srcdir} is not portable,
+since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"},
+for example Solaris 10 ksh:
+
+@example
+$ @kbd{foo="`echo " bar" | sed 's, ,,'`"}
+ksh: : cannot execute
+ksh: bar | sed 's, ,,': cannot execute
+@end example
+
+@noindent
+Posix does not specify behavior for this sequence. On the other hand,
+behavior for @code{"`@dots{}\"@dots{}\"@dots{}`"} is specified by Posix,
+but in practice, not all shells understand it the same way: pdksh 5.2.14
+prints spurious quotes when in Posix mode:
+
+@example
+$ @kbd{echo "`echo \"hello\"`"}
+hello
+$ @kbd{set -o posix}
+$ @kbd{echo "`echo \"hello\"`"}
+"hello"
+@end example
+
+@noindent
+There is just no portable way to use double-quoted strings inside
+double-quoted back-quoted expressions (pfew!).
+
+Bash 4.1 has a bug where quoted empty strings adjacent to unquoted
+parameter expansions are elided during word splitting. Meanwhile, zsh
+does not perform word splitting except when in Bourne compatibility
+mode. In the example below, the correct behavior is to have five
+arguments to the function, and exactly two spaces on either side of the
+middle @samp{-}, since word splitting collapses multiple spaces in
+@samp{$f} but leaves empty arguments intact.
+
+@example
+$ @kbd{bash -c 'n() @{ echo "$#$@@"; @}; f=" - "; n - ""$f"" -'}
+3- - -
+$ @kbd{ksh -c 'n() @{ echo "$#$@@"; @}; f=" - "; n - ""$f"" -'}
+5- - -
+$ @kbd{zsh -c 'n() @{ echo "$#$@@"; @}; f=" - "; n - ""$f"" -'}
+3- - -
+$ @kbd{zsh -c 'emulate sh;}
+> @kbd{n() @{ echo "$#$@@"; @}; f=" - "; n - ""$f"" -'}
+5- - -
+@end example
+
+@noindent
+You can work around this by doing manual word splitting, such as using
+@samp{"$str" $list} rather than @samp{"$str"$list}.
+
+There are also portability pitfalls with particular expansions:
+
+@table @code
+@item $@@
+@cindex @code{"$@@"}
+One of the most famous shell-portability issues is related to
+@samp{"$@@"}. When there are no positional arguments, Posix says
+that @samp{"$@@"} is supposed to be equivalent to nothing, but the
+original Unix version 7 Bourne shell treated it as equivalent to
+@samp{""} instead, and this behavior survives in later implementations
+like Digital Unix 5.0.
+
+The traditional way to work around this portability problem is to use
+@samp{$@{1+"$@@"@}}. Unfortunately this method does not work with
+Zsh (3.x and 4.x), which is used on Mac OS X@. When emulating
+the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
+
+@example
+zsh $ @kbd{emulate sh}
+zsh $ @kbd{for i in "$@@"; do echo $i; done}
+Hello World
+!
+zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
+Hello
+World
+!
+@end example
+
+@noindent
+Zsh handles plain @samp{"$@@"} properly, but we can't use plain
+@samp{"$@@"} because of the portability problems mentioned above.
+One workaround relies on Zsh's ``global aliases'' to convert
+@samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
+
+@example
+test "$@{ZSH_VERSION+set@}" = set && alias -g '$@{1+"$@@"@}'='"$@@"'
+@end example
+
+Zsh only recognizes this alias when a shell word matches it exactly;
+@samp{"foo"$@{1+"$@@"@}} remains subject to word splitting. Since this
+case always yields at least one shell word, use plain @samp{"$@@"}.
+
+A more conservative workaround is to avoid @samp{"$@@"} if it is
+possible that there may be no positional arguments. For example,
+instead of:
+
+@example
+cat conftest.c "$@@"
+@end example
+
+you can use this instead:
+
+@example
+case $# in
+0) cat conftest.c;;
+*) cat conftest.c "$@@";;
+esac
+@end example
+
+Autoconf macros often use the @command{set} command to update
+@samp{$@@}, so if you are writing shell code intended for
+@command{configure} you should not assume that the value of @samp{$@@}
+persists for any length of time.
+
+
+@item $@{10@}
+@cindex positional parameters
+The 10th, 11th, @dots{} positional parameters can be accessed only after
+a @code{shift}. The 7th Edition shell reported an error if given
+@code{$@{10@}}, and
+Solaris 10 @command{/bin/sh} still acts that way:
+
+@example
+$ @kbd{set 1 2 3 4 5 6 7 8 9 10}
+$ @kbd{echo $@{10@}}
+bad substitution
+@end example
+
+Conversely, not all shells obey the Posix rule that when braces are
+omitted, multiple digits beyond a @samp{$} imply the single-digit
+positional parameter expansion concatenated with the remaining literal
+digits. To work around the issue, you must use braces.
+
+@example
+$ @kbd{bash -c 'set a b c d e f g h i j; echo $10 $@{1@}0'}
+a0 a0
+$ @kbd{dash -c 'set a b c d e f g h i j; echo $10 $@{1@}0'}
+j a0
+@end example
+
+@item $@{@var{var}:-@var{value}@}
+@c Info cannot handle `:' in index entries.
+@ifnotinfo
+@cindex @code{$@{@var{var}:-@var{value}@}}
+@end ifnotinfo
+@cindex @code{$@{@var{var}-@var{value}@}}
+Old BSD shells, including the Ultrix @code{sh}, don't accept the
+colon for any shell substitution, and complain and die.
+Similarly for $@{@var{var}:=@var{value}@}, $@{@var{var}:?@var{value}@}, etc.
+However, all shells that support functions allow the use of colon in
+shell substitution, and since m4sh requires functions, you can portably
+use null variable substitution patterns in configure scripts.
+
+@item $@{@var{var}+@var{value}@}
+@cindex @code{$@{@var{var}+@var{value}@}}
+When using @samp{$@{@var{var}-@var{value}@}} or
+@samp{$@{@var{var}-@var{value}@}} for providing alternate substitutions,
+@var{value} must either be a single shell word, quoted, or in the
+context of an unquoted here-document. Solaris
+@command{/bin/sh} complains otherwise.
+
+@example
+$ @kbd{/bin/sh -c 'echo $@{a-b c@}'}
+/bin/sh: bad substitution
+$ @kbd{/bin/sh -c 'echo $@{a-'\''b c'\''@}'}
+b c
+$ @kbd{/bin/sh -c 'echo "$@{a-b c@}"'}
+b c
+$ @kbd{/bin/sh -c 'cat <<EOF
+$@{a-b c@}
+EOF}
+b c
+@end example
+
+According to Posix, if an expansion occurs inside double quotes, then
+the use of unquoted double quotes within @var{value} is unspecified, and
+any single quotes become literal characters; in that case, escaping must
+be done with backslash. Likewise, the use of unquoted here-documents is
+a case where double quotes have unspecified results:
+
+@example
+$ @kbd{/bin/sh -c 'echo "$@{a-"b c"@}"'}
+/bin/sh: bad substitution
+$ @kbd{ksh -c 'echo "$@{a-"b c"@}"'}
+b c
+$ @kbd{bash -c 'echo "$@{a-"b c"@}"'}
+b c
+$ @kbd{/bin/sh -c 'a=; echo $@{a+'\''b c'\''@}'}
+b c
+$ @kbd{/bin/sh -c 'a=; echo "$@{a+'\''b c'\''@}"'}
+'b c'
+$ @kbd{/bin/sh -c 'a=; echo "$@{a+\"b c\"@}"'}
+"b c"
+$ @kbd{/bin/sh -c 'a=; echo "$@{a+b c@}"'}
+b c
+$ @kbd{/bin/sh -c 'cat <<EOF
+$@{a-"b c"@}
+EOF'}
+"b c"
+$ @kbd{/bin/sh -c 'cat <<EOF
+$@{a-'b c'@}
+EOF'}
+'b c'
+$ @kbd{bash -c 'cat <<EOF
+$@{a-"b c"@}
+EOF'}
+b c
+$ @kbd{bash -c 'cat <<EOF
+$@{a-'b c'@}
+EOF'}
+'b c'
+@end example
+
+Perhaps the easiest way to work around quoting issues in a manner
+portable to all shells is to place the results in a temporary variable,
+then use @samp{$t} as the @var{value}, rather than trying to inline
+the expression needing quoting.
+
+@example
+$ @kbd{/bin/sh -c 't="b c\"'\''@}\\"; echo "$@{a-$t@}"'}
+b c"'@}\
+$ @kbd{ksh -c 't="b c\"'\''@}\\"; echo "$@{a-$t@}"'}
+b c"'@}\
+$ @kbd{bash -c 't="b c\"'\''@}\\"; echo "$@{a-$t@}"'}
+b c"'@}\
+@end example
+
+@item $@{@var{var}=@var{value}@}
+@cindex @code{$@{@var{var}=@var{value}@}}
+When using @samp{$@{@var{var}=@var{value}@}} to assign a default value
+to @var{var}, remember that even though the assignment to @var{var} does
+not undergo file name expansion, the result of the variable expansion
+does unless the expansion occurred within double quotes. In particular,
+when using @command{:} followed by unquoted variable expansion for the
+side effect of setting a default value, if the final value of
+@samp{$var} contains any globbing characters (either from @var{value} or
+from prior contents), the shell has to spend time performing file name
+expansion and field splitting even though those results will not be
+used. Therefore, it is a good idea to consider double quotes when performing
+default initialization; while remembering how this impacts any quoting
+characters appearing in @var{value}.
+
+@example
+$ @kbd{time bash -c ': "$@{a=/usr/bin/*@}"; echo "$a"'}
+/usr/bin/*
+
+real 0m0.005s
+user 0m0.002s
+sys 0m0.003s
+$ @kbd{time bash -c ': $@{a=/usr/bin/*@}; echo "$a"'}
+/usr/bin/*
+
+real 0m0.039s
+user 0m0.026s
+sys 0m0.009s
+$ @kbd{time bash -c 'a=/usr/bin/*; : $@{a=noglob@}; echo "$a"'}
+/usr/bin/*
+
+real 0m0.031s
+user 0m0.020s
+sys 0m0.010s
+
+$ @kbd{time bash -c 'a=/usr/bin/*; : "$@{a=noglob@}"; echo "$a"'}
+/usr/bin/*
+
+real 0m0.006s
+user 0m0.002s
+sys 0m0.003s
+@end example
+
+As with @samp{+} and @samp{-}, you must use quotes when using @samp{=}
+if the @var{value} contains more than one shell word; either single
+quotes for just the @var{value}, or double quotes around the entire
+expansion:
+
+@example
+$ @kbd{: $@{var1='Some words'@}}
+$ @kbd{: "$@{var2=like this@}"}
+$ @kbd{echo $var1 $var2}
+Some words like this
+@end example
+
+@noindent
+otherwise some shells, such as Solaris @command{/bin/sh} or on Digital
+Unix V 5.0, die because of a ``bad substitution''. Meanwhile, Posix
+requires that with @samp{=}, quote removal happens prior to the
+assignment, and the expansion be the final contents of @var{var} without
+quoting (and thus subject to field splitting), in contrast to the
+behavior with @samp{-} passing the quoting through to the final
+expansion. However, @command{bash} 4.1 does not obey this rule.
+
+@example
+$ @kbd{ksh -c 'echo $@{var-a\ \ b@}'}
+a b
+$ @kbd{ksh -c 'echo $@{var=a\ \ b@}'}
+a b
+$ @kbd{bash -c 'echo $@{var=a\ \ b@}'}
+a b
+@end example
+
+Finally, Posix states that when mixing @samp{$@{a=b@}} with regular
+commands, it is unspecified whether the assignments affect the parent
+shell environment. It is best to perform assignments independently from
+commands, to avoid the problems demonstrated in this example:
+
+@example
+$ @kbd{bash -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
++b+b+
+-b-
+$ @kbd{/bin/sh -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
+++b+
+--
+$ @kbd{ksh -c 'x= y=$@{x:=b@} sh -c "echo +\$x+\$y+";echo -$x-'}
++b+b+
+--
+@end example
+
+@item $@{@var{var}=@var{value}@}
+@cindex @code{$@{@var{var}=@var{literal}@}}
+Solaris @command{/bin/sh} has a frightening bug in its handling of
+literal assignments. Imagine you need set a variable to a string containing
+@samp{@}}. This @samp{@}} character confuses Solaris @command{/bin/sh}
+when the affected variable was already set. This bug can be exercised
+by running:
+
+@example
+$ @kbd{unset foo}
+$ @kbd{foo=$@{foo='@}'@}}
+$ @kbd{echo $foo}
+@}
+$ @kbd{foo=$@{foo='@}' # no error; this hints to what the bug is}
+$ @kbd{echo $foo}
+@}
+$ @kbd{foo=$@{foo='@}'@}}
+$ @kbd{echo $foo}
+@}@}
+ ^ ugh!
+@end example
+
+It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
+though it is enclosed in single quotes. The problem doesn't happen
+using double quotes, or when using a temporary variable holding the
+problematic string.
+
+@item $@{@var{var}=@var{expanded-value}@}
+@cindex @code{$@{@var{var}=@var{expanded-value}@}}
+On Ultrix,
+running
+
+@example
+default="yu,yaa"
+: $@{var="$default"@}
+@end example
+
+@noindent
+sets @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
+each char is set. You don't observe the phenomenon using a simple
+@samp{echo $var} since apparently the shell resets the 8th bit when it
+expands $var. Here are two means to make this shell confess its sins:
+
+@example
+$ @kbd{cat -v <<EOF
+$var
+EOF}
+@end example
+
+@noindent
+and
+
+@example
+$ @kbd{set | grep '^var=' | cat -v}
+@end example
+
+One classic incarnation of this bug is:
+
+@example
+default="a b c"
+: $@{list="$default"@}
+for c in $list; do
+ echo $c
+done
+@end example
+
+@noindent
+You'll get @samp{a b c} on a single line. Why? Because there are no
+spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
+bit set, hence no IFS splitting is performed!!!
+
+One piece of good news is that Ultrix works fine with @samp{:
+$@{list=$default@}}; i.e., if you @emph{don't} quote. The bad news is
+then that QNX 4.25 then sets @var{list} to the @emph{last} item of
+@var{default}!
+
+The portable way out consists in using a double assignment, to switch
+the 8th bit twice on Ultrix:
+
+@example
+list=$@{list="$default"@}
+@end example
+
+@noindent
+@dots{}but beware of the @samp{@}} bug from Solaris (see above). For safety,
+use:
+
+@example
+test "$@{var+set@}" = set || var=@var{@{value@}}
+@end example
+
+@item $@{#@var{var}@}
+@itemx $@{@var{var}%@var{word}@}
+@itemx $@{@var{var}%%@var{word}@}
+@itemx $@{@var{var}#@var{word}@}
+@itemx $@{@var{var}##@var{word}@}
+@cindex @code{$@{#@var{var}@}}
+@cindex @code{$@{@var{var}%@var{word}@}}
+@cindex @code{$@{@var{var}%%@var{word}@}}
+@cindex @code{$@{@var{var}#@var{word}@}}
+@cindex @code{$@{@var{var}##@var{word}@}}
+Posix requires support for these usages, but they do not work with many
+traditional shells, e.g., Solaris 10 @command{/bin/sh}.
+
+Also, @command{pdksh} 5.2.14 mishandles some @var{word} forms. For
+example if @samp{$1} is @samp{a/b} and @samp{$2} is @samp{a}, then
+@samp{$@{1#$2@}} should yield @samp{/b}, but with @command{pdksh} it
+yields the empty string.
+
+
+@item `@var{commands}`
+@cindex @code{`@var{commands}`}
+@cindex Command Substitution
+Posix requires shells to trim all trailing newlines from command
+output before substituting it, so assignments like
+@samp{dir=`echo "$file" | tr a A`} do not work as expected if
+@samp{$file} ends in a newline.
+
+While in general it makes no sense, do not substitute a single builtin
+with side effects, because Ash 0.2, trying to optimize, does not fork a
+subshell to perform the command.
+
+For instance, if you wanted to check that @command{cd} is silent, do not
+use @samp{test -z "`cd /`"} because the following can happen:
+
+@example
+$ @kbd{pwd}
+/tmp
+$ @kbd{test -z "`cd /`" && pwd}
+/
+@end example
+
+@noindent
+The result of @samp{foo=`exit 1`} is left as an exercise to the reader.
+
+The MSYS shell leaves a stray byte in the expansion of a double-quoted
+command substitution of a native program, if the end of the substitution
+is not aligned with the end of the double quote. This may be worked
+around by inserting another pair of quotes:
+
+@example
+$ @kbd{echo "`printf 'foo\r\n'` bar" > broken}
+$ @kbd{echo "`printf 'foo\r\n'`"" bar" | cmp - broken}
+- broken differ: char 4, line 1
+@end example
+
+Upon interrupt or SIGTERM, some shells may abort a command substitution,
+replace it with a null string, and wrongly evaluate the enclosing
+command before entering the trap or ending the script. This can lead to
+spurious errors:
+
+@example
+$ @kbd{sh -c 'if test `sleep 5; echo hi` = hi; then echo yes; fi'}
+$ @kbd{^C}
+sh: test: hi: unexpected operator/operand
+@end example
+
+@noindent
+You can avoid this by assigning the command substitution to a temporary
+variable:
+
+@example
+$ @kbd{sh -c 'res=`sleep 5; echo hi`
+ if test "x$res" = xhi; then echo yes; fi'}
+$ @kbd{^C}
+@end example
+
+@item $(@var{commands})
+@cindex @code{$(@var{commands})}
+This construct is meant to replace @samp{`@var{commands}`},
+and it has most of the problems listed under @code{`@var{commands}`}.
+
+This construct can be
+nested while this is impossible to do portably with back quotes.
+Unfortunately it is not yet universally supported. Most notably, even recent
+releases of Solaris don't support it:
+
+@example
+$ @kbd{showrev -c /bin/sh | grep version}
+Command version: SunOS 5.10 Generic 121005-03 Oct 2006
+$ @kbd{echo $(echo blah)}
+syntax error: `(' unexpected
+@end example
+
+@noindent
+nor does IRIX 6.5's Bourne shell:
+@example
+$ @kbd{uname -a}
+IRIX firebird-image 6.5 07151432 IP22
+$ @kbd{echo $(echo blah)}
+$(echo blah)
+@end example
+
+If you do use @samp{$(@var{commands})}, make sure that the commands
+do not start with a parenthesis, as that would cause confusion with
+a different notation @samp{$((@var{expression}))} that in modern
+shells is an arithmetic expression not a command. To avoid the
+confusion, insert a space between the two opening parentheses.
+
+Avoid @var{commands} that contain unbalanced parentheses in
+here-documents, comments, or case statement patterns, as many shells
+mishandle them. For example, Bash 3.1, @samp{ksh88}, @command{pdksh}
+5.2.14, and Zsh 4.2.6 all mishandle the following valid command:
+
+@example
+echo $(case x in x) echo hello;; esac)
+@end example
+
+
+@item $((@var{expression}))
+@cindex @code{$((@var{expression}))}
+Arithmetic expansion is not portable as some shells (most
+notably Solaris 10 @command{/bin/sh}) don't support it.
+
+Among shells that do support @samp{$(( ))}, not all of them obey the
+Posix rule that octal and hexadecimal constants must be recognized:
+
+@example
+$ @kbd{bash -c 'echo $(( 010 + 0x10 ))'}
+24
+$ @kbd{zsh -c 'echo $(( 010 + 0x10 ))'}
+26
+$ @kbd{zsh -c 'emulate sh; echo $(( 010 + 0x10 ))'}
+24
+$ @kbd{pdksh -c 'echo $(( 010 + 0x10 ))'}
+pdksh: 010 + 0x10 : bad number `0x10'
+$ @kbd{pdksh -c 'echo $(( 010 ))'}
+10
+@end example
+
+When it is available, using arithmetic expansion provides a noticeable
+speedup in script execution; but testing for support requires
+@command{eval} to avoid syntax errors. The following construct is used
+by @code{AS_VAR_ARITH} to provide arithmetic computation when all
+arguments are provided in decimal and without a leading zero, and all
+operators are properly quoted and appear as distinct arguments:
+
+@example
+if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
+ eval 'func_arith ()
+ @{
+ func_arith_result=$(( $* ))
+ @}'
+else
+ func_arith ()
+ @{
+ func_arith_result=`expr "$@@"`
+ @}
+fi
+func_arith 1 + 1
+foo=$func_arith_result
+@end example
+
+
+@item ^
+@cindex @code{^} quoting
+Always quote @samp{^}, otherwise traditional shells such as
+@command{/bin/sh} on Solaris 10 treat this like @samp{|}.
+
+@end table
+
+
+@node Assignments
+@section Assignments
+@cindex Shell assignments
+
+When setting several variables in a row, be aware that the order of the
+evaluation is undefined. For instance @samp{foo=1 foo=2; echo $foo}
+gives @samp{1} with Solaris @command{/bin/sh}, but @samp{2} with Bash.
+You must use
+@samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
+
+Don't rely on the following to find @file{subdir/program}:
+
+@example
+PATH=subdir$PATH_SEPARATOR$PATH program
+@end example
+
+@noindent
+as this does not work with Zsh 3.0.6. Use something like this
+instead:
+
+@example
+(PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
+@end example
+
+Don't rely on the exit status of an assignment: Ash 0.2 does not change
+the status and propagates that of the last statement:
+
+@example
+$ @kbd{false || foo=bar; echo $?}
+1
+$ @kbd{false || foo=`:`; echo $?}
+0
+@end example
+
+@noindent
+and to make things even worse, QNX 4.25 just sets the exit status
+to 0 in any case:
+
+@example
+$ @kbd{foo=`exit 1`; echo $?}
+0
+@end example
+
+To assign default values, follow this algorithm:
+
+@enumerate
+@item
+If the default value is a literal and does not contain any closing
+brace, use:
+
+@example
+: "$@{var='my literal'@}"
+@end example
+
+@item
+If the default value contains no closing brace, has to be expanded, and
+the variable being initialized is not intended to be IFS-split
+(i.e., it's not a list), then use:
+
+@example
+: $@{var="$default"@}
+@end example
+
+@item
+If the default value contains no closing brace, has to be expanded, and
+the variable being initialized is intended to be IFS-split (i.e., it's a list),
+then use:
+
+@example
+var=$@{var="$default"@}
+@end example
+
+@item
+If the default value contains a closing brace, then use:
+
+@example
+test "$@{var+set@}" = set || var="has a '@}'"
+@end example
+@end enumerate
+
+In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
+doubt, just use the last form. @xref{Shell Substitutions}, items
+@samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
+for the rationale.
+
+@node Parentheses
+@section Parentheses in Shell Scripts
+@cindex Shell parentheses
+
+Beware of two opening parentheses in a row, as many shell
+implementations treat them specially, and Posix says that a portable
+script cannot use @samp{((} outside the @samp{$((} form used for shell
+arithmetic. In traditional shells, @samp{((cat))} behaves like
+@samp{(cat)}; but many shells, including
+Bash and the Korn shell, treat @samp{((cat))} as an arithmetic
+expression equivalent to @samp{let "cat"}, and may or may not report an
+error when they detect that @samp{cat} is not a number. As another
+example, @samp{pdksh} 5.2.14 does not treat the following code
+as a traditional shell would:
+
+@example
+if ((true) || false); then
+ echo ok
+fi
+@end example
+
+@noindent
+To work around this problem, insert a space between the two opening
+parentheses. There is a similar problem and workaround with
+@samp{$((}; see @ref{Shell Substitutions}.
+
+@node Slashes
+@section Slashes in Shell Scripts
+@cindex Shell slashes
+
+Unpatched Tru64 5.1 @command{sh} omits the last slash of command-line
+arguments that contain two trailing slashes:
+
+@example
+$ @kbd{echo / // /// //// .// //.}
+/ / // /// ./ //.
+$ @kbd{x=//}
+$ @kbd{eval "echo \$x"}
+/
+$ @kbd{set -x}
+$ @kbd{echo abc | tr -t ab //}
++ echo abc
++ tr -t ab /
+/bc
+@end example
+
+Unpatched Tru64 4.0 @command{sh} adds a slash after @samp{"$var"} if the
+variable is empty and the second double-quote is followed by a word that
+begins and ends with slash:
+
+@example
+$ @kbd{sh -xc 'p=; echo "$p"/ouch/'}
+p=
++ echo //ouch/
+//ouch/
+@end example
+
+However, our understanding is that patches are available, so perhaps
+it's not worth worrying about working around these horrendous bugs.
+
+@node Special Shell Variables
+@section Special Shell Variables
+@cindex Shell variables
+@cindex Special shell variables
+
+Some shell variables should not be used, since they can have a deep
+influence on the behavior of the shell. In order to recover a sane
+behavior from the shell, some variables should be unset; M4sh takes
+care of this and provides fallback values, whenever needed, to cater
+for a very old @file{/bin/sh} that does not support @command{unset}.
+(@pxref{Portable Shell, , Portable Shell Programming}).
+
+As a general rule, shell variable names containing a lower-case letter
+are safe; you can define and use these variables without worrying about
+their effect on the underlying system, and without worrying about
+whether the shell changes them unexpectedly. (The exception is the
+shell variable @code{status}, as described below.)
+
+Here is a list of names that are known to cause trouble. This list is
+not exhaustive, but you should be safe if you avoid the name
+@code{status} and names containing only upper-case letters and
+underscores.
+
+@c Alphabetical order, case insensitive, `A' before `a'.
+@table @code
+@item ?
+Not all shells correctly reset @samp{$?} after conditionals (@pxref{if,
+, Limitations of Shell Builtins}). Not all shells manage @samp{$?}
+correctly in shell functions (@pxref{Shell Functions}) or in traps
+(@pxref{trap, , Limitations of Shell Builtins}). Not all shells reset
+@samp{$?} to zero after an empty command.
+
+@example
+$ @kbd{bash -c 'false; $empty; echo $?'}
+0
+$ @kbd{zsh -c 'false; $empty; echo $?'}
+1
+@end example
+
+@item _
+@evindex _
+Many shells reserve @samp{$_} for various purposes, e.g., the name of
+the last command executed.
+
+@item BIN_SH
+@evindex BIN_SH
+In Tru64, if @env{BIN_SH} is set to @code{xpg4}, subsidiary invocations of
+the standard shell conform to Posix.
+
+@item CDPATH
+@evindex CDPATH
+When this variable is set it specifies a list of directories to search
+when invoking @code{cd} with a relative file name that did not start
+with @samp{./} or @samp{../}. Posix
+1003.1-2001 says that if a nonempty directory name from @env{CDPATH}
+is used successfully, @code{cd} prints the resulting absolute
+file name. Unfortunately this output can break idioms like
+@samp{abs=`cd src && pwd`} because @code{abs} receives the name twice.
+Also, many shells do not conform to this part of Posix; for
+example, @command{zsh} prints the result only if a directory name
+other than @file{.} was chosen from @env{CDPATH}.
+
+In practice the shells that have this problem also support
+@command{unset}, so you can work around the problem as follows:
+
+@example
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+@end example
+
+You can also avoid output by ensuring that your directory name is
+absolute or anchored at @samp{./}, as in @samp{abs=`cd ./src && pwd`}.
+
+Configure scripts use M4sh, which automatically unsets @env{CDPATH} if
+possible, so you need not worry about this problem in those scripts.
+
+@item CLICOLOR_FORCE
+@evindex CLICOLOR_FORCE
+When this variable is set, some implementations of tools like
+@command{ls} attempt to add color to their output via terminal escape
+sequences, even when the output is not directed to a terminal, and can
+thus cause spurious failures in scripts. Configure scripts use M4sh,
+which automatically unsets this variable.
+
+@item DUALCASE
+@evindex DUALCASE
+In the MKS shell, case statements and file name generation are
+case-insensitive unless @env{DUALCASE} is nonzero.
+Autoconf-generated scripts export this variable when they start up.
+
+@item ENV
+@itemx MAIL
+@itemx MAILPATH
+@itemx PS1
+@itemx PS2
+@itemx PS4
+@evindex ENV
+@evindex MAIL
+@evindex MAILPATH
+@evindex PS1
+@evindex PS2
+@evindex PS4
+These variables should not matter for shell scripts, since they are
+supposed to affect only interactive shells. However, at least one
+shell (the pre-3.0 UWIN Korn shell) gets confused about
+whether it is interactive, which means that (for example) a @env{PS1}
+with a side effect can unexpectedly modify @samp{$?}. To work around
+this bug, M4sh scripts (including @file{configure} scripts) do something
+like this:
+
+@example
+(unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+@end example
+
+@noindent
+(actually, there is some complication due to bugs in @command{unset};
+@pxref{unset, , Limitations of Shell Builtins}).
+
+@item FPATH
+@evindex FPATH
+The Korn shell uses @env{FPATH} to find shell functions, so avoid
+@env{FPATH} in portable scripts. @env{FPATH} is consulted after
+@env{PATH}, but you still need to be wary of tests that use @env{PATH}
+to find whether a command exists, since they might report the wrong
+result if @env{FPATH} is also set.
+
+@item GREP_OPTIONS
+@evindex GREP_OPTIONS
+When this variable is set, some implementations of @command{grep} honor
+these options, even if the options include direction to enable colored
+output via terminal escape sequences, and the result can cause spurious
+failures when the output is not directed to a terminal. Configure
+scripts use M4sh, which automatically unsets this variable.
+
+@item IFS
+@evindex IFS
+Long ago, shell scripts inherited @env{IFS} from the environment,
+but this caused many problems so modern shells ignore any environment
+settings for @env{IFS}.
+
+Don't set the first character of @env{IFS} to backslash. Indeed,
+Bourne shells use the first character (backslash) when joining the
+components in @samp{"$@@"} and some shells then reinterpret (!)@: the
+backslash escapes, so you can end up with backspace and other strange
+characters.
+
+The proper value for @env{IFS} (in regular code, not when performing
+splits) is @samp{@key{SPC}@key{TAB}@key{RET}}. The first character is
+especially important, as it is used to join the arguments in @samp{$*};
+however, note that traditional shells, but also bash-2.04, fail to adhere
+to this and join with a space anyway.
+
+M4sh guarantees that @env{IFS} will have the default value at the
+beginning of a script, and many macros within autoconf rely on this
+setting. It is okay to use blocks of shell code that temporarily change
+the value of @env{IFS} in order to split on another character, but
+remember to restore it before expanding further macros.
+
+Unsetting @code{IFS} instead of resetting it to the default sequence
+is not suggested, since code that tries to save and restore the
+variable's value will incorrectly reset it to an empty value, thus
+disabling field splitting:
+
+@example
+unset IFS
+# default separators used for field splitting
+
+save_IFS=$IFS
+IFS=:
+# ...
+IFS=$save_IFS
+# no field splitting performed
+@end example
+
+@item LANG
+@itemx LC_ALL
+@itemx LC_COLLATE
+@itemx LC_CTYPE
+@itemx LC_MESSAGES
+@itemx LC_MONETARY
+@itemx LC_NUMERIC
+@itemx LC_TIME
+@evindex LANG
+@evindex LC_ALL
+@evindex LC_COLLATE
+@evindex LC_CTYPE
+@evindex LC_MESSAGES
+@evindex LC_MONETARY
+@evindex LC_NUMERIC
+@evindex LC_TIME
+
+You should set all these variables to @samp{C} because so much
+configuration code assumes the C locale and Posix requires that locale
+environment variables be set to @samp{C} if the C locale is desired;
+@file{configure} scripts and M4sh do that for you.
+Export these variables after setting them.
+
+@c However, some older, nonstandard
+@c systems (notably SCO) break if locale environment variables
+@c are set to @samp{C}, so when running on these systems
+@c Autoconf-generated scripts unset the variables instead.
+
+@item LANGUAGE
+@evindex LANGUAGE
+
+@env{LANGUAGE} is not specified by Posix, but it is a GNU
+extension that overrides @env{LC_ALL} in some cases, so you (or M4sh)
+should set it too.
+
+@item LC_ADDRESS
+@itemx LC_IDENTIFICATION
+@itemx LC_MEASUREMENT
+@itemx LC_NAME
+@itemx LC_PAPER
+@itemx LC_TELEPHONE
+@evindex LC_ADDRESS
+@evindex LC_IDENTIFICATION
+@evindex LC_MEASUREMENT
+@evindex LC_NAME
+@evindex LC_PAPER
+@evindex LC_TELEPHONE
+
+These locale environment variables are GNU extensions. They
+are treated like their Posix brethren (@env{LC_COLLATE},
+etc.)@: as described above.
+
+@item LINENO
+@evindex LINENO
+Most modern shells provide the current line number in @code{LINENO}.
+Its value is the line number of the beginning of the current command.
+M4sh, and hence Autoconf, attempts to execute @command{configure} with
+a shell that supports @code{LINENO}. If no such shell is available, it
+attempts to implement @code{LINENO} with a Sed prepass that replaces each
+instance of the string @code{$LINENO} (not followed by an alphanumeric
+character) with the line's number. In M4sh scripts you should execute
+@code{AS_LINENO_PREPARE} so that these workarounds are included in
+your script; configure scripts do this automatically in @code{AC_INIT}.
+
+You should not rely on @code{LINENO} within @command{eval} or shell
+functions, as the behavior differs in practice. The presence of a
+quoted newline within simple commands can alter which line number is
+used as the starting point for @code{$LINENO} substitutions within that
+command. Also, the possibility of the Sed prepass means that you should
+not rely on @code{$LINENO} when quoted, when in here-documents, or when
+line continuations are used. Subshells should be OK, though. In the
+following example, lines 1, 9, and 14 are portable, but the other
+instances of @code{$LINENO} do not have deterministic values:
+
+@example
+@group
+$ @kbd{cat lineno}
+echo 1. $LINENO
+echo "2. $LINENO
+3. $LINENO"
+cat <<EOF
+5. $LINENO
+6. $LINENO
+7. \$LINENO
+EOF
+( echo 9. $LINENO )
+eval 'echo 10. $LINENO'
+eval 'echo 11. $LINENO
+echo 12. $LINENO'
+echo 13. '$LINENO'
+echo 14. $LINENO '
+15.' $LINENO
+f () @{ echo $1 $LINENO;
+echo $1 $LINENO @}
+f 18.
+echo 19. \
+$LINENO
+@end group
+@group
+$ @kbd{bash-3.2 ./lineno}
+1. 1
+2. 3
+3. 3
+5. 4
+6. 4
+7. $LINENO
+9. 9
+10. 10
+11. 12
+12. 13
+13. $LINENO
+14. 14
+15. 14
+18. 16
+18. 17
+19. 19
+@end group
+@group
+$ @kbd{zsh-4.3.4 ./lineno}
+1. 1
+2. 2
+3. 2
+5. 4
+6. 4
+7. $LINENO
+9. 9
+10. 1
+11. 1
+12. 2
+13. $LINENO
+14. 14
+15. 14
+18. 0
+18. 1
+19. 19
+@end group
+@group
+$ @kbd{pdksh-5.2.14 ./lineno}
+1. 1
+2. 2
+3. 2
+5. 4
+6. 4
+7. $LINENO
+9. 9
+10. 0
+11. 0
+12. 0
+13. $LINENO
+14. 14
+15. 14
+18. 16
+18. 17
+19. 19
+@end group
+@group
+$ @kbd{sed '=' <lineno |}
+> @kbd{ sed '}
+> @kbd{ N}
+> @kbd{ s,$,-,}
+> @kbd{ t loop}
+> @kbd{ :loop}
+> @kbd{ s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
+> @kbd{ t loop}
+> @kbd{ s,-$,,}
+> @kbd{ s,^[0-9]*\n,,}
+> @kbd{ ' |}
+> @kbd{ sh}
+1. 1
+2. 2
+3. 3
+5. 5
+6. 6
+7. \7
+9. 9
+10. 10
+11. 11
+12. 12
+13. 13
+14. 14
+15. 15
+18. 16
+18. 17
+19. 20
+@end group
+@end example
+
+In particular, note that @file{config.status} (and any other subsidiary
+script created by @code{AS_INIT_GENERATED}) might report line numbers
+relative to the parent script as a result of the potential Sed pass.
+
+@item NULLCMD
+@evindex NULLCMD
+When executing the command @samp{>foo}, @command{zsh} executes
+@samp{$NULLCMD >foo} unless it is operating in Bourne shell
+compatibility mode and the @command{zsh} version is newer
+than 3.1.6-dev-18. If you are using an older @command{zsh}
+and forget to set @env{NULLCMD},
+your script might be suspended waiting for data on its standard input.
+
+@item options
+@evindex options
+For @command{zsh} 4.3.10, @env{options} is treated as an associative
+array even after @code{emulate sh}, so it should not be used.
+
+@item PATH_SEPARATOR
+@evindex PATH_SEPARATOR
+On DJGPP systems, the @env{PATH_SEPARATOR} environment
+variable can be set to either @samp{:} or @samp{;} to control the path
+separator Bash uses to set up certain environment variables (such as
+@env{PATH}). You can set this variable to @samp{;} if you want
+@command{configure} to use @samp{;} as a separator; this might be useful
+if you plan to use non-Posix shells to execute files. @xref{File System
+Conventions}, for more information about @code{PATH_SEPARATOR}.
+
+@item POSIXLY_CORRECT
+@evindex POSIXLY_CORRECT
+In the GNU environment, exporting @env{POSIXLY_CORRECT} with any value
+(even empty) causes programs to try harder to conform to Posix.
+Autoconf does not directly manipulate this variable, but @command{bash}
+ties the shell variable @env{POSIXLY_CORRECT} to whether the script is
+running in Posix mode. Therefore, take care when exporting or unsetting
+this variable, so as not to change whether @command{bash} is in Posix
+mode.
+
+@example
+$ @kbd{bash --posix -c 'set -o | grep posix}
+> @kbd{unset POSIXLY_CORRECT}
+> @kbd{set -o | grep posix'}
+posix on
+posix off
+@end example
+
+@item PWD
+@evindex PWD
+Posix 1003.1-2001 requires that @command{cd} and
+@command{pwd} must update the @env{PWD} environment variable to point
+to the logical name of the current directory, but traditional shells
+do not support this. This can cause confusion if one shell instance
+maintains @env{PWD} but a subsidiary and different shell does not know
+about @env{PWD} and executes @command{cd}; in this case @env{PWD}
+points to the wrong directory. Use @samp{`pwd`} rather than
+@samp{$PWD}.
+
+@item RANDOM
+@evindex RANDOM
+Many shells provide @code{RANDOM}, a variable that returns a different
+integer each time it is used. Most of the time, its value does not
+change when it is not used, but on IRIX 6.5 the value changes all
+the time. This can be observed by using @command{set}. It is common
+practice to use @code{$RANDOM} as part of a file name, but code
+shouldn't rely on @code{$RANDOM} expanding to a nonempty string.
+
+@item status
+@evindex status
+This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
+hence read-only. Do not use it.
+@end table
+
+@node Shell Functions
+@section Shell Functions
+@cindex Shell Functions
+
+Nowadays, it is difficult to find a shell that does not support
+shell functions at all. However, some differences should be expected.
+
+When declaring a shell function, you must include whitespace between the
+@samp{)} after the function name and the start of the compound
+expression, to avoid upsetting @command{ksh}. While it is possible to
+use any compound command, most scripts use @samp{@{@dots{}@}}.
+
+@example
+$ @kbd{/bin/sh -c 'a()@{ echo hi;@}; a'}
+hi
+$ @kbd{ksh -c 'a()@{ echo hi;@}; a'}
+ksh: syntax error at line 1: `@}' unexpected
+$ @kbd{ksh -c 'a() @{ echo hi;@}; a'}
+hi
+@end example
+
+Inside a shell function, you should not rely on the error status of a
+subshell if the last command of that subshell was @code{exit} or
+@code{trap}, as this triggers bugs in zsh 4.x; while Autoconf tries to
+find a shell that does not exhibit the bug, zsh might be the only shell
+present on the user's machine.
+
+Likewise, the state of @samp{$?} is not reliable when entering a shell
+function. This has the effect that using a function as the first
+command in a @command{trap} handler can cause problems.
+
+@example
+$ @kbd{bash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
+2
+2
+$ @kbd{ash -c 'foo() @{ echo $?; @}; trap foo 0; (exit 2); exit 2'; echo $?}
+0
+2
+@end example
+
+DJGPP bash 2.04 has a bug in that @command{return} from a
+shell function which also used a command substitution causes a
+segmentation fault. To work around the issue, you can use
+@command{return} from a subshell, or @samp{AS_SET_STATUS} as last command
+in the execution flow of the function (@pxref{Common Shell Constructs}).
+
+Not all shells treat shell functions as simple commands impacted by
+@samp{set -e}, for example with Solaris 10 @command{/bin/sh}:
+
+@example
+$ @kbd{bash -c 'f() @{ return 1; @}; set -e; f; echo oops'}
+$ @kbd{/bin/sh -c 'f() @{ return 1; @}; set -e; f; echo oops'}
+oops
+@end example
+
+Shell variables and functions may share the same namespace, for example
+with Solaris 10 @command{/bin/sh}:
+
+@example
+$ @kbd{f () @{ :; @}; f=; f}
+f: not found
+@end example
+
+@noindent
+For this reason, Autoconf (actually M4sh, @pxref{Programming in M4sh})
+uses the prefix @samp{as_fn_} for its functions.
+
+Handling of positional parameters and shell options varies among shells.
+For example, Korn shells reset and restore trace output (@samp{set -x})
+and other options upon function entry and exit. Inside a function,
+IRIX sh sets @samp{$0} to the function name.
+
+It is not portable to pass temporary environment variables to shell
+functions. Solaris @command{/bin/sh} does not see the variable.
+Meanwhile, not all shells follow the Posix rule that the assignment must
+affect the current environment in the same manner as special built-ins.
+
+@example
+$ @kbd{/bin/sh -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
+@result{}
+@result{}
+$ @kbd{ash -c 'func() @{ echo $a;@}; a=1 func; echo $a'}
+@result{}1
+@result{}
+$ @kbd{bash -c 'set -o posix; func() @{ echo $a;@}; a=1 func; echo $a'}
+@result{}1
+@result{}1
+@end example
+
+Some ancient Bourne shell variants with function support did not reset
+@samp{$@var{i}, @var{i} >= 0}, upon function exit, so effectively the
+arguments of the script were lost after the first function invocation.
+It is probably not worth worrying about these shells any more.
+
+With AIX sh, a @command{trap} on 0 installed in a shell function
+triggers at function exit rather than at script exit. @xref{trap, ,
+Limitations of Shell Builtins}.
+
+@node Limitations of Builtins
+@section Limitations of Shell Builtins
+@cindex Shell builtins
+@cindex Limitations of shell builtins
+
+No, no, we are serious: some shells do have limitations! :)
+
+You should always keep in mind that any builtin or command may support
+options, and therefore differ in behavior with arguments
+starting with a dash. For instance, even the innocent @samp{echo "$word"}
+can give unexpected results when @code{word} starts with a dash. It is
+often possible to avoid this problem using @samp{echo "x$word"}, taking
+the @samp{x} into account later in the pipe. Many of these limitations
+can be worked around using M4sh (@pxref{Programming in M4sh}).
+
+@c This table includes things like `@command{test} (files)', so we can't
+@c use @table @command.
+@table @asis
+@item @command{.}
+@c --------------
+@prindex @command{.}
+Use @command{.} only with regular files (use @samp{test -f}). Bash
+2.03, for instance, chokes on @samp{. /dev/null}. Remember that
+@command{.} uses @env{PATH} if its argument contains no slashes. Also,
+some shells, including bash 3.2, implicitly append the current directory
+to this @env{PATH} search, even though Posix forbids it. So if you want
+to use @command{.} on a file @file{foo} in the current directory, you
+must use @samp{. ./foo}.
+
+Not all shells gracefully handle syntax errors within a sourced file.
+On one extreme, some non-interactive shells abort the entire script. On
+the other, @command{zsh} 4.3.10 has a bug where it fails to react to the
+syntax error.
+
+@example
+$ @kbd{echo 'fi' > syntax}
+$ @kbd{bash -c '. ./syntax; echo $?'}
+./syntax: line 1: syntax error near unexpected token `fi'
+./syntax: line 1: `fi'
+1
+$ @kbd{ash -c '. ./syntax; echo $?'}
+./syntax: 1: Syntax error: "fi" unexpected
+$ @kbd{zsh -c '. ./syntax; echo $?'}
+./syntax:1: parse error near `fi'
+0
+@end example
+
+@item @command{!}
+@c --------------
+@prindex @command{!}
+The Unix version 7 shell did not support
+negating the exit status of commands with @command{!}, and this feature
+is still absent from some shells (e.g., Solaris @command{/bin/sh}).
+Other shells, such as FreeBSD @command{/bin/sh} or @command{ash}, have
+bugs when using @command{!}:
+
+@example
+$ @kbd{sh -c '! : | :'; echo $?}
+1
+$ @kbd{ash -c '! : | :'; echo $?}
+0
+$ @kbd{sh -c '! @{ :; @}'; echo $?}
+1
+$ @kbd{ash -c '! @{ :; @}'; echo $?}
+@{: not found
+Syntax error: "@}" unexpected
+2
+@end example
+
+Shell code like this:
+
+@example
+if ! cmp file1 file2 >/dev/null 2>&1; then
+ echo files differ or trouble
+fi
+@end example
+
+is therefore not portable in practice. Typically it is easy to rewrite
+such code, e.g.:
+
+@example
+cmp file1 file2 >/dev/null 2>&1 ||
+ echo files differ or trouble
+@end example
+
+More generally, one can always rewrite @samp{! @var{command}} as:
+
+@example
+if @var{command}; then (exit 1); else :; fi
+@end example
+
+
+@item @command{@{...@}}
+@c --------------------
+@prindex @command{@{...@}}
+Bash 3.2 (and earlier versions) sometimes does not properly set
+@samp{$?} when failing to write redirected output of a compound command.
+This problem is most commonly observed with @samp{@{@dots{}@}}; it does
+not occur with @samp{(@dots{})}. For example:
+
+@example
+$ @kbd{bash -c '@{ echo foo; @} >/bad; echo $?'}
+bash: line 1: /bad: Permission denied
+0
+$ @kbd{bash -c 'while :; do echo; done >/bad; echo $?'}
+bash: line 1: /bad: Permission denied
+0
+@end example
+
+To work around the bug, prepend @samp{:;}:
+
+@example
+$ @kbd{bash -c ':;@{ echo foo; @} >/bad; echo $?'}
+bash: line 1: /bad: Permission denied
+1
+@end example
+
+Posix requires a syntax error if a brace list has no contents. However,
+not all shells obey this rule; and on shells where empty lists are
+permitted, the effect on @samp{$?} is inconsistent. To avoid problems,
+ensure that a brace list is never empty.
+
+@example
+$ @kbd{bash -c 'false; @{ @}; echo $?' || echo $?}
+bash: line 1: syntax error near unexpected token `@}'
+bash: line 1: `false; @{ @}; echo $?'
+2
+$ @kbd{zsh -c 'false; @{ @}; echo $?' || echo $?}
+1
+$ @kbd{pdksh -c 'false; @{ @}; echo $?' || echo $?}
+0
+@end example
+
+
+@item @command{break}
+@c ------------------
+@prindex @command{break}
+The use of @samp{break 2} etc.@: is safe.
+
+
+@anchor{case}
+@item @command{case}
+@c -----------------
+@prindex @command{case}
+You don't need to quote the argument; no splitting is performed.
+
+You don't need the final @samp{;;}, but you should use it.
+
+Posix requires support for @code{case} patterns with opening
+parentheses like this:
+
+@example
+case $file_name in
+ (*.c) echo "C source code";;
+esac
+@end example
+
+@noindent
+but the @code{(} in this example is not portable to many Bourne
+shell implementations, which is a pity for those of us using tools that
+rely on balanced parentheses. For instance, with Solaris
+@command{/bin/sh}:
+
+@example
+$ @kbd{case foo in (foo) echo foo;; esac}
+@error{}syntax error: `(' unexpected
+@end example
+
+@noindent
+The leading @samp{(} can be omitted safely. Unfortunately, there are
+contexts where unbalanced parentheses cause other problems, such as when
+using a syntax-highlighting editor that searches for the balancing
+counterpart, or more importantly, when using a case statement as an
+underquoted argument to an Autoconf macro. @xref{Balancing
+Parentheses}, for tradeoffs involved in various styles of dealing with
+unbalanced @samp{)}.
+
+Zsh handles pattern fragments derived from parameter expansions or
+command substitutions as though quoted:
+
+@example
+$ pat=\?; case aa in ?$pat) echo match;; esac
+$ pat=\?; case a? in ?$pat) echo match;; esac
+match
+@end example
+
+@noindent
+Because of a bug in its @code{fnmatch}, Bash fails to properly
+handle backslashes in character classes:
+
+@example
+bash-2.02$ @kbd{case /tmp in [/\\]*) echo OK;; esac}
+bash-2.02$
+@end example
+
+@noindent
+This is extremely unfortunate, since you are likely to use this code to
+handle Posix or MS-DOS absolute file names. To work around this
+bug, always put the backslash first:
+
+@example
+bash-2.02$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
+OK
+bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
+OK
+@end example
+
+Many Bourne shells cannot handle closing brackets in character classes
+correctly.
+
+Some shells also have problems with backslash escaping in case you do not want
+to match the backslash: both a backslash and the escaped character match this
+pattern. To work around this, specify the character class in a variable, so
+that quote removal does not apply afterwards, and the special characters don't
+have to be backslash-escaped:
+
+@example
+$ @kbd{case '\' in [\<]) echo OK;; esac}
+OK
+$ @kbd{scanset='[<]'; case '\' in $scanset) echo OK;; esac}
+$
+@end example
+
+Even with this, Solaris @command{ksh} matches a backslash if the set
+contains any
+of the characters @samp{|}, @samp{&}, @samp{(}, or @samp{)}.
+
+Conversely, Tru64 @command{ksh} (circa 2003) erroneously always matches
+a closing parenthesis if not specified in a character class:
+
+@example
+$ @kbd{case foo in *\)*) echo fail ;; esac}
+fail
+$ @kbd{case foo in *')'*) echo fail ;; esac}
+fail
+@end example
+
+Some shells, such as Ash 0.3.8, are confused by an empty
+@code{case}/@code{esac}:
+
+@example
+ash-0.3.8 $ @kbd{case foo in esac;}
+@error{}Syntax error: ";" unexpected (expecting ")")
+@end example
+
+Posix requires @command{case} to give an exit status of 0 if no cases
+match. However, @command{/bin/sh} in Solaris 10 does not obey this
+rule. Meanwhile, it is unclear whether a case that matches, but
+contains no statements, must also change the exit status to 0. The M4sh
+macro @code{AS_CASE} works around these inconsistencies.
+
+@example
+$ @kbd{bash -c 'case `false` in ?) ;; esac; echo $?'}
+0
+$ @kbd{/bin/sh -c 'case `false` in ?) ;; esac; echo $?'}
+255
+@end example
+
+
+@item @command{cd}
+@c ---------------
+@prindex @command{cd}
+Posix 1003.1-2001 requires that @command{cd} must support
+the @option{-L} (``logical'') and @option{-P} (``physical'') options,
+with @option{-L} being the default. However, traditional shells do
+not support these options, and their @command{cd} command has the
+@option{-P} behavior.
+
+Portable scripts should assume neither option is supported, and should
+assume neither behavior is the default. This can be a bit tricky,
+since the Posix default behavior means that, for example,
+@samp{ls ..} and @samp{cd ..} may refer to different directories if
+the current logical directory is a symbolic link. It is safe to use
+@code{cd @var{dir}} if @var{dir} contains no @file{..} components.
+Also, Autoconf-generated scripts check for this problem when computing
+variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
+so it is safe to @command{cd} to these variables.
+
+Posix states that behavior is undefined if @command{cd} is given an
+explicit empty argument. Some shells do nothing, some change to the
+first entry in @env{CDPATH}, some change to @env{HOME}, and some exit
+the shell rather than returning an error. Unfortunately, this means
+that if @samp{$var} is empty, then @samp{cd "$var"} is less predictable
+than @samp{cd $var} (at least the latter is well-behaved in all shells
+at changing to @env{HOME}, although this is probably not what you wanted
+in a script). You should check that a directory name was supplied
+before trying to change locations.
+
+@xref{Special Shell Variables}, for portability problems involving
+@command{cd} and the @env{CDPATH} environment variable.
+Also please see the discussion of the @command{pwd} command.
+
+
+@anchor{echo}
+@item @command{echo}
+@c -----------------
+@prindex @command{echo}
+The simple @command{echo} is probably the most surprising source of
+portability troubles. It is not possible to use @samp{echo} portably
+unless both options and escape sequences are omitted. Don't expect any
+option.
+
+Do not use backslashes in the arguments, as there is no consensus on
+their handling. For @samp{echo '\n' | wc -l}, the @command{sh} of
+Solaris outputs 2, but Bash and Zsh (in @command{sh} emulation mode) output 1.
+The problem is truly @command{echo}: all the shells
+understand @samp{'\n'} as the string composed of a backslash and an
+@samp{n}. Within a command substitution, @samp{echo 'string\c'} will
+mess up the internal state of ksh88 on AIX 6.1 so that it will print
+the first character @samp{s} only, followed by a newline, and then
+entirely drop the output of the next echo in a command substitution.
+
+Because of these problems, do not pass a string containing arbitrary
+characters to @command{echo}. For example, @samp{echo "$foo"} is safe
+only if you know that @var{foo}'s value cannot contain backslashes and
+cannot start with @samp{-}.
+
+If this may not be true, @command{printf} is in general safer and
+easier to use than @command{echo} and @command{echo -n}. Thus, scripts
+where portability is not a major concern should use @command{printf
+'%s\n'} whenever @command{echo} could fail, and similarly use
+@command{printf %s} instead of @command{echo -n}. For portable shell
+scripts, instead, it is suggested to use a here-document like this:
+
+@example
+cat <<EOF
+$foo
+EOF
+@end example
+
+Alternatively, M4sh provides @code{AS_ECHO} and @code{AS_ECHO_N} macros
+which choose between various portable implementations: @samp{echo}
+or @samp{print} where they work, @command{printf} if it is available,
+or else other creative tricks in order to work around the above problems.
+
+
+@item @command{eval}
+@c -----------------
+@prindex @command{eval}
+The @command{eval} command is useful in limited circumstances, e.g.,
+using commands like @samp{eval table_$key=\$value} and @samp{eval
+value=table_$key} to simulate a hash table when the key is known to be
+alphanumeric.
+
+You should also be wary of common bugs in @command{eval} implementations.
+In some shell implementations (e.g., older @command{ash}, OpenBSD 3.8
+@command{sh}, @command{pdksh} v5.2.14 99/07/13.2, and @command{zsh}
+4.2.5), the arguments of @samp{eval} are evaluated in a context where
+@samp{$?} is 0, so they exhibit behavior like this:
+
+@example
+$ @kbd{false; eval 'echo $?'}
+0
+@end example
+
+The correct behavior here is to output a nonzero value,
+but portable scripts should not rely on this.
+
+You should not rely on @code{LINENO} within @command{eval}.
+@xref{Special Shell Variables}.
+
+Note that, even though these bugs are easily avoided,
+@command{eval} is tricky to use on arbitrary arguments.
+It is obviously unwise to use @samp{eval $cmd} if the string value of
+@samp{cmd} was derived from an untrustworthy source. But even if the
+string value is valid, @samp{eval $cmd} might not work as intended,
+since it causes field splitting and file name expansion to occur twice,
+once for the @command{eval} and once for the command itself. It is
+therefore safer to use @samp{eval "$cmd"}. For example, if @var{cmd}
+has the value @samp{cat test?.c}, @samp{eval $cmd} might expand to the
+equivalent of @samp{cat test;.c} if there happens to be a file named
+@file{test;.c} in the current directory; and this in turn
+mistakenly attempts to invoke @command{cat} on the file @file{test} and
+then execute the command @command{.c}. To avoid this problem, use
+@samp{eval "$cmd"} rather than @samp{eval $cmd}.
+
+However, suppose that you want to output the text of the evaluated
+command just before executing it. Assuming the previous example,
+@samp{echo "Executing: $cmd"} outputs @samp{Executing: cat test?.c}, but
+this output doesn't show the user that @samp{test;.c} is the actual name
+of the copied file. Conversely, @samp{eval "echo Executing: $cmd"}
+works on this example, but it fails with @samp{cmd='cat foo >bar'},
+since it mistakenly replaces the contents of @file{bar} by the
+string @samp{cat foo}. No simple, general, and portable solution to
+this problem is known.
+
+@item @command{exec}
+@c -----------------
+@prindex @command{exec}
+Posix describes several categories of shell built-ins. Special
+built-ins (such as @command{exit}) must impact the environment of the
+current shell, and need not be available through @command{exec}. All
+other built-ins are regular, and must not propagate variable assignments
+to the environment of the current shell. However, the group of regular
+built-ins is further distinguished by commands that do not require a
+@env{PATH} search (such as @command{cd}), in contrast to built-ins that
+are offered as a more efficient version of something that must still be
+found in a @env{PATH} search (such as @command{echo}). Posix is not
+clear on whether @command{exec} must work with the list of 17 utilities
+that are invoked without a @env{PATH} search, and many platforms lack an
+executable for some of those built-ins:
+
+@example
+$ @kbd{sh -c 'exec cd /tmp'}
+sh: line 0: exec: cd: not found
+@end example
+
+All other built-ins that provide utilities specified by Posix must have
+a counterpart executable that exists on @env{PATH}, although Posix
+allows @command{exec} to use the built-in instead of the executable.
+For example, contrast @command{bash} 3.2 and @command{pdksh} 5.2.14:
+
+@example
+$ @kbd{bash -c 'pwd --version' | head -n1}
+bash: line 0: pwd: --: invalid option
+pwd: usage: pwd [-LP]
+$ @kbd{bash -c 'exec pwd --version' | head -n1}
+pwd (GNU coreutils) 6.10
+$ @kbd{pdksh -c 'exec pwd --version' | head -n1}
+pdksh: pwd: --: unknown option
+@end example
+
+When it is desired to avoid a regular shell built-in, the workaround is
+to use some other forwarding command, such as @command{env} or
+@command{nice}, that will ensure a path search:
+
+@example
+$ @kbd{pdksh -c 'exec true --version' | head -n1}
+$ @kbd{pdksh -c 'nice true --version' | head -n1}
+true (GNU coreutils) 6.10
+$ @kbd{pdksh -c 'env true --version' | head -n1}
+true (GNU coreutils) 6.10
+@end example
+
+@item @command{exit}
+@c -----------------
+@prindex @command{exit}
+The default value of @command{exit} is supposed to be @code{$?};
+unfortunately, some shells, such as the DJGPP port of Bash 2.04, just
+perform @samp{exit 0}.
+
+@example
+bash-2.04$ @kbd{foo=`exit 1` || echo fail}
+fail
+bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
+fail
+bash-2.04$ @kbd{foo=`(exit 1); exit` || echo fail}
+bash-2.04$
+@end example
+
+Using @samp{exit $?} restores the expected behavior.
+
+Some shell scripts, such as those generated by @command{autoconf}, use a
+trap to clean up before exiting. If the last shell command exited with
+nonzero status, the trap also exits with nonzero status so that the
+invoker can tell that an error occurred.
+
+Unfortunately, in some shells, such as Solaris @command{/bin/sh}, an exit
+trap ignores the @code{exit} command's argument. In these shells, a trap
+cannot determine whether it was invoked by plain @code{exit} or by
+@code{exit 1}. Instead of calling @code{exit} directly, use the
+@code{AC_MSG_ERROR} macro that has a workaround for this problem.
+
+
+@anchor{export}
+@item @command{export}
+@c -------------------
+@prindex @command{export}
+The builtin @command{export} dubs a shell variable @dfn{environment
+variable}. Each update of exported variables corresponds to an update
+of the environment variables. Conversely, each environment variable
+received by the shell when it is launched should be imported as a shell
+variable marked as exported.
+
+Alas, many shells, such as Solaris @command{/bin/sh},
+IRIX 6.3, IRIX 5.2,
+AIX 4.1.5, and Digital Unix 4.0, forget to
+@command{export} the environment variables they receive. As a result,
+two variables coexist: the environment variable and the shell
+variable. The following code demonstrates this failure:
+
+@example
+#!/bin/sh
+echo $FOO
+FOO=bar
+echo $FOO
+exec /bin/sh $0
+@end example
+
+@noindent
+when run with @samp{FOO=foo} in the environment, these shells print
+alternately @samp{foo} and @samp{bar}, although they should print only
+@samp{foo} and then a sequence of @samp{bar}s.
+
+Therefore you should @command{export} again each environment variable
+that you update; the export can occur before or after the assignment.
+
+Posix is not clear on whether the @command{export} of an undefined
+variable causes the variable to be defined with the value of an empty
+string, or merely marks any future definition of a variable by that name
+for export. Various shells behave differently in this regard:
+
+@example
+$ @kbd{sh -c 'export foo; env | grep foo'}
+$ @kbd{ash -c 'export foo; env | grep foo'}
+foo=
+@end example
+
+Posix requires @command{export} to honor assignments made as arguments,
+but older shells do not support this, including @command{/bin/sh} in
+Solaris 10. Portable scripts should separate assignments and exports
+into different statements.
+
+@example
+$ @kbd{bash -c 'export foo=bar; echo $foo'}
+bar
+$ @kbd{/bin/sh -c 'export foo=bar; echo $foo'}
+/bin/sh: foo=bar: is not an identifier
+$ @kbd{/bin/sh -c 'export foo; foo=bar; echo $foo'}
+bar
+@end example
+
+@item @command{false}
+@c ------------------
+@prindex @command{false}
+Don't expect @command{false} to exit with status 1: in native
+Solaris @file{/bin/false} exits with status 255.
+
+
+@item @command{for}
+@c ----------------
+@prindex @command{for}
+To loop over positional arguments, use:
+
+@example
+for arg
+do
+ echo "$arg"
+done
+@end example
+
+@noindent
+You may @emph{not} leave the @code{do} on the same line as @code{for},
+since some shells improperly grok:
+
+@example
+for arg; do
+ echo "$arg"
+done
+@end example
+
+If you want to explicitly refer to the positional arguments, given the
+@samp{$@@} bug (@pxref{Shell Substitutions}), use:
+
+@example
+for arg in $@{1+"$@@"@}; do
+ echo "$arg"
+done
+@end example
+
+@noindent
+But keep in mind that Zsh, even in Bourne shell emulation mode, performs
+word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
+item @samp{$@@}, for more.
+
+In Solaris @command{/bin/sh}, when the list of arguments of a
+@command{for} loop starts with @emph{unquoted} tokens looking like
+variable assignments, the loop is not executed on those tokens:
+
+@example
+$ @kbd{/bin/sh -c 'for v in a=b c=d x e=f; do echo $v; done'}
+x
+e=f
+@end example
+
+@noindent
+Thankfully, quoting the assignment-like tokens, or starting the list
+with other tokens (including unquoted variable expansion that results in
+an assignment-like result), avoids the problem, so it is easy to work
+around:
+
+@example
+$ @kbd{/bin/sh -c 'for v in "a=b"; do echo $v; done'}
+a=b
+$ @kbd{/bin/sh -c 'x=a=b; for v in $x c=d; do echo $v; done'}
+a=b
+c=d
+@end example
+
+@anchor{if}
+@item @command{if}
+@c ---------------
+@prindex @command{if}
+Using @samp{!} is not portable. Instead of:
+
+@example
+if ! cmp -s file file.new; then
+ mv file.new file
+fi
+@end example
+
+@noindent
+use:
+
+@example
+if cmp -s file file.new; then :; else
+ mv file.new file
+fi
+@end example
+
+@noindent
+Or, especially if the @dfn{else} branch is short, you can use @code{||}.
+In M4sh, the @code{AS_IF} macro provides an easy way to write these kinds
+of conditionals:
+
+@example
+AS_IF([cmp -s file file.new], [], [mv file.new file])
+@end example
+
+This is especially useful in other M4 macros, where the @dfn{then} and
+@dfn{else} branches might be macro arguments.
+
+Some very old shells did not reset the exit status from an @command{if}
+with no @command{else}:
+
+@example
+$ @kbd{if (exit 42); then true; fi; echo $?}
+42
+@end example
+
+@noindent
+whereas a proper shell should have printed @samp{0}. But this is no
+longer a portability problem; any shell that supports functions gets it
+correct. However, it explains why some makefiles have lengthy
+constructs:
+
+@example
+if test -f "$file"; then
+ install "$file" "$dest"
+else
+ :
+fi
+@end example
+
+
+@item @command{printf}
+@c ------------------
+@prindex @command{printf}
+A format string starting with a @samp{-} can cause problems.
+Bash interprets it as an option and
+gives an error. And @samp{--} to mark the end of options is not good
+in the NetBSD Almquist shell (e.g., 0.4.6) which takes that
+literally as the format string. Putting the @samp{-} in a @samp{%c}
+or @samp{%s} is probably easiest:
+
+@example
+printf %s -foo
+@end example
+
+Bash 2.03 mishandles an escape sequence that happens to evaluate to @samp{%}:
+
+@example
+$ @kbd{printf '\045'}
+bash: printf: `%': missing format character
+@end example
+
+Large outputs may cause trouble. On Solaris 2.5.1 through 10, for
+example, @file{/usr/bin/printf} is buggy, so when using
+@command{/bin/sh} the command @samp{printf %010000x 123} normally dumps
+core.
+
+Since @command{printf} is not always a shell builtin, there is a
+potential speed penalty for using @code{printf '%s\n'} as a replacement
+for an @command{echo} that does not interpret @samp{\} or leading
+@samp{-}. With Solaris @command{ksh}, it is possible to use @code{print
+-r --} for this role instead.
+
+@xref{echo, , Limitations of Shell Builtins} for a discussion of
+portable alternatives to both @command{printf} and @command{echo}.
+
+
+@item @command{pwd}
+@c ----------------
+@prindex @command{pwd}
+With modern shells, plain @command{pwd} outputs a ``logical''
+directory name, some of whose components may be symbolic links. These
+directory names are in contrast to ``physical'' directory names, whose
+components are all directories.
+
+Posix 1003.1-2001 requires that @command{pwd} must support
+the @option{-L} (``logical'') and @option{-P} (``physical'') options,
+with @option{-L} being the default. However, traditional shells do
+not support these options, and their @command{pwd} command has the
+@option{-P} behavior.
+
+Portable scripts should assume neither option is supported, and should
+assume neither behavior is the default. Also, on many hosts
+@samp{/bin/pwd} is equivalent to @samp{pwd -P}, but Posix
+does not require this behavior and portable scripts should not rely on
+it.
+
+Typically it's best to use plain @command{pwd}. On modern hosts this
+outputs logical directory names, which have the following advantages:
+
+@itemize @bullet
+@item
+Logical names are what the user specified.
+@item
+Physical names may not be portable from one installation
+host to another due to network file system gymnastics.
+@item
+On modern hosts @samp{pwd -P} may fail due to lack of permissions to
+some parent directory, but plain @command{pwd} cannot fail for this
+reason.
+@end itemize
+
+Also please see the discussion of the @command{cd} command.
+
+
+@item @command{read}
+@c -----------------
+@prindex @command{read}
+No options are portable, not even support @option{-r} (Solaris
+@command{/bin/sh} for example). Tru64/OSF 5.1 @command{sh} treats
+@command{read} as a special built-in, so it may exit if input is
+redirected from a non-existent or unreadable file.
+
+
+@anchor{set}
+@item @command{set}
+@c ----------------
+@prindex @command{set}
+With the FreeBSD 6.0 shell, the @command{set} command (without
+any options) does not sort its output.
+
+The @command{set} builtin faces the usual problem with arguments
+starting with a
+dash. Modern shells such as Bash or Zsh understand @option{--} to specify
+the end of the options (any argument after @option{--} is a parameter,
+even @samp{-x} for instance), but many traditional shells (e.g., Solaris
+10 @command{/bin/sh}) simply stop option
+processing as soon as a non-option argument is found. Therefore, use
+@samp{dummy} or simply @samp{x} to end the option processing, and use
+@command{shift} to pop it out:
+
+@example
+set x $my_list; shift
+@end example
+
+Avoid @samp{set -}, e.g., @samp{set - $my_list}. Posix no
+longer requires support for this command, and in traditional shells
+@samp{set - $my_list} resets the @option{-v} and @option{-x} options, which
+makes scripts harder to debug.
+
+Some nonstandard shells do not recognize more than one option
+(e.g., @samp{set -e -x} assigns @samp{-x} to the command line). It is
+better to combine them:
+
+@example
+set -ex
+@end example
+
+@cindex @command{set -e}
+The option @option{-e} has historically been underspecified, with enough
+ambiguities to cause numerous differences across various shell
+implementations; see for example
+@uref{http://www.in-ulm.de/@/~mascheck/@/various/@/set-e/, this overview},
+or @uref{http://www.austingroupbugs.net/@/view.php?id=52, this link},
+documenting a change to Posix 2008 to match @command{ksh88} behavior.
+Note that mixing @code{set -e} and shell functions is asking for surprises:
+
+@example
+set -e
+doit()
+@{
+ rm file
+ echo one
+@}
+doit || echo two
+@end example
+
+@noindent
+According to the recommendation, @samp{one} should always be output
+regardless of whether the @command{rm} failed, because it occurs within
+the body of the shell function @samp{doit} invoked on the left side of
+@samp{||}, where the effects of @samp{set -e} are not enforced.
+Likewise, @samp{two} should never be printed, since the failure of
+@command{rm} does not abort the function, such that the status of
+@samp{doit} is 0.
+
+The BSD shell has had several problems with the @option{-e}
+option. Older versions of the BSD
+shell (circa 1990) mishandled @samp{&&}, @samp{||}, @samp{if}, and
+@samp{case} when @option{-e} was in effect, causing the shell to exit
+unexpectedly in some cases. This was particularly a problem with
+makefiles, and led to circumlocutions like @samp{sh -c 'test -f file ||
+touch file'}, where the seemingly-unnecessary @samp{sh -c '@dots{}'}
+wrapper works around the bug (@pxref{Failure in Make Rules}).
+
+Even relatively-recent versions of the BSD shell (e.g., OpenBSD 3.4)
+wrongly exit with @option{-e} if the last command within a compound
+statement fails and is guarded by an @samp{&&} only. For example:
+
+@example
+#! /bin/sh
+set -e
+foo=''
+test -n "$foo" && exit 1
+echo one
+if :; then
+ test -n "$foo" && exit 1
+ echo two
+ test -n "$foo" && exit 1
+fi
+echo three
+@end example
+
+@noindent
+does not print @samp{three}. One workaround is to change the last
+instance of @samp{test -n "$foo" && exit 1} to be @samp{if test -n
+"$foo"; then exit 1; fi} instead. Another possibility is to warn BSD
+users not to use @samp{sh -e}.
+
+When @samp{set -e} is in effect, a failed command substitution in
+Solaris @command{/bin/sh} cannot be ignored, even with @samp{||}.
+
+@example
+$ @kbd{/bin/sh -c 'set -e; foo=`false` || echo foo; echo bar'}
+$ @kbd{bash -c 'set -e; foo=`false` || echo foo; echo bar'}
+foo
+bar
+@end example
+
+@noindent
+Moreover, a command substitution, successful or not, causes this shell to
+exit from a failing outer command even in presence of an @samp{&&} list:
+
+@example
+$ @kbd{bash -c 'set -e; false `true` && echo notreached; echo ok'}
+ok
+$ @kbd{sh -c 'set -e; false `true` && echo notreached; echo ok'}
+$
+@end example
+
+Portable scripts should not use @samp{set -e} if @command{trap} is used
+to install an exit handler. This is because Tru64/OSF 5.1 @command{sh}
+sometimes enters the trap handler with the exit status of the command
+prior to the one that triggered the errexit handler:
+
+@example
+$ @kbd{sh -ec 'trap '\''echo $?'\'' 0; false'}
+0
+$ @kbd{sh -c 'set -e; trap '\''echo $?'\'' 0; false'}
+1
+@end example
+
+@noindent
+Thus, when writing a script in M4sh, rather than trying to rely on
+@samp{set -e}, it is better to append @samp{|| AS_EXIT} to any
+statement where it is desirable to abort on failure.
+
+@cindex @command{set -b}
+@cindex @command{set -m}
+Job control is not provided by all shells, so the use of @samp{set -m}
+or @samp{set -b} must be done with care. When using @command{zsh} in
+native mode, asynchronous notification (@samp{set -b}) is enabled by
+default, and using @samp{emulate sh} to switch to Posix mode does not
+clear this setting (although asynchronous notification has no impact
+unless job monitoring is also enabled). Also, @command{zsh} 4.3.10 and
+earlier have a bug where job control can be manipulated in interactive
+shells, but not in subshells or scripts. Furthermore, some shells, like
+@command{pdksh}, fail to treat subshells as interactive, even though the
+parent shell was.
+
+@example
+$ @kbd{echo $ZSH_VERSION}
+4.3.10
+$ @kbd{set -m; echo $?}
+0
+$ @kbd{zsh -c 'set -m; echo $?'}
+set: can't change option: -m
+$ @kbd{(set -m); echo $?}
+set: can't change option: -m
+1
+$ @kbd{pdksh -ci 'echo $-; (echo $-)'}
+cim
+c
+@end example
+
+@cindex @command{set -n}
+Use of @command{set -n} (typically via @command{sh -n script}) to
+validate a script is not foolproof. Modern @command{ksh93} tries to be
+helpful by informing you about better syntax, but switching the script
+to use the suggested syntax in order to silence the warnings would
+render the script no longer portable to older shells:
+
+@example
+$ @kbd{ksh -nc '``'}
+ksh: warning: line 1: `...` obsolete, use $(...)
+0
+@end example
+
+Furthermore, on ancient hosts, such as SunOS 4, @command{sh -n} could go
+into an infinite loop; even with that bug fixed, Solaris 8
+@command{/bin/sh} takes extremely long to parse large scripts. Autoconf
+itself uses @command{sh -n} within its testsuite to check that correct
+scripts were generated, but only after first probing for other shell
+features (such as @code{test -n "$@{BASH_VERSION+set@}"}) that indicate
+a reasonably fast and working implementation.
+
+@item @command{shift}
+@c ------------------
+@prindex @command{shift}
+Not only is @command{shift}ing a bad idea when there is nothing left to
+shift, but in addition it is not portable: the shell of MIPS
+RISC/OS 4.52 refuses to do it.
+
+Don't use @samp{shift 2} etc.; while it in the SVR1 shell (1983),
+it is also absent in many pre-Posix shells.
+
+
+@item @command{source}
+@c -------------------
+@prindex @command{source}
+This command is not portable, as Posix does not require it; use
+@command{.} instead.
+
+
+@item @command{test}
+@c -----------------
+@prindex @command{test}
+The @code{test} program is the way to perform many file and string
+tests. It is often invoked by the alternate name @samp{[}, but using
+that name in Autoconf code is asking for trouble since it is an M4 quote
+character.
+
+The @option{-a}, @option{-o}, @samp{(}, and @samp{)} operands are not
+present in all implementations, and have been marked obsolete by Posix
+2008. This is because there are inherent ambiguities in using them.
+For example, @samp{test "$1" -a "$2"} looks like a binary operator to
+check whether two strings are both non-empty, but if @samp{$1} is the
+literal @samp{!}, then some implementations of @command{test} treat it
+as a negation of the unary operator @option{-a}.
+
+Thus, portable uses of @command{test} should never have more than four
+arguments, and scripts should use shell constructs like @samp{&&} and
+@samp{||} instead. If you combine @samp{&&} and @samp{||} in the same
+statement, keep in mind that they have equal precedence, so it is often
+better to parenthesize even when this is redundant. For example:
+
+@smallexample
+# Not portable:
+test "X$a" = "X$b" -a \
+ '(' "X$c" != "X$d" -o "X$e" = "X$f" ')'
+
+# Portable:
+test "X$a" = "X$b" &&
+ @{ test "X$c" != "X$d" || test "X$e" = "X$f"; @}
+@end smallexample
+
+@command{test} does not process options like most other commands do; for
+example, it does not recognize the @option{--} argument as marking the
+end of options.
+
+It is safe to use @samp{!} as a @command{test} operator. For example,
+@samp{if test ! -d foo; @dots{}} is portable even though @samp{if ! test
+-d foo; @dots{}} is not.
+
+
+@item @command{test} (files)
+@c -------------------------
+To enable @command{configure} scripts to support cross-compilation, they
+shouldn't do anything that tests features of the build system instead of
+the host system. But occasionally you may find it necessary to check
+whether some arbitrary file exists. To do so, use @samp{test -f},
+@samp{test -r}, or @samp{test -x}. Do not use @samp{test -e}, because
+Solaris 10 @command{/bin/sh}
+lacks it. To test for symbolic links on systems that have them, use
+@samp{test -h} rather than @samp{test -L}; either form conforms to
+Posix 1003.1-2001, but older shells like Solaris 8
+@code{/bin/sh} support only @option{-h}.
+
+For historical reasons, Posix reluctantly allows implementations of
+@samp{test -x} that will succeed for the root user, even if no execute
+permissions are present. Furthermore, shells do not all agree on
+whether Access Control Lists should affect @samp{test -r}, @samp{test
+-w}, and @samp{test -x}; some shells base test results strictly on the
+current user id compared to file owner and mode, as if by
+@code{stat(2)}; while other shells base test results on whether the
+current user has the given right, even if that right is only granted by
+an ACL, as if by @code{faccessat(2)}. Furthermore, there is a classic
+time of check to time of use race between any use of @command{test}
+followed by operating on the just-checked file. Therefore, it is a good
+idea to write scripts that actually attempt an operation, and are
+prepared for the resulting failure if permission is denied, rather than
+trying to avoid an operation based solely on whether @command{test}
+guessed that it might not be permitted.
+
+@item @command{test} (strings)
+@c ---------------------------
+Posix says that @samp{test "@var{string}"} succeeds if @var{string} is
+not null, but this usage is not portable to traditional platforms like
+Solaris 10 @command{/bin/sh}, which mishandle strings like @samp{!} and
+@samp{-n}.
+
+Posix also says that @samp{test ! "@var{string}"},
+@samp{test -n "@var{string}"} and
+@samp{test -z "@var{string}"} work with any string, but many
+shells (such as Solaris, AIX 3.2, UNICOS 10.0.0.6,
+Digital Unix 4, etc.)@: get confused if
+@var{string} looks like an operator:
+
+@example
+$ @kbd{test -n =}
+test: argument expected
+$ @kbd{test ! -n}
+test: argument expected
+$ @kbd{test -z ")"; echo $?}
+0
+@end example
+
+Similarly, Posix says that both @samp{test "@var{string1}" = "@var{string2"}}
+and @samp{test "@var{string1}" != "@var{string2"}} work for any pairs of
+strings, but in practice this is not true for troublesome strings that
+look like operators or parentheses, or that begin with @samp{-}.
+
+It is best to protect such strings with a leading @samp{X}, e.g.,
+@samp{test "X@var{string}" != X} rather than @samp{test -n
+"@var{string}"} or @samp{test ! "@var{string}"}.
+
+It is common to find variations of the following idiom:
+
+@example
+test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
+ @var{action}
+@end example
+
+@noindent
+to take an action when a token matches a given pattern. Such constructs
+should be avoided by using:
+
+@example
+case $ac_feature in
+ *[!-a-zA-Z0-9_]*) @var{action};;
+esac
+@end example
+
+If the pattern is a complicated regular expression that cannot be
+expressed as a shell pattern, use something like this instead:
+
+@example
+expr "X$ac_feature" : 'X.*[^-a-zA-Z0-9_]' >/dev/null &&
+ @var{action}
+@end example
+
+@samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
+"X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
+@samp{@var{foo}} contains backslashes.
+
+
+@anchor{trap}
+@item @command{trap}
+@c -----------------
+@prindex @command{trap}
+It is safe to trap at least the signals 1, 2, 13, and 15. You can also
+trap 0, i.e., have the @command{trap} run when the script ends (either via an
+explicit @command{exit}, or the end of the script). The trap for 0 should be
+installed outside of a shell function, or AIX 5.3 @command{/bin/sh}
+will invoke the trap at the end of this function.
+
+Posix says that @samp{trap - 1 2 13 15} resets the traps for the
+specified signals to their default values, but many common shells (e.g.,
+Solaris @command{/bin/sh}) misinterpret this and attempt to execute a
+``command'' named @command{-} when the specified conditions arise.
+Posix 2008 also added a requirement to support @samp{trap 1 2 13 15} to
+reset traps, as this is supported by a larger set of shells, but there
+are still shells like @command{dash} that mistakenly try to execute
+@command{1} instead of resetting the traps. Therefore, there is no
+portable workaround, except for @samp{trap - 0}, for which
+@samp{trap '' 0} is a portable substitute.
+
+Although Posix is not absolutely clear on this point, it is widely
+admitted that when entering the trap @samp{$?} should be set to the exit
+status of the last command run before the trap. The ambiguity can be
+summarized as: ``when the trap is launched by an @command{exit}, what is
+the @emph{last} command run: that before @command{exit}, or
+@command{exit} itself?''
+
+Bash considers @command{exit} to be the last command, while Zsh and
+Solaris @command{/bin/sh} consider that when the trap is run it is
+@emph{still} in the @command{exit}, hence it is the previous exit status
+that the trap receives:
+
+@example
+$ @kbd{cat trap.sh}
+trap 'echo $?' 0
+(exit 42); exit 0
+$ @kbd{zsh trap.sh}
+42
+$ @kbd{bash trap.sh}
+0
+@end example
+
+The portable solution is then simple: when you want to @samp{exit 42},
+run @samp{(exit 42); exit 42}, the first @command{exit} being used to
+set the exit status to 42 for Zsh, and the second to trigger the trap
+and pass 42 as exit status for Bash. In M4sh, this is covered by using
+@code{AS_EXIT}.
+
+The shell in FreeBSD 4.0 has the following bug: @samp{$?} is
+reset to 0 by empty lines if the code is inside @command{trap}.
+
+@example
+$ @kbd{trap 'false}
+
+echo $?' 0
+$ @kbd{exit}
+0
+@end example
+
+@noindent
+Fortunately, this bug only affects @command{trap}.
+
+Several shells fail to execute an exit trap that is defined inside a
+subshell, when the last command of that subshell is not a builtin. A
+workaround is to use @samp{exit $?} as the shell builtin.
+
+@example
+$ @kbd{bash -c '(trap "echo hi" 0; /bin/true)'}
+hi
+$ @kbd{/bin/sh -c '(trap "echo hi" 0; /bin/true)'}
+$ @kbd{/bin/sh -c '(trap "echo hi" 0; /bin/true; exit $?)'}
+hi
+@end example
+
+@noindent
+Likewise, older implementations of @command{bash} failed to preserve
+@samp{$?} across an exit trap consisting of a single cleanup command.
+
+@example
+$ @kbd{bash -c 'trap "/bin/true" 0; exit 2'; echo $?}
+2
+$ @kbd{bash-2.05b -c 'trap "/bin/true" 0; exit 2'; echo $?}
+0
+$ @kbd{bash-2.05b -c 'trap ":; /bin/true" 0; exit 2'; echo $?}
+2
+@end example
+
+@item @command{true}
+@c -----------------
+@prindex @command{true}
+@c Info cannot handle `:' in index entries.
+@c @prindex @command{:}
+Don't worry: as far as we know @command{true} is portable.
+Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
+portable shell community tends to prefer using @command{:}. This has a
+funny side effect: when asked whether @command{false} is more portable
+than @command{true} Alexandre Oliva answered:
+
+@quotation
+In a sense, yes, because if it doesn't exist, the shell will produce an
+exit status of failure, which is correct for @command{false}, but not
+for @command{true}.
+@end quotation
+
+Remember that even though @samp{:} ignores its arguments, it still takes
+time to compute those arguments. It is a good idea to use double quotes
+around any arguments to @samp{:} to avoid time spent in field splitting
+and file name expansion.
+
+
+@anchor{unset}
+@item @command{unset}
+@c ------------------
+@prindex @command{unset}
+In some nonconforming shells (e.g., Solaris 10 @command{/bin/ksh} and
+@command{/usr/xpg4/bin/sh}, NetBSD 5.99.43 sh, or Bash 2.05a),
+@code{unset FOO} fails when @code{FOO} is not set. This can interfere
+with @code{set -e} operation. You can use
+
+@smallexample
+FOO=; unset FOO
+@end smallexample
+
+@noindent
+if you are not sure that @code{FOO} is set.
+
+A few ancient shells lack @command{unset} entirely. For some variables
+such as @code{PS1}, you can use a neutralizing value instead:
+
+@smallexample
+PS1='$ '
+@end smallexample
+
+Usually, shells that do not support @command{unset} need less effort to
+make the environment sane, so for example is not a problem if you cannot
+unset @command{CDPATH} on those shells. However, Bash 2.01 mishandles
+@code{unset MAIL} and @code{unset MAILPATH} in some cases and dumps core.
+So, you should do something like
+
+@smallexample
+( (unset MAIL) || exit 1) >/dev/null 2>&1 && unset MAIL || :
+@end smallexample
+
+@noindent
+@xref{Special Shell Variables}, for some neutralizing values. Also, see
+@ref{export, , Limitations of Builtins}, for
+the case of environment variables.
+
+@item @command{wait}
+@c -----------------
+@prindex @command{wait}
+The exit status of @command{wait} is not always reliable.
+@end table
+
+@node Limitations of Usual Tools
+@section Limitations of Usual Tools
+@cindex Limitations of usual tools
+
+The small set of tools you can expect to find on any machine can still
+include some limitations you should be aware of.
+
+@comment Between this list and the list of builtins above, we should
+@comment mention all the tools in GNU Coding Standards ``Utilities in
+@comment Makefiles''.
+
+@c This table includes things like `@command{expr} (|)', so we can't
+@c use @table @command.
+@table @asis
+@anchor{awk}
+@item @command{awk}
+@c ----------------
+@prindex @command{awk}
+Don't leave white space before the opening parenthesis in a user function call.
+Posix does not allow this and GNU Awk rejects it:
+
+@example
+$ @kbd{gawk 'function die () @{ print "Aaaaarg!" @}
+ BEGIN @{ die () @}'}
+gawk: cmd. line:2: BEGIN @{ die () @}
+gawk: cmd. line:2: ^ parse error
+$ @kbd{gawk 'function die () @{ print "Aaaaarg!" @}
+ BEGIN @{ die() @}'}
+Aaaaarg!
+@end example
+
+Posix says that if a program contains only @samp{BEGIN} actions, and
+contains no instances of @code{getline}, then the program merely
+executes the actions without reading input. However, traditional Awk
+implementations (such as Solaris 10 @command{awk}) read and discard
+input in this case. Portable scripts can redirect input from
+@file{/dev/null} to work around the problem. For example:
+
+@example
+awk 'BEGIN @{print "hello world"@}' </dev/null
+@end example
+
+Posix says that in an @samp{END} action, @samp{$NF} (and presumably,
+@samp{$1}) retain their value from the last record read, if no
+intervening @samp{getline} occurred. However, some implementations
+(such as Solaris 10 @samp{/usr/bin/awk}, @samp{nawk}, or Darwin
+@samp{awk}) reset these variables. A workaround is to use an
+intermediate variable prior to the @samp{END} block. For example:
+
+@example
+$ @kbd{cat end.awk}
+@{ tmp = $1 @}
+END @{ print "a", $1, $NF, "b", tmp @}
+$ @kbd{echo 1 | awk -f end.awk}
+a b 1
+$ @kbd{echo 1 | gawk -f end.awk}
+a 1 1 b 1
+@end example
+
+If you want your program to be deterministic, don't depend on @code{for}
+on arrays:
+
+@example
+$ @kbd{cat for.awk}
+END @{
+ arr["foo"] = 1
+ arr["bar"] = 1
+ for (i in arr)
+ print i
+@}
+$ @kbd{gawk -f for.awk </dev/null}
+foo
+bar
+$ @kbd{nawk -f for.awk </dev/null}
+bar
+foo
+@end example
+
+Some Awk implementations, such as HP-UX 11.0's native one,
+mishandle anchors:
+
+@example
+$ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
+$ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
+bar
+$ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
+xfoo
+$ @kbd{echo bar | $AWK '/^bar|foo/ @{ print @}'}
+bar
+@end example
+
+@noindent
+Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
+or use a simple test to reject such implementations.
+
+On @samp{ia64-hp-hpux11.23}, Awk mishandles @code{printf} conversions
+after @code{%u}:
+
+@example
+$ @kbd{awk 'BEGIN @{ printf "%u %d\n", 0, -1 @}'}
+0 0
+@end example
+
+AIX version 5.2 has an arbitrary limit of 399 on the
+length of regular expressions and literal strings in an Awk program.
+
+Traditional Awk implementations derived from Unix version 7, such as
+Solaris @command{/bin/awk}, have many limitations and do not
+conform to Posix. Nowadays @code{AC_PROG_AWK} (@pxref{Particular
+Programs}) finds you an Awk that doesn't have these problems, but if
+for some reason you prefer not to use @code{AC_PROG_AWK} you may need to
+address them. For more detailed descriptions, see @ref{Language
+History, , @command{awk} language history, gawk, GNU Awk User's Guide}.
+
+Traditional Awk does not support multidimensional arrays or user-defined
+functions.
+
+Traditional Awk does not support the @option{-v} option. You can use
+assignments after the program instead, e.g., @code{$AWK '@{print v
+$1@}' v=x}; however, don't forget that such assignments are not
+evaluated until they are encountered (e.g., after any @code{BEGIN}
+action).
+
+Traditional Awk does not support the keywords @code{delete} or @code{do}.
+
+Traditional Awk does not support the expressions
+@code{@var{a}?@var{b}:@var{c}}, @code{!@var{a}}, @code{@var{a}^@var{b}},
+or @code{@var{a}^=@var{b}}.
+
+Traditional Awk does not support the predefined @code{CONVFMT} or
+@code{ENVIRON} variables.
+
+Traditional Awk supports only the predefined functions @code{exp}, @code{index},
+@code{int}, @code{length}, @code{log}, @code{split}, @code{sprintf},
+@code{sqrt}, and @code{substr}.
+
+Traditional Awk @code{getline} is not at all compatible with Posix;
+avoid it.
+
+Traditional Awk has @code{for (i in a) @dots{}} but no other uses of the
+@code{in} keyword. For example, it lacks @code{if (i in a) @dots{}}.
+
+In code portable to both traditional and modern Awk, @code{FS} must be a
+string containing just one ordinary character, and similarly for the
+field-separator argument to @code{split}.
+
+Traditional Awk has a limit of 99 fields in a record. Since some Awk
+implementations, like Tru64's, split the input even if you don't refer
+to any field in the script, to circumvent this problem, set @samp{FS}
+to an unusual character and use @code{split}.
+
+Traditional Awk has a limit of at most 99 bytes in a number formatted by
+@code{OFMT}; for example, @code{OFMT="%.300e"; print 0.1;} typically
+dumps core.
+
+The original version of Awk had a limit of at most 99 bytes per
+@code{split} field, 99 bytes per @code{substr} substring, and 99 bytes
+per run of non-special characters in a @code{printf} format, but these
+bugs have been fixed on all practical hosts that we know of.
+
+HP-UX 11.00 and IRIX 6.5 Awk require that input files have a line length
+of at most 3070 bytes.
+
+@item @command{basename}
+@c ---------------------
+@prindex @command{basename}
+Not all hosts have a working @command{basename}.
+You can use @command{expr} instead.
+
+@c AS_BASENAME is to be replaced by a better API.
+@ignore
+Not all hosts have a working @command{basename}, and you should instead
+use @code{AS_BASENAME} (@pxref{Programming in M4sh}), followed by
+@command{expr} if you need to strip a suffix. For example:
+
+@example
+a=`basename "$aname"` # This is not portable.
+a=`AS_BASENAME(["$aname"])` # This is more portable.
+
+# This is not portable.
+c=`basename "$cname" .c`
+
+# This is more portable.
+c=`AS_BASENAME(["$cname"])`
+case $c in
+?*.c) c=`expr "X$c" : 'X\(.*\)\.c'`;;
+esac
+@end example
+@end ignore
+
+
+@item @command{cat}
+@c ----------------
+@prindex @command{cat}
+Don't rely on any option.
+
+
+@item @command{cc}
+@c ---------------
+@prindex @command{cc}
+The command @samp{cc -c foo.c} traditionally produces an object file
+named @file{foo.o}. Most compilers allow @option{-c} to be combined
+with @option{-o} to specify a different object file name, but
+Posix does not require this combination and a few compilers
+lack support for it. @xref{C Compiler}, for how GNU Make
+tests for this feature with @code{AC_PROG_CC_C_O}.
+
+When a compilation such as @samp{cc -o foo foo.c} fails, some compilers
+(such as CDS on Reliant Unix) leave a @file{foo.o}.
+
+HP-UX @command{cc} doesn't accept @file{.S} files to preprocess and
+assemble. @samp{cc -c foo.S} appears to succeed, but in fact does
+nothing.
+
+The default executable, produced by @samp{cc foo.c}, can be
+
+@itemize
+@item @file{a.out} --- usual Posix convention.
+@item @file{b.out} --- i960 compilers (including @command{gcc}).
+@item @file{a.exe} --- DJGPP port of @command{gcc}.
+@item @file{a_out.exe} --- GNV @command{cc} wrapper for DEC C on OpenVMS.
+@item @file{foo.exe} --- various MS-DOS compilers.
+@end itemize
+
+The C compiler's traditional name is @command{cc}, but other names like
+@command{gcc} are common. Posix 1003.1-2001 specifies the
+name @command{c99}, but older Posix editions specified
+@command{c89} and anyway these standard names are rarely used in
+practice. Typically the C compiler is invoked from makefiles that use
+@samp{$(CC)}, so the value of the @samp{CC} make variable selects the
+compiler name.
+
+@item @command{chgrp}
+@itemx @command{chown}
+@c -------------------
+@prindex @command{chgrp}
+@prindex @command{chown}
+It is not portable to change a file's group to a group that the owner
+does not belong to.
+
+@item @command{chmod}
+@c ------------------
+@prindex @command{chmod}
+Avoid usages like @samp{chmod -w file}; use @samp{chmod a-w file}
+instead, for two reasons. First, plain @option{-w} does not necessarily
+make the file unwritable, since it does not affect mode bits that
+correspond to bits in the file mode creation mask. Second,
+Posix says that the @option{-w} might be interpreted as an
+implementation-specific option, not as a mode; Posix suggests
+using @samp{chmod -- -w file} to avoid this confusion, but unfortunately
+@samp{--} does not work on some older hosts.
+
+
+@item @command{cmp}
+@c ----------------
+@prindex @command{cmp}
+@command{cmp} performs a raw data comparison of two files, while
+@command{diff} compares two text files. Therefore, if you might compare
+DOS files, even if only checking whether two files are different, use
+@command{diff} to avoid spurious differences due to differences of
+newline encoding.
+
+
+@item @command{cp}
+@c ---------------
+@prindex @command{cp}
+Avoid the @option{-r} option, since Posix 1003.1-2004 marks it as
+obsolescent and its behavior on special files is implementation-defined.
+Use @option{-R} instead. On GNU hosts the two options
+are equivalent, but on Solaris hosts (for example) @code{cp -r}
+reads from pipes instead of replicating them. AIX 5.3 @code{cp -R} may
+corrupt its own memory with some directory hierarchies and error out or
+dump core:
+
+@example
+@kbd{mkdir -p 12345678/12345678/12345678/12345678}
+@kbd{touch 12345678/12345678/x}
+@kbd{cp -R 12345678 t}
+cp: 0653-440 12345678/12345678/: name too long.
+@end example
+
+Some @command{cp} implementations (e.g., BSD/OS 4.2) do not allow
+trailing slashes at the end of nonexistent destination directories. To
+avoid this problem, omit the trailing slashes. For example, use
+@samp{cp -R source /tmp/newdir} rather than @samp{cp -R source
+/tmp/newdir/} if @file{/tmp/newdir} does not exist.
+
+@c This is thanks to Ian.
+The ancient SunOS 4 @command{cp} does not support @option{-f}, although
+its @command{mv} does.
+
+@cindex timestamp resolution
+Traditionally, file timestamps had 1-second resolution, and @samp{cp
+-p} copied the timestamps exactly. However, many modern file systems
+have timestamps with 1-nanosecond resolution. Unfortunately, some older
+@samp{cp -p} implementations truncate timestamps when copying files,
+which can cause the destination file to appear to be older than the
+source. The exact amount of truncation depends on the resolution of
+the system calls that @command{cp} uses. Traditionally this was
+@code{utime}, which has 1-second resolution. Less-ancient @command{cp}
+implementations such as GNU Core Utilities 5.0.91 (2003) use
+@code{utimes}, which has 1-microsecond resolution. Modern
+implementations such as GNU Core Utilities 6.12 (2008) can set timestamps to
+the full nanosecond resolution, using the modern system calls
+@code{futimens} and @code{utimensat} when they are available. As of
+2011, though, many platforms do not yet fully support these new system
+calls.
+
+Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
+ownerships. But whether it actually does copy ownerships or not is a
+system dependent policy decision implemented by the kernel. If the
+kernel allows it then it happens. If the kernel does not allow it then
+it does not happen. It is not something @command{cp} itself has control
+over.
+
+In Unix System V any user can chown files to any other user, and System
+V also has a non-sticky @file{/tmp}. That probably derives from the
+heritage of System V in a business environment without hostile users.
+BSD changed this
+to be a more secure model where only root can @command{chown} files and
+a sticky @file{/tmp} is used. That undoubtedly derives from the heritage
+of BSD in a campus environment.
+
+GNU/Linux and Solaris by default follow BSD, but
+can be configured to allow a System V style @command{chown}. On the
+other hand, HP-UX follows System V, but can
+be configured to use the modern security model and disallow
+@command{chown}. Since it is an administrator-configurable parameter
+you can't use the name of the kernel as an indicator of the behavior.
+
+
+
+@item @command{date}
+@c -----------------
+@prindex @command{date}
+Some versions of @command{date} do not recognize special @samp{%} directives,
+and unfortunately, instead of complaining, they just pass them through,
+and exit with success:
+
+@example
+$ @kbd{uname -a}
+OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
+$ @kbd{date "+%s"}
+%s
+@end example
+
+
+@item @command{diff}
+@c -----------------
+@prindex @command{diff}
+Option @option{-u} is nonportable.
+
+Some implementations, such as Tru64's, fail when comparing to
+@file{/dev/null}. Use an empty file instead.
+
+
+@item @command{dirname}
+@c --------------------
+@prindex @command{dirname}
+Not all hosts have a working @command{dirname}, and you should instead
+use @code{AS_DIRNAME} (@pxref{Programming in M4sh}). For example:
+
+@example
+dir=`dirname "$file"` # This is not portable.
+dir=`AS_DIRNAME(["$file"])` # This is more portable.
+@end example
+
+
+@item @command{egrep}
+@c ------------------
+@prindex @command{egrep}
+Posix 1003.1-2001 no longer requires @command{egrep},
+but many hosts do not yet support the Posix
+replacement @code{grep -E}. Also, some traditional implementations do
+not work on long input lines. To work around these problems, invoke
+@code{AC_PROG_EGREP} and then use @code{$EGREP}.
+
+Portable extended regular expressions should use @samp{\} only to escape
+characters in the string @samp{$()*+.?[\^@{|}. For example, @samp{\@}}
+is not portable, even though it typically matches @samp{@}}.
+
+The empty alternative is not portable. Use @samp{?} instead. For
+instance with Digital Unix v5.0:
+
+@example
+> printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
+|foo
+> printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
+bar|
+> printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
+foo
+|bar
+@end example
+
+@command{$EGREP} also suffers the limitations of @command{grep}
+(@pxref{grep, , Limitations of Usual Tools}).
+
+@item @command{expr}
+@c -----------------
+@prindex @command{expr}
+Not all implementations obey the Posix rule that @samp{--} separates
+options from arguments; likewise, not all implementations provide the
+extension to Posix that the first argument can be treated as part of a
+valid expression rather than an invalid option if it begins with
+@samp{-}. When performing arithmetic, use @samp{expr 0 + $var} if
+@samp{$var} might be a negative number, to keep @command{expr} from
+interpreting it as an option.
+
+No @command{expr} keyword starts with @samp{X}, so use @samp{expr
+X"@var{word}" : 'X@var{regex}'} to keep @command{expr} from
+misinterpreting @var{word}.
+
+Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
+
+@item @command{expr} (@samp{|})
+@prindex @command{expr} (@samp{|})
+You can use @samp{|}. Although Posix does require that @samp{expr
+''} return the empty string, it does not specify the result when you
+@samp{|} together the empty string (or zero) with the empty string. For
+example:
+
+@example
+expr '' \| ''
+@end example
+
+Posix 1003.2-1992 returns the empty string
+for this case, but traditional Unix returns @samp{0} (Solaris is
+one such example). In Posix 1003.1-2001, the specification was
+changed to match traditional Unix's behavior (which is
+bizarre, but it's too late to fix this). Please note that the same
+problem does arise when the empty string results from a computation,
+as in:
+
+@example
+expr bar : foo \| foo : bar
+@end example
+
+@noindent
+Avoid this portability problem by avoiding the empty string.
+
+
+@item @command{expr} (@samp{:})
+@c ----------------------------
+@prindex @command{expr}
+Portable @command{expr} regular expressions should use @samp{\} to
+escape only characters in the string @samp{$()*.0123456789[\^n@{@}}.
+For example, alternation, @samp{\|}, is common but Posix does not
+require its support, so it should be avoided in portable scripts.
+Similarly, @samp{\+} and @samp{\?} should be avoided.
+
+Portable @command{expr} regular expressions should not begin with
+@samp{^}. Patterns are automatically anchored so leading @samp{^} is
+not needed anyway.
+
+On the other hand, the behavior of the @samp{$} anchor is not portable
+on multi-line strings. Posix is ambiguous whether the anchor applies to
+each line, as was done in older versions of the GNU Core Utilities, or
+whether it applies only to the end of the overall string, as in
+Coreutils 6.0 and most other implementations.
+
+@example
+$ @kbd{baz='foo}
+> @kbd{bar'}
+$ @kbd{expr "X$baz" : 'X\(foo\)$'}
+
+$ @kbd{expr-5.97 "X$baz" : 'X\(foo\)$'}
+foo
+@end example
+
+The Posix standard is ambiguous as to whether
+@samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
+In practice, it outputs the empty string on most platforms, but portable
+scripts should not assume this. For instance, the QNX 4.25 native
+@command{expr} returns @samp{0}.
+
+One might think that a way to get a uniform behavior would be to use
+the empty string as a default value:
+
+@example
+expr a : '\(b\)' \| ''
+@end example
+
+@noindent
+Unfortunately this behaves exactly as the original expression; see the
+@command{expr} (@samp{|}) entry for more information.
+
+Some ancient @command{expr} implementations (e.g., SunOS 4 @command{expr} and
+Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
+@command{expr} to fail if the matched substring is longer than 120
+bytes. In this case, you might want to fall back on @samp{echo|sed} if
+@command{expr} fails. Nowadays this is of practical importance only for
+the rare installer who mistakenly puts @file{/usr/ucb} before
+@file{/usr/bin} in @env{PATH}.
+
+On Mac OS X 10.4, @command{expr} mishandles the pattern @samp{[^-]} in
+some cases. For example, the command
+@example
+expr Xpowerpc-apple-darwin8.1.0 : 'X[^-]*-[^-]*-\(.*\)'
+@end example
+
+@noindent
+outputs @samp{apple-darwin8.1.0} rather than the correct @samp{darwin8.1.0}.
+This particular case can be worked around by substituting @samp{[^--]}
+for @samp{[^-]}.
+
+Don't leave, there is some more!
+
+The QNX 4.25 @command{expr}, in addition of preferring @samp{0} to
+the empty string, has a funny behavior in its exit status: it's always 1
+when parentheses are used!
+
+@example
+$ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
+0: 1
+$ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
+1: 0
+
+$ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
+1: a
+$ @kbd{val=`expr 'a' : '\(b\)'`; echo "?: $val"}
+1: 0
+@end example
+
+@noindent
+In practice this can be a big problem if you are ready to catch failures
+of @command{expr} programs with some other method (such as using
+@command{sed}), since you may get twice the result. For instance
+
+@example
+$ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
+@end example
+
+@noindent
+outputs @samp{a} on most hosts, but @samp{aa} on QNX 4.25. A
+simple workaround consists of testing @command{expr} and using a variable
+set to @command{expr} or to @command{false} according to the result.
+
+Tru64 @command{expr} incorrectly treats the result as a number, if it
+can be interpreted that way:
+
+@example
+$ @kbd{expr 00001 : '.*\(...\)'}
+1
+@end example
+
+On HP-UX 11, @command{expr} only supports a single
+sub-expression.
+
+@example
+$ @kbd{expr 'Xfoo' : 'X\(f\(oo\)*\)$'}
+expr: More than one '\(' was used.
+@end example
+
+
+@item @command{fgrep}
+@c ------------------
+@prindex @command{fgrep}
+Posix 1003.1-2001 no longer requires @command{fgrep},
+but many hosts do not yet support the Posix
+replacement @code{grep -F}. Also, some traditional implementations do
+not work on long input lines. To work around these problems, invoke
+@code{AC_PROG_FGREP} and then use @code{$FGREP}.
+
+Tru64/OSF 5.1 @command{fgrep} does not match an empty pattern.
+
+
+@item @command{find}
+@c -----------------
+@prindex @command{find}
+The option @option{-maxdepth} seems to be GNU specific.
+Tru64 v5.1, NetBSD 1.5 and Solaris @command{find}
+commands do not understand it.
+
+The replacement of @samp{@{@}} is guaranteed only if the argument is
+exactly @emph{@{@}}, not if it's only a part of an argument. For
+instance on DU, and HP-UX 10.20 and HP-UX 11:
+
+@example
+$ @kbd{touch foo}
+$ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
+@{@}-@{@}
+@end example
+
+@noindent
+while GNU @command{find} reports @samp{./foo-./foo}.
+
+
+@anchor{grep}
+@item @command{grep}
+@c -----------------
+@prindex @command{grep}
+Portable scripts can rely on the @command{grep} options @option{-c},
+@option{-l}, @option{-n}, and @option{-v}, but should avoid other
+options. For example, don't use @option{-w}, as Posix does not require
+it and Irix 6.5.16m's @command{grep} does not support it. Also,
+portable scripts should not combine @option{-c} with @option{-l},
+as Posix does not allow this.
+
+Some of the options required by Posix are not portable in practice.
+Don't use @samp{grep -q} to suppress output, because many @command{grep}
+implementations (e.g., Solaris) do not support @option{-q}.
+Don't use @samp{grep -s} to suppress output either, because Posix
+says @option{-s} does not suppress output, only some error messages;
+also, the @option{-s} option of traditional @command{grep} behaved
+like @option{-q} does in most modern implementations. Instead,
+redirect the standard output and standard error (in case the file
+doesn't exist) of @code{grep} to @file{/dev/null}. Check the exit
+status of @code{grep} to determine whether it found a match.
+
+The QNX4 implementation fails to count lines with @code{grep -c '$'},
+but works with @code{grep -c '^'}. Other alternatives for counting
+lines are to use @code{sed -n '$='} or @code{wc -l}.
+
+Some traditional @command{grep} implementations do not work on long
+input lines. On AIX the default @code{grep} silently truncates long
+lines on the input before matching.
+
+Also, many implementations do not support multiple regexps
+with @option{-e}: they either reject @option{-e} entirely (e.g., Solaris)
+or honor only the last pattern (e.g., IRIX 6.5 and NeXT). To
+work around these problems, invoke @code{AC_PROG_GREP} and then use
+@code{$GREP}.
+
+Another possible workaround for the multiple @option{-e} problem is to
+separate the patterns by newlines, for example:
+
+@example
+grep 'foo
+bar' in.txt
+@end example
+
+@noindent
+except that this fails with traditional @command{grep}
+implementations and with OpenBSD 3.8 @command{grep}.
+
+Traditional @command{grep} implementations (e.g., Solaris) do not
+support the @option{-E} or @option{-F} options. To work around these
+problems, invoke @code{AC_PROG_EGREP} and then use @code{$EGREP}, and
+similarly for @code{AC_PROG_FGREP} and @code{$FGREP}. Even if you are
+willing to require support for Posix @command{grep}, your script should
+not use both @option{-E} and @option{-F}, since Posix does not allow
+this combination.
+
+Portable @command{grep} regular expressions should use @samp{\} only to
+escape characters in the string @samp{$()*.0123456789[\^@{@}}. For example,
+alternation, @samp{\|}, is common but Posix does not require its
+support in basic regular expressions, so it should be avoided in
+portable scripts. Solaris and HP-UX @command{grep} do not support it.
+Similarly, the following escape sequences should also be avoided:
+@samp{\<}, @samp{\>}, @samp{\+}, @samp{\?}, @samp{\`}, @samp{\'},
+@samp{\B}, @samp{\b}, @samp{\S}, @samp{\s}, @samp{\W}, and @samp{\w}.
+
+Posix does not specify the behavior of @command{grep} on binary files.
+An example where this matters is using BSD @command{grep} to
+search text that includes embedded ANSI escape sequences for
+colored output to terminals (@samp{\033[m} is the sequence to restore
+normal output); the behavior depends on whether input is seekable:
+
+@example
+$ @kbd{printf 'esc\033[mape\n' > sample}
+$ @kbd{grep . sample}
+Binary file sample matches
+$ @kbd{cat sample | grep .}
+escape
+@end example
+
+
+@item @command{join}
+@c -----------------
+@prindex @command{join}
+Solaris 8 @command{join} has bugs when the second operand is standard
+input, and when standard input is a pipe. For example, the following
+shell script causes Solaris 8 @command{join} to loop forever:
+
+@example
+cat >file <<'EOF'
+1 x
+2 y
+EOF
+cat file | join file -
+@end example
+
+Use @samp{join - file} instead.
+
+On NetBSD, @command{join -a 1 file1 file2} mistakenly behaves like
+@command{join -a 1 -a 2 1 file1 file2}, resulting in a usage warning;
+the workaround is to use @command{join -a1 file1 file2} instead.
+
+@item @command{ln}
+@c ---------------
+@prindex @command{ln}
+@cindex Symbolic links
+Don't rely on @command{ln} having a @option{-f} option. Symbolic links
+are not available on old systems; use @samp{$(LN_S)} as a portable substitute.
+
+For versions of the DJGPP before 2.04,
+@command{ln} emulates symbolic links
+to executables by generating a stub that in turn calls the real
+program. This feature also works with nonexistent files like in the
+Posix spec. So @samp{ln -s file link} generates @file{link.exe},
+which attempts to call @file{file.exe} if run. But this feature only
+works for executables, so @samp{cp -p} is used instead for these
+systems. DJGPP versions 2.04 and later have full support
+for symbolic links.
+
+
+@item @command{ls}
+@c ---------------
+@prindex @command{ls}
+@cindex Listing directories
+The portable options are @option{-acdilrtu}. Current practice is for
+@option{-l} to output both owner and group, even though ancient versions
+of @command{ls} omitted the group.
+
+On ancient hosts, @samp{ls foo} sent the diagnostic @samp{foo not found}
+to standard output if @file{foo} did not exist. Hence a shell command
+like @samp{sources=`ls *.c 2>/dev/null`} did not always work, since it
+was equivalent to @samp{sources='*.c not found'} in the absence of
+@samp{.c} files. This is no longer a practical problem, since current
+@command{ls} implementations send diagnostics to standard error.
+
+The behavior of @command{ls} on a directory that is being concurrently
+modified is not always predictable, because of a data race where cached
+information returned by @code{readdir} does not match the current
+directory state. In fact, MacOS 10.5 has an intermittent bug where
+@code{readdir}, and thus @command{ls}, sometimes lists a file more than
+once if other files were added or removed from the directory immediately
+prior to the @command{ls} call. Since @command{ls} already sorts its
+output, the duplicate entries can be avoided by piping the results
+through @code{uniq}.
+
+@anchor{mkdir}
+@item @command{mkdir}
+@c ------------------
+@prindex @command{mkdir}
+@cindex Making directories
+No @command{mkdir} option is portable to older systems. Instead of
+@samp{mkdir -p @var{file-name}}, you should use
+@code{AS_MKDIR_P(@var{file-name})} (@pxref{Programming in M4sh})
+or @code{AC_PROG_MKDIR_P} (@pxref{Particular Programs}).
+
+Combining the @option{-m} and @option{-p} options, as in @samp{mkdir -m
+go-w -p @var{dir}}, often leads to trouble. FreeBSD
+@command{mkdir} incorrectly attempts to change the permissions of
+@var{dir} even if it already exists. HP-UX 11.23 and
+IRIX 6.5 @command{mkdir} often assign the wrong permissions to
+any newly-created parents of @var{dir}.
+
+Posix does not clearly specify whether @samp{mkdir -p foo}
+should succeed when @file{foo} is a symbolic link to an already-existing
+directory. The GNU Core Utilities 5.1.0 @command{mkdir}
+succeeds, but Solaris @command{mkdir} fails.
+
+Traditional @code{mkdir -p} implementations suffer from race conditions.
+For example, if you invoke @code{mkdir -p a/b} and @code{mkdir -p a/c}
+at the same time, both processes might detect that @file{a} is missing,
+one might create @file{a}, then the other might try to create @file{a}
+and fail with a @code{File exists} diagnostic. The GNU Core
+Utilities (@samp{fileutils} version 4.1), FreeBSD 5.0,
+NetBSD 2.0.2, and OpenBSD 2.4 are known to be
+race-free when two processes invoke @code{mkdir -p} simultaneously, but
+earlier versions are vulnerable. Solaris @command{mkdir} is still
+vulnerable as of Solaris 10, and other traditional Unix systems are
+probably vulnerable too. This possible race is harmful in parallel
+builds when several Make rules call @code{mkdir -p} to
+construct directories. You may use
+@code{install-sh -d} as a safe replacement, provided this script is
+recent enough; the copy shipped with Autoconf 2.60 and Automake 1.10 is
+OK, but copies from older versions are vulnerable.
+
+
+@item @command{mkfifo}
+@itemx @command{mknod}
+@c -------------------
+@prindex @command{mkfifo}
+@prindex @command{mknod}
+The GNU Coding Standards state that @command{mknod} is safe to use on
+platforms where it has been tested to exist; but it is generally portable
+only for creating named FIFOs, since device numbers are
+platform-specific. Autotest uses @command{mkfifo} to implement parallel
+testsuites. Posix states that behavior is unspecified when opening a
+named FIFO for both reading and writing; on at least Cygwin, this
+results in failure on any attempt to read or write to that file
+descriptor.
+
+@item @command{mktemp}
+@c -------------------
+@prindex @command{mktemp}
+@cindex Creating temporary files
+Shell scripts can use temporary files safely with @command{mktemp}, but
+it does not exist on all systems. A portable way to create a safe
+temporary file name is to create a temporary directory with mode 700 and
+use a file inside this directory. Both methods prevent attackers from
+gaining control, though @command{mktemp} is far less likely to fail
+gratuitously under attack.
+
+Here is sample code to create a new temporary directory @samp{$dir} safely:
+
+@example
+# Create a temporary directory $dir in $TMPDIR (default /tmp).
+# Use mktemp if possible; otherwise fall back on mkdir,
+# with $RANDOM to make collisions less likely.
+: "$@{TMPDIR:=/tmp@}"
+@{
+ dir=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -d "$dir"
+@} || @{
+ dir=$TMPDIR/foo$$-$RANDOM
+@c $$ restore font-lock
+ (umask 077 && mkdir "$dir")
+@} || exit $?
+@end example
+
+
+@item @command{mv}
+@c ---------------
+@prindex @command{mv}
+@cindex Moving open files
+The only portable options are @option{-f} and @option{-i}.
+
+Moving individual files between file systems is portable (it was in Unix
+version 6),
+but it is not always atomic: when doing @samp{mv new existing}, there's
+a critical section where neither the old nor the new version of
+@file{existing} actually exists.
+
+On some systems moving files from @file{/tmp} can sometimes cause
+undesirable (but perfectly valid) warnings, even if you created these
+files. This is because @file{/tmp} belongs to a group that ordinary
+users are not members of, and files created in @file{/tmp} inherit
+the group of @file{/tmp}. When the file is copied, @command{mv} issues
+a diagnostic without failing:
+
+@smallexample
+$ @kbd{touch /tmp/foo}
+$ @kbd{mv /tmp/foo .}
+@error{}mv: ./foo: set owner/group (was: 100/0): Operation not permitted
+$ @kbd{echo $?}
+0
+$ @kbd{ls foo}
+foo
+@end smallexample
+
+@noindent
+This annoying behavior conforms to Posix, unfortunately.
+
+Moving directories across mount points is not portable, use @command{cp}
+and @command{rm}.
+
+DOS variants cannot rename or remove open files, and do not
+support commands like @samp{mv foo bar >foo}, even though this is
+perfectly portable among Posix hosts.
+
+
+@item @command{od}
+@c ---------------
+@prindex @command{od}
+
+In Mac OS X 10.3, @command{od} does not support the
+standard Posix options @option{-A}, @option{-j}, @option{-N}, or
+@option{-t}, or the XSI option @option{-s}. The only
+supported Posix option is @option{-v}, and the only supported
+XSI options are those in @option{-bcdox}. The BSD
+@command{hexdump} program can be used instead.
+
+This problem no longer exists in Mac OS X 10.4.3.
+
+
+@item @command{rm}
+@c ---------------
+@prindex @command{rm}
+The @option{-f} and @option{-r} options are portable.
+
+It is not portable to invoke @command{rm} without options or operands.
+On the other hand, Posix now requires @command{rm -f} to silently
+succeed when there are no operands (useful for constructs like
+@command{rm -rf $filelist} without first checking if @samp{$filelist}
+was empty). But this was not always portable; at least NetBSD
+@command{rm} built before 2008 would fail with a diagnostic.
+
+A file might not be removed even if its parent directory is writable
+and searchable. Many Posix hosts cannot remove a mount point, a named
+stream, a working directory, or a last link to a file that is being
+executed.
+
+DOS variants cannot rename or remove open files, and do not
+support commands like @samp{rm foo >foo}, even though this is
+perfectly portable among Posix hosts.
+
+@item @command{rmdir}
+@c ------------------
+@prindex @command{rmdir}
+Just as with @command{rm}, some platforms refuse to remove a working
+directory.
+
+@anchor{sed}
+@item @command{sed}
+@c ----------------
+@prindex @command{sed}
+Patterns should not include the separator (unless escaped), even as part
+of a character class. In conformance with Posix, the Cray
+@command{sed} rejects @samp{s/[^/]*$//}: use @samp{s%[^/]*$%%}.
+Even when escaped, patterns should not include separators that are also
+used as @command{sed} metacharacters. For example, GNU sed 4.0.9 rejects
+@samp{s,x\@{1\,\@},,}, while sed 4.1 strips the backslash before the comma
+before evaluating the basic regular expression.
+
+Avoid empty patterns within parentheses (i.e., @samp{\(\)}). Posix does
+not require support for empty patterns, and Unicos 9 @command{sed} rejects
+them.
+
+Unicos 9 @command{sed} loops endlessly on patterns like @samp{.*\n.*}.
+
+Sed scripts should not use branch labels longer than 7 characters and
+should not contain comments; AIX 5.3 @command{sed} rejects indented comments.
+HP-UX sed has a limit of 99 commands (not counting @samp{:} commands) and
+48 labels, which cannot be circumvented by using more than one script
+file. It can execute up to 19 reads with the @samp{r} command per cycle.
+Solaris @command{/usr/ucb/sed} rejects usages that exceed a limit of
+about 6000 bytes for the internal representation of commands.
+
+Avoid redundant @samp{;}, as some @command{sed} implementations, such as
+NetBSD 1.4.2's, incorrectly try to interpret the second
+@samp{;} as a command:
+
+@example
+$ @kbd{echo a | sed 's/x/x/;;s/x/x/'}
+sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
+@end example
+
+Some @command{sed} implementations have a buffer limited to 4000 bytes,
+and this limits the size of input lines, output lines, and internal
+buffers that can be processed portably. Likewise,
+not all @command{sed} implementations can handle embedded @code{NUL} or
+a missing trailing newline.
+
+Remember that ranges within a bracket expression of a regular expression
+are only well-defined in the @samp{C} (or @samp{POSIX}) locale.
+Meanwhile, support for character classes like @samp{[[:upper:]]} is not
+yet universal, so if you cannot guarantee the setting of @env{LC_ALL},
+it is better to spell out a range @samp{[ABCDEFGHIJKLMNOPQRSTUVWXYZ]}
+than to rely on @samp{[A-Z]}.
+
+Additionally, Posix states that regular expressions are only
+well-defined on characters. Unfortunately, there exist platforms such
+as MacOS X 10.5 where not all 8-bit byte values are valid characters,
+even though that platform has a single-byte @samp{C} locale. And Posix
+allows the existence of a multi-byte @samp{C} locale, although that does
+not yet appear to be a common implementation. At any rate, it means
+that not all bytes will be matched by the regular expression @samp{.}:
+
+@example
+$ @kbd{printf '\200\n' | LC_ALL=C sed -n /./p | wc -l}
+0
+$ @kbd{printf '\200\n' | LC_ALL=en_US.ISO8859-1 sed -n /./p | wc -l}
+1
+@end example
+
+Portable @command{sed} regular expressions should use @samp{\} only to escape
+characters in the string @samp{$()*.0123456789[\^n@{@}}. For example,
+alternation, @samp{\|}, is common but Posix does not require its
+support, so it should be avoided in portable scripts. Solaris
+@command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
+deletes only lines that contain the literal string @samp{a|b}.
+Similarly, @samp{\+} and @samp{\?} should be avoided.
+
+Anchors (@samp{^} and @samp{$}) inside groups are not portable.
+
+Nested parentheses in patterns (e.g., @samp{\(\(a*\)b*)\)}) are
+quite portable to current hosts, but was not supported by some ancient
+@command{sed} implementations like SVR3.
+
+Some @command{sed} implementations, e.g., Solaris, restrict the special
+role of the asterisk @samp{*} to one-character regular expressions and
+back-references, and the special role of interval expressions
+@samp{\@{@var{m}\@}}, @samp{\@{@var{m},\@}}, or @samp{\@{@var{m},@var{n}\@}}
+to one-character regular expressions. This may lead to unexpected behavior:
+
+@example
+$ @kbd{echo '1*23*4' | /usr/bin/sed 's/\(.\)*/x/g'}
+x2x4
+$ @kbd{echo '1*23*4' | /usr/xpg4/bin/sed 's/\(.\)*/x/g'}
+x
+@end example
+
+The @option{-e} option is mostly portable.
+However, its argument
+cannot start with @samp{a}, @samp{c}, or @samp{i},
+as this runs afoul of a Tru64 5.1 bug.
+Also, its argument cannot be empty, as this fails on AIX 5.3.
+Some people prefer to use @samp{-e}:
+
+@example
+sed -e '@var{command-1}' \
+ -e '@var{command-2}'
+@end example
+
+@noindent
+as opposed to the equivalent:
+
+@example
+sed '
+ @var{command-1}
+ @var{command-2}
+'
+@end example
+
+@noindent
+The following usage is sometimes equivalent:
+
+@example
+sed '@var{command-1};@var{command-2}'
+@end example
+
+but Posix says that this use of a semicolon has undefined effect if
+@var{command-1}'s verb is @samp{@{}, @samp{a}, @samp{b}, @samp{c},
+@samp{i}, @samp{r}, @samp{t}, @samp{w}, @samp{:}, or @samp{#}, so you
+should use semicolon only with simple scripts that do not use these
+verbs.
+
+Posix up to the 2008 revision requires the argument of the @option{-e}
+option to be a syntactically complete script. GNU @command{sed} allows
+to pass multiple script fragments, each as argument of a separate
+@option{-e} option, that are then combined, with newlines between the
+fragments, and a future Posix revision may allow this as well. This
+approach is not portable with script fragments ending in backslash; for
+example, the @command{sed} programs on Solaris 10, HP-UX 11, and AIX
+don't allow splitting in this case:
+
+@example
+$ @kbd{echo a | sed -n -e 'i\}
+@kbd{0'}
+0
+$ @kbd{echo a | sed -n -e 'i\' -e 0}
+Unrecognized command: 0
+@end example
+
+@noindent
+In practice, however, this technique of joining fragments
+through @option{-e} works for multiple @command{sed} functions within
+@samp{@{} and @samp{@}}, even if that is not specified by Posix:
+
+@example
+@c The quote around the closing brace silences interactive zsh.
+$ @kbd{echo a | sed -n -e '/a/@{' -e s/a/b/ -e p -e '@}'}
+b
+@end example
+
+Commands inside @{ @} brackets are further restricted. Posix 2008 says that
+they cannot be preceded by addresses, @samp{!}, or @samp{;}, and that
+each command must be followed immediately by a newline, without any
+intervening blanks or semicolons. The closing bracket must be alone on
+a line, other than white space preceding or following it. However, a
+future version of Posix may standardize the use of addresses within brackets.
+
+Contrary to yet another urban legend, you may portably use @samp{&} in
+the replacement part of the @code{s} command to mean ``what was
+matched''. All descendants of Unix version 7 @command{sed}
+(at least; we
+don't have first hand experience with older @command{sed} implementations) have
+supported it.
+
+Posix requires that you must not have any white space between
+@samp{!} and the following command. It is OK to have blanks between
+the address and the @samp{!}. For instance, on Solaris:
+
+@example
+$ @kbd{echo "foo" | sed -n '/bar/ ! p'}
+@error{}Unrecognized command: /bar/ ! p
+$ @kbd{echo "foo" | sed -n '/bar/! p'}
+@error{}Unrecognized command: /bar/! p
+$ @kbd{echo "foo" | sed -n '/bar/ !p'}
+foo
+@end example
+
+Posix also says that you should not combine @samp{!} and @samp{;}. If
+you use @samp{!}, it is best to put it on a command that is delimited by
+newlines rather than @samp{;}.
+
+Also note that Posix requires that the @samp{b}, @samp{t}, @samp{r}, and
+@samp{w} commands be followed by exactly one space before their argument.
+On the other hand, no white space is allowed between @samp{:} and the
+subsequent label name.
+
+If a sed script is specified on the command line and ends in an
+@samp{a}, @samp{c}, or @samp{i} command, the last line of inserted text
+should be followed by a newline. Otherwise some @command{sed}
+implementations (e.g., OpenBSD 3.9) do not append a newline to the
+inserted text.
+
+Many @command{sed} implementations (e.g., MacOS X 10.4,
+OpenBSD 3.9, Solaris 10
+@command{/usr/ucb/sed}) strip leading white space from the text of
+@samp{a}, @samp{c}, and @samp{i} commands. Prepend a backslash to
+work around this incompatibility with Posix:
+
+@example
+$ @kbd{echo flushleft | sed 'a\}
+> @kbd{ indented}
+> @kbd{'}
+flushleft
+indented
+$ @kbd{echo foo | sed 'a\}
+> @kbd{\ indented}
+> @kbd{'}
+flushleft
+ indented
+@end example
+
+Posix requires that with an empty regular expression, the last non-empty
+regular expression from either an address specification or substitution
+command is applied. However, busybox 1.6.1 complains when using a
+substitution command with a replacement containing a back-reference to
+an empty regular expression; the workaround is repeating the regular
+expression.
+
+@example
+$ @kbd{echo abc | busybox sed '/a\(b\)c/ s//\1/'}
+sed: No previous regexp.
+$ @kbd{echo abc | busybox sed '/a\(b\)c/ s/a\(b\)c/\1/'}
+b
+@end example
+
+
+@item @command{sed} (@samp{t})
+@c ---------------------------
+@prindex @command{sed} (@samp{t})
+Some old systems have @command{sed} that ``forget'' to reset their
+@samp{t} flag when starting a new cycle. For instance on MIPS
+RISC/OS, and on IRIX 5.3, if you run the following @command{sed}
+script (the line numbers are not actual part of the texts):
+
+@example
+s/keep me/kept/g # a
+t end # b
+s/.*/deleted/g # c
+:end # d
+@end example
+
+@noindent
+on
+
+@example
+delete me # 1
+delete me # 2
+keep me # 3
+delete me # 4
+@end example
+
+@noindent
+you get
+
+@example
+deleted
+delete me
+kept
+deleted
+@end example
+
+@noindent
+instead of
+
+@example
+deleted
+deleted
+kept
+deleted
+@end example
+
+Why? When processing line 1, (c) matches, therefore sets the @samp{t}
+flag, and the output is produced. When processing
+line 2, the @samp{t} flag is still set (this is the bug). Command (a)
+fails to match, but @command{sed} is not supposed to clear the @samp{t}
+flag when a substitution fails. Command (b) sees that the flag is set,
+therefore it clears it, and jumps to (d), hence you get @samp{delete me}
+instead of @samp{deleted}. When processing line (3), @samp{t} is clear,
+(a) matches, so the flag is set, hence (b) clears the flags and jumps.
+Finally, since the flag is clear, line 4 is processed properly.
+
+There are two things one should remember about @samp{t} in @command{sed}.
+Firstly, always remember that @samp{t} jumps if @emph{some} substitution
+succeeded, not only the immediately preceding substitution. Therefore,
+always use a fake @samp{t clear} followed by a @samp{:clear} on the next
+line, to reset the @samp{t} flag where needed.
+
+Secondly, you cannot rely on @command{sed} to clear the flag at each new
+cycle.
+
+One portable implementation of the script above is:
+
+@example
+t clear
+:clear
+s/keep me/kept/g
+t end
+s/.*/deleted/g
+:end
+@end example
+
+@item @command{sleep}
+@c ------------------
+@prindex @command{sleep}
+Using @command{sleep} is generally portable. However, remember that
+adding a @command{sleep} to work around timestamp issues, with a minimum
+granularity of one second, doesn't scale well for parallel builds on
+modern machines with sub-second process completion.
+
+@item @command{sort}
+@c -----------------
+@prindex @command{sort}
+Remember that sort order is influenced by the current locale. Inside
+@file{configure}, the C locale is in effect, but in Makefile snippets,
+you may need to specify @code{LC_ALL=C sort}.
+
+@item @command{tar}
+@c ----------------
+@prindex @command{tar}
+There are multiple file formats for @command{tar}; if you use Automake,
+the macro @code{AM_INIT_AUTOMAKE} has some options controlling which
+level of portability to use.
+
+@anchor{touch}
+@item @command{touch}
+@c ------------------
+@prindex @command{touch}
+@cindex timestamp resolution
+If you specify the desired timestamp (e.g., with the @option{-r}
+option), older @command{touch} implementations use the @code{utime} or
+@code{utimes} system call, which can result in the same kind of
+timestamp truncation problems that @samp{cp -p} has.
+
+On ancient BSD systems, @command{touch} or any command that
+results in an empty file does not update the timestamps, so use a
+command like @command{echo} as a workaround.
+Also,
+GNU @command{touch} 3.16r (and presumably all before that)
+fails to work on SunOS 4.1.3 when the empty file is on an
+NFS-mounted 4.2 volume.
+However, these problems are no longer of practical concern.
+
+@item @command{tr}
+@c ---------------
+@prindex @command{tr}
+@cindex carriage return, deleting
+@cindex newline, deleting
+@cindex deleting carriage return
+Not all versions of @command{tr} handle all backslash character escapes.
+For example, Solaris 10 @command{/usr/ucb/tr} falls over, even though
+Solaris contains more modern @command{tr} in other locations.
+Using octal escapes is more portable for carriage returns, since
+@samp{\015} is the same for both ASCII and EBCDIC, and since use of
+literal carriage returns in scripts causes a number of other problems.
+But for other characters, like newline, using octal escapes ties the
+operation to ASCII, so it is better to use literal characters.
+
+@example
+$ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\n' ; echo}
+moo
+light
+$ @kbd{@{ echo moon; echo light; @} | /usr/bin/tr -d '\n' ; echo}
+moonlight
+$ @kbd{@{ echo moon; echo light; @} | /usr/ucb/tr -d '\012' ; echo}
+moonlight
+$ @kbd{nl='}
+@kbd{'; @{ echo moon; echo light; @} | /usr/ucb/tr -d "$nl" ; echo}
+moonlight
+@end example
+
+Not all versions of @command{tr} recognize direct ranges of characters: at
+least Solaris @command{/usr/bin/tr} still fails to do so. But you can
+use @command{/usr/xpg4/bin/tr} instead, or add brackets (which in Posix
+transliterate to themselves).
+
+@example
+$ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr a-z A-Z}
+HAZy FAntAZy
+$ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/bin/tr '[a-z]' '[A-Z]'}
+HAZY FANTAZY
+$ @kbd{echo "Hazy Fantazy" | LC_ALL=C /usr/xpg4/bin/tr a-z A-Z}
+HAZY FANTAZY
+@end example
+
+When providing two arguments, be sure the second string is at least as
+long as the first.
+
+@example
+$ @kbd{echo abc | /usr/xpg4/bin/tr bc d}
+adc
+$ @kbd{echo abc | coreutils/tr bc d}
+add
+@end example
+
+Posix requires @command{tr} to operate on binary files. But at least
+Solaris @command{/usr/ucb/tr} and @command{/usr/bin/tr} silently discard
+@code{NUL} in the input prior to doing any translation. When using
+@command{tr} to process a binary file that may contain @code{NUL} bytes,
+it is necessary to use @command{/usr/xpg4/bin/tr} instead, or
+@command{/usr/xpg6/bin/tr} if that is available.
+
+@example
+$ @kbd{printf 'a\0b' | /usr/ucb/tr x x | od -An -tx1}
+ 61 62
+$ @kbd{printf 'a\0b' | /usr/bin/tr x x | od -An -tx1}
+ 61 62
+$ @kbd{printf 'a\0b' | /usr/xpg4/bin/tr x x | od -An -tx1}
+ 61 00 62
+@end example
+
+Solaris @command{/usr/ucb/tr} additionally fails to handle @samp{\0} as the
+octal escape for @code{NUL}.
+
+@example
+$ @kbd{printf 'abc' | /usr/ucb/tr 'bc' '\0d' | od -An -tx1}
+ 61 62 63
+$ @kbd{printf 'abc' | /usr/bin/tr 'bc' '\0d' | od -An -tx1}
+ 61 00 64
+$ @kbd{printf 'abc' | /usr/xpg4/bin/tr 'bc' '\0d' | od -An -tx1}
+ 61 00 64
+@end example
+
+@end table
+
+
+@node Portable Make
+@chapter Portable Make Programming
+@prindex @command{make}
+@cindex Limitations of @command{make}
+
+Writing portable makefiles is an art. Since a makefile's commands are
+executed by the shell, you must consider the shell portability issues
+already mentioned. However, other issues are specific to @command{make}
+itself.
+
+@menu
+* $< in Ordinary Make Rules:: $< in ordinary rules
+* Failure in Make Rules:: Failing portably in rules
+* Special Chars in Names:: Special Characters in Macro Names
+* Backslash-Newline-Empty:: Empty lines after backslash-newline
+* Backslash-Newline Comments:: Spanning comments across line boundaries
+* Long Lines in Makefiles:: Line length limitations
+* Macros and Submakes:: @code{make macro=value} and submakes
+* The Make Macro MAKEFLAGS:: @code{$(MAKEFLAGS)} portability issues
+* The Make Macro SHELL:: @code{$(SHELL)} portability issues
+* Parallel Make:: Parallel @command{make} quirks
+* Comments in Make Rules:: Other problems with Make comments
+* Newlines in Make Rules:: Using literal newlines in rules
+* Comments in Make Macros:: Other problems with Make comments in macros
+* Trailing whitespace in Make Macros:: Macro substitution problems
+* Command-line Macros and whitespace:: Whitespace trimming of values
+* obj/ and Make:: Don't name a subdirectory @file{obj}
+* make -k Status:: Exit status of @samp{make -k}
+* VPATH and Make:: @code{VPATH} woes
+* Single Suffix Rules:: Single suffix rules and separated dependencies
+* Timestamps and Make:: Subsecond timestamp resolution
+@end menu
+
+@node $< in Ordinary Make Rules
+@section @code{$<} in Ordinary Make Rules
+
+Posix says that the @samp{$<} construct in makefiles can be
+used only in inference rules and in the @samp{.DEFAULT} rule; its
+meaning in ordinary rules is unspecified. Solaris @command{make}
+for instance replaces it with the empty string. OpenBSD (3.0 and
+later) @command{make} diagnoses these uses and errors out.
+
+@node Failure in Make Rules
+@section Failure in Make Rules
+
+Posix 2008 requires that @command{make} must invoke each command with
+the equivalent of a @samp{sh -e -c} subshell, which causes the
+subshell to exit immediately if a subsidiary simple-command fails,
+although not all @command{make} implementations have historically
+followed this rule. For
+example, the command @samp{touch T; rm -f U} may attempt to
+remove @file{U} even if the @command{touch} fails, although this is not
+permitted with Posix make. One way to work around failures in simple
+commands is to reword them so that they always succeed, e.g., @samp{touch
+T || :; rm -f U}.
+However, even this approach can run into common bugs in BSD
+implementations of the @option{-e} option of @command{sh} and
+@command{set} (@pxref{set, , Limitations of Shell Builtins}), so if you
+are worried
+about porting to buggy BSD shells it may be simpler to migrate
+complicated @command{make} actions into separate scripts.
+
+@node Special Chars in Names
+@section Special Characters in Make Macro Names
+
+Posix limits macro names to nonempty strings containing only
+ASCII letters and digits, @samp{.}, and @samp{_}. Many
+@command{make} implementations allow a wider variety of characters, but
+portable makefiles should avoid them. It is portable to start a name
+with a special character, e.g., @samp{$(.FOO)}.
+
+Some ancient @command{make} implementations don't support leading
+underscores in macro names. An example is NEWS-OS 4.2R.
+
+@example
+$ @kbd{cat Makefile}
+_am_include = #
+_am_quote =
+all:; @@echo this is test
+$ @kbd{make}
+Make: Must be a separator on rules line 2. Stop.
+$ @kbd{cat Makefile2}
+am_include = #
+am_quote =
+all:; @@echo this is test
+$ @kbd{make -f Makefile2}
+this is test
+@end example
+
+@noindent
+However, this problem is no longer of practical concern.
+
+@node Backslash-Newline-Empty
+@section Backslash-Newline Before Empty Lines
+
+A bug in Bash 2.03 can cause problems if a Make rule contains a
+backslash-newline followed by line that expands to nothing.
+For example, on Solaris 8:
+
+@example
+SHELL = /bin/bash
+EMPTY =
+foo:
+ touch foo \
+ $(EMPTY)
+@end example
+
+@noindent
+executes
+
+@example
+/bin/bash -c 'touch foo \
+'
+@end example
+
+@noindent
+which fails with a syntax error, due to the Bash bug. To avoid this
+problem, avoid nullable macros in the last line of a multiline command.
+
+@c This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
+@c but another hppa hpux 10.20 didn't have it. Bob Proulx
+@c <bob@proulx.com> thinks it was in hpux 8.0 too.
+On some versions of HP-UX, @command{make} reads multiple newlines
+following a backslash, continuing to the next non-empty line. For
+example,
+
+@example
+FOO = one \
+
+BAR = two
+
+test:
+ : FOO is "$(FOO)"
+ : BAR is "$(BAR)"
+@end example
+
+@noindent
+shows @code{FOO} equal to @code{one BAR = two}. Other implementations
+sensibly let a backslash continue only to the immediately following
+line.
+
+@node Backslash-Newline Comments
+@section Backslash-Newline in Make Comments
+
+According to Posix, Make comments start with @code{#}
+and continue until an unescaped newline is reached.
+
+@example
+$ @kbd{cat Makefile}
+# A = foo \
+ bar \
+ baz
+
+all:
+ @@echo ok
+$ @kbd{make} # GNU make
+ok
+@end example
+
+@noindent
+However this is not always the case. Some implementations
+discard everything from @code{#} through the end of the line, ignoring any
+trailing backslash.
+
+@example
+$ @kbd{pmake} # BSD make
+"Makefile", line 3: Need an operator
+Fatal errors encountered -- cannot continue
+@end example
+
+@noindent
+Therefore, if you want to comment out a multi-line definition, prefix each
+line with @code{#}, not only the first.
+
+@example
+# A = foo \
+# bar \
+# baz
+@end example
+
+@node Long Lines in Makefiles
+@section Long Lines in Makefiles
+
+Tru64 5.1's @command{make} has been reported to crash when given a
+makefile with lines longer than around 20 kB. Earlier versions are
+reported to exit with @code{Line too long} diagnostics.
+
+@node Macros and Submakes
+@section @code{make macro=value} and Submakes
+
+A command-line variable definition such as @code{foo=bar} overrides any
+definition of @code{foo} in a makefile. Some @command{make}
+implementations (such as GNU @command{make}) propagate this
+override to subsidiary invocations of @command{make}. Some other
+implementations do not pass the substitution along to submakes.
+
+@example
+$ @kbd{cat Makefile}
+foo = foo
+one:
+ @@echo $(foo)
+ $(MAKE) two
+two:
+ @@echo $(foo)
+$ @kbd{make foo=bar} # GNU make 3.79.1
+bar
+make two
+make[1]: Entering directory `/home/adl'
+bar
+make[1]: Leaving directory `/home/adl'
+$ @kbd{pmake foo=bar} # BSD make
+bar
+pmake two
+foo
+@end example
+
+You have a few possibilities if you do want the @code{foo=bar} override
+to propagate to submakes. One is to use the @option{-e}
+option, which causes all environment variables to have precedence over
+the makefile macro definitions, and declare foo as an environment
+variable:
+
+@example
+$ @kbd{env foo=bar make -e}
+@end example
+
+The @option{-e} option is propagated to submakes automatically,
+and since the environment is inherited between @command{make}
+invocations, the @code{foo} macro is overridden in
+submakes as expected.
+
+This syntax (@code{foo=bar make -e}) is portable only when used
+outside of a makefile, for instance from a script or from the
+command line. When run inside a @command{make} rule, GNU
+@command{make} 3.80 and prior versions forget to propagate the
+@option{-e} option to submakes.
+
+Moreover, using @option{-e} could have unexpected side effects if your
+environment contains some other macros usually defined by the
+makefile. (See also the note about @code{make -e} and @code{SHELL}
+below.)
+
+If you can foresee all macros that a user might want to override, then
+you can propagate them to submakes manually, from your makefile:
+
+@example
+foo = foo
+one:
+ @@echo $(foo)
+ $(MAKE) foo=$(foo) two
+two:
+ @@echo $(foo)
+@end example
+
+Another way to propagate a variable to submakes in a portable way is to
+expand an extra variable in every invocation of @samp{$(MAKE)} within
+your makefile:
+
+@example
+foo = foo
+one:
+ @@echo $(foo)
+ $(MAKE) $(SUBMAKEFLAGS) two
+two:
+ @@echo $(foo)
+@end example
+
+Users must be aware that this technique is in use to take advantage of
+it, e.g.@: with @code{make foo=bar SUBMAKEFLAGS='foo=bar'}, but it
+allows any macro to be overridden. Makefiles generated by
+@command{automake} use this technique, expanding @code{$(AM_MAKEFLAGS)}
+on the command lines of submakes (@pxref{Subdirectories, , Automake,
+automake, GNU Automake}).
+
+@node The Make Macro MAKEFLAGS
+@section The Make Macro MAKEFLAGS
+@cindex @code{MAKEFLAGS} and @command{make}
+@cindex @command{make} and @code{MAKEFLAGS}
+
+Posix requires @command{make} to use @code{MAKEFLAGS} to affect the
+current and recursive invocations of make, but allows implementations
+several formats for the variable. It is tricky to parse
+@code{$MAKEFLAGS} to determine whether @option{-s} for silent execution
+or @option{-k} for continued execution are in effect. For example, you
+cannot assume that the first space-separated word in @code{$MAKEFLAGS}
+contains single-letter options, since in the Cygwin version of
+GNU @command{make} it is either @option{--unix} or
+@option{--win32} with the second word containing single-letter options.
+
+@example
+$ @kbd{cat Makefile}
+all:
+ @@echo MAKEFLAGS = $(MAKEFLAGS)
+$ @kbd{make}
+MAKEFLAGS = --unix
+$ @kbd{make -k}
+MAKEFLAGS = --unix -k
+@end example
+
+@node The Make Macro SHELL
+@section The Make Macro @code{SHELL}
+@cindex @code{SHELL} and @command{make}
+@cindex @command{make} and @code{SHELL}
+
+Posix-compliant @command{make} internally uses the @code{$(SHELL)}
+macro to spawn shell processes and execute Make rules. This
+is a builtin macro supplied by @command{make}, but it can be modified
+by a makefile or by a command-line argument.
+
+Not all @command{make} implementations define this @code{SHELL} macro.
+Tru64
+@command{make} is an example; this implementation always uses
+@code{/bin/sh}. So it's a good idea to always define @code{SHELL} in
+your makefiles. If you use Autoconf, do
+
+@example
+SHELL = @@SHELL@@
+@end example
+
+@noindent
+If you use Automake, this is done for you.
+
+Do not force @code{SHELL = /bin/sh} because that is not correct
+everywhere. Remember, @file{/bin/sh} is not Posix compliant on many
+systems, such as FreeBSD 4, NetBSD 3, AIX 3, Solaris 10, or Tru64.
+Additionally, DJGPP lacks @code{/bin/sh}, and when its
+GNU @command{make} port sees such a setting it enters a
+special emulation mode where features like pipes and redirections are
+emulated on top of DOS's @command{command.com}. Unfortunately this
+emulation is incomplete; for instance it does not handle command
+substitutions. Using @code{@@SHELL@@} means that your makefile will
+benefit from the same improved shell, such as @command{bash} or
+@command{ksh}, that was discovered during @command{configure}, so that
+you aren't fighting two different sets of shell bugs between the two
+contexts.
+
+Posix-compliant @command{make} should never acquire the value of
+$(SHELL) from the environment, even when @code{make -e} is used
+(otherwise, think about what would happen to your rules if
+@code{SHELL=/bin/tcsh}).
+
+However not all @command{make} implementations have this exception.
+For instance it's not surprising that Tru64 @command{make} doesn't
+protect @code{SHELL}, since it doesn't use it.
+
+@example
+$ @kbd{cat Makefile}
+SHELL = /bin/sh
+FOO = foo
+all:
+ @@echo $(SHELL)
+ @@echo $(FOO)
+$ @kbd{env SHELL=/bin/tcsh FOO=bar make -e} # Tru64 Make
+/bin/tcsh
+bar
+$ @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e} # GNU make
+/bin/sh
+bar
+@end example
+
+Conversely, @command{make} is not supposed to export any changes to the
+macro @code{SHELL} to child processes. Again, many implementations
+break this rule:
+
+@example
+$ @kbd{cat Makefile}
+all:
+ @@echo $(SHELL)
+ @@printenv SHELL
+$ @kbd{env SHELL=sh make -e SHELL=/bin/ksh} # BSD Make, GNU make 3.80
+/bin/ksh
+/bin/ksh
+$ @kbd{env SHELL=sh gmake -e SHELL=/bin/ksh} # GNU make 3.81
+/bin/ksh
+sh
+@end example
+
+@node Parallel Make
+@section Parallel Make
+@cindex Parallel @command{make}
+
+Support for parallel execution in @command{make} implementation varies.
+Generally, using GNU make is your best bet.
+
+When NetBSD or FreeBSD @command{make} are run in parallel mode, they will
+reuse the same shell for multiple commands within one recipe. This can
+have various unexpected consequences. For example, changes of directories
+or variables persist between recipes, so that:
+
+@example
+all:
+ @@var=value; cd /; pwd; echo $$var; echo $$$$
+ @@pwd; echo $$var; echo $$$$
+@end example
+
+@noindent
+may output the following with @code{make -j1}, at least on NetBSD up to
+5.1 and FreeBSD up to 8.2:
+
+@example
+/
+value
+32235
+/
+value
+32235
+@end example
+
+@noindent
+while without @option{-j1}, or with @option{-B}, the output looks less
+surprising:
+
+@example
+/
+value
+32238
+/tmp
+
+32239
+@end example
+
+@noindent
+Another consequence is that, if one command in a recipe uses @code{exit 0}
+to indicate a successful exit, the shell will be gone and the remaining
+commands of this recipe will not be executed.
+
+The BSD @command{make} implementations, when run in parallel mode,
+will also pass the @command{Makefile} recipes to the shell through
+its standard input, thus making it unusable from the recipes:
+
+@example
+$ @kbd{cat Makefile}
+read:
+ @@read line; echo LINE: $$line
+@c $$ @c restore font-lock
+$ @kbd{echo foo | make read}
+LINE: foo
+$ @kbd{echo foo | make -j1 read} # NetBSD 5.1 and FreeBSD 8.2
+LINE:
+@end example
+
+@noindent
+Moreover, when FreeBSD @command{make} (up at least to 8.2) is run in
+parallel mode, it implements the @code{@@} and @code{-} ``recipe
+modifiers'' by dynamically modifying the active shell flags. This
+behavior has the effects of potentially clobbering the exit status
+of recipes silenced with the @code{@@} modifier if they also unset
+the @option{errexit} shell flag, and of mangling the output in
+unexpected ways:
+
+@example
+$ @kbd{cat Makefile}
+a:
+ @@echo $$-; set +e; false
+b:
+ -echo $$-; false; echo set -
+$ @kbd{make a; echo status: $?}
+ehBc
+*** Error code 1
+status: 1
+$ @kbd{make -j1 a; echo status: $?}
+ehB
+status: 0
+$ @kbd{make b}
+echo $-; echo set -
+hBc
+set -
+$ @kbd{make -j1 b}
+echo $-; echo hvB
+@end example
+
+@noindent
+You can avoid all these issues by using the @option{-B} option to enable
+compatibility semantics. However, that will effectively also disable
+all parallelism as that will cause prerequisites to be updated in the
+order they are listed in a rule.
+
+Some make implementations (among them, FreeBSD @command{make}, NetBSD
+@command{make}, and Solaris @command{dmake}), when invoked with a
+@option{-j@var{N}} option, connect the standard output and standard
+error of all their child processes to pipes or temporary regular
+files. This can lead to subtly different semantics in the behavior
+of the spawned processes. For example, even if the @command{make}
+standard output is connected to a tty, the recipe command will not be:
+
+@example
+$ @kbd{cat Makefile}
+all:
+ @@test -t 1 && echo "Is a tty" || echo "Is not a tty"
+$ @kbd{make -j 2} # FreeBSD 8.2 make
+Is not a tty
+$ @kbd{make -j 2} # NetBSD 5.1 make
+--- all ---
+Is not a tty
+$ @kbd{dmake -j 2} # Solaris 10 dmake
+@var{hostname} --> 1 job
+@var{hostname} --> Job output
+Is not a tty
+@end example
+
+@noindent
+On the other hand:
+
+@example
+$ @kbd{make -j 2} # GNU make, Heirloom make
+Is a tty
+@end example
+
+@noindent
+The above examples also show additional status output produced in parallel
+mode for targets being updated by Solaris @command{dmake} and NetBSD
+@command{make} (but @emph{not} by FreeBSD @command{make}).
+
+Furthermore, parallel runs of those @command{make} implementations will
+route standard error from commands that they spawn into their own
+standard output, and may remove leading whitespace from output lines.
+
+
+@node Comments in Make Rules
+@section Comments in Make Rules
+@cindex Comments in @file{Makefile} rules
+@cindex @file{Makefile} rules and comments
+
+Never put comments in a rule.
+
+Some @command{make} treat anything starting with a tab as a command for
+the current rule, even if the tab is immediately followed by a @code{#}.
+The @command{make} from Tru64 Unix V5.1 is one of them. The following
+makefile runs @code{# foo} through the shell.
+
+@example
+all:
+ # foo
+@end example
+
+As a workaround, you can use the @command{:} no-op command with a string
+argument that gets ignored:
+
+@example
+all:
+ : "foo"
+@end example
+
+Conversely, if you want to use the @samp{#} character in some command,
+you can only do so by expanding it inside a rule (@pxref{Comments in
+Make Macros}). So for example, if @samp{COMMENT_CHAR} is substituted by
+@command{config.status} as @samp{#}, then the following substitutes
+@samp{@@COMMENT_CHAR@@} in a generated header:
+
+@example
+foo.h: foo.h.in
+ sed -e 's|@@''COMMENT_CHAR''@@|@@COMMENT_CHAR@@|g' \
+ $(srcdir)/foo.h.in > $@@
+@end example
+
+The funny shell quoting avoids a substitution at @command{config.status}
+run time of the left-hand side of the @command{sed} @samp{s} command.
+
+@node Newlines in Make Rules
+@section Newlines in Make Rules
+@cindex Newlines in @file{Makefile} rules
+@cindex @file{Makefile} rules and newlines
+
+In shell scripts, newlines can be used inside string literals. But in
+the shell statements of @file{Makefile} rules, this is not possible:
+A newline not preceded by a backslash is a separator between shell
+statements. Whereas a newline that is preceded by a backslash becomes
+part of the shell statement according to POSIX, but gets replaced,
+together with the backslash that precedes it, by a space in GNU
+@command{make} 3.80 and older. So, how can a newline be used in a string
+literal?
+
+The trick is to set up a shell variable that contains a newline:
+
+@example
+nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"
+@end example
+
+For example, in order to create a multiline @samp{sed} expression that
+inserts a blank line after every line of a file, this code can be used:
+
+@example
+nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \
+sed -e "s/\$$/\\$$@{nl@}/" < input > output
+@end example
+
+@node Comments in Make Macros
+@section Comments in Make Macros
+@cindex Comments in @file{Makefile} macros
+@cindex @file{Makefile} macros and comments
+
+Avoid putting comments in macro values as far as possible. Posix
+specifies that the text starting from the @samp{#} sign until the end of
+the line is to be ignored, which has the unfortunate effect of
+disallowing them even within quotes. Thus, the following might lead to
+a syntax error at compile time:
+
+@example
+CPPFLAGS = "-DCOMMENT_CHAR='#'"
+@end example
+
+@noindent
+as @samp{CPPFLAGS} may be expanded to @samp{"-DCOMMENT_CHAR='}.
+
+Most @command{make} implementations disregard this and treat single and
+double quotes specially here. Also, GNU @command{make} lets you put
+@samp{#} into a macro value by escaping it with a backslash, i.e.,
+@samp{\#}. However, neither of these usages are portable.
+@xref{Comments in Make Rules}, for a portable alternative.
+
+Even without quoting involved, comments can have surprising effects,
+because the whitespace before them is part of the variable value:
+
+@example
+foo = bar # trailing comment
+print: ; @@echo "$(foo)."
+@end example
+
+@noindent
+prints @samp{bar .}, which is usually not intended, and can expose
+@command{make} bugs as described below.
+
+@node Trailing whitespace in Make Macros
+@section Trailing whitespace in Make Macros
+@cindex whitespace in @file{Makefile} macros
+@cindex @file{Makefile} macros and whitespace
+
+GNU @command{make} 3.80 mistreats trailing whitespace in macro
+substitutions and appends another spurious suffix:
+
+@example
+empty =
+foo = bar $(empty)
+print: ; @@echo $(foo:=.test)
+@end example
+
+@noindent
+prints @samp{bar.test .test}.
+
+BSD and Solaris @command{make} implementations do not honor trailing
+whitespace in macro definitions as Posix requires:
+
+@example
+foo = bar # Note the space after "bar".
+print: ; @@echo $(foo)t
+@end example
+
+@noindent
+prints @samp{bart} instead of @samp{bar t}. To work around this, you
+can use a helper macro as in the previous example.
+
+
+@node Command-line Macros and whitespace
+@section Command-line Macros and whitespace
+@cindex whitespace in command-line macros
+@cindex command-line, macros set on
+@cindex environment, macros set from
+
+Some @command{make} implementations may strip trailing whitespace off
+of macros set on the command line in addition to leading whitespace.
+Further, some may strip leading whitespace off of macros set from
+environment variables:
+
+@example
+$ @kbd{echo 'print: ; @@echo "x$(foo)x$(bar)x"' |
+ foo=' f f ' make -f - bar=' b b '}
+x f f xb b x # AIX, BSD, GNU make
+xf f xb b x # HP-UX, IRIX, Tru64/OSF make
+x f f xb bx # Solaris make
+@end example
+
+
+@node obj/ and Make
+@section The @file{obj/} Subdirectory and Make
+@cindex @file{obj/}, subdirectory
+@cindex BSD @command{make} and @file{obj/}
+
+Never name one of your subdirectories @file{obj/} if you don't like
+surprises.
+
+If an @file{obj/} directory exists, BSD @command{make} enters it
+before reading the makefile. Hence the makefile in the
+current directory is not read.
+
+@example
+$ @kbd{cat Makefile}
+all:
+ echo Hello
+$ @kbd{cat obj/Makefile}
+all:
+ echo World
+$ @kbd{make} # GNU make
+echo Hello
+Hello
+$ @kbd{pmake} # BSD make
+echo World
+World
+@end example
+
+@node make -k Status
+@section Exit Status of @code{make -k}
+@cindex @code{make -k}
+
+Do not rely on the exit status of @code{make -k}. Some implementations
+reflect whether they encountered an error in their exit status; other
+implementations always succeed.
+
+@example
+$ @kbd{cat Makefile}
+all:
+ false
+$ @kbd{make -k; echo exit status: $?} # GNU make
+false
+make: *** [all] Error 1
+exit status: 2
+$ @kbd{pmake -k; echo exit status: $?} # BSD make
+false
+*** Error code 1 (continuing)
+exit status: 0
+@end example
+
+@node VPATH and Make
+@section @code{VPATH} and Make
+@cindex @code{VPATH}
+
+Posix does not specify the semantics of @code{VPATH}. Typically,
+@command{make} supports @code{VPATH}, but its implementation is not
+consistent.
+
+Autoconf and Automake support makefiles whose usages of @code{VPATH} are
+portable to recent-enough popular implementations of @command{make}, but
+to keep the resulting makefiles portable, a package's makefile
+prototypes must take the following issues into account. These issues
+are complicated and are often poorly understood, and installers who use
+@code{VPATH} should expect to find many bugs in this area. If you use
+@code{VPATH}, the simplest way to avoid these portability bugs is to
+stick with GNU @command{make}, since it is the most
+commonly-used @command{make} among Autoconf users.
+
+Here are some known issues with some @code{VPATH}
+implementations.
+
+@menu
+* Variables listed in VPATH:: @code{VPATH} must be literal on ancient hosts
+* VPATH and Double-colon:: Problems with @samp{::} on ancient hosts
+* $< in Explicit Rules:: @code{$<} does not work in ordinary rules
+* Automatic Rule Rewriting:: @code{VPATH} goes wild on Solaris
+* Tru64 Directory Magic:: @command{mkdir} goes wild on Tru64
+* Make Target Lookup:: More details about @code{VPATH} lookup
+@end menu
+
+@node Variables listed in VPATH
+@subsection Variables listed in @code{VPATH}
+@cindex @code{VPATH} and variables
+@cindex variables and @code{VPATH}
+
+Do not set @code{VPATH} to the value of another variable, for example
+@samp{VPATH = $(srcdir)}, because some ancient versions of
+@command{make} do not do variable substitutions on the value of
+@code{VPATH}. For example, use this
+
+@example
+srcdir = @@srcdir@@
+VPATH = @@srcdir@@
+@end example
+
+@noindent
+rather than @samp{VPATH = $(srcdir)}. Note that with GNU
+Automake, there is no need to set this yourself.
+
+@node VPATH and Double-colon
+@subsection @code{VPATH} and Double-colon Rules
+@cindex @code{VPATH} and double-colon rules
+@cindex double-colon rules and @code{VPATH}
+
+With ancient versions of Sun @command{make},
+any assignment to @code{VPATH} causes @command{make} to execute only
+the first set of double-colon rules.
+However, this problem is no longer of practical concern.
+
+@node $< in Explicit Rules
+@subsection @code{$<} Not Supported in Explicit Rules
+@cindex explicit rules, @code{$<}, and @code{VPATH}
+@cindex @code{$<}, explicit rules, and @code{VPATH}
+@cindex @code{VPATH}, explicit rules, and @code{$<}
+
+Using @code{$<} in explicit rules is not portable.
+The prerequisite file must be named explicitly in the rule. If you want
+to find the prerequisite via a @code{VPATH} search, you have to code the
+whole thing manually. @xref{Build Directories}.
+
+@node Automatic Rule Rewriting
+@subsection Automatic Rule Rewriting
+@cindex @code{VPATH} and automatic rule rewriting
+@cindex automatic rule rewriting and @code{VPATH}
+
+Some @command{make} implementations, such as Solaris and Tru64,
+search for prerequisites in @code{VPATH} and
+then rewrite each occurrence as a plain word in the rule.
+For instance:
+
+@example
+# This isn't portable to GNU make.
+VPATH = ../pkg/src
+f.c: if.c
+ cp if.c f.c
+@end example
+
+@noindent
+executes @code{cp ../pkg/src/if.c f.c} if @file{if.c} is
+found in @file{../pkg/src}.
+
+However, this rule leads to real problems in practice. For example, if
+the source directory contains an ordinary file named @file{test} that is
+used in a dependency, Solaris @command{make} rewrites commands like
+@samp{if test -r foo; @dots{}} to @samp{if ../pkg/src/test -r foo;
+@dots{}}, which is typically undesirable. In fact, @command{make} is
+completely unaware of shell syntax used in the rules, so the VPATH
+rewrite can potentially apply to @emph{any} whitespace-separated word
+in a rule, including shell variables, functions, and keywords.
+
+@example
+$ @kbd{mkdir build}
+$ @kbd{cd build}
+$ @kbd{cat > Makefile <<'END'}
+VPATH = ..
+all: arg func for echo
+ func () @{ for arg in "$$@@"; do echo $$arg; done; @}; \
+ func "hello world"
+END
+$ @kbd{touch ../arg ../func ../for ../echo}
+$ @kbd{make}
+../func () @{ ../for ../arg in "$@@"; do ../echo $arg; done; @}; \
+../func "hello world"
+sh: syntax error at line 1: `do' unexpected
+*** Error code 2
+@end example
+
+@noindent
+To avoid this problem, portable makefiles should never mention a source
+file or dependency whose name is that of a shell keyword like @file{for}
+or @file{until}, a shell command like @command{cat} or @command{gcc} or
+@command{test}, or a shell function or variable used in the corresponding
+@command{Makefile} recipe.
+
+Because of these problems GNU @command{make} and many other @command{make}
+implementations do not rewrite commands, so portable makefiles should
+search @code{VPATH} manually. It is tempting to write this:
+
+@smallexample
+# This isn't portable to Solaris make.
+VPATH = ../pkg/src
+f.c: if.c
+ cp `test -f if.c || echo $(VPATH)/`if.c f.c
+@end smallexample
+
+@noindent
+However, the ``prerequisite rewriting'' still applies here. So if
+@file{if.c} is in @file{../pkg/src}, Solaris and Tru64 @command{make}
+execute
+
+@smallexample
+cp `test -f ../pkg/src/if.c || echo ../pkg/src/`if.c f.c
+@end smallexample
+
+@noindent
+which reduces to
+
+@example
+cp if.c f.c
+@end example
+
+@noindent
+and thus fails. Oops.
+
+A simple workaround, and good practice anyway, is to use @samp{$?} and
+@samp{$@@} when possible:
+
+@smallexample
+VPATH = ../pkg/src
+f.c: if.c
+ cp $? $@@
+@end smallexample
+
+@noindent
+but this does not generalize well to commands with multiple
+prerequisites. A more general workaround is to rewrite the rule so that
+the prerequisite @file{if.c} never appears as a plain word. For
+example, these three rules would be safe, assuming @file{if.c} is in
+@file{../pkg/src} and the other files are in the working directory:
+
+@smallexample
+VPATH = ../pkg/src
+f.c: if.c f1.c
+ cat `test -f ./if.c || echo $(VPATH)/`if.c f1.c >$@@
+g.c: if.c g1.c
+ cat `test -f 'if.c' || echo $(VPATH)/`if.c g1.c >$@@
+h.c: if.c h1.c
+ cat `test -f "if.c" || echo $(VPATH)/`if.c h1.c >$@@
+@end smallexample
+
+Things get worse when your prerequisites are in a macro.
+
+@example
+VPATH = ../pkg/src
+HEADERS = f.h g.h h.h
+install-HEADERS: $(HEADERS)
+ for i in $(HEADERS); do \
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+@c $$ restore font-lock
+ done
+@end example
+
+The above @code{install-HEADERS} rule is not Solaris-proof because @code{for
+i in $(HEADERS);} is expanded to @code{for i in f.h g.h h.h;}
+where @code{f.h} and @code{g.h} are plain words and are hence
+subject to @code{VPATH} adjustments.
+
+If the three files are in @file{../pkg/src}, the rule is run as:
+
+@example
+for i in ../pkg/src/f.h ../pkg/src/g.h h.h; do \
+ install -m 644 \
+ `test -f $i || echo ../pkg/src/`$i \
+ /usr/local/include/$i; \
+done
+@end example
+
+where the two first @command{install} calls fail. For instance,
+consider the @code{f.h} installation:
+
+@example
+install -m 644 \
+ `test -f ../pkg/src/f.h || \
+ echo ../pkg/src/ \
+ `../pkg/src/f.h \
+ /usr/local/include/../pkg/src/f.h;
+@end example
+
+@noindent
+It reduces to:
+
+@example
+install -m 644 \
+ ../pkg/src/f.h \
+ /usr/local/include/../pkg/src/f.h;
+@end example
+
+Note that the manual @code{VPATH} search did not cause any problems here;
+however this command installs @file{f.h} in an incorrect directory.
+
+Trying to quote @code{$(HEADERS)} in some way, as we did for
+@code{foo.c} a few makefiles ago, does not help:
+
+@example
+install-HEADERS: $(HEADERS)
+ headers='$(HEADERS)'; \
+ for i in $$headers; do \
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+ done
+@end example
+
+Now, @code{headers='$(HEADERS)'} macro-expands to:
+
+@example
+headers='f.h g.h h.h'
+@end example
+
+@noindent
+but @code{g.h} is still a plain word. (As an aside, the idiom
+@code{headers='$(HEADERS)'; for i in $$headers;} is a good
+idea if @code{$(HEADERS)} can be empty, because some shells diagnose a
+syntax error on @code{for i in;}.)
+
+One workaround is to strip this unwanted @file{../pkg/src/} prefix manually:
+
+@example
+VPATH = ../pkg/src
+HEADERS = f.h g.h h.h
+install-HEADERS: $(HEADERS)
+ headers='$(HEADERS)'; \
+ for i in $$headers; do \
+ i=`expr "$$i" : '$(VPATH)/\(.*\)'`;
+ $(INSTALL) -m 644 \
+ `test -f $$i || echo $(VPATH)/`$$i \
+ $(DESTDIR)$(includedir)/$$i; \
+@c $$ restore font-lock
+ done
+@end example
+
+Automake does something similar. However the above hack works only if
+the files listed in @code{HEADERS} are in the current directory or a
+subdirectory; they should not be in an enclosing directory. If we had
+@code{HEADERS = ../f.h}, the above fragment would fail in a VPATH
+build with Tru64 @command{make}. The reason is that not only does
+Tru64 @command{make} rewrite dependencies, but it also simplifies
+them. Hence @code{../f.h} becomes @code{../pkg/f.h} instead of
+@code{../pkg/src/../f.h}. This obviously defeats any attempt to strip
+a leading @file{../pkg/src/} component.
+
+The following example makes the behavior of Tru64 @command{make}
+more apparent.
+
+@example
+$ @kbd{cat Makefile}
+VPATH = sub
+all: ../foo
+ echo ../foo
+$ @kbd{ls}
+Makefile foo
+$ @kbd{make}
+echo foo
+foo
+@end example
+
+@noindent
+Dependency @file{../foo} was found in @file{sub/../foo}, but Tru64
+@command{make} simplified it as @file{foo}. (Note that the @file{sub/}
+directory does not even exist, this just means that the simplification
+occurred before the file was checked for.)
+
+For the record here is how SunOS 4 @command{make} behaves on this
+example.
+
+@smallexample
+$ @kbd{make}
+make: Fatal error: Don't know how to make target `../foo'
+$ @kbd{mkdir sub}
+$ @kbd{make}
+echo sub/../foo
+sub/../foo
+@end smallexample
+
+
+@node Tru64 Directory Magic
+@subsection Tru64 @command{make} Creates Prerequisite Directories Magically
+@cindex @code{VPATH} and prerequisite directories
+@cindex prerequisite directories and @code{VPATH}
+
+When a prerequisite is a subdirectory of @code{VPATH}, Tru64
+@command{make} creates it in the current directory.
+
+@example
+$ @kbd{mkdir -p foo/bar build}
+$ @kbd{cd build}
+$ @kbd{cat >Makefile <<END
+VPATH = ..
+all: foo/bar
+END}
+$ @kbd{make}
+mkdir foo
+mkdir foo/bar
+@end example
+
+This can yield unexpected results if a rule uses a manual @code{VPATH}
+search as presented before.
+
+@example
+VPATH = ..
+all : foo/bar
+ command `test -d foo/bar || echo ../`foo/bar
+@end example
+
+The above @command{command} is run on the empty @file{foo/bar}
+directory that was created in the current directory.
+
+@node Make Target Lookup
+@subsection Make Target Lookup
+@cindex @code{VPATH}, resolving target pathnames
+
+GNU @command{make} uses a complex algorithm to decide when it
+should use files found via a @code{VPATH} search. @xref{Search
+Algorithm, , How Directory Searches are Performed, make, The GNU Make
+Manual}.
+
+If a target needs to be rebuilt, GNU @command{make} discards the
+file name found during the @code{VPATH} search for this target, and
+builds the file locally using the file name given in the makefile.
+If a target does not need to be rebuilt, GNU @command{make} uses the
+file name found during the @code{VPATH} search.
+
+Other @command{make} implementations, like NetBSD @command{make}, are
+easier to describe: the file name found during the @code{VPATH} search
+is used whether the target needs to be rebuilt or not. Therefore
+new files are created locally, but existing files are updated at their
+@code{VPATH} location.
+
+OpenBSD and FreeBSD @command{make}, however,
+never perform a
+@code{VPATH} search for a dependency that has an explicit rule.
+This is extremely annoying.
+
+When attempting a @code{VPATH} build for an autoconfiscated package
+(e.g., @code{mkdir build && cd build && ../configure}), this means
+GNU
+@command{make} builds everything locally in the @file{build}
+directory, while BSD @command{make} builds new files locally and
+updates existing files in the source directory.
+
+@example
+$ @kbd{cat Makefile}
+VPATH = ..
+all: foo.x bar.x
+foo.x bar.x: newer.x
+ @@echo Building $@@
+$ @kbd{touch ../bar.x}
+$ @kbd{touch ../newer.x}
+$ @kbd{make} # GNU make
+Building foo.x
+Building bar.x
+$ @kbd{pmake} # NetBSD make
+Building foo.x
+Building ../bar.x
+$ @kbd{fmake} # FreeBSD make, OpenBSD make
+Building foo.x
+Building bar.x
+$ @kbd{tmake} # Tru64 make
+Building foo.x
+Building bar.x
+$ @kbd{touch ../bar.x}
+$ @kbd{make} # GNU make
+Building foo.x
+$ @kbd{pmake} # NetBSD make
+Building foo.x
+$ @kbd{fmake} # FreeBSD make, OpenBSD make
+Building foo.x
+Building bar.x
+$ @kbd{tmake} # Tru64 make
+Building foo.x
+Building bar.x
+@end example
+
+Note how NetBSD @command{make} updates @file{../bar.x} in its
+VPATH location, and how FreeBSD, OpenBSD, and Tru64
+@command{make} always
+update @file{bar.x}, even when @file{../bar.x} is up to date.
+
+Another point worth mentioning is that once GNU @command{make} has
+decided to ignore a @code{VPATH} file name (e.g., it ignored
+@file{../bar.x} in the above example) it continues to ignore it when
+the target occurs as a prerequisite of another rule.
+
+The following example shows that GNU @command{make} does not look up
+@file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
+because it ignored the @code{VPATH} result of @file{bar.x} while running
+the @code{bar.x: newer.x} rule.
+
+@example
+$ @kbd{cat Makefile}
+VPATH = ..
+all: bar.y
+bar.x: newer.x
+ @@echo Building $@@
+.SUFFIXES: .x .y
+.x.y:
+ cp $< $@@
+$ @kbd{touch ../bar.x}
+$ @kbd{touch ../newer.x}
+$ @kbd{make} # GNU make
+Building bar.x
+cp bar.x bar.y
+cp: cannot stat `bar.x': No such file or directory
+make: *** [bar.y] Error 1
+$ @kbd{pmake} # NetBSD make
+Building ../bar.x
+cp ../bar.x bar.y
+$ @kbd{rm bar.y}
+$ @kbd{fmake} # FreeBSD make, OpenBSD make
+echo Building bar.x
+cp bar.x bar.y
+cp: cannot stat `bar.x': No such file or directory
+*** Error code 1
+$ @kbd{tmake} # Tru64 make
+Building bar.x
+cp: bar.x: No such file or directory
+*** Exit 1
+@end example
+
+Note that if you drop away the command from the @code{bar.x: newer.x}
+rule, GNU @command{make} magically starts to work: it
+knows that @code{bar.x} hasn't been updated, therefore it doesn't
+discard the result from @code{VPATH} (@file{../bar.x}) in succeeding
+uses. Tru64 also works, but FreeBSD and OpenBSD
+still don't.
+
+@example
+$ @kbd{cat Makefile}
+VPATH = ..
+all: bar.y
+bar.x: newer.x
+.SUFFIXES: .x .y
+.x.y:
+ cp $< $@@
+$ @kbd{touch ../bar.x}
+$ @kbd{touch ../newer.x}
+$ @kbd{make} # GNU make
+cp ../bar.x bar.y
+$ @kbd{rm bar.y}
+$ @kbd{pmake} # NetBSD make
+cp ../bar.x bar.y
+$ @kbd{rm bar.y}
+$ @kbd{fmake} # FreeBSD make, OpenBSD make
+cp bar.x bar.y
+cp: cannot stat `bar.x': No such file or directory
+*** Error code 1
+$ @kbd{tmake} # Tru64 make
+cp ../bar.x bar.y
+@end example
+
+It seems the sole solution that would please every @command{make}
+implementation is to never rely on @code{VPATH} searches for targets.
+In other words, @code{VPATH} should be reserved to unbuilt sources.
+
+
+@node Single Suffix Rules
+@section Single Suffix Rules and Separated Dependencies
+@cindex Single Suffix Inference Rule
+@cindex Rule, Single Suffix Inference
+A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
+(@samp{.from.to:}), but which @emph{destination} suffix is empty
+(@samp{.from:}).
+
+@cindex Separated Dependencies
+@dfn{Separated dependencies} simply refers to listing the prerequisite
+of a target, without defining a rule. Usually one can list on the one
+hand side, the rules, and on the other hand side, the dependencies.
+
+Solaris @command{make} does not support separated dependencies for
+targets defined by single suffix rules:
+
+@example
+$ @kbd{cat Makefile}
+.SUFFIXES: .in
+foo: foo.in
+.in:
+ cp $< $@@
+$ @kbd{touch foo.in}
+$ @kbd{make}
+$ @kbd{ls}
+Makefile foo.in
+@end example
+
+@noindent
+while GNU Make does:
+
+@example
+$ @kbd{gmake}
+cp foo.in foo
+$ @kbd{ls}
+Makefile foo foo.in
+@end example
+
+Note it works without the @samp{foo: foo.in} dependency.
+
+@example
+$ @kbd{cat Makefile}
+.SUFFIXES: .in
+.in:
+ cp $< $@@
+$ @kbd{make foo}
+cp foo.in foo
+@end example
+
+@noindent
+and it works with double suffix inference rules:
+
+@example
+$ @kbd{cat Makefile}
+foo.out: foo.in
+.SUFFIXES: .in .out
+.in.out:
+ cp $< $@@
+$ @kbd{make}
+cp foo.in foo.out
+@end example
+
+As a result, in such a case, you have to write target rules.
+
+@node Timestamps and Make
+@section Timestamp Resolution and Make
+@cindex timestamp resolution
+Traditionally, file timestamps had 1-second resolution, and
+@command{make} used those timestamps to determine whether one file was
+newer than the other. However, many modern file systems have
+timestamps with 1-nanosecond resolution. Some @command{make}
+implementations look at the entire timestamp; others ignore the
+fractional part, which can lead to incorrect results. Normally this
+is not a problem, but in some extreme cases you may need to use tricks
+like @samp{sleep 1} to work around timestamp truncation bugs.
+
+Commands like @samp{cp -p} and @samp{touch -r} typically do not copy
+file timestamps to their full resolutions (@pxref{touch, , Limitations of Usual
+Tools}). Hence you should be wary of rules like this:
+
+@example
+dest: src
+ cp -p src dest
+@end example
+
+as @file{dest} often appears to be older than @file{src} after the
+timestamp is truncated, and this can cause @command{make} to do
+needless rework the next time it is invoked. To work around this
+problem, you can use a timestamp file, e.g.:
+
+@example
+dest-stamp: src
+ cp -p src dest
+ date >dest-stamp
+@end example
+
+Apart from timestamp resolution, there are also differences in handling
+equal timestamps. HP-UX @command{make} updates targets if it has the
+same time stamp as one of its prerequisites, in violation of Posix rules.
+
+This can cause spurious rebuilds for repeated runs of @command{make}.
+This in turn can cause @command{make} to fail if it tries to rebuild
+generated files in a possibly read-only source tree with tools not
+present on the end-user machine. Use GNU @command{make} instead.
+
+
+
+@c ======================================== Portable C and C++ Programming
+
+@node Portable C and C++
+@chapter Portable C and C++ Programming
+@cindex Portable C and C++ programming
+
+C and C++ programs often use low-level features of the underlying
+system, and therefore are often more difficult to make portable to other
+platforms.
+
+Several standards have been developed to help make your programs more
+portable. If you write programs with these standards in mind, you can
+have greater confidence that your programs work on a wide variety
+of systems.
+@ifhtml
+@uref{http://@/gcc.gnu.org/@/onlinedocs/@/gcc/@/Standards.html, Language
+Standards Supported by GCC}
+@end ifhtml
+@ifnothtml
+@xref{Standards, , Language Standards Supported by
+GCC, gcc, Using the GNU Compiler Collection
+(GCC)},
+@end ifnothtml
+for a list of C-related standards. Many programs also assume the
+@uref{http://@/www.opengroup.org/@/susv3, Posix standard}.
+
+Some old code is written to be portable to K&R C, which predates any C
+standard. K&R C compilers are no longer of practical interest, though,
+and the rest of section assumes at least C89, the first C standard.
+
+Program portability is a huge topic, and this section can only briefly
+introduce common pitfalls. @xref{System Portability, , Portability
+between System Types, standards, The GNU Coding Standards}, for
+more information.
+
+@menu
+* Varieties of Unportability:: How to make your programs unportable
+* Integer Overflow:: When integers get too large
+* Preprocessor Arithmetic:: @code{#if} expression problems
+* Null Pointers:: Properties of null pointers
+* Buffer Overruns:: Subscript errors and the like
+* Volatile Objects:: @code{volatile} and signals
+* Floating Point Portability:: Portable floating-point arithmetic
+* Exiting Portably:: Exiting and the exit status
+@end menu
+
+@node Varieties of Unportability
+@section Varieties of Unportability
+@cindex portability
+
+Autoconf tests and ordinary programs often need to test what is allowed
+on a system, and therefore they may need to deliberately exceed the
+boundaries of what the standards allow, if only to see whether an
+optional feature is present. When you write such a program, you should
+keep in mind the difference between constraints, unspecified behavior,
+and undefined behavior.
+
+In C, a @dfn{constraint} is a rule that the compiler must enforce. An
+example constraint is that C programs must not declare a bit-field with
+negative width. Tests can therefore reliably assume that programs with
+negative-width bit-fields are rejected by a compiler that conforms
+to the standard.
+
+@dfn{Unspecified behavior} is valid behavior, where the standard allows
+multiple possibilities. For example, the order of evaluation of
+function arguments is unspecified. Some unspecified behavior is
+@dfn{implementation-defined}, i.e., documented by the implementation,
+but since Autoconf tests cannot read the documentation they cannot
+distinguish between implementation-defined and other unspecified
+behavior. It is common for Autoconf tests to probe implementations to
+determine otherwise-unspecified behavior.
+
+@dfn{Undefined behavior} is invalid behavior, where the standard allows
+the implementation to do anything it pleases. For example,
+dereferencing a null pointer leads to undefined behavior. If possible,
+test programs should avoid undefined behavior, since a program with
+undefined behavior might succeed on a test that should fail.
+
+The above rules apply to programs that are intended to conform to the
+standard. However, strictly-conforming programs are quite rare, since
+the standards are so limiting. A major goal of Autoconf is to support
+programs that use implementation features not described by the standard,
+and it is fairly common for test programs to violate the above rules, if
+the programs work well enough in practice.
+
+@node Integer Overflow
+@section Integer Overflow
+@cindex integer overflow
+@cindex overflow, signed integer
+@cindex signed integer overflow
+@cindex wraparound arithmetic
+
+In practice many portable C programs assume that signed integer overflow wraps
+around reliably using two's complement arithmetic. Yet the C standard
+says that program behavior is undefined on overflow, and in a few cases
+C programs do not work on some modern implementations because their
+overflows do not wrap around as their authors expected. Conversely, in
+signed integer remainder, the C standard requires overflow
+behavior that is commonly not implemented.
+
+@menu
+* Integer Overflow Basics:: Why integer overflow is a problem
+* Signed Overflow Examples:: Examples of code assuming wraparound
+* Optimization and Wraparound:: Optimizations that break uses of wraparound
+* Signed Overflow Advice:: Practical advice for signed overflow issues
+* Signed Integer Division:: @code{INT_MIN / -1} and @code{INT_MIN % -1}
+@end menu
+
+@node Integer Overflow Basics
+@subsection Basics of Integer Overflow
+@cindex integer overflow
+@cindex overflow, signed integer
+@cindex signed integer overflow
+@cindex wraparound arithmetic
+
+In languages like C, unsigned integer overflow reliably wraps around;
+e.g., @code{UINT_MAX + 1} yields zero.
+This is guaranteed by the C standard and is
+portable in practice, unless you specify aggressive,
+nonstandard optimization options
+suitable only for special applications.
+
+In contrast, the C standard says that signed integer overflow leads to
+undefined behavior where a program can do anything, including dumping
+core or overrunning a buffer. The misbehavior can even precede the
+overflow. Such an overflow can occur during addition, subtraction,
+multiplication, division, and left shift.
+
+Despite this requirement of the standard, many C programs and Autoconf
+tests assume that signed integer overflow silently wraps around modulo a
+power of two, using two's complement arithmetic, so long as you cast the
+resulting value to a signed integer type or store it into a signed
+integer variable. If you use conservative optimization flags, such
+programs are generally portable to the vast majority of modern
+platforms, with a few exceptions discussed later.
+
+For historical reasons the C standard also allows implementations with
+ones' complement or signed magnitude arithmetic, but it is safe to
+assume two's complement nowadays.
+
+Also, overflow can occur when converting an out-of-range value to a
+signed integer type. Here a standard implementation must define what
+happens, but this might include raising an exception. In practice all
+known implementations support silent wraparound in this case, so you need
+not worry about other possibilities.
+
+@node Signed Overflow Examples
+@subsection Examples of Code Assuming Wraparound Overflow
+@cindex integer overflow
+@cindex overflow, signed integer
+@cindex signed integer overflow
+@cindex wraparound arithmetic
+
+There has long been a tension between what the C standard requires for
+signed integer overflow, and what C programs commonly assume. The
+standard allows aggressive optimizations based on assumptions that
+overflow never occurs, but many practical C programs rely on overflow
+wrapping around. These programs do not conform to the standard, but
+they commonly work in practice because compiler writers are
+understandably reluctant to implement optimizations that would break
+many programs, unless perhaps a user specifies aggressive optimization.
+
+The C Standard says that if a program has signed integer overflow its
+behavior is undefined, and the undefined behavior can even precede the
+overflow. To take an extreme example:
+
+@c Inspired by Robert Dewar's example in
+@c <http://gcc.gnu.org/ml/gcc/2007-01/msg00038.html> (2007-01-01).
+@example
+if (password == expected_password)
+ allow_superuser_privileges ();
+else if (counter++ == INT_MAX)
+ abort ();
+else
+ printf ("%d password mismatches\n", counter);
+@end example
+
+@noindent
+If the @code{int} variable @code{counter} equals @code{INT_MAX},
+@code{counter++} must overflow and the behavior is undefined, so the C
+standard allows the compiler to optimize away the test against
+@code{INT_MAX} and the @code{abort} call.
+Worse, if an earlier bug in the program lets the compiler deduce that
+@code{counter == INT_MAX} or that @code{counter} previously overflowed,
+the C standard allows the compiler to optimize away the password test
+and generate code that allows superuser privileges unconditionally.
+
+Despite this requirement by the standard, it has long been common for C
+code to assume wraparound arithmetic after signed overflow, and all
+known practical C implementations support some C idioms that assume
+wraparound signed arithmetic, even if the idioms do not conform
+strictly to the standard. If your code looks like the following
+examples it will almost surely work with real-world compilers.
+
+Here is an example derived from the 7th Edition Unix implementation of
+@code{atoi} (1979-01-10):
+
+@example
+char *p;
+int f, n;
+@dots{}
+while (*p >= '0' && *p <= '9')
+ n = n * 10 + *p++ - '0';
+return (f ? -n : n);
+@end example
+
+@noindent
+Even if the input string is in range, on most modern machines this has
+signed overflow when computing the most negative integer (the @code{-n}
+overflows) or a value near an extreme integer (the first @code{+}
+overflows).
+
+Here is another example, derived from the 7th Edition implementation of
+@code{rand} (1979-01-10). Here the programmer expects both
+multiplication and addition to wrap on overflow:
+
+@example
+static long int randx = 1;
+@dots{}
+randx = randx * 1103515245 + 12345;
+return (randx >> 16) & 077777;
+@end example
+
+In the following example, derived from the GNU C Library 2.5
+implementation of @code{mktime} (2006-09-09), the code assumes
+wraparound arithmetic in @code{+} to detect signed overflow:
+
+@example
+time_t t, t1, t2;
+int sec_requested, sec_adjustment;
+@dots{}
+t1 = t + sec_requested;
+t2 = t1 + sec_adjustment;
+if (((t1 < t) != (sec_requested < 0))
+ | ((t2 < t1) != (sec_adjustment < 0)))
+ return -1;
+@end example
+
+If your code looks like these examples, it is probably safe even though
+it does not strictly conform to the C standard. This might lead one to
+believe that one can generally assume wraparound on overflow, but that
+is not always true, as can be seen in the next section.
+
+@node Optimization and Wraparound
+@subsection Optimizations That Break Wraparound Arithmetic
+@cindex loop induction
+
+Compilers sometimes generate code that is incompatible with wraparound
+integer arithmetic. A simple example is an algebraic simplification: a
+compiler might translate @code{(i * 2000) / 1000} to @code{i * 2}
+because it assumes that @code{i * 2000} does not overflow. The
+translation is not equivalent to the original when overflow occurs:
+e.g., in the typical case of 32-bit signed two's complement wraparound
+@code{int}, if @code{i} has type @code{int} and value @code{1073742},
+the original expression returns @minus{}2147483 but the optimized
+version returns the mathematically correct value 2147484.
+
+More subtly, loop induction optimizations often exploit the undefined
+behavior of signed overflow. Consider the following contrived function
+@code{sumc}:
+
+@example
+int
+sumc (int lo, int hi)
+@{
+ int sum = 0;
+ int i;
+ for (i = lo; i <= hi; i++)
+ sum ^= i * 53;
+ return sum;
+@}
+@end example
+
+@noindent
+To avoid multiplying by 53 each time through the loop, an optimizing
+compiler might internally transform @code{sumc} to the equivalent of the
+following:
+
+@example
+int
+transformed_sumc (int lo, int hi)
+@{
+ int sum = 0;
+ int hic = hi * 53;
+ int ic;
+ for (ic = lo * 53; ic <= hic; ic += 53)
+ sum ^= ic;
+ return sum;
+@}
+@end example
+
+@noindent
+This transformation is allowed by the C standard, but it is invalid for
+wraparound arithmetic when @code{INT_MAX / 53 < hi}, because then the
+overflow in computing expressions like @code{hi * 53} can cause the
+expression @code{i <= hi} to yield a different value from the
+transformed expression @code{ic <= hic}.
+
+For this reason, compilers that use loop induction and similar
+techniques often do not support reliable wraparound arithmetic when a
+loop induction variable like @code{ic} is involved. Since loop
+induction variables are generated by the compiler, and are not visible
+in the source code, it is not always trivial to say whether the problem
+affects your code.
+
+Hardly any code actually depends on wraparound arithmetic in cases like
+these, so in practice these loop induction optimizations are almost
+always useful. However, edge cases in this area can cause problems.
+For example:
+
+@example
+int j;
+for (j = 1; 0 < j; j *= 2)
+ test (j);
+@end example
+
+@noindent
+Here, the loop attempts to iterate through all powers of 2 that
+@code{int} can represent, but the C standard allows a compiler to
+optimize away the comparison and generate an infinite loop,
+under the argument that behavior is undefined on overflow. As of this
+writing this optimization is not done by any production version of
+GCC with @option{-O2}, but it might be performed by other
+compilers, or by more aggressive GCC optimization options,
+and the GCC developers have not decided whether it will
+continue to work with GCC and @option{-O2}.
+
+@node Signed Overflow Advice
+@subsection Practical Advice for Signed Overflow Issues
+@cindex integer overflow
+@cindex overflow, signed integer
+@cindex signed integer overflow
+@cindex wraparound arithmetic
+
+Ideally the safest approach is to avoid signed integer overflow
+entirely. For example, instead of multiplying two signed integers, you
+can convert them to unsigned integers, multiply the unsigned values,
+then test whether the result is in signed range.
+
+Rewriting code in this way will be inconvenient, though, particularly if
+the signed values might be negative. Also, it may hurt
+performance. Using unsigned arithmetic to check for overflow is
+particularly painful to do portably and efficiently when dealing with an
+integer type like @code{uid_t} whose width and signedness vary from
+platform to platform.
+
+Furthermore, many C applications pervasively assume wraparound behavior
+and typically it is not easy to find and remove all these assumptions.
+Hence it is often useful to maintain nonstandard code that assumes
+wraparound on overflow, instead of rewriting the code. The rest of this
+section attempts to give practical advice for this situation.
+
+If your code wants to detect signed integer overflow in @code{sum = a +
+b}, it is generally safe to use an expression like @code{(sum < a) != (b
+< 0)}.
+
+If your code uses a signed loop index, make sure that the index cannot
+overflow, along with all signed expressions derived from the index.
+Here is a contrived example of problematic code with two instances of
+overflow.
+
+@example
+for (i = INT_MAX - 10; i <= INT_MAX; i++)
+ if (i + 1 < 0)
+ @{
+ report_overflow ();
+ break;
+ @}
+@end example
+
+@noindent
+Because of the two overflows, a compiler might optimize away or
+transform the two comparisons in a way that is incompatible with the
+wraparound assumption.
+
+If your code uses an expression like @code{(i * 2000) / 1000} and you
+actually want the multiplication to wrap around on overflow, use
+unsigned arithmetic
+to do it, e.g., @code{((int) (i * 2000u)) / 1000}.
+
+If your code assumes wraparound behavior and you want to insulate it
+against any GCC optimizations that would fail to support that
+behavior, you should use GCC's @option{-fwrapv} option, which
+causes signed overflow to wrap around reliably (except for division and
+remainder, as discussed in the next section).
+
+If you need to port to platforms where signed integer overflow does not
+reliably wrap around (e.g., due to hardware overflow checking, or to
+highly aggressive optimizations), you should consider debugging with
+GCC's @option{-ftrapv} option, which causes signed overflow to
+raise an exception.
+
+@node Signed Integer Division
+@subsection Signed Integer Division and Integer Overflow
+@cindex division, integer
+
+Overflow in signed
+integer division is not always harmless: for example, on CPUs of the
+i386 family, dividing @code{INT_MIN} by @code{-1} yields a SIGFPE signal
+which by default terminates the program. Worse, taking the remainder
+of these two values typically yields the same signal on these CPUs,
+even though the C standard requires @code{INT_MIN % -1} to yield zero
+because the expression does not overflow.
+
+@node Preprocessor Arithmetic
+@section Preprocessor Arithmetic
+@cindex preprocessor arithmetic
+
+In C99, preprocessor arithmetic, used for @code{#if} expressions, must
+be evaluated as if all signed values are of type @code{intmax_t} and all
+unsigned values of type @code{uintmax_t}. Many compilers are buggy in
+this area, though. For example, as of 2007, Sun C mishandles @code{#if
+LLONG_MIN < 0} on a platform with 32-bit @code{long int} and 64-bit
+@code{long long int}. Also, some older preprocessors mishandle
+constants ending in @code{LL}. To work around these problems, you can
+compute the value of expressions like @code{LONG_MAX < LLONG_MAX} at
+@code{configure}-time rather than at @code{#if}-time.
+
+@node Null Pointers
+@section Properties of Null Pointers
+@cindex null pointers
+
+Most modern hosts reliably fail when you attempt to dereference a null
+pointer.
+
+On almost all modern hosts, null pointers use an all-bits-zero internal
+representation, so you can reliably use @code{memset} with 0 to set all
+the pointers in an array to null values.
+
+If @code{p} is a null pointer to an object type, the C expression
+@code{p + 0} always evaluates to @code{p} on modern hosts, even though
+the standard says that it has undefined behavior.
+
+@node Buffer Overruns
+@section Buffer Overruns and Subscript Errors
+@cindex buffer overruns
+
+Buffer overruns and subscript errors are the most common dangerous
+errors in C programs. They result in undefined behavior because storing
+outside an array typically modifies storage that is used by some other
+object, and most modern systems lack runtime checks to catch these
+errors. Programs should not rely on buffer overruns being caught.
+
+There is one exception to the usual rule that a portable program cannot
+address outside an array. In C, it is valid to compute the address just
+past an object, e.g., @code{&a[N]} where @code{a} has @code{N} elements,
+so long as you do not dereference the resulting pointer. But it is not
+valid to compute the address just before an object, e.g., @code{&a[-1]};
+nor is it valid to compute two past the end, e.g., @code{&a[N+1]}. On
+most platforms @code{&a[-1] < &a[0] && &a[N] < &a[N+1]}, but this is not
+reliable in general, and it is usually easy enough to avoid the
+potential portability problem, e.g., by allocating an extra unused array
+element at the start or end.
+
+@uref{http://@/valgrind.org/, Valgrind} can catch many overruns.
+GCC
+users might also consider using the @option{-fmudflap} option to catch
+overruns.
+
+Buffer overruns are usually caused by off-by-one errors, but there are
+more subtle ways to get them.
+
+Using @code{int} values to index into an array or compute array sizes
+causes problems on typical 64-bit hosts where an array index might
+be @math{2^{31}} or larger. Index values of type @code{size_t} avoid this
+problem, but cannot be negative. Index values of type @code{ptrdiff_t}
+are signed, and are wide enough in practice.
+
+If you add or multiply two numbers to calculate an array size, e.g.,
+@code{malloc (x * sizeof y + z)}, havoc ensues if the addition or
+multiplication overflows.
+
+Many implementations of the @code{alloca} function silently misbehave
+and can generate buffer overflows if given sizes that are too large.
+The size limits are implementation dependent, but are at least 4000
+bytes on all platforms that we know about.
+
+The standard functions @code{asctime}, @code{asctime_r}, @code{ctime},
+@code{ctime_r}, and @code{gets} are prone to buffer overflows, and
+portable code should not use them unless the inputs are known to be
+within certain limits. The time-related functions can overflow their
+buffers if given timestamps out of range (e.g., a year less than -999
+or greater than 9999). Time-related buffer overflows cannot happen with
+recent-enough versions of the GNU C library, but are possible
+with other
+implementations. The @code{gets} function is the worst, since it almost
+invariably overflows its buffer when presented with an input line larger
+than the buffer.
+
+@node Volatile Objects
+@section Volatile Objects
+@cindex volatile objects
+
+The keyword @code{volatile} is often misunderstood in portable code.
+Its use inhibits some memory-access optimizations, but programmers often
+wish that it had a different meaning than it actually does.
+
+@code{volatile} was designed for code that accesses special objects like
+memory-mapped device registers whose contents spontaneously change.
+Such code is inherently low-level, and it is difficult to specify
+portably what @code{volatile} means in these cases. The C standard
+says, ``What constitutes an access to an object that has
+volatile-qualified type is implementation-defined,'' so in theory each
+implementation is supposed to fill in the gap by documenting what
+@code{volatile} means for that implementation. In practice, though,
+this documentation is usually absent or incomplete.
+
+One area of confusion is the distinction between objects defined with
+volatile types, and volatile lvalues. From the C standard's point of
+view, an object defined with a volatile type has externally visible
+behavior. You can think of such objects as having little oscilloscope
+probes attached to them, so that the user can observe some properties of
+accesses to them, just as the user can observe data written to output
+files. However, the standard does not make it clear whether users can
+observe accesses by volatile lvalues to ordinary objects. For example:
+
+@example
+/* Declare and access a volatile object.
+ Accesses to X are "visible" to users. */
+static int volatile x;
+x = 1;
+
+/* Access two ordinary objects via a volatile lvalue.
+ It's not clear whether accesses to *P are "visible". */
+int y;
+int *z = malloc (sizeof (int));
+int volatile *p;
+p = &y;
+*p = 1;
+p = z;
+*p = 1;
+@end example
+
+Programmers often wish that @code{volatile} meant ``Perform the memory
+access here and now, without merging several memory accesses, without
+changing the memory word size, and without reordering.'' But the C
+standard does not require this. For objects defined with a volatile
+type, accesses must be done before the next sequence point; but
+otherwise merging, reordering, and word-size change is allowed. Worse,
+it is not clear from the standard whether volatile lvalues provide more
+guarantees in general than nonvolatile lvalues, if the underlying
+objects are ordinary.
+
+Even when accessing objects defined with a volatile type,
+the C standard allows only
+extremely limited signal handlers: the behavior is undefined if a signal
+handler reads any nonlocal object, or writes to any nonlocal object
+whose type is not @code{sig_atomic_t volatile}, or calls any standard
+library function other than @code{abort}, @code{signal}, and (if C99)
+@code{_Exit}. Hence C compilers need not worry about a signal handler
+disturbing ordinary computation, unless the computation accesses a
+@code{sig_atomic_t volatile} lvalue that is not a local variable.
+(There is an obscure exception for accesses via a pointer to a volatile
+character, since it may point into part of a @code{sig_atomic_t
+volatile} object.) Posix
+adds to the list of library functions callable from a portable signal
+handler, but otherwise is like the C standard in this area.
+
+Some C implementations allow memory-access optimizations within each
+translation unit, such that actual behavior agrees with the behavior
+required by the standard only when calling a function in some other
+translation unit, and a signal handler acts like it was called from a
+different translation unit. The C standard hints that in these
+implementations, objects referred to by signal handlers ``would require
+explicit specification of @code{volatile} storage, as well as other
+implementation-defined restrictions.'' But unfortunately even for this
+special case these other restrictions are often not documented well.
+@xref{Volatiles, , When is a Volatile Object Accessed?, gcc, Using the
+GNU Compiler Collection (GCC)}, for some
+restrictions imposed by GCC. @xref{Defining Handlers, ,
+Defining Signal Handlers, libc, The GNU C Library}, for some
+restrictions imposed by the GNU C library. Restrictions
+differ on other platforms.
+
+If possible, it is best to use a signal handler that fits within the
+limits imposed by the C and Posix standards.
+
+If this is not practical, you can try the following rules of thumb. A
+signal handler should access only volatile lvalues, preferably lvalues
+that refer to objects defined with a volatile type, and should not
+assume that the accessed objects have an internally consistent state
+if they are larger than a machine word. Furthermore, installers
+should employ compilers and compiler options that are commonly used
+for building operating system kernels, because kernels often need more
+from @code{volatile} than the C Standard requires, and installers who
+compile an application in a similar environment can sometimes benefit
+from the extra constraints imposed by kernels on compilers.
+Admittedly we are handwaving somewhat here, as there are few
+guarantees in this area; the rules of thumb may help to fix some bugs
+but there is a good chance that they will not fix them all.
+
+For @code{volatile}, C++ has the same problems that C does.
+Multithreaded applications have even more problems with @code{volatile},
+but they are beyond the scope of this section.
+
+The bottom line is that using @code{volatile} typically hurts
+performance but should not hurt correctness. In some cases its use
+does help correctness, but these cases are often so poorly understood
+that all too often adding @code{volatile} to a data structure merely
+alleviates some symptoms of a bug while not fixing the bug in general.
+
+@node Floating Point Portability
+@section Floating Point Portability
+@cindex floating point
+
+Almost all modern systems use IEEE-754 floating point, and it is safe to
+assume IEEE-754 in most portable code these days. For more information,
+please see David Goldberg's classic paper
+@uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, What Every Computer
+Scientist Should Know About Floating-Point Arithmetic}.
+
+@node Exiting Portably
+@section Exiting Portably
+@cindex exiting portably
+
+A C or C++ program can exit with status @var{N} by returning
+@var{N} from the @code{main} function. Portable programs are supposed
+to exit either with status 0 or @code{EXIT_SUCCESS} to succeed, or with
+status @code{EXIT_FAILURE} to fail, but in practice it is portable to
+fail by exiting with status 1, and test programs that assume Posix can
+fail by exiting with status values from 1 through 255. Programs on
+SunOS 2.0 (1985) through 3.5.2 (1988) incorrectly exited with zero
+status when @code{main} returned nonzero, but ancient systems like these
+are no longer of practical concern.
+
+A program can also exit with status @var{N} by passing @var{N} to the
+@code{exit} function, and a program can fail by calling the @code{abort}
+function. If a program is specialized to just some platforms, it can fail
+by calling functions specific to those platforms, e.g., @code{_exit}
+(Posix) and @code{_Exit} (C99). However, like other functions, an exit
+function should be declared, typically by including a header. For
+example, if a C program calls @code{exit}, it should include @file{stdlib.h}
+either directly or via the default includes (@pxref{Default Includes}).
+
+A program can fail due to undefined behavior such as dereferencing a null
+pointer, but this is not recommended as undefined behavior allows an
+implementation to do whatever it pleases and this includes exiting
+successfully.
+
+
+@c ================================================== Manual Configuration
+
+@node Manual Configuration
+@chapter Manual Configuration
+
+A few kinds of features can't be guessed automatically by running test
+programs. For example, the details of the object-file format, or
+special options that need to be passed to the compiler or linker. You
+can check for such features using ad-hoc means, such as having
+@command{configure} check the output of the @code{uname} program, or
+looking for libraries that are unique to particular systems. However,
+Autoconf provides a uniform method for handling unguessable features.
+
+@menu
+* Specifying Target Triplets:: Specifying target triplets
+* Canonicalizing:: Getting the canonical system type
+* Using System Type:: What to do with the system type
+@end menu
+
+@node Specifying Target Triplets
+@section Specifying target triplets
+@cindex System type
+@cindex Target triplet
+@c This node used to be named Specifying Names. The @anchor allows old
+@c links to still work.
+@anchor{Specifying Names}
+
+Autoconf-generated
+@command{configure} scripts can make decisions based on a canonical name
+for the system type, or @dfn{target triplet}, which has the form:
+@samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
+@samp{@var{system}} or @samp{@var{kernel}-@var{system}}
+
+@command{configure} can usually guess the canonical name for the type of
+system it's running on. To do so it runs a script called
+@command{config.guess}, which infers the name using the @code{uname}
+command or symbols predefined by the C preprocessor.
+
+Alternately, the user can specify the system type with command line
+arguments to @command{configure} (@pxref{System Type}. Doing so is
+necessary when
+cross-compiling. In the most complex case of cross-compiling, three
+system types are involved. The options to specify them are:
+
+@table @option
+@item --build=@var{build-type}
+the type of system on which the package is being configured and
+compiled. It defaults to the result of running @command{config.guess}.
+Specifying a @var{build-type} that differs from @var{host-type} enables
+cross-compilation mode.
+
+@item --host=@var{host-type}
+the type of system on which the package runs. By default it is the
+same as the build machine. Specifying a @var{host-type} that differs
+from @var{build-type}, when @var{build-type} was also explicitly
+specified, enables cross-compilation mode.
+
+@item --target=@var{target-type}
+the type of system for which any compiler tools in the package
+produce code (rarely needed). By default, it is the same as host.
+@end table
+
+If you mean to override the result of @command{config.guess}, use
+@option{--build}, not @option{--host}, since the latter enables
+cross-compilation. For historical reasons,
+whenever you specify @option{--host},
+be sure to specify @option{--build} too; this will be fixed in the
+future. So, to enter cross-compilation mode, use a command like this
+
+@example
+./configure --build=i686-pc-linux-gnu --host=m68k-coff
+@end example
+
+@noindent
+Note that if you do not specify @option{--host}, @command{configure}
+fails if it can't run the code generated by the specified compiler. For
+example, configuring as follows fails:
+
+@example
+./configure CC=m68k-coff-gcc
+@end example
+
+When cross-compiling, @command{configure} will warn about any tools
+(compilers, linkers, assemblers) whose name is not prefixed with the
+host type. This is an aid to users performing cross-compilation.
+Continuing the example above, if a cross-compiler named @command{cc} is
+used with a native @command{pkg-config}, then libraries found by
+@command{pkg-config} will likely cause subtle build failures; but using
+the names @command{m68k-coff-cc} and @command{m68k-coff-pkg-config}
+avoids any confusion. Avoiding the warning is as simple as creating the
+correct symlinks naming the cross tools.
+
+@cindex @command{config.sub}
+@command{configure} recognizes short aliases for many system types; for
+example, @samp{decstation} can be used instead of
+@samp{mips-dec-ultrix4.2}. @command{configure} runs a script called
+@command{config.sub} to canonicalize system type aliases.
+
+This section deliberately omits the description of the obsolete
+interface; see @ref{Hosts and Cross-Compilation}.
+
+
+@node Canonicalizing
+@section Getting the Canonical System Type
+@cindex System type
+@cindex Canonical system type
+
+The following macros make the system type available to @command{configure}
+scripts.
+
+@ovindex build_alias
+@ovindex host_alias
+@ovindex target_alias
+
+The variables @samp{build_alias}, @samp{host_alias}, and
+@samp{target_alias} are always exactly the arguments of @option{--build},
+@option{--host}, and @option{--target}; in particular, they are left empty
+if the user did not use them, even if the corresponding
+@code{AC_CANONICAL} macro was run. Any configure script may use these
+variables anywhere. These are the variables that should be used when in
+interaction with the user.
+
+If you need to recognize some special environments based on their system
+type, run the following macros to get canonical system names. These
+variables are not set before the macro call.
+
+If you use these macros, you must distribute @command{config.guess} and
+@command{config.sub} along with your source code. @xref{Output}, for
+information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
+to control in which directory @command{configure} looks for those scripts.
+
+
+@defmac AC_CANONICAL_BUILD
+@acindex{CANONICAL_BUILD}
+@ovindex build
+@ovindex build_cpu
+@ovindex build_vendor
+@ovindex build_os
+Compute the canonical build-system type variable, @code{build}, and its
+three individual parts @code{build_cpu}, @code{build_vendor}, and
+@code{build_os}.
+
+If @option{--build} was specified, then @code{build} is the
+canonicalization of @code{build_alias} by @command{config.sub},
+otherwise it is determined by the shell script @command{config.guess}.
+@end defmac
+
+@defmac AC_CANONICAL_HOST
+@acindex{CANONICAL_HOST}
+@ovindex host
+@ovindex host_cpu
+@ovindex host_vendor
+@ovindex host_os
+Compute the canonical host-system type variable, @code{host}, and its
+three individual parts @code{host_cpu}, @code{host_vendor}, and
+@code{host_os}.
+
+If @option{--host} was specified, then @code{host} is the
+canonicalization of @code{host_alias} by @command{config.sub},
+otherwise it defaults to @code{build}.
+@end defmac
+
+@defmac AC_CANONICAL_TARGET
+@acindex{CANONICAL_TARGET}
+@ovindex target
+@ovindex target_cpu
+@ovindex target_vendor
+@ovindex target_os
+Compute the canonical target-system type variable, @code{target}, and its
+three individual parts @code{target_cpu}, @code{target_vendor}, and
+@code{target_os}.
+
+If @option{--target} was specified, then @code{target} is the
+canonicalization of @code{target_alias} by @command{config.sub},
+otherwise it defaults to @code{host}.
+@end defmac
+
+Note that there can be artifacts due to the backward compatibility
+code. @xref{Hosts and Cross-Compilation}, for more.
+
+@node Using System Type
+@section Using the System Type
+
+In @file{configure.ac} the system type is generally used by one or more
+@code{case} statements to select system-specifics. Shell wildcards can
+be used to match a group of system types.
+
+For example, an extra assembler code object file could be chosen, giving
+access to a CPU cycle counter register. @code{$(CYCLE_OBJ)} in the
+following would be used in a makefile to add the object to a
+program or library.
+
+@example
+AS_CASE([$host],
+ [alpha*-*-*], [CYCLE_OBJ=rpcc.o],
+ [i?86-*-*], [CYCLE_OBJ=rdtsc.o],
+ [CYCLE_OBJ=""]
+)
+AC_SUBST([CYCLE_OBJ])
+@end example
+
+@code{AC_CONFIG_LINKS} (@pxref{Configuration Links}) is another good way
+to select variant source files, for example optimized code for some
+CPUs. The configured CPU type doesn't always indicate exact CPU types,
+so some runtime capability checks may be necessary too.
+
+@example
+case $host in
+ alpha*-*-*) AC_CONFIG_LINKS([dither.c:alpha/dither.c]) ;;
+ powerpc*-*-*) AC_CONFIG_LINKS([dither.c:powerpc/dither.c]) ;;
+ *-*-*) AC_CONFIG_LINKS([dither.c:generic/dither.c]) ;;
+esac
+@end example
+
+The host system type can also be used to find cross-compilation tools
+with @code{AC_CHECK_TOOL} (@pxref{Generic Programs}).
+
+The above examples all show @samp{$host}, since this is where the code
+is going to run. Only rarely is it necessary to test @samp{$build}
+(which is where the build is being done).
+
+Whenever you're tempted to use @samp{$host} it's worth considering
+whether some sort of probe would be better. New system types come along
+periodically or previously missing features are added. Well-written
+probes can adapt themselves to such things, but hard-coded lists of
+names can't. Here are some guidelines,
+
+@itemize @bullet
+@item
+Availability of libraries and library functions should always be checked
+by probing.
+@item
+Variant behavior of system calls is best identified with runtime tests
+if possible, but bug workarounds or obscure difficulties might have to
+be driven from @samp{$host}.
+@item
+Assembler code is inevitably highly CPU-specific and is best selected
+according to @samp{$host_cpu}.
+@item
+Assembler variations like underscore prefix on globals or ELF versus
+COFF type directives are however best determined by probing, perhaps
+even examining the compiler output.
+@end itemize
+
+@samp{$target} is for use by a package creating a compiler or similar.
+For ordinary packages it's meaningless and should not be used. It
+indicates what the created compiler should generate code for, if it can
+cross-compile. @samp{$target} generally selects various hard-coded CPU
+and system conventions, since usually the compiler or tools under
+construction themselves determine how the target works.
+
+
+@c ===================================================== Site Configuration.
+
+@node Site Configuration
+@chapter Site Configuration
+
+@command{configure} scripts support several kinds of local configuration
+decisions. There are ways for users to specify where external software
+packages are, include or exclude optional features, install programs
+under modified names, and set default values for @command{configure}
+options.
+
+@menu
+* Help Formatting:: Customizing @samp{configure --help}
+* External Software:: Working with other optional software
+* Package Options:: Selecting optional features
+* Pretty Help Strings:: Formatting help string
+* Option Checking:: Controlling checking of @command{configure} options
+* Site Details:: Configuring site details
+* Transforming Names:: Changing program names when installing
+* Site Defaults:: Giving @command{configure} local defaults
+@end menu
+
+@node Help Formatting
+@section Controlling Help Output
+
+Users consult @samp{configure --help} to learn of configuration
+decisions specific to your package. By default, @command{configure}
+breaks this output into sections for each type of option; within each
+section, help strings appear in the order @file{configure.ac} defines
+them:
+
+@example
+Optional Features:
+ @dots{}
+ --enable-bar include bar
+
+Optional Packages:
+ @dots{}
+ --with-foo use foo
+@end example
+
+@defmac AC_PRESERVE_HELP_ORDER
+@acindex{PRESERVE_HELP_ORDER}
+
+Request an alternate @option{--help} format, in which options of all
+types appear together, in the order defined. Call this macro before any
+@code{AC_ARG_ENABLE} or @code{AC_ARG_WITH}.
+
+@example
+Optional Features and Packages:
+ @dots{}
+ --enable-bar include bar
+ --with-foo use foo
+@end example
+
+@end defmac
+
+@node External Software
+@section Working With External Software
+@cindex External software
+
+Some packages require, or can optionally use, other software packages
+that are already installed. The user can give @command{configure}
+command line options to specify which such external software to use.
+The options have one of these forms:
+
+@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
+@c awful.
+@example
+--with-@var{package}@r{[}=@var{arg}@r{]}
+--without-@var{package}
+@end example
+
+For example, @option{--with-gnu-ld} means work with the GNU linker
+instead of some other linker. @option{--with-x} means work with The X
+Window System.
+
+The user can give an argument by following the package name with
+@samp{=} and the argument. Giving an argument of @samp{no} is for
+packages that are used by default; it says to @emph{not} use the
+package. An argument that is neither @samp{yes} nor @samp{no} could
+include a name or number of a version of the other package, to specify
+more precisely which other package this program is supposed to work
+with. If no argument is given, it defaults to @samp{yes}.
+@option{--without-@var{package}} is equivalent to
+@option{--with-@var{package}=no}.
+
+Normally @command{configure} scripts complain about
+@option{--with-@var{package}} options that they do not support.
+@xref{Option Checking}, for details, and for how to override the
+defaults.
+
+For each external software package that may be used, @file{configure.ac}
+should call @code{AC_ARG_WITH} to detect whether the @command{configure}
+user asked to use it. Whether each package is used or not by default,
+and which arguments are valid, is up to you.
+
+@anchor{AC_ARG_WITH}
+@defmac AC_ARG_WITH (@var{package}, @var{help-string}, @
+ @ovar{action-if-given}, @ovar{action-if-not-given})
+@acindex{ARG_WITH}
+If the user gave @command{configure} the option @option{--with-@var{package}}
+or @option{--without-@var{package}}, run shell commands
+@var{action-if-given}. If neither option was given, run shell commands
+@var{action-if-not-given}. The name @var{package} indicates another
+software package that this program should work with. It should consist
+only of alphanumeric characters, dashes, plus signs, and dots.
+
+The option's argument is available to the shell commands
+@var{action-if-given} in the shell variable @code{withval}, which is
+actually just the value of the shell variable named
+@code{with_@var{package}}, with any non-alphanumeric characters in
+@var{package} changed into @samp{_}. You may use that variable instead,
+if you wish.
+
+The argument @var{help-string} is a description of the option that
+looks like this:
+@example
+ --with-readline support fancy command line editing
+@end example
+
+@noindent
+@var{help-string} may be more than one line long, if more detail is
+needed. Just make sure the columns line up in @samp{configure
+--help}. Avoid tabs in the help string. The easiest way to provide the
+proper leading whitespace is to format your @var{help-string} with the macro
+@code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
+
+The following example shows how to use the @code{AC_ARG_WITH} macro in
+a common situation. You want to let the user decide whether to enable
+support for an external library (e.g., the readline library); if the user
+specified neither @option{--with-readline} nor @option{--without-readline},
+you want to enable support for readline only if the library is available
+on the system.
+
+@c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
+@example
+AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--with-readline],
+ [support fancy command line editing @@<:@@default=check@@:>@@])],
+ [],
+ [with_readline=check])
+
+LIBREADLINE=
+AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [if test "x$with_readline" != xcheck; then
+ AC_MSG_FAILURE(
+ [--with-readline was given, but test for readline failed])
+ fi
+ ], -lncurses)])
+@end example
+
+The next example shows how to use @code{AC_ARG_WITH} to give the user the
+possibility to enable support for the readline library, in case it is still
+experimental and not well tested, and is therefore disabled by default.
+
+@c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
+@example
+AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--with-readline],
+ [enable experimental support for readline])],
+ [],
+ [with_readline=no])
+
+LIBREADLINE=
+AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [AC_MSG_FAILURE(
+ [--with-readline was given, but test for readline failed])],
+ [-lncurses])])
+@end example
+
+The last example shows how to use @code{AC_ARG_WITH} to give the user the
+possibility to disable support for the readline library, given that it is
+an important feature and that it should be enabled by default.
+
+@c FIXME: Remove AS_IF when the problem of AC_REQUIRE within `if' is solved.
+@example
+AC_ARG_WITH([readline],
+ [AS_HELP_STRING([--without-readline],
+ [disable support for readline])],
+ [],
+ [with_readline=yes])
+
+LIBREADLINE=
+AS_IF([test "x$with_readline" != xno],
+ [AC_CHECK_LIB([readline], [main],
+ [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+ AC_DEFINE([HAVE_LIBREADLINE], [1],
+ [Define if you have libreadline])
+ ],
+ [AC_MSG_FAILURE(
+ [readline test failed (--without-readline to disable)])],
+ [-lncurses])])
+@end example
+
+These three examples can be easily adapted to the case where
+@code{AC_ARG_ENABLE} should be preferred to @code{AC_ARG_WITH} (see
+@ref{Package Options}).
+@end defmac
+
+@node Package Options
+@section Choosing Package Options
+@cindex Package options
+@cindex Options, package
+
+If a software package has optional compile-time features, the user can
+give @command{configure} command line options to specify whether to
+compile them. The options have one of these forms:
+
+@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
+@c awful.
+@example
+--enable-@var{feature}@r{[}=@var{arg}@r{]}
+--disable-@var{feature}
+@end example
+
+These options allow users to choose which optional features to build and
+install. @option{--enable-@var{feature}} options should never make a
+feature behave differently or cause one feature to replace another.
+They should only cause parts of the program to be built rather than left
+out.
+
+The user can give an argument by following the feature name with
+@samp{=} and the argument. Giving an argument of @samp{no} requests
+that the feature @emph{not} be made available. A feature with an
+argument looks like @option{--enable-debug=stabs}. If no argument is
+given, it defaults to @samp{yes}. @option{--disable-@var{feature}} is
+equivalent to @option{--enable-@var{feature}=no}.
+
+Normally @command{configure} scripts complain about
+@option{--enable-@var{package}} options that they do not support.
+@xref{Option Checking}, for details, and for how to override the
+defaults.
+
+For each optional feature, @file{configure.ac} should call
+@code{AC_ARG_ENABLE} to detect whether the @command{configure} user asked
+to include it. Whether each feature is included or not by default, and
+which arguments are valid, is up to you.
+
+@anchor{AC_ARG_ENABLE}
+@defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @
+ @ovar{action-if-given}, @ovar{action-if-not-given})
+@acindex{ARG_ENABLE}
+If the user gave @command{configure} the option
+@option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
+shell commands @var{action-if-given}. If neither option was given, run
+shell commands @var{action-if-not-given}. The name @var{feature}
+indicates an optional user-level facility. It should consist only of
+alphanumeric characters, dashes, plus signs, and dots.
+
+The option's argument is available to the shell commands
+@var{action-if-given} in the shell variable @code{enableval}, which is
+actually just the value of the shell variable named
+@code{enable_@var{feature}}, with any non-alphanumeric characters in
+@var{feature} changed into @samp{_}. You may use that variable instead,
+if you wish. The @var{help-string} argument is like that of
+@code{AC_ARG_WITH} (@pxref{External Software}).
+
+You should format your @var{help-string} with the macro
+@code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
+
+See the examples suggested with the definition of @code{AC_ARG_WITH}
+(@pxref{External Software}) to get an idea of possible applications of
+@code{AC_ARG_ENABLE}.
+@end defmac
+
+@node Pretty Help Strings
+@section Making Your Help Strings Look Pretty
+@cindex Help strings
+
+Properly formatting the @samp{help strings} which are used in
+@code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
+(@pxref{Package Options}) can be challenging. Specifically, you want
+your own @samp{help strings} to line up in the appropriate columns of
+@samp{configure --help} just like the standard Autoconf @samp{help
+strings} do. This is the purpose of the @code{AS_HELP_STRING} macro.
+
+@anchor{AS_HELP_STRING}
+@defmac AS_HELP_STRING (@var{left-hand-side}, @var{right-hand-side} @
+ @dvar{indent-column, 26}, @dvar{wrap-column, 79})
+@asindex{HELP_STRING}
+
+Expands into a help string that looks pretty when the user executes
+@samp{configure --help}. It is typically used in @code{AC_ARG_WITH}
+(@pxref{External Software}) or @code{AC_ARG_ENABLE} (@pxref{Package
+Options}). The following example makes this clearer.
+
+@example
+AC_ARG_WITH([foo],
+ [AS_HELP_STRING([--with-foo],
+ [use foo (default is no)])],
+ [use_foo=$withval],
+ [use_foo=no])
+@end example
+
+Then the last few lines of @samp{configure --help} appear like
+this:
+
+@example
+--enable and --with options recognized:
+ --with-foo use foo (default is no)
+@end example
+
+Macro expansion is performed on the first argument. However, the second
+argument of @code{AS_HELP_STRING} is treated as a whitespace separated
+list of text to be reformatted, and is not subject to macro expansion.
+Since it is not expanded, it should not be double quoted.
+@xref{Autoconf Language}, for a more detailed explanation.
+
+The @code{AS_HELP_STRING} macro is particularly helpful when the
+@var{left-hand-side} and/or @var{right-hand-side} are composed of macro
+arguments, as shown in the following example. Be aware that
+@var{left-hand-side} may not expand to unbalanced quotes,
+although quadrigraphs can be used.
+
+@example
+AC_DEFUN([MY_ARG_WITH],
+ [AC_ARG_WITH(m4_translit([[$1]], [_], [-]),
+ [AS_HELP_STRING([--with-m4_translit([$1], [_], [-])],
+ [use $1 (default is $2)])],
+ [use_[]$1=$withval],
+ [use_[]$1=$2])])
+MY_ARG_WITH([a_b], [no])
+@end example
+@noindent
+Here, the last few lines of @samp{configure --help} will include:
+
+@example
+--enable and --with options recognized:
+ --with-a-b use a_b (default is no)
+@end example
+
+The parameters @var{indent-column} and @var{wrap-column} were introduced
+in Autoconf 2.62. Generally, they should not be specified; they exist
+for fine-tuning of the wrapping.
+@example
+AS_HELP_STRING([--option], [description of option])
+@result{} --option description of option
+AS_HELP_STRING([--option], [description of option], [15], [30])
+@result{} --option description of
+@result{} option
+@end example
+@end defmac
+
+
+@node Option Checking
+@section Controlling Checking of @command{configure} Options
+@cindex Options, Package
+
+The @command{configure} script checks its command-line options against a
+list of known options, like @option{--help} or @option{--config-cache}.
+An unknown option ordinarily indicates a mistake by the user and
+@command{configure} halts with an error. However, by default unknown
+@option{--with-@var{package}} and @option{--enable-@var{feature}}
+options elicit only a warning, to support configuring entire source
+trees.
+
+Source trees often contain multiple packages with a top-level
+@command{configure} script that uses the @code{AC_CONFIG_SUBDIRS} macro
+(@pxref{Subdirectories}). Because the packages generally support
+different @option{--with-@var{package}} and
+@option{--enable-@var{feature}} options, the GNU Coding
+Standards say they must accept unrecognized options without halting.
+Even a warning message is undesirable here, so @code{AC_CONFIG_SUBDIRS}
+automatically disables the warnings.
+
+This default behavior may be modified in two ways. First, the installer
+can invoke @code{configure --disable-option-checking} to disable
+these warnings, or invoke @code{configure --enable-option-checking=fatal}
+options to turn them into fatal errors, respectively. Second, the
+maintainer can use @code{AC_DISABLE_OPTION_CHECKING}.
+
+@defmac AC_DISABLE_OPTION_CHECKING
+@acindex{DISABLE_OPTION_CHECKING}
+
+By default, disable warnings related to any unrecognized
+@option{--with-@var{package}} or @option{--enable-@var{feature}}
+options. This is implied by @code{AC_CONFIG_SUBDIRS}.
+
+The installer can override this behavior by passing
+@option{--enable-option-checking} (enable warnings) or
+@option{--enable-option-checking=fatal} (enable errors) to
+@command{configure}.
+@end defmac
+
+
+@node Site Details
+@section Configuring Site Details
+@cindex Site details
+
+Some software packages require complex site-specific information. Some
+examples are host names to use for certain services, company names, and
+email addresses to contact. Since some configuration scripts generated
+by Metaconfig ask for such information interactively, people sometimes
+wonder how to get that information in Autoconf-generated configuration
+scripts, which aren't interactive.
+
+Such site configuration information should be put in a file that is
+edited @emph{only by users}, not by programs. The location of the file
+can either be based on the @code{prefix} variable, or be a standard
+location such as the user's home directory. It could even be specified
+by an environment variable. The programs should examine that file at
+runtime, rather than at compile time. Runtime configuration is more
+convenient for users and makes the configuration process simpler than
+getting the information while configuring. @xref{Directory Variables, ,
+Variables for Installation Directories, standards, The GNU Coding
+Standards}, for more information on where to put data files.
+
+@node Transforming Names
+@section Transforming Program Names When Installing
+@cindex Transforming program names
+@cindex Program names, transforming
+
+Autoconf supports changing the names of programs when installing them.
+In order to use these transformations, @file{configure.ac} must call the
+macro @code{AC_ARG_PROGRAM}.
+
+@defmac AC_ARG_PROGRAM
+@acindex{ARG_PROGRAM}
+@ovindex program_transform_name
+Place in output variable @code{program_transform_name} a sequence of
+@code{sed} commands for changing the names of installed programs.
+
+If any of the options described below are given to @command{configure},
+program names are transformed accordingly. Otherwise, if
+@code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
+is given, the target type followed by a dash is used as a prefix.
+Otherwise, no program name transformation is done.
+@end defmac
+
+@menu
+* Transformation Options:: @command{configure} options to transform names
+* Transformation Examples:: Sample uses of transforming names
+* Transformation Rules:: Makefile uses of transforming names
+@end menu
+
+@node Transformation Options
+@subsection Transformation Options
+
+You can specify name transformations by giving @command{configure} these
+command line options:
+
+@table @option
+@item --program-prefix=@var{prefix}
+prepend @var{prefix} to the names;
+
+@item --program-suffix=@var{suffix}
+append @var{suffix} to the names;
+
+@item --program-transform-name=@var{expression}
+perform @code{sed} substitution @var{expression} on the names.
+@end table
+
+@node Transformation Examples
+@subsection Transformation Examples
+
+These transformations are useful with programs that can be part of a
+cross-compilation development environment. For example, a
+cross-assembler running on a Sun 4 configured with
+@option{--target=i960-vxworks} is normally installed as
+@file{i960-vxworks-as}, rather than @file{as}, which could be confused
+with a native Sun 4 assembler.
+
+You can force a program name to begin with @file{g}, if you don't want
+GNU programs installed on your system to shadow other programs with
+the same name. For example, if you configure GNU @code{diff} with
+@option{--program-prefix=g}, then when you run @samp{make install} it is
+installed as @file{/usr/local/bin/gdiff}.
+
+As a more sophisticated example, you could use
+
+@example
+--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
+@end example
+@noindent
+
+to prepend @samp{g} to most of the program names in a source tree,
+excepting those like @code{gdb} that already have one and those like
+@code{less} and @code{lesskey} that aren't GNU programs. (That is
+assuming that you have a source tree containing those programs that is
+set up to use this feature.)
+
+One way to install multiple versions of some programs simultaneously is
+to append a version number to the name of one or both. For example, if
+you want to keep Autoconf version 1 around for awhile, you can configure
+Autoconf version 2 using @option{--program-suffix=2} to install the
+programs as @file{/usr/local/bin/autoconf2},
+@file{/usr/local/bin/autoheader2}, etc. Nevertheless, pay attention
+that only the binaries are renamed, therefore you'd have problems with
+the library files which might overlap.
+
+@node Transformation Rules
+@subsection Transformation Rules
+
+Here is how to use the variable @code{program_transform_name} in a
+@file{Makefile.in}:
+
+@example
+PROGRAMS = cp ls rm
+transform = @@program_transform_name@@
+install:
+ for p in $(PROGRAMS); do \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
+ sed '$(transform)'`; \
+ done
+
+uninstall:
+ for p in $(PROGRAMS); do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
+@c $$ restore font-lock
+ done
+@end example
+
+It is guaranteed that @code{program_transform_name} is never empty, and
+that there are no useless separators. Therefore you may safely embed
+@code{program_transform_name} within a sed program using @samp{;}:
+
+@example
+transform = @@program_transform_name@@
+transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
+@end example
+
+Whether to do the transformations on documentation files (Texinfo or
+@code{man}) is a tricky question; there seems to be no perfect answer,
+due to the several reasons for name transforming. Documentation is not
+usually particular to a specific architecture, and Texinfo files do not
+conflict with system documentation. But they might conflict with
+earlier versions of the same files, and @code{man} pages sometimes do
+conflict with system documentation. As a compromise, it is probably
+best to do name transformations on @code{man} pages but not on Texinfo
+manuals.
+
+@node Site Defaults
+@section Setting Site Defaults
+@cindex Site defaults
+@cindex config.site
+
+Autoconf-generated @command{configure} scripts allow your site to provide
+default values for some configuration values. You do this by creating
+site- and system-wide initialization files.
+
+@evindex CONFIG_SITE
+If the environment variable @code{CONFIG_SITE} is set, @command{configure}
+uses its value as the name of a shell script to read; it is recommended
+that this be an absolute file name. Otherwise, it
+reads the shell script @file{@var{prefix}/share/config.site} if it exists,
+then @file{@var{prefix}/etc/config.site} if it exists. Thus,
+settings in machine-specific files override those in machine-independent
+ones in case of conflict.
+
+Site files can be arbitrary shell scripts, but only certain kinds of
+code are really appropriate to be in them. Because @command{configure}
+reads any cache file after it has read any site files, a site file can
+define a default cache file to be shared between all Autoconf-generated
+@command{configure} scripts run on that system (@pxref{Cache Files}). If
+you set a default cache file in a site file, it is a good idea to also
+set the output variable @code{CC} in that site file, because the cache
+file is only valid for a particular compiler, but many systems have
+several available.
+
+You can examine or override the value set by a command line option to
+@command{configure} in a site file; options set shell variables that have
+the same names as the options, with any dashes turned into underscores.
+The exceptions are that @option{--without-} and @option{--disable-} options
+are like giving the corresponding @option{--with-} or @option{--enable-}
+option and the value @samp{no}. Thus, @option{--cache-file=localcache}
+sets the variable @code{cache_file} to the value @samp{localcache};
+@option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
+@code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
+variable @code{prefix} to the value @samp{/usr}; etc.
+
+Site files are also good places to set default values for other output
+variables, such as @code{CFLAGS}, if you need to give them non-default
+values: anything you would normally do, repetitively, on the command
+line. If you use non-default values for @var{prefix} or
+@var{exec_prefix} (wherever you locate the site file), you can set them
+in the site file if you specify it with the @code{CONFIG_SITE}
+environment variable.
+
+You can set some cache values in the site file itself. Doing this is
+useful if you are cross-compiling, where it is impossible to check features
+that require running a test program. You could ``prime the cache'' by
+setting those values correctly for that system in
+@file{@var{prefix}/etc/config.site}. To find out the names of the cache
+variables you need to set, see the documentation of the respective
+Autoconf macro. If the variables or their semantics are undocumented,
+you may need to look for shell variables with @samp{_cv_} in their names
+in the affected @command{configure} scripts, or in the Autoconf M4
+source code for those macros; but in that case, their name or semantics
+may change in a future Autoconf version.
+
+The cache file is careful to not override any variables set in the site
+files. Similarly, you should not override command-line options in the
+site files. Your code should check that variables such as @code{prefix}
+and @code{cache_file} have their default values (as set near the top of
+@command{configure}) before changing them.
+
+Here is a sample file @file{/usr/share/local/@/gnu/share/@/config.site}. The
+command @samp{configure --prefix=/usr/share/local/gnu} would read this
+file (if @code{CONFIG_SITE} is not set to a different file).
+
+@example
+# /usr/share/local/gnu/share/config.site for configure
+#
+# Change some defaults.
+test "$prefix" = NONE && prefix=/usr/share/local/gnu
+test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
+test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
+test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
+
+# Give Autoconf 2.x generated configure scripts a shared default
+# cache file for feature test results, architecture-specific.
+if test "$cache_file" = /dev/null; then
+ cache_file="$prefix/var/config.cache"
+ # A cache file is only valid for one C compiler.
+ CC=gcc
+fi
+@end example
+
+@c Leave this use of ``File system'' rendered as one word, but
+@c slightly obfuscated so as not to trigger the syntax-check prohibition.
+@cindex File@/system Hierarchy Standard
+@cindex FHS
+
+Another use of @file{config.site} is for priming the directory variables
+@c ``File system'', but slightly obfuscated, as above.
+in a manner consistent with the File@/system Hierarchy Standard
+(FHS). Once the following file is installed at
+@file{/usr/share/config.site}, a user can execute simply
+@code{./configure --prefix=/usr} to get all the directories chosen in
+the locations recommended by FHS.
+
+@example
+# /usr/share/config.site for FHS defaults when installing below /usr,
+# and the respective settings were not changed on the command line.
+if test "$prefix" = /usr; then
+ test "$sysconfdir" = '$@{prefix@}/etc' && sysconfdir=/etc
+ test "$sharedstatedir" = '$@{prefix@}/com' && sharedstatedir=/var
+ test "$localstatedir" = '$@{prefix@}/var' && localstatedir=/var
+fi
+@end example
+
+@cindex @file{lib64}
+@cindex 64-bit libraries
+Likewise, on platforms where 64-bit libraries are built by default, then
+installed in @file{/usr/local/@/lib64} instead of @file{/usr/local/@/lib},
+it is appropriate to install @file{/usr/local/@/share/config.site}:
+
+@example
+# /usr/local/share/config.site for platforms that prefer
+# the directory /usr/local/lib64 over /usr/local/lib.
+test "$libdir" = '$@{exec_prefix@}/lib' && libdir='$@{exec_prefix@}/lib64'
+@end example
+
+
+@c ============================================== Running configure Scripts.
+
+@node Running configure Scripts
+@chapter Running @command{configure} Scripts
+@cindex @command{configure}
+
+Below are instructions on how to configure a package that uses a
+@command{configure} script, suitable for inclusion as an @file{INSTALL}
+file in the package. A plain-text version of @file{INSTALL} which you
+may use comes with Autoconf.
+
+@menu
+* Basic Installation:: Instructions for typical cases
+* Compilers and Options:: Selecting compilers and optimization
+* Multiple Architectures:: Compiling for multiple architectures at once
+* Installation Names:: Installing in different directories
+* Optional Features:: Selecting optional features
+* Particular Systems:: Particular systems
+* System Type:: Specifying the system type
+* Sharing Defaults:: Setting site-wide defaults for @command{configure}
+* Defining Variables:: Specifying the compiler etc.
+* configure Invocation:: Changing how @command{configure} runs
+@end menu
+
+@set autoconf
+@include install.texi
+
+
+@c ============================================== config.status Invocation
+
+@node config.status Invocation
+@chapter config.status Invocation
+@cindex @command{config.status}
+
+The @command{configure} script creates a file named @file{config.status},
+which actually configures, @dfn{instantiates}, the template files. It
+also records the configuration options that were specified when the
+package was last configured in case reconfiguring is needed.
+
+Synopsis:
+@example
+./config.status @ovar{option}@dots{} @ovar{tag}@dots{}
+@end example
+
+It configures each @var{tag}; if none are specified, all the templates
+are instantiated. A @var{tag} refers to a file or other tag associated
+with a configuration action, as specified by an @code{AC_CONFIG_@var{ITEMS}}
+macro (@pxref{Configuration Actions}). The files must be specified
+without their dependencies, as in
+
+@example
+./config.status foobar
+@end example
+
+@noindent
+not
+
+@example
+./config.status foobar:foo.in:bar.in
+@end example
+
+The supported options are:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options, the list of the template
+files, and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and the configuration settings,
+and exit.
+
+@item --config
+Print the configuration settings in reusable way, quoted for the shell,
+and exit. For example, for a debugging build that otherwise reuses the
+configuration from a different build directory @var{build-dir} of a
+package in @var{src-dir}, you could use the following:
+
+@example
+args=`@var{build-dir}/config.status --config`
+eval @var{src-dir}/configure "$args" CFLAGS=-g --srcdir=@var{src-dir}
+@end example
+
+@noindent
+Note that it may be necessary to override a @option{--srcdir} setting
+that was saved in the configuration, if the arguments are used in a
+different build directory.
+
+@item --silent
+@itemx --quiet
+@itemx -q
+Do not print progress messages.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files.
+
+@item --file=@var{file}[:@var{template}]
+Require that @var{file} be instantiated as if
+@samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used. Both
+@var{file} and @var{template} may be @samp{-} in which case the standard
+output and/or standard input, respectively, is used. If a
+@var{template} file name is relative, it is first looked for in the build
+tree, and then in the source tree. @xref{Configuration Actions}, for
+more details.
+
+This option and the following ones provide one way for separately
+distributed packages to share the values computed by @command{configure}.
+Doing so can be useful if some of the packages need a superset of the
+features that one of them, perhaps a common library, does. These
+options allow a @file{config.status} file to create files other than the
+ones that its @file{configure.ac} specifies, so it can be used for a
+different package, or for extracting a subset of values. For example,
+
+@example
+echo '@@CC@@' | ./config.status --file=-
+@end example
+
+@noindent
+provides the value of @code{@@CC@@} on standard output.
+
+@item --header=@var{file}[:@var{template}]
+Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
+
+@item --recheck
+Ask @file{config.status} to update itself and exit (no instantiation).
+This option is useful if you change @command{configure}, so that the
+results of some tests might be different from the previous run. The
+@option{--recheck} option reruns @command{configure} with the same arguments
+you used before, plus the @option{--no-create} option, which prevents
+@command{configure} from running @file{config.status} and creating
+@file{Makefile} and other files, and the @option{--no-recursion} option,
+which prevents @command{configure} from running other @command{configure}
+scripts in subdirectories. (This is so other Make rules can
+run @file{config.status} when it changes; @pxref{Automatic Remaking},
+for an example).
+@end table
+
+@file{config.status} checks several optional environment variables that
+can alter its behavior:
+
+@anchor{CONFIG_SHELL}
+@defvar CONFIG_SHELL
+@evindex CONFIG_SHELL
+The shell with which to run @command{configure}. It must be
+Bourne-compatible, and the absolute name of the shell should be passed.
+The default is a shell that supports @code{LINENO} if available, and
+@file{/bin/sh} otherwise.
+@end defvar
+
+@defvar CONFIG_STATUS
+@evindex CONFIG_STATUS
+The file name to use for the shell script that records the
+configuration. The default is @file{./config.status}. This variable is
+useful when one package uses parts of another and the @command{configure}
+scripts shouldn't be merged because they are maintained separately.
+@end defvar
+
+You can use @file{./config.status} in your makefiles. For example, in
+the dependencies given above (@pxref{Automatic Remaking}),
+@file{config.status} is run twice when @file{configure.ac} has changed.
+If that bothers you, you can make each run only regenerate the files for
+that rule:
+@example
+@group
+config.h: stamp-h
+stamp-h: config.h.in config.status
+ ./config.status config.h
+ echo > stamp-h
+
+Makefile: Makefile.in config.status
+ ./config.status Makefile
+@end group
+@end example
+
+The calling convention of @file{config.status} has changed; see
+@ref{Obsolete config.status Use}, for details.
+
+
+@c =================================================== Obsolete Constructs
+
+@node Obsolete Constructs
+@chapter Obsolete Constructs
+@cindex Obsolete constructs
+
+Autoconf changes, and throughout the years some constructs have been
+obsoleted. Most of the changes involve the macros, but in some cases
+the tools themselves, or even some concepts, are now considered
+obsolete.
+
+You may completely skip this chapter if you are new to Autoconf. Its
+intention is mainly to help maintainers updating their packages by
+understanding how to move to more modern constructs.
+
+@menu
+* Obsolete config.status Use:: Obsolete convention for @command{config.status}
+* acconfig Header:: Additional entries in @file{config.h.in}
+* autoupdate Invocation:: Automatic update of @file{configure.ac}
+* Obsolete Macros:: Backward compatibility macros
+* Autoconf 1:: Tips for upgrading your files
+* Autoconf 2.13:: Some fresher tips
+@end menu
+
+@node Obsolete config.status Use
+@section Obsolete @file{config.status} Invocation
+
+@file{config.status} now supports arguments to specify the files to
+instantiate; see @ref{config.status Invocation}, for more details.
+Before, environment variables had to be used.
+
+@defvar CONFIG_COMMANDS
+@evindex CONFIG_COMMANDS
+The tags of the commands to execute. The default is the arguments given
+to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
+@file{configure.ac}.
+@end defvar
+
+@defvar CONFIG_FILES
+@evindex CONFIG_FILES
+The files in which to perform @samp{@@@var{variable}@@} substitutions.
+The default is the arguments given to @code{AC_OUTPUT} and
+@code{AC_CONFIG_FILES} in @file{configure.ac}.
+@end defvar
+
+@defvar CONFIG_HEADERS
+@evindex CONFIG_HEADERS
+The files in which to substitute C @code{#define} statements. The
+default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
+macro was not called, @file{config.status} ignores this variable.
+@end defvar
+
+@defvar CONFIG_LINKS
+@evindex CONFIG_LINKS
+The symbolic links to establish. The default is the arguments given to
+@code{AC_CONFIG_LINKS}; if that macro was not called,
+@file{config.status} ignores this variable.
+@end defvar
+
+In @ref{config.status Invocation}, using this old interface, the example
+would be:
+
+@example
+@group
+config.h: stamp-h
+stamp-h: config.h.in config.status
+ CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
+ CONFIG_HEADERS=config.h ./config.status
+ echo > stamp-h
+
+Makefile: Makefile.in config.status
+ CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
+ CONFIG_FILES=Makefile ./config.status
+@end group
+@end example
+
+@noindent
+(If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
+no need to set @code{CONFIG_HEADERS} in the @command{make} rules. Equally
+for @code{CONFIG_COMMANDS}, etc.)
+
+
+@node acconfig Header
+@section @file{acconfig.h}
+
+@cindex @file{acconfig.h}
+@cindex @file{config.h.top}
+@cindex @file{config.h.bot}
+
+In order to produce @file{config.h.in}, @command{autoheader} needs to
+build or to find templates for each symbol. Modern releases of Autoconf
+use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
+Macros}), but in older releases a file, @file{acconfig.h}, contained the
+list of needed templates. @command{autoheader} copied comments and
+@code{#define} and @code{#undef} statements from @file{acconfig.h} in
+the current directory, if present. This file used to be mandatory if
+you @code{AC_DEFINE} any additional symbols.
+
+Modern releases of Autoconf also provide @code{AH_TOP} and
+@code{AH_BOTTOM} if you need to prepend/append some information to
+@file{config.h.in}. Ancient versions of Autoconf had a similar feature:
+if @file{./acconfig.h} contains the string @samp{@@TOP@@},
+@command{autoheader} copies the lines before the line containing
+@samp{@@TOP@@} into the top of the file that it generates. Similarly,
+if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
+@command{autoheader} copies the lines after that line to the end of the
+file it generates. Either or both of those strings may be omitted. An
+even older alternate way to produce the same effect in ancient versions
+of Autoconf is to create the files @file{@var{file}.top} (typically
+@file{config.h.top}) and/or @file{@var{file}.bot} in the current
+directory. If they exist, @command{autoheader} copies them to the
+beginning and end, respectively, of its output.
+
+In former versions of Autoconf, the files used in preparing a software
+package for distribution were:
+@example
+@group
+configure.ac --. .------> autoconf* -----> configure
+ +---+
+[aclocal.m4] --+ `---.
+[acsite.m4] ---' |
+ +--> [autoheader*] -> [config.h.in]
+[acconfig.h] ----. |
+ +-----'
+[config.h.top] --+
+[config.h.bot] --'
+@end group
+@end example
+
+Using only the @code{AH_} macros, @file{configure.ac} should be
+self-contained, and should not depend upon @file{acconfig.h} etc.
+
+
+@node autoupdate Invocation
+@section Using @command{autoupdate} to Modernize @file{configure.ac}
+@cindex @command{autoupdate}
+
+The @command{autoupdate} program updates a @file{configure.ac} file that
+calls Autoconf macros by their old names to use the current macro names.
+In version 2 of Autoconf, most of the macros were renamed to use a more
+uniform and descriptive naming scheme. @xref{Macro Names}, for a
+description of the new scheme. Although the old names still work
+(@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
+new names), you can make your @file{configure.ac} files more readable
+and make it easier to use the current Autoconf documentation if you
+update them to use the new macro names.
+
+@evindex SIMPLE_BACKUP_SUFFIX
+If given no arguments, @command{autoupdate} updates @file{configure.ac},
+backing up the original version with the suffix @file{~} (or the value
+of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
+set). If you give @command{autoupdate} an argument, it reads that file
+instead of @file{configure.ac} and writes the updated file to the
+standard output.
+
+@noindent
+@command{autoupdate} accepts the following options:
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of the command line options and exit.
+
+@item --version
+@itemx -V
+Print the version number of Autoconf and exit.
+
+@item --verbose
+@itemx -v
+Report processing steps.
+
+@item --debug
+@itemx -d
+Don't remove the temporary files.
+
+@item --force
+@itemx -f
+Force the update even if the file has not changed. Disregard the cache.
+
+@item --include=@var{dir}
+@itemx -I @var{dir}
+Also look for input files in @var{dir}. Multiple invocations accumulate.
+Directories are browsed from last to first.
+
+@item --prepend-include=@var{dir}
+@itemx -B @var{dir}
+Prepend directory @var{dir} to the search path. This is used to include
+the language-specific files before any third-party macros.
+@end table
+
+@node Obsolete Macros
+@section Obsolete Macros
+
+Several macros are obsoleted in Autoconf, for various reasons (typically
+they failed to quote properly, couldn't be extended for more recent
+issues, etc.). They are still supported, but deprecated: their use
+should be avoided.
+
+During the jump from Autoconf version 1 to version 2, most of the
+macros were renamed to use a more uniform and descriptive naming scheme,
+but their signature did not change. @xref{Macro Names}, for a
+description of the new naming scheme. Below, if there is just the mapping
+from old names to new names for these macros, the reader is invited to
+refer to the definition of the new macro for the signature and the
+description.
+
+@defmac AC_AIX
+@acindex{AIX}
+@cvindex _ALL_SOURCE
+This macro is a platform-specific subset of
+@code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
+@end defmac
+
+@defmac AC_ALLOCA
+@acindex{ALLOCA}
+Replaced by @code{AC_FUNC_ALLOCA} (@pxref{AC_FUNC_ALLOCA}).
+@end defmac
+
+@defmac AC_ARG_ARRAY
+@acindex{ARG_ARRAY}
+Removed because of limited usefulness.
+@end defmac
+
+@defmac AC_C_CROSS
+@acindex{C_CROSS}
+This macro is obsolete; it does nothing.
+@end defmac
+
+@defmac AC_C_LONG_DOUBLE
+@acindex{C_LONG_DOUBLE}
+@cvindex HAVE_LONG_DOUBLE
+If the C compiler supports a working @code{long double} type with more
+range or precision than the @code{double} type, define
+@code{HAVE_LONG_DOUBLE}.
+
+You should use @code{AC_TYPE_LONG_DOUBLE} or
+@code{AC_TYPE_LONG_DOUBLE_WIDER} instead. @xref{Particular Types}.
+@end defmac
+
+@defmac AC_CANONICAL_SYSTEM
+@acindex{CANONICAL_SYSTEM}
+Determine the system type and set output variables to the names of the
+canonical system types. @xref{Canonicalizing}, for details about the
+variables this macro sets.
+
+The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
+@code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
+the needs. Using @code{AC_CANONICAL_TARGET} is enough to run the two
+other macros (@pxref{Canonicalizing}).
+@end defmac
+
+@defmac AC_CHAR_UNSIGNED
+@acindex{CHAR_UNSIGNED}
+Replaced by @code{AC_C_CHAR_UNSIGNED} (@pxref{AC_C_CHAR_UNSIGNED}).
+@end defmac
+
+@defmac AC_CHECK_TYPE (@var{type}, @var{default})
+@acindex{CHECK_TYPE}
+Autoconf, up to 2.13, used to provide this version of
+@code{AC_CHECK_TYPE}, deprecated because of its flaws. First, although
+it is a member of the @code{CHECK} clan, it does
+more than just checking. Secondly, missing types are defined
+using @code{#define}, not @code{typedef}, and this can lead to
+problems in the case of pointer types.
+
+This use of @code{AC_CHECK_TYPE} is obsolete and discouraged; see
+@ref{Generic Types}, for the description of the current macro.
+
+If the type @var{type} is not defined, define it to be the C (or C++)
+builtin type @var{default}, e.g., @samp{short int} or @samp{unsigned int}.
+
+This macro is equivalent to:
+
+@example
+AC_CHECK_TYPE([@var{type}], [],
+ [AC_DEFINE_UNQUOTED([@var{type}], [@var{default}],
+ [Define to `@var{default}'
+ if <sys/types.h> does not define.])])
+@end example
+
+In order to keep backward compatibility, the two versions of
+@code{AC_CHECK_TYPE} are implemented, selected using these heuristics:
+
+@enumerate
+@item
+If there are three or four arguments, the modern version is used.
+
+@item
+If the second argument appears to be a C or C++ type, then the
+obsolete version is used. This happens if the argument is a C or C++
+@emph{builtin} type or a C identifier ending in @samp{_t}, optionally
+followed by one of @samp{[(* } and then by a string of zero or more
+characters taken from the set @samp{[]()* _a-zA-Z0-9}.
+
+@item
+If the second argument is spelled with the alphabet of valid C and C++
+types, the user is warned and the modern version is used.
+
+@item
+Otherwise, the modern version is used.
+@end enumerate
+
+@noindent
+You are encouraged either to use a valid builtin type, or to use the
+equivalent modern code (see above), or better yet, to use
+@code{AC_CHECK_TYPES} together with
+
+@example
+#ifndef HAVE_LOFF_T
+typedef loff_t off_t;
+#endif
+@end example
+@end defmac
+@c end of AC_CHECK_TYPE
+
+@defmac AC_CHECKING (@var{feature-description})
+@acindex{CHECKING}
+Same as
+
+@example
+AC_MSG_NOTICE([checking @var{feature-description}@dots{}]
+@end example
+
+@noindent
+@xref{AC_MSG_NOTICE}.
+@end defmac
+
+@defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @
+ @var{function-body}, @var{action-if-true}, @ovar{action-if-false})
+@acindex{COMPILE_CHECK}
+This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
+@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
+addition that it prints @samp{checking for @var{echo-text}} to the
+standard output first, if @var{echo-text} is non-empty. Use
+@code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
+messages (@pxref{Printing Messages}).
+@end defmac
+
+@defmac AC_CONST
+@acindex{CONST}
+Replaced by @code{AC_C_CONST} (@pxref{AC_C_CONST}).
+@end defmac
+
+@defmac AC_CROSS_CHECK
+@acindex{CROSS_CHECK}
+Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
+@code{:-)}.
+@end defmac
+
+@defmac AC_CYGWIN
+@acindex{CYGWIN}
+@evindex CYGWIN
+Check for the Cygwin environment in which case the shell variable
+@code{CYGWIN} is set to @samp{yes}. Don't use this macro, the dignified
+means to check the nature of the host is using @code{AC_CANONICAL_HOST}
+(@pxref{Canonicalizing}). As a matter of fact this macro is defined as:
+
+@example
+AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
+case $host_os in
+ *cygwin* ) CYGWIN=yes;;
+ * ) CYGWIN=no;;
+esac
+@end example
+
+Beware that the variable @env{CYGWIN} has a special meaning when
+running Cygwin, and should not be changed. That's yet another reason
+not to use this macro.
+@end defmac
+
+@defmac AC_DECL_SYS_SIGLIST
+@acindex{DECL_SYS_SIGLIST}
+@cvindex SYS_SIGLIST_DECLARED
+Same as:
+
+@example
+AC_CHECK_DECLS([sys_siglist], [], [],
+[#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h. */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+])
+@end example
+
+@noindent
+@xref{AC_CHECK_DECLS}.
+@end defmac
+
+@defmac AC_DECL_YYTEXT
+@acindex{DECL_YYTEXT}
+Does nothing, now integrated in @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
+@end defmac
+
+@defmac AC_DIR_HEADER
+@acindex{DIR_HEADER}
+@cvindex DIRENT
+@cvindex SYSNDIR
+@cvindex SYSDIR
+@cvindex NDIR
+Like calling @code{AC_FUNC_CLOSEDIR_VOID}
+(@pxref{AC_FUNC_CLOSEDIR_VOID}) and @code{AC_HEADER_DIRENT}
+(@pxref{AC_HEADER_DIRENT}),
+but defines a different set of C preprocessor macros to indicate which
+header file is found:
+
+@multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
+@item Header @tab Old Symbol @tab New Symbol
+@item @file{dirent.h} @tab @code{DIRENT} @tab @code{HAVE_DIRENT_H}
+@item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
+@item @file{sys/dir.h} @tab @code{SYSDIR} @tab @code{HAVE_SYS_DIR_H}
+@item @file{ndir.h} @tab @code{NDIR} @tab @code{HAVE_NDIR_H}
+@end multitable
+@end defmac
+
+@defmac AC_DYNIX_SEQ
+@acindex{DYNIX_SEQ}
+If on DYNIX/ptx, add @option{-lseq} to output variable
+@code{LIBS}. This macro used to be defined as
+
+@example
+AC_CHECK_LIB([seq], [getmntent], [LIBS="-lseq $LIBS"])
+@end example
+
+@noindent
+now it is just @code{AC_FUNC_GETMNTENT} (@pxref{AC_FUNC_GETMNTENT}).
+@end defmac
+
+@defmac AC_EXEEXT
+@acindex{EXEEXT}
+@ovindex EXEEXT
+Defined the output variable @code{EXEEXT} based on the output of the
+compiler, which is now done automatically. Typically set to empty
+string if Posix and @samp{.exe} if a DOS variant.
+@end defmac
+
+@defmac AC_EMXOS2
+@acindex{EMXOS2}
+Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
+and sets @code{EMXOS2}. Don't use this macro, the dignified means to
+check the nature of the host is using @code{AC_CANONICAL_HOST}
+(@pxref{Canonicalizing}).
+@end defmac
+
+@defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @
+ @ovar{action-if-not-given})
+@acindex{ENABLE}
+This is an obsolete version of @code{AC_ARG_ENABLE} that does not
+support providing a help string (@pxref{AC_ARG_ENABLE}).
+@end defmac
+
+@defmac AC_ERROR
+@acindex{ERROR}
+Replaced by @code{AC_MSG_ERROR} (@pxref{AC_MSG_ERROR}).
+@end defmac
+
+@defmac AC_FIND_X
+@acindex{FIND_X}
+Replaced by @code{AC_PATH_X} (@pxref{AC_PATH_X}).
+@end defmac
+
+@defmac AC_FIND_XTRA
+@acindex{FIND_XTRA}
+Replaced by @code{AC_PATH_XTRA} (@pxref{AC_PATH_XTRA}).
+@end defmac
+
+@defmac AC_FOREACH
+@acindex{FOREACH}
+Replaced by @code{m4_foreach_w} (@pxref{m4_foreach_w}).
+@end defmac
+
+@defmac AC_FUNC_CHECK
+@acindex{FUNC_CHECK}
+Replaced by @code{AC_CHECK_FUNC} (@pxref{AC_CHECK_FUNC}).
+@end defmac
+
+@anchor{AC_FUNC_SETVBUF_REVERSED}
+@defmac AC_FUNC_SETVBUF_REVERSED
+@acindex{FUNC_SETVBUF_REVERSED}
+@cvindex SETVBUF_REVERSED
+@c @fuindex setvbuf
+@prindex @code{setvbuf}
+Do nothing. Formerly, this macro checked whether @code{setvbuf} takes
+the buffering type as its second argument and the buffer pointer as the
+third, instead of the other way around, and defined
+@code{SETVBUF_REVERSED}. However, the last systems to have the problem
+were those based on SVR2, which became obsolete in 1987, and the macro
+is no longer needed.
+@end defmac
+
+@defmac AC_FUNC_WAIT3
+@acindex{FUNC_WAIT3}
+@cvindex HAVE_WAIT3
+@c @fuindex wait3
+@prindex @code{wait3}
+If @code{wait3} is found and fills in the contents of its third argument
+(a @samp{struct rusage *}), which HP-UX does not do, define
+@code{HAVE_WAIT3}.
+
+These days portable programs should use @code{waitpid}, not
+@code{wait3}, as @code{wait3} has been removed from Posix.
+@end defmac
+
+@defmac AC_GCC_TRADITIONAL
+@acindex{GCC_TRADITIONAL}
+Replaced by @code{AC_PROG_GCC_TRADITIONAL} (@pxref{AC_PROG_GCC_TRADITIONAL}).
+@end defmac
+
+@defmac AC_GETGROUPS_T
+@acindex{GETGROUPS_T}
+Replaced by @code{AC_TYPE_GETGROUPS} (@pxref{AC_TYPE_GETGROUPS}).
+@end defmac
+
+@defmac AC_GETLOADAVG
+@acindex{GETLOADAVG}
+Replaced by @code{AC_FUNC_GETLOADAVG} (@pxref{AC_FUNC_GETLOADAVG}).
+@end defmac
+
+@defmac AC_GNU_SOURCE
+@acindex{GNU_SOURCE}
+@cvindex _GNU_SOURCE
+This macro is a platform-specific subset of
+@code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
+@end defmac
+
+@defmac AC_HAVE_FUNCS
+@acindex{HAVE_FUNCS}
+Replaced by @code{AC_CHECK_FUNCS} (@pxref{AC_CHECK_FUNCS}).
+@end defmac
+
+@defmac AC_HAVE_HEADERS
+@acindex{HAVE_HEADERS}
+Replaced by @code{AC_CHECK_HEADERS} (@pxref{AC_CHECK_HEADERS}).
+@end defmac
+
+@defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found}, @ovar{other-libraries})
+@acindex{HAVE_LIBRARY}
+This macro is equivalent to calling @code{AC_CHECK_LIB} with a
+@var{function} argument of @code{main}. In addition, @var{library} can
+be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}. In
+all of those cases, the compiler is passed @option{-lfoo}. However,
+@var{library} cannot be a shell variable; it must be a literal name.
+@xref{AC_CHECK_LIB}.
+@end defmac
+
+@defmac AC_HAVE_POUNDBANG
+@acindex{HAVE_POUNDBANG}
+Replaced by @code{AC_SYS_INTERPRETER} (@pxref{AC_SYS_INTERPRETER}).
+@end defmac
+
+@defmac AC_HEADER_CHECK
+@acindex{HEADER_CHECK}
+Replaced by @code{AC_CHECK_HEADER} (@pxref{AC_CHECK_HEADER}).
+@end defmac
+
+@defmac AC_HEADER_EGREP
+@acindex{HEADER_EGREP}
+Replaced by @code{AC_EGREP_HEADER} (@pxref{AC_EGREP_HEADER}).
+@end defmac
+
+@defmac AC_HELP_STRING
+@acindex{HELP_STRING}
+Replaced by @code{AS_HELP_STRING} (@pxref{AS_HELP_STRING}).
+@end defmac
+
+@defmac AC_INIT (@var{unique-file-in-source-dir})
+@acindex{INIT}
+Formerly @code{AC_INIT} used to have a single argument, and was
+equivalent to:
+
+@example
+AC_INIT
+AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
+@end example
+See @ref{AC_INIT} and @ref{AC_CONFIG_SRCDIR}.
+@end defmac
+
+@defmac AC_INLINE
+@acindex{INLINE}
+Replaced by @code{AC_C_INLINE} (@pxref{AC_C_INLINE}).
+@end defmac
+
+@defmac AC_INT_16_BITS
+@acindex{INT_16_BITS}
+@cvindex INT_16_BITS
+If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
+Use @samp{AC_CHECK_SIZEOF(int)} instead (@pxref{AC_CHECK_SIZEOF}).
+@end defmac
+
+@defmac AC_IRIX_SUN
+@acindex{IRIX_SUN}
+If on IRIX (Silicon Graphics Unix), add @option{-lsun} to output
+@code{LIBS}. If you were using it to get @code{getmntent}, use
+@code{AC_FUNC_GETMNTENT} instead. If you used it for the NIS versions
+of the password and group functions, use @samp{AC_CHECK_LIB(sun,
+getpwnam)}. Up to Autoconf 2.13, it used to be
+
+@example
+AC_CHECK_LIB([sun], [getmntent], [LIBS="-lsun $LIBS"])
+@end example
+
+@noindent
+now it is defined as
+
+@example
+AC_FUNC_GETMNTENT
+AC_CHECK_LIB([sun], [getpwnam])
+@end example
+
+@noindent
+See @ref{AC_FUNC_GETMNTENT} and @ref{AC_CHECK_LIB}.
+@end defmac
+
+@defmac AC_ISC_POSIX
+@acindex{ISC_POSIX}
+@ovindex LIBS
+This macro adds @option{-lcposix} to output variable @code{LIBS} if
+necessary for Posix facilities. Sun dropped support for the obsolete
+INTERACTIVE Systems Corporation Unix on 2006-07-23. New programs
+need not use this macro. It is implemented as
+@code{AC_SEARCH_LIBS([strerror], [cposix])} (@pxref{AC_SEARCH_LIBS}).
+@end defmac
+
+@defmac AC_LANG_C
+@acindex{LANG_C}
+Same as @samp{AC_LANG([C])} (@pxref{AC_LANG}).
+@end defmac
+
+@defmac AC_LANG_CPLUSPLUS
+@acindex{LANG_CPLUSPLUS}
+Same as @samp{AC_LANG([C++])} (@pxref{AC_LANG}).
+@end defmac
+
+@defmac AC_LANG_FORTRAN77
+@acindex{LANG_FORTRAN77}
+Same as @samp{AC_LANG([Fortran 77])} (@pxref{AC_LANG}).
+@end defmac
+
+@defmac AC_LANG_RESTORE
+@acindex{LANG_RESTORE}
+Select the @var{language} that is saved on the top of the stack, as set
+by @code{AC_LANG_SAVE}, remove it from the stack, and call
+@code{AC_LANG(@var{language})}. @xref{Language Choice}, for the
+preferred way to change languages.
+@end defmac
+
+@defmac AC_LANG_SAVE
+@acindex{LANG_SAVE}
+Remember the current language (as set by @code{AC_LANG}) on a stack.
+The current language does not change. @code{AC_LANG_PUSH} is preferred
+(@pxref{AC_LANG_PUSH}).
+@end defmac
+
+@defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
+@acindex{LINK_FILES}
+This is an obsolete version of @code{AC_CONFIG_LINKS}
+(@pxref{AC_CONFIG_LINKS}. An updated version of:
+
+@example
+AC_LINK_FILES(config/$machine.h config/$obj_format.h,
+ host.h object.h)
+@end example
+
+@noindent
+is:
+
+@example
+AC_CONFIG_LINKS([host.h:config/$machine.h
+ object.h:config/$obj_format.h])
+@end example
+@end defmac
+
+@defmac AC_LN_S
+@acindex{LN_S}
+Replaced by @code{AC_PROG_LN_S} (@pxref{AC_PROG_LN_S}).
+@end defmac
+
+@defmac AC_LONG_64_BITS
+@acindex{LONG_64_BITS}
+@cvindex LONG_64_BITS
+Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
+Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead
+(@pxref{AC_CHECK_SIZEOF}).
+@end defmac
+
+@defmac AC_LONG_DOUBLE
+@acindex{LONG_DOUBLE}
+If the C compiler supports a working @code{long double} type with more
+range or precision than the @code{double} type, define
+@code{HAVE_LONG_DOUBLE}.
+
+You should use @code{AC_TYPE_LONG_DOUBLE} or
+@code{AC_TYPE_LONG_DOUBLE_WIDER} instead. @xref{Particular Types}.
+@end defmac
+
+@defmac AC_LONG_FILE_NAMES
+@acindex{LONG_FILE_NAMES}
+Replaced by
+@example
+AC_SYS_LONG_FILE_NAMES
+@end example
+@noindent
+@xref{AC_SYS_LONG_FILE_NAMES}.
+@end defmac
+
+@defmac AC_MAJOR_HEADER
+@acindex{MAJOR_HEADER}
+Replaced by @code{AC_HEADER_MAJOR} (@pxref{AC_HEADER_MAJOR}).
+@end defmac
+
+@defmac AC_MEMORY_H
+@acindex{MEMORY_H}
+@cvindex NEED_MEMORY_H
+Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
+defined in @file{memory.h}. Today it is equivalent to
+@samp{AC_CHECK_HEADERS([memory.h])} (@pxref{AC_CHECK_HEADERS}). Adjust
+your code to depend upon
+@code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}; see @ref{Standard
+Symbols}.
+@end defmac
+
+@defmac AC_MINGW32
+@acindex{MINGW32}
+Similar to @code{AC_CYGWIN} but checks for the MinGW compiler
+environment and sets @code{MINGW32}. Don't use this macro, the
+dignified means to check the nature of the host is using
+@code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
+@end defmac
+
+@defmac AC_MINIX
+@acindex{MINIX}
+@cvindex _MINIX
+@cvindex _POSIX_SOURCE
+@cvindex _POSIX_1_SOURCE
+This macro is a platform-specific subset of
+@code{AC_USE_SYSTEM_EXTENSIONS} (@pxref{AC_USE_SYSTEM_EXTENSIONS}).
+@end defmac
+
+@defmac AC_MINUS_C_MINUS_O
+@acindex{MINUS_C_MINUS_O}
+Replaced by @code{AC_PROG_CC_C_O} (@pxref{AC_PROG_CC_C_O}).
+@end defmac
+
+@defmac AC_MMAP
+@acindex{MMAP}
+Replaced by @code{AC_FUNC_MMAP} (@pxref{AC_FUNC_MMAP}).
+@end defmac
+
+@defmac AC_MODE_T
+@acindex{MODE_T}
+Replaced by @code{AC_TYPE_MODE_T} (@pxref{AC_TYPE_MODE_T}).
+@end defmac
+
+@defmac AC_OBJEXT
+@acindex{OBJEXT}
+@ovindex OBJEXT
+Defined the output variable @code{OBJEXT} based on the output of the
+compiler, after .c files have been excluded. Typically set to @samp{o}
+if Posix, @samp{obj} if a DOS variant.
+Now the compiler checking macros handle
+this automatically.
+@end defmac
+
+@defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
+@acindex{OBSOLETE}
+Make M4 print a message to the standard error output warning that
+@var{this-macro-name} is obsolete, and giving the file and line number
+where it was called. @var{this-macro-name} should be the name of the
+macro that is calling @code{AC_OBSOLETE}. If @var{suggestion} is given,
+it is printed at the end of the warning message; for example, it can be
+a suggestion for what to use instead of @var{this-macro-name}.
+
+For instance
+
+@example
+AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
+@end example
+
+@noindent
+You are encouraged to use @code{AU_DEFUN} instead, since it gives better
+services to the user (@pxref{AU_DEFUN}).
+@end defmac
+
+@defmac AC_OFF_T
+@acindex{OFF_T}
+Replaced by @code{AC_TYPE_OFF_T} (@pxref{AC_TYPE_OFF_T}).
+@end defmac
+
+@defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
+@acindex{OUTPUT}
+The use of @code{AC_OUTPUT} with arguments is deprecated. This obsoleted
+interface is equivalent to:
+
+@example
+@group
+AC_CONFIG_FILES(@var{file}@dots{})
+AC_CONFIG_COMMANDS([default],
+ @var{extra-cmds}, @var{init-cmds})
+AC_OUTPUT
+@end group
+@end example
+
+@noindent
+See @ref{AC_CONFIG_FILES}, @ref{AC_CONFIG_COMMANDS}, and @ref{AC_OUTPUT}.
+@end defmac
+
+@defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @ovar{init-cmds})
+@acindex{OUTPUT_COMMANDS}
+Specify additional shell commands to run at the end of
+@file{config.status}, and shell commands to initialize any variables
+from @command{configure}. This macro may be called multiple times. It is
+obsolete, replaced by @code{AC_CONFIG_COMMANDS} (@pxref{AC_CONFIG_COMMANDS}).
+
+Here is an unrealistic example:
+
+@example
+fubar=27
+AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
+ [fubar=$fubar])
+AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
+ [echo init bit])
+@end example
+
+Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
+additional key, an important difference is that
+@code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, unlike
+@code{AC_CONFIG_COMMANDS}. This means that @code{AC_CONFIG_COMMANDS}
+can safely be given macro calls as arguments:
+
+@example
+AC_CONFIG_COMMANDS(foo, [my_FOO()])
+@end example
+
+@noindent
+Conversely, where one level of quoting was enough for literal strings
+with @code{AC_OUTPUT_COMMANDS}, you need two with
+@code{AC_CONFIG_COMMANDS}. The following lines are equivalent:
+
+@example
+@group
+AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
+AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
+@end group
+@end example
+@end defmac
+
+@defmac AC_PID_T
+@acindex{PID_T}
+Replaced by @code{AC_TYPE_PID_T} (@pxref{AC_TYPE_PID_T}).
+@end defmac
+
+@defmac AC_PREFIX
+@acindex{PREFIX}
+Replaced by @code{AC_PREFIX_PROGRAM} (@pxref{AC_PREFIX_PROGRAM}).
+@end defmac
+
+@defmac AC_PROGRAMS_CHECK
+@acindex{PROGRAMS_CHECK}
+Replaced by @code{AC_CHECK_PROGS} (@pxref{AC_CHECK_PROGS}).
+@end defmac
+
+@defmac AC_PROGRAMS_PATH
+@acindex{PROGRAMS_PATH}
+Replaced by @code{AC_PATH_PROGS} (@pxref{AC_PATH_PROGS}).
+@end defmac
+
+@defmac AC_PROGRAM_CHECK
+@acindex{PROGRAM_CHECK}
+Replaced by @code{AC_CHECK_PROG} (@pxref{AC_CHECK_PROG}).
+@end defmac
+
+@defmac AC_PROGRAM_EGREP
+@acindex{PROGRAM_EGREP}
+Replaced by @code{AC_EGREP_CPP} (@pxref{AC_EGREP_CPP}).
+@end defmac
+
+@defmac AC_PROGRAM_PATH
+@acindex{PROGRAM_PATH}
+Replaced by @code{AC_PATH_PROG} (@pxref{AC_PATH_PROG}).
+@end defmac
+
+@defmac AC_REMOTE_TAPE
+@acindex{REMOTE_TAPE}
+Removed because of limited usefulness.
+@end defmac
+
+@defmac AC_RESTARTABLE_SYSCALLS
+@acindex{RESTARTABLE_SYSCALLS}
+This macro was renamed @code{AC_SYS_RESTARTABLE_SYSCALLS}. However,
+these days portable programs should use @code{sigaction} with
+@code{SA_RESTART} if they want restartable system calls. They should
+not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
+system call is restartable is a dynamic issue, not a configuration-time
+issue.
+@end defmac
+
+@defmac AC_RETSIGTYPE
+@acindex{RETSIGTYPE}
+Replaced by @code{AC_TYPE_SIGNAL} (@pxref{AC_TYPE_SIGNAL}), which itself
+is obsolete when assuming C89 or better.
+@end defmac
+
+@defmac AC_RSH
+@acindex{RSH}
+Removed because of limited usefulness.
+@end defmac
+
+@defmac AC_SCO_INTL
+@acindex{SCO_INTL}
+@ovindex LIBS
+If on SCO Unix, add @option{-lintl} to output variable @code{LIBS}. This
+macro used to do this:
+
+@example
+AC_CHECK_LIB([intl], [strftime], [LIBS="-lintl $LIBS"])
+@end example
+
+@noindent
+Now it just calls @code{AC_FUNC_STRFTIME} instead (@pxref{AC_FUNC_STRFTIME}).
+@end defmac
+
+@defmac AC_SETVBUF_REVERSED
+@acindex{SETVBUF_REVERSED}
+Replaced by
+@example
+AC_FUNC_SETVBUF_REVERSED
+@end example
+@noindent
+@xref{AC_FUNC_SETVBUF_REVERSED}.
+@end defmac
+
+@defmac AC_SET_MAKE
+@acindex{SET_MAKE}
+Replaced by @code{AC_PROG_MAKE_SET} (@pxref{AC_PROG_MAKE_SET}).
+@end defmac
+
+@defmac AC_SIZEOF_TYPE
+@acindex{SIZEOF_TYPE}
+Replaced by @code{AC_CHECK_SIZEOF} (@pxref{AC_CHECK_SIZEOF}).
+@end defmac
+
+@defmac AC_SIZE_T
+@acindex{SIZE_T}
+Replaced by @code{AC_TYPE_SIZE_T} (@pxref{AC_TYPE_SIZE_T}).
+@end defmac
+
+@defmac AC_STAT_MACROS_BROKEN
+@acindex{STAT_MACROS_BROKEN}
+Replaced by @code{AC_HEADER_STAT} (@pxref{AC_HEADER_STAT}).
+@end defmac
+
+@defmac AC_STDC_HEADERS
+@acindex{STDC_HEADERS}
+Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}).
+@end defmac
+
+@defmac AC_STRCOLL
+@acindex{STRCOLL}
+Replaced by @code{AC_FUNC_STRCOLL} (@pxref{AC_FUNC_STRCOLL}).
+@end defmac
+
+@defmac AC_STRUCT_ST_BLKSIZE
+@acindex{STRUCT_ST_BLKSIZE}
+@cvindex HAVE_STRUCT_STAT_ST_BLKSIZE
+@cvindex HAVE_ST_BLKSIZE
+If @code{struct stat} contains an @code{st_blksize} member, define
+@code{HAVE_STRUCT_STAT_ST_BLKSIZE}. The former name,
+@code{HAVE_ST_BLKSIZE} is to be avoided, as its support will cease in
+the future. This macro is obsoleted, and should be replaced by
+
+@example
+AC_CHECK_MEMBERS([struct stat.st_blksize])
+@end example
+@noindent
+@xref{AC_CHECK_MEMBERS}.
+@end defmac
+
+@defmac AC_STRUCT_ST_RDEV
+@acindex{STRUCT_ST_RDEV}
+@cvindex HAVE_ST_RDEV
+@cvindex HAVE_STRUCT_STAT_ST_RDEV
+If @code{struct stat} contains an @code{st_rdev} member, define
+@code{HAVE_STRUCT_STAT_ST_RDEV}. The former name for this macro,
+@code{HAVE_ST_RDEV}, is to be avoided as it will cease to be supported
+in the future. Actually, even the new macro is obsolete and should be
+replaced by:
+@example
+AC_CHECK_MEMBERS([struct stat.st_rdev])
+@end example
+@noindent
+@xref{AC_CHECK_MEMBERS}.
+@end defmac
+
+@defmac AC_ST_BLKSIZE
+@acindex{ST_BLKSIZE}
+Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
+@end defmac
+
+@defmac AC_ST_BLOCKS
+@acindex{ST_BLOCKS}
+Replaced by @code{AC_STRUCT_ST_BLOCKS} (@pxref{AC_STRUCT_ST_BLOCKS}).
+@end defmac
+
+@defmac AC_ST_RDEV
+@acindex{ST_RDEV}
+Replaced by @code{AC_CHECK_MEMBERS} (@pxref{AC_CHECK_MEMBERS}).
+@end defmac
+
+@defmac AC_SYS_RESTARTABLE_SYSCALLS
+@acindex{SYS_RESTARTABLE_SYSCALLS}
+@cvindex HAVE_RESTARTABLE_SYSCALLS
+If the system automatically restarts a system call that is interrupted
+by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}. This macro does
+not check whether system calls are restarted in general---it checks whether a
+signal handler installed with @code{signal} (but not @code{sigaction})
+causes system calls to be restarted. It does not check whether system calls
+can be restarted when interrupted by signals that have no handler.
+
+These days portable programs should use @code{sigaction} with
+@code{SA_RESTART} if they want restartable system calls. They should
+not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
+system call is restartable is a dynamic issue, not a configuration-time
+issue.
+@end defmac
+
+@defmac AC_SYS_SIGLIST_DECLARED
+@acindex{SYS_SIGLIST_DECLARED}
+This macro was renamed @code{AC_DECL_SYS_SIGLIST}. However, even that
+name is obsolete, as the same functionality is now achieved via
+@code{AC_CHECK_DECLS} (@pxref{AC_CHECK_DECLS}).
+@end defmac
+
+@defmac AC_TEST_CPP
+@acindex{TEST_CPP}
+This macro was renamed @code{AC_TRY_CPP}, which in turn was replaced by
+@code{AC_PREPROC_IFELSE} (@pxref{AC_PREPROC_IFELSE}).
+@end defmac
+
+@defmac AC_TEST_PROGRAM
+@acindex{TEST_PROGRAM}
+This macro was renamed @code{AC_TRY_RUN}, which in turn was replaced by
+@code{AC_RUN_IFELSE} (@pxref{AC_RUN_IFELSE}).
+@end defmac
+
+@defmac AC_TIMEZONE
+@acindex{TIMEZONE}
+Replaced by @code{AC_STRUCT_TIMEZONE} (@pxref{AC_STRUCT_TIMEZONE}).
+@end defmac
+
+@defmac AC_TIME_WITH_SYS_TIME
+@acindex{TIME_WITH_SYS_TIME}
+Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}).
+@end defmac
+
+@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @
+ @ovar{action-if-true}, @ovar{action-if-false})
+@acindex{TRY_COMPILE}
+Same as:
+
+@example
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[@var{includes}]],
+ [[@var{function-body}]])],
+ [@var{action-if-true}],
+ [@var{action-if-false}])
+@end example
+
+@noindent
+@xref{Running the Compiler}.
+
+This macro double quotes both @var{includes} and @var{function-body}.
+
+For C and C++, @var{includes} is any @code{#include} statements needed
+by the code in @var{function-body} (@var{includes} is ignored if
+the currently selected language is Fortran or Fortran 77). The compiler
+and compilation flags are determined by the current language
+(@pxref{Language Choice}).
+@end defmac
+
+@defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
+@acindex{TRY_CPP}
+Same as:
+
+@example
+AC_PREPROC_IFELSE(
+ [AC_LANG_SOURCE([[@var{input}]])],
+ [@var{action-if-true}],
+ [@var{action-if-false}])
+@end example
+
+@noindent
+@xref{Running the Preprocessor}.
+
+This macro double quotes the @var{input}.
+@end defmac
+
+@defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @
+ @ovar{action-if-true}, @ovar{action-if-false})
+@acindex{TRY_LINK}
+Same as:
+
+@example
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[@var{includes}]],
+ [[@var{function-body}]])],
+ [@var{action-if-true}],
+ [@var{action-if-false}])
+@end example
+
+@noindent
+@xref{Running the Compiler}.
+
+This macro double quotes both @var{includes} and @var{function-body}.
+
+Depending on the current language (@pxref{Language Choice}), create a
+test program to see whether a function whose body consists of
+@var{function-body} can be compiled and linked. If the file compiles
+and links successfully, run shell commands @var{action-if-found},
+otherwise run @var{action-if-not-found}.
+
+This macro double quotes both @var{includes} and @var{function-body}.
+
+For C and C++, @var{includes} is any @code{#include} statements needed
+by the code in @var{function-body} (@var{includes} is ignored if
+the currently selected language is Fortran or Fortran 77). The compiler
+and compilation flags are determined by the current language
+(@pxref{Language Choice}), and in addition @code{LDFLAGS} and
+@code{LIBS} are used for linking.
+@end defmac
+
+@defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @
+ @ovar{action-if-not-found})
+@acindex{TRY_LINK_FUNC}
+This macro is equivalent to
+@example
+AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])],
+ [@var{action-if-found}], [@var{action-if-not-found}])
+@end example
+@noindent
+@xref{AC_LINK_IFELSE}.
+@end defmac
+
+@defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @
+ @ovar{action-if-false}, @dvar{action-if-cross-compiling, AC_MSG_FAILURE})
+@acindex{TRY_RUN}
+Same as:
+
+@example
+AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[@var{program}]])],
+ [@var{action-if-true}],
+ [@var{action-if-false}],
+ [@var{action-if-cross-compiling}])
+@end example
+
+@noindent
+@xref{Runtime}.
+@end defmac
+
+@anchor{AC_TYPE_SIGNAL}
+@defmac AC_TYPE_SIGNAL
+@acindex{TYPE_SIGNAL}
+@cvindex RETSIGTYPE
+@hdrindex{signal.h}
+If @file{signal.h} declares @code{signal} as returning a pointer to a
+function returning @code{void}, define @code{RETSIGTYPE} to be
+@code{void}; otherwise, define it to be @code{int}. These days, it is
+portable to assume C89, and that signal handlers return @code{void},
+without needing to use this macro or @code{RETSIGTYPE}.
+
+When targeting older K&R C, it is possible to define signal handlers as
+returning type @code{RETSIGTYPE}, and omit a return statement:
+
+@example
+@group
+RETSIGTYPE
+hup_handler ()
+@{
+@dots{}
+@}
+@end group
+@end example
+@end defmac
+
+@defmac AC_UID_T
+@acindex{UID_T}
+Replaced by @code{AC_TYPE_UID_T} (@pxref{AC_TYPE_UID_T}).
+@end defmac
+
+@defmac AC_UNISTD_H
+@acindex{UNISTD_H}
+Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}).
+@end defmac
+
+@defmac AC_USG
+@acindex{USG}
+@cvindex USG
+Define @code{USG} if the BSD string functions are defined in
+@file{strings.h}. You should no longer depend upon @code{USG}, but on
+@code{HAVE_STRING_H}; see @ref{Standard Symbols}.
+@end defmac
+
+@defmac AC_UTIME_NULL
+@acindex{UTIME_NULL}
+Replaced by @code{AC_FUNC_UTIME_NULL} (@pxref{AC_FUNC_UTIME_NULL}).
+@end defmac
+
+@defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
+@acindex{VALIDATE_CACHED_SYSTEM_TUPLE}
+If the cache file is inconsistent with the current host, target and
+build system types, it used to execute @var{cmd} or print a default
+error message. This is now handled by default.
+@end defmac
+
+@defmac AC_VERBOSE (@var{result-description})
+@acindex{VERBOSE}
+Replaced by @code{AC_MSG_RESULT} (@pxref{AC_MSG_RESULT}).
+@end defmac
+
+@defmac AC_VFORK
+@acindex{VFORK}
+Replaced by @code{AC_FUNC_FORK} (@pxref{AC_FUNC_FORK}).
+@end defmac
+
+@defmac AC_VPRINTF
+@acindex{VPRINTF}
+Replaced by @code{AC_FUNC_VPRINTF} (@pxref{AC_FUNC_VPRINTF}).
+@end defmac
+
+@defmac AC_WAIT3
+@acindex{WAIT3}
+This macro was renamed @code{AC_FUNC_WAIT3}. However, these days
+portable programs should use @code{waitpid}, not @code{wait3}, as
+@code{wait3} has been removed from Posix.
+@end defmac
+
+@defmac AC_WARN
+@acindex{WARN}
+Replaced by @code{AC_MSG_WARN} (@pxref{AC_MSG_WARN}).
+@end defmac
+
+@defmac AC_WITH (@var{package}, @var{action-if-given}, @
+ @ovar{action-if-not-given})
+@acindex{WITH}
+This is an obsolete version of @code{AC_ARG_WITH} that does not
+support providing a help string (@pxref{AC_ARG_WITH}).
+@end defmac
+
+@defmac AC_WORDS_BIGENDIAN
+@acindex{WORDS_BIGENDIAN}
+Replaced by @code{AC_C_BIGENDIAN} (@pxref{AC_C_BIGENDIAN}).
+@end defmac
+
+@defmac AC_XENIX_DIR
+@acindex{XENIX_DIR}
+@ovindex LIBS
+This macro used to add @option{-lx} to output variable @code{LIBS} if on
+Xenix. Also, if @file{dirent.h} is being checked for, added
+@option{-ldir} to @code{LIBS}. Now it is merely an alias of
+@code{AC_HEADER_DIRENT} instead, plus some code to detect whether
+running XENIX on which you should not depend:
+
+@example
+AC_MSG_CHECKING([for Xenix])
+AC_EGREP_CPP([yes],
+[#if defined M_XENIX && !defined M_UNIX
+ yes
+#endif],
+ [AC_MSG_RESULT([yes]); XENIX=yes],
+ [AC_MSG_RESULT([no]); XENIX=])
+@end example
+@noindent
+Don't use this macro, the dignified means to check the nature of the
+host is using @code{AC_CANONICAL_HOST} (@pxref{Canonicalizing}).
+@end defmac
+
+@defmac AC_YYTEXT_POINTER
+@acindex{YYTEXT_POINTER}
+This macro was renamed @code{AC_DECL_YYTEXT}, which in turn was
+integrated into @code{AC_PROG_LEX} (@pxref{AC_PROG_LEX}).
+@end defmac
+
+@node Autoconf 1
+@section Upgrading From Version 1
+@cindex Upgrading autoconf
+@cindex Autoconf upgrading
+
+Autoconf version 2 is mostly backward compatible with version 1.
+However, it introduces better ways to do some things, and doesn't
+support some of the ugly things in version 1. So, depending on how
+sophisticated your @file{configure.ac} files are, you might have to do
+some manual work in order to upgrade to version 2. This chapter points
+out some problems to watch for when upgrading. Also, perhaps your
+@command{configure} scripts could benefit from some of the new features in
+version 2; the changes are summarized in the file @file{NEWS} in the
+Autoconf distribution.
+
+@menu
+* Changed File Names:: Files you might rename
+* Changed Makefiles:: New things to put in @file{Makefile.in}
+* Changed Macros:: Macro calls you might replace
+* Changed Results:: Changes in how to check test results
+* Changed Macro Writing:: Better ways to write your own macros
+@end menu
+
+@node Changed File Names
+@subsection Changed File Names
+
+If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
+in a particular package's source directory), you must rename it to
+@file{acsite.m4}. @xref{autoconf Invocation}.
+
+If you distribute @file{install.sh} with your package, rename it to
+@file{install-sh} so @command{make} builtin rules don't inadvertently
+create a file called @file{install} from it. @code{AC_PROG_INSTALL}
+looks for the script under both names, but it is best to use the new name.
+
+If you were using @file{config.h.top}, @file{config.h.bot}, or
+@file{acconfig.h}, you still can, but you have less clutter if you
+use the @code{AH_} macros. @xref{Autoheader Macros}.
+
+@node Changed Makefiles
+@subsection Changed Makefiles
+
+Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
+your @file{Makefile.in} files, so they can take advantage of the values
+of those variables in the environment when @command{configure} is run.
+Doing this isn't necessary, but it's a convenience for users.
+
+Also add @samp{@@configure_input@@} in a comment to each input file for
+@code{AC_OUTPUT}, so that the output files contain a comment saying
+they were produced by @command{configure}. Automatically selecting the
+right comment syntax for all the kinds of files that people call
+@code{AC_OUTPUT} on became too much work.
+
+Add @file{config.log} and @file{config.cache} to the list of files you
+remove in @code{distclean} targets.
+
+If you have the following in @file{Makefile.in}:
+
+@example
+prefix = /usr/local
+exec_prefix = $(prefix)
+@end example
+
+@noindent
+you must change it to:
+
+@example
+prefix = @@prefix@@
+exec_prefix = @@exec_prefix@@
+@end example
+
+@noindent
+The old behavior of replacing those variables without @samp{@@}
+characters around them has been removed.
+
+@node Changed Macros
+@subsection Changed Macros
+
+Many of the macros were renamed in Autoconf version 2. You can still
+use the old names, but the new ones are clearer, and it's easier to find
+the documentation for them. @xref{Obsolete Macros}, for a table showing the
+new names for the old macros. Use the @command{autoupdate} program to
+convert your @file{configure.ac} to using the new macro names.
+@xref{autoupdate Invocation}.
+
+Some macros have been superseded by similar ones that do the job better,
+but are not call-compatible. If you get warnings about calling obsolete
+macros while running @command{autoconf}, you may safely ignore them, but
+your @command{configure} script generally works better if you follow
+the advice that is printed about what to replace the obsolete macros with. In
+particular, the mechanism for reporting the results of tests has
+changed. If you were using @command{echo} or @code{AC_VERBOSE} (perhaps
+via @code{AC_COMPILE_CHECK}), your @command{configure} script's output
+looks better if you switch to @code{AC_MSG_CHECKING} and
+@code{AC_MSG_RESULT}. @xref{Printing Messages}. Those macros work best
+in conjunction with cache variables. @xref{Caching Results}.
+
+
+
+@node Changed Results
+@subsection Changed Results
+
+If you were checking the results of previous tests by examining the
+shell variable @code{DEFS}, you need to switch to checking the values of
+the cache variables for those tests. @code{DEFS} no longer exists while
+@command{configure} is running; it is only created when generating output
+files. This difference from version 1 is because properly quoting the
+contents of that variable turned out to be too cumbersome and
+inefficient to do every time @code{AC_DEFINE} is called. @xref{Cache
+Variable Names}.
+
+For example, here is a @file{configure.ac} fragment written for Autoconf
+version 1:
+
+@example
+AC_HAVE_FUNCS(syslog)
+case "$DEFS" in
+*-DHAVE_SYSLOG*) ;;
+*) # syslog is not in the default libraries. See if it's in some other.
+ saved_LIBS="$LIBS"
+ for lib in bsd socket inet; do
+ AC_CHECKING(for syslog in -l$lib)
+ LIBS="-l$lib $saved_LIBS"
+ AC_HAVE_FUNCS(syslog)
+ case "$DEFS" in
+ *-DHAVE_SYSLOG*) break ;;
+ *) ;;
+ esac
+ LIBS="$saved_LIBS"
+ done ;;
+esac
+@end example
+
+Here is a way to write it for version 2:
+
+@example
+AC_CHECK_FUNCS([syslog])
+if test "x$ac_cv_func_syslog" = xno; then
+ # syslog is not in the default libraries. See if it's in some other.
+ for lib in bsd socket inet; do
+ AC_CHECK_LIB([$lib], [syslog], [AC_DEFINE([HAVE_SYSLOG])
+ LIBS="-l$lib $LIBS"; break])
+ done
+fi
+@end example
+
+If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
+backslashes before quotes, you need to remove them. It now works
+predictably, and does not treat quotes (except back quotes) specially.
+@xref{Setting Output Variables}.
+
+All of the Boolean shell variables set by Autoconf macros now use
+@samp{yes} for the true value. Most of them use @samp{no} for false,
+though for backward compatibility some use the empty string instead. If
+you were relying on a shell variable being set to something like 1 or
+@samp{t} for true, you need to change your tests.
+
+@node Changed Macro Writing
+@subsection Changed Macro Writing
+
+When defining your own macros, you should now use @code{AC_DEFUN}
+instead of @code{define}. @code{AC_DEFUN} automatically calls
+@code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
+do not interrupt other macros, to prevent nested @samp{checking@dots{}}
+messages on the screen. There's no actual harm in continuing to use the
+older way, but it's less convenient and attractive. @xref{Macro
+Definitions}.
+
+You probably looked at the macros that came with Autoconf as a guide for
+how to do things. It would be a good idea to take a look at the new
+versions of them, as the style is somewhat improved and they take
+advantage of some new features.
+
+If you were doing tricky things with undocumented Autoconf internals
+(macros, variables, diversions), check whether you need to change
+anything to account for changes that have been made. Perhaps you can
+even use an officially supported technique in version 2 instead of
+kludging. Or perhaps not.
+
+To speed up your locally written feature tests, add caching to them.
+See whether any of your tests are of general enough usefulness to
+encapsulate them into macros that you can share.
+
+
+@node Autoconf 2.13
+@section Upgrading From Version 2.13
+@cindex Upgrading autoconf
+@cindex Autoconf upgrading
+
+The introduction of the previous section (@pxref{Autoconf 1}) perfectly
+suits this section@enddots{}
+
+@quotation
+Autoconf version 2.50 is mostly backward compatible with version 2.13.
+However, it introduces better ways to do some things, and doesn't
+support some of the ugly things in version 2.13. So, depending on how
+sophisticated your @file{configure.ac} files are, you might have to do
+some manual work in order to upgrade to version 2.50. This chapter
+points out some problems to watch for when upgrading. Also, perhaps
+your @command{configure} scripts could benefit from some of the new
+features in version 2.50; the changes are summarized in the file
+@file{NEWS} in the Autoconf distribution.
+@end quotation
+
+@menu
+* Changed Quotation:: Broken code which used to work
+* New Macros:: Interaction with foreign macros
+* Hosts and Cross-Compilation:: Bugward compatibility kludges
+* AC_LIBOBJ vs LIBOBJS:: LIBOBJS is a forbidden token
+* AC_ACT_IFELSE vs AC_TRY_ACT:: A more generic scheme for testing sources
+@end menu
+
+@node Changed Quotation
+@subsection Changed Quotation
+
+The most important changes are invisible to you: the implementation of
+most macros have completely changed. This allowed more factorization of
+the code, better error messages, a higher uniformity of the user's
+interface etc. Unfortunately, as a side effect, some construct which
+used to (miraculously) work might break starting with Autoconf 2.50.
+The most common culprit is bad quotation.
+
+For instance, in the following example, the message is not properly
+quoted:
+
+@example
+AC_INIT
+AC_CHECK_HEADERS(foo.h, ,
+ AC_MSG_ERROR(cannot find foo.h, bailing out))
+AC_OUTPUT
+@end example
+
+@noindent
+Autoconf 2.13 simply ignores it:
+
+@example
+$ @kbd{autoconf-2.13; ./configure --silent}
+creating cache ./config.cache
+configure: error: cannot find foo.h
+$
+@end example
+
+@noindent
+while Autoconf 2.50 produces a broken @file{configure}:
+
+@example
+$ @kbd{autoconf-2.50; ./configure --silent}
+configure: error: cannot find foo.h
+./configure: exit: bad non-numeric arg `bailing'
+./configure: exit: bad non-numeric arg `bailing'
+$
+@end example
+
+The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
+too!
+
+@example
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AC_CHECK_HEADERS([foo.h], [],
+ [AC_MSG_ERROR([cannot find foo.h, bailing out])])
+AC_OUTPUT
+@end example
+
+Many many (and many more) Autoconf macros were lacking proper quotation,
+including no less than@dots{} @code{AC_DEFUN} itself!
+
+@example
+$ @kbd{cat configure.in}
+AC_DEFUN([AC_PROG_INSTALL],
+[# My own much better version
+])
+AC_INIT
+AC_PROG_INSTALL
+AC_OUTPUT
+$ @kbd{autoconf-2.13}
+autoconf: Undefined macros:
+***BUG in Autoconf--please report*** AC_FD_MSG
+***BUG in Autoconf--please report*** AC_EPI
+configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
+configure.in:5:AC_PROG_INSTALL
+$ @kbd{autoconf-2.50}
+$
+@end example
+
+
+@node New Macros
+@subsection New Macros
+
+@cindex undefined macro
+@cindex @code{_m4_divert_diversion}
+
+While Autoconf was relatively dormant in the late 1990s, Automake
+provided Autoconf-like macros for a while. Starting with Autoconf 2.50
+in 2001, Autoconf provided
+versions of these macros, integrated in the @code{AC_} namespace,
+instead of @code{AM_}. But in order to ease the upgrading via
+@command{autoupdate}, bindings to such @code{AM_} macros are provided.
+
+Unfortunately older versions of Automake (e.g., Automake 1.4)
+did not quote the names of these macros.
+Therefore, when @command{m4} finds something like
+@samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
+@code{AM_TYPE_PTRDIFF_T} is
+expanded, replaced with its Autoconf definition.
+
+Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and
+complains, in its own words:
+
+@example
+$ @kbd{cat configure.ac}
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AM_TYPE_PTRDIFF_T
+$ @kbd{aclocal-1.4}
+$ @kbd{autoconf}
+aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
+aclocal.m4:17: the top level
+autom4te: m4 failed with exit status: 1
+$
+@end example
+
+Modern versions of Automake no longer define most of these
+macros, and properly quote the names of the remaining macros.
+If you must use an old Automake, do not depend upon macros from Automake
+as it is simply not its job
+to provide macros (but the one it requires itself):
+
+@example
+$ @kbd{cat configure.ac}
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AM_TYPE_PTRDIFF_T
+$ @kbd{rm aclocal.m4}
+$ @kbd{autoupdate}
+autoupdate: `configure.ac' is updated
+$ @kbd{cat configure.ac}
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AC_CHECK_TYPES([ptrdiff_t])
+$ @kbd{aclocal-1.4}
+$ @kbd{autoconf}
+$
+@end example
+
+
+@node Hosts and Cross-Compilation
+@subsection Hosts and Cross-Compilation
+@cindex Cross compilation
+
+Based on the experience of compiler writers, and after long public
+debates, many aspects of the cross-compilation chain have changed:
+
+@itemize @minus
+@item
+the relationship between the build, host, and target architecture types,
+
+@item
+the command line interface for specifying them to @command{configure},
+
+@item
+the variables defined in @command{configure},
+
+@item
+the enabling of cross-compilation mode.
+@end itemize
+
+@sp 1
+
+The relationship between build, host, and target have been cleaned up:
+the chain of default is now simply: target defaults to host, host to
+build, and build to the result of @command{config.guess}. Nevertheless,
+in order to ease the transition from 2.13 to 2.50, the following
+transition scheme is implemented. @emph{Do not rely on it}, as it will
+be completely disabled in a couple of releases (we cannot keep it, as it
+proves to cause more problems than it cures).
+
+They all default to the result of running @command{config.guess}, unless
+you specify either @option{--build} or @option{--host}. In this case,
+the default becomes the system type you specified. If you specify both,
+and they're different, @command{configure} enters cross compilation
+mode, so it doesn't run any tests that require execution.
+
+Hint: if you mean to override the result of @command{config.guess},
+prefer @option{--build} over @option{--host}.
+
+@sp 1
+
+For backward compatibility, @command{configure} accepts a system
+type as an option by itself. Such an option overrides the
+defaults for build, host, and target system types. The following
+configure statement configures a cross toolchain that runs on
+NetBSD/alpha but generates code for GNU Hurd/sparc,
+which is also the build platform.
+
+@example
+./configure --host=alpha-netbsd sparc-gnu
+@end example
+
+@sp 1
+
+In Autoconf 2.13 and before, the variables @code{build}, @code{host},
+and @code{target} had a different semantics before and after the
+invocation of @code{AC_CANONICAL_BUILD} etc. Now, the argument of
+@option{--build} is strictly copied into @code{build_alias}, and is left
+empty otherwise. After the @code{AC_CANONICAL_BUILD}, @code{build} is
+set to the canonicalized build type. To ease the transition, before,
+its contents is the same as that of @code{build_alias}. Do @emph{not}
+rely on this broken feature.
+
+For consistency with the backward compatibility scheme exposed above,
+when @option{--host} is specified but @option{--build} isn't, the build
+system is assumed to be the same as @option{--host}, and
+@samp{build_alias} is set to that value. Eventually, this
+historically incorrect behavior will go away.
+
+@sp 1
+
+The former scheme to enable cross-compilation proved to cause more harm
+than good, in particular, it used to be triggered too easily, leaving
+regular end users puzzled in front of cryptic error messages.
+@command{configure} could even enter cross-compilation mode only
+because the compiler was not functional. This is mainly because
+@command{configure} used to try to detect cross-compilation, instead of
+waiting for an explicit flag from the user.
+
+Now, @command{configure} enters cross-compilation mode if and only if
+@option{--host} is passed.
+
+That's the short documentation. To ease the transition between 2.13 and
+its successors, a more complicated scheme is implemented. @emph{Do not
+rely on the following}, as it will be removed in the near future.
+
+If you specify @option{--host}, but not @option{--build}, when
+@command{configure} performs the first compiler test it tries to run
+an executable produced by the compiler. If the execution fails, it
+enters cross-compilation mode. This is fragile. Moreover, by the time
+the compiler test is performed, it may be too late to modify the
+build-system type: other tests may have already been performed.
+Therefore, whenever you specify @option{--host}, be sure to specify
+@option{--build} too.
+
+@example
+./configure --build=i686-pc-linux-gnu --host=m68k-coff
+@end example
+
+@noindent
+enters cross-compilation mode. The former interface, which
+consisted in setting the compiler to a cross-compiler without informing
+@command{configure} is obsolete. For instance, @command{configure}
+fails if it can't run the code generated by the specified compiler if you
+configure as follows:
+
+@example
+./configure CC=m68k-coff-gcc
+@end example
+
+
+@node AC_LIBOBJ vs LIBOBJS
+@subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
+
+Up to Autoconf 2.13, the replacement of functions was triggered via the
+variable @code{LIBOBJS}. Since Autoconf 2.50, the macro
+@code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
+Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
+
+This change is mandated by the unification of the GNU Build System
+components. In particular, the various fragile techniques used to parse
+a @file{configure.ac} are all replaced with the use of traces. As a
+consequence, any action must be traceable, which obsoletes critical
+variable assignments. Fortunately, @code{LIBOBJS} was the only problem,
+and it can even be handled gracefully (read, ``without your having to
+change something'').
+
+There were two typical uses of @code{LIBOBJS}: asking for a replacement
+function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
+
+@sp 1
+
+As for function replacement, the fix is immediate: use
+@code{AC_LIBOBJ}. For instance:
+
+@example
+LIBOBJS="$LIBOBJS fnmatch.o"
+LIBOBJS="$LIBOBJS malloc.$ac_objext"
+@end example
+
+@noindent
+should be replaced with:
+
+@example
+AC_LIBOBJ([fnmatch])
+AC_LIBOBJ([malloc])
+@end example
+
+@sp 1
+
+@ovindex LIBOBJDIR
+When used with Automake 1.10 or newer, a suitable value for
+@code{LIBOBJDIR} is set so that the @code{LIBOBJS} and @code{LTLIBOBJS}
+can be referenced from any @file{Makefile.am}. Even without Automake,
+arranging for @code{LIBOBJDIR} to be set correctly enables
+referencing @code{LIBOBJS} and @code{LTLIBOBJS} in another directory.
+The @code{LIBOBJDIR} feature is experimental.
+
+
+@node AC_ACT_IFELSE vs AC_TRY_ACT
+@subsection @code{AC_@var{ACT}_IFELSE} vs.@: @code{AC_TRY_@var{ACT}}
+@c the anchor keeps the old node name, to try to avoid breaking links
+@anchor{AC_FOO_IFELSE vs AC_TRY_FOO}
+
+@acindex{@var{ACT}_IFELSE}
+@acindex{TRY_@var{ACT}}
+Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
+@code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
+@code{AC_RUN_IFELSE} on one hand and @code{AC_LANG_SOURCE},
+and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
+@code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
+@code{AC_TRY_RUN}. The motivations where:
+@itemize @minus
+@item
+a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
+quoting their arguments;
+
+@item
+the combinatoric explosion is solved by decomposing on the one hand the
+generation of sources, and on the other hand executing the program;
+
+@item
+this scheme helps supporting more languages than plain C and C++.
+@end itemize
+
+In addition to the change of syntax, the philosophy has changed too:
+while emphasis was put on speed at the expense of accuracy, today's
+Autoconf promotes accuracy of the testing framework at, ahem@dots{}, the
+expense of speed.
+
+
+As a perfect example of what is @emph{not} to be done, here is how to
+find out whether a header file contains a particular declaration, such
+as a typedef, a structure, a structure member, or a function. Use
+@code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
+header file; on some systems the symbol might be defined in another
+header file that the file you are checking includes.
+
+As a (bad) example, here is how you should not check for C preprocessor
+symbols, either defined by header files or predefined by the C
+preprocessor: using @code{AC_EGREP_CPP}:
+
+@example
+@group
+AC_EGREP_CPP(yes,
+[#ifdef _AIX
+ yes
+#endif
+], is_aix=yes, is_aix=no)
+@end group
+@end example
+
+The above example, properly written would (i) use
+@code{AC_LANG_PROGRAM}, and (ii) run the compiler:
+
+@example
+@group
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[[#ifndef _AIX
+ error: This isn't AIX!
+#endif
+]])],
+ [is_aix=yes],
+ [is_aix=no])
+@end group
+@end example
+
+
+@c ============================= Generating Test Suites with Autotest
+
+@node Using Autotest
+@chapter Generating Test Suites with Autotest
+
+@cindex Autotest
+
+@display
+@strong{N.B.: This section describes a feature which is still
+stabilizing. Although we believe that Autotest is useful as-is, this
+documentation describes an interface which might change in the future:
+do not depend upon Autotest without subscribing to the Autoconf mailing
+lists.}
+@end display
+
+It is paradoxical that portable projects depend on nonportable tools
+to run their test suite. Autoconf by itself is the paragon of this
+problem: although it aims at perfectly portability, up to 2.13 its
+test suite was using DejaGNU, a rich and complex testing
+framework, but which is far from being standard on Posix systems.
+Worse yet, it was likely to be missing on the most fragile platforms,
+the very platforms that are most likely to torture Autoconf and
+exhibit deficiencies.
+
+To circumvent this problem, many package maintainers have developed their
+own testing framework, based on simple shell scripts whose sole outputs
+are exit status values describing whether the test succeeded. Most of
+these tests share common patterns, and this can result in lots of
+duplicated code and tedious maintenance.
+
+Following exactly the same reasoning that yielded to the inception of
+Autoconf, Autotest provides a test suite generation framework, based on
+M4 macros building a portable shell script. The suite itself is
+equipped with automatic logging and tracing facilities which greatly
+diminish the interaction with bug reporters, and simple timing reports.
+
+Autoconf itself has been using Autotest for years, and we do attest that
+it has considerably improved the strength of the test suite and the
+quality of bug reports. Other projects are known to use some generation
+of Autotest, such as Bison, Free Recode, Free Wdiff, GNU Tar, each of
+them with different needs, and this usage has validated Autotest as a general
+testing framework.
+
+Nonetheless, compared to DejaGNU, Autotest is inadequate for
+interactive tool testing, which is probably its main limitation.
+
+@menu
+* Using an Autotest Test Suite:: Autotest and the user
+* Writing Testsuites:: Autotest macros
+* testsuite Invocation:: Running @command{testsuite} scripts
+* Making testsuite Scripts:: Using autom4te to create @command{testsuite}
+@end menu
+
+@node Using an Autotest Test Suite
+@section Using an Autotest Test Suite
+
+@menu
+* testsuite Scripts:: The concepts of Autotest
+* Autotest Logs:: Their contents
+@end menu
+
+@node testsuite Scripts
+@subsection @command{testsuite} Scripts
+
+@cindex @command{testsuite}
+
+Generating testing or validation suites using Autotest is rather easy.
+The whole validation suite is held in a file to be processed through
+@command{autom4te}, itself using GNU M4 under the hood, to
+produce a stand-alone Bourne shell script which then gets distributed.
+Neither @command{autom4te} nor GNU M4 are needed at
+the installer's end.
+
+@cindex test group
+Each test of the validation suite should be part of some test group. A
+@dfn{test group} is a sequence of interwoven tests that ought to be
+executed together, usually because one test in the group creates data
+files that a later test in the same group needs to read. Complex test
+groups make later debugging more tedious. It is much better to
+keep only a few tests per test group. Ideally there is only one test
+per test group.
+
+For all but the simplest packages, some file such as @file{testsuite.at}
+does not fully hold all test sources, as these are often easier to
+maintain in separate files. Each of these separate files holds a single
+test group, or a sequence of test groups all addressing some common
+functionality in the package. In such cases, @file{testsuite.at}
+merely initializes the validation suite, and sometimes does elementary
+health checking, before listing include statements for all other test
+files. The special file @file{package.m4}, containing the
+identification of the package, is automatically included if found.
+
+A convenient alternative consists in moving all the global issues
+(local Autotest macros, elementary health checking, and @code{AT_INIT}
+invocation) into the file @code{local.at}, and making
+@file{testsuite.at} be a simple list of @code{m4_include}s of sub test
+suites. In such case, generating the whole test suite or pieces of it
+is only a matter of choosing the @command{autom4te} command line
+arguments.
+
+The validation scripts that Autotest produces are by convention called
+@command{testsuite}. When run, @command{testsuite} executes each test
+group in turn, producing only one summary line per test to say if that
+particular test succeeded or failed. At end of all tests, summarizing
+counters get printed. One debugging directory is left for each test
+group which failed, if any: such directories are named
+@file{testsuite.dir/@var{nn}}, where @var{nn} is the sequence number of
+the test group, and they include:
+
+@itemize @bullet
+@item a debugging script named @file{run} which reruns the test in
+@dfn{debug mode} (@pxref{testsuite Invocation}). The automatic generation
+of debugging scripts has the purpose of easing the chase for bugs.
+
+@item all the files created with @code{AT_DATA}
+
+@item all the Erlang source code files created with @code{AT_CHECK_EUNIT}
+
+@item a log of the run, named @file{testsuite.log}
+@end itemize
+
+In the ideal situation, none of the tests fail, and consequently no
+debugging directory is left behind for validation.
+
+It often happens in practice that individual tests in the validation
+suite need to get information coming out of the configuration process.
+Some of this information, common for all validation suites, is provided
+through the file @file{atconfig}, automatically created by
+@code{AC_CONFIG_TESTDIR}. For configuration information which your
+testing environment specifically needs, you might prepare an optional
+file named @file{atlocal.in}, instantiated by @code{AC_CONFIG_FILES}.
+The configuration process produces @file{atconfig} and @file{atlocal}
+out of these two input files, and these two produced files are
+automatically read by the @file{testsuite} script.
+
+Here is a diagram showing the relationship between files.
+
+@noindent
+Files used in preparing a software package for distribution:
+
+@example
+ [package.m4] -->.
+ \
+subfile-1.at ->. [local.at] ---->+
+ ... \ \
+subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
+ ... /
+subfile-n.at ->'
+@end example
+
+@noindent
+Files used in configuring a software package:
+
+@example
+ .--> atconfig
+ /
+[atlocal.in] --> config.status* --<
+ \
+ `--> [atlocal]
+@end example
+
+@noindent
+Files created during test suite execution:
+
+@example
+atconfig -->. .--> testsuite.log
+ \ /
+ >-- testsuite* --<
+ / \
+[atlocal] ->' `--> [testsuite.dir]
+@end example
+
+
+@node Autotest Logs
+@subsection Autotest Logs
+
+When run, the test suite creates a log file named after itself, e.g., a
+test suite named @command{testsuite} creates @file{testsuite.log}. It
+contains a lot of information, usually more than maintainers actually
+need, but therefore most of the time it contains all that is needed:
+
+@table @asis
+@item command line arguments
+A bad but unfortunately widespread habit consists of
+setting environment variables before the command, such as in
+@samp{CC=my-home-grown-cc ./testsuite}. The test suite does not
+know this change, hence (i) it cannot report it to you, and (ii)
+it cannot preserve the value of @code{CC} for subsequent runs.
+Autoconf faced exactly the same problem, and solved it by asking
+users to pass the variable definitions as command line arguments.
+Autotest requires this rule, too, but has no means to enforce it; the log
+then contains a trace of the variables that were changed by the user.
+
+@item @file{ChangeLog} excerpts
+The topmost lines of all the @file{ChangeLog} files found in the source
+hierarchy. This is especially useful when bugs are reported against
+development versions of the package, since the version string does not
+provide sufficient information to know the exact state of the sources
+the user compiled. Of course, this relies on the use of a
+@file{ChangeLog}.
+
+@item build machine
+Running a test suite in a cross-compile environment is not an easy task,
+since it would mean having the test suite run on a machine @var{build},
+while running programs on a machine @var{host}. It is much simpler to
+run both the test suite and the programs on @var{host}, but then, from
+the point of view of the test suite, there remains a single environment,
+@var{host} = @var{build}. The log contains relevant information on the
+state of the @var{build} machine, including some important environment
+variables.
+@c FIXME: How about having an M4sh macro to say `hey, log the value
+@c of `@dots{}'? This would help both Autoconf and Autotest.
+
+@item tested programs
+The absolute file name and answers to @option{--version} of the tested
+programs (see @ref{Writing Testsuites}, @code{AT_TESTED}).
+
+@item configuration log
+The contents of @file{config.log}, as created by @command{configure},
+are appended. It contains the configuration flags and a detailed report
+on the configuration itself.
+@end table
+
+
+@node Writing Testsuites
+@section Writing @file{testsuite.at}
+
+The @file{testsuite.at} is a Bourne shell script making use of special
+Autotest M4 macros. It often contains a call to @code{AT_INIT} near
+its beginning followed by one call to @code{m4_include} per source file
+for tests. Each such included file, or the remainder of
+@file{testsuite.at} if include files are not used, contain a sequence of
+test groups. Each test group begins with a call to @code{AT_SETUP},
+then an arbitrary number of shell commands or calls to @code{AT_CHECK},
+and then completes with a call to @code{AT_CLEANUP}. Multiple test
+groups can be categorized by a call to @code{AT_BANNER}.
+
+All of the public Autotest macros have all-uppercase names in the
+namespace @samp{^AT_} to prevent them from accidentally conflicting with
+other text; Autoconf also reserves the namespace @samp{^_AT_} for
+internal macros. All shell variables used in the testsuite for internal
+purposes have mostly-lowercase names starting with @samp{at_}. Autotest
+also uses here-document delimiters in the namespace @samp{^_AT[A-Z]}, and
+makes use of the file system namespace @samp{^at-}.
+
+Since Autoconf is built on top of M4sugar (@pxref{Programming in
+M4sugar}) and M4sh (@pxref{Programming in M4sh}), you must also be aware
+of those namespaces (@samp{^_?\(m4\|AS\)_}). In general, you
+@emph{should not use} the namespace of a package that does not own the
+macro or shell code you are writing.
+
+@defmac AT_INIT (@ovar{name})
+@atindex{INIT}
+@c FIXME: Not clear, plus duplication of the information.
+Initialize Autotest. Giving a @var{name} to the test suite is
+encouraged if your package includes several test suites. Before this
+macro is called, @code{AT_PACKAGE_STRING} and
+@code{AT_PACKAGE_BUGREPORT} must be defined, which are used to display
+information about the testsuite to the user. Typically, these macros
+are provided by a file @file{package.m4} built by @command{make}
+(@pxref{Making testsuite Scripts}), in order to inherit the package
+name, version, and bug reporting address from @file{configure.ac}.
+@end defmac
+
+@defmac AT_COPYRIGHT (@var{copyright-notice})
+@atindex{COPYRIGHT}
+@cindex Copyright Notice
+State that, in addition to the Free Software Foundation's copyright on
+the Autotest macros, parts of your test suite are covered by
+@var{copyright-notice}.
+
+The @var{copyright-notice} shows up in both the head of
+@command{testsuite} and in @samp{testsuite --version}.
+@end defmac
+
+@defmac AT_ARG_OPTION (@var{options}, @var{help-text}, @
+ @ovar{action-if-given}, @ovar{action-if-not-given})
+@atindex{ARG_OPTION}
+@vrindex at_arg_@var{option}
+Accept options from the space-separated list @var{options}, a list that
+has leading dashes removed from the options. Long options will be
+prefixed with @samp{--}, single-character options with @samp{-}. The
+first word in this list is the primary @var{option}, any others are
+assumed to be short-hand aliases. The variable associated with it
+is @code{at_arg_@var{option}}, with any dashes in @var{option} replaced
+with underscores.
+
+If the user passes @option{--@var{option}} to the @command{testsuite},
+the variable will be set to @samp{:}. If the user does not pass the
+option, or passes @option{--no-@var{option}}, then the variable will be
+set to @samp{false}.
+
+@vrindex at_optarg
+@vrindex at_optarg_@var{option}
+@var{action-if-given} is run each time the option is encountered; here,
+the variable @code{at_optarg} will be set to @samp{:} or @samp{false} as
+appropriate. @code{at_optarg} is actually just a copy of
+@code{at_arg_@var{option}}.
+
+@var{action-if-not-given} will be run once after option parsing is
+complete and if no option from @var{options} was used.
+
+@var{help-text} is added to the end of the list of options shown in
+@command{testsuite --help} (@pxref{AS_HELP_STRING}).
+
+It is recommended that you use a package-specific prefix to @var{options}
+names in order to avoid clashes with future Autotest built-in options.
+@end defmac
+
+@defmac AT_ARG_OPTION_ARG (@var{options}, @var{help-text}, @
+ @ovar{action-if-given}, @ovar{action-if-not-given})
+@atindex{ARG_OPTION_ARG}
+@vrindex at_arg_@var{option}
+Accept options with arguments from the space-separated list
+@var{options}, a list that has leading dashes removed from the options.
+Long options will be prefixed with @samp{--}, single-character options
+with @samp{-}. The first word in this list is the primary @var{option},
+any others are assumed to be short-hand aliases. The variable associated
+with it is @code{at_arg_@var{option}}, with any dashes in @var{option}
+replaced with underscores.
+
+If the user passes @option{--@var{option}=@var{arg}} or
+@option{--@var{option} @var{arg}} to the @command{testsuite}, the
+variable will be set to @samp{@var{arg}}.
+
+@vrindex at_optarg
+@var{action-if-given} is run each time the option is encountered; here,
+the variable @code{at_optarg} will be set to @samp{@var{arg}}.
+@code{at_optarg} is actually just a copy of @code{at_arg_@var{option}}.
+
+@var{action-if-not-given} will be run once after option parsing is
+complete and if no option from @var{options} was used.
+
+@var{help-text} is added to the end of the list of options shown in
+@command{testsuite --help} (@pxref{AS_HELP_STRING}).
+
+It is recommended that you use a package-specific prefix to @var{options}
+names in order to avoid clashes with future Autotest built-in options.
+@end defmac
+
+@defmac AT_COLOR_TESTS
+@atindex{COLOR_TESTS}
+Enable colored test results by default when the output is connected to
+a terminal.
+@end defmac
+
+@defmac AT_TESTED (@var{executables})
+@atindex{TESTED}
+Log the file name and answer to @option{--version} of each program in
+space-separated list @var{executables}. Several invocations register
+new executables, in other words, don't fear registering one program
+several times.
+
+Autotest test suites rely on @env{PATH} to find the tested program.
+This avoids the need to generate absolute names of the various tools, and
+makes it possible to test installed programs. Therefore, knowing which
+programs are being exercised is crucial to understanding problems in
+the test suite itself, or its occasional misuses. It is a good idea to
+also subscribe foreign programs you depend upon, to avoid incompatible
+diagnostics.
+@end defmac
+
+@sp 1
+
+@defmac AT_BANNER (@var{test-category-name})
+@atindex{BANNER}
+This macro identifies the start of a category of related test groups.
+When the resulting @file{testsuite} is invoked with more than one test
+group to run, its output will include a banner containing
+@var{test-category-name} prior to any tests run from that category. The
+banner should be no more than about 40 or 50 characters. A blank banner
+indicates uncategorized tests; an empty line will be inserted after
+tests from an earlier category, effectively ending that category.
+@end defmac
+
+@defmac AT_SETUP (@var{test-group-name})
+@atindex{SETUP}
+This macro starts a group of related tests, all to be executed in the
+same subshell. It accepts a single argument, which holds a few words
+(no more than about 30 or 40 characters) quickly describing the purpose
+of the test group being started. @var{test-group-name} must not expand
+to unbalanced quotes, although quadrigraphs can be used.
+@end defmac
+
+@defmac AT_KEYWORDS (@var{keywords})
+@atindex{KEYWORDS}
+Associate the space-separated list of @var{keywords} to the enclosing
+test group. This makes it possible to run ``slices'' of the test suite.
+For instance, if some of your test groups exercise some @samp{foo}
+feature, then using @samp{AT_KEYWORDS(foo)} lets you run
+@samp{./testsuite -k foo} to run exclusively these test groups. The
+@var{test-group-name} of the test group is automatically recorded to
+@code{AT_KEYWORDS}.
+
+Several invocations within a test group accumulate new keywords. In
+other words, don't fear registering the same keyword several times in a
+test group.
+@end defmac
+
+@defmac AT_CAPTURE_FILE (@var{file})
+@atindex{CAPTURE_FILE}
+If the current test group fails, log the contents of @var{file}.
+Several identical calls within one test group have no additional effect.
+@end defmac
+
+@defmac AT_FAIL_IF (@var{shell-condition})
+@atindex{FAIL_IF}
+Make the test group fail and skip the rest of its execution, if
+@var{shell-condition} is true. @var{shell-condition} is a shell expression
+such as a @code{test} command. Tests before @command{AT_FAIL_IF}
+will be executed and may still cause the test group to be skipped.
+You can instantiate this macro many times from within the same test group.
+
+You should use this macro only for very simple failure conditions. If the
+@var{shell-condition} could emit any kind of output you should instead
+use @command{AT_CHECK} like
+@example
+AT_CHECK([if @var{shell-condition}; then exit 99; fi])
+@end example
+@noindent
+so that such output is properly recorded in the @file{testsuite.log}
+file.
+@end defmac
+
+@defmac AT_SKIP_IF (@var{shell-condition})
+@atindex{SKIP_IF}
+Determine whether the test should be skipped because it requires
+features that are unsupported on the machine under test.
+@var{shell-condition} is a shell expression such as a @code{test}
+command. Tests before @command{AT_SKIP_IF} will be executed
+and may still cause the test group to fail. You can instantiate this
+macro many times from within the same test group.
+
+You should use this macro only for very simple skip conditions. If the
+@var{shell-condition} could emit any kind of output you should instead
+use @command{AT_CHECK} like
+@example
+AT_CHECK([if @var{shell-condition}; then exit 77; fi])
+@end example
+@noindent
+so that such output is properly recorded in the @file{testsuite.log}
+file.
+@end defmac
+
+@defmac AT_XFAIL_IF (@var{shell-condition})
+@atindex{XFAIL_IF}
+Determine whether the test is expected to fail because it is a known
+bug (for unsupported features, you should skip the test).
+@var{shell-condition} is a shell expression such as a @code{test}
+command; you can instantiate this macro many times from within the
+same test group, and one of the conditions is enough to turn
+the test into an expected failure.
+@end defmac
+
+@defmac AT_CLEANUP
+@atindex{CLEANUP}
+End the current test group.
+@end defmac
+
+@sp 1
+
+@defmac AT_DATA (@var{file}, @var{contents})
+@atindex{DATA}
+Initialize an input data @var{file} with given @var{contents}. Of
+course, the @var{contents} have to be properly quoted between square
+brackets to protect against included commas or spurious M4
+expansion. @var{contents} must be empty or end with a newline.
+@var{file} must
+be a single shell word that expands into a single file name.
+@end defmac
+
+@defmac AT_CHECK (@var{commands}, @dvar{status, 0}, @ovar{stdout}, @
+ @ovar{stderr}, @ovar{run-if-fail}, @ovar{run-if-pass})
+@defmacx AT_CHECK_UNQUOTED (@var{commands}, @dvar{status, 0}, @ovar{stdout}, @
+ @ovar{stderr}, @ovar{run-if-fail}, @ovar{run-if-pass})
+@atindex{CHECK}
+@atindex{CHECK_UNQUOTED}
+@vrindex at_status
+Execute a test by performing given shell @var{commands} in a subshell.
+@var{commands} is output as-is, so shell expansions are honored. These
+commands should normally exit with @var{status}, while producing expected
+@var{stdout} and @var{stderr} contents. If @var{commands} exit with
+unexpected status 77, then the rest of the test group is skipped. If
+@var{commands} exit with unexpected status 99, then the test group is
+immediately failed. Otherwise, if this test fails, run shell commands
+@var{run-if-fail} or, if this test passes, run shell commands
+@var{run-if-pass}, both inside the current shell execution environment.
+At the beginning of @var{run-if-fail} and @var{run-if-pass}, the status of
+@var{commands} is available in the @code{at_status} shell variable.
+
+This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
+
+If @var{status} is the literal @samp{ignore}, then the corresponding
+exit status is not checked, except for the special cases of 77 (skip)
+and 99 (hard failure). The existence of hard failures allows one to
+mark a test as an expected failure with @code{AT_XFAIL_IF} because a
+feature has not yet been implemented, but to still distinguish between
+gracefully handling the missing feature and dumping core. A hard
+failure also inhibits post-test actions in @var{run-if-fail}.
+
+If the value of the @var{stdout} or @var{stderr} parameter is one of the
+literals in the following table, then the test treats the output
+according to the rules of that literal. Otherwise, the value of the
+parameter is treated as text that must exactly match the output given by
+@var{commands} on standard output and standard error (including an empty
+parameter for no output); any differences are captured in the testsuite
+log and the test is failed (unless an unexpected exit status of 77
+skipped the test instead). The difference between @code{AT_CHECK} and
+@code{AT_CHECK_UNQUOTED} is that only the latter performs shell variable
+expansion (@samp{$}), command substitution (@samp{`}), and backslash
+escaping (@samp{\}) on comparison text given in the @var{stdout} and
+@var{stderr} arguments; if the text includes a trailing newline, this
+would be the same as if it were specified via an unquoted
+here-document. (However, there is no difference in the interpretation
+of @var{commands}).
+
+@table @samp
+@item ignore
+The content of the output is ignored, but still captured in the test
+group log (if the testsuite is run with option @option{-v}, the test
+group log is displayed as the test is run; if the test group later
+fails, the test group log is also copied into the overall testsuite
+log). This action is valid for both @var{stdout} and @var{stderr}.
+
+@item ignore-nolog
+The content of the output is ignored, and nothing is captured in the log
+files. If @var{commands} are likely to produce binary output (including
+long lines) or large amounts of output, then logging the output can make
+it harder to locate details related to subsequent tests within the
+group, and could potentially corrupt terminal display of a user running
+@command{testsuite -v}.
+
+@item stdout
+For the @var{stdout} parameter, capture the content of standard output
+to both the file @file{stdout} and the test group log. Subsequent
+commands in the test group can then post-process the file. This action
+is often used when it is desired to use @command{grep} to look for a
+substring in the output, or when the output must be post-processed to
+normalize error messages into a common form.
+
+@item stderr
+Like @samp{stdout}, except that it only works for the @var{stderr}
+parameter, and the standard error capture file will be named
+@file{stderr}.
+
+@item stdout-nolog
+@itemx stderr-nolog
+Like @samp{stdout} or @samp{stderr}, except that the captured output is
+not duplicated into the test group log. This action is particularly
+useful for an intermediate check that produces large amounts of data,
+which will be followed by another check that filters down to the
+relevant data, as it makes it easier to locate details in the log.
+
+@item expout
+For the @var{stdout} parameter, compare standard output contents with
+the previously created file @file{expout}, and list any differences in
+the testsuite log.
+
+@item experr
+Like @samp{expout}, except that it only works for the @var{stderr}
+parameter, and the standard error contents are compared with
+@file{experr}.
+@end table
+@end defmac
+
+@defmac AT_CHECK_EUNIT (@var{module}, @var{test-spec}, @ovar{erlflags}, @
+ @ovar{run-if-fail}, @ovar{run-if-pass})
+@atindex{CHECK_EUNIT}
+Initialize and execute an Erlang module named @var{module} that performs
+tests following the @var{test-spec} EUnit test specification.
+@var{test-spec} must be a valid EUnit test specification, as defined in
+the @uref{http://@/erlang.org/@/doc/@/apps/@/eunit/@/index.html, EUnit
+Reference Manual}. @var{erlflags} are optional command-line options
+passed to the Erlang interpreter to execute the test Erlang module.
+Typically, @var{erlflags} defines at least the paths to directories
+containing the compiled Erlang modules under test, as @samp{-pa path1
+path2 ...}.
+
+For example, the unit tests associated with Erlang module @samp{testme},
+which compiled code is in subdirectory @file{src}, can be performed
+with:
+
+@example
+AT_CHECK_EUNIT([testme_testsuite], [@{module, testme@}],
+ [-pa "$@{abs_top_builddir@}/src"])
+@end example
+
+This macro must be invoked in between @code{AT_SETUP} and @code{AT_CLEANUP}.
+
+Variables @code{ERL}, @code{ERLC}, and (optionally) @code{ERLCFLAGS}
+must be defined as the path of the Erlang interpreter, the path of the
+Erlang compiler, and the command-line flags to pass to the compiler,
+respectively. Those variables should be configured in
+@file{configure.ac} using the @command{AC_ERLANG_PATH_ERL} and
+@command{AC_ERLANG_PATH_ERLC} macros, and the configured values of those
+variables are automatically defined in the testsuite. If @code{ERL} or
+@code{ERLC} is not defined, the test group is skipped.
+
+If the EUnit library cannot be found, i.e. if module @code{eunit} cannot
+be loaded, the test group is skipped. Otherwise, if @var{test-spec} is
+an invalid EUnit test specification, the test group fails. Otherwise,
+if the EUnit test passes, shell commands @var{run-if-pass} are executed
+or, if the EUnit test fails, shell commands @var{run-if-fail} are
+executed and the test group fails.
+
+Only the generated test Erlang module is automatically compiled and
+executed. If @var{test-spec} involves testing other Erlang modules,
+e.g. module @samp{testme} in the example above, those modules must be
+already compiled.
+
+If the testsuite is run in verbose mode, with option @option{--verbose},
+EUnit is also run in verbose mode to output more details about
+individual unit tests.
+@end defmac
+
+
+@node testsuite Invocation
+@section Running @command{testsuite} Scripts
+@cindex @command{testsuite}
+
+Autotest test suites support the following options:
+
+@table @option
+@item --help
+@itemx -h
+Display the list of options and exit successfully.
+
+@item --version
+@itemx -V
+Display the version of the test suite and exit successfully.
+
+@item --directory=@var{dir}
+@itemx -C @var{dir}
+Change the current directory to @var{dir} before creating any files.
+Useful for running the testsuite in a subdirectory from a top-level
+Makefile.
+
+@item --jobs@r{[}=@var{n}@r{]}
+@itemx -j@ovar{n}
+Run @var{n} tests in parallel, if possible. If @var{n} is not given,
+run all given tests in parallel. Note that there should be no space
+before the argument to @option{-j}, as @option{-j @var{number}} denotes
+the separate arguments @option{-j} and @option{@var{number}}, see below.
+
+In parallel mode, the standard input device of the testsuite script is
+not available to commands inside a test group. Furthermore, banner
+lines are not printed, and the summary line for each test group is
+output after the test group completes. Summary lines may appear
+unordered. If verbose and trace output are enabled (see below), they
+may appear intermixed from concurrently running tests.
+
+Parallel mode requires the @command{mkfifo} command to work, and will be
+silently disabled otherwise.
+
+@item --clean
+@itemx -c
+Remove all the files the test suite might have created and exit. Meant
+for @code{clean} Make targets.
+
+@item --list
+@itemx -l
+List all the tests (or only the selection), including their possible
+keywords.
+@end table
+
+@sp 1
+
+By default all tests are performed (or described with @option{--list})
+silently in the default environment, but the environment, set of tests,
+and verbosity level can be tuned:
+
+@table @samp
+@item @var{variable}=@var{value}
+Set the environment @var{variable} to @var{value}. Use this rather
+than @samp{FOO=foo ./testsuite} as debugging scripts would then run in a
+different environment.
+
+@cindex @code{AUTOTEST_PATH}
+The variable @code{AUTOTEST_PATH} specifies the testing path to prepend
+to @env{PATH}. Relative directory names (not starting with
+@samp{/}) are considered to be relative to the top level of the
+package being built. All directories are made absolute, first
+starting from the top level @emph{build} tree, then from the
+@emph{source} tree. For instance @samp{./testsuite
+AUTOTEST_PATH=tests:bin} for a @file{/src/foo-1.0} source package built
+in @file{/tmp/foo} results in @samp{/tmp/foo/tests:/tmp/foo/bin} and
+then @samp{/src/foo-1.0/tests:/src/foo-1.0/bin} being prepended to
+@env{PATH}.
+
+@item @var{number}
+@itemx @var{number}-@var{number}
+@itemx @var{number}-
+@itemx -@var{number}
+Add the corresponding test groups, with obvious semantics, to the
+selection.
+
+@item --keywords=@var{keywords}
+@itemx -k @var{keywords}
+Add to the selection the test groups with title or keywords (arguments
+to @code{AT_SETUP} or @code{AT_KEYWORDS}) that match @emph{all} keywords
+of the comma separated list @var{keywords}, case-insensitively. Use
+@samp{!} immediately before the keyword to invert the selection for this
+keyword. By default, the keywords match whole words; enclose them in
+@samp{.*} to also match parts of words.
+
+For example, running
+
+@example
+@kbd{./testsuite -k 'autoupdate,.*FUNC.*'}
+@end example
+
+@noindent
+selects all tests tagged @samp{autoupdate} @emph{and} with tags
+containing @samp{FUNC} (as in @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_ALLOCA},
+etc.), while
+
+@example
+@kbd{./testsuite -k '!autoupdate' -k '.*FUNC.*'}
+@end example
+
+@noindent
+selects all tests not tagged @samp{autoupdate} @emph{or} with tags
+containing @samp{FUNC}.
+
+@item --errexit
+@itemx -e
+If any test fails, immediately abort testing. This implies
+@option{--debug}: post test group clean up, and top-level logging
+are inhibited. This option is meant for the full test
+suite, it is not really useful for generated debugging scripts.
+If the testsuite is run in parallel mode using @option{--jobs},
+then concurrently running tests will finish before exiting.
+
+@item --verbose
+@itemx -v
+Force more verbosity in the detailed output of what is being done. This
+is the default for debugging scripts.
+
+@item --color
+@itemx --color@r{[}=never@r{|}auto@r{|}always@r{]}
+Enable colored test results. Without an argument, or with @samp{always},
+test results will be colored. With @samp{never}, color mode is turned
+off. Otherwise, if either the macro @code{AT_COLOR_TESTS} is used by
+the testsuite author, or the argument @samp{auto} is given, then test
+results are colored if standard output is connected to a terminal.
+
+@item --debug
+@itemx -d
+Do not remove the files after a test group was performed---but they are
+still removed @emph{before}, therefore using this option is sane when
+running several test groups. Create debugging scripts. Do not
+overwrite the top-level
+log (in order to preserve a supposedly existing full log file). This is
+the default for debugging scripts, but it can also be useful to debug
+the testsuite itself.
+
+@item --recheck
+Add to the selection all test groups that failed or passed unexpectedly
+during the last non-debugging test run.
+
+@item --trace
+@itemx -x
+Trigger shell tracing of the test groups.
+@end table
+
+Besides these options accepted by every Autotest testsuite, the
+testsuite author might have added package-specific options
+via the @code{AT_ARG_OPTION} and @code{AT_ARG_OPTION_ARG} macros
+(@pxref{Writing Testsuites}); refer to @command{testsuite --help} and
+the package documentation for details.
+
+
+@node Making testsuite Scripts
+@section Making @command{testsuite} Scripts
+
+For putting Autotest into movement, you need some configuration and
+makefile machinery. We recommend, at least if your package uses deep or
+shallow hierarchies, that you use @file{tests/} as the name of the
+directory holding all your tests and their makefile. Here is a
+check list of things to do.
+
+@itemize @minus
+
+@item
+@cindex @file{package.m4}
+@atindex{PACKAGE_STRING}
+@atindex{PACKAGE_BUGREPORT}
+@atindex{PACKAGE_NAME}
+@atindex{PACKAGE_TARNAME}
+@atindex{PACKAGE_VERSION}
+@atindex{PACKAGE_URL}
+Make sure to create the file @file{package.m4}, which defines the
+identity of the package. It must define @code{AT_PACKAGE_STRING}, the
+full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
+address to which bug reports should be sent. For sake of completeness,
+we suggest that you also define @code{AT_PACKAGE_NAME},
+@code{AT_PACKAGE_TARNAME}, @code{AT_PACKAGE_VERSION}, and
+@code{AT_PACKAGE_URL}.
+@xref{Initializing configure}, for a description of these variables.
+Be sure to distribute @file{package.m4} and to put it into the source
+hierarchy: the test suite ought to be shipped! See below for an example
+@file{Makefile} excerpt.
+
+@item
+Invoke @code{AC_CONFIG_TESTDIR}.
+
+@defmac AC_CONFIG_TESTDIR (@var{directory}, @dvar{test-path, directory})
+@acindex{CONFIG_TESTDIR}
+An Autotest test suite is to be configured in @var{directory}. This
+macro causes @file{@var{directory}/atconfig} to be created by
+@command{config.status} and sets the default @code{AUTOTEST_PATH} to
+@var{test-path} (@pxref{testsuite Invocation}).
+@end defmac
+
+@item
+Still within @file{configure.ac}, as appropriate, ensure that some
+@code{AC_CONFIG_FILES} command includes substitution for
+@file{tests/atlocal}.
+
+@item
+The appropriate @file{Makefile} should be modified so the validation in
+your package is triggered by @samp{make check}. An example is provided
+below.
+@end itemize
+
+With Automake, here is a minimal example for inclusion in
+@file{tests/Makefile.am}, in order to link @samp{make check} with a
+validation suite.
+
+@example
+# The `:;' works around a Bash 3.2 bug when the output is not writable.
+$(srcdir)/package.m4: $(top_srcdir)/configure.ac
+ :;@{ \
+ echo '# Signature of the current package.' && \
+ echo 'm4_define([AT_PACKAGE_NAME],' && \
+ echo ' [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([AT_PACKAGE_TARNAME],' && \
+ echo ' [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([AT_PACKAGE_VERSION],' && \
+ echo ' [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([AT_PACKAGE_STRING],' && \
+ echo ' [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
+ echo ' [$(PACKAGE_BUGREPORT)])'; \
+ echo 'm4_define([AT_PACKAGE_URL],' && \
+ echo ' [$(PACKAGE_URL)])'; \
+ @} >'$(srcdir)/package.m4'
+
+EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) atlocal.in
+TESTSUITE = $(srcdir)/testsuite
+
+check-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
+
+installcheck-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
+ $(TESTSUITEFLAGS)
+
+clean-local:
+ test ! -f '$(TESTSUITE)' || \
+ $(SHELL) '$(TESTSUITE)' --clean
+
+AUTOM4TE = $(SHELL) $(srcdir)/build-aux/missing --run autom4te
+AUTOTEST = $(AUTOM4TE) --language=autotest
+$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
+ $(AUTOTEST) -I '$(srcdir)' -o $@@.tmp $@@.at
+ mv $@@.tmp $@@
+@end example
+
+Note that the built testsuite is distributed; this is necessary because
+users might not have Autoconf installed, and thus would not be able to
+rebuild it. Likewise, the use of @file{missing} provides the user with
+a nicer error message if they modify a source file to the testsuite, and
+accidentally trigger the rebuild rules.
+
+You might want to list explicitly the dependencies, i.e., the list of
+the files @file{testsuite.at} includes.
+
+If you don't use Automake, you should include the above example in
+@file{tests/@/Makefile.in}, along with additional lines inspired from
+the following:
+
+@example
+subdir = tests
+PACKAGE_NAME = @@PACKAGE_NAME@@
+PACKAGE_TARNAME = @@PACKAGE_TARNAME@@
+PACKAGE_VERSION = @@PACKAGE_VERSION@@
+PACKAGE_STRING = @@PACKAGE_STRING@@
+PACKAGE_BUGREPORT = @@PACKAGE_BUGREPORT@@
+PACKAGE_URL = @@PACKAGE_URL@@
+
+atconfig: $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ $(SHELL) ./config.status $(subdir)/$@@
+
+atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
+ cd $(top_builddir) && \
+ $(SHELL) ./config.status $(subdir)/$@@
+@end example
+
+@noindent
+and manage to have @code{$(EXTRA_DIST)} distributed. You will also want
+to distribute the file @file{build-aux/@/missing} from the Automake
+project; a copy of this file resides in the Autoconf source tree.
+
+With all this in place, and if you have not initialized @samp{TESTSUITEFLAGS}
+within your makefile, you can fine-tune test suite execution with this
+variable, for example:
+
+@example
+make check TESTSUITEFLAGS='-v -d -x 75 -k AC_PROG_CC CFLAGS=-g'
+@end example
+
+
+
+@c =============================== Frequent Autoconf Questions, with answers
+
+@node FAQ
+@chapter Frequent Autoconf Questions, with answers
+
+Several questions about Autoconf come up occasionally. Here some of them
+are addressed.
+
+@menu
+* Distributing:: Distributing @command{configure} scripts
+* Why GNU M4:: Why not use the standard M4?
+* Bootstrapping:: Autoconf and GNU M4 require each other?
+* Why Not Imake:: Why GNU uses @command{configure} instead of Imake
+* Defining Directories:: Passing @code{datadir} to program
+* Autom4te Cache:: What is it? Can I remove it?
+* Present But Cannot Be Compiled:: Compiler and Preprocessor Disagree
+* Expanded Before Required:: Expanded Before Required
+* Debugging:: Debugging @command{configure} scripts
+@end menu
+
+@node Distributing
+@section Distributing @command{configure} Scripts
+@cindex License
+
+@display
+What are the restrictions on distributing @command{configure}
+scripts that Autoconf generates? How does that affect my
+programs that use them?
+@end display
+
+There are no restrictions on how the configuration scripts that Autoconf
+produces may be distributed or used. In Autoconf version 1, they were
+covered by the GNU General Public License. We still encourage
+software authors to distribute their work under terms like those of the
+GPL, but doing so is not required to use Autoconf.
+
+Of the other files that might be used with @command{configure},
+@file{config.h.in} is under whatever copyright you use for your
+@file{configure.ac}. @file{config.sub} and @file{config.guess} have an
+exception to the GPL when they are used with an Autoconf-generated
+@command{configure} script, which permits you to distribute them under the
+same terms as the rest of your package. @file{install-sh} is from the X
+Consortium and is not copyrighted.
+
+@node Why GNU M4
+@section Why Require GNU M4?
+
+@display
+Why does Autoconf require GNU M4?
+@end display
+
+Many M4 implementations have hard-coded limitations on the size and
+number of macros that Autoconf exceeds. They also lack several
+builtin macros that it would be difficult to get along without in a
+sophisticated application like Autoconf, including:
+
+@example
+m4_builtin
+m4_indir
+m4_bpatsubst
+__file__
+__line__
+@end example
+
+Autoconf requires version 1.4.6 or later of GNU M4.
+
+Since only software maintainers need to use Autoconf, and since GNU
+M4 is simple to configure and install, it seems reasonable to require
+GNU M4 to be installed also. Many maintainers of GNU and
+other free software already have most of the GNU utilities
+installed, since they prefer them.
+
+@node Bootstrapping
+@section How Can I Bootstrap?
+@cindex Bootstrap
+
+@display
+If Autoconf requires GNU M4 and GNU M4 has an Autoconf
+@command{configure} script, how do I bootstrap? It seems like a chicken
+and egg problem!
+@end display
+
+This is a misunderstanding. Although GNU M4 does come with a
+@command{configure} script produced by Autoconf, Autoconf is not required
+in order to run the script and install GNU M4. Autoconf is only
+required if you want to change the M4 @command{configure} script, which few
+people have to do (mainly its maintainer).
+
+@node Why Not Imake
+@section Why Not Imake?
+@cindex Imake
+
+@display
+Why not use Imake instead of @command{configure} scripts?
+@end display
+
+Several people have written addressing this question, so
+adaptations of their explanations are included here.
+
+The following answer is based on one written by Richard Pixley:
+
+@quotation
+Autoconf generated scripts frequently work on machines that it has
+never been set up to handle before. That is, it does a good job of
+inferring a configuration for a new system. Imake cannot do this.
+
+Imake uses a common database of host specific data. For X11, this makes
+sense because the distribution is made as a collection of tools, by one
+central authority who has control over the database.
+
+GNU tools are not released this way. Each GNU tool has a
+maintainer; these maintainers are scattered across the world. Using a
+common database would be a maintenance nightmare. Autoconf may appear
+to be this kind of database, but in fact it is not. Instead of listing
+host dependencies, it lists program requirements.
+
+If you view the GNU suite as a collection of native tools, then the
+problems are similar. But the GNU development tools can be
+configured as cross tools in almost any host+target permutation. All of
+these configurations can be installed concurrently. They can even be
+configured to share host independent files across hosts. Imake doesn't
+address these issues.
+
+Imake templates are a form of standardization. The GNU coding
+standards address the same issues without necessarily imposing the same
+restrictions.
+@end quotation
+
+
+Here is some further explanation, written by Per Bothner:
+
+@quotation
+One of the advantages of Imake is that it is easy to generate large
+makefiles using the @samp{#include} and macro mechanisms of @command{cpp}.
+However, @code{cpp} is not programmable: it has limited conditional
+facilities, and no looping. And @code{cpp} cannot inspect its
+environment.
+
+All of these problems are solved by using @code{sh} instead of
+@code{cpp}. The shell is fully programmable, has macro substitution,
+can execute (or source) other shell scripts, and can inspect its
+environment.
+@end quotation
+
+
+Paul Eggert elaborates more:
+
+@quotation
+With Autoconf, installers need not assume that Imake itself is already
+installed and working well. This may not seem like much of an advantage
+to people who are accustomed to Imake. But on many hosts Imake is not
+installed or the default installation is not working well, and requiring
+Imake to install a package hinders the acceptance of that package on
+those hosts. For example, the Imake template and configuration files
+might not be installed properly on a host, or the Imake build procedure
+might wrongly assume that all source files are in one big directory
+tree, or the Imake configuration might assume one compiler whereas the
+package or the installer needs to use another, or there might be a
+version mismatch between the Imake expected by the package and the Imake
+supported by the host. These problems are much rarer with Autoconf,
+where each package comes with its own independent configuration
+processor.
+
+Also, Imake often suffers from unexpected interactions between
+@command{make} and the installer's C preprocessor. The fundamental problem
+here is that the C preprocessor was designed to preprocess C programs,
+not makefiles. This is much less of a problem with Autoconf,
+which uses the general-purpose preprocessor M4, and where the
+package's author (rather than the installer) does the preprocessing in a
+standard way.
+@end quotation
+
+
+Finally, Mark Eichin notes:
+
+@quotation
+Imake isn't all that extensible, either. In order to add new features to
+Imake, you need to provide your own project template, and duplicate most
+of the features of the existing one. This means that for a sophisticated
+project, using the vendor-provided Imake templates fails to provide any
+leverage---since they don't cover anything that your own project needs
+(unless it is an X11 program).
+
+On the other side, though:
+
+The one advantage that Imake has over @command{configure}:
+@file{Imakefile} files tend to be much shorter (likewise, less redundant)
+than @file{Makefile.in} files. There is a fix to this, however---at least
+for the Kerberos V5 tree, we've modified things to call in common
+@file{post.in} and @file{pre.in} makefile fragments for the
+entire tree. This means that a lot of common things don't have to be
+duplicated, even though they normally are in @command{configure} setups.
+@end quotation
+
+
+@node Defining Directories
+@section How Do I @code{#define} Installation Directories?
+
+@display
+My program needs library files, installed in @code{datadir} and
+similar. If I use
+
+@example
+AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
+ [Define to the read-only architecture-independent
+ data directory.])
+@end example
+
+@noindent
+I get
+
+@example
+#define DATADIR "$@{prefix@}/share"
+@end example
+@end display
+
+As already explained, this behavior is on purpose, mandated by the
+GNU Coding Standards, see @ref{Installation Directory
+Variables}. There are several means to achieve a similar goal:
+
+@itemize @minus
+@item
+Do not use @code{AC_DEFINE} but use your makefile to pass the
+actual value of @code{datadir} via compilation flags.
+@xref{Installation Directory Variables}, for the details.
+
+@item
+This solution can be simplified when compiling a program: you may either
+extend the @code{CPPFLAGS}:
+
+@example
+CPPFLAGS = -DDATADIR='"$(datadir)"' @@CPPFLAGS@@
+@end example
+
+@noindent
+If you are using Automake, you should use @code{AM_CPPFLAGS} instead:
+
+@example
+AM_CPPFLAGS = -DDATADIR='"$(datadir)"'
+@end example
+
+@noindent
+Alternatively, create a dedicated header file:
+
+@example
+DISTCLEANFILES = myprog-paths.h
+myprog-paths.h: Makefile
+ echo '#define DATADIR "$(datadir)"' >$@@
+@end example
+
+@noindent
+The gnulib module @samp{configmake} provides such a header with all the
+standard directory variables defined, @pxref{configmake,,, gnulib, GNU
+Gnulib}.
+
+@item
+Use @code{AC_DEFINE} but have @command{configure} compute the literal
+value of @code{datadir} and others. Many people have wrapped macros to
+automate this task; for an example, see the macro @code{AC_DEFINE_DIR} from
+the @uref{http://@/www.gnu.org/@/software/@/autoconf-archive/, Autoconf Macro
+Archive}.
+
+This solution does not conform to the GNU Coding Standards.
+
+@item
+Note that all the previous solutions hard wire the absolute name of
+these directories in the executables, which is not a good property. You
+may try to compute the names relative to @code{prefix}, and try to
+find @code{prefix} at runtime, this way your package is relocatable.
+@end itemize
+
+
+@node Autom4te Cache
+@section What is @file{autom4te.cache}?
+
+@display
+What is this directory @file{autom4te.cache}? Can I safely remove it?
+@end display
+
+In the GNU Build System, @file{configure.ac} plays a central
+role and is read by many tools: @command{autoconf} to create
+@file{configure}, @command{autoheader} to create @file{config.h.in},
+@command{automake} to create @file{Makefile.in}, @command{autoscan} to
+check the completeness of @file{configure.ac}, @command{autoreconf} to
+check the GNU Build System components that are used. To
+``read @file{configure.ac}'' actually means to compile it with M4,
+which can be a long process for complex @file{configure.ac}.
+
+This is why all these tools, instead of running directly M4, invoke
+@command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
+a specific demand, stores additional information in
+@file{autom4te.cache} for future runs. For instance, if you run
+@command{autoconf}, behind the scenes, @command{autom4te} also
+stores information for the other tools, so that when you invoke
+@command{autoheader} or @command{automake} etc., reprocessing
+@file{configure.ac} is not needed. The speed up is frequently 30%,
+and is increasing with the size of @file{configure.ac}.
+
+But it is and remains being simply a cache: you can safely remove it.
+
+@sp 1
+
+@display
+Can I permanently get rid of it?
+@end display
+
+The creation of this cache can be disabled from
+@file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
+details. You should be aware that disabling the cache slows down the
+Autoconf test suite by 40%. The more GNU Build System
+components are used, the more the cache is useful; for instance
+running @samp{autoreconf -f} on the Core Utilities is twice slower without
+the cache @emph{although @option{--force} implies that the cache is
+not fully exploited}, and eight times slower than without
+@option{--force}.
+
+
+@node Present But Cannot Be Compiled
+@section Header Present But Cannot Be Compiled
+
+The most important guideline to bear in mind when checking for
+features is to mimic as much as possible the intended use.
+Unfortunately, old versions of @code{AC_CHECK_HEADER} and
+@code{AC_CHECK_HEADERS} failed to follow this idea, and called
+the preprocessor, instead of the compiler, to check for headers. As a
+result, incompatibilities between headers went unnoticed during
+configuration, and maintainers finally had to deal with this issue
+elsewhere.
+
+The transition began with Autoconf 2.56. As of Autoconf 2.64 both
+checks are performed, and @command{configure} complains loudly if the
+compiler and the preprocessor do not agree. However, only the compiler
+result is considered.
+
+Consider the following example:
+
+@smallexample
+$ @kbd{cat number.h}
+typedef int number;
+$ @kbd{cat pi.h}
+const number pi = 3;
+$ @kbd{cat configure.ac}
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AC_CHECK_HEADERS([pi.h])
+$ @kbd{autoconf -Wall}
+$ @kbd{./configure}
+checking for gcc... gcc
+checking for C compiler default output file name... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ISO C89... none needed
+checking how to run the C preprocessor... gcc -E
+checking for grep that handles long lines and -e... grep
+checking for egrep... grep -E
+checking for ANSI C header files... yes
+checking for sys/types.h... yes
+checking for sys/stat.h... yes
+checking for stdlib.h... yes
+checking for string.h... yes
+checking for memory.h... yes
+checking for strings.h... yes
+checking for inttypes.h... yes
+checking for stdint.h... yes
+checking for unistd.h... yes
+checking pi.h usability... no
+checking pi.h presence... yes
+configure: WARNING: pi.h: present but cannot be compiled
+configure: WARNING: pi.h: check for missing prerequisite headers?
+configure: WARNING: pi.h: see the Autoconf documentation
+configure: WARNING: pi.h: section "Present But Cannot Be Compiled"
+configure: WARNING: pi.h: proceeding with the compiler's result
+configure: WARNING: ## -------------------------------------- ##
+configure: WARNING: ## Report this to bug-example@@example.org ##
+configure: WARNING: ## -------------------------------------- ##
+checking for pi.h... yes
+@end smallexample
+
+@noindent
+The proper way the handle this case is using the fourth argument
+(@pxref{Generic Headers}):
+
+@example
+$ @kbd{cat configure.ac}
+AC_INIT([Example], [1.0], [bug-example@@example.org])
+AC_CHECK_HEADERS([number.h pi.h], [], [],
+[[#ifdef HAVE_NUMBER_H
+# include <number.h>
+#endif
+]])
+$ @kbd{autoconf -Wall}
+$ @kbd{./configure}
+checking for gcc... gcc
+checking for C compiler default output... a.out
+checking whether the C compiler works... yes
+checking whether we are cross compiling... no
+checking for suffix of executables...
+checking for suffix of object files... o
+checking whether we are using the GNU C compiler... yes
+checking whether gcc accepts -g... yes
+checking for gcc option to accept ANSI C... none needed
+checking for number.h... yes
+checking for pi.h... yes
+@end example
+
+See @ref{Particular Headers}, for a list of headers with their
+prerequisites.
+
+@node Expanded Before Required
+@section Expanded Before Required
+
+@cindex expanded before required
+Older versions of Autoconf silently built files with incorrect ordering
+between dependent macros if an outer macro first expanded, then later
+indirectly required, an inner macro. Starting with Autoconf 2.64, this
+situation no longer generates out-of-order code, but results in
+duplicate output and a syntax warning:
+
+@example
+$ @kbd{cat configure.ac}
+@result{}AC_DEFUN([TESTA], [[echo in A
+@result{}if test -n "$SEEN_A" ; then echo duplicate ; fi
+@result{}SEEN_A=:]])
+@result{}AC_DEFUN([TESTB], [AC_REQUIRE([TESTA])[echo in B
+@result{}if test -z "$SEEN_A" ; then echo bug ; fi]])
+@result{}AC_DEFUN([TESTC], [AC_REQUIRE([TESTB])[echo in C]])
+@result{}AC_DEFUN([OUTER], [[echo in OUTER]
+@result{}TESTA
+@result{}TESTC])
+@result{}AC_INIT
+@result{}OUTER
+@result{}AC_OUTPUT
+$ @kbd{autoconf}
+@result{}configure.ac:11: warning: AC_REQUIRE:
+@result{} `TESTA' was expanded before it was required
+@result{}configure.ac:4: TESTB is expanded from...
+@result{}configure.ac:6: TESTC is expanded from...
+@result{}configure.ac:7: OUTER is expanded from...
+@result{}configure.ac:11: the top level
+@end example
+
+@noindent
+To avoid this warning, decide what purpose the macro in question serves.
+If it only needs to be expanded once (for example, if it provides
+initialization text used by later macros), then the simplest fix is to
+change the macro to be declared with @code{AC_DEFUN_ONCE}
+(@pxref{One-Shot Macros}), although this only works in Autoconf 2.64 and
+newer. A more portable fix is to change all
+instances of direct calls to instead go through @code{AC_REQUIRE}
+(@pxref{Prerequisite Macros}). If, instead, the macro is parameterized
+by arguments or by the current definition of other macros in the m4
+environment, then the macro should always be directly expanded instead
+of required.
+
+For another case study, consider this example trimmed down from an
+actual package. Originally, the package contained shell code and
+multiple macro invocations at the top level of @file{configure.ac}:
+
+@example
+AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
+foobar=
+AC_PROG_CC
+FOO
+@end example
+
+@noindent
+but that was getting complex, so the author wanted to offload some of
+the text into a new macro in another file included via
+@file{aclocal.m4}. The na@"ive approach merely wraps the text in a new
+macro:
+
+@example
+AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
+AC_DEFUN([BAR], [
+foobar=
+AC_PROG_CC
+FOO
+])
+BAR
+@end example
+
+@noindent
+With older versions of Autoconf, the setting of @samp{foobar=} occurs
+before the single compiler check, as the author intended. But with
+Autoconf 2.64, this issues the ``expanded before it was required''
+warning for @code{AC_PROG_CC}, and outputs two copies of the compiler
+check, one before @samp{foobar=}, and one after. To understand why this
+is happening, remember that the use of @code{AC_COMPILE_IFELSE} includes
+a call to @code{AC_REQUIRE([AC_PROG_CC])} under the hood. According to
+the documented semantics of @code{AC_REQUIRE}, this means that
+@code{AC_PROG_CC} @emph{must} occur before the body of the outermost
+@code{AC_DEFUN}, which in this case is @code{BAR}, thus preceding the
+use of @samp{foobar=}. The older versions of Autoconf were broken with
+regards to the rules of @code{AC_REQUIRE}, which explains why the code
+changed from one over to two copies of @code{AC_PROG_CC} when upgrading
+autoconf. In other words, the author was unknowingly relying on a bug
+exploit to get the desired results, and that exploit broke once the bug
+was fixed.
+
+So, what recourse does the author have, to restore their intended
+semantics of setting @samp{foobar=} prior to a single compiler check,
+regardless of whether Autoconf 2.63 or 2.64 is used? One idea is to
+remember that only @code{AC_DEFUN} is impacted by @code{AC_REQUIRE};
+there is always the possibility of using the lower-level
+@code{m4_define}:
+
+@example
+AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
+m4_define([BAR], [
+foobar=
+AC_PROG_CC
+FOO
+])
+BAR
+@end example
+
+@noindent
+This works great if everything is in the same file. However, it does
+not help in the case where the author wants to have @command{aclocal}
+find the definition of @code{BAR} from its own file, since
+@command{aclocal} requires the use of @code{AC_DEFUN}. In this case, a
+better fix is to recognize that if @code{BAR} also uses
+@code{AC_REQUIRE}, then there will no longer be direct expansion prior
+to a subsequent require. Then, by creating yet another helper macro,
+the author can once again guarantee a single invocation of
+@code{AC_PROG_CC}, which will still occur after @code{foobar=}. The
+author can also use @code{AC_BEFORE} to make sure no other macro
+appearing before @code{BAR} has triggered an unwanted expansion of
+@code{AC_PROG_CC}.
+
+@example
+AC_DEFUN([FOO], [AC_COMPILE_IFELSE([@dots{}])])
+AC_DEFUN([BEFORE_CC], [
+foobar=
+])
+AC_DEFUN([BAR], [
+AC_BEFORE([$0], [AC_PROG_CC])dnl
+AC_REQUIRE([BEFORE_CC])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+FOO
+])
+BAR
+@end example
+
+
+@node Debugging
+@section Debugging @command{configure} scripts
+
+While in general, @command{configure} scripts generated by Autoconf
+strive to be fairly portable to various systems, compilers, shells, and
+other tools, it may still be necessary to debug a failing test, broken
+script or makefile, or fix or override an incomplete, faulty, or erroneous
+test, especially during macro development. Failures can occur at all levels,
+in M4 syntax or semantics, shell script issues, or due to bugs in the
+test or the tools invoked by @command{configure}. Together with the
+rather arcane error message that @command{m4} and @command{make} may
+produce when their input contains syntax errors, this can make debugging
+rather painful.
+
+Nevertheless, here is a list of hints and strategies that may help:
+
+@itemize
+@item
+When @command{autoconf} fails, common causes for error include:
+
+@itemize
+@item
+mismatched or unbalanced parentheses or braces (@pxref{Balancing
+Parentheses}),
+
+@item under- or overquoted macro arguments (@pxref{Autoconf
+Language}, @pxref{Quoting and Parameters}, @pxref{Quotation and Nested
+Macros}),
+
+@item spaces between macro name and opening parenthesis (@pxref{Autoconf
+Language}).
+@end itemize
+
+Typically, it helps to go back to the last working version of the input
+and compare the differences for each of these errors. Another
+possibility is to sprinkle pairs of @code{m4_traceon} and
+@code{m4_traceoff} judiciously in the code, either without a parameter
+or listing some macro names and watch @command{m4} expand its input
+verbosely (@pxref{Debugging via autom4te}).
+
+@item
+Sometimes @command{autoconf} succeeds but the generated
+@command{configure} script has invalid shell syntax. You can detect this
+case by running @samp{bash -n configure} or @samp{sh -n configure}.
+If this command fails, the same tips apply, as if @command{autoconf} had
+failed.
+
+@item
+Debugging @command{configure} script execution may be done by sprinkling
+pairs of @code{set -x} and @code{set +x} into the shell script before
+and after the region that contains a bug. Running the whole script with
+@samp{@var{shell} -vx ./configure 2>&1 | tee @var{log-file}} with a decent
+@var{shell} may work, but produces lots of output. Here, it can help to
+search for markers like @samp{checking for} a particular test in the
+@var{log-file}.
+
+@item
+Alternatively, you might use a shell with debugging capabilities like
+@uref{http://bashdb.sourceforge.net/, bashdb}.
+
+@item
+When @command{configure} tests produce invalid results for your system,
+it may be necessary to override them:
+
+@itemize
+@item
+For programs, tools or libraries variables, preprocessor, compiler, or
+linker flags, it is often sufficient to override them at @command{make}
+run time with some care (@pxref{Macros and Submakes}). Since this
+normally won't cause @command{configure} to be run again with these
+changed settings, it may fail if the changed variable would have caused
+different test results from @command{configure}, so this may work only
+for simple differences.
+
+@item
+Most tests which produce their result in a substituted variable allow to
+override the test by setting the variable on the @command{configure}
+command line (@pxref{Compilers and Options}, @pxref{Defining Variables},
+@pxref{Particular Systems}).
+
+@item
+Many tests store their result in a cache variable (@pxref{Caching
+Results}). This lets you override them either on the
+@command{configure} command line as above, or through a primed cache or
+site file (@pxref{Cache Files}, @pxref{Site Defaults}). The name of a
+cache variable is documented with a test macro or may be inferred from
+@ref{Cache Variable Names}; the precise semantics of undocumented
+variables are often internal details, subject to change.
+@end itemize
+
+@item
+Alternatively, @command{configure} may produce invalid results because
+of uncaught programming errors, in your package or in an upstream
+library package. For example, when @code{AC_CHECK_LIB} fails to find a
+library with a specified function, always check @file{config.log}. This
+will reveal the exact error that produced the failing result: the
+library linked by @code{AC_CHECK_LIB} probably has a fatal bug.
+@end itemize
+
+Conversely, as macro author, you can make it easier for users of your
+macro:
+
+@itemize
+@item
+by minimizing dependencies between tests and between test results as far
+as possible,
+
+@item
+by using @command{make} variables to factorize and allow
+override of settings at @command{make} run time,
+
+@item
+by honoring the GNU Coding Standards and not overriding flags
+reserved for the user except temporarily during @command{configure}
+tests,
+
+@item
+by not requiring users of your macro to use the cache variables.
+Instead, expose the result of the test via @var{run-if-true} and
+@var{run-if-false} parameters. If the result is not a boolean,
+then provide it through documented shell variables.
+@end itemize
+
+
+@c ===================================================== History of Autoconf.
+
+@node History
+@chapter History of Autoconf
+@cindex History of autoconf
+
+@emph{This chapter was written by the original author, David MacKenzie.}
+
+You may be wondering, Why was Autoconf originally written? How did it
+get into its present form? (Why does it look like gorilla spit?) If
+you're not wondering, then this chapter contains no information useful
+to you, and you might as well skip it. If you @emph{are} wondering,
+then let there be light@enddots{}
+
+@menu
+* Genesis:: Prehistory and naming of @command{configure}
+* Exodus:: The plagues of M4 and Perl
+* Leviticus:: The priestly code of portability arrives
+* Numbers:: Growth and contributors
+* Deuteronomy:: Approaching the promises of easy configuration
+@end menu
+
+@node Genesis
+@section Genesis
+
+In June 1991 I was maintaining many of the GNU utilities for the
+Free Software Foundation. As they were ported to more platforms and
+more programs were added, the number of @option{-D} options that users
+had to select in the makefile (around 20) became burdensome.
+Especially for me---I had to test each new release on a bunch of
+different systems. So I wrote a little shell script to guess some of
+the correct settings for the fileutils package, and released it as part
+of fileutils 2.0. That @command{configure} script worked well enough that
+the next month I adapted it (by hand) to create similar @command{configure}
+scripts for several other GNU utilities packages. Brian Berliner
+also adapted one of my scripts for his CVS revision control system.
+
+Later that summer, I learned that Richard Stallman and Richard Pixley
+were developing similar scripts to use in the GNU compiler tools;
+so I adapted my @command{configure} scripts to support their evolving
+interface: using the file name @file{Makefile.in} as the templates;
+adding @samp{+srcdir}, the first option (of many); and creating
+@file{config.status} files.
+
+@node Exodus
+@section Exodus
+
+As I got feedback from users, I incorporated many improvements, using
+Emacs to search and replace, cut and paste, similar changes in each of
+the scripts. As I adapted more GNU utilities packages to use
+@command{configure} scripts, updating them all by hand became impractical.
+Rich Murphey, the maintainer of the GNU graphics utilities, sent me
+mail saying that the @command{configure} scripts were great, and asking if
+I had a tool for generating them that I could send him. No, I thought,
+but I should! So I started to work out how to generate them. And the
+journey from the slavery of hand-written @command{configure} scripts to the
+abundance and ease of Autoconf began.
+
+Cygnus @command{configure}, which was being developed at around that time,
+is table driven; it is meant to deal mainly with a discrete number of
+system types with a small number of mainly unguessable features (such as
+details of the object file format). The automatic configuration system
+that Brian Fox had developed for Bash takes a similar approach. For
+general use, it seems to me a hopeless cause to try to maintain an
+up-to-date database of which features each variant of each operating
+system has. It's easier and more reliable to check for most features on
+the fly---especially on hybrid systems that people have hacked on
+locally or that have patches from vendors installed.
+
+I considered using an architecture similar to that of Cygnus
+@command{configure}, where there is a single @command{configure} script that
+reads pieces of @file{configure.in} when run. But I didn't want to have
+to distribute all of the feature tests with every package, so I settled
+on having a different @command{configure} made from each
+@file{configure.in} by a preprocessor. That approach also offered more
+control and flexibility.
+
+I looked briefly into using the Metaconfig package, by Larry Wall,
+Harlan Stenn, and Raphael Manfredi, but I decided not to for several
+reasons. The @command{Configure} scripts it produces are interactive,
+which I find quite inconvenient; I didn't like the ways it checked for
+some features (such as library functions); I didn't know that it was
+still being maintained, and the @command{Configure} scripts I had
+seen didn't work on many modern systems (such as System V R4 and NeXT);
+it wasn't flexible in what it could do in response to a feature's
+presence or absence; I found it confusing to learn; and it was too big
+and complex for my needs (I didn't realize then how much Autoconf would
+eventually have to grow).
+
+I considered using Perl to generate my style of @command{configure}
+scripts, but decided that M4 was better suited to the job of simple
+textual substitutions: it gets in the way less, because output is
+implicit. Plus, everyone already has it. (Initially I didn't rely on
+the GNU extensions to M4.) Also, some of my friends at the
+University of Maryland had recently been putting M4 front ends on
+several programs, including @code{tvtwm}, and I was interested in trying
+out a new language.
+
+@node Leviticus
+@section Leviticus
+
+Since my @command{configure} scripts determine the system's capabilities
+automatically, with no interactive user intervention, I decided to call
+the program that generates them Autoconfig. But with a version number
+tacked on, that name would be too long for old Unix file systems,
+so I shortened it to Autoconf.
+
+In the fall of 1991 I called together a group of fellow questers after
+the Holy Grail of portability (er, that is, alpha testers) to give me
+feedback as I encapsulated pieces of my handwritten scripts in M4 macros
+and continued to add features and improve the techniques used in the
+checks. Prominent among the testers were Fran@,{c}ois Pinard, who came up
+with the idea of making an Autoconf shell script to run M4
+and check for unresolved macro calls; Richard Pixley, who suggested
+running the compiler instead of searching the file system to find
+include files and symbols, for more accurate results; Karl Berry, who
+got Autoconf to configure @TeX{} and added the macro index to the
+documentation; and Ian Lance Taylor, who added support for creating a C
+header file as an alternative to putting @option{-D} options in a
+makefile, so he could use Autoconf for his UUCP package.
+The alpha testers cheerfully adjusted their files again and again as the
+names and calling conventions of the Autoconf macros changed from
+release to release. They all contributed many specific checks, great
+ideas, and bug fixes.
+
+@node Numbers
+@section Numbers
+
+In July 1992, after months of alpha testing, I released Autoconf 1.0,
+and converted many GNU packages to use it. I was surprised by how
+positive the reaction to it was. More people started using it than I
+could keep track of, including people working on software that wasn't
+part of the GNU Project (such as TCL, FSP, and Kerberos V5).
+Autoconf continued to improve rapidly, as many people using the
+@command{configure} scripts reported problems they encountered.
+
+Autoconf turned out to be a good torture test for M4 implementations.
+Unix M4 started to dump core because of the length of the
+macros that Autoconf defined, and several bugs showed up in GNU
+M4 as well. Eventually, we realized that we needed to use some
+features that only GNU M4 has. 4.3BSD M4, in
+particular, has an impoverished set of builtin macros; the System V
+version is better, but still doesn't provide everything we need.
+
+More development occurred as people put Autoconf under more stresses
+(and to uses I hadn't anticipated). Karl Berry added checks for X11.
+david zuhn contributed C++ support. Fran@,{c}ois Pinard made it diagnose
+invalid arguments. Jim Blandy bravely coerced it into configuring
+GNU Emacs, laying the groundwork for several later improvements.
+Roland McGrath got it to configure the GNU C Library, wrote the
+@command{autoheader} script to automate the creation of C header file
+templates, and added a @option{--verbose} option to @command{configure}.
+Noah Friedman added the @option{--autoconf-dir} option and
+@code{AC_MACRODIR} environment variable. (He also coined the term
+@dfn{autoconfiscate} to mean ``adapt a software package to use
+Autoconf''.) Roland and Noah improved the quoting protection in
+@code{AC_DEFINE} and fixed many bugs, especially when I got sick of
+dealing with portability problems from February through June, 1993.
+
+@node Deuteronomy
+@section Deuteronomy
+
+A long wish list for major features had accumulated, and the effect of
+several years of patching by various people had left some residual
+cruft. In April 1994, while working for Cygnus Support, I began a major
+revision of Autoconf. I added most of the features of the Cygnus
+@command{configure} that Autoconf had lacked, largely by adapting the
+relevant parts of Cygnus @command{configure} with the help of david zuhn
+and Ken Raeburn. These features include support for using
+@file{config.sub}, @file{config.guess}, @option{--host}, and
+@option{--target}; making links to files; and running @command{configure}
+scripts in subdirectories. Adding these features enabled Ken to convert
+GNU @code{as}, and Rob Savoye to convert DejaGNU, to using
+Autoconf.
+
+I added more features in response to other peoples' requests. Many
+people had asked for @command{configure} scripts to share the results of
+the checks between runs, because (particularly when configuring a large
+source tree, like Cygnus does) they were frustratingly slow. Mike
+Haertel suggested adding site-specific initialization scripts. People
+distributing software that had to unpack on MS-DOS asked for a way to
+override the @file{.in} extension on the file names, which produced file
+names like @file{config.h.in} containing two dots. Jim Avera did an
+extensive examination of the problems with quoting in @code{AC_DEFINE}
+and @code{AC_SUBST}; his insights led to significant improvements.
+Richard Stallman asked that compiler output be sent to @file{config.log}
+instead of @file{/dev/null}, to help people debug the Emacs
+@command{configure} script.
+
+I made some other changes because of my dissatisfaction with the quality
+of the program. I made the messages showing results of the checks less
+ambiguous, always printing a result. I regularized the names of the
+macros and cleaned up coding style inconsistencies. I added some
+auxiliary utilities that I had developed to help convert source code
+packages to use Autoconf. With the help of Fran@,{c}ois Pinard, I made
+the macros not interrupt each others' messages. (That feature revealed
+some performance bottlenecks in GNU M4, which he hastily
+corrected!) I reorganized the documentation around problems people want
+to solve. And I began a test suite, because experience had shown that
+Autoconf has a pronounced tendency to regress when we change it.
+
+Again, several alpha testers gave invaluable feedback, especially
+Fran@,{c}ois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
+and Mark Eichin.
+
+Finally, version 2.0 was ready. And there was much rejoicing. (And I
+have free time again. I think. Yeah, right.)
+
+
+@c ========================================================== Appendices
+
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@include fdl.texi
+
+@node Indices
+@appendix Indices
+
+@menu
+* Environment Variable Index:: Index of environment variables used
+* Output Variable Index:: Index of variables set in output files
+* Preprocessor Symbol Index:: Index of C preprocessor symbols defined
+* Cache Variable Index:: Index of documented cache variables
+* Autoconf Macro Index:: Index of Autoconf macros
+* M4 Macro Index:: Index of M4, M4sugar, and M4sh macros
+* Autotest Macro Index:: Index of Autotest macros
+* Program & Function Index:: Index of those with portability problems
+* Concept Index:: General index
+@end menu
+
+@node Environment Variable Index
+@appendixsec Environment Variable Index
+
+This is an alphabetical list of the environment variables that might
+influence Autoconf checks.
+
+@printindex ev
+
+@node Output Variable Index
+@appendixsec Output Variable Index
+
+This is an alphabetical list of the variables that Autoconf can
+substitute into files that it creates, typically one or more
+makefiles. @xref{Setting Output Variables}, for more information
+on how this is done.
+
+@printindex ov
+
+@node Preprocessor Symbol Index
+@appendixsec Preprocessor Symbol Index
+
+This is an alphabetical list of the C preprocessor symbols that the
+Autoconf macros define. To work with Autoconf, C source code needs to
+use these names in @code{#if} or @code{#ifdef} directives.
+
+@printindex cv
+
+@node Cache Variable Index
+@appendixsec Cache Variable Index
+
+This is an alphabetical list of documented cache variables used
+by macros defined in Autoconf. Autoconf macros may use additional cache
+variables internally.
+@ifset shortindexflag
+To make the list easier to use, the variables are listed without their
+preceding @samp{ac_cv_}.
+@end ifset
+
+@printindex CA
+
+@node Autoconf Macro Index
+@appendixsec Autoconf Macro Index
+
+This is an alphabetical list of the Autoconf macros.
+@ifset shortindexflag
+To make the list easier to use, the macros are listed without their
+preceding @samp{AC_}.
+@end ifset
+
+@printindex AC
+
+@node M4 Macro Index
+@appendixsec M4 Macro Index
+
+This is an alphabetical list of the M4, M4sugar, and M4sh macros.
+@ifset shortindexflag
+To make the list easier to use, the macros are listed without their
+preceding @samp{m4_} or @samp{AS_}. The prefix is @samp{m4_} for
+all-lowercase macro names and @samp{AS_} for all-uppercase macro
+names.
+@end ifset
+
+@printindex MS
+
+@node Autotest Macro Index
+@appendixsec Autotest Macro Index
+
+This is an alphabetical list of the Autotest macros.
+@ifset shortindexflag
+To make the list easier to use, the macros are listed without their
+preceding @samp{AT_}.
+@end ifset
+
+@printindex AT
+
+@node Program & Function Index
+@appendixsec Program and Function Index
+
+This is an alphabetical list of the programs and functions whose
+portability is discussed in this document.
+
+@printindex pr
+
+@node Concept Index
+@appendixsec Concept Index
+
+This is an alphabetical list of the files, tools, and concepts
+introduced in this document.
+
+@printindex cp
+
+@bye
+
+@c LocalWords: texinfo setfilename autoconf texi settitle setchapternewpage
+@c LocalWords: setcontentsaftertitlepage finalout ARG ovar varname dvar acx
+@c LocalWords: makeinfo dvi defcodeindex ev ov CPP cv Autotest mv defindex fn
+@c LocalWords: shortindexflag iftex ifset acindex ACindex ifclear ahindex fu
+@c LocalWords: asindex MSindex atindex ATindex auindex hdrindex prindex FIXME
+@c LocalWords: msindex alloca fnindex Aaarg indices FSF's dircategory ifnames
+@c LocalWords: direntry autoscan autoreconf autoheader autoupdate config FDs
+@c LocalWords: testsuite titlepage Elliston Demaille vskip filll ifnottex hmm
+@c LocalWords: insertcopying Autoconf's detailmenu Automake Libtool Posix ois
+@c LocalWords: Systemology Checkpointing Changequote INTERCAL changequote dfn
+@c LocalWords: Quadrigraphs builtins Shellology acconfig Bugward LIBOBJ Imake
+@c LocalWords: LIBOBJS IFELSE cindex flushright Pinard Metaconfig uref Simons
+@c LocalWords: distclean uninstall noindent versioning Tromey dir
+@c LocalWords: SAMS samp aclocal acsite underquoted emph itemx prepend SUBST
+@c LocalWords: evindex automake Gettext autopoint gettext symlink libtoolize
+@c LocalWords: defmac INIT tarname ovindex cvindex BUGREPORT PREREQ asis PROG
+@c LocalWords: SRCDIR srcdir globbing afterwards cmds foos fooo foooo init cd
+@c LocalWords: builddir timestamp src Imakefile chmod defvar CFLAGS CPPFLAGS
+@c LocalWords: CXXFLAGS DEFS DHAVE defvarx FCFLAGS FFLAGS LDFLAGS bindir GCC
+@c LocalWords: datadir datarootdir docdir dvidir htmldir libdir ifnothtml kbd
+@c LocalWords: includedir infodir libexecdir localedir localstatedir mandir
+@c LocalWords: oldincludedir pdfdir PDF psdir PostScript sbindir sysconfdir
+@c LocalWords: sharedstatedir DDATADIR sed tmp pkgdatadir VPATH conf unistd
+@c LocalWords: undef endif builtin FUNCS ifndef STACKSEG getb GETB YMP fubar
+@c LocalWords: PRE dest SUBDIRS subdirs fi struct STDC stdlib stddef INTTYPES
+@c LocalWords: inttypes STDINT stdint AWK AIX Solaris NeXT env EGREP FGREP yy
+@c LocalWords: LEXLIB YYTEXT lfl nonportable Automake's LN RANLIB byacc INETD
+@c LocalWords: inetd prog PROGS progs ranlib lmp lXt lX nsl gethostbyname UX
+@c LocalWords: NextStep isinf isnan glibc IRIX sunmath lm lsunmath pre sizeof
+@c LocalWords: ld inline malloc putenv setenv FreeBSD realloc SunOS MinGW
+@c LocalWords: snprintf vsnprintf sprintf vsprintf sscanf gcc strerror ifdef
+@c LocalWords: strnlen sysconf PAGESIZE unsetenv va fallback memcpy dst FUNC
+@c LocalWords: PowerPC GNUC libPW pragma Olibcalls CHOWN chown CLOSEDIR VFORK
+@c LocalWords: closedir FNMATCH fnmatch vfork FSEEKO LARGEFILE fseeko SVR sc
+@c LocalWords: largefile GETGROUPS getgroups GETLOADAVG DGUX UMAX NLIST KMEM
+@c LocalWords: SETGID getloadavg nlist GETMNTENT irix
+@c LocalWords: getmntent UnixWare GETPGRP getpgid getpgrp Posix's pid LSTAT
+@c LocalWords: lstat rpl MEMCMP memcmp OpenStep MBRTOWC mbrtowc MKTIME mktime
+@c LocalWords: localtime MMAP mmap OBSTACK obstack obstacks ARGTYPES timeval
+@c LocalWords: SETPGRP setpgrp defmacx Hurd SETVBUF setvbuf STRCOLL strcoll
+@c LocalWords: STRTOD strtod DECL STRFTIME strftime SCO UTIME utime VPRINTF
+@c LocalWords: DOPRNT vprintf doprnt sp unfixable LIBSOURCE LIBSOURCES Eggert
+@c LocalWords: linux netinet ia Tru XFree DIRENT NDIR dirent ndir multitable
+@c LocalWords: NAMLEN strlen namlen MKDEV SYSMACROS makedev RESOLV resolv DNS
+@c LocalWords: inet structs NAMESER arpa NETDB netdb UTekV UTS GCC's kB
+@c LocalWords: STDBOOL BOOL stdbool cplusplus bool Bool stdarg tm
+@c LocalWords: ctype strchr strrchr rindex bcopy memmove memchr WEXITSTATUS
+@c LocalWords: WIFEXITED TIOCGWINSZ GWINSZ termios preprocess preprocessable
+@c LocalWords: DECLS strdup calloc BLKSIZE blksize RDEV rdev TZNAME tzname pw
+@c LocalWords: passwd gecos pwd MBSTATE mbstate wchar RETSIGTYPE hup UID uid
+@c LocalWords: gid ptrdiff uintmax EXEEXT OBJEXT Ae conftest AXP str
+@c LocalWords: ALIGNOF WERROR Werror cpp HP's WorkShop egcs un fied stdc CXX
+@c LocalWords: varargs BIGENDIAN Endianness SPARC endianness grep'ed CONST FC
+@c LocalWords: const STRINGIZE stringizing PARAMS unprotoize protos KCC cxx
+@c LocalWords: xlC aCC CXXCPP FREEFORM xlf FLIBS FCLIBS ish SRCEXT XTRA LFS
+@c LocalWords: ISC lcposix MINIX Minix conditionalized inlines hw dD confdefs
+@c LocalWords: fputs stdout PREPROC ar UFS HFS QNX realtime fstype STATVFS se
+@c LocalWords: statvfs STATFS statfs func machfile hdr lelf raboof DEFUN GTK
+@c LocalWords: GTKMM Grmph ified ine defn baz EOF qar Ahhh changecom algol io
+@c LocalWords: changeword quadrigraphs quadrigraph dnl SGI atoi overquoting
+@c LocalWords: Aas Wcross sep args namespace undefine bpatsubst popdef dquote
+@c LocalWords: bregexp Overquote overquotation meisch maisch meische maische
+@c LocalWords: miscian DIRNAME dirname MKDIR CATFILE XMKMF TRAVOLTA celsius
+@c LocalWords: EMX emxos Emacsen Korn DYNIX subshell posix Ksh ksh Pdksh Zsh
+@c LocalWords: pdksh zsh Allbery Lipe Kubota UWS zorglub stderr eval esac lfn
+@c LocalWords: drivespec Posixy DJGPP doschk prettybird LPT pfew Zsh's yu yaa
+@c LocalWords: yM uM aM firebird IP subdir misparses ok Unpatched abc bc zA
+@c LocalWords: CDPATH DUALCASE LINENO prepass Subshells lineno NULLCMD cmp wc
+@c LocalWords: MAILPATH scanset arg NetBSD Almquist printf expr cp
+@c LocalWords: Oliva awk Aaaaarg cmd regex xfoo GNV OpenVMS VM
+@c LocalWords: sparc Proulx nbar nfoo maxdepth acdilrtu TWG mc
+@c LocalWords: mkdir exe uname OpenBSD Fileutils mktemp umask TMPDIR guid os
+@c LocalWords: fooXXXXXX Unicos utimes hpux hppa unescaped
+@c LocalWords: pmake DOS's gmake ifoo DESTDIR autoconfiscated pc coff mips gg
+@c LocalWords: dec ultrix cpu wildcards rpcc rdtsc powerpc readline
+@c LocalWords: withval vxworks gless localcache usr LOFF loff CYGWIN Cygwin
+@c LocalWords: cygwin SIGLIST siglist SYSNDIR SYSDIR ptx lseq rusage elif MSC
+@c LocalWords: lfoo POUNDBANG lsun NIS getpwnam SYSCALLS RSH INTL lintl aix
+@c LocalWords: intl lx ldir syslog bsd EPI toolchain netbsd objext de KNR nn
+@c LocalWords: fication LTLIBOBJS Wdiff TESTDIR atconfig atlocal akim XFAIL
+@c LocalWords: ChangeLog prepended errexit smallexample TESTSUITEFLAGS GPL er
+@c LocalWords: installcheck autotest indir Pixley Bothner Eichin Kerberos adl
+@c LocalWords: DISTCLEANFILES preprocessor's fileutils Stallman Murphey Stenn
+@c LocalWords: Manfredi Autoconfig TCL FSP david zuhn Blandy MACRODIR Raeburn
+@c LocalWords: autoconfiscate Savoye Haertel Avera Meyering fdl appendixsec
+@c LocalWords: printindex american LIBOBJDIR LibdirTest ERLCFLAGS OBJCFLAGS
+@c LocalWords: VER Gnulib online xyes strcpy TYPEOF typeof OBJC objcc objc ln
+@c LocalWords: GOBJC OTP ERLC erl valloc decr dumpdef errprint incr
+@c LocalWords: esyscmd len maketemp pushdef substr syscmd sysval translit txt
+@c LocalWords: sinclude foreach myvar tolower toupper uniq BASENAME STDIN
+@c LocalWords: Dynix basename aname cname macroexpands xno xcheck
+@c LocalWords: LIBREADLINE lreadline lncurses libreadline
+
+@c Local Variables:
+@c fill-column: 72
+@c ispell-local-dictionary: "american"
+@c indent-tabs-mode: nil
+@c whitespace-check-buffer-indent: nil
+@c End:
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..cb71f05
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,505 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification. Examples
+of transparent image formats include PNG, XCF and
+JPG. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.''@: line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
diff --git a/doc/gendocs_template b/doc/gendocs_template
new file mode 100644
index 0000000..f3a3ff6
--- /dev/null
+++ b/doc/gendocs_template
@@ -0,0 +1,89 @@
+<!--#include virtual="/server/header.html" -->
+<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF)</title>
+<!--#include virtual="/server/banner.html" -->
+<h2>%%TITLE%%</h2>
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+
+<p>This manual (%%PACKAGE%%) is available in the following formats:</p>
+
+<ul>
+<li><a href="%%PACKAGE%%.html">HTML
+ (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
+<li><a href="html_node/index.html">HTML</a> - with one web page per
+ node.</li>
+%%IF HTML_SECTION%%
+<li><a href="html_section/index.html">HTML</a> - with one web page per
+ section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="html_chapter/index.html">HTML</a> - with one web page per
+ chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html.gz">HTML compressed
+ (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
+ one web page.</li>
+<li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
+ (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per node.</li>
+%%IF HTML_SECTION%%
+<li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
+ (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
+ (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+<li><a href="%%PACKAGE%%.info.tar.gz">Info document
+ (%%INFO_TGZ_SIZE%%K bytes gzipped tar file)</a>.</li>
+<li><a href="%%PACKAGE%%.txt">ASCII text
+ (%%ASCII_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+ (%%ASCII_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+ (%%DVI_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.ps.gz">PostScript file
+ (%%PS_GZ_SIZE%%K bytes gzipped)</a>.</li>
+<li><a href="%%PACKAGE%%.pdf">PDF file
+ (%%PDF_SIZE%%K bytes)</a>.</li>
+<li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+ (%%TEXI_TGZ_SIZE%%K bytes gzipped tar file).</a></li>
+</ul>
+
+<p>You can <a href="http://shop.fsf.org/">buy printed copies of
+some manuals</a> (among other items) from the Free Software Foundation;
+this helps support FSF activities.</p>
+
+<p>(This page generated by the <a href="%%SCRIPTURL%%">%%SCRIPTNAME%%
+script</a>.)</p>
+
+<!-- If needed, change the copyright block at the bottom. In general,
+ all pages on the GNU web server should have the section about
+ verbatim copying. Please do NOT remove this without talking
+ with the webmasters first.
+ Please make sure the copyright date is consistent with the document
+ and that it is like this: "2001, 2002", not this: "2001-2002". -->
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+
+<p>Please send general FSF &amp; GNU inquiries to
+<a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF.<br />
+Please send broken links and other corrections or suggestions to
+<a href="mailto:%%EMAIL%%">&lt;%%EMAIL%%&gt;</a>.</p>
+
+<p>Copyright &copy; 2012 Free Software Foundation, Inc.</p>
+
+<p>Verbatim copying and distribution of this entire article are
+permitted worldwide, without royalty, in any medium, provided this
+notice, and the copyright notice, are preserved.</p>
+
+</div>
+</div>
+</body>
+</html>
diff --git a/doc/gnu-oids.texi b/doc/gnu-oids.texi
new file mode 100644
index 0000000..ecbd59b
--- /dev/null
+++ b/doc/gnu-oids.texi
@@ -0,0 +1,55 @@
+@c This table of OID's is included in the GNU Coding Standards.
+@c
+@c Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
+@c
+@c Copying and distribution of this file, with or without modification,
+@c are permitted in any medium without royalty provided the copyright
+@c notice and this notice are preserved.
+@c
+@c When adding new OIDs, please add them also to
+@c http://www.alvestrand.no/objectid/ (except it gets an internal
+@c server error, so never mind)
+@c (Our page is http://www.alvestrand.no/objectid/1.3.6.1.4.1.11591.html.)
+
+1.3.6.1.4.1.11591 GNU
+
+1.3.6.1.4.1.11591.1 GNU Radius
+
+1.3.6.1.4.1.11591.2 GnuPG
+ 1.3.6.1.4.1.11591.2.1 notation
+ 1.3.6.1.4.1.11591.2.1.1 pkaAddress
+
+1.3.6.1.4.1.11591.3 GNU Radar
+
+1.3.6.1.4.1.11591.4 GNU GSS
+
+@c Added 2008-10-24 on request from Sergey Poznyakoff <gray@gnu.org.ua>
+1.3.6.1.4.1.11591.5 GNU Mailutils
+
+@c Added 2009-03-03 on request from Simon Josefsson <simon@josefsson.org>
+1.3.6.1.4.1.11591.6 GNU Shishi
+
+@c Added 2010-05-17 on request from Eric Blossom <eb@comsec.com>
+1.3.6.1.4.1.11591.7 GNU Radio
+
+@c Added 2010-07-02 on request from Sergey Poznyakoff <gray@gnu.org.ua>
+1.3.6.1.4.1.11591.8 GNU Dico
+
+1.3.6.1.4.1.11591.12 digestAlgorithm
+ 1.3.6.1.4.1.11591.12.2 TIGER/192
+ 1.3.6.1.4.1.11591.13 encryptionAlgorithm
+ 1.3.6.1.4.1.11591.13.2 Serpent
+ 1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB
+ 1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC
+ 1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB
+ 1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB
+ 1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB
+ 1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC
+ 1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB
+ 1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB
+ 1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB
+ 1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC
+ 1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB
+ 1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB
+ 1.3.6.1.4.1.11591.14 CRC algorithms
+ 1.3.6.1.4.1.11591.14.1 CRC 32
diff --git a/doc/install.texi b/doc/install.texi
new file mode 100644
index 0000000..4c2ffb5
--- /dev/null
+++ b/doc/install.texi
@@ -0,0 +1,437 @@
+@c This file is included by autoconf.texi and is used to produce
+@c the INSTALL file.
+
+@ifclear autoconf
+
+@unnumbered Installation Instructions
+
+Copyright @copyright{} 1994-1996, 1999-2002, 2004-2012 Free Software
+Foundation, Inc.
+
+Copying and distribution of this file, with or without modification, are
+permitted in any medium without royalty provided the copyright notice
+and this notice are preserved. This file is offered as-is, without
+warranty of any kind.
+
+@end ifclear
+
+@node Basic Installation
+@section Basic Installation
+
+Briefly, the shell commands @samp{./configure; make; make install}
+should configure, build, and install this package. The following
+more-detailed instructions are generic; see the @file{README} file for
+instructions specific to this package.
+@ifclear autoconf
+Some packages provide this @file{INSTALL} file but do not implement all
+of the features documented below. The lack of an optional feature in a
+given package is not necessarily a bug.
+@end ifclear
+More recommendations for GNU packages can be found in
+@ref{Makefile Conventions, , Makefile Conventions, standards,
+GNU Coding Standards}.
+
+The @command{configure} shell script attempts to guess correct values
+for various system-dependent variables used during compilation. It uses
+those values to create a @file{Makefile} in each directory of the
+package. It may also create one or more @file{.h} files containing
+system-dependent definitions. Finally, it creates a shell script
+@file{config.status} that you can run in the future to recreate the
+current configuration, and a file @file{config.log} containing compiler
+output (useful mainly for debugging @command{configure}).
+
+It can also use an optional file (typically called @file{config.cache}
+and enabled with @option{--cache-file=config.cache} or simply
+@option{-C}) that saves the results of its tests to speed up
+reconfiguring. Caching is disabled by default to prevent problems with
+accidental use of stale cache files.
+
+If you need to do unusual things to compile the package, please try to
+figure out how @command{configure} could check whether to do them, and
+mail diffs or instructions to the address given in the @file{README} so
+they can be considered for the next release. If you are using the
+cache, and at some point @file{config.cache} contains results you don't
+want to keep, you may remove or edit it.
+
+The file @file{configure.ac} (or @file{configure.in}) is used to create
+@file{configure} by a program called @command{autoconf}. You need
+@file{configure.ac} if you want to change it or regenerate
+@file{configure} using a newer version of @command{autoconf}.
+
+The simplest way to compile this package is:
+
+@enumerate
+@item
+@command{cd} to the directory containing the package's source code and type
+@samp{./configure} to configure the package for your system.
+
+Running @command{configure} might take a while. While running, it prints some
+messages telling which features it is checking for.
+
+@item
+Type @samp{make} to compile the package.
+
+@item
+Optionally, type @samp{make check} to run any self-tests that come with
+the package, generally using the just-built uninstalled binaries.
+
+@item
+Type @samp{make install} to install the programs and any data files and
+documentation. When installing into a prefix owned by root, it is
+recommended that the package be configured and built as a regular user,
+and only the @samp{make install} phase executed with root privileges.
+
+@item
+Optionally, type @samp{make installcheck} to repeat any self-tests, but
+this time using the binaries in their final installed location. This
+target does not install anything. Running this target as a regular
+user, particularly if the prior @samp{make install} required root
+privileges, verifies that the installation completed correctly.
+
+@item
+You can remove the program binaries and object files from the source
+code directory by typing @samp{make clean}. To also remove the files
+that @command{configure} created (so you can compile the package for a
+different kind of computer), type @samp{make distclean}. There is also
+a @samp{make maintainer-clean} target, but that is intended mainly for
+the package's developers. If you use it, you may have to get all sorts
+of other programs in order to regenerate files that came with the
+distribution.
+
+@item
+Often, you can also type @samp{make uninstall} to remove the installed
+files again. In practice, not all packages have tested that
+uninstallation works correctly, even though it is required by the
+GNU Coding Standards.
+
+@item
+Some packages, particularly those that use Automake, provide @samp{make
+distcheck}, which can by used by developers to test that all other
+targets like @samp{make install} and @samp{make uninstall} work
+correctly. This target is generally not run by end users.
+@end enumerate
+
+@node Compilers and Options
+@section Compilers and Options
+
+Some systems require unusual options for compilation or linking that the
+@command{configure} script does not know about. Run @samp{./configure
+--help} for details on some of the pertinent environment variables.
+
+You can give @command{configure} initial values for configuration
+parameters by setting variables in the command line or in the environment.
+Here is an example:
+
+@example
+./configure CC=c99 CFLAGS=-g LIBS=-lposix
+@end example
+
+@xref{Defining Variables}, for more details.
+
+
+@node Multiple Architectures
+@section Compiling For Multiple Architectures
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU @command{make}.
+@command{cd} to the directory where you want the object files and
+executables to go and run the @command{configure} script.
+@command{configure} automatically checks for the source code in the
+directory that @command{configure} is in and in @file{..}. This is
+known as a @dfn{VPATH} build.
+
+With a non-GNU @command{make},
+it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use @samp{make distclean}
+before reconfiguring for another architecture.
+
+On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types---known as @dfn{fat} or
+@dfn{universal} binaries---by specifying multiple @option{-arch} options
+to the compiler but only a single @option{-arch} option to the
+preprocessor. Like this:
+
+@example
+./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+@end example
+
+This is not guaranteed to produce working output in all cases, you may
+have to build one architecture at a time and combine the results
+using the @command{lipo} tool if you have problems.
+
+@node Installation Names
+@section Installation Names
+
+By default, @samp{make install} installs the package's commands under
+@file{/usr/local/bin}, include files under @file{/usr/local/include}, etc.
+You can specify an
+installation prefix other than @file{/usr/local} by giving
+@command{configure} the option @option{--prefix=@var{prefix}}, where
+@var{prefix} must be an absolute file name.
+
+You can specify separate installation prefixes for architecture-specific
+files and architecture-independent files. If you pass the option
+@option{--exec-prefix=@var{prefix}} to @command{configure}, the
+package uses @var{prefix} as the prefix for installing programs and
+libraries. Documentation and other data files still use the
+regular prefix.
+
+In addition, if you use an unusual directory layout you can give options
+like @option{--bindir=@var{dir}} to specify different values for
+particular kinds of files. Run @samp{configure --help} for a list of
+the directories you can set and what kinds of files go in them. In
+general, the default for these options is expressed in terms of
+@samp{$@{prefix@}}, so that specifying just @option{--prefix} will
+affect all of the other directory specifications that were not
+explicitly provided.
+
+The most portable way to affect installation locations is to pass the
+correct locations to @command{configure}; however, many packages provide
+one or both of the following shortcuts of passing variable assignments
+to the @samp{make install} command line to change installation locations
+without having to reconfigure or recompile.
+
+The first method involves providing an override variable for each
+affected directory. For example, @samp{make install
+prefix=/alternate/directory} will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+@samp{$@{prefix@}}. Any directories that were specified during
+@command{configure}, but not in terms of @samp{$@{prefix@}}, must each be
+overridden at install time for the entire
+installation to be relocated. The approach of makefile variable
+overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation. However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+The second method involves providing the @samp{DESTDIR} variable. For
+example, @samp{make install DESTDIR=/alternate/directory} will prepend
+@samp{/alternate/directory} before all installation names. The approach
+of @samp{DESTDIR} overrides is not required by the GNU Coding
+Standards, and does not work on platforms that have drive letters. On
+the other hand, it does better at avoiding recompilation issues, and
+works well even when some directory options were not specified in terms
+of @samp{$@{prefix@}} at @command{configure} time.
+
+@node Optional Features
+@section Optional Features
+
+If the package supports it, you can cause programs to be installed with
+an extra prefix or suffix on their names by giving @command{configure}
+the option @option{--program-prefix=@var{PREFIX}} or
+@option{--program-suffix=@var{SUFFIX}}.
+
+Some packages pay attention to @option{--enable-@var{feature}} options
+to @command{configure}, where @var{feature} indicates an optional part
+of the package. They may also pay attention to
+@option{--with-@var{package}} options, where @var{package} is something
+like @samp{gnu-as} or @samp{x} (for the X Window System). The
+@file{README} should mention any @option{--enable-} and @option{--with-}
+options that the package recognizes.
+
+For packages that use the X Window System, @command{configure} can
+usually find the X include and library files automatically, but if it
+doesn't, you can use the @command{configure} options
+@option{--x-includes=@var{dir}} and @option{--x-libraries=@var{dir}} to
+specify their locations.
+
+Some packages offer the ability to configure how verbose the execution
+of @command{make} will be. For these packages, running
+@samp{./configure --enable-silent-rules} sets the default to minimal
+output, which can be overridden with @code{make V=1}; while running
+@samp{./configure --disable-silent-rules} sets the default to verbose,
+which can be overridden with @code{make V=0}.
+
+@node Particular Systems
+@section Particular systems
+
+On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is
+not installed, it is recommended to use the following options in order to
+use an ANSI C compiler:
+
+@example
+./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+@end example
+
+@noindent
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+HP-UX @command{make} updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as @command{configure} are involved. Use GNU
+@command{make} instead.
+
+On OSF/1 a.k.a.@: Tru64, some versions of the default C compiler cannot
+parse its @code{<wchar.h>} header file. The option @option{-nodtk} can be
+used as a workaround. If GNU CC is not installed, it is therefore
+recommended to try
+
+@example
+./configure CC="cc"
+@end example
+
+@noindent
+and if that doesn't work, try
+
+@example
+./configure CC="cc -nodtk"
+@end example
+
+On Solaris, don't put @code{/usr/ucb} early in your @env{PATH}. This
+directory contains several dysfunctional programs; working variants
+of these programs are available in @code{/usr/bin}. So, if you need
+@code{/usr/ucb} in your @env{PATH}, put it @emph{after} @code{/usr/bin}.
+
+On Haiku, software installed for all users goes in @file{/boot/common},
+not @file{/usr/local}. It is recommended to use the following options:
+
+@example
+./configure --prefix=/boot/common
+@end example
+
+@node System Type
+@section Specifying the System Type
+
+There may be some features @command{configure} cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+@emph{same} architectures, @command{configure} can figure that out, but
+if it prints a message saying it cannot guess the machine type, give it
+the @option{--build=@var{type}} option. @var{type} can either be a
+short name for the system type, such as @samp{sun4}, or a canonical name
+which has the form:
+
+@example
+@var{cpu}-@var{company}-@var{system}
+@end example
+
+@noindent
+where @var{system} can have one of these forms:
+
+@example
+@var{os}
+@var{kernel}-@var{os}
+@end example
+
+See the file @file{config.sub} for the possible values of each field.
+If @file{config.sub} isn't included in this package, then this package
+doesn't need to know the machine type.
+
+If you are @emph{building} compiler tools for cross-compiling, you
+should use the option @option{--target=@var{type}} to select the type of
+system they will produce code for.
+
+If you want to @emph{use} a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+@dfn{host} platform (i.e., that on which the generated programs will
+eventually be run) with @option{--host=@var{type}}.
+
+@node Sharing Defaults
+@section Sharing Defaults
+
+If you want to set default values for @command{configure} scripts to
+share, you can create a site shell script called @file{config.site} that
+gives default values for variables like @code{CC}, @code{cache_file},
+and @code{prefix}. @command{configure} looks for
+@file{@var{prefix}/share/config.site} if it exists, then
+@file{@var{prefix}/etc/config.site} if it exists. Or, you can set the
+@code{CONFIG_SITE} environment variable to the location of the site
+script. A warning: not all @command{configure} scripts look for a site
+script.
+
+@node Defining Variables
+@section Defining Variables
+
+Variables not defined in a site shell script can be set in the
+environment passed to @command{configure}. However, some packages may
+run configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the @command{configure} command line, using @samp{VAR=value}.
+For example:
+
+@example
+./configure CC=/usr/local2/bin/gcc
+@end example
+
+@noindent
+causes the specified @command{gcc} to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+@noindent
+Unfortunately, this technique does not work for @env{CONFIG_SHELL} due
+to an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+@example
+CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+@end example
+
+@node configure Invocation
+@section @command{configure} Invocation
+
+@command{configure} recognizes the following options to control how it
+operates.
+
+@table @option
+@item --help
+@itemx -h
+Print a summary of all of the options to @command{configure}, and exit.
+
+@item --help=short
+@itemx --help=recursive
+Print a summary of the options unique to this package's
+@command{configure}, and exit. The @code{short} variant lists options
+used only in the top level, while the @code{recursive} variant lists
+options also present in any nested packages.
+
+@item --version
+@itemx -V
+Print the version of Autoconf used to generate the @command{configure}
+script, and exit.
+
+@item --cache-file=@var{file}
+@cindex Cache, enabling
+Enable the cache: use and save the results of the tests in @var{file},
+traditionally @file{config.cache}. @var{file} defaults to
+@file{/dev/null} to disable caching.
+
+@item --config-cache
+@itemx -C
+Alias for @option{--cache-file=config.cache}.
+
+@item --quiet
+@itemx --silent
+@itemx -q
+Do not print messages saying which checks are being made. To suppress
+all normal output, redirect it to @file{/dev/null} (any error messages
+will still be shown).
+
+@item --srcdir=@var{dir}
+Look for the package's source code in directory @var{dir}. Usually
+@command{configure} can determine that directory automatically.
+
+@item --prefix=@var{dir}
+Use @var{dir} as the installation prefix. @ref{Installation Names}
+for more details, including other options available for fine-tuning
+the installation locations.
+
+@item --no-create
+@itemx -n
+Run the configure checks, but stop before creating any output files.
+@end table
+
+@noindent
+@command{configure} also accepts some other, not widely useful, options.
+Run @samp{configure --help} for more details.
+
+@c Local Variables:
+@c fill-column: 72
+@c ispell-local-dictionary: "american"
+@c indent-tabs-mode: nil
+@c whitespace-check-buffer-indent: nil
+@c End:
diff --git a/doc/make-stds.texi b/doc/make-stds.texi
new file mode 100644
index 0000000..cdcbb68
--- /dev/null
+++ b/doc/make-stds.texi
@@ -0,0 +1,1159 @@
+@comment This file is included by both standards.texi and make.texinfo.
+@comment It was broken out of standards.texi on 1/6/93 by roland.
+
+@node Makefile Conventions
+@chapter Makefile Conventions
+@cindex makefile, conventions for
+@cindex conventions for makefiles
+@cindex standards for makefiles
+
+@c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
+@c 2004, 2005, 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
+@c
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3
+@c or any later version published by the Free Software Foundation;
+@c with no Invariant Sections, with no
+@c Front-Cover Texts, and with no Back-Cover Texts.
+@c A copy of the license is included in the section entitled ``GNU
+@c Free Documentation License''.
+
+This
+@ifinfo
+node
+@end ifinfo
+@iftex
+@ifset CODESTD
+section
+@end ifset
+@ifclear CODESTD
+chapter
+@end ifclear
+@end iftex
+describes conventions for writing the Makefiles for GNU programs.
+Using Automake will help you write a Makefile that follows these
+conventions. For more information on portable Makefiles, see
+@sc{posix} and @ref{Portable Make, Portable Make Programming,, autoconf,
+Autoconf}.
+
+
+@menu
+* Makefile Basics:: General conventions for Makefiles.
+* Utilities in Makefiles:: Utilities to be used in Makefiles.
+* Command Variables:: Variables for specifying commands.
+* DESTDIR:: Supporting staged installs.
+* Directory Variables:: Variables for installation directories.
+* Standard Targets:: Standard targets for users.
+* Install Command Categories:: Three categories of commands in the `install'
+ rule: normal, pre-install and post-install.
+@end menu
+
+@node Makefile Basics
+@section General Conventions for Makefiles
+
+Every Makefile should contain this line:
+
+@example
+SHELL = /bin/sh
+@end example
+
+@noindent
+to avoid trouble on systems where the @code{SHELL} variable might be
+inherited from the environment. (This is never a problem with GNU
+@code{make}.)
+
+Different @code{make} programs have incompatible suffix lists and
+implicit rules, and this sometimes creates confusion or misbehavior. So
+it is a good idea to set the suffix list explicitly using only the
+suffixes you need in the particular Makefile, like this:
+
+@example
+.SUFFIXES:
+.SUFFIXES: .c .o
+@end example
+
+@noindent
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+Don't assume that @file{.} is in the path for command execution. When
+you need to run programs that are a part of your package during the
+make, please make sure that it uses @file{./} if the program is built as
+part of the make or @file{$(srcdir)/} if the file is an unchanging part
+of the source code. Without one of these prefixes, the current search
+path is used.
+
+The distinction between @file{./} (the @dfn{build directory}) and
+@file{$(srcdir)/} (the @dfn{source directory}) is important because
+users can build in a separate directory using the @samp{--srcdir} option
+to @file{configure}. A rule of the form:
+
+@smallexample
+foo.1 : foo.man sedscript
+ sed -f sedscript foo.man > foo.1
+@end smallexample
+
+@noindent
+will fail when the build directory is not the source directory, because
+@file{foo.man} and @file{sedscript} are in the source directory.
+
+When using GNU @code{make}, relying on @samp{VPATH} to find the source
+file will work in the case where there is a single dependency file,
+since the @code{make} automatic variable @samp{$<} will represent the
+source file wherever it is. (Many versions of @code{make} set @samp{$<}
+only in implicit rules.) A Makefile target like
+
+@smallexample
+foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+@end smallexample
+
+@noindent
+should instead be written as
+
+@smallexample
+foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@@
+@end smallexample
+
+@noindent
+in order to allow @samp{VPATH} to work correctly. When the target has
+multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest
+way to make the rule work well. For example, the target above for
+@file{foo.1} is best written as:
+
+@smallexample
+foo.1 : foo.man sedscript
+ sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@@
+@end smallexample
+
+GNU distributions usually contain some files which are not source
+files---for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex. Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory. So Makefile rules to update them should put the
+updated files in the source directory.
+
+However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+Try to make the build and installation targets, at least (and all their
+subtargets) work correctly with a parallel @code{make}.
+
+@node Utilities in Makefiles
+@section Utilities in Makefiles
+
+Write the Makefile commands (and any shell scripts, such as
+@code{configure}) to run under @code{sh} (both the traditional Bourne
+shell and the @sc{posix} shell), not @code{csh}. Don't use any
+special features of @code{ksh} or @code{bash}, or @sc{posix} features
+not widely supported in traditional Bourne @code{sh}.
+
+The @code{configure} script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+@c dd find
+@c gunzip gzip md5sum
+@c mkfifo mknod tee uname
+
+@example
+awk cat cmp cp diff echo egrep expr false grep install-info ln ls
+mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
+@end example
+
+Compression programs such as @code{gzip} can be used in the
+@code{dist} rule.
+
+Generally, stick to the widely-supported (usually
+@sc{posix}-specified) options and features of these programs. For
+example, don't use @samp{mkdir -p}, convenient as it may be, because a
+few systems don't support it at all and with others, it is not safe
+for parallel execution. For a list of known incompatibilities, see
+@ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}.
+
+
+It is a good idea to avoid creating symbolic links in makefiles, since a
+few file systems don't support them.
+
+The Makefile rules for building and installation can also use compilers
+and related programs, but should do so via @code{make} variables so that the
+user can substitute alternatives. Here are some of the programs we
+mean:
+
+@example
+ar bison cc flex install ld ldconfig lex
+make makeinfo ranlib texi2dvi yacc
+@end example
+
+Use the following @code{make} variables to run those programs:
+
+@example
+$(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+$(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+@end example
+
+When you use @code{ranlib} or @code{ldconfig}, you should make sure
+nothing bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem. (The Autoconf @samp{AC_PROG_RANLIB} macro can help with
+this.)
+
+If you use symbolic links, you should implement a fallback for systems
+that don't have symbolic links.
+
+Additional utilities that can be used via Make variables are:
+
+@example
+chgrp chmod chown mknod
+@end example
+
+It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
+
+@node Command Variables
+@section Variables for Specifying Commands
+
+Makefiles should provide variables for overriding certain commands, options,
+and so on.
+
+In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named @code{BISON} whose default
+value is set with @samp{BISON = bison}, and refer to it with
+@code{$(BISON)} whenever you need to use Bison.
+
+File management utilities such as @code{ln}, @code{rm}, @code{mv}, and
+so on, need not be referred to through variables in this way, since users
+don't need to replace them with other programs.
+
+Each program-name variable should come with an options variable that is
+used to supply options to the program. Append @samp{FLAGS} to the
+program-name variable name to get the options variable name---for
+example, @code{BISONFLAGS}. (The names @code{CFLAGS} for the C
+compiler, @code{YFLAGS} for yacc, and @code{LFLAGS} for lex, are
+exceptions to this rule, but we keep them because they are standard.)
+Use @code{CPPFLAGS} in any compilation command that runs the
+preprocessor, and use @code{LDFLAGS} in any compilation command that
+does linking as well as in any direct use of @code{ld}.
+
+If there are C compiler options that @emph{must} be used for proper
+compilation of certain files, do not include them in @code{CFLAGS}.
+Users expect to be able to specify @code{CFLAGS} freely themselves.
+Instead, arrange to pass the necessary options to the C compiler
+independently of @code{CFLAGS}, by writing them explicitly in the
+compilation commands or by defining an implicit rule, like this:
+
+@smallexample
+CFLAGS = -g
+ALL_CFLAGS = -I. $(CFLAGS)
+.c.o:
+ $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+@end smallexample
+
+Do include the @samp{-g} option in @code{CFLAGS}, because that is not
+@emph{required} for proper compilation. You can consider it a default
+that is only recommended. If the package is set up so that it is
+compiled with GCC by default, then you might as well include @samp{-O}
+in the default value of @code{CFLAGS} as well.
+
+Put @code{CFLAGS} last in the compilation command, after other variables
+containing compiler options, so the user can use @code{CFLAGS} to
+override the others.
+
+@code{CFLAGS} should be used in every invocation of the C compiler,
+both those which do compilation and those which do linking.
+
+Every Makefile should define the variable @code{INSTALL}, which is the
+basic command for installing a file into the system.
+
+Every Makefile should also define the variables @code{INSTALL_PROGRAM}
+and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should
+be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be
+@code{$@{INSTALL@} -m 644}.) Then it should use those variables as the
+commands for actual installation, for executables and non-executables
+respectively. Minimal use of these variables is as follows:
+
+@example
+$(INSTALL_PROGRAM) foo $(bindir)/foo
+$(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+@end example
+
+However, it is preferable to support a @code{DESTDIR} prefix on the
+target files, as explained in the next section.
+
+It is acceptable, but not required, to install multiple files in one
+command, with the final argument being a directory, as in:
+
+@example
+$(INSTALL_PROGRAM) foo bar baz $(bindir)
+@end example
+
+
+@node DESTDIR
+@section @code{DESTDIR}: Support for Staged Installs
+
+@vindex DESTDIR
+@cindex staged installs
+@cindex installations, staged
+
+@code{DESTDIR} is a variable prepended to each installed target file,
+like this:
+
+@example
+$(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+$(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+@end example
+
+The @code{DESTDIR} variable is specified by the user on the @code{make}
+command line as an absolute file name. For example:
+
+@example
+make DESTDIR=/tmp/stage install
+@end example
+
+@noindent
+@code{DESTDIR} should be supported only in the @code{install*} and
+@code{uninstall*} targets, as those are the only targets where it is
+useful.
+
+If your installation step would normally install
+@file{/usr/local/bin/foo} and @file{/usr/@/local/@/lib/@/libfoo.a}, then an
+installation invoked as in the example above would install
+@file{/tmp/stage/usr/local/bin/foo} and
+@file{/tmp/stage/usr/local/lib/libfoo.a} instead.
+
+Prepending the variable @code{DESTDIR} to each target in this way
+provides for @dfn{staged installs}, where the installed files are not
+placed directly into their expected location but are instead copied
+into a temporary location (@code{DESTDIR}). However, installed files
+maintain their relative directory structure and any embedded file names
+will not be modified.
+
+You should not set the value of @code{DESTDIR} in your @file{Makefile}
+at all; then the files are installed into their expected locations by
+default. Also, specifying @code{DESTDIR} should not change the
+operation of the software in any way, so its value should not be
+included in any file contents.
+
+@code{DESTDIR} support is commonly used in package creation. It is
+also helpful to users who want to understand what a given package will
+install where, and to allow users who don't normally have permissions
+to install into protected areas to build and install before gaining
+those permissions. Finally, it can be useful with tools such as
+@code{stow}, where code is installed in one place but made to appear
+to be installed somewhere else using symbolic links or special mount
+operations. So, we strongly recommend GNU packages support
+@code{DESTDIR}, though it is not an absolute requirement.
+
+
+@node Directory Variables
+@section Variables for Installation Directories
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place. The standard names for these
+variables and the values they should have in GNU packages are
+described below. They are based on a standard file system layout;
+variants of it are used in GNU/Linux and other modern operating
+systems.
+
+Installers are expected to override these values when calling
+@command{make} (e.g., @kbd{make prefix=/usr install} or
+@command{configure} (e.g., @kbd{configure --prefix=/usr}). GNU
+packages should not try to guess which value should be appropriate for
+these variables on the system they are being installed onto: use the
+default settings specified here so that all GNU packages behave
+identically, allowing the installer to achieve any desired layout.
+
+@cindex directories, creating installation
+@cindex installation directories, creating
+All installation directories, and their parent directories, should be
+created (if necessary) before they are installed into.
+
+These first two variables set the root for the installation. All the
+other installation directories should be subdirectories of one of
+these two, and nothing should be directly installed into these two
+directories.
+
+@table @code
+@item prefix
+@vindex prefix
+A prefix used in constructing the default values of the variables listed
+below. The default value of @code{prefix} should be @file{/usr/local}.
+When building the complete GNU system, the prefix will be empty and
+@file{/usr} will be a symbolic link to @file{/}.
+(If you are using Autoconf, write it as @samp{@@prefix@@}.)
+
+Running @samp{make install} with a different value of @code{prefix} from
+the one used to build the program should @emph{not} recompile the
+program.
+
+@item exec_prefix
+@vindex exec_prefix
+A prefix used in constructing the default values of some of the
+variables listed below. The default value of @code{exec_prefix} should
+be @code{$(prefix)}.
+(If you are using Autoconf, write it as @samp{@@exec_prefix@@}.)
+
+Generally, @code{$(exec_prefix)} is used for directories that contain
+machine-specific files (such as executables and subroutine libraries),
+while @code{$(prefix)} is used directly for other directories.
+
+Running @samp{make install} with a different value of @code{exec_prefix}
+from the one used to build the program should @emph{not} recompile the
+program.
+@end table
+
+Executable programs are installed in one of the following directories.
+
+@table @code
+@item bindir
+@vindex bindir
+The directory for installing executable programs that users can run.
+This should normally be @file{/usr/local/bin}, but write it as
+@file{$(exec_prefix)/bin}.
+(If you are using Autoconf, write it as @samp{@@bindir@@}.)
+
+@item sbindir
+@vindex sbindir
+The directory for installing executable programs that can be run from
+the shell, but are only generally useful to system administrators. This
+should normally be @file{/usr/local/sbin}, but write it as
+@file{$(exec_prefix)/sbin}.
+(If you are using Autoconf, write it as @samp{@@sbindir@@}.)
+
+@item libexecdir
+@vindex libexecdir
+@comment This paragraph adjusted to avoid overfull hbox --roland 5jul94
+The directory for installing executable programs to be run by other
+programs rather than by users. This directory should normally be
+@file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}.
+(If you are using Autoconf, write it as @samp{@@libexecdir@@}.)
+
+The definition of @samp{libexecdir} is the same for all packages, so
+you should install your data in a subdirectory thereof. Most packages
+install their data under @file{$(libexecdir)/@var{package-name}/},
+possibly within additional subdirectories thereof, such as
+@file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}.
+@end table
+
+Data files used by the program during its execution are divided into
+categories in two ways.
+
+@itemize @bullet
+@item
+Some files are normally modified by programs; others are never normally
+modified (though users may edit some of these).
+
+@item
+Some files are architecture-independent and can be shared by all
+machines at a site; some are architecture-dependent and can be shared
+only by machines of the same kind and operating system; others may never
+be shared between two machines.
+@end itemize
+
+This makes for six different possibilities. However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries. It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+Here are the variables Makefiles should use to specify directories
+to put these various kinds of files in:
+
+@table @samp
+@item datarootdir
+The root of the directory tree for read-only architecture-independent
+data files. This should normally be @file{/usr/local/share}, but
+write it as @file{$(prefix)/share}. (If you are using Autoconf, write
+it as @samp{@@datarootdir@@}.) @samp{datadir}'s default value is
+based on this variable; so are @samp{infodir}, @samp{mandir}, and
+others.
+
+@item datadir
+The directory for installing idiosyncratic read-only
+architecture-independent data files for this program. This is usually
+the same place as @samp{datarootdir}, but we use the two separate
+variables so that you can move these program-specific files without
+altering the location for Info files, man pages, etc.
+
+@c raggedright (not until next Texinfo release)
+This should normally be @file{/usr/local/share}, but write it as
+@file{$(datarootdir)}. (If you are using Autoconf, write it as
+@samp{@@datadir@@}.)
+@c end raggedright
+
+The definition of @samp{datadir} is the same for all packages, so you
+should install your data in a subdirectory thereof. Most packages
+install their data under @file{$(datadir)/@var{package-name}/}.
+
+@item sysconfdir
+The directory for installing read-only data files that pertain to a
+single machine--that is to say, files for configuring a host. Mailer
+and network configuration files, @file{/etc/passwd}, and so forth belong
+here. All the files in this directory should be ordinary ASCII text
+files. This directory should normally be @file{/usr/local/etc}, but
+write it as @file{$(prefix)/etc}.
+(If you are using Autoconf, write it as @samp{@@sysconfdir@@}.)
+
+Do not install executables here in this directory (they probably belong
+in @file{$(libexecdir)} or @file{$(sbindir)}). Also do not install
+files that are modified in the normal course of their use (programs
+whose purpose is to change the configuration of the system excluded).
+Those probably belong in @file{$(localstatedir)}.
+
+@item sharedstatedir
+The directory for installing architecture-independent data files which
+the programs modify while they run. This should normally be
+@file{/usr/local/com}, but write it as @file{$(prefix)/com}.
+(If you are using Autoconf, write it as @samp{@@sharedstatedir@@}.)
+
+@item localstatedir
+The directory for installing data files which the programs modify while
+they run, and that pertain to one specific machine. Users should never
+need to modify files in this directory to configure the package's
+operation; put such configuration information in separate files that go
+in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)}
+should normally be @file{/usr/local/var}, but write it as
+@file{$(prefix)/var}.
+(If you are using Autoconf, write it as @samp{@@localstatedir@@}.)
+@end table
+
+These variables specify the directory for installing certain specific
+types of files, if your program has them. Every GNU package should
+have Info files, so every program needs @samp{infodir}, but not all
+need @samp{libdir} or @samp{lispdir}.
+
+@table @samp
+@item includedir
+The directory for installing header files to be included by user
+programs with the C @samp{#include} preprocessor directive. This
+should normally be @file{/usr/local/include}, but write it as
+@file{$(prefix)/include}.
+(If you are using Autoconf, write it as @samp{@@includedir@@}.)
+
+Most compilers other than GCC do not look for header files in directory
+@file{/usr/local/include}. So installing the header files this way is
+only useful with GCC. Sometimes this is not a problem because some
+libraries are only really intended to work with GCC. But some libraries
+are intended to work with other compilers. They should install their
+header files in two places, one specified by @code{includedir} and one
+specified by @code{oldincludedir}.
+
+@item oldincludedir
+The directory for installing @samp{#include} header files for use with
+compilers other than GCC. This should normally be @file{/usr/include}.
+(If you are using Autoconf, you can write it as @samp{@@oldincludedir@@}.)
+
+The Makefile commands should check whether the value of
+@code{oldincludedir} is empty. If it is, they should not try to use
+it; they should cancel the second installation of the header files.
+
+A package should not replace an existing header in this directory unless
+the header came from the same package. Thus, if your Foo package
+provides a header file @file{foo.h}, then it should install the header
+file in the @code{oldincludedir} directory if either (1) there is no
+@file{foo.h} there or (2) the @file{foo.h} that exists came from the Foo
+package.
+
+To tell whether @file{foo.h} came from the Foo package, put a magic
+string in the file---part of a comment---and @code{grep} for that string.
+
+@item docdir
+The directory for installing documentation files (other than Info) for
+this package. By default, it should be
+@file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as
+@file{$(datarootdir)/doc/@var{yourpkg}}. (If you are using Autoconf,
+write it as @samp{@@docdir@@}.) The @var{yourpkg} subdirectory, which
+may include a version number, prevents collisions among files with
+common names, such as @file{README}.
+
+@item infodir
+The directory for installing the Info files for this package. By
+default, it should be @file{/usr/local/share/info}, but it should be
+written as @file{$(datarootdir)/info}. (If you are using Autoconf,
+write it as @samp{@@infodir@@}.) @code{infodir} is separate from
+@code{docdir} for compatibility with existing practice.
+
+@item htmldir
+@itemx dvidir
+@itemx pdfdir
+@itemx psdir
+Directories for installing documentation files in the particular
+format. They should all be set to @code{$(docdir)} by default. (If
+you are using Autoconf, write them as @samp{@@htmldir@@},
+@samp{@@dvidir@@}, etc.) Packages which supply several translations
+of their documentation should install them in
+@samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where
+@var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}.
+
+@item libdir
+The directory for object files and libraries of object code. Do not
+install executables here, they probably ought to go in @file{$(libexecdir)}
+instead. The value of @code{libdir} should normally be
+@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}.
+(If you are using Autoconf, write it as @samp{@@libdir@@}.)
+
+@item lispdir
+The directory for installing any Emacs Lisp files in this package. By
+default, it should be @file{/usr/local/share/emacs/site-lisp}, but it
+should be written as @file{$(datarootdir)/emacs/site-lisp}.
+
+If you are using Autoconf, write the default as @samp{@@lispdir@@}.
+In order to make @samp{@@lispdir@@} work, you need the following lines
+in your @file{configure.in} file:
+
+@example
+lispdir='$@{datarootdir@}/emacs/site-lisp'
+AC_SUBST(lispdir)
+@end example
+
+@item localedir
+The directory for installing locale-specific message catalogs for this
+package. By default, it should be @file{/usr/local/share/locale}, but
+it should be written as @file{$(datarootdir)/locale}. (If you are
+using Autoconf, write it as @samp{@@localedir@@}.) This directory
+usually has a subdirectory per locale.
+@end table
+
+Unix-style man pages are installed in one of the following:
+
+@table @samp
+@item mandir
+The top-level directory for installing the man pages (if any) for this
+package. It will normally be @file{/usr/local/share/man}, but you
+should write it as @file{$(datarootdir)/man}. (If you are using
+Autoconf, write it as @samp{@@mandir@@}.)
+
+@item man1dir
+The directory for installing section 1 man pages. Write it as
+@file{$(mandir)/man1}.
+@item man2dir
+The directory for installing section 2 man pages. Write it as
+@file{$(mandir)/man2}
+@item @dots{}
+
+@strong{Don't make the primary documentation for any GNU software be a
+man page. Write a manual in Texinfo instead. Man pages are just for
+the sake of people running GNU software on Unix, which is a secondary
+application only.}
+
+@item manext
+The file name extension for the installed man page. This should contain
+a period followed by the appropriate digit; it should normally be @samp{.1}.
+
+@item man1ext
+The file name extension for installed section 1 man pages.
+@item man2ext
+The file name extension for installed section 2 man pages.
+@item @dots{}
+Use these names instead of @samp{manext} if the package needs to install man
+pages in more than one section of the manual.
+@end table
+
+And finally, you should set the following variable:
+
+@table @samp
+@item srcdir
+The directory for the sources being compiled. The value of this
+variable is normally inserted by the @code{configure} shell script.
+(If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.)
+@end table
+
+For example:
+
+@smallexample
+@c I have changed some of the comments here slightly to fix an overfull
+@c hbox, so the make manual can format correctly. --roland
+# Common prefix for installation directories.
+# NOTE: This directory must exist when you start the install.
+prefix = /usr/local
+datarootdir = $(prefix)/share
+datadir = $(datarootdir)
+exec_prefix = $(prefix)
+# Where to put the executable for the command `gcc'.
+bindir = $(exec_prefix)/bin
+# Where to put the directories used by the compiler.
+libexecdir = $(exec_prefix)/libexec
+# Where to put the Info files.
+infodir = $(datarootdir)/info
+@end smallexample
+
+If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program. If you do this, you
+should write the @code{install} rule to create these subdirectories.
+
+Do not expect the user to include the subdirectory name in the value of
+any of the variables listed above. The idea of having a uniform set of
+variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages. In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+At times, not all of these variables may be implemented in the current
+release of Autoconf and/or Automake; but as of Autoconf@tie{}2.60, we
+believe all of them are. When any are missing, the descriptions here
+serve as specifications for what Autoconf will implement. As a
+programmer, you can either use a development version of Autoconf or
+avoid using these variables until a stable release is made which
+supports them.
+
+
+@node Standard Targets
+@section Standard Targets for Users
+
+All GNU programs should have the following targets in their Makefiles:
+
+@table @samp
+@item all
+Compile the entire program. This should be the default target. This
+target need not rebuild any documentation files; Info files should
+normally be included in the distribution, and DVI (and other
+documentation format) files should be made only when explicitly asked
+for.
+
+By default, the Make rules should compile and link with @samp{-g}, so
+that executable programs have debugging symbols. Otherwise, you are
+essentially helpless in the face of a crash, and it is often far from
+easy to reproduce with a fresh build.
+
+@item install
+Compile the program and copy the executables, libraries, and so on to
+the file names where they should reside for actual use. If there is a
+simple test to verify that a program is properly installed, this target
+should run that test.
+
+Do not strip executables when installing them. This helps eventual
+debugging that may be needed later, and nowadays disk space is cheap
+and dynamic loaders typically ensure debug sections are not loaded during
+normal execution. Users that need stripped binaries may invoke the
+@code{install-strip} target to do that.
+
+If possible, write the @code{install} target rule so that it does not
+modify anything in the directory where the program was built, provided
+@samp{make all} has just been done. This is convenient for building the
+program under one user name and installing it under another.
+
+The commands should create all the directories in which files are to be
+installed, if they don't already exist. This includes the directories
+specified as the values of the variables @code{prefix} and
+@code{exec_prefix}, as well as all subdirectories that are needed.
+One way to do this is by means of an @code{installdirs} target
+as described below.
+
+Use @samp{-} before any command for installing a man page, so that
+@code{make} will ignore any errors. This is in case there are systems
+that don't have the Unix man page documentation system installed.
+
+The way to install Info files is to copy them into @file{$(infodir)}
+with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run
+the @code{install-info} program if it is present. @code{install-info}
+is a program that edits the Info @file{dir} file to add or update the
+menu entry for the given Info file; it is part of the Texinfo package.
+
+Here is a sample rule to install an Info file that also tries to
+handle some additional situations, such as @code{install-info} not
+being present.
+
+@comment This example has been carefully formatted for the Make manual.
+@comment Please do not reformat it without talking to bug-make@gnu.org.
+@smallexample
+do-install-info: foo.info installdirs
+ $(NORMAL_INSTALL)
+# Prefer an info file in . to one in srcdir.
+ if test -f foo.info; then d=.; \
+ else d="$(srcdir)"; fi; \
+ $(INSTALL_DATA) $$d/foo.info \
+ "$(DESTDIR)$(infodir)/foo.info"
+# Run install-info only if it exists.
+# Use `if' instead of just prepending `-' to the
+# line so we notice real errors from install-info.
+# Use `$(SHELL) -c' because some shells do not
+# fail gracefully when there is an unknown command.
+ $(POST_INSTALL)
+ if $(SHELL) -c 'install-info --version' \
+ >/dev/null 2>&1; then \
+ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \
+ "$(DESTDIR)$(infodir)/foo.info"; \
+ else true; fi
+@end smallexample
+
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands. @xref{Install Command
+Categories}.
+
+@item install-html
+@itemx install-dvi
+@itemx install-pdf
+@itemx install-ps
+These targets install documentation in formats other than Info;
+they're intended to be called explicitly by the person installing the
+package, if that format is desired. GNU prefers Info files, so these
+must be installed by the @code{install} target.
+
+When you have many documentation files to install, we recommend that
+you avoid collisions and clutter by arranging for these targets to
+install in subdirectories of the appropriate installation directory,
+such as @code{htmldir}. As one example, if your package has multiple
+manuals, and you wish to install HTML documentation with many files
+(such as the ``split'' mode output by @code{makeinfo --html}), you'll
+certainly want to use subdirectories, or two nodes with the same name
+in different manuals will overwrite each other.
+
+Please make these @code{install-@var{format}} targets invoke the
+commands for the @var{format} target, for example, by making
+@var{format} a dependency.
+
+@item uninstall
+Delete all the installed files---the copies that the @samp{install}
+and @samp{install-*} targets create.
+
+This rule should not modify the directories where compilation is done,
+only the directories where files are installed.
+
+The uninstallation commands are divided into three categories, just like
+the installation commands. @xref{Install Command Categories}.
+
+@item install-strip
+Like @code{install}, but strip the executable files while installing
+them. In simple cases, this target can use the @code{install} target in
+a simple way:
+
+@smallexample
+install-strip:
+ $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+ install
+@end smallexample
+
+But if the package installs scripts as well as real executables, the
+@code{install-strip} target can't just refer to the @code{install}
+target; it has to strip the executables but not the scripts.
+
+@code{install-strip} should not strip the executables in the build
+directory which are being copied for installation. It should only strip
+the copies that are installed.
+
+Normally we do not recommend stripping an executable unless you are sure
+the program has no bugs. However, it can be reasonable to install a
+stripped executable for actual execution while saving the unstripped
+executable elsewhere in case there is a bug.
+
+@item clean
+Delete all files in the current directory that are normally created by
+building the program. Also delete files in other directories if they
+are created by this makefile. However, don't delete the files that
+record the configuration. Also preserve files that could be made by
+building, but normally aren't because the distribution comes with
+them. There is no need to delete parent directories that were created
+with @samp{mkdir -p}, since they could have existed anyway.
+
+Delete @file{.dvi} files here if they are not part of the distribution.
+
+@item distclean
+Delete all files in the current directory (or created by this
+makefile) that are created by configuring or building the program. If
+you have unpacked the source and built the program without creating
+any other files, @samp{make distclean} should leave only the files
+that were in the distribution. However, there is no need to delete
+parent directories that were created with @samp{mkdir -p}, since they
+could have existed anyway.
+
+@item mostlyclean
+Like @samp{clean}, but may refrain from deleting a few files that people
+normally don't want to recompile. For example, the @samp{mostlyclean}
+target for GCC does not delete @file{libgcc.a}, because recompiling it
+is rarely necessary and takes a lot of time.
+
+@item maintainer-clean
+Delete almost everything that can be reconstructed with this Makefile.
+This typically includes everything deleted by @code{distclean}, plus
+more: C source files produced by Bison, tags tables, Info files, and
+so on.
+
+The reason we say ``almost everything'' is that running the command
+@samp{make maintainer-clean} should not delete @file{configure} even
+if @file{configure} can be remade using a rule in the Makefile. More
+generally, @samp{make maintainer-clean} should not delete anything
+that needs to exist in order to run @file{configure} and then begin to
+build the program. Also, there is no need to delete parent
+directories that were created with @samp{mkdir -p}, since they could
+have existed anyway. These are the only exceptions;
+@code{maintainer-clean} should delete everything else that can be
+rebuilt.
+
+The @samp{maintainer-clean} target is intended to be used by a maintainer of
+the package, not by ordinary users. You may need special tools to
+reconstruct some of the files that @samp{make maintainer-clean} deletes.
+Since these files are normally included in the distribution, we don't
+take care to make them easy to reconstruct. If you find you need to
+unpack the full distribution again, don't blame us.
+
+To help make users aware of this, the commands for the special
+@code{maintainer-clean} target should start with these two:
+
+@smallexample
+@@echo 'This command is intended for maintainers to use; it'
+@@echo 'deletes files that may need special tools to rebuild.'
+@end smallexample
+
+@item TAGS
+Update a tags table for this program.
+@c ADR: how?
+
+@item info
+Generate any Info files needed. The best way to write the rules is as
+follows:
+
+@smallexample
+info: foo.info
+
+foo.info: foo.texi chap1.texi chap2.texi
+ $(MAKEINFO) $(srcdir)/foo.texi
+@end smallexample
+
+@noindent
+You must define the variable @code{MAKEINFO} in the Makefile. It should
+run the @code{makeinfo} program, which is part of the Texinfo
+distribution.
+
+Normally a GNU distribution comes with Info files, and that means the
+Info files are present in the source directory. Therefore, the Make
+rule for an info file should update it in the source directory. When
+users build the package, ordinarily Make will not update the Info files
+because they will already be up to date.
+
+@item dvi
+@itemx html
+@itemx pdf
+@itemx ps
+Generate documentation files in the given format. These targets
+should always exist, but any or all can be a no-op if the given output
+format cannot be generated. These targets should not be dependencies
+of the @code{all} target; the user must manually invoke them.
+
+Here's an example rule for generating DVI files from Texinfo:
+
+@smallexample
+dvi: foo.dvi
+
+foo.dvi: foo.texi chap1.texi chap2.texi
+ $(TEXI2DVI) $(srcdir)/foo.texi
+@end smallexample
+
+@noindent
+You must define the variable @code{TEXI2DVI} in the Makefile. It
+should run the program @code{texi2dvi}, which is part of the Texinfo
+distribution. (@code{texi2dvi} uses @TeX{} to do the real work of
+formatting. @TeX{} is not distributed with Texinfo.) Alternatively,
+write only the dependencies, and allow GNU @code{make} to provide the
+command.
+
+Here's another example, this one for generating HTML from Texinfo:
+
+@smallexample
+html: foo.html
+
+foo.html: foo.texi chap1.texi chap2.texi
+ $(TEXI2HTML) $(srcdir)/foo.texi
+@end smallexample
+
+@noindent
+Again, you would define the variable @code{TEXI2HTML} in the Makefile;
+for example, it might run @code{makeinfo --no-split --html}
+(@command{makeinfo} is part of the Texinfo distribution).
+
+@item dist
+Create a distribution tar file for this program. The tar file should be
+set up so that the file names in the tar file start with a subdirectory
+name which is the name of the package it is a distribution for. This
+name can include the version number.
+
+For example, the distribution tar file of GCC version 1.40 unpacks into
+a subdirectory named @file{gcc-1.40}.
+
+The easiest way to do this is to create a subdirectory appropriately
+named, use @code{ln} or @code{cp} to install the proper files in it, and
+then @code{tar} that subdirectory.
+
+Compress the tar file with @code{gzip}. For example, the actual
+distribution file for GCC version 1.40 is called @file{gcc-1.40.tar.gz}.
+It is ok to support other free compression formats as well.
+
+The @code{dist} target should explicitly depend on all non-source files
+that are in the distribution, to make sure they are up to date in the
+distribution.
+@ifset CODESTD
+@xref{Releases, , Making Releases}.
+@end ifset
+@ifclear CODESTD
+@xref{Releases, , Making Releases, standards, GNU Coding Standards}.
+@end ifclear
+
+@item check
+Perform self-tests (if any). The user must build the program before
+running the tests, but need not install the program; you should write
+the self-tests so that they work when the program is built but not
+installed.
+@end table
+
+The following targets are suggested as conventional names, for programs
+in which they are useful.
+
+@table @code
+@item installcheck
+Perform installation tests (if any). The user must build and install
+the program before running the tests. You should not assume that
+@file{$(bindir)} is in the search path.
+
+@item installdirs
+It's useful to add a target named @samp{installdirs} to create the
+directories where files are installed, and their parent directories.
+There is a script called @file{mkinstalldirs} which is convenient for
+this; you can find it in the Gnulib package.
+You can use a rule like this:
+
+@comment This has been carefully formatted to look decent in the Make manual.
+@comment Please be sure not to make it extend any further to the right.--roland
+@smallexample
+# Make sure all installation directories (e.g. $(bindir))
+# actually exist by making them if necessary.
+installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+ $(libdir) $(infodir) \
+ $(mandir)
+@end smallexample
+
+@noindent
+or, if you wish to support @env{DESTDIR} (strongly encouraged),
+
+@smallexample
+# Make sure all installation directories (e.g. $(bindir))
+# actually exist by making them if necessary.
+installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs \
+ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+ $(DESTDIR)$(mandir)
+@end smallexample
+
+This rule should not modify the directories where compilation is done.
+It should do nothing but create installation directories.
+@end table
+
+@node Install Command Categories
+@section Install Command Categories
+
+@cindex pre-installation commands
+@cindex post-installation commands
+When writing the @code{install} target, you must classify all the
+commands into three categories: normal ones, @dfn{pre-installation}
+commands and @dfn{post-installation} commands.
+
+Normal commands move files into their proper places, and set their
+modes. They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+Pre-installation and post-installation commands may alter other files;
+in particular, they can edit global configuration files or data bases.
+
+Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+The most common use for a post-installation command is to run
+@code{install-info}. This cannot be done with a normal command, since
+it alters a file (the Info directory) which does not come entirely and
+solely from the package being installed. It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+Most programs don't need any pre-installation commands, but we have the
+feature just in case it is needed.
+
+To classify the commands in the @code{install} rule into these three
+categories, insert @dfn{category lines} among them. A category line
+specifies the category for the commands that follow.
+
+A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end. There are three
+variables you can use, one for each category; the variable name
+specifies the category. Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+@emph{should not} define them in the makefile).
+
+Here are the three possible category lines, each with a comment that
+explains what it means:
+
+@smallexample
+ $(PRE_INSTALL) # @r{Pre-install commands follow.}
+ $(POST_INSTALL) # @r{Post-install commands follow.}
+ $(NORMAL_INSTALL) # @r{Normal commands follow.}
+@end smallexample
+
+If you don't use a category line at the beginning of the @code{install}
+rule, all the commands are classified as normal until the first category
+line. If you don't use any category lines, all the commands are
+classified as normal.
+
+These are the category lines for @code{uninstall}:
+
+@smallexample
+ $(PRE_UNINSTALL) # @r{Pre-uninstall commands follow.}
+ $(POST_UNINSTALL) # @r{Post-uninstall commands follow.}
+ $(NORMAL_UNINSTALL) # @r{Normal commands follow.}
+@end smallexample
+
+Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+If the @code{install} or @code{uninstall} target has any dependencies
+which act as subroutines of installation, then you should start
+@emph{each} dependency's commands with a category line, and start the
+main target's commands with a category line also. This way, you can
+ensure that each command is placed in the right category regardless of
+which of the dependencies actually run.
+
+Pre-installation and post-installation commands should not run any
+programs except for these:
+
+@example
+[ basename bash cat chgrp chmod chown cmp cp dd diff echo
+egrep expand expr false fgrep find getopt grep gunzip gzip
+hostname install install-info kill ldconfig ln ls md5sum
+mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+test touch true uname xargs yes
+@end example
+
+@cindex binary packages
+The reason for distinguishing the commands in this way is for the sake
+of making binary packages. Typically a binary package contains all the
+executables and other files that need to be installed, and has its own
+method of installing them---so it does not need to run the normal
+installation commands. But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+Programs to build binary packages work by extracting the
+pre-installation and post-installation commands. Here is one way of
+extracting the pre-installation commands (the @option{-s} option to
+@command{make} is needed to silence messages about entering
+subdirectories):
+
+@smallexample
+make -s -n install -o all \
+ PRE_INSTALL=pre-install \
+ POST_INSTALL=post-install \
+ NORMAL_INSTALL=normal-install \
+ | gawk -f pre-install.awk
+@end smallexample
+
+@noindent
+where the file @file{pre-install.awk} could contain this:
+
+@smallexample
+$0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@}
+on @{print $0@}
+$0 ~ /^pre-install[ \t]*$/ @{on = 1@}
+@end smallexample
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..b9e94c9
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 24 April 2012
+@set UPDATED-MONTH April 2012
+@set EDITION 2.69
+@set VERSION 2.69
diff --git a/doc/standards.info b/doc/standards.info
new file mode 100644
index 0000000..d3e05b2
--- /dev/null
+++ b/doc/standards.info
@@ -0,0 +1,5780 @@
+This is standards.info, produced by makeinfo version 4.13 from
+standards.texi.
+
+INFO-DIR-SECTION GNU organization
+START-INFO-DIR-ENTRY
+* Standards: (standards). GNU coding standards.
+END-INFO-DIR-ENTRY
+
+ The GNU coding standards, last updated April 7, 2012.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: standards.info, Node: Top, Next: Preface, Up: (dir)
+
+GNU Coding Standards
+********************
+
+The GNU coding standards, last updated April 7, 2012.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+* Menu:
+
+* Preface:: About the GNU Coding Standards.
+* Legal Issues:: Keeping free software free.
+* Design Advice:: General program design.
+* Program Behavior:: Program behavior for all programs
+* Writing C:: Making the best use of C.
+* Documentation:: Documenting programs.
+* Managing Releases:: The release process.
+* References:: Mentioning non-free software or documentation.
+* GNU Free Documentation License:: Copying and sharing this manual.
+* Index::
+
+
+File: standards.info, Node: Preface, Next: Legal Issues, Prev: Top, Up: Top
+
+1 About the GNU Coding Standards
+********************************
+
+The GNU Coding Standards were written by Richard Stallman and other GNU
+Project volunteers. Their purpose is to make the GNU system clean,
+consistent, and easy to install. This document can also be read as a
+guide to writing portable, robust and reliable programs. It focuses on
+programs written in C, but many of the rules and principles are useful
+even if you write in another programming language. The rules often
+state reasons for writing in a certain way.
+
+ If you did not obtain this file directly from the GNU project and
+recently, please check for a newer version. You can get the GNU Coding
+Standards from the GNU web server in many different formats, including
+the Texinfo source, PDF, HTML, DVI, plain text, and more, at:
+`http://www.gnu.org/prep/standards/'.
+
+ If you are maintaining an official GNU package, in addition to this
+document, please read and follow the GNU maintainer information (*note
+Contents: (maintain)Top.).
+
+ If you want to receive diffs for every change to these GNU documents,
+join the mailing list `gnustandards-commit@gnu.org', via the web
+interface at
+`http://lists.gnu.org/mailman/listinfo/gnustandards-commit'. Archives
+are also available there.
+
+ Please send corrections or suggestions for this document to
+<bug-standards@gnu.org>. If you make a suggestion, please include a
+suggested new wording for it, to help us consider the suggestion
+efficiently. We prefer a context diff to the Texinfo source, but if
+that's difficult for you, you can make a context diff for some other
+version of this document, or propose it in any way that makes it clear.
+The source repository for this document can be found at
+`http://savannah.gnu.org/projects/gnustandards'.
+
+ These standards cover the minimum of what is important when writing a
+GNU package. Likely, the need for additional standards will come up.
+Sometimes, you might suggest that such standards be added to this
+document. If you think your standards would be generally useful, please
+do suggest them.
+
+ You should also set standards for your package on many questions not
+addressed or not firmly specified here. The most important point is to
+be self-consistent--try to stick to the conventions you pick, and try
+to document them as much as possible. That way, your program will be
+more maintainable by others.
+
+ The GNU Hello program serves as an example of how to follow the GNU
+coding standards for a trivial program.
+`http://www.gnu.org/software/hello/hello.html'.
+
+ This release of the GNU Coding Standards was last updated April 7,
+2012.
+
+
+File: standards.info, Node: Legal Issues, Next: Design Advice, Prev: Preface, Up: Top
+
+2 Keeping Free Software Free
+****************************
+
+This chapter discusses how you can make sure that GNU software avoids
+legal difficulties, and other related issues.
+
+* Menu:
+
+* Reading Non-Free Code:: Referring to proprietary programs.
+* Contributions:: Accepting contributions.
+* Trademarks:: How we deal with trademark issues.
+
+
+File: standards.info, Node: Reading Non-Free Code, Next: Contributions, Up: Legal Issues
+
+2.1 Referring to Proprietary Programs
+=====================================
+
+Don't in any circumstances refer to Unix source code for or during your
+work on GNU! (Or to any other proprietary programs.)
+
+ If you have a vague recollection of the internals of a Unix program,
+this does not absolutely mean you can't write an imitation of it, but
+do try to organize the imitation internally along different lines,
+because this is likely to make the details of the Unix version
+irrelevant and dissimilar to your results.
+
+ For example, Unix utilities were generally optimized to minimize
+memory use; if you go for speed instead, your program will be very
+different. You could keep the entire input file in memory and scan it
+there instead of using stdio. Use a smarter algorithm discovered more
+recently than the Unix program. Eliminate use of temporary files. Do
+it in one pass instead of two (we did this in the assembler).
+
+ Or, on the contrary, emphasize simplicity instead of speed. For some
+applications, the speed of today's computers makes simpler algorithms
+adequate.
+
+ Or go for generality. For example, Unix programs often have static
+tables or fixed-size strings, which make for arbitrary limits; use
+dynamic allocation instead. Make sure your program handles NULs and
+other funny characters in the input files. Add a programming language
+for extensibility and write part of the program in that language.
+
+ Or turn some parts of the program into independently usable
+libraries. Or use a simple garbage collector instead of tracking
+precisely when to free memory, or use a new GNU facility such as
+obstacks.
+
+
+File: standards.info, Node: Contributions, Next: Trademarks, Prev: Reading Non-Free Code, Up: Legal Issues
+
+2.2 Accepting Contributions
+===========================
+
+If the program you are working on is copyrighted by the Free Software
+Foundation, then when someone else sends you a piece of code to add to
+the program, we need legal papers to use it--just as we asked you to
+sign papers initially. _Each_ person who makes a nontrivial
+contribution to a program must sign some sort of legal papers in order
+for us to have clear title to the program; the main author alone is not
+enough.
+
+ So, before adding in any contributions from other people, please tell
+us, so we can arrange to get the papers. Then wait until we tell you
+that we have received the signed papers, before you actually use the
+contribution.
+
+ This applies both before you release the program and afterward. If
+you receive diffs to fix a bug, and they make significant changes, we
+need legal papers for that change.
+
+ This also applies to comments and documentation files. For copyright
+law, comments and code are just text. Copyright applies to all kinds of
+text, so we need legal papers for all kinds.
+
+ We know it is frustrating to ask for legal papers; it's frustrating
+for us as well. But if you don't wait, you are going out on a limb--for
+example, what if the contributor's employer won't sign a disclaimer?
+You might have to take that code out again!
+
+ You don't need papers for changes of a few lines here or there, since
+they are not significant for copyright purposes. Also, you don't need
+papers if all you get from the suggestion is some ideas, not actual code
+which you use. For example, if someone sent you one implementation, but
+you write a different implementation of the same idea, you don't need to
+get papers.
+
+ The very worst thing is if you forget to tell us about the other
+contributor. We could be very embarrassed in court some day as a
+result.
+
+ We have more detailed advice for maintainers of GNU packages. If you
+have reached the stage of maintaining a GNU program (whether released
+or not), please take a look: *note Legal Matters: (maintain)Legal
+Matters.
+
+
+File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues
+
+2.3 Trademarks
+==============
+
+Please do not include any trademark acknowledgements in GNU software
+packages or documentation.
+
+ Trademark acknowledgements are the statements that such-and-such is a
+trademark of so-and-so. The GNU Project has no objection to the basic
+idea of trademarks, but these acknowledgements feel like kowtowing, and
+there is no legal requirement for them, so we don't use them.
+
+ What is legally required, as regards other people's trademarks, is to
+avoid using them in ways which a reader might reasonably understand as
+naming or labeling our own programs or activities. For example, since
+"Objective C" is (or at least was) a trademark, we made sure to say
+that we provide a "compiler for the Objective C language" rather than
+an "Objective C compiler". The latter would have been meant as a
+shorter way of saying the former, but it does not explicitly state the
+relationship, so it could be misinterpreted as using "Objective C" as a
+label for the compiler rather than for the language.
+
+ Please don't use "win" as an abbreviation for Microsoft Windows in
+GNU software or documentation. In hacker terminology, calling
+something a "win" is a form of praise. If you wish to praise Microsoft
+Windows when speaking on your own, by all means do so, but not in GNU
+software. Usually we write the name "Windows" in full, but when
+brevity is very important (as in file names and sometimes symbol
+names), we abbreviate it to "w". For instance, the files and functions
+in Emacs that deal with Windows start with `w32'.
+
+
+File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top
+
+3 General Program Design
+************************
+
+This chapter discusses some of the issues you should take into account
+when designing your program.
+
+* Menu:
+
+* Source Language:: Which languages to use.
+* Compatibility:: Compatibility with other implementations.
+* Using Extensions:: Using non-standard features.
+* Standard C:: Using standard C features.
+* Conditional Compilation:: Compiling code only if a conditional is true.
+
+
+File: standards.info, Node: Source Language, Next: Compatibility, Up: Design Advice
+
+3.1 Which Languages to Use
+==========================
+
+When you want to use a language that gets compiled and runs at high
+speed, the best language to use is C. Using another language is like
+using a non-standard feature: it will cause trouble for users. Even if
+GCC supports the other language, users may find it inconvenient to have
+to install the compiler for that other language in order to build your
+program. For example, if you write your program in C++, people will
+have to install the GNU C++ compiler in order to compile your program.
+
+ C has one other advantage over C++ and other compiled languages: more
+people know C, so more people will find it easy to read and modify the
+program if it is written in C.
+
+ So in general it is much better to use C, rather than the comparable
+alternatives.
+
+ But there are two exceptions to that conclusion:
+
+ * It is no problem to use another language to write a tool
+ specifically intended for use with that language. That is because
+ the only people who want to build the tool will be those who have
+ installed the other language anyway.
+
+ * If an application is of interest only to a narrow part of the
+ community, then the question of which language it is written in
+ has less effect on other people, so you may as well please
+ yourself.
+
+ Many programs are designed to be extensible: they include an
+interpreter for a language that is higher level than C. Often much of
+the program is written in that language, too. The Emacs editor
+pioneered this technique.
+
+ The standard extensibility interpreter for GNU software is Guile
+(`http://www.gnu.org/software/guile/'), which implements the language
+Scheme (an especially clean and simple dialect of Lisp). Guile also
+includes bindings for GTK+/GNOME, making it practical to write modern
+GUI functionality within Guile. We don't reject programs written in
+other "scripting languages" such as Perl and Python, but using Guile is
+very important for the overall consistency of the GNU system.
+
+
+File: standards.info, Node: Compatibility, Next: Using Extensions, Prev: Source Language, Up: Design Advice
+
+3.2 Compatibility with Other Implementations
+============================================
+
+With occasional exceptions, utility programs and libraries for GNU
+should be upward compatible with those in Berkeley Unix, and upward
+compatible with Standard C if Standard C specifies their behavior, and
+upward compatible with POSIX if POSIX specifies their behavior.
+
+ When these standards conflict, it is useful to offer compatibility
+modes for each of them.
+
+ Standard C and POSIX prohibit many kinds of extensions. Feel free
+to make the extensions anyway, and include a `--ansi', `--posix', or
+`--compatible' option to turn them off. However, if the extension has
+a significant chance of breaking any real programs or scripts, then it
+is not really upward compatible. So you should try to redesign its
+interface to make it upward compatible.
+
+ Many GNU programs suppress extensions that conflict with POSIX if the
+environment variable `POSIXLY_CORRECT' is defined (even if it is
+defined with a null value). Please make your program recognize this
+variable if appropriate.
+
+ When a feature is used only by users (not by programs or command
+files), and it is done poorly in Unix, feel free to replace it
+completely with something totally different and better. (For example,
+`vi' is replaced with Emacs.) But it is nice to offer a compatible
+feature as well. (There is a free `vi' clone, so we offer it.)
+
+ Additional useful features are welcome regardless of whether there
+is any precedent for them.
+
+
+File: standards.info, Node: Using Extensions, Next: Standard C, Prev: Compatibility, Up: Design Advice
+
+3.3 Using Non-standard Features
+===============================
+
+Many GNU facilities that already exist support a number of convenient
+extensions over the comparable Unix facilities. Whether to use these
+extensions in implementing your program is a difficult question.
+
+ On the one hand, using the extensions can make a cleaner program.
+On the other hand, people will not be able to build the program unless
+the other GNU tools are available. This might cause the program to
+work on fewer kinds of machines.
+
+ With some extensions, it might be easy to provide both alternatives.
+For example, you can define functions with a "keyword" `INLINE' and
+define that as a macro to expand into either `inline' or nothing,
+depending on the compiler.
+
+ In general, perhaps it is best not to use the extensions if you can
+straightforwardly do without them, but to use the extensions if they
+are a big improvement.
+
+ An exception to this rule are the large, established programs (such
+as Emacs) which run on a great variety of systems. Using GNU
+extensions in such programs would make many users unhappy, so we don't
+do that.
+
+ Another exception is for programs that are used as part of
+compilation: anything that must be compiled with other compilers in
+order to bootstrap the GNU compilation facilities. If these require
+the GNU compiler, then no one can compile them without having them
+installed already. That would be extremely troublesome in certain
+cases.
+
+
+File: standards.info, Node: Standard C, Next: Conditional Compilation, Prev: Using Extensions, Up: Design Advice
+
+3.4 Standard C and Pre-Standard C
+=================================
+
+1989 Standard C is widespread enough now that it is ok to use its
+features in new programs. There is one exception: do not ever use the
+"trigraph" feature of Standard C.
+
+ 1999 Standard C is not widespread yet, so please do not require its
+features in programs. It is ok to use its features if they are present.
+
+ However, it is easy to support pre-standard compilers in most
+programs, so if you know how to do that, feel free. If a program you
+are maintaining has such support, you should try to keep it working.
+
+ To support pre-standard C, instead of writing function definitions in
+standard prototype form,
+
+ int
+ foo (int x, int y)
+ ...
+
+write the definition in pre-standard style like this,
+
+ int
+ foo (x, y)
+ int x, y;
+ ...
+
+and use a separate declaration to specify the argument prototype:
+
+ int foo (int, int);
+
+ You need such a declaration anyway, in a header file, to get the
+benefit of prototypes in all the files where the function is called.
+And once you have the declaration, you normally lose nothing by writing
+the function definition in the pre-standard style.
+
+ This technique does not work for integer types narrower than `int'.
+If you think of an argument as being of a type narrower than `int',
+declare it as `int' instead.
+
+ There are a few special cases where this technique is hard to use.
+For example, if a function argument needs to hold the system type
+`dev_t', you run into trouble, because `dev_t' is shorter than `int' on
+some machines; but you cannot use `int' instead, because `dev_t' is
+wider than `int' on some machines. There is no type you can safely use
+on all machines in a non-standard definition. The only way to support
+non-standard C and pass such an argument is to check the width of
+`dev_t' using Autoconf and choose the argument type accordingly. This
+may not be worth the trouble.
+
+ In order to support pre-standard compilers that do not recognize
+prototypes, you may want to use a preprocessor macro like this:
+
+ /* Declare the prototype for a general external function. */
+ #if defined (__STDC__) || defined (WINDOWSNT)
+ #define P_(proto) proto
+ #else
+ #define P_(proto) ()
+ #endif
+
+
+File: standards.info, Node: Conditional Compilation, Prev: Standard C, Up: Design Advice
+
+3.5 Conditional Compilation
+===========================
+
+When supporting configuration options already known when building your
+program we prefer using `if (... )' over conditional compilation, as in
+the former case the compiler is able to perform more extensive checking
+of all possible code paths.
+
+ For example, please write
+
+ if (HAS_FOO)
+ ...
+ else
+ ...
+
+instead of:
+
+ #ifdef HAS_FOO
+ ...
+ #else
+ ...
+ #endif
+
+ A modern compiler such as GCC will generate exactly the same code in
+both cases, and we have been using similar techniques with good success
+in several projects. Of course, the former method assumes that
+`HAS_FOO' is defined as either 0 or 1.
+
+ While this is not a silver bullet solving all portability problems,
+and is not always appropriate, following this policy would have saved
+GCC developers many hours, or even days, per year.
+
+ In the case of function-like macros like `REVERSIBLE_CC_MODE' in GCC
+which cannot be simply used in `if (...)' statements, there is an easy
+workaround. Simply introduce another macro `HAS_REVERSIBLE_CC_MODE' as
+in the following example:
+
+ #ifdef REVERSIBLE_CC_MODE
+ #define HAS_REVERSIBLE_CC_MODE 1
+ #else
+ #define HAS_REVERSIBLE_CC_MODE 0
+ #endif
+
+
+File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design Advice, Up: Top
+
+4 Program Behavior for All Programs
+***********************************
+
+This chapter describes conventions for writing robust software. It
+also describes general standards for error messages, the command line
+interface, and how libraries should behave.
+
+* Menu:
+
+* Non-GNU Standards:: We consider standards such as POSIX;
+ we don't "obey" them.
+* Semantics:: Writing robust programs.
+* Libraries:: Library behavior.
+* Errors:: Formatting error messages.
+* User Interfaces:: Standards about interfaces generally.
+* Graphical Interfaces:: Standards for graphical interfaces.
+* Command-Line Interfaces:: Standards for command line interfaces.
+* Dynamic Plug-In Interfaces:: Standards for dynamic plug-in interfaces.
+* Option Table:: Table of long options.
+* OID Allocations:: Table of OID slots for GNU.
+* Memory Usage:: When and how to care about memory needs.
+* File Usage:: Which files to use, and where.
+
+
+File: standards.info, Node: Non-GNU Standards, Next: Semantics, Up: Program Behavior
+
+4.1 Non-GNU Standards
+=====================
+
+The GNU Project regards standards published by other organizations as
+suggestions, not orders. We consider those standards, but we do not
+"obey" them. In developing a GNU program, you should implement an
+outside standard's specifications when that makes the GNU system better
+overall in an objective sense. When it doesn't, you shouldn't.
+
+ In most cases, following published standards is convenient for
+users--it means that their programs or scripts will work more portably.
+For instance, GCC implements nearly all the features of Standard C as
+specified by that standard. C program developers would be unhappy if
+it did not. And GNU utilities mostly follow specifications of POSIX.2;
+shell script writers and users would be unhappy if our programs were
+incompatible.
+
+ But we do not follow either of these specifications rigidly, and
+there are specific points on which we decided not to follow them, so as
+to make the GNU system better for users.
+
+ For instance, Standard C says that nearly all extensions to C are
+prohibited. How silly! GCC implements many extensions, some of which
+were later adopted as part of the standard. If you want these
+constructs to give an error message as "required" by the standard, you
+must specify `--pedantic', which was implemented only so that we can
+say "GCC is a 100% implementation of the standard", not because there
+is any reason to actually use it.
+
+ POSIX.2 specifies that `df' and `du' must output sizes by default in
+units of 512 bytes. What users want is units of 1k, so that is what we
+do by default. If you want the ridiculous behavior "required" by
+POSIX, you must set the environment variable `POSIXLY_CORRECT' (which
+was originally going to be named `POSIX_ME_HARDER').
+
+ GNU utilities also depart from the letter of the POSIX.2
+specification when they support long-named command-line options, and
+intermixing options with ordinary arguments. This minor
+incompatibility with POSIX is never a problem in practice, and it is
+very useful.
+
+ In particular, don't reject a new feature, or remove an old one,
+merely because a standard says it is "forbidden" or "deprecated".
+
+
+File: standards.info, Node: Semantics, Next: Libraries, Prev: Non-GNU Standards, Up: Program Behavior
+
+4.2 Writing Robust Programs
+===========================
+
+Avoid arbitrary limits on the length or number of _any_ data structure,
+including file names, lines, files, and symbols, by allocating all data
+structures dynamically. In most Unix utilities, "long lines are
+silently truncated". This is not acceptable in a GNU utility.
+
+ Utilities reading files should not drop NUL characters, or any other
+nonprinting characters _including those with codes above 0177_. The
+only sensible exceptions would be utilities specifically intended for
+interface to certain types of terminals or printers that can't handle
+those characters. Whenever possible, try to make programs work
+properly with sequences of bytes that represent multibyte characters;
+UTF-8 is the most important.
+
+ Check every system call for an error return, unless you know you wish
+to ignore errors. Include the system error text (from `perror',
+`strerror', or equivalent) in _every_ error message resulting from a
+failing system call, as well as the name of the file if any and the
+name of the utility. Just "cannot open foo.c" or "stat failed" is not
+sufficient.
+
+ Check every call to `malloc' or `realloc' to see if it returned
+zero. Check `realloc' even if you are making the block smaller; in a
+system that rounds block sizes to a power of 2, `realloc' may get a
+different block if you ask for less space.
+
+ In Unix, `realloc' can destroy the storage block if it returns zero.
+GNU `realloc' does not have this bug: if it fails, the original block
+is unchanged. Feel free to assume the bug is fixed. If you wish to
+run your program on Unix, and wish to avoid lossage in this case, you
+can use the GNU `malloc'.
+
+ You must expect `free' to alter the contents of the block that was
+freed. Anything you want to fetch from the block, you must fetch before
+calling `free'.
+
+ If `malloc' fails in a noninteractive program, make that a fatal
+error. In an interactive program (one that reads commands from the
+user), it is better to abort the command and return to the command
+reader loop. This allows the user to kill other processes to free up
+virtual memory, and then try the command again.
+
+ Use `getopt_long' to decode arguments, unless the argument syntax
+makes this unreasonable.
+
+ When static storage is to be written in during program execution, use
+explicit C code to initialize it. Reserve C initialized declarations
+for data that will not be changed.
+
+ Try to avoid low-level interfaces to obscure Unix data structures
+(such as file directories, utmp, or the layout of kernel memory), since
+these are less likely to work compatibly. If you need to find all the
+files in a directory, use `readdir' or some other high-level interface.
+These are supported compatibly by GNU.
+
+ The preferred signal handling facilities are the BSD variant of
+`signal', and the POSIX `sigaction' function; the alternative USG
+`signal' interface is an inferior design.
+
+ Nowadays, using the POSIX signal functions may be the easiest way to
+make a program portable. If you use `signal', then on GNU/Linux
+systems running GNU libc version 1, you should include `bsd/signal.h'
+instead of `signal.h', so as to get BSD behavior. It is up to you
+whether to support systems where `signal' has only the USG behavior, or
+give up on them.
+
+ In error checks that detect "impossible" conditions, just abort.
+There is usually no point in printing any message. These checks
+indicate the existence of bugs. Whoever wants to fix the bugs will have
+to read the source code and run a debugger. So explain the problem with
+comments in the source. The relevant data will be in variables, which
+are easy to examine with the debugger, so there is no point moving them
+elsewhere.
+
+ Do not use a count of errors as the exit status for a program.
+_That does not work_, because exit status values are limited to 8 bits
+(0 through 255). A single run of the program might have 256 errors; if
+you try to return 256 as the exit status, the parent process will see 0
+as the status, and it will appear that the program succeeded.
+
+ If you make temporary files, check the `TMPDIR' environment
+variable; if that variable is defined, use the specified directory
+instead of `/tmp'.
+
+ In addition, be aware that there is a possible security problem when
+creating temporary files in world-writable directories. In C, you can
+avoid this problem by creating temporary files in this manner:
+
+ fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
+
+or by using the `mkstemps' function from Gnulib (*note mkstemps:
+(gnulib)mkstemps.).
+
+ In bash, use `set -C' (long name `noclobber') to avoid this problem.
+In addition, the `mktemp' utility is a more general solution for
+creating temporary files from shell scripts (*note mktemp invocation:
+(coreutils)mktemp invocation.).
+
+
+File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior
+
+4.3 Library Behavior
+====================
+
+Try to make library functions reentrant. If they need to do dynamic
+storage allocation, at least try to avoid any nonreentrancy aside from
+that of `malloc' itself.
+
+ Here are certain name conventions for libraries, to avoid name
+conflicts.
+
+ Choose a name prefix for the library, more than two characters long.
+All external function and variable names should start with this prefix.
+In addition, there should only be one of these in any given library
+member. This usually means putting each one in a separate source file.
+
+ An exception can be made when two external symbols are always used
+together, so that no reasonable program could use one without the
+other; then they can both go in the same file.
+
+ External symbols that are not documented entry points for the user
+should have names beginning with `_'. The `_' should be followed by
+the chosen name prefix for the library, to prevent collisions with
+other libraries. These can go in the same files with user entry points
+if you like.
+
+ Static functions and variables can be used as you like and need not
+fit any naming convention.
+
+
+File: standards.info, Node: Errors, Next: User Interfaces, Prev: Libraries, Up: Program Behavior
+
+4.4 Formatting Error Messages
+=============================
+
+Error messages from compilers should look like this:
+
+ SOURCEFILE:LINENO: MESSAGE
+
+If you want to mention the column number, use one of these formats:
+
+ SOURCEFILE:LINENO:COLUMN: MESSAGE
+ SOURCEFILE:LINENO.COLUMN: MESSAGE
+
+Line numbers should start from 1 at the beginning of the file, and
+column numbers should start from 1 at the beginning of the line. (Both
+of these conventions are chosen for compatibility.) Calculate column
+numbers assuming that space and all ASCII printing characters have
+equal width, and assuming tab stops every 8 columns. For non-ASCII
+characters, Unicode character widths should be used when in a UTF-8
+locale; GNU libc and GNU gnulib provide suitable `wcwidth' functions.
+
+ The error message can also give both the starting and ending
+positions of the erroneous text. There are several formats so that you
+can avoid redundant information such as a duplicate line number. Here
+are the possible formats:
+
+ SOURCEFILE:LINE1.COLUMN1-LINE2.COLUMN2: MESSAGE
+ SOURCEFILE:LINE1.COLUMN1-COLUMN2: MESSAGE
+ SOURCEFILE:LINE1-LINE2: MESSAGE
+
+When an error is spread over several files, you can use this format:
+
+ FILE1:LINE1.COLUMN1-FILE2:LINE2.COLUMN2: MESSAGE
+
+ Error messages from other noninteractive programs should look like
+this:
+
+ PROGRAM:SOURCEFILE:LINENO: MESSAGE
+
+when there is an appropriate source file, or like this:
+
+ PROGRAM: MESSAGE
+
+when there is no relevant source file.
+
+ If you want to mention the column number, use this format:
+
+ PROGRAM:SOURCEFILE:LINENO:COLUMN: MESSAGE
+
+ In an interactive program (one that is reading commands from a
+terminal), it is better not to include the program name in an error
+message. The place to indicate which program is running is in the
+prompt or with the screen layout. (When the same program runs with
+input from a source other than a terminal, it is not interactive and
+would do best to print error messages using the noninteractive style.)
+
+ The string MESSAGE should not begin with a capital letter when it
+follows a program name and/or file name, because that isn't the
+beginning of a sentence. (The sentence conceptually starts at the
+beginning of the line.) Also, it should not end with a period.
+
+ Error messages from interactive programs, and other messages such as
+usage messages, should start with a capital letter. But they should not
+end with a period.
+
+
+File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior
+
+4.5 Standards for Interfaces Generally
+======================================
+
+Please don't make the behavior of a utility depend on the name used to
+invoke it. It is useful sometimes to make a link to a utility with a
+different name, and that should not change what it does.
+
+ Instead, use a run time option or a compilation switch or both to
+select among the alternate behaviors.
+
+ Likewise, please don't make the behavior of the program depend on the
+type of output device it is used with. Device independence is an
+important principle of the system's design; do not compromise it merely
+to save someone from typing an option now and then. (Variation in error
+message syntax when using a terminal is ok, because that is a side issue
+that people do not depend on.)
+
+ If you think one behavior is most useful when the output is to a
+terminal, and another is most useful when the output is a file or a
+pipe, then it is usually best to make the default behavior the one that
+is useful with output to a terminal, and have an option for the other
+behavior.
+
+ Compatibility requires certain programs to depend on the type of
+output device. It would be disastrous if `ls' or `sh' did not do so in
+the way all users expect. In some of these cases, we supplement the
+program with a preferred alternate version that does not depend on the
+output device type. For example, we provide a `dir' program much like
+`ls' except that its default output format is always multi-column
+format.
+
+
+File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior
+
+4.6 Standards for Graphical Interfaces
+======================================
+
+When you write a program that provides a graphical user interface,
+please make it work with the X Window System and the GTK+ toolkit
+unless the functionality specifically requires some alternative (for
+example, "displaying jpeg images while in console mode").
+
+ In addition, please provide a command-line interface to control the
+functionality. (In many cases, the graphical user interface can be a
+separate program which invokes the command-line program.) This is so
+that the same jobs can be done from scripts.
+
+ Please also consider providing a D-bus interface for use from other
+running programs, such as within GNOME. (GNOME used to use CORBA for
+this, but that is being phased out.) In addition, consider providing a
+library interface (for use from C), and perhaps a keyboard-driven
+console interface (for use by users from console mode). Once you are
+doing the work to provide the functionality and the graphical
+interface, these won't be much extra work.
+
+
+File: standards.info, Node: Command-Line Interfaces, Next: Dynamic Plug-In Interfaces, Prev: Graphical Interfaces, Up: Program Behavior
+
+4.7 Standards for Command Line Interfaces
+=========================================
+
+It is a good idea to follow the POSIX guidelines for the command-line
+options of a program. The easiest way to do this is to use `getopt' to
+parse them. Note that the GNU version of `getopt' will normally permit
+options anywhere among the arguments unless the special argument `--'
+is used. This is not what POSIX specifies; it is a GNU extension.
+
+ Please define long-named options that are equivalent to the
+single-letter Unix-style options. We hope to make GNU more user
+friendly this way. This is easy to do with the GNU function
+`getopt_long'.
+
+ One of the advantages of long-named options is that they can be
+consistent from program to program. For example, users should be able
+to expect the "verbose" option of any GNU program which has one, to be
+spelled precisely `--verbose'. To achieve this uniformity, look at the
+table of common long-option names when you choose the option names for
+your program (*note Option Table::).
+
+ It is usually a good idea for file names given as ordinary arguments
+to be input files only; any output files would be specified using
+options (preferably `-o' or `--output'). Even if you allow an output
+file name as an ordinary argument for compatibility, try to provide an
+option as another way to specify it. This will lead to more consistency
+among GNU utilities, and fewer idiosyncrasies for users to remember.
+
+ All programs should support two standard options: `--version' and
+`--help'. CGI programs should accept these as command-line options,
+and also if given as the `PATH_INFO'; for instance, visiting
+`http://example.org/p.cgi/--help' in a browser should output the same
+information as invoking `p.cgi --help' from the command line.
+
+* Menu:
+
+* --version:: The standard output for --version.
+* --help:: The standard output for --help.
+
+
+File: standards.info, Node: --version, Next: --help, Up: Command-Line Interfaces
+
+4.7.1 `--version'
+-----------------
+
+The standard `--version' option should direct the program to print
+information about its name, version, origin and legal status, all on
+standard output, and then exit successfully. Other options and
+arguments should be ignored once this is seen, and the program should
+not perform its normal function.
+
+ The first line is meant to be easy for a program to parse; the
+version number proper starts after the last space. In addition, it
+contains the canonical name for this program, in this format:
+
+ GNU Emacs 19.30
+
+The program's name should be a constant string; _don't_ compute it from
+`argv[0]'. The idea is to state the standard or canonical name for the
+program, not its file name. There are other ways to find out the
+precise file name where a command is found in `PATH'.
+
+ If the program is a subsidiary part of a larger package, mention the
+package name in parentheses, like this:
+
+ emacsserver (GNU Emacs) 19.30
+
+If the package has a version number which is different from this
+program's version number, you can mention the package version number
+just before the close-parenthesis.
+
+ If you _need_ to mention the version numbers of libraries which are
+distributed separately from the package which contains this program,
+you can do so by printing an additional line of version info for each
+library you want to mention. Use the same format for these lines as for
+the first line.
+
+ Please do not mention all of the libraries that the program uses
+"just for completeness"--that would produce a lot of unhelpful clutter.
+Please mention library version numbers only if you find in practice that
+they are very important to you in debugging.
+
+ The following line, after the version number line or lines, should
+be a copyright notice. If more than one copyright notice is called
+for, put each on a separate line.
+
+ Next should follow a line stating the license, preferably using one
+of abbreviations below, and a brief statement that the program is free
+software, and that users are free to copy and change it. Also mention
+that there is no warranty, to the extent permitted by law. See
+recommended wording below.
+
+ It is ok to finish the output with a list of the major authors of the
+program, as a way of giving credit.
+
+ Here's an example of output that follows these rules:
+
+ GNU hello 2.3
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+ This is free software: you are free to change and redistribute it.
+ There is NO WARRANTY, to the extent permitted by law.
+
+ You should adapt this to your program, of course, filling in the
+proper year, copyright holder, name of program, and the references to
+distribution terms, and changing the rest of the wording as necessary.
+
+ This copyright notice only needs to mention the most recent year in
+which changes were made--there's no need to list the years for previous
+versions' changes. You don't have to mention the name of the program in
+these notices, if that is inconvenient, since it appeared in the first
+line. (The rules are different for copyright notices in source files;
+*note Copyright Notices: (maintain)Copyright Notices.)
+
+ Translations of the above lines must preserve the validity of the
+copyright notices (*note Internationalization::). If the translation's
+character set supports it, the `(C)' should be replaced with the
+copyright symbol, as follows:
+
+ (the official copyright symbol, which is the letter C in a circle);
+
+ Write the word "Copyright" exactly like that, in English. Do not
+translate it into another language. International treaties recognize
+the English word "Copyright"; translations into other languages do not
+have legal significance.
+
+ Finally, here is the table of our suggested license abbreviations.
+Any abbreviation can be followed by `vVERSION[+]', meaning that
+particular version, or later versions with the `+', as shown above.
+
+ In the case of exceptions for extra permissions with the GPL, we use
+`/' for a separator; the version number can follow the license
+abbreviation as usual, as in the examples below.
+
+GPL
+ GNU General Public License, `http://www.gnu.org/licenses/gpl.html'.
+
+LGPL
+ GNU Lesser General Public License,
+ `http://www.gnu.org/licenses/lgpl.html'.
+
+GPL/Ada
+ GNU GPL with the exception for Ada.
+
+Apache
+ The Apache Software Foundation license,
+ `http://www.apache.org/licenses'.
+
+Artistic
+ The Artistic license used for Perl,
+ `http://www.perlfoundation.org/legal'.
+
+Expat
+ The Expat license, `http://www.jclark.com/xml/copying.txt'.
+
+MPL
+ The Mozilla Public License, `http://www.mozilla.org/MPL/'.
+
+OBSD
+ The original (4-clause) BSD license, incompatible with the GNU GPL
+ `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6'.
+
+PHP
+ The license used for PHP, `http://www.php.net/license/'.
+
+public domain
+ The non-license that is being in the public domain,
+ `http://www.gnu.org/licenses/license-list.html#PublicDomain'.
+
+Python
+ The license for Python, `http://www.python.org/2.0.1/license.html'.
+
+RBSD
+ The revised (3-clause) BSD, compatible with the GNU GPL,
+ `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5'.
+
+X11
+ The simple non-copyleft license used for most versions of the X
+ Window System, `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3'.
+
+Zlib
+ The license for Zlib, `http://www.gzip.org/zlib/zlib_license.html'.
+
+
+ More information about these licenses and many more are on the GNU
+licensing web pages, `http://www.gnu.org/licenses/license-list.html'.
+
+
+File: standards.info, Node: --help, Prev: --version, Up: Command-Line Interfaces
+
+4.7.2 `--help'
+--------------
+
+The standard `--help' option should output brief documentation for how
+to invoke the program, on standard output, then exit successfully.
+Other options and arguments should be ignored once this is seen, and
+the program should not perform its normal function.
+
+ Near the end of the `--help' option's output, please place lines
+giving the email address for bug reports, the package's home page
+(normally <http://www.gnu.org/software/PKG>, and the general page for
+help using GNU programs. The format should be like this:
+
+ Report bugs to: MAILING-ADDRESS
+ PKG home page: <http://www.gnu.org/software/PKG/>
+ General help using GNU software: <http://www.gnu.org/gethelp/>
+
+ It is ok to mention other appropriate mailing lists and web pages.
+
+
+File: standards.info, Node: Dynamic Plug-In Interfaces, Next: Option Table, Prev: Command-Line Interfaces, Up: Program Behavior
+
+4.8 Standards for Dynamic Plug-in Interfaces
+============================================
+
+Another aspect of keeping free programs free is encouraging development
+of free plug-ins, and discouraging development of proprietary plug-ins.
+Many GNU programs will not have anything like plug-ins at all, but
+those that do should follow these practices.
+
+ First, the general plug-in architecture design should closely tie the
+plug-in to the original code, such that the plug-in and the base
+program are parts of one extended program. For GCC, for example,
+plug-ins receive and modify GCC's internal data structures, and so
+clearly form an extended program with the base GCC.
+
+ Second, you should require plug-in developers to affirm that their
+plug-ins are released under an appropriate license. This should be
+enforced with a simple programmatic check. For GCC, again for example,
+a plug-in must define the global symbol `plugin_is_GPL_compatible',
+thus asserting that the plug-in is released under a GPL-compatible
+license (*note Plugins: (gccint)Plugins.).
+
+ By adding this check to your program you are not creating a new legal
+requirement. The GPL itself requires plug-ins to be free software,
+licensed compatibly. As long as you have followed the first rule above
+to keep plug-ins closely tied to your original program, the GPL and AGPL
+already require those plug-ins to be released under a compatible
+license. The symbol definition in the plug-in--or whatever equivalent
+works best in your program--makes it harder for anyone who might
+distribute proprietary plug-ins to legally defend themselves. If a case
+about this got to court, we can point to that symbol as evidence that
+the plug-in developer understood that the license had this requirement.
+
+
+File: standards.info, Node: Option Table, Next: OID Allocations, Prev: Dynamic Plug-In Interfaces, Up: Program Behavior
+
+4.9 Table of Long Options
+=========================
+
+Here is a table of long options used by GNU programs. It is surely
+incomplete, but we aim to list all the options that a new program might
+want to be compatible with. If you use names not already in the table,
+please send <bug-standards@gnu.org> a list of them, with their
+meanings, so we can update the table.
+
+`after-date'
+ `-N' in `tar'.
+
+`all'
+ `-a' in `du', `ls', `nm', `stty', `uname', and `unexpand'.
+
+`all-text'
+ `-a' in `diff'.
+
+`almost-all'
+ `-A' in `ls'.
+
+`append'
+ `-a' in `etags', `tee', `time'; `-r' in `tar'.
+
+`archive'
+ `-a' in `cp'.
+
+`archive-name'
+ `-n' in `shar'.
+
+`arglength'
+ `-l' in `m4'.
+
+`ascii'
+ `-a' in `diff'.
+
+`assign'
+ `-v' in `gawk'.
+
+`assume-new'
+ `-W' in `make'.
+
+`assume-old'
+ `-o' in `make'.
+
+`auto-check'
+ `-a' in `recode'.
+
+`auto-pager'
+ `-a' in `wdiff'.
+
+`auto-reference'
+ `-A' in `ptx'.
+
+`avoid-wraps'
+ `-n' in `wdiff'.
+
+`background'
+ For server programs, run in the background.
+
+`backward-search'
+ `-B' in `ctags'.
+
+`basename'
+ `-f' in `shar'.
+
+`batch'
+ Used in GDB.
+
+`baud'
+ Used in GDB.
+
+`before'
+ `-b' in `tac'.
+
+`binary'
+ `-b' in `cpio' and `diff'.
+
+`bits-per-code'
+ `-b' in `shar'.
+
+`block-size'
+ Used in `cpio' and `tar'.
+
+`blocks'
+ `-b' in `head' and `tail'.
+
+`break-file'
+ `-b' in `ptx'.
+
+`brief'
+ Used in various programs to make output shorter.
+
+`bytes'
+ `-c' in `head', `split', and `tail'.
+
+`c++'
+ `-C' in `etags'.
+
+`catenate'
+ `-A' in `tar'.
+
+`cd'
+ Used in various programs to specify the directory to use.
+
+`changes'
+ `-c' in `chgrp' and `chown'.
+
+`classify'
+ `-F' in `ls'.
+
+`colons'
+ `-c' in `recode'.
+
+`command'
+ `-c' in `su'; `-x' in GDB.
+
+`compare'
+ `-d' in `tar'.
+
+`compat'
+ Used in `gawk'.
+
+`compress'
+ `-Z' in `tar' and `shar'.
+
+`concatenate'
+ `-A' in `tar'.
+
+`confirmation'
+ `-w' in `tar'.
+
+`context'
+ Used in `diff'.
+
+`copyleft'
+ `-W copyleft' in `gawk'.
+
+`copyright'
+ `-C' in `ptx', `recode', and `wdiff'; `-W copyright' in `gawk'.
+
+`core'
+ Used in GDB.
+
+`count'
+ `-q' in `who'.
+
+`count-links'
+ `-l' in `du'.
+
+`create'
+ Used in `tar' and `cpio'.
+
+`cut-mark'
+ `-c' in `shar'.
+
+`cxref'
+ `-x' in `ctags'.
+
+`date'
+ `-d' in `touch'.
+
+`debug'
+ `-d' in `make' and `m4'; `-t' in Bison.
+
+`define'
+ `-D' in `m4'.
+
+`defines'
+ `-d' in Bison and `ctags'.
+
+`delete'
+ `-D' in `tar'.
+
+`dereference'
+ `-L' in `chgrp', `chown', `cpio', `du', `ls', and `tar'.
+
+`dereference-args'
+ `-D' in `du'.
+
+`device'
+ Specify an I/O device (special file name).
+
+`diacritics'
+ `-d' in `recode'.
+
+`dictionary-order'
+ `-d' in `look'.
+
+`diff'
+ `-d' in `tar'.
+
+`digits'
+ `-n' in `csplit'.
+
+`directory'
+ Specify the directory to use, in various programs. In `ls', it
+ means to show directories themselves rather than their contents.
+ In `rm' and `ln', it means to not treat links to directories
+ specially.
+
+`discard-all'
+ `-x' in `strip'.
+
+`discard-locals'
+ `-X' in `strip'.
+
+`dry-run'
+ `-n' in `make'.
+
+`ed'
+ `-e' in `diff'.
+
+`elide-empty-files'
+ `-z' in `csplit'.
+
+`end-delete'
+ `-x' in `wdiff'.
+
+`end-insert'
+ `-z' in `wdiff'.
+
+`entire-new-file'
+ `-N' in `diff'.
+
+`environment-overrides'
+ `-e' in `make'.
+
+`eof'
+ `-e' in `xargs'.
+
+`epoch'
+ Used in GDB.
+
+`error-limit'
+ Used in `makeinfo'.
+
+`error-output'
+ `-o' in `m4'.
+
+`escape'
+ `-b' in `ls'.
+
+`exclude-from'
+ `-X' in `tar'.
+
+`exec'
+ Used in GDB.
+
+`exit'
+ `-x' in `xargs'.
+
+`exit-0'
+ `-e' in `unshar'.
+
+`expand-tabs'
+ `-t' in `diff'.
+
+`expression'
+ `-e' in `sed'.
+
+`extern-only'
+ `-g' in `nm'.
+
+`extract'
+ `-i' in `cpio'; `-x' in `tar'.
+
+`faces'
+ `-f' in `finger'.
+
+`fast'
+ `-f' in `su'.
+
+`fatal-warnings'
+ `-E' in `m4'.
+
+`file'
+ `-f' in `gawk', `info', `make', `mt', `sed', and `tar'.
+
+`field-separator'
+ `-F' in `gawk'.
+
+`file-prefix'
+ `-b' in Bison.
+
+`file-type'
+ `-F' in `ls'.
+
+`files-from'
+ `-T' in `tar'.
+
+`fill-column'
+ Used in `makeinfo'.
+
+`flag-truncation'
+ `-F' in `ptx'.
+
+`fixed-output-files'
+ `-y' in Bison.
+
+`follow'
+ `-f' in `tail'.
+
+`footnote-style'
+ Used in `makeinfo'.
+
+`force'
+ `-f' in `cp', `ln', `mv', and `rm'.
+
+`force-prefix'
+ `-F' in `shar'.
+
+`foreground'
+ For server programs, run in the foreground; in other words, don't
+ do anything special to run the server in the background.
+
+`format'
+ Used in `ls', `time', and `ptx'.
+
+`freeze-state'
+ `-F' in `m4'.
+
+`fullname'
+ Used in GDB.
+
+`gap-size'
+ `-g' in `ptx'.
+
+`get'
+ `-x' in `tar'.
+
+`graphic'
+ `-i' in `ul'.
+
+`graphics'
+ `-g' in `recode'.
+
+`group'
+ `-g' in `install'.
+
+`gzip'
+ `-z' in `tar' and `shar'.
+
+`hashsize'
+ `-H' in `m4'.
+
+`header'
+ `-h' in `objdump' and `recode'
+
+`heading'
+ `-H' in `who'.
+
+`help'
+ Used to ask for brief usage information.
+
+`here-delimiter'
+ `-d' in `shar'.
+
+`hide-control-chars'
+ `-q' in `ls'.
+
+`html'
+ In `makeinfo', output HTML.
+
+`idle'
+ `-u' in `who'.
+
+`ifdef'
+ `-D' in `diff'.
+
+`ignore'
+ `-I' in `ls'; `-x' in `recode'.
+
+`ignore-all-space'
+ `-w' in `diff'.
+
+`ignore-backups'
+ `-B' in `ls'.
+
+`ignore-blank-lines'
+ `-B' in `diff'.
+
+`ignore-case'
+ `-f' in `look' and `ptx'; `-i' in `diff' and `wdiff'.
+
+`ignore-errors'
+ `-i' in `make'.
+
+`ignore-file'
+ `-i' in `ptx'.
+
+`ignore-indentation'
+ `-I' in `etags'.
+
+`ignore-init-file'
+ `-f' in Oleo.
+
+`ignore-interrupts'
+ `-i' in `tee'.
+
+`ignore-matching-lines'
+ `-I' in `diff'.
+
+`ignore-space-change'
+ `-b' in `diff'.
+
+`ignore-zeros'
+ `-i' in `tar'.
+
+`include'
+ `-i' in `etags'; `-I' in `m4'.
+
+`include-dir'
+ `-I' in `make'.
+
+`incremental'
+ `-G' in `tar'.
+
+`info'
+ `-i', `-l', and `-m' in Finger.
+
+`init-file'
+ In some programs, specify the name of the file to read as the
+ user's init file.
+
+`initial'
+ `-i' in `expand'.
+
+`initial-tab'
+ `-T' in `diff'.
+
+`inode'
+ `-i' in `ls'.
+
+`interactive'
+ `-i' in `cp', `ln', `mv', `rm'; `-e' in `m4'; `-p' in `xargs';
+ `-w' in `tar'.
+
+`intermix-type'
+ `-p' in `shar'.
+
+`iso-8601'
+ Used in `date'
+
+`jobs'
+ `-j' in `make'.
+
+`just-print'
+ `-n' in `make'.
+
+`keep-going'
+ `-k' in `make'.
+
+`keep-files'
+ `-k' in `csplit'.
+
+`kilobytes'
+ `-k' in `du' and `ls'.
+
+`language'
+ `-l' in `etags'.
+
+`less-mode'
+ `-l' in `wdiff'.
+
+`level-for-gzip'
+ `-g' in `shar'.
+
+`line-bytes'
+ `-C' in `split'.
+
+`lines'
+ Used in `split', `head', and `tail'.
+
+`link'
+ `-l' in `cpio'.
+
+`lint'
+`lint-old'
+ Used in `gawk'.
+
+`list'
+ `-t' in `cpio'; `-l' in `recode'.
+
+`list'
+ `-t' in `tar'.
+
+`literal'
+ `-N' in `ls'.
+
+`load-average'
+ `-l' in `make'.
+
+`login'
+ Used in `su'.
+
+`machine'
+ Used in `uname'.
+
+`macro-name'
+ `-M' in `ptx'.
+
+`mail'
+ `-m' in `hello' and `uname'.
+
+`make-directories'
+ `-d' in `cpio'.
+
+`makefile'
+ `-f' in `make'.
+
+`mapped'
+ Used in GDB.
+
+`max-args'
+ `-n' in `xargs'.
+
+`max-chars'
+ `-n' in `xargs'.
+
+`max-lines'
+ `-l' in `xargs'.
+
+`max-load'
+ `-l' in `make'.
+
+`max-procs'
+ `-P' in `xargs'.
+
+`mesg'
+ `-T' in `who'.
+
+`message'
+ `-T' in `who'.
+
+`minimal'
+ `-d' in `diff'.
+
+`mixed-uuencode'
+ `-M' in `shar'.
+
+`mode'
+ `-m' in `install', `mkdir', and `mkfifo'.
+
+`modification-time'
+ `-m' in `tar'.
+
+`multi-volume'
+ `-M' in `tar'.
+
+`name-prefix'
+ `-a' in Bison.
+
+`nesting-limit'
+ `-L' in `m4'.
+
+`net-headers'
+ `-a' in `shar'.
+
+`new-file'
+ `-W' in `make'.
+
+`no-builtin-rules'
+ `-r' in `make'.
+
+`no-character-count'
+ `-w' in `shar'.
+
+`no-check-existing'
+ `-x' in `shar'.
+
+`no-common'
+ `-3' in `wdiff'.
+
+`no-create'
+ `-c' in `touch'.
+
+`no-defines'
+ `-D' in `etags'.
+
+`no-deleted'
+ `-1' in `wdiff'.
+
+`no-dereference'
+ `-d' in `cp'.
+
+`no-inserted'
+ `-2' in `wdiff'.
+
+`no-keep-going'
+ `-S' in `make'.
+
+`no-lines'
+ `-l' in Bison.
+
+`no-piping'
+ `-P' in `shar'.
+
+`no-prof'
+ `-e' in `gprof'.
+
+`no-regex'
+ `-R' in `etags'.
+
+`no-sort'
+ `-p' in `nm'.
+
+`no-splash'
+ Don't print a startup splash screen.
+
+`no-split'
+ Used in `makeinfo'.
+
+`no-static'
+ `-a' in `gprof'.
+
+`no-time'
+ `-E' in `gprof'.
+
+`no-timestamp'
+ `-m' in `shar'.
+
+`no-validate'
+ Used in `makeinfo'.
+
+`no-wait'
+ Used in `emacsclient'.
+
+`no-warn'
+ Used in various programs to inhibit warnings.
+
+`node'
+ `-n' in `info'.
+
+`nodename'
+ `-n' in `uname'.
+
+`nonmatching'
+ `-f' in `cpio'.
+
+`nstuff'
+ `-n' in `objdump'.
+
+`null'
+ `-0' in `xargs'.
+
+`number'
+ `-n' in `cat'.
+
+`number-nonblank'
+ `-b' in `cat'.
+
+`numeric-sort'
+ `-n' in `nm'.
+
+`numeric-uid-gid'
+ `-n' in `cpio' and `ls'.
+
+`nx'
+ Used in GDB.
+
+`old-archive'
+ `-o' in `tar'.
+
+`old-file'
+ `-o' in `make'.
+
+`one-file-system'
+ `-l' in `tar', `cp', and `du'.
+
+`only-file'
+ `-o' in `ptx'.
+
+`only-prof'
+ `-f' in `gprof'.
+
+`only-time'
+ `-F' in `gprof'.
+
+`options'
+ `-o' in `getopt', `fdlist', `fdmount', `fdmountd', and `fdumount'.
+
+`output'
+ In various programs, specify the output file name.
+
+`output-prefix'
+ `-o' in `shar'.
+
+`override'
+ `-o' in `rm'.
+
+`overwrite'
+ `-c' in `unshar'.
+
+`owner'
+ `-o' in `install'.
+
+`paginate'
+ `-l' in `diff'.
+
+`paragraph-indent'
+ Used in `makeinfo'.
+
+`parents'
+ `-p' in `mkdir' and `rmdir'.
+
+`pass-all'
+ `-p' in `ul'.
+
+`pass-through'
+ `-p' in `cpio'.
+
+`port'
+ `-P' in `finger'.
+
+`portability'
+ `-c' in `cpio' and `tar'.
+
+`posix'
+ Used in `gawk'.
+
+`prefix-builtins'
+ `-P' in `m4'.
+
+`prefix'
+ `-f' in `csplit'.
+
+`preserve'
+ Used in `tar' and `cp'.
+
+`preserve-environment'
+ `-p' in `su'.
+
+`preserve-modification-time'
+ `-m' in `cpio'.
+
+`preserve-order'
+ `-s' in `tar'.
+
+`preserve-permissions'
+ `-p' in `tar'.
+
+`print'
+ `-l' in `diff'.
+
+`print-chars'
+ `-L' in `cmp'.
+
+`print-data-base'
+ `-p' in `make'.
+
+`print-directory'
+ `-w' in `make'.
+
+`print-file-name'
+ `-o' in `nm'.
+
+`print-symdefs'
+ `-s' in `nm'.
+
+`printer'
+ `-p' in `wdiff'.
+
+`prompt'
+ `-p' in `ed'.
+
+`proxy'
+ Specify an HTTP proxy.
+
+`query-user'
+ `-X' in `shar'.
+
+`question'
+ `-q' in `make'.
+
+`quiet'
+ Used in many programs to inhibit the usual output. Every program
+ accepting `--quiet' should accept `--silent' as a synonym.
+
+`quiet-unshar'
+ `-Q' in `shar'
+
+`quote-name'
+ `-Q' in `ls'.
+
+`rcs'
+ `-n' in `diff'.
+
+`re-interval'
+ Used in `gawk'.
+
+`read-full-blocks'
+ `-B' in `tar'.
+
+`readnow'
+ Used in GDB.
+
+`recon'
+ `-n' in `make'.
+
+`record-number'
+ `-R' in `tar'.
+
+`recursive'
+ Used in `chgrp', `chown', `cp', `ls', `diff', and `rm'.
+
+`reference'
+ `-r' in `touch'.
+
+`references'
+ `-r' in `ptx'.
+
+`regex'
+ `-r' in `tac' and `etags'.
+
+`release'
+ `-r' in `uname'.
+
+`reload-state'
+ `-R' in `m4'.
+
+`relocation'
+ `-r' in `objdump'.
+
+`rename'
+ `-r' in `cpio'.
+
+`replace'
+ `-i' in `xargs'.
+
+`report-identical-files'
+ `-s' in `diff'.
+
+`reset-access-time'
+ `-a' in `cpio'.
+
+`reverse'
+ `-r' in `ls' and `nm'.
+
+`reversed-ed'
+ `-f' in `diff'.
+
+`right-side-defs'
+ `-R' in `ptx'.
+
+`same-order'
+ `-s' in `tar'.
+
+`same-permissions'
+ `-p' in `tar'.
+
+`save'
+ `-g' in `stty'.
+
+`se'
+ Used in GDB.
+
+`sentence-regexp'
+ `-S' in `ptx'.
+
+`separate-dirs'
+ `-S' in `du'.
+
+`separator'
+ `-s' in `tac'.
+
+`sequence'
+ Used by `recode' to chose files or pipes for sequencing passes.
+
+`shell'
+ `-s' in `su'.
+
+`show-all'
+ `-A' in `cat'.
+
+`show-c-function'
+ `-p' in `diff'.
+
+`show-ends'
+ `-E' in `cat'.
+
+`show-function-line'
+ `-F' in `diff'.
+
+`show-tabs'
+ `-T' in `cat'.
+
+`silent'
+ Used in many programs to inhibit the usual output. Every program
+ accepting `--silent' should accept `--quiet' as a synonym.
+
+`size'
+ `-s' in `ls'.
+
+`socket'
+ Specify a file descriptor for a network server to use for its
+ socket, instead of opening and binding a new socket. This
+ provides a way to run, in a non-privileged process, a server that
+ normally needs a reserved port number.
+
+`sort'
+ Used in `ls'.
+
+`source'
+ `-W source' in `gawk'.
+
+`sparse'
+ `-S' in `tar'.
+
+`speed-large-files'
+ `-H' in `diff'.
+
+`split-at'
+ `-E' in `unshar'.
+
+`split-size-limit'
+ `-L' in `shar'.
+
+`squeeze-blank'
+ `-s' in `cat'.
+
+`start-delete'
+ `-w' in `wdiff'.
+
+`start-insert'
+ `-y' in `wdiff'.
+
+`starting-file'
+ Used in `tar' and `diff' to specify which file within a directory
+ to start processing with.
+
+`statistics'
+ `-s' in `wdiff'.
+
+`stdin-file-list'
+ `-S' in `shar'.
+
+`stop'
+ `-S' in `make'.
+
+`strict'
+ `-s' in `recode'.
+
+`strip'
+ `-s' in `install'.
+
+`strip-all'
+ `-s' in `strip'.
+
+`strip-debug'
+ `-S' in `strip'.
+
+`submitter'
+ `-s' in `shar'.
+
+`suffix'
+ `-S' in `cp', `ln', `mv'.
+
+`suffix-format'
+ `-b' in `csplit'.
+
+`sum'
+ `-s' in `gprof'.
+
+`summarize'
+ `-s' in `du'.
+
+`symbolic'
+ `-s' in `ln'.
+
+`symbols'
+ Used in GDB and `objdump'.
+
+`synclines'
+ `-s' in `m4'.
+
+`sysname'
+ `-s' in `uname'.
+
+`tabs'
+ `-t' in `expand' and `unexpand'.
+
+`tabsize'
+ `-T' in `ls'.
+
+`terminal'
+ `-T' in `tput' and `ul'. `-t' in `wdiff'.
+
+`text'
+ `-a' in `diff'.
+
+`text-files'
+ `-T' in `shar'.
+
+`time'
+ Used in `ls' and `touch'.
+
+`timeout'
+ Specify how long to wait before giving up on some operation.
+
+`to-stdout'
+ `-O' in `tar'.
+
+`total'
+ `-c' in `du'.
+
+`touch'
+ `-t' in `make', `ranlib', and `recode'.
+
+`trace'
+ `-t' in `m4'.
+
+`traditional'
+ `-t' in `hello'; `-W traditional' in `gawk'; `-G' in `ed', `m4',
+ and `ptx'.
+
+`tty'
+ Used in GDB.
+
+`typedefs'
+ `-t' in `ctags'.
+
+`typedefs-and-c++'
+ `-T' in `ctags'.
+
+`typeset-mode'
+ `-t' in `ptx'.
+
+`uncompress'
+ `-z' in `tar'.
+
+`unconditional'
+ `-u' in `cpio'.
+
+`undefine'
+ `-U' in `m4'.
+
+`undefined-only'
+ `-u' in `nm'.
+
+`update'
+ `-u' in `cp', `ctags', `mv', `tar'.
+
+`usage'
+ Used in `gawk'; same as `--help'.
+
+`uuencode'
+ `-B' in `shar'.
+
+`vanilla-operation'
+ `-V' in `shar'.
+
+`verbose'
+ Print more information about progress. Many programs support this.
+
+`verify'
+ `-W' in `tar'.
+
+`version'
+ Print the version number.
+
+`version-control'
+ `-V' in `cp', `ln', `mv'.
+
+`vgrind'
+ `-v' in `ctags'.
+
+`volume'
+ `-V' in `tar'.
+
+`what-if'
+ `-W' in `make'.
+
+`whole-size-limit'
+ `-l' in `shar'.
+
+`width'
+ `-w' in `ls' and `ptx'.
+
+`word-regexp'
+ `-W' in `ptx'.
+
+`writable'
+ `-T' in `who'.
+
+`zeros'
+ `-z' in `gprof'.
+
+
+File: standards.info, Node: OID Allocations, Next: Memory Usage, Prev: Option Table, Up: Program Behavior
+
+4.10 OID Allocations
+====================
+
+The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the
+GNU Project (thanks to Werner Koch). These are used for SNMP, LDAP,
+X.509 certificates, and so on. The web site
+`http://www.alvestrand.no/objectid' has a (voluntary) listing of many
+OID assignments.
+
+ If you need a new slot for your GNU package, write
+<maintainers@gnu.org>. Here is a list of arcs currently assigned:
+
+
+ 1.3.6.1.4.1.11591 GNU
+
+ 1.3.6.1.4.1.11591.1 GNU Radius
+
+ 1.3.6.1.4.1.11591.2 GnuPG
+ 1.3.6.1.4.1.11591.2.1 notation
+ 1.3.6.1.4.1.11591.2.1.1 pkaAddress
+
+ 1.3.6.1.4.1.11591.3 GNU Radar
+
+ 1.3.6.1.4.1.11591.4 GNU GSS
+
+ 1.3.6.1.4.1.11591.5 GNU Mailutils
+
+ 1.3.6.1.4.1.11591.6 GNU Shishi
+
+ 1.3.6.1.4.1.11591.7 GNU Radio
+
+ 1.3.6.1.4.1.11591.8 GNU Dico
+
+ 1.3.6.1.4.1.11591.12 digestAlgorithm
+ 1.3.6.1.4.1.11591.12.2 TIGER/192
+ 1.3.6.1.4.1.11591.13 encryptionAlgorithm
+ 1.3.6.1.4.1.11591.13.2 Serpent
+ 1.3.6.1.4.1.11591.13.2.1 Serpent-128-ECB
+ 1.3.6.1.4.1.11591.13.2.2 Serpent-128-CBC
+ 1.3.6.1.4.1.11591.13.2.3 Serpent-128-OFB
+ 1.3.6.1.4.1.11591.13.2.4 Serpent-128-CFB
+ 1.3.6.1.4.1.11591.13.2.21 Serpent-192-ECB
+ 1.3.6.1.4.1.11591.13.2.22 Serpent-192-CBC
+ 1.3.6.1.4.1.11591.13.2.23 Serpent-192-OFB
+ 1.3.6.1.4.1.11591.13.2.24 Serpent-192-CFB
+ 1.3.6.1.4.1.11591.13.2.41 Serpent-256-ECB
+ 1.3.6.1.4.1.11591.13.2.42 Serpent-256-CBC
+ 1.3.6.1.4.1.11591.13.2.43 Serpent-256-OFB
+ 1.3.6.1.4.1.11591.13.2.44 Serpent-256-CFB
+ 1.3.6.1.4.1.11591.14 CRC algorithms
+ 1.3.6.1.4.1.11591.14.1 CRC 32
+
+
+File: standards.info, Node: Memory Usage, Next: File Usage, Prev: OID Allocations, Up: Program Behavior
+
+4.11 Memory Usage
+=================
+
+If a program typically uses just a few meg of memory, don't bother
+making any effort to reduce memory usage. For example, if it is
+impractical for other reasons to operate on files more than a few meg
+long, it is reasonable to read entire input files into memory to
+operate on them.
+
+ However, for programs such as `cat' or `tail', that can usefully
+operate on very large files, it is important to avoid using a technique
+that would artificially limit the size of files it can handle. If a
+program works by lines and could be applied to arbitrary user-supplied
+input files, it should keep only a line in memory, because this is not
+very hard and users will want to be able to operate on input files that
+are bigger than will fit in memory all at once.
+
+ If your program creates complicated data structures, just make them
+in memory and give a fatal error if `malloc' returns zero.
+
+ Memory analysis tools such as `valgrind' can be useful, but don't
+complicate a program merely to avoid their false alarms. For example,
+if memory is used until just before a process exits, don't free it
+simply to silence such a tool.
+
+
+File: standards.info, Node: File Usage, Prev: Memory Usage, Up: Program Behavior
+
+4.12 File Usage
+===============
+
+Programs should be prepared to operate when `/usr' and `/etc' are
+read-only file systems. Thus, if the program manages log files, lock
+files, backup files, score files, or any other files which are modified
+for internal purposes, these files should not be stored in `/usr' or
+`/etc'.
+
+ There are two exceptions. `/etc' is used to store system
+configuration information; it is reasonable for a program to modify
+files in `/etc' when its job is to update the system configuration.
+Also, if the user explicitly asks to modify one file in a directory, it
+is reasonable for the program to store other files in the same
+directory.
+
+
+File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Behavior, Up: Top
+
+5 Making The Best Use of C
+**************************
+
+This chapter provides advice on how best to use the C language when
+writing GNU software.
+
+* Menu:
+
+* Formatting:: Formatting your source code.
+* Comments:: Commenting your work.
+* Syntactic Conventions:: Clean use of C constructs.
+* Names:: Naming variables, functions, and files.
+* System Portability:: Portability among different operating systems.
+* CPU Portability:: Supporting the range of CPU types.
+* System Functions:: Portability and ``standard'' library functions.
+* Internationalization:: Techniques for internationalization.
+* Character Set:: Use ASCII by default.
+* Quote Characters:: Use "..." or '...' in the C locale.
+* Mmap:: How you can safely use `mmap'.
+
+
+File: standards.info, Node: Formatting, Next: Comments, Up: Writing C
+
+5.1 Formatting Your Source Code
+===============================
+
+It is important to put the open-brace that starts the body of a C
+function in column one, so that they will start a defun. Several tools
+look for open-braces in column one to find the beginnings of C
+functions. These tools will not work on code not formatted that way.
+
+ Avoid putting open-brace, open-parenthesis or open-bracket in column
+one when they are inside a function, so that they won't start a defun.
+The open-brace that starts a `struct' body can go in column one if you
+find it useful to treat that definition as a defun.
+
+ It is also important for function definitions to start the name of
+the function in column one. This helps people to search for function
+definitions, and may also help certain tools recognize them. Thus,
+using Standard C syntax, the format is this:
+
+ static char *
+ concat (char *s1, char *s2)
+ {
+ ...
+ }
+
+or, if you want to use traditional C syntax, format the definition like
+this:
+
+ static char *
+ concat (s1, s2) /* Name starts in column one here */
+ char *s1, *s2;
+ { /* Open brace in column one here */
+ ...
+ }
+
+ In Standard C, if the arguments don't fit nicely on one line, split
+it like this:
+
+ int
+ lots_of_args (int an_integer, long a_long, short a_short,
+ double a_double, float a_float)
+ ...
+
+ For `struct' and `enum' types, likewise put the braces in column
+one, unless the whole contents fits on one line:
+
+ struct foo
+ {
+ int a, b;
+ }
+or
+ struct foo { int a, b; }
+
+ The rest of this section gives our recommendations for other aspects
+of C formatting style, which is also the default style of the `indent'
+program in version 1.2 and newer. It corresponds to the options
+
+ -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
+ -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
+
+ We don't think of these recommendations as requirements, because it
+causes no problems for users if two different programs have different
+formatting styles.
+
+ But whatever style you use, please use it consistently, since a
+mixture of styles within one program tends to look ugly. If you are
+contributing changes to an existing program, please follow the style of
+that program.
+
+ For the body of the function, our recommended style looks like this:
+
+ if (x < foo (y, z))
+ haha = bar[4] + 5;
+ else
+ {
+ while (z)
+ {
+ haha += foo (z, z);
+ z--;
+ }
+ return ++x + bar ();
+ }
+
+ We find it easier to read a program when it has spaces before the
+open-parentheses and after the commas. Especially after the commas.
+
+ When you split an expression into multiple lines, split it before an
+operator, not after one. Here is the right way:
+
+ if (foo_this_is_long && bar > win (x, y, z)
+ && remaining_condition)
+
+ Try to avoid having two operators of different precedence at the same
+level of indentation. For example, don't write this:
+
+ mode = (inmode[j] == VOIDmode
+ || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
+ ? outmode[j] : inmode[j]);
+
+ Instead, use extra parentheses so that the indentation shows the
+nesting:
+
+ mode = ((inmode[j] == VOIDmode
+ || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
+ ? outmode[j] : inmode[j]);
+
+ Insert extra parentheses so that Emacs will indent the code properly.
+For example, the following indentation looks nice if you do it by hand,
+
+ v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+ + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
+
+but Emacs would alter it. Adding a set of parentheses produces
+something that looks equally nice, and which Emacs will preserve:
+
+ v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+ + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
+
+ Format do-while statements like this:
+
+ do
+ {
+ a = foo (a);
+ }
+ while (a > 0);
+
+ Please use formfeed characters (control-L) to divide the program into
+pages at logical places (but not within a function). It does not matter
+just how long the pages are, since they do not have to fit on a printed
+page. The formfeeds should appear alone on lines by themselves.
+
+
+File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Formatting, Up: Writing C
+
+5.2 Commenting Your Work
+========================
+
+Every program should start with a comment saying briefly what it is for.
+Example: `fmt - filter for simple filling of text'. This comment
+should be at the top of the source file containing the `main' function
+of the program.
+
+ Also, please write a brief comment at the start of each source file,
+with the file name and a line or two about the overall purpose of the
+file.
+
+ Please write the comments in a GNU program in English, because
+English is the one language that nearly all programmers in all
+countries can read. If you do not write English well, please write
+comments in English as well as you can, then ask other people to help
+rewrite them. If you can't write comments in English, please find
+someone to work with you and translate your comments into English.
+
+ Please put a comment on each function saying what the function does,
+what sorts of arguments it gets, and what the possible values of
+arguments mean and are used for. It is not necessary to duplicate in
+words the meaning of the C argument declarations, if a C type is being
+used in its customary fashion. If there is anything nonstandard about
+its use (such as an argument of type `char *' which is really the
+address of the second character of a string, not the first), or any
+possible values that would not work the way one would expect (such as,
+that strings containing newlines are not guaranteed to work), be sure
+to say so.
+
+ Also explain the significance of the return value, if there is one.
+
+ Please put two spaces after the end of a sentence in your comments,
+so that the Emacs sentence commands will work. Also, please write
+complete sentences and capitalize the first word. If a lower-case
+identifier comes at the beginning of a sentence, don't capitalize it!
+Changing the spelling makes it a different identifier. If you don't
+like starting a sentence with a lower case letter, write the sentence
+differently (e.g., "The identifier lower-case is ...").
+
+ The comment on a function is much clearer if you use the argument
+names to speak about the argument values. The variable name itself
+should be lower case, but write it in upper case when you are speaking
+about the value rather than the variable itself. Thus, "the inode
+number NODE_NUM" rather than "an inode".
+
+ There is usually no purpose in restating the name of the function in
+the comment before it, because readers can see that for themselves.
+There might be an exception when the comment is so long that the
+function itself would be off the bottom of the screen.
+
+ There should be a comment on each static variable as well, like this:
+
+ /* Nonzero means truncate lines in the display;
+ zero means continue them. */
+ int truncate_lines;
+
+ Every `#endif' should have a comment, except in the case of short
+conditionals (just a few lines) that are not nested. The comment should
+state the condition of the conditional that is ending, _including its
+sense_. `#else' should have a comment describing the condition _and
+sense_ of the code that follows. For example:
+
+ #ifdef foo
+ ...
+ #else /* not foo */
+ ...
+ #endif /* not foo */
+ #ifdef foo
+ ...
+ #endif /* foo */
+
+but, by contrast, write the comments this way for a `#ifndef':
+
+ #ifndef foo
+ ...
+ #else /* foo */
+ ...
+ #endif /* foo */
+ #ifndef foo
+ ...
+ #endif /* not foo */
+
+
+File: standards.info, Node: Syntactic Conventions, Next: Names, Prev: Comments, Up: Writing C
+
+5.3 Clean Use of C Constructs
+=============================
+
+Please explicitly declare the types of all objects. For example, you
+should explicitly declare all arguments to functions, and you should
+declare functions to return `int' rather than omitting the `int'.
+
+ Some programmers like to use the GCC `-Wall' option, and change the
+code whenever it issues a warning. If you want to do this, then do.
+Other programmers prefer not to use `-Wall', because it gives warnings
+for valid and legitimate code which they do not want to change. If you
+want to do this, then do. The compiler should be your servant, not
+your master.
+
+ Don't make the program ugly just to placate static analysis tools
+such as `lint', `clang', and GCC with extra warnings options such as
+`-Wconversion' and `-Wundef'. These tools can help find bugs and
+unclear code, but they can also generate so many false alarms that it
+hurts readability to silence them with unnecessary casts, wrappers, and
+other complications. For example, please don't insert casts to `void'
+or calls to do-nothing functions merely to pacify a lint checker.
+
+ Declarations of external functions and functions to appear later in
+the source file should all go in one place near the beginning of the
+file (somewhere before the first function definition in the file), or
+else should go in a header file. Don't put `extern' declarations inside
+functions.
+
+ It used to be common practice to use the same local variables (with
+names like `tem') over and over for different values within one
+function. Instead of doing this, it is better to declare a separate
+local variable for each distinct purpose, and give it a name which is
+meaningful. This not only makes programs easier to understand, it also
+facilitates optimization by good compilers. You can also move the
+declaration of each local variable into the smallest scope that includes
+all its uses. This makes the program even cleaner.
+
+ Don't use local variables or parameters that shadow global
+identifiers. GCC's `-Wshadow' option can detect this problem.
+
+ Don't declare multiple variables in one declaration that spans lines.
+Start a new declaration on each line, instead. For example, instead of
+this:
+
+ int foo,
+ bar;
+
+write either this:
+
+ int foo, bar;
+
+or this:
+
+ int foo;
+ int bar;
+
+(If they are global variables, each should have a comment preceding it
+anyway.)
+
+ When you have an `if'-`else' statement nested in another `if'
+statement, always put braces around the `if'-`else'. Thus, never write
+like this:
+
+ if (foo)
+ if (bar)
+ win ();
+ else
+ lose ();
+
+always like this:
+
+ if (foo)
+ {
+ if (bar)
+ win ();
+ else
+ lose ();
+ }
+
+ If you have an `if' statement nested inside of an `else' statement,
+either write `else if' on one line, like this,
+
+ if (foo)
+ ...
+ else if (bar)
+ ...
+
+with its `then'-part indented like the preceding `then'-part, or write
+the nested `if' within braces like this:
+
+ if (foo)
+ ...
+ else
+ {
+ if (bar)
+ ...
+ }
+
+ Don't declare both a structure tag and variables or typedefs in the
+same declaration. Instead, declare the structure tag separately and
+then use it to declare the variables or typedefs.
+
+ Try to avoid assignments inside `if'-conditions (assignments inside
+`while'-conditions are ok). For example, don't write this:
+
+ if ((foo = (char *) malloc (sizeof *foo)) == 0)
+ fatal ("virtual memory exhausted");
+
+instead, write this:
+
+ foo = (char *) malloc (sizeof *foo);
+ if (foo == 0)
+ fatal ("virtual memory exhausted");
+
+ This example uses zero without a cast as a null pointer constant.
+This is perfectly fine, except that a cast is needed when calling a
+varargs function or when using `sizeof'.
+
+
+File: standards.info, Node: Names, Next: System Portability, Prev: Syntactic Conventions, Up: Writing C
+
+5.4 Naming Variables, Functions, and Files
+==========================================
+
+The names of global variables and functions in a program serve as
+comments of a sort. So don't choose terse names--instead, look for
+names that give useful information about the meaning of the variable or
+function. In a GNU program, names should be English, like other
+comments.
+
+ Local variable names can be shorter, because they are used only
+within one context, where (presumably) comments explain their purpose.
+
+ Try to limit your use of abbreviations in symbol names. It is ok to
+make a few abbreviations, explain what they mean, and then use them
+frequently, but don't use lots of obscure abbreviations.
+
+ Please use underscores to separate words in a name, so that the Emacs
+word commands can be useful within them. Stick to lower case; reserve
+upper case for macros and `enum' constants, and for name-prefixes that
+follow a uniform convention.
+
+ For example, you should use names like `ignore_space_change_flag';
+don't use names like `iCantReadThis'.
+
+ Variables that indicate whether command-line options have been
+specified should be named after the meaning of the option, not after
+the option-letter. A comment should state both the exact meaning of
+the option and its letter. For example,
+
+ /* Ignore changes in horizontal whitespace (-b). */
+ int ignore_space_change_flag;
+
+ When you want to define names with constant integer values, use
+`enum' rather than `#define'. GDB knows about enumeration constants.
+
+ You might want to make sure that none of the file names would
+conflict if the files were loaded onto an MS-DOS file system which
+shortens the names. You can use the program `doschk' to test for this.
+
+ Some GNU programs were designed to limit themselves to file names of
+14 characters or less, to avoid file name conflicts if they are read
+into older System V systems. Please preserve this feature in the
+existing GNU programs that have it, but there is no need to do this in
+new GNU programs. `doschk' also reports file names longer than 14
+characters.
+
+
+File: standards.info, Node: System Portability, Next: CPU Portability, Prev: Names, Up: Writing C
+
+5.5 Portability between System Types
+====================================
+
+In the Unix world, "portability" refers to porting to different Unix
+versions. For a GNU program, this kind of portability is desirable, but
+not paramount.
+
+ The primary purpose of GNU software is to run on top of the GNU
+kernel, compiled with the GNU C compiler, on various types of CPU. So
+the kinds of portability that are absolutely necessary are quite
+limited. But it is important to support Linux-based GNU systems, since
+they are the form of GNU that is popular.
+
+ Beyond that, it is good to support the other free operating systems
+(*BSD), and it is nice to support other Unix-like systems if you want
+to. Supporting a variety of Unix-like systems is desirable, although
+not paramount. It is usually not too hard, so you may as well do it.
+But you don't have to consider it an obligation, if it does turn out to
+be hard.
+
+ The easiest way to achieve portability to most Unix-like systems is
+to use Autoconf. It's unlikely that your program needs to know more
+information about the host platform than Autoconf can provide, simply
+because most of the programs that need such knowledge have already been
+written.
+
+ Avoid using the format of semi-internal data bases (e.g.,
+directories) when there is a higher-level alternative (`readdir').
+
+ As for systems that are not like Unix, such as MSDOS, Windows, VMS,
+MVS, and older Macintosh systems, supporting them is often a lot of
+work. When that is the case, it is better to spend your time adding
+features that will be useful on GNU and GNU/Linux, rather than on
+supporting other incompatible systems.
+
+ If you do support Windows, please do not abbreviate it as "win". In
+hacker terminology, calling something a "win" is a form of praise.
+You're free to praise Microsoft Windows on your own if you want, but
+please don't do this in GNU packages. Instead of abbreviating
+"Windows" to "win", you can write it in full or abbreviate it to "woe"
+or "w". In GNU Emacs, for instance, we use `w32' in file names of
+Windows-specific files, but the macro for Windows conditionals is
+called `WINDOWSNT'.
+
+ It is a good idea to define the "feature test macro" `_GNU_SOURCE'
+when compiling your C files. When you compile on GNU or GNU/Linux,
+this will enable the declarations of GNU library extension functions,
+and that will usually give you a compiler error message if you define
+the same function names in some other way in your program. (You don't
+have to actually _use_ these functions, if you prefer to make the
+program more portable to other systems.)
+
+ But whether or not you use these GNU extensions, you should avoid
+using their names for any other meanings. Doing so would make it hard
+to move your code into other GNU programs.
+
+
+File: standards.info, Node: CPU Portability, Next: System Functions, Prev: System Portability, Up: Writing C
+
+5.6 Portability between CPUs
+============================
+
+Even GNU systems will differ because of differences among CPU
+types--for example, difference in byte ordering and alignment
+requirements. It is absolutely essential to handle these differences.
+However, don't make any effort to cater to the possibility that an
+`int' will be less than 32 bits. We don't support 16-bit machines in
+GNU.
+
+ Similarly, don't make any effort to cater to the possibility that
+`long' will be smaller than predefined types like `size_t'. For
+example, the following code is ok:
+
+ printf ("size = %lu\n", (unsigned long) sizeof array);
+ printf ("diff = %ld\n", (long) (pointer2 - pointer1));
+
+ 1989 Standard C requires this to work, and we know of only one
+counterexample: 64-bit programs on Microsoft Windows. We will leave it
+to those who want to port GNU programs to that environment to figure
+out how to do it.
+
+ Predefined file-size types like `off_t' are an exception: they are
+longer than `long' on many platforms, so code like the above won't work
+with them. One way to print an `off_t' value portably is to print its
+digits yourself, one by one.
+
+ Don't assume that the address of an `int' object is also the address
+of its least-significant byte. This is false on big-endian machines.
+Thus, don't make the following mistake:
+
+ int c;
+ ...
+ while ((c = getchar ()) != EOF)
+ write (file_descriptor, &c, 1);
+
+Instead, use `unsigned char' as follows. (The `unsigned' is for
+portability to unusual systems where `char' is signed and where there
+is integer overflow checking.)
+
+ int c;
+ while ((c = getchar ()) != EOF)
+ {
+ unsigned char u = c;
+ write (file_descriptor, &u, 1);
+ }
+
+ Avoid casting pointers to integers if you can. Such casts greatly
+reduce portability, and in most programs they are easy to avoid. In the
+cases where casting pointers to integers is essential--such as, a Lisp
+interpreter which stores type information as well as an address in one
+word--you'll have to make explicit provisions to handle different word
+sizes. You will also need to make provision for systems in which the
+normal range of addresses you can get from `malloc' starts far away
+from zero.
+
+
+File: standards.info, Node: System Functions, Next: Internationalization, Prev: CPU Portability, Up: Writing C
+
+5.7 Calling System Functions
+============================
+
+Historically, C implementations differed substantially, and many
+systems lacked a full implementation of ANSI/ISO C89. Nowadays,
+however, very few systems lack a C89 compiler and GNU C supports almost
+all of C99. Similarly, most systems implement POSIX.1-1993 libraries
+and tools, and many have POSIX.1-2001.
+
+ Hence, there is little reason to support old C or non-POSIX systems,
+and you may want to take advantage of C99 and POSIX-1.2001 to write
+clearer, more portable, or faster code. You should use standard
+interfaces where possible; but if GNU extensions make your program more
+maintainable, powerful, or otherwise better, don't hesitate to use
+them. In any case, don't make your own declaration of system
+functions; that's a recipe for conflict.
+
+ Despite the standards, nearly every library function has some sort of
+portability issue on some system or another. Here are some examples:
+
+`open'
+ Names with trailing `/''s are mishandled on many platforms.
+
+`printf'
+ `long double' may be unimplemented; floating values Infinity and
+ NaN are often mishandled; output for large precisions may be
+ incorrect.
+
+`readlink'
+ May return `int' instead of `ssize_t'.
+
+`scanf'
+ On Windows, `errno' is not set on failure.
+
+ Gnulib (http://www.gnu.org/software/gnulib/) is a big help in this
+regard. Gnulib provides implementations of standard interfaces on many
+of the systems that lack them, including portable implementations of
+enhanced GNU interfaces, thereby making their use portable, and of
+POSIX-1.2008 interfaces, some of which are missing even on up-to-date
+GNU systems.
+
+ Gnulib also provides many useful non-standard interfaces; for
+example, C implementations of standard data structures (hash tables,
+binary trees), error-checking type-safe wrappers for memory allocation
+functions (`xmalloc', `xrealloc'), and output of error messages.
+
+ Gnulib integrates with GNU Autoconf and Automake to remove much of
+the burden of writing portable code from the programmer: Gnulib makes
+your configure script automatically determine what features are missing
+and use the Gnulib code to supply the missing pieces.
+
+ The Gnulib and Autoconf manuals have extensive sections on
+portability: *note Introduction: (gnulib)Top. and *note Portable C and
+C++: (autoconf)Portable C and C++. Please consult them for many more
+details.
+
+
+File: standards.info, Node: Internationalization, Next: Character Set, Prev: System Functions, Up: Writing C
+
+5.8 Internationalization
+========================
+
+GNU has a library called GNU gettext that makes it easy to translate the
+messages in a program into various languages. You should use this
+library in every program. Use English for the messages as they appear
+in the program, and let gettext provide the way to translate them into
+other languages.
+
+ Using GNU gettext involves putting a call to the `gettext' macro
+around each string that might need translation--like this:
+
+ printf (gettext ("Processing file '%s'..."), file);
+
+This permits GNU gettext to replace the string `"Processing file
+'%s'..."' with a translated version.
+
+ Once a program uses gettext, please make a point of writing calls to
+`gettext' when you add new strings that call for translation.
+
+ Using GNU gettext in a package involves specifying a "text domain
+name" for the package. The text domain name is used to separate the
+translations for this package from the translations for other packages.
+Normally, the text domain name should be the same as the name of the
+package--for example, `coreutils' for the GNU core utilities.
+
+ To enable gettext to work well, avoid writing code that makes
+assumptions about the structure of words or sentences. When you want
+the precise text of a sentence to vary depending on the data, use two or
+more alternative string constants each containing a complete sentences,
+rather than inserting conditionalized words or phrases into a single
+sentence framework.
+
+ Here is an example of what not to do:
+
+ printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk");
+
+ If you apply gettext to all strings, like this,
+
+ printf (gettext ("%s is full"),
+ capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk"));
+
+the translator will hardly know that "disk" and "floppy disk" are meant
+to be substituted in the other string. Worse, in some languages (like
+French) the construction will not work: the translation of the word
+"full" depends on the gender of the first part of the sentence; it
+happens to be not the same for "disk" as for "floppy disk".
+
+ Complete sentences can be translated without problems:
+
+ printf (capacity > 5000000 ? gettext ("disk is full")
+ : gettext ("floppy disk is full"));
+
+ A similar problem appears at the level of sentence structure with
+this code:
+
+ printf ("# Implicit rule search has%s been done.\n",
+ f->tried_implicit ? "" : " not");
+
+Adding `gettext' calls to this code cannot give correct results for all
+languages, because negation in some languages requires adding words at
+more than one place in the sentence. By contrast, adding `gettext'
+calls does the job straightforwardly if the code starts out like this:
+
+ printf (f->tried_implicit
+ ? "# Implicit rule search has been done.\n",
+ : "# Implicit rule search has not been done.\n");
+
+ Another example is this one:
+
+ printf ("%d file%s processed", nfiles,
+ nfiles != 1 ? "s" : "");
+
+The problem with this example is that it assumes that plurals are made
+by adding `s'. If you apply gettext to the format string, like this,
+
+ printf (gettext ("%d file%s processed"), nfiles,
+ nfiles != 1 ? "s" : "");
+
+the message can use different words, but it will still be forced to use
+`s' for the plural. Here is a better way, with gettext being applied to
+the two strings independently:
+
+ printf ((nfiles != 1 ? gettext ("%d files processed")
+ : gettext ("%d file processed")),
+ nfiles);
+
+But this still doesn't work for languages like Polish, which has three
+plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23,
+24, ... and one for the rest. The GNU `ngettext' function solves this
+problem:
+
+ printf (ngettext ("%d files processed", "%d file processed", nfiles),
+ nfiles);
+
+
+File: standards.info, Node: Character Set, Next: Quote Characters, Prev: Internationalization, Up: Writing C
+
+5.9 Character Set
+=================
+
+Sticking to the ASCII character set (plain text, 7-bit characters) is
+preferred in GNU source code comments, text documents, and other
+contexts, unless there is good reason to do something else because of
+the application domain. For example, if source code deals with the
+French Revolutionary calendar, it is OK if its literal strings contain
+accented characters in month names like "Flore'al". Also, it is OK
+(but not required) to use non-ASCII characters to represent proper
+names of contributors in change logs (*note Change Logs::).
+
+ If you need to use non-ASCII characters, you should normally stick
+with one encoding, certainly within a single file. UTF-8 is likely to
+be the best choice.
+
+
+File: standards.info, Node: Quote Characters, Next: Mmap, Prev: Character Set, Up: Writing C
+
+5.10 Quote Characters
+=====================
+
+In the C locale, the output of GNU programs should stick to plain ASCII
+for quotation characters in messages to users: preferably 0x22 (`"') or
+0x27 (`'') for both opening and closing quotes. Although GNU programs
+traditionally used 0x60 (``') for opening and 0x27 (`'') for closing
+quotes, nowadays quotes ``like this'' are typically rendered
+asymmetrically, so quoting `"like this"' or `'like this'' typically
+looks better.
+
+ It is ok, but not required, for GNU programs to generate
+locale-specific quotes in non-C locales. For example:
+
+ printf (gettext ("Processing file '%s'..."), file);
+
+Here, a French translation might cause `gettext' to return the string
+`"Traitement de fichier < %s >..."', yielding quotes more appropriate
+for a French locale.
+
+ Sometimes a program may need to use opening and closing quotes
+directly. By convention, `gettext' translates the string `"`"' to the
+opening quote and the string `"'"' to the closing quote, and a program
+can use these translations. Generally, though, it is better to
+translate quote characters in the context of longer strings.
+
+ If the output of your program is ever likely to be parsed by another
+program, it is good to provide an option that makes this parsing
+reliable. For example, you could escape special characters using
+conventions from the C language or the Bourne shell. See for example
+the option `--quoting-style' of GNU `ls'.
+
+
+File: standards.info, Node: Mmap, Prev: Quote Characters, Up: Writing C
+
+5.11 Mmap
+=========
+
+Don't assume that `mmap' either works on all files or fails for all
+files. It may work on some files and fail on others.
+
+ The proper way to use `mmap' is to try it on the specific file for
+which you want to use it--and if `mmap' doesn't work, fall back on
+doing the job in another way using `read' and `write'.
+
+ The reason this precaution is needed is that the GNU kernel (the
+HURD) provides a user-extensible file system, in which there can be many
+different kinds of "ordinary files". Many of them support `mmap', but
+some do not. It is important to make programs handle all these kinds
+of files.
+
+
+File: standards.info, Node: Documentation, Next: Managing Releases, Prev: Writing C, Up: Top
+
+6 Documenting Programs
+**********************
+
+A GNU program should ideally come with full free documentation, adequate
+for both reference and tutorial purposes. If the package can be
+programmed or extended, the documentation should cover programming or
+extending it, as well as just using it.
+
+* Menu:
+
+* GNU Manuals:: Writing proper manuals.
+* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual.
+* Manual Structure Details:: Specific structure conventions.
+* License for Manuals:: Writing the distribution terms for a manual.
+* Manual Credits:: Giving credit to documentation contributors.
+* Printed Manuals:: Mentioning the printed manual.
+* NEWS File:: NEWS files supplement manuals.
+* Change Logs:: Recording changes.
+* Man Pages:: Man pages are secondary.
+* Reading other Manuals:: How far you can go in learning
+ from other manuals.
+
+
+File: standards.info, Node: GNU Manuals, Next: Doc Strings and Manuals, Up: Documentation
+
+6.1 GNU Manuals
+===============
+
+The preferred document format for the GNU system is the Texinfo
+formatting language. Every GNU package should (ideally) have
+documentation in Texinfo both for reference and for learners. Texinfo
+makes it possible to produce a good quality formatted book, using TeX,
+and to generate an Info file. It is also possible to generate HTML
+output from Texinfo source. See the Texinfo manual, either the
+hardcopy, or the on-line version available through `info' or the Emacs
+Info subsystem (`C-h i').
+
+ Nowadays some other formats such as Docbook and Sgmltexi can be
+converted automatically into Texinfo. It is ok to produce the Texinfo
+documentation by conversion this way, as long as it gives good results.
+
+ Make sure your manual is clear to a reader who knows nothing about
+the topic and reads it straight through. This means covering basic
+topics at the beginning, and advanced topics only later. This also
+means defining every specialized term when it is first used.
+
+ Programmers tend to carry over the structure of the program as the
+structure for its documentation. But this structure is not necessarily
+good for explaining how to use the program; it may be irrelevant and
+confusing for a user.
+
+ Instead, the right way to structure documentation is according to the
+concepts and questions that a user will have in mind when reading it.
+This principle applies at every level, from the lowest (ordering
+sentences in a paragraph) to the highest (ordering of chapter topics
+within the manual). Sometimes this structure of ideas matches the
+structure of the implementation of the software being documented--but
+often they are different. An important part of learning to write good
+documentation is to learn to notice when you have unthinkingly
+structured the documentation like the implementation, stop yourself,
+and look for better alternatives.
+
+ For example, each program in the GNU system probably ought to be
+documented in one manual; but this does not mean each program should
+have its own manual. That would be following the structure of the
+implementation, rather than the structure that helps the user
+understand.
+
+ Instead, each manual should cover a coherent _topic_. For example,
+instead of a manual for `diff' and a manual for `diff3', we have one
+manual for "comparison of files" which covers both of those programs,
+as well as `cmp'. By documenting these programs together, we can make
+the whole subject clearer.
+
+ The manual which discusses a program should certainly document all of
+the program's command-line options and all of its commands. It should
+give examples of their use. But don't organize the manual as a list of
+features. Instead, organize it logically, by subtopics. Address the
+questions that a user will ask when thinking about the job that the
+program does. Don't just tell the reader what each feature can do--say
+what jobs it is good for, and show how to use it for those jobs.
+Explain what is recommended usage, and what kinds of usage users should
+avoid.
+
+ In general, a GNU manual should serve both as tutorial and reference.
+It should be set up for convenient access to each topic through Info,
+and for reading straight through (appendixes aside). A GNU manual
+should give a good introduction to a beginner reading through from the
+start, and should also provide all the details that hackers want. The
+Bison manual is a good example of this--please take a look at it to see
+what we mean.
+
+ That is not as hard as it first sounds. Arrange each chapter as a
+logical breakdown of its topic, but order the sections, and write their
+text, so that reading the chapter straight through makes sense. Do
+likewise when structuring the book into chapters, and when structuring a
+section into paragraphs. The watchword is, _at each point, address the
+most fundamental and important issue raised by the preceding text._
+
+ If necessary, add extra chapters at the beginning of the manual which
+are purely tutorial and cover the basics of the subject. These provide
+the framework for a beginner to understand the rest of the manual. The
+Bison manual provides a good example of how to do this.
+
+ To serve as a reference, a manual should have an Index that list all
+the functions, variables, options, and important concepts that are part
+of the program. One combined Index should do for a short manual, but
+sometimes for a complex package it is better to use multiple indices.
+The Texinfo manual includes advice on preparing good index entries, see
+*note Making Index Entries: (texinfo)Index Entries, and see *note
+Defining the Entries of an Index: (texinfo)Indexing Commands.
+
+ Don't use Unix man pages as a model for how to write GNU
+documentation; most of them are terse, badly structured, and give
+inadequate explanation of the underlying concepts. (There are, of
+course, some exceptions.) Also, Unix man pages use a particular format
+which is different from what we use in GNU manuals.
+
+ Please include an email address in the manual for where to report
+bugs _in the text of the manual_.
+
+ Please do not use the term "pathname" that is used in Unix
+documentation; use "file name" (two words) instead. We use the term
+"path" only for search paths, which are lists of directory names.
+
+ Please do not use the term "illegal" to refer to erroneous input to
+a computer program. Please use "invalid" for this, and reserve the
+term "illegal" for activities prohibited by law.
+
+ Please do not write `()' after a function name just to indicate it
+is a function. `foo ()' is not a function, it is a function call with
+no arguments.
+
+
+File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation
+
+6.2 Doc Strings and Manuals
+===========================
+
+Some programming systems, such as Emacs, provide a documentation string
+for each function, command or variable. You may be tempted to write a
+reference manual by compiling the documentation strings and writing a
+little additional text to go around them--but you must not do it. That
+approach is a fundamental mistake. The text of well-written
+documentation strings will be entirely wrong for a manual.
+
+ A documentation string needs to stand alone--when it appears on the
+screen, there will be no other text to introduce or explain it.
+Meanwhile, it can be rather informal in style.
+
+ The text describing a function or variable in a manual must not stand
+alone; it appears in the context of a section or subsection. Other text
+at the beginning of the section should explain some of the concepts, and
+should often make some general points that apply to several functions or
+variables. The previous descriptions of functions and variables in the
+section will also have given information about the topic. A description
+written to stand alone would repeat some of that information; this
+redundancy looks bad. Meanwhile, the informality that is acceptable in
+a documentation string is totally unacceptable in a manual.
+
+ The only good way to use documentation strings in writing a good
+manual is to use them as a source of information for writing good text.
+
+
+File: standards.info, Node: Manual Structure Details, Next: License for Manuals, Prev: Doc Strings and Manuals, Up: Documentation
+
+6.3 Manual Structure Details
+============================
+
+The title page of the manual should state the version of the programs or
+packages documented in the manual. The Top node of the manual should
+also contain this information. If the manual is changing more
+frequently than or independent of the program, also state a version
+number for the manual in both of these places.
+
+ Each program documented in the manual should have a node named
+`PROGRAM Invocation' or `Invoking PROGRAM'. This node (together with
+its subnodes, if any) should describe the program's command line
+arguments and how to run it (the sort of information people would look
+for in a man page). Start with an `@example' containing a template for
+all the options and arguments that the program uses.
+
+ Alternatively, put a menu item in some menu whose item name fits one
+of the above patterns. This identifies the node which that item points
+to as the node for this purpose, regardless of the node's actual name.
+
+ The `--usage' feature of the Info reader looks for such a node or
+menu item in order to find the relevant text, so it is essential for
+every Texinfo file to have one.
+
+ If one manual describes several programs, it should have such a node
+for each program described in the manual.
+
+
+File: standards.info, Node: License for Manuals, Next: Manual Credits, Prev: Manual Structure Details, Up: Documentation
+
+6.4 License for Manuals
+=======================
+
+Please use the GNU Free Documentation License for all GNU manuals that
+are more than a few pages long. Likewise for a collection of short
+documents--you only need one copy of the GNU FDL for the whole
+collection. For a single short document, you can use a very permissive
+non-copyleft license, to avoid taking up space with a long license.
+
+ See `http://www.gnu.org/copyleft/fdl-howto.html' for more explanation
+of how to employ the GFDL.
+
+ Note that it is not obligatory to include a copy of the GNU GPL or
+GNU LGPL in a manual whose license is neither the GPL nor the LGPL. It
+can be a good idea to include the program's license in a large manual;
+in a short manual, whose size would be increased considerably by
+including the program's license, it is probably better not to include
+it.
+
+
+File: standards.info, Node: Manual Credits, Next: Printed Manuals, Prev: License for Manuals, Up: Documentation
+
+6.5 Manual Credits
+==================
+
+Please credit the principal human writers of the manual as the authors,
+on the title page of the manual. If a company sponsored the work, thank
+the company in a suitable place in the manual, but do not cite the
+company as an author.
+
+
+File: standards.info, Node: Printed Manuals, Next: NEWS File, Prev: Manual Credits, Up: Documentation
+
+6.6 Printed Manuals
+===================
+
+The FSF publishes some GNU manuals in printed form. To encourage sales
+of these manuals, the on-line versions of the manual should mention at
+the very start that the printed manual is available and should point at
+information for getting it--for instance, with a link to the page
+`http://www.gnu.org/order/order.html'. This should not be included in
+the printed manual, though, because there it is redundant.
+
+ It is also useful to explain in the on-line forms of the manual how
+the user can print out the manual from the sources.
+
+
+File: standards.info, Node: NEWS File, Next: Change Logs, Prev: Printed Manuals, Up: Documentation
+
+6.7 The NEWS File
+=================
+
+In addition to its manual, the package should have a file named `NEWS'
+which contains a list of user-visible changes worth mentioning. In
+each new release, add items to the front of the file and identify the
+version they pertain to. Don't discard old items; leave them in the
+file after the newer items. This way, a user upgrading from any
+previous version can see what is new.
+
+ If the `NEWS' file gets very long, move some of the older items into
+a file named `ONEWS' and put a note at the end referring the user to
+that file.
+
+
+File: standards.info, Node: Change Logs, Next: Man Pages, Prev: NEWS File, Up: Documentation
+
+6.8 Change Logs
+===============
+
+Keep a change log to describe all the changes made to program source
+files. The purpose of this is so that people investigating bugs in the
+future will know about the changes that might have introduced the bug.
+Often a new bug can be found by looking at what was recently changed.
+More importantly, change logs can help you eliminate conceptual
+inconsistencies between different parts of a program, by giving you a
+history of how the conflicting concepts arose and who they came from.
+
+* Menu:
+
+* Change Log Concepts::
+* Style of Change Logs::
+* Simple Changes::
+* Conditional Changes::
+* Indicating the Part Changed::
+
+
+File: standards.info, Node: Change Log Concepts, Next: Style of Change Logs, Up: Change Logs
+
+6.8.1 Change Log Concepts
+-------------------------
+
+You can think of the change log as a conceptual "undo list" which
+explains how earlier versions were different from the current version.
+People can see the current version; they don't need the change log to
+tell them what is in it. What they want from a change log is a clear
+explanation of how the earlier version differed.
+
+ The change log file is normally called `ChangeLog' and covers an
+entire directory. Each directory can have its own change log, or a
+directory can use the change log of its parent directory--it's up to
+you.
+
+ Another alternative is to record change log information with a
+version control system such as RCS or CVS. This can be converted
+automatically to a `ChangeLog' file using `rcs2log'; in Emacs, the
+command `C-x v a' (`vc-update-change-log') does the job.
+
+ There's no need to describe the full purpose of the changes or how
+they work together. However, sometimes it is useful to write one line
+to describe the overall purpose of a change or a batch of changes. If
+you think that a change calls for explanation, you're probably right.
+Please do explain it--but please put the full explanation in comments
+in the code, where people will see it whenever they see the code. For
+example, "New function" is enough for the change log when you add a
+function, because there should be a comment before the function
+definition to explain what it does.
+
+ In the past, we recommended not mentioning changes in non-software
+files (manuals, help files, etc.) in change logs. However, we've been
+advised that it is a good idea to include them, for the sake of
+copyright records.
+
+ The easiest way to add an entry to `ChangeLog' is with the Emacs
+command `M-x add-change-log-entry'. An entry should have an asterisk,
+the name of the changed file, and then in parentheses the name of the
+changed functions, variables or whatever, followed by a colon. Then
+describe the changes you made to that function or variable.
+
+
+File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: Change Log Concepts, Up: Change Logs
+
+6.8.2 Style of Change Logs
+--------------------------
+
+Here are some simple examples of change log entries, starting with the
+header line that says who made the change and when it was installed,
+followed by descriptions of specific changes. (These examples are
+drawn from Emacs and GCC.)
+
+ 1998-08-17 Richard Stallman <rms@gnu.org>
+
+ * register.el (insert-register): Return nil.
+ (jump-to-register): Likewise.
+
+ * sort.el (sort-subr): Return nil.
+
+ * tex-mode.el (tex-bibtex-file, tex-file, tex-region):
+ Restart the tex shell if process is gone or stopped.
+ (tex-shell-running): New function.
+
+ * expr.c (store_one_arg): Round size up for move_block_to_reg.
+ (expand_call): Round up when emitting USE insns.
+ * stmt.c (assign_parms): Round size up for move_block_from_reg.
+
+ It's important to name the changed function or variable in full.
+Don't abbreviate function or variable names, and don't combine them.
+Subsequent maintainers will often search for a function name to find all
+the change log entries that pertain to it; if you abbreviate the name,
+they won't find it when they search.
+
+ For example, some people are tempted to abbreviate groups of function
+names by writing `* register.el ({insert,jump-to}-register)'; this is
+not a good idea, since searching for `jump-to-register' or
+`insert-register' would not find that entry.
+
+ Separate unrelated change log entries with blank lines. When two
+entries represent parts of the same change, so that they work together,
+then don't put blank lines between them. Then you can omit the file
+name and the asterisk when successive entries are in the same file.
+
+ Break long lists of function names by closing continued lines with
+`)', rather than `,', and opening the continuation with `(' as in this
+example:
+
+ * keyboard.c (menu_bar_items, tool_bar_items)
+ (Fexecute_extended_command): Deal with 'keymap' property.
+
+ When you install someone else's changes, put the contributor's name
+in the change log entry rather than in the text of the entry. In other
+words, write this:
+
+ 2002-07-14 John Doe <jdoe@gnu.org>
+
+ * sewing.c: Make it sew.
+
+rather than this:
+
+ 2002-07-14 Usual Maintainer <usual@gnu.org>
+
+ * sewing.c: Make it sew. Patch by jdoe@gnu.org.
+
+ As for the date, that should be the date you applied the change.
+
+
+File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs
+
+6.8.3 Simple Changes
+--------------------
+
+Certain simple kinds of changes don't need much detail in the change
+log.
+
+ When you change the calling sequence of a function in a simple
+fashion, and you change all the callers of the function to use the new
+calling sequence, there is no need to make individual entries for all
+the callers that you changed. Just write in the entry for the function
+being called, "All callers changed"--like this:
+
+ * keyboard.c (Fcommand_execute): New arg SPECIAL.
+ All callers changed.
+
+ When you change just comments or doc strings, it is enough to write
+an entry for the file, without mentioning the functions. Just "Doc
+fixes" is enough for the change log.
+
+ There's no technical need to make change log entries for
+documentation files. This is because documentation is not susceptible
+to bugs that are hard to fix. Documentation does not consist of parts
+that must interact in a precisely engineered fashion. To correct an
+error, you need not know the history of the erroneous passage; it is
+enough to compare what the documentation says with the way the program
+actually works.
+
+ However, you should keep change logs for documentation files when the
+project gets copyright assignments from its contributors, so as to make
+the records of authorship more accurate.
+
+
+File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs
+
+6.8.4 Conditional Changes
+-------------------------
+
+Source files can often contain code that is conditional to build-time
+or static conditions. For example, C programs can contain compile-time
+`#if' conditionals; programs implemented in interpreted languages can
+contain module imports of function definitions that are only performed
+for certain versions of the interpreter; and Automake `Makefile.am'
+files can contain variable definitions or target declarations that are
+only to be considered if a configure-time Automake conditional is true.
+
+ Many changes are conditional as well: sometimes you add a new
+variable, or function, or even a new program or library, which is
+entirely dependent on a build-time condition. It is useful to indicate
+in the change log the conditions for which a change applies.
+
+ Our convention for indicating conditional changes is to use _square
+brackets around the name of the condition_.
+
+ Conditional changes can happen in numerous scenarios and with many
+variations, so here are some examples to help clarify. This first
+example describes changes in C, Perl, and Python files which are
+conditional but do not have an associated function or entity name:
+
+ * xterm.c [SOLARIS2]: Include <string.h>.
+ * FilePath.pm [$^O eq 'VMS']: Import the VMS::Feature module.
+ * framework.py [sys.version_info < (2, 6)]: Make "with" statement
+ available by importing it from __future__,
+ to support also python 2.5.
+
+ Our other examples will for simplicity be limited to C, as the minor
+changes necessary to adapt them to other languages should be
+self-evident.
+
+ Next, here is an entry describing a new definition which is entirely
+conditional: the C macro `FRAME_WINDOW_P' is defined (and used) only
+when the macro `HAVE_X_WINDOWS' is defined:
+
+ * frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
+
+ Next, an entry for a change within the function `init_display',
+whose definition as a whole is unconditional, but the changes
+themselves are contained in a `#ifdef HAVE_LIBNCURSES' conditional:
+
+ * dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
+
+ Finally, here is an entry for a change that takes effect only when a
+certain macro is _not_ defined:
+
+ (gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
+
+
+File: standards.info, Node: Indicating the Part Changed, Prev: Conditional Changes, Up: Change Logs
+
+6.8.5 Indicating the Part Changed
+---------------------------------
+
+Indicate the part of a function which changed by using angle brackets
+enclosing an indication of what the changed part does. Here is an entry
+for a change in the part of the function `sh-while-getopts' that deals
+with `sh' commands:
+
+ * progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
+ user-specified option string is empty.
+
+
+File: standards.info, Node: Man Pages, Next: Reading other Manuals, Prev: Change Logs, Up: Documentation
+
+6.9 Man Pages
+=============
+
+In the GNU project, man pages are secondary. It is not necessary or
+expected for every GNU program to have a man page, but some of them do.
+It's your choice whether to include a man page in your program.
+
+ When you make this decision, consider that supporting a man page
+requires continual effort each time the program is changed. The time
+you spend on the man page is time taken away from more useful work.
+
+ For a simple program which changes little, updating the man page may
+be a small job. Then there is little reason not to include a man page,
+if you have one.
+
+ For a large program that changes a great deal, updating a man page
+may be a substantial burden. If a user offers to donate a man page,
+you may find this gift costly to accept. It may be better to refuse
+the man page unless the same person agrees to take full responsibility
+for maintaining it--so that you can wash your hands of it entirely. If
+this volunteer later ceases to do the job, then don't feel obliged to
+pick it up yourself; it may be better to withdraw the man page from the
+distribution until someone else agrees to update it.
+
+ When a program changes only a little, you may feel that the
+discrepancies are small enough that the man page remains useful without
+updating. If so, put a prominent note near the beginning of the man
+page explaining that you don't maintain it and that the Texinfo manual
+is more authoritative. The note should say how to access the Texinfo
+documentation.
+
+ Be sure that man pages include a copyright statement and free
+license. The simple all-permissive license is appropriate for simple
+man pages (*note License Notices for Other Files: (maintain)License
+Notices for Other Files.).
+
+ For long man pages, with enough explanation and documentation that
+they can be considered true manuals, use the GFDL (*note License for
+Manuals::).
+
+ Finally, the GNU help2man program
+(`http://www.gnu.org/software/help2man/') is one way to automate
+generation of a man page, in this case from `--help' output. This is
+sufficient in many cases.
+
+
+File: standards.info, Node: Reading other Manuals, Prev: Man Pages, Up: Documentation
+
+6.10 Reading other Manuals
+==========================
+
+There may be non-free books or documentation files that describe the
+program you are documenting.
+
+ It is ok to use these documents for reference, just as the author of
+a new algebra textbook can read other books on algebra. A large portion
+of any non-fiction book consists of facts, in this case facts about how
+a certain program works, and these facts are necessarily the same for
+everyone who writes about the subject. But be careful not to copy your
+outline structure, wording, tables or examples from preexisting non-free
+documentation. Copying from free documentation may be ok; please check
+with the FSF about the individual case.
+
+
+File: standards.info, Node: Managing Releases, Next: References, Prev: Documentation, Up: Top
+
+7 The Release Process
+*********************
+
+Making a release is more than just bundling up your source files in a
+tar file and putting it up for FTP. You should set up your software so
+that it can be configured to run on a variety of systems. Your Makefile
+should conform to the GNU standards described below, and your directory
+layout should also conform to the standards discussed below. Doing so
+makes it easy to include your package into the larger framework of all
+GNU software.
+
+* Menu:
+
+* Configuration:: How configuration of GNU packages should work.
+* Makefile Conventions:: Makefile conventions.
+* Releases:: Making releases
+
+
+File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases
+
+7.1 How Configuration Should Work
+=================================
+
+Each GNU distribution should come with a shell script named
+`configure'. This script is given arguments which describe the kind of
+machine and system you want to compile the program for. The
+`configure' script must record the configuration options so that they
+affect compilation.
+
+ The description here is the specification of the interface for the
+`configure' script in GNU packages. Many packages implement it using
+GNU Autoconf (*note Introduction: (autoconf)Top.) and/or GNU Automake
+(*note Introduction: (automake)Top.), but you do not have to use these
+tools. You can implement it any way you like; for instance, by making
+`configure' be a wrapper around a completely different configuration
+system.
+
+ Another way for the `configure' script to operate is to make a link
+from a standard name such as `config.h' to the proper configuration
+file for the chosen system. If you use this technique, the
+distribution should _not_ contain a file named `config.h'. This is so
+that people won't be able to build the program without configuring it
+first.
+
+ Another thing that `configure' can do is to edit the Makefile. If
+you do this, the distribution should _not_ contain a file named
+`Makefile'. Instead, it should include a file `Makefile.in' which
+contains the input used for editing. Once again, this is so that people
+won't be able to build the program without configuring it first.
+
+ If `configure' does write the `Makefile', then `Makefile' should
+have a target named `Makefile' which causes `configure' to be rerun,
+setting up the same configuration that was set up last time. The files
+that `configure' reads should be listed as dependencies of `Makefile'.
+
+ All the files which are output from the `configure' script should
+have comments at the beginning explaining that they were generated
+automatically using `configure'. This is so that users won't think of
+trying to edit them by hand.
+
+ The `configure' script should write a file named `config.status'
+which describes which configuration options were specified when the
+program was last configured. This file should be a shell script which,
+if run, will recreate the same configuration.
+
+ The `configure' script should accept an option of the form
+`--srcdir=DIRNAME' to specify the directory where sources are found (if
+it is not the current directory). This makes it possible to build the
+program in a separate directory, so that the actual source directory is
+not modified.
+
+ If the user does not specify `--srcdir', then `configure' should
+check both `.' and `..' to see if it can find the sources. If it finds
+the sources in one of these places, it should use them from there.
+Otherwise, it should report that it cannot find the sources, and should
+exit with nonzero status.
+
+ Usually the easy way to support `--srcdir' is by editing a
+definition of `VPATH' into the Makefile. Some rules may need to refer
+explicitly to the specified source directory. To make this possible,
+`configure' can add to the Makefile a variable named `srcdir' whose
+value is precisely the specified directory.
+
+ In addition, the `configure' script should take options
+corresponding to most of the standard directory variables (*note
+Directory Variables::). Here is the list:
+
+ --prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir
+ --sharedstatedir --localstatedir --libdir --includedir --oldincludedir
+ --datarootdir --datadir --infodir --localedir --mandir --docdir
+ --htmldir --dvidir --pdfdir --psdir
+
+ The `configure' script should also take an argument which specifies
+the type of system to build the program for. This argument should look
+like this:
+
+ CPU-COMPANY-SYSTEM
+
+ For example, an Athlon-based GNU/Linux system might be
+`i686-pc-linux-gnu'.
+
+ The `configure' script needs to be able to decode all plausible
+alternatives for how to describe a machine. Thus,
+`athlon-pc-gnu/linux' would be a valid alias. There is a shell script
+called `config.sub'
+(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD)
+that you can use as a subroutine to validate system types and
+canonicalize aliases.
+
+ The `configure' script should also take the option
+`--build=BUILDTYPE', which should be equivalent to a plain BUILDTYPE
+argument. For example, `configure --build=i686-pc-linux-gnu' is
+equivalent to `configure i686-pc-linux-gnu'. When the build type is
+not specified by an option or argument, the `configure' script should
+normally guess it using the shell script `config.guess'
+(http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD).
+
+ Other options are permitted to specify in more detail the software
+or hardware present on the machine, to include or exclude optional parts
+of the package, or to adjust the name of some tools or arguments to
+them:
+
+`--enable-FEATURE[=PARAMETER]'
+ Configure the package to build and install an optional user-level
+ facility called FEATURE. This allows users to choose which
+ optional features to include. Giving an optional PARAMETER of
+ `no' should omit FEATURE, if it is built by default.
+
+ No `--enable' option should *ever* cause one feature to replace
+ another. No `--enable' option should ever substitute one useful
+ behavior for another useful behavior. The only proper use for
+ `--enable' is for questions of whether to build part of the program
+ or exclude it.
+
+`--with-PACKAGE'
+ The package PACKAGE will be installed, so configure this package
+ to work with PACKAGE.
+
+ Possible values of PACKAGE include `gnu-as' (or `gas'), `gnu-ld',
+ `gnu-libc', `gdb', `x', and `x-toolkit'.
+
+ Do not use a `--with' option to specify the file name to use to
+ find certain files. That is outside the scope of what `--with'
+ options are for.
+
+`VARIABLE=VALUE'
+ Set the value of the variable VARIABLE to VALUE. This is used to
+ override the default values of commands or arguments in the build
+ process. For example, the user could issue `configure CFLAGS=-g
+ CXXFLAGS=-g' to build with debugging information and without the
+ default optimization.
+
+ Specifying variables as arguments to `configure', like this:
+ ./configure CC=gcc
+ is preferable to setting them in environment variables:
+ CC=gcc ./configure
+ as it helps to recreate the same configuration later with
+ `config.status'. However, both methods should be supported.
+
+ All `configure' scripts should accept all of the "detail" options
+and the variable settings, whether or not they make any difference to
+the particular package at hand. In particular, they should accept any
+option that starts with `--with-' or `--enable-'. This is so users
+will be able to configure an entire GNU source tree at once with a
+single set of options.
+
+ You will note that the categories `--with-' and `--enable-' are
+narrow: they *do not* provide a place for any sort of option you might
+think of. That is deliberate. We want to limit the possible
+configuration options in GNU software. We do not want GNU programs to
+have idiosyncratic configuration options.
+
+ Packages that perform part of the compilation process may support
+cross-compilation. In such a case, the host and target machines for the
+program may be different.
+
+ The `configure' script should normally treat the specified type of
+system as both the host and the target, thus producing a program which
+works for the same type of machine that it runs on.
+
+ To compile a program to run on a host type that differs from the
+build type, use the configure option `--host=HOSTTYPE', where HOSTTYPE
+uses the same syntax as BUILDTYPE. The host type normally defaults to
+the build type.
+
+ To configure a cross-compiler, cross-assembler, or what have you, you
+should specify a target different from the host, using the configure
+option `--target=TARGETTYPE'. The syntax for TARGETTYPE is the same as
+for the host type. So the command would look like this:
+
+ ./configure --host=HOSTTYPE --target=TARGETTYPE
+
+ The target type normally defaults to the host type. Programs for
+which cross-operation is not meaningful need not accept the `--target'
+option, because configuring an entire operating system for
+cross-operation is not a meaningful operation.
+
+ Some programs have ways of configuring themselves automatically. If
+your program is set up to do this, your `configure' script can simply
+ignore most of its arguments.
+
+
+File: standards.info, Node: Makefile Conventions, Next: Releases, Prev: Configuration, Up: Managing Releases
+
+7.2 Makefile Conventions
+========================
+
+This node describes conventions for writing the Makefiles for GNU
+programs. Using Automake will help you write a Makefile that follows
+these conventions. For more information on portable Makefiles, see
+POSIX and *note Portable Make Programming: (autoconf)Portable Make.
+
+* Menu:
+
+* Makefile Basics:: General conventions for Makefiles.
+* Utilities in Makefiles:: Utilities to be used in Makefiles.
+* Command Variables:: Variables for specifying commands.
+* DESTDIR:: Supporting staged installs.
+* Directory Variables:: Variables for installation directories.
+* Standard Targets:: Standard targets for users.
+* Install Command Categories:: Three categories of commands in the `install'
+ rule: normal, pre-install and post-install.
+
+
+File: standards.info, Node: Makefile Basics, Next: Utilities in Makefiles, Up: Makefile Conventions
+
+7.2.1 General Conventions for Makefiles
+---------------------------------------
+
+Every Makefile should contain this line:
+
+ SHELL = /bin/sh
+
+to avoid trouble on systems where the `SHELL' variable might be
+inherited from the environment. (This is never a problem with GNU
+`make'.)
+
+ Different `make' programs have incompatible suffix lists and
+implicit rules, and this sometimes creates confusion or misbehavior. So
+it is a good idea to set the suffix list explicitly using only the
+suffixes you need in the particular Makefile, like this:
+
+ .SUFFIXES:
+ .SUFFIXES: .c .o
+
+The first line clears out the suffix list, the second introduces all
+suffixes which may be subject to implicit rules in this Makefile.
+
+ Don't assume that `.' is in the path for command execution. When
+you need to run programs that are a part of your package during the
+make, please make sure that it uses `./' if the program is built as
+part of the make or `$(srcdir)/' if the file is an unchanging part of
+the source code. Without one of these prefixes, the current search
+path is used.
+
+ The distinction between `./' (the "build directory") and
+`$(srcdir)/' (the "source directory") is important because users can
+build in a separate directory using the `--srcdir' option to
+`configure'. A rule of the form:
+
+ foo.1 : foo.man sedscript
+ sed -f sedscript foo.man > foo.1
+
+will fail when the build directory is not the source directory, because
+`foo.man' and `sedscript' are in the source directory.
+
+ When using GNU `make', relying on `VPATH' to find the source file
+will work in the case where there is a single dependency file, since
+the `make' automatic variable `$<' will represent the source file
+wherever it is. (Many versions of `make' set `$<' only in implicit
+rules.) A Makefile target like
+
+ foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
+
+should instead be written as
+
+ foo.o : bar.c
+ $(CC) -I. -I$(srcdir) $(CFLAGS) -c $< -o $@
+
+in order to allow `VPATH' to work correctly. When the target has
+multiple dependencies, using an explicit `$(srcdir)' is the easiest way
+to make the rule work well. For example, the target above for `foo.1'
+is best written as:
+
+ foo.1 : foo.man sedscript
+ sed -f $(srcdir)/sedscript $(srcdir)/foo.man > $@
+
+ GNU distributions usually contain some files which are not source
+files--for example, Info files, and the output from Autoconf, Automake,
+Bison or Flex. Since these files normally appear in the source
+directory, they should always appear in the source directory, not in the
+build directory. So Makefile rules to update them should put the
+updated files in the source directory.
+
+ However, if a file does not appear in the distribution, then the
+Makefile should not put it in the source directory, because building a
+program in ordinary circumstances should not modify the source directory
+in any way.
+
+ Try to make the build and installation targets, at least (and all
+their subtargets) work correctly with a parallel `make'.
+
+
+File: standards.info, Node: Utilities in Makefiles, Next: Command Variables, Prev: Makefile Basics, Up: Makefile Conventions
+
+7.2.2 Utilities in Makefiles
+----------------------------
+
+Write the Makefile commands (and any shell scripts, such as
+`configure') to run under `sh' (both the traditional Bourne shell and
+the POSIX shell), not `csh'. Don't use any special features of `ksh'
+or `bash', or POSIX features not widely supported in traditional Bourne
+`sh'.
+
+ The `configure' script and the Makefile rules for building and
+installation should not use any utilities directly except these:
+
+ awk cat cmp cp diff echo egrep expr false grep install-info ln ls
+ mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
+
+ Compression programs such as `gzip' can be used in the `dist' rule.
+
+ Generally, stick to the widely-supported (usually POSIX-specified)
+options and features of these programs. For example, don't use `mkdir
+-p', convenient as it may be, because a few systems don't support it at
+all and with others, it is not safe for parallel execution. For a list
+of known incompatibilities, see *note Portable Shell Programming:
+(autoconf)Portable Shell.
+
+ It is a good idea to avoid creating symbolic links in makefiles,
+since a few file systems don't support them.
+
+ The Makefile rules for building and installation can also use
+compilers and related programs, but should do so via `make' variables
+so that the user can substitute alternatives. Here are some of the
+programs we mean:
+
+ ar bison cc flex install ld ldconfig lex
+ make makeinfo ranlib texi2dvi yacc
+
+ Use the following `make' variables to run those programs:
+
+ $(AR) $(BISON) $(CC) $(FLEX) $(INSTALL) $(LD) $(LDCONFIG) $(LEX)
+ $(MAKE) $(MAKEINFO) $(RANLIB) $(TEXI2DVI) $(YACC)
+
+ When you use `ranlib' or `ldconfig', you should make sure nothing
+bad happens if the system does not have the program in question.
+Arrange to ignore an error from that command, and print a message before
+the command to tell the user that failure of this command does not mean
+a problem. (The Autoconf `AC_PROG_RANLIB' macro can help with this.)
+
+ If you use symbolic links, you should implement a fallback for
+systems that don't have symbolic links.
+
+ Additional utilities that can be used via Make variables are:
+
+ chgrp chmod chown mknod
+
+ It is ok to use other utilities in Makefile portions (or scripts)
+intended only for particular systems where you know those utilities
+exist.
+
+
+File: standards.info, Node: Command Variables, Next: DESTDIR, Prev: Utilities in Makefiles, Up: Makefile Conventions
+
+7.2.3 Variables for Specifying Commands
+---------------------------------------
+
+Makefiles should provide variables for overriding certain commands,
+options, and so on.
+
+ In particular, you should run most utility programs via variables.
+Thus, if you use Bison, have a variable named `BISON' whose default
+value is set with `BISON = bison', and refer to it with `$(BISON)'
+whenever you need to use Bison.
+
+ File management utilities such as `ln', `rm', `mv', and so on, need
+not be referred to through variables in this way, since users don't
+need to replace them with other programs.
+
+ Each program-name variable should come with an options variable that
+is used to supply options to the program. Append `FLAGS' to the
+program-name variable name to get the options variable name--for
+example, `BISONFLAGS'. (The names `CFLAGS' for the C compiler,
+`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,
+but we keep them because they are standard.) Use `CPPFLAGS' in any
+compilation command that runs the preprocessor, and use `LDFLAGS' in
+any compilation command that does linking as well as in any direct use
+of `ld'.
+
+ If there are C compiler options that _must_ be used for proper
+compilation of certain files, do not include them in `CFLAGS'. Users
+expect to be able to specify `CFLAGS' freely themselves. Instead,
+arrange to pass the necessary options to the C compiler independently
+of `CFLAGS', by writing them explicitly in the compilation commands or
+by defining an implicit rule, like this:
+
+ CFLAGS = -g
+ ALL_CFLAGS = -I. $(CFLAGS)
+ .c.o:
+ $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
+
+ Do include the `-g' option in `CFLAGS', because that is not
+_required_ for proper compilation. You can consider it a default that
+is only recommended. If the package is set up so that it is compiled
+with GCC by default, then you might as well include `-O' in the default
+value of `CFLAGS' as well.
+
+ Put `CFLAGS' last in the compilation command, after other variables
+containing compiler options, so the user can use `CFLAGS' to override
+the others.
+
+ `CFLAGS' should be used in every invocation of the C compiler, both
+those which do compilation and those which do linking.
+
+ Every Makefile should define the variable `INSTALL', which is the
+basic command for installing a file into the system.
+
+ Every Makefile should also define the variables `INSTALL_PROGRAM'
+and `INSTALL_DATA'. (The default for `INSTALL_PROGRAM' should be
+`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m
+644'.) Then it should use those variables as the commands for actual
+installation, for executables and non-executables respectively.
+Minimal use of these variables is as follows:
+
+ $(INSTALL_PROGRAM) foo $(bindir)/foo
+ $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a
+
+ However, it is preferable to support a `DESTDIR' prefix on the
+target files, as explained in the next section.
+
+ It is acceptable, but not required, to install multiple files in one
+command, with the final argument being a directory, as in:
+
+ $(INSTALL_PROGRAM) foo bar baz $(bindir)
+
+
+File: standards.info, Node: DESTDIR, Next: Directory Variables, Prev: Command Variables, Up: Makefile Conventions
+
+7.2.4 `DESTDIR': Support for Staged Installs
+--------------------------------------------
+
+`DESTDIR' is a variable prepended to each installed target file, like
+this:
+
+ $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
+ $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a
+
+ The `DESTDIR' variable is specified by the user on the `make'
+command line as an absolute file name. For example:
+
+ make DESTDIR=/tmp/stage install
+
+`DESTDIR' should be supported only in the `install*' and `uninstall*'
+targets, as those are the only targets where it is useful.
+
+ If your installation step would normally install
+`/usr/local/bin/foo' and `/usr/local/lib/libfoo.a', then an
+installation invoked as in the example above would install
+`/tmp/stage/usr/local/bin/foo' and `/tmp/stage/usr/local/lib/libfoo.a'
+instead.
+
+ Prepending the variable `DESTDIR' to each target in this way
+provides for "staged installs", where the installed files are not
+placed directly into their expected location but are instead copied
+into a temporary location (`DESTDIR'). However, installed files
+maintain their relative directory structure and any embedded file names
+will not be modified.
+
+ You should not set the value of `DESTDIR' in your `Makefile' at all;
+then the files are installed into their expected locations by default.
+Also, specifying `DESTDIR' should not change the operation of the
+software in any way, so its value should not be included in any file
+contents.
+
+ `DESTDIR' support is commonly used in package creation. It is also
+helpful to users who want to understand what a given package will
+install where, and to allow users who don't normally have permissions
+to install into protected areas to build and install before gaining
+those permissions. Finally, it can be useful with tools such as
+`stow', where code is installed in one place but made to appear to be
+installed somewhere else using symbolic links or special mount
+operations. So, we strongly recommend GNU packages support `DESTDIR',
+though it is not an absolute requirement.
+
+
+File: standards.info, Node: Directory Variables, Next: Standard Targets, Prev: DESTDIR, Up: Makefile Conventions
+
+7.2.5 Variables for Installation Directories
+--------------------------------------------
+
+Installation directories should always be named by variables, so it is
+easy to install in a nonstandard place. The standard names for these
+variables and the values they should have in GNU packages are described
+below. They are based on a standard file system layout; variants of it
+are used in GNU/Linux and other modern operating systems.
+
+ Installers are expected to override these values when calling `make'
+(e.g., `make prefix=/usr install' or `configure' (e.g., `configure
+--prefix=/usr'). GNU packages should not try to guess which value
+should be appropriate for these variables on the system they are being
+installed onto: use the default settings specified here so that all GNU
+packages behave identically, allowing the installer to achieve any
+desired layout.
+
+ All installation directories, and their parent directories, should be
+created (if necessary) before they are installed into.
+
+ These first two variables set the root for the installation. All the
+other installation directories should be subdirectories of one of these
+two, and nothing should be directly installed into these two
+directories.
+
+`prefix'
+ A prefix used in constructing the default values of the variables
+ listed below. The default value of `prefix' should be
+ `/usr/local'. When building the complete GNU system, the prefix
+ will be empty and `/usr' will be a symbolic link to `/'. (If you
+ are using Autoconf, write it as `@prefix@'.)
+
+ Running `make install' with a different value of `prefix' from the
+ one used to build the program should _not_ recompile the program.
+
+`exec_prefix'
+ A prefix used in constructing the default values of some of the
+ variables listed below. The default value of `exec_prefix' should
+ be `$(prefix)'. (If you are using Autoconf, write it as
+ `@exec_prefix@'.)
+
+ Generally, `$(exec_prefix)' is used for directories that contain
+ machine-specific files (such as executables and subroutine
+ libraries), while `$(prefix)' is used directly for other
+ directories.
+
+ Running `make install' with a different value of `exec_prefix'
+ from the one used to build the program should _not_ recompile the
+ program.
+
+ Executable programs are installed in one of the following
+directories.
+
+`bindir'
+ The directory for installing executable programs that users can
+ run. This should normally be `/usr/local/bin', but write it as
+ `$(exec_prefix)/bin'. (If you are using Autoconf, write it as
+ `@bindir@'.)
+
+`sbindir'
+ The directory for installing executable programs that can be run
+ from the shell, but are only generally useful to system
+ administrators. This should normally be `/usr/local/sbin', but
+ write it as `$(exec_prefix)/sbin'. (If you are using Autoconf,
+ write it as `@sbindir@'.)
+
+`libexecdir'
+ The directory for installing executable programs to be run by other
+ programs rather than by users. This directory should normally be
+ `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'.
+ (If you are using Autoconf, write it as `@libexecdir@'.)
+
+ The definition of `libexecdir' is the same for all packages, so
+ you should install your data in a subdirectory thereof. Most
+ packages install their data under `$(libexecdir)/PACKAGE-NAME/',
+ possibly within additional subdirectories thereof, such as
+ `$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'.
+
+ Data files used by the program during its execution are divided into
+categories in two ways.
+
+ * Some files are normally modified by programs; others are never
+ normally modified (though users may edit some of these).
+
+ * Some files are architecture-independent and can be shared by all
+ machines at a site; some are architecture-dependent and can be
+ shared only by machines of the same kind and operating system;
+ others may never be shared between two machines.
+
+ This makes for six different possibilities. However, we want to
+discourage the use of architecture-dependent files, aside from object
+files and libraries. It is much cleaner to make other data files
+architecture-independent, and it is generally not hard.
+
+ Here are the variables Makefiles should use to specify directories
+to put these various kinds of files in:
+
+`datarootdir'
+ The root of the directory tree for read-only
+ architecture-independent data files. This should normally be
+ `/usr/local/share', but write it as `$(prefix)/share'. (If you
+ are using Autoconf, write it as `@datarootdir@'.) `datadir''s
+ default value is based on this variable; so are `infodir',
+ `mandir', and others.
+
+`datadir'
+ The directory for installing idiosyncratic read-only
+ architecture-independent data files for this program. This is
+ usually the same place as `datarootdir', but we use the two
+ separate variables so that you can move these program-specific
+ files without altering the location for Info files, man pages, etc.
+
+ This should normally be `/usr/local/share', but write it as
+ `$(datarootdir)'. (If you are using Autoconf, write it as
+ `@datadir@'.)
+
+ The definition of `datadir' is the same for all packages, so you
+ should install your data in a subdirectory thereof. Most packages
+ install their data under `$(datadir)/PACKAGE-NAME/'.
+
+`sysconfdir'
+ The directory for installing read-only data files that pertain to a
+ single machine-that is to say, files for configuring a host.
+ Mailer and network configuration files, `/etc/passwd', and so
+ forth belong here. All the files in this directory should be
+ ordinary ASCII text files. This directory should normally be
+ `/usr/local/etc', but write it as `$(prefix)/etc'. (If you are
+ using Autoconf, write it as `@sysconfdir@'.)
+
+ Do not install executables here in this directory (they probably
+ belong in `$(libexecdir)' or `$(sbindir)'). Also do not install
+ files that are modified in the normal course of their use (programs
+ whose purpose is to change the configuration of the system
+ excluded). Those probably belong in `$(localstatedir)'.
+
+`sharedstatedir'
+ The directory for installing architecture-independent data files
+ which the programs modify while they run. This should normally be
+ `/usr/local/com', but write it as `$(prefix)/com'. (If you are
+ using Autoconf, write it as `@sharedstatedir@'.)
+
+`localstatedir'
+ The directory for installing data files which the programs modify
+ while they run, and that pertain to one specific machine. Users
+ should never need to modify files in this directory to configure
+ the package's operation; put such configuration information in
+ separate files that go in `$(datadir)' or `$(sysconfdir)'.
+ `$(localstatedir)' should normally be `/usr/local/var', but write
+ it as `$(prefix)/var'. (If you are using Autoconf, write it as
+ `@localstatedir@'.)
+
+ These variables specify the directory for installing certain specific
+types of files, if your program has them. Every GNU package should
+have Info files, so every program needs `infodir', but not all need
+`libdir' or `lispdir'.
+
+`includedir'
+ The directory for installing header files to be included by user
+ programs with the C `#include' preprocessor directive. This
+ should normally be `/usr/local/include', but write it as
+ `$(prefix)/include'. (If you are using Autoconf, write it as
+ `@includedir@'.)
+
+ Most compilers other than GCC do not look for header files in
+ directory `/usr/local/include'. So installing the header files
+ this way is only useful with GCC. Sometimes this is not a problem
+ because some libraries are only really intended to work with GCC.
+ But some libraries are intended to work with other compilers.
+ They should install their header files in two places, one
+ specified by `includedir' and one specified by `oldincludedir'.
+
+`oldincludedir'
+ The directory for installing `#include' header files for use with
+ compilers other than GCC. This should normally be `/usr/include'.
+ (If you are using Autoconf, you can write it as `@oldincludedir@'.)
+
+ The Makefile commands should check whether the value of
+ `oldincludedir' is empty. If it is, they should not try to use
+ it; they should cancel the second installation of the header files.
+
+ A package should not replace an existing header in this directory
+ unless the header came from the same package. Thus, if your Foo
+ package provides a header file `foo.h', then it should install the
+ header file in the `oldincludedir' directory if either (1) there
+ is no `foo.h' there or (2) the `foo.h' that exists came from the
+ Foo package.
+
+ To tell whether `foo.h' came from the Foo package, put a magic
+ string in the file--part of a comment--and `grep' for that string.
+
+`docdir'
+ The directory for installing documentation files (other than Info)
+ for this package. By default, it should be
+ `/usr/local/share/doc/YOURPKG', but it should be written as
+ `$(datarootdir)/doc/YOURPKG'. (If you are using Autoconf, write
+ it as `@docdir@'.) The YOURPKG subdirectory, which may include a
+ version number, prevents collisions among files with common names,
+ such as `README'.
+
+`infodir'
+ The directory for installing the Info files for this package. By
+ default, it should be `/usr/local/share/info', but it should be
+ written as `$(datarootdir)/info'. (If you are using Autoconf,
+ write it as `@infodir@'.) `infodir' is separate from `docdir' for
+ compatibility with existing practice.
+
+`htmldir'
+`dvidir'
+`pdfdir'
+`psdir'
+ Directories for installing documentation files in the particular
+ format. They should all be set to `$(docdir)' by default. (If
+ you are using Autoconf, write them as `@htmldir@', `@dvidir@',
+ etc.) Packages which supply several translations of their
+ documentation should install them in `$(htmldir)/'LL,
+ `$(pdfdir)/'LL, etc. where LL is a locale abbreviation such as
+ `en' or `pt_BR'.
+
+`libdir'
+ The directory for object files and libraries of object code. Do
+ not install executables here, they probably ought to go in
+ `$(libexecdir)' instead. The value of `libdir' should normally be
+ `/usr/local/lib', but write it as `$(exec_prefix)/lib'. (If you
+ are using Autoconf, write it as `@libdir@'.)
+
+`lispdir'
+ The directory for installing any Emacs Lisp files in this package.
+ By default, it should be `/usr/local/share/emacs/site-lisp', but it
+ should be written as `$(datarootdir)/emacs/site-lisp'.
+
+ If you are using Autoconf, write the default as `@lispdir@'. In
+ order to make `@lispdir@' work, you need the following lines in
+ your `configure.in' file:
+
+ lispdir='${datarootdir}/emacs/site-lisp'
+ AC_SUBST(lispdir)
+
+`localedir'
+ The directory for installing locale-specific message catalogs for
+ this package. By default, it should be `/usr/local/share/locale',
+ but it should be written as `$(datarootdir)/locale'. (If you are
+ using Autoconf, write it as `@localedir@'.) This directory
+ usually has a subdirectory per locale.
+
+ Unix-style man pages are installed in one of the following:
+
+`mandir'
+ The top-level directory for installing the man pages (if any) for
+ this package. It will normally be `/usr/local/share/man', but you
+ should write it as `$(datarootdir)/man'. (If you are using
+ Autoconf, write it as `@mandir@'.)
+
+`man1dir'
+ The directory for installing section 1 man pages. Write it as
+ `$(mandir)/man1'.
+
+`man2dir'
+ The directory for installing section 2 man pages. Write it as
+ `$(mandir)/man2'
+
+`...'
+ *Don't make the primary documentation for any GNU software be a
+ man page. Write a manual in Texinfo instead. Man pages are just
+ for the sake of people running GNU software on Unix, which is a
+ secondary application only.*
+
+`manext'
+ The file name extension for the installed man page. This should
+ contain a period followed by the appropriate digit; it should
+ normally be `.1'.
+
+`man1ext'
+ The file name extension for installed section 1 man pages.
+
+`man2ext'
+ The file name extension for installed section 2 man pages.
+
+`...'
+ Use these names instead of `manext' if the package needs to
+ install man pages in more than one section of the manual.
+
+ And finally, you should set the following variable:
+
+`srcdir'
+ The directory for the sources being compiled. The value of this
+ variable is normally inserted by the `configure' shell script.
+ (If you are using Autoconf, use `srcdir = @srcdir@'.)
+
+ For example:
+
+ # Common prefix for installation directories.
+ # NOTE: This directory must exist when you start the install.
+ prefix = /usr/local
+ datarootdir = $(prefix)/share
+ datadir = $(datarootdir)
+ exec_prefix = $(prefix)
+ # Where to put the executable for the command `gcc'.
+ bindir = $(exec_prefix)/bin
+ # Where to put the directories used by the compiler.
+ libexecdir = $(exec_prefix)/libexec
+ # Where to put the Info files.
+ infodir = $(datarootdir)/info
+
+ If your program installs a large number of files into one of the
+standard user-specified directories, it might be useful to group them
+into a subdirectory particular to that program. If you do this, you
+should write the `install' rule to create these subdirectories.
+
+ Do not expect the user to include the subdirectory name in the value
+of any of the variables listed above. The idea of having a uniform set
+of variable names for installation directories is to enable the user to
+specify the exact same values for several different GNU packages. In
+order for this to be useful, all the packages must be designed so that
+they will work sensibly when the user does so.
+
+ At times, not all of these variables may be implemented in the
+current release of Autoconf and/or Automake; but as of Autoconf 2.60, we
+believe all of them are. When any are missing, the descriptions here
+serve as specifications for what Autoconf will implement. As a
+programmer, you can either use a development version of Autoconf or
+avoid using these variables until a stable release is made which
+supports them.
+
+
+File: standards.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions
+
+7.2.6 Standard Targets for Users
+--------------------------------
+
+All GNU programs should have the following targets in their Makefiles:
+
+`all'
+ Compile the entire program. This should be the default target.
+ This target need not rebuild any documentation files; Info files
+ should normally be included in the distribution, and DVI (and other
+ documentation format) files should be made only when explicitly
+ asked for.
+
+ By default, the Make rules should compile and link with `-g', so
+ that executable programs have debugging symbols. Otherwise, you
+ are essentially helpless in the face of a crash, and it is often
+ far from easy to reproduce with a fresh build.
+
+`install'
+ Compile the program and copy the executables, libraries, and so on
+ to the file names where they should reside for actual use. If
+ there is a simple test to verify that a program is properly
+ installed, this target should run that test.
+
+ Do not strip executables when installing them. This helps eventual
+ debugging that may be needed later, and nowadays disk space is
+ cheap and dynamic loaders typically ensure debug sections are not
+ loaded during normal execution. Users that need stripped binaries
+ may invoke the `install-strip' target to do that.
+
+ If possible, write the `install' target rule so that it does not
+ modify anything in the directory where the program was built,
+ provided `make all' has just been done. This is convenient for
+ building the program under one user name and installing it under
+ another.
+
+ The commands should create all the directories in which files are
+ to be installed, if they don't already exist. This includes the
+ directories specified as the values of the variables `prefix' and
+ `exec_prefix', as well as all subdirectories that are needed. One
+ way to do this is by means of an `installdirs' target as described
+ below.
+
+ Use `-' before any command for installing a man page, so that
+ `make' will ignore any errors. This is in case there are systems
+ that don't have the Unix man page documentation system installed.
+
+ The way to install Info files is to copy them into `$(infodir)'
+ with `$(INSTALL_DATA)' (*note Command Variables::), and then run
+ the `install-info' program if it is present. `install-info' is a
+ program that edits the Info `dir' file to add or update the menu
+ entry for the given Info file; it is part of the Texinfo package.
+
+ Here is a sample rule to install an Info file that also tries to
+ handle some additional situations, such as `install-info' not
+ being present.
+
+ do-install-info: foo.info installdirs
+ $(NORMAL_INSTALL)
+ # Prefer an info file in . to one in srcdir.
+ if test -f foo.info; then d=.; \
+ else d="$(srcdir)"; fi; \
+ $(INSTALL_DATA) $$d/foo.info \
+ "$(DESTDIR)$(infodir)/foo.info"
+ # Run install-info only if it exists.
+ # Use `if' instead of just prepending `-' to the
+ # line so we notice real errors from install-info.
+ # Use `$(SHELL) -c' because some shells do not
+ # fail gracefully when there is an unknown command.
+ $(POST_INSTALL)
+ if $(SHELL) -c 'install-info --version' \
+ >/dev/null 2>&1; then \
+ install-info --dir-file="$(DESTDIR)$(infodir)/dir" \
+ "$(DESTDIR)$(infodir)/foo.info"; \
+ else true; fi
+
+ When writing the `install' target, you must classify all the
+ commands into three categories: normal ones, "pre-installation"
+ commands and "post-installation" commands. *Note Install Command
+ Categories::.
+
+`install-html'
+`install-dvi'
+`install-pdf'
+`install-ps'
+ These targets install documentation in formats other than Info;
+ they're intended to be called explicitly by the person installing
+ the package, if that format is desired. GNU prefers Info files,
+ so these must be installed by the `install' target.
+
+ When you have many documentation files to install, we recommend
+ that you avoid collisions and clutter by arranging for these
+ targets to install in subdirectories of the appropriate
+ installation directory, such as `htmldir'. As one example, if
+ your package has multiple manuals, and you wish to install HTML
+ documentation with many files (such as the "split" mode output by
+ `makeinfo --html'), you'll certainly want to use subdirectories,
+ or two nodes with the same name in different manuals will
+ overwrite each other.
+
+ Please make these `install-FORMAT' targets invoke the commands for
+ the FORMAT target, for example, by making FORMAT a dependency.
+
+`uninstall'
+ Delete all the installed files--the copies that the `install' and
+ `install-*' targets create.
+
+ This rule should not modify the directories where compilation is
+ done, only the directories where files are installed.
+
+ The uninstallation commands are divided into three categories,
+ just like the installation commands. *Note Install Command
+ Categories::.
+
+`install-strip'
+ Like `install', but strip the executable files while installing
+ them. In simple cases, this target can use the `install' target in
+ a simple way:
+
+ install-strip:
+ $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
+ install
+
+ But if the package installs scripts as well as real executables,
+ the `install-strip' target can't just refer to the `install'
+ target; it has to strip the executables but not the scripts.
+
+ `install-strip' should not strip the executables in the build
+ directory which are being copied for installation. It should only
+ strip the copies that are installed.
+
+ Normally we do not recommend stripping an executable unless you
+ are sure the program has no bugs. However, it can be reasonable
+ to install a stripped executable for actual execution while saving
+ the unstripped executable elsewhere in case there is a bug.
+
+`clean'
+ Delete all files in the current directory that are normally
+ created by building the program. Also delete files in other
+ directories if they are created by this makefile. However, don't
+ delete the files that record the configuration. Also preserve
+ files that could be made by building, but normally aren't because
+ the distribution comes with them. There is no need to delete
+ parent directories that were created with `mkdir -p', since they
+ could have existed anyway.
+
+ Delete `.dvi' files here if they are not part of the distribution.
+
+`distclean'
+ Delete all files in the current directory (or created by this
+ makefile) that are created by configuring or building the program.
+ If you have unpacked the source and built the program without
+ creating any other files, `make distclean' should leave only the
+ files that were in the distribution. However, there is no need to
+ delete parent directories that were created with `mkdir -p', since
+ they could have existed anyway.
+
+`mostlyclean'
+ Like `clean', but may refrain from deleting a few files that people
+ normally don't want to recompile. For example, the `mostlyclean'
+ target for GCC does not delete `libgcc.a', because recompiling it
+ is rarely necessary and takes a lot of time.
+
+`maintainer-clean'
+ Delete almost everything that can be reconstructed with this
+ Makefile. This typically includes everything deleted by
+ `distclean', plus more: C source files produced by Bison, tags
+ tables, Info files, and so on.
+
+ The reason we say "almost everything" is that running the command
+ `make maintainer-clean' should not delete `configure' even if
+ `configure' can be remade using a rule in the Makefile. More
+ generally, `make maintainer-clean' should not delete anything that
+ needs to exist in order to run `configure' and then begin to build
+ the program. Also, there is no need to delete parent directories
+ that were created with `mkdir -p', since they could have existed
+ anyway. These are the only exceptions; `maintainer-clean' should
+ delete everything else that can be rebuilt.
+
+ The `maintainer-clean' target is intended to be used by a
+ maintainer of the package, not by ordinary users. You may need
+ special tools to reconstruct some of the files that `make
+ maintainer-clean' deletes. Since these files are normally
+ included in the distribution, we don't take care to make them easy
+ to reconstruct. If you find you need to unpack the full
+ distribution again, don't blame us.
+
+ To help make users aware of this, the commands for the special
+ `maintainer-clean' target should start with these two:
+
+ @echo 'This command is intended for maintainers to use; it'
+ @echo 'deletes files that may need special tools to rebuild.'
+
+`TAGS'
+ Update a tags table for this program.
+
+`info'
+ Generate any Info files needed. The best way to write the rules
+ is as follows:
+
+ info: foo.info
+
+ foo.info: foo.texi chap1.texi chap2.texi
+ $(MAKEINFO) $(srcdir)/foo.texi
+
+ You must define the variable `MAKEINFO' in the Makefile. It should
+ run the `makeinfo' program, which is part of the Texinfo
+ distribution.
+
+ Normally a GNU distribution comes with Info files, and that means
+ the Info files are present in the source directory. Therefore,
+ the Make rule for an info file should update it in the source
+ directory. When users build the package, ordinarily Make will not
+ update the Info files because they will already be up to date.
+
+`dvi'
+`html'
+`pdf'
+`ps'
+ Generate documentation files in the given format. These targets
+ should always exist, but any or all can be a no-op if the given
+ output format cannot be generated. These targets should not be
+ dependencies of the `all' target; the user must manually invoke
+ them.
+
+ Here's an example rule for generating DVI files from Texinfo:
+
+ dvi: foo.dvi
+
+ foo.dvi: foo.texi chap1.texi chap2.texi
+ $(TEXI2DVI) $(srcdir)/foo.texi
+
+ You must define the variable `TEXI2DVI' in the Makefile. It
+ should run the program `texi2dvi', which is part of the Texinfo
+ distribution. (`texi2dvi' uses TeX to do the real work of
+ formatting. TeX is not distributed with Texinfo.) Alternatively,
+ write only the dependencies, and allow GNU `make' to provide the
+ command.
+
+ Here's another example, this one for generating HTML from Texinfo:
+
+ html: foo.html
+
+ foo.html: foo.texi chap1.texi chap2.texi
+ $(TEXI2HTML) $(srcdir)/foo.texi
+
+ Again, you would define the variable `TEXI2HTML' in the Makefile;
+ for example, it might run `makeinfo --no-split --html' (`makeinfo'
+ is part of the Texinfo distribution).
+
+`dist'
+ Create a distribution tar file for this program. The tar file
+ should be set up so that the file names in the tar file start with
+ a subdirectory name which is the name of the package it is a
+ distribution for. This name can include the version number.
+
+ For example, the distribution tar file of GCC version 1.40 unpacks
+ into a subdirectory named `gcc-1.40'.
+
+ The easiest way to do this is to create a subdirectory
+ appropriately named, use `ln' or `cp' to install the proper files
+ in it, and then `tar' that subdirectory.
+
+ Compress the tar file with `gzip'. For example, the actual
+ distribution file for GCC version 1.40 is called `gcc-1.40.tar.gz'.
+ It is ok to support other free compression formats as well.
+
+ The `dist' target should explicitly depend on all non-source files
+ that are in the distribution, to make sure they are up to date in
+ the distribution. *Note Making Releases: Releases.
+
+`check'
+ Perform self-tests (if any). The user must build the program
+ before running the tests, but need not install the program; you
+ should write the self-tests so that they work when the program is
+ built but not installed.
+
+ The following targets are suggested as conventional names, for
+programs in which they are useful.
+
+`installcheck'
+ Perform installation tests (if any). The user must build and
+ install the program before running the tests. You should not
+ assume that `$(bindir)' is in the search path.
+
+`installdirs'
+ It's useful to add a target named `installdirs' to create the
+ directories where files are installed, and their parent
+ directories. There is a script called `mkinstalldirs' which is
+ convenient for this; you can find it in the Gnulib package. You
+ can use a rule like this:
+
+ # Make sure all installation directories (e.g. $(bindir))
+ # actually exist by making them if necessary.
+ installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs $(bindir) $(datadir) \
+ $(libdir) $(infodir) \
+ $(mandir)
+
+ or, if you wish to support `DESTDIR' (strongly encouraged),
+
+ # Make sure all installation directories (e.g. $(bindir))
+ # actually exist by making them if necessary.
+ installdirs: mkinstalldirs
+ $(srcdir)/mkinstalldirs \
+ $(DESTDIR)$(bindir) $(DESTDIR)$(datadir) \
+ $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \
+ $(DESTDIR)$(mandir)
+
+ This rule should not modify the directories where compilation is
+ done. It should do nothing but create installation directories.
+
+
+File: standards.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions
+
+7.2.7 Install Command Categories
+--------------------------------
+
+When writing the `install' target, you must classify all the commands
+into three categories: normal ones, "pre-installation" commands and
+"post-installation" commands.
+
+ Normal commands move files into their proper places, and set their
+modes. They may not alter any files except the ones that come entirely
+from the package they belong to.
+
+ Pre-installation and post-installation commands may alter other
+files; in particular, they can edit global configuration files or data
+bases.
+
+ Pre-installation commands are typically executed before the normal
+commands, and post-installation commands are typically run after the
+normal commands.
+
+ The most common use for a post-installation command is to run
+`install-info'. This cannot be done with a normal command, since it
+alters a file (the Info directory) which does not come entirely and
+solely from the package being installed. It is a post-installation
+command because it needs to be done after the normal command which
+installs the package's Info files.
+
+ Most programs don't need any pre-installation commands, but we have
+the feature just in case it is needed.
+
+ To classify the commands in the `install' rule into these three
+categories, insert "category lines" among them. A category line
+specifies the category for the commands that follow.
+
+ A category line consists of a tab and a reference to a special Make
+variable, plus an optional comment at the end. There are three
+variables you can use, one for each category; the variable name
+specifies the category. Category lines are no-ops in ordinary execution
+because these three Make variables are normally undefined (and you
+_should not_ define them in the makefile).
+
+ Here are the three possible category lines, each with a comment that
+explains what it means:
+
+ $(PRE_INSTALL) # Pre-install commands follow.
+ $(POST_INSTALL) # Post-install commands follow.
+ $(NORMAL_INSTALL) # Normal commands follow.
+
+ If you don't use a category line at the beginning of the `install'
+rule, all the commands are classified as normal until the first category
+line. If you don't use any category lines, all the commands are
+classified as normal.
+
+ These are the category lines for `uninstall':
+
+ $(PRE_UNINSTALL) # Pre-uninstall commands follow.
+ $(POST_UNINSTALL) # Post-uninstall commands follow.
+ $(NORMAL_UNINSTALL) # Normal commands follow.
+
+ Typically, a pre-uninstall command would be used for deleting entries
+from the Info directory.
+
+ If the `install' or `uninstall' target has any dependencies which
+act as subroutines of installation, then you should start _each_
+dependency's commands with a category line, and start the main target's
+commands with a category line also. This way, you can ensure that each
+command is placed in the right category regardless of which of the
+dependencies actually run.
+
+ Pre-installation and post-installation commands should not run any
+programs except for these:
+
+ [ basename bash cat chgrp chmod chown cmp cp dd diff echo
+ egrep expand expr false fgrep find getopt grep gunzip gzip
+ hostname install install-info kill ldconfig ln ls md5sum
+ mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
+ test touch true uname xargs yes
+
+ The reason for distinguishing the commands in this way is for the
+sake of making binary packages. Typically a binary package contains
+all the executables and other files that need to be installed, and has
+its own method of installing them--so it does not need to run the normal
+installation commands. But installing the binary package does need to
+execute the pre-installation and post-installation commands.
+
+ Programs to build binary packages work by extracting the
+pre-installation and post-installation commands. Here is one way of
+extracting the pre-installation commands (the `-s' option to `make' is
+needed to silence messages about entering subdirectories):
+
+ make -s -n install -o all \
+ PRE_INSTALL=pre-install \
+ POST_INSTALL=post-install \
+ NORMAL_INSTALL=normal-install \
+ | gawk -f pre-install.awk
+
+where the file `pre-install.awk' could contain this:
+
+ $0 ~ /^(normal-install|post-install)[ \t]*$/ {on = 0}
+ on {print $0}
+ $0 ~ /^pre-install[ \t]*$/ {on = 1}
+
+
+File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managing Releases
+
+7.3 Making Releases
+===================
+
+You should identify each release with a pair of version numbers, a
+major version and a minor. We have no objection to using more than two
+numbers, but it is very unlikely that you really need them.
+
+ Package the distribution of `Foo version 69.96' up in a gzipped tar
+file with the name `foo-69.96.tar.gz'. It should unpack into a
+subdirectory named `foo-69.96'.
+
+ Building and installing the program should never modify any of the
+files contained in the distribution. This means that all the files
+that form part of the program in any way must be classified into "source
+files" and "non-source files". Source files are written by humans and
+never changed automatically; non-source files are produced from source
+files by programs under the control of the Makefile.
+
+ The distribution should contain a file named `README' which gives
+the name of the package, and a general description of what it does. It
+is also good to explain the purpose of each of the first-level
+subdirectories in the package, if there are any. The `README' file
+should either state the version number of the package, or refer to where
+in the package it can be found.
+
+ The `README' file should refer to the file `INSTALL', which should
+contain an explanation of the installation procedure.
+
+ The `README' file should also refer to the file which contains the
+copying conditions. The GNU GPL, if used, should be in a file called
+`COPYING'. If the GNU LGPL is used, it should be in a file called
+`COPYING.LESSER'.
+
+ Naturally, all the source files must be in the distribution. It is
+okay to include non-source files in the distribution along with the
+source files they are generated from, provided they are up-to-date with
+the source they are made from, and machine-independent, so that normal
+building of the distribution will never modify them. We commonly
+include non-source files produced by Autoconf, Automake, Bison, `lex',
+TeX, and `makeinfo'; this helps avoid unnecessary dependencies between
+our distributions, so that users can install whichever packages they
+want to install.
+
+ Non-source files that might actually be modified by building and
+installing the program should *never* be included in the distribution.
+So if you do distribute non-source files, always make sure they are up
+to date when you make a new distribution.
+
+ Make sure that all the files in the distribution are world-readable,
+and that directories are world-readable and world-searchable (octal
+mode 755). We used to recommend that all directories in the
+distribution also be world-writable (octal mode 777), because ancient
+versions of `tar' would otherwise not cope when extracting the archive
+as an unprivileged user. That can easily lead to security issues when
+creating the archive, however, so now we recommend against that.
+
+ Don't include any symbolic links in the distribution itself. If the
+tar file contains symbolic links, then people cannot even unpack it on
+systems that don't support symbolic links. Also, don't use multiple
+names for one file in different directories, because certain file
+systems cannot handle this and that prevents unpacking the distribution.
+
+ Try to make sure that all the file names will be unique on MS-DOS. A
+name on MS-DOS consists of up to 8 characters, optionally followed by a
+period and up to three characters. MS-DOS will truncate extra
+characters both before and after the period. Thus, `foobarhacker.c'
+and `foobarhacker.o' are not ambiguous; they are truncated to
+`foobarha.c' and `foobarha.o', which are distinct.
+
+ Include in your distribution a copy of the `texinfo.tex' you used to
+test print any `*.texinfo' or `*.texi' files.
+
+ Likewise, if your program uses small GNU software packages like
+regex, getopt, obstack, or termcap, include them in the distribution
+file. Leaving them out would make the distribution file a little
+smaller at the expense of possible inconvenience to a user who doesn't
+know what other files to get.
+
+
+File: standards.info, Node: References, Next: GNU Free Documentation License, Prev: Managing Releases, Up: Top
+
+8 References to Non-Free Software and Documentation
+***************************************************
+
+A GNU program should not recommend, promote, or grant legitimacy to the
+use of any non-free program. Proprietary software is a social and
+ethical problem, and our aim is to put an end to that problem. We
+can't stop some people from writing proprietary programs, or stop other
+people from using them, but we can and should refuse to advertise them
+to new potential customers, or to give the public the idea that their
+existence is ethical.
+
+ The GNU definition of free software is found on the GNU web site at
+`http://www.gnu.org/philosophy/free-sw.html', and the definition of
+free documentation is found at
+`http://www.gnu.org/philosophy/free-doc.html'. The terms "free" and
+"non-free", used in this document, refer to those definitions.
+
+ A list of important licenses and whether they qualify as free is in
+`http://www.gnu.org/licenses/license-list.html'. If it is not clear
+whether a license qualifies as free, please ask the GNU Project by
+writing to <licensing@gnu.org>. We will answer, and if the license is
+an important one, we will add it to the list.
+
+ When a non-free program or system is well known, you can mention it
+in passing--that is harmless, since users who might want to use it
+probably already know about it. For instance, it is fine to explain
+how to build your package on top of some widely used non-free operating
+system, or how to use it together with some widely used non-free
+program.
+
+ However, you should give only the necessary information to help those
+who already use the non-free program to use your program with it--don't
+give, or refer to, any further information about the proprietary
+program, and don't imply that the proprietary program enhances your
+program, or that its existence is in any way a good thing. The goal
+should be that people already using the proprietary program will get
+the advice they need about how to use your free program with it, while
+people who don't already use the proprietary program will not see
+anything likely to lead them to take an interest in it.
+
+ If a non-free program or system is obscure in your program's domain,
+your program should not mention or support it at all, since doing so
+would tend to popularize the non-free program more than it popularizes
+your program. (You cannot hope to find many additional users for your
+program among the users of Foobar, if the existence of Foobar is not
+generally known among people who might want to use your program.)
+
+ Sometimes a program is free software in itself but depends on a
+non-free platform in order to run. For instance, many Java programs
+depend on some non-free Java libraries. To recommend or promote such a
+program is to promote the other programs it needs. This is why we are
+careful about listing Java programs in the Free Software Directory: we
+don't want to promote the non-free Java libraries.
+
+ We hope this particular problem with Java will be gone by and by, as
+we replace the remaining non-free standard Java libraries with free
+software, but the general principle will remain the same: don't
+recommend, promote or legitimize programs that depend on non-free
+software to run.
+
+ Some free programs strongly encourage the use of non-free software.
+A typical example is `mplayer'. It is free software in itself, and the
+free code can handle some kinds of files. However, `mplayer'
+recommends use of non-free codecs for other kinds of files, and users
+that install `mplayer' are very likely to install those codecs along
+with it. To recommend `mplayer' is, in effect, to promote use of the
+non-free codecs.
+
+ Thus, you should not recommend programs that strongly encourage the
+use of non-free software. This is why we do not list `mplayer' in the
+Free Software Directory.
+
+ A GNU package should not refer the user to any non-free documentation
+for free software. Free documentation that can be included in free
+operating systems is essential for completing the GNU system, or any
+free operating system, so encouraging it is a priority; to recommend
+use of documentation that we are not allowed to include undermines the
+impetus for the community to produce documentation that we can include.
+So GNU packages should never recommend non-free documentation.
+
+ By contrast, it is ok to refer to journal articles and textbooks in
+the comments of a program for explanation of how it functions, even
+though they are non-free. This is because we don't include such things
+in the GNU system even if they are free--they are outside the scope of
+what a software distribution needs to include.
+
+ Referring to a web site that describes or recommends a non-free
+program is promoting that program, so please do not make links to (or
+mention by name) web sites that contain such material. This policy is
+relevant particularly for the web pages for a GNU package.
+
+ Following links from nearly any web site can lead eventually to
+non-free software; this is inherent in the nature of the web. So it
+makes no sense to criticize a site for having such links. As long as
+the site does not itself recommend a non-free program, there is no need
+to consider the question of the sites that it links to for other
+reasons.
+
+ Thus, for example, you should not refer to AT&T's web site if that
+recommends AT&T's non-free software packages; you should not refer to a
+site that links to AT&T's site presenting it as a place to get some
+non-free program, because that link recommends and legitimizes the
+non-free program. However, that a site contains a link to AT&T's web
+site for some other purpose (such as long-distance telephone service)
+is not an objection against it.
+
+
+File: standards.info, Node: GNU Free Documentation License, Next: Index, Prev: References, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: standards.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* #endif, commenting: Comments. (line 60)
+* --help output: --help. (line 6)
+* --version output: --version. (line 6)
+* -Wall compiler option: Syntactic Conventions.
+ (line 10)
+* accepting contributions: Contributions. (line 6)
+* address for bug reports: --help. (line 11)
+* ANSI C standard: Standard C. (line 6)
+* arbitrary limits on data: Semantics. (line 6)
+* ASCII characters: Character Set. (line 6)
+* autoconf: System Portability. (line 23)
+* avoiding proprietary code: Reading Non-Free Code.
+ (line 6)
+* behavior, dependent on program's name: User Interfaces. (line 6)
+* binary packages: Install Command Categories.
+ (line 80)
+* bindir: Directory Variables. (line 57)
+* braces, in C source: Formatting. (line 6)
+* bug reports: --help. (line 11)
+* bug-standards@gnu.org email address: Preface. (line 30)
+* C library functions, and portability: System Functions. (line 6)
+* canonical name of a program: --version. (line 12)
+* casting pointers to integers: CPU Portability. (line 50)
+* CGI programs, standard options for: Command-Line Interfaces.
+ (line 31)
+* change logs: Change Logs. (line 6)
+* change logs, conditional changes: Conditional Changes. (line 6)
+* change logs, style: Style of Change Logs.
+ (line 6)
+* character set: Character Set. (line 6)
+* clang: Syntactic Conventions.
+ (line 17)
+* command-line arguments, decoding: Semantics. (line 47)
+* command-line interface: Command-Line Interfaces.
+ (line 6)
+* commenting: Comments. (line 6)
+* compatibility with C and POSIX standards: Compatibility. (line 6)
+* compiler warnings: Syntactic Conventions.
+ (line 10)
+* conditional changes, and change logs: Conditional Changes. (line 6)
+* conditionals, comments for: Comments. (line 60)
+* configure: Configuration. (line 6)
+* control-L: Formatting. (line 128)
+* conventions for makefiles: Makefile Conventions.
+ (line 6)
+* CORBA: Graphical Interfaces.
+ (line 16)
+* credits for manuals: Manual Credits. (line 6)
+* D-bus: Graphical Interfaces.
+ (line 16)
+* data structures, in Gnulib: System Functions. (line 44)
+* data types, and portability: CPU Portability. (line 6)
+* DESTDIR: DESTDIR. (line 6)
+* directories, creating installation: Directory Variables. (line 20)
+* documentation: Documentation. (line 6)
+* doschk: Names. (line 38)
+* double quote: Quote Characters. (line 6)
+* downloading this manual: Preface. (line 14)
+* dynamic plug-ins: Dynamic Plug-In Interfaces.
+ (line 6)
+* encodings: Character Set. (line 6)
+* enum types, formatting: Formatting. (line 45)
+* error messages: Semantics. (line 19)
+* error messages, formatting: Errors. (line 6)
+* error messages, in Gnulib: System Functions. (line 44)
+* exec_prefix: Directory Variables. (line 39)
+* expressions, splitting: Formatting. (line 91)
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+* file usage: File Usage. (line 6)
+* file-name limitations: Names. (line 38)
+* formatting error messages: Errors. (line 6)
+* formatting source code: Formatting. (line 6)
+* formfeed: Formatting. (line 128)
+* function argument, declaring: Syntactic Conventions.
+ (line 6)
+* function definitions, formatting: Formatting. (line 6)
+* function prototypes: Standard C. (line 17)
+* getopt: Command-Line Interfaces.
+ (line 6)
+* gettext: Internationalization.
+ (line 6)
+* GNOME: Graphical Interfaces.
+ (line 16)
+* GNOME and Guile: Source Language. (line 38)
+* Gnulib: System Functions. (line 37)
+* gnustandards project repository: Preface. (line 30)
+* gnustandards-commit@gnu.org mailing list: Preface. (line 24)
+* graphical user interface: Graphical Interfaces.
+ (line 6)
+* grave accent: Quote Characters. (line 6)
+* GTK+: Graphical Interfaces.
+ (line 6)
+* Guile: Source Language. (line 38)
+* implicit int: Syntactic Conventions.
+ (line 6)
+* impossible conditions: Semantics. (line 71)
+* installation directories, creating: Directory Variables. (line 20)
+* installations, staged: DESTDIR. (line 6)
+* interface styles: Graphical Interfaces.
+ (line 6)
+* internationalization: Internationalization.
+ (line 6)
+* keyboard interface: Graphical Interfaces.
+ (line 16)
+* LDAP: OID Allocations. (line 6)
+* left quote: Quote Characters. (line 6)
+* legal aspects: Legal Issues. (line 6)
+* legal papers: Contributions. (line 6)
+* libexecdir: Directory Variables. (line 70)
+* libiconv: Semantics. (line 11)
+* libraries: Libraries. (line 6)
+* library functions, and portability: System Functions. (line 6)
+* library interface: Graphical Interfaces.
+ (line 16)
+* license for manuals: License for Manuals. (line 6)
+* lint: Syntactic Conventions.
+ (line 17)
+* locale-specific quote characters: Quote Characters. (line 6)
+* long option names: Option Table. (line 6)
+* long-named options: Command-Line Interfaces.
+ (line 12)
+* makefile, conventions for: Makefile Conventions.
+ (line 6)
+* malloc return value: Semantics. (line 26)
+* man pages: Man Pages. (line 6)
+* manual structure: Manual Structure Details.
+ (line 6)
+* memory allocation failure: Semantics. (line 26)
+* memory leak: Memory Usage. (line 23)
+* memory usage: Memory Usage. (line 6)
+* message text, and internationalization: Internationalization.
+ (line 29)
+* mmap: Mmap. (line 6)
+* multiple variables in a line: Syntactic Conventions.
+ (line 43)
+* names of variables, functions, and files: Names. (line 6)
+* NEWS file: NEWS File. (line 6)
+* non-ASCII characters: Character Set. (line 6)
+* non-POSIX systems, and portability: System Portability. (line 32)
+* non-standard extensions: Using Extensions. (line 6)
+* NUL characters: Semantics. (line 11)
+* OID allocations for GNU: OID Allocations. (line 6)
+* open brace: Formatting. (line 6)
+* opening quote: Quote Characters. (line 6)
+* optional features, configure-time: Configuration. (line 100)
+* options for compatibility: Compatibility. (line 14)
+* options, standard command-line: Command-Line Interfaces.
+ (line 31)
+* output device and program's behavior: User Interfaces. (line 13)
+* packaging: Releases. (line 6)
+* PATH_INFO, specifying standard options as: Command-Line Interfaces.
+ (line 31)
+* plug-ins: Dynamic Plug-In Interfaces.
+ (line 6)
+* plugin_is_GPL_compatible: Dynamic Plug-In Interfaces.
+ (line 17)
+* portability, and data types: CPU Portability. (line 6)
+* portability, and library functions: System Functions. (line 6)
+* portability, between system types: System Portability. (line 6)
+* POSIX compatibility: Compatibility. (line 6)
+* POSIX functions, and portability: System Functions. (line 6)
+* POSIXLY_CORRECT, environment variable: Compatibility. (line 21)
+* post-installation commands: Install Command Categories.
+ (line 6)
+* pre-installation commands: Install Command Categories.
+ (line 6)
+* prefix: Directory Variables. (line 29)
+* program configuration: Configuration. (line 6)
+* program design: Design Advice. (line 6)
+* program name and its behavior: User Interfaces. (line 6)
+* program's canonical name: --version. (line 12)
+* programming languages: Source Language. (line 6)
+* proprietary programs: Reading Non-Free Code.
+ (line 6)
+* quote characters: Quote Characters. (line 6)
+* README file: Releases. (line 21)
+* references to non-free material: References. (line 6)
+* releasing: Managing Releases. (line 6)
+* right quote: Quote Characters. (line 6)
+* Savannah repository for gnustandards: Preface. (line 30)
+* sbindir: Directory Variables. (line 63)
+* signal handling: Semantics. (line 60)
+* single quote: Quote Characters. (line 6)
+* SNMP: OID Allocations. (line 6)
+* spaces before open-paren: Formatting. (line 85)
+* staged installs: DESTDIR. (line 6)
+* standard command-line options: Command-Line Interfaces.
+ (line 31)
+* standards for makefiles: Makefile Conventions.
+ (line 6)
+* struct types, formatting: Formatting. (line 45)
+* syntactic conventions: Syntactic Conventions.
+ (line 6)
+* table of long options: Option Table. (line 6)
+* temporary files: Semantics. (line 85)
+* temporary variables: Syntactic Conventions.
+ (line 31)
+* texinfo.tex, in a distribution: Releases. (line 72)
+* TMPDIR environment variable: Semantics. (line 85)
+* trademarks: Trademarks. (line 6)
+* user interface styles: Graphical Interfaces.
+ (line 6)
+* valgrind: Memory Usage. (line 23)
+* where to obtain standards.texi: Preface. (line 14)
+* X.509: OID Allocations. (line 6)
+* xmalloc, in Gnulib: System Functions. (line 44)
+
+
+
+Tag Table:
+Node: Top824
+Node: Preface2122
+Node: Legal Issues4834
+Node: Reading Non-Free Code5304
+Node: Contributions7034
+Node: Trademarks9220
+Node: Design Advice10855
+Node: Source Language11447
+Node: Compatibility13573
+Node: Using Extensions15201
+Node: Standard C16777
+Node: Conditional Compilation19180
+Node: Program Behavior20578
+Node: Non-GNU Standards21768
+Node: Semantics24049
+Node: Libraries28993
+Node: Errors30238
+Node: User Interfaces32807
+Node: Graphical Interfaces34412
+Node: Command-Line Interfaces35596
+Node: --version37642
+Node: --help43380
+Node: Dynamic Plug-In Interfaces44253
+Node: Option Table46152
+Node: OID Allocations61110
+Node: Memory Usage62944
+Node: File Usage64219
+Node: Writing C64969
+Node: Formatting65950
+Node: Comments70438
+Node: Syntactic Conventions73990
+Node: Names77965
+Node: System Portability80177
+Node: CPU Portability83068
+Node: System Functions85434
+Node: Internationalization87976
+Node: Character Set91976
+Node: Quote Characters92831
+Node: Mmap94390
+Node: Documentation95098
+Node: GNU Manuals96204
+Node: Doc Strings and Manuals101942
+Node: Manual Structure Details103495
+Node: License for Manuals104913
+Node: Manual Credits105887
+Node: Printed Manuals106280
+Node: NEWS File106966
+Node: Change Logs107644
+Node: Change Log Concepts108398
+Node: Style of Change Logs110501
+Node: Simple Changes113001
+Node: Conditional Changes114443
+Node: Indicating the Part Changed116884
+Node: Man Pages117411
+Node: Reading other Manuals119617
+Node: Managing Releases120408
+Node: Configuration121189
+Node: Makefile Conventions129854
+Node: Makefile Basics130853
+Node: Utilities in Makefiles134027
+Node: Command Variables136532
+Node: DESTDIR139778
+Node: Directory Variables141952
+Node: Standard Targets156574
+Node: Install Command Categories170675
+Node: Releases175208
+Node: References179322
+Node: GNU Free Documentation License185175
+Node: Index210342
+
+End Tag Table
diff --git a/doc/standards.texi b/doc/standards.texi
new file mode 100644
index 0000000..69a400e
--- /dev/null
+++ b/doc/standards.texi
@@ -0,0 +1,4256 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename standards.info
+@settitle GNU Coding Standards
+@c This date is automagically updated when you save this file:
+@set lastupdate April 7, 2012
+@c %**end of header
+
+@dircategory GNU organization
+@direntry
+* Standards: (standards). GNU coding standards.
+@end direntry
+
+@c @setchapternewpage odd
+@setchapternewpage off
+
+@c Put everything in one index (arbitrarily chosen to be the concept index).
+@syncodeindex fn cp
+@syncodeindex ky cp
+@syncodeindex pg cp
+@syncodeindex vr cp
+
+@c This is used by a cross ref in make-stds.texi
+@set CODESTD 1
+
+@copying
+The GNU coding standards, last updated @value{lastupdate}.
+
+Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+2011, 2012 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+@end copying
+
+@titlepage
+@title GNU Coding Standards
+@author Richard Stallman, et al.
+@author last updated @value{lastupdate}
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top GNU Coding Standards
+
+@insertcopying
+@end ifnottex
+
+@menu
+* Preface:: About the GNU Coding Standards.
+* Legal Issues:: Keeping free software free.
+* Design Advice:: General program design.
+* Program Behavior:: Program behavior for all programs
+* Writing C:: Making the best use of C.
+* Documentation:: Documenting programs.
+* Managing Releases:: The release process.
+* References:: Mentioning non-free software or documentation.
+* GNU Free Documentation License:: Copying and sharing this manual.
+* Index::
+
+@end menu
+
+@node Preface
+@chapter About the GNU Coding Standards
+
+The GNU Coding Standards were written by Richard Stallman and other GNU
+Project volunteers. Their purpose is to make the GNU system clean,
+consistent, and easy to install. This document can also be read as a
+guide to writing portable, robust and reliable programs. It focuses on
+programs written in C, but many of the rules and principles are useful
+even if you write in another programming language. The rules often
+state reasons for writing in a certain way.
+
+@cindex where to obtain @code{standards.texi}
+@cindex downloading this manual
+If you did not obtain this file directly from the GNU project and
+recently, please check for a newer version. You can get the GNU
+Coding Standards from the GNU web server in many
+different formats, including the Texinfo source, PDF, HTML, DVI, plain
+text, and more, at: @uref{http://www.gnu.org/prep/standards/}.
+
+If you are maintaining an official GNU package, in addition to this
+document, please read and follow the GNU maintainer information
+(@pxref{Top, , Contents, maintain, Information for Maintainers of GNU
+Software}).
+
+@cindex @code{gnustandards-commit@@gnu.org} mailing list
+If you want to receive diffs for every change to these GNU documents,
+join the mailing list @code{gnustandards-commit@@gnu.org}, via the web
+interface at
+@url{http://lists.gnu.org/mailman/listinfo/gnustandards-commit}.
+Archives are also available there.
+
+@cindex @code{bug-standards@@gnu.org} email address
+@cindex Savannah repository for gnustandards
+@cindex gnustandards project repository
+Please send corrections or suggestions for this document to
+@email{bug-standards@@gnu.org}. If you make a suggestion, please
+include a suggested new wording for it, to help us consider the
+suggestion efficiently. We prefer a context diff to the Texinfo
+source, but if that's difficult for you, you can make a context diff
+for some other version of this document, or propose it in any way that
+makes it clear. The source repository for this document can be found
+at @url{http://savannah.gnu.org/projects/gnustandards}.
+
+These standards cover the minimum of what is important when writing a
+GNU package. Likely, the need for additional standards will come up.
+Sometimes, you might suggest that such standards be added to this
+document. If you think your standards would be generally useful, please
+do suggest them.
+
+You should also set standards for your package on many questions not
+addressed or not firmly specified here. The most important point is to
+be self-consistent---try to stick to the conventions you pick, and try
+to document them as much as possible. That way, your program will be
+more maintainable by others.
+
+The GNU Hello program serves as an example of how to follow the GNU
+coding standards for a trivial program.
+@uref{http://www.gnu.org/software/hello/hello.html}.
+
+This release of the GNU Coding Standards was last updated
+@value{lastupdate}.
+
+
+@node Legal Issues
+@chapter Keeping Free Software Free
+@cindex legal aspects
+
+This chapter discusses how you can make sure that GNU software
+avoids legal difficulties, and other related issues.
+
+@menu
+* Reading Non-Free Code:: Referring to proprietary programs.
+* Contributions:: Accepting contributions.
+* Trademarks:: How we deal with trademark issues.
+@end menu
+
+@node Reading Non-Free Code
+@section Referring to Proprietary Programs
+@cindex proprietary programs
+@cindex avoiding proprietary code
+
+Don't in any circumstances refer to Unix source code for or during
+your work on GNU! (Or to any other proprietary programs.)
+
+If you have a vague recollection of the internals of a Unix program,
+this does not absolutely mean you can't write an imitation of it, but
+do try to organize the imitation internally along different lines,
+because this is likely to make the details of the Unix version
+irrelevant and dissimilar to your results.
+
+For example, Unix utilities were generally optimized to minimize
+memory use; if you go for speed instead, your program will be very
+different. You could keep the entire input file in memory and scan it
+there instead of using stdio. Use a smarter algorithm discovered more
+recently than the Unix program. Eliminate use of temporary files. Do
+it in one pass instead of two (we did this in the assembler).
+
+Or, on the contrary, emphasize simplicity instead of speed. For some
+applications, the speed of today's computers makes simpler algorithms
+adequate.
+
+Or go for generality. For example, Unix programs often have static
+tables or fixed-size strings, which make for arbitrary limits; use
+dynamic allocation instead. Make sure your program handles NULs and
+other funny characters in the input files. Add a programming language
+for extensibility and write part of the program in that language.
+
+Or turn some parts of the program into independently usable libraries.
+Or use a simple garbage collector instead of tracking precisely when
+to free memory, or use a new GNU facility such as obstacks.
+
+
+@node Contributions
+@section Accepting Contributions
+@cindex legal papers
+@cindex accepting contributions
+
+If the program you are working on is copyrighted by the Free Software
+Foundation, then when someone else sends you a piece of code to add to
+the program, we need legal papers to use it---just as we asked you to
+sign papers initially. @emph{Each} person who makes a nontrivial
+contribution to a program must sign some sort of legal papers in order
+for us to have clear title to the program; the main author alone is not
+enough.
+
+So, before adding in any contributions from other people, please tell
+us, so we can arrange to get the papers. Then wait until we tell you
+that we have received the signed papers, before you actually use the
+contribution.
+
+This applies both before you release the program and afterward. If
+you receive diffs to fix a bug, and they make significant changes, we
+need legal papers for that change.
+
+This also applies to comments and documentation files. For copyright
+law, comments and code are just text. Copyright applies to all kinds of
+text, so we need legal papers for all kinds.
+
+We know it is frustrating to ask for legal papers; it's frustrating for
+us as well. But if you don't wait, you are going out on a limb---for
+example, what if the contributor's employer won't sign a disclaimer?
+You might have to take that code out again!
+
+You don't need papers for changes of a few lines here or there, since
+they are not significant for copyright purposes. Also, you don't need
+papers if all you get from the suggestion is some ideas, not actual code
+which you use. For example, if someone sent you one implementation, but
+you write a different implementation of the same idea, you don't need to
+get papers.
+
+The very worst thing is if you forget to tell us about the other
+contributor. We could be very embarrassed in court some day as a
+result.
+
+We have more detailed advice for maintainers of GNU packages. If you
+have reached the stage of maintaining a GNU program (whether released
+or not), please take a look: @pxref{Legal Matters,,, maintain,
+Information for GNU Maintainers}.
+
+
+@node Trademarks
+@section Trademarks
+@cindex trademarks
+
+Please do not include any trademark acknowledgements in GNU software
+packages or documentation.
+
+Trademark acknowledgements are the statements that such-and-such is a
+trademark of so-and-so. The GNU Project has no objection to the basic
+idea of trademarks, but these acknowledgements feel like kowtowing,
+and there is no legal requirement for them, so we don't use them.
+
+What is legally required, as regards other people's trademarks, is to
+avoid using them in ways which a reader might reasonably understand as
+naming or labeling our own programs or activities. For example, since
+``Objective C'' is (or at least was) a trademark, we made sure to say
+that we provide a ``compiler for the Objective C language'' rather
+than an ``Objective C compiler''. The latter would have been meant as
+a shorter way of saying the former, but it does not explicitly state
+the relationship, so it could be misinterpreted as using ``Objective
+C'' as a label for the compiler rather than for the language.
+
+Please don't use ``win'' as an abbreviation for Microsoft Windows in
+GNU software or documentation. In hacker terminology, calling
+something a ``win'' is a form of praise. If you wish to praise
+Microsoft Windows when speaking on your own, by all means do so, but
+not in GNU software. Usually we write the name ``Windows'' in full,
+but when brevity is very important (as in file names and sometimes
+symbol names), we abbreviate it to ``w''. For instance, the files and
+functions in Emacs that deal with Windows start with @samp{w32}.
+
+@node Design Advice
+@chapter General Program Design
+@cindex program design
+
+This chapter discusses some of the issues you should take into
+account when designing your program.
+
+@c Standard or ANSI C
+@c
+@c In 1989 the American National Standards Institute (ANSI) standardized
+@c C as standard X3.159-1989. In December of that year the
+@c International Standards Organization ISO adopted the ANSI C standard
+@c making minor changes. In 1990 ANSI then re-adopted ISO standard
+@c C. This version of C is known as either ANSI C or Standard C.
+
+@c A major revision of the C Standard appeared in 1999.
+
+@menu
+* Source Language:: Which languages to use.
+* Compatibility:: Compatibility with other implementations.
+* Using Extensions:: Using non-standard features.
+* Standard C:: Using standard C features.
+* Conditional Compilation:: Compiling code only if a conditional is true.
+@end menu
+
+@node Source Language
+@section Which Languages to Use
+@cindex programming languages
+
+When you want to use a language that gets compiled and runs at high
+speed, the best language to use is C. Using another language is like
+using a non-standard feature: it will cause trouble for users. Even if
+GCC supports the other language, users may find it inconvenient to have
+to install the compiler for that other language in order to build your
+program. For example, if you write your program in C++, people will
+have to install the GNU C++ compiler in order to compile your program.
+
+C has one other advantage over C++ and other compiled languages: more
+people know C, so more people will find it easy to read and modify the
+program if it is written in C.
+
+So in general it is much better to use C, rather than the
+comparable alternatives.
+
+But there are two exceptions to that conclusion:
+
+@itemize @bullet
+@item
+It is no problem to use another language to write a tool specifically
+intended for use with that language. That is because the only people
+who want to build the tool will be those who have installed the other
+language anyway.
+
+@item
+If an application is of interest only to a narrow part of the community,
+then the question of which language it is written in has less effect on
+other people, so you may as well please yourself.
+@end itemize
+
+Many programs are designed to be extensible: they include an interpreter
+for a language that is higher level than C. Often much of the program
+is written in that language, too. The Emacs editor pioneered this
+technique.
+
+@cindex Guile
+@cindex GNOME and Guile
+The standard extensibility interpreter for GNU software is Guile
+(@uref{http://www.gnu.org/@/software/@/guile/}), which implements the
+language Scheme (an especially clean and simple dialect of Lisp).
+Guile also includes bindings for GTK+/GNOME, making it practical to
+write modern GUI functionality within Guile. We don't reject programs
+written in other ``scripting languages'' such as Perl and Python, but
+using Guile is very important for the overall consistency of the GNU
+system.
+
+
+@node Compatibility
+@section Compatibility with Other Implementations
+@cindex compatibility with C and @sc{posix} standards
+@cindex @sc{posix} compatibility
+
+With occasional exceptions, utility programs and libraries for GNU
+should be upward compatible with those in Berkeley Unix, and upward
+compatible with Standard C if Standard C specifies their
+behavior, and upward compatible with @sc{posix} if @sc{posix} specifies
+their behavior.
+
+When these standards conflict, it is useful to offer compatibility
+modes for each of them.
+
+@cindex options for compatibility
+Standard C and @sc{posix} prohibit many kinds of extensions. Feel
+free to make the extensions anyway, and include a @samp{--ansi},
+@samp{--posix}, or @samp{--compatible} option to turn them off.
+However, if the extension has a significant chance of breaking any real
+programs or scripts, then it is not really upward compatible. So you
+should try to redesign its interface to make it upward compatible.
+
+@cindex @code{POSIXLY_CORRECT}, environment variable
+Many GNU programs suppress extensions that conflict with @sc{posix} if the
+environment variable @code{POSIXLY_CORRECT} is defined (even if it is
+defined with a null value). Please make your program recognize this
+variable if appropriate.
+
+When a feature is used only by users (not by programs or command
+files), and it is done poorly in Unix, feel free to replace it
+completely with something totally different and better. (For example,
+@code{vi} is replaced with Emacs.) But it is nice to offer a compatible
+feature as well. (There is a free @code{vi} clone, so we offer it.)
+
+Additional useful features are welcome regardless of whether
+there is any precedent for them.
+
+@node Using Extensions
+@section Using Non-standard Features
+@cindex non-standard extensions
+
+Many GNU facilities that already exist support a number of convenient
+extensions over the comparable Unix facilities. Whether to use these
+extensions in implementing your program is a difficult question.
+
+On the one hand, using the extensions can make a cleaner program.
+On the other hand, people will not be able to build the program
+unless the other GNU tools are available. This might cause the
+program to work on fewer kinds of machines.
+
+With some extensions, it might be easy to provide both alternatives.
+For example, you can define functions with a ``keyword'' @code{INLINE}
+and define that as a macro to expand into either @code{inline} or
+nothing, depending on the compiler.
+
+In general, perhaps it is best not to use the extensions if you can
+straightforwardly do without them, but to use the extensions if they
+are a big improvement.
+
+An exception to this rule are the large, established programs (such as
+Emacs) which run on a great variety of systems. Using GNU extensions in
+such programs would make many users unhappy, so we don't do that.
+
+Another exception is for programs that are used as part of compilation:
+anything that must be compiled with other compilers in order to
+bootstrap the GNU compilation facilities. If these require the GNU
+compiler, then no one can compile them without having them installed
+already. That would be extremely troublesome in certain cases.
+
+@node Standard C
+@section Standard C and Pre-Standard C
+@cindex @sc{ansi} C standard
+
+1989 Standard C is widespread enough now that it is ok to use its
+features in new programs. There is one exception: do not ever use the
+``trigraph'' feature of Standard C.
+
+1999 Standard C is not widespread yet, so please do not require its
+features in programs. It is ok to use its features if they are present.
+
+However, it is easy to support pre-standard compilers in most programs,
+so if you know how to do that, feel free. If a program you are
+maintaining has such support, you should try to keep it working.
+
+@cindex function prototypes
+To support pre-standard C, instead of writing function definitions in
+standard prototype form,
+
+@example
+int
+foo (int x, int y)
+@dots{}
+@end example
+
+@noindent
+write the definition in pre-standard style like this,
+
+@example
+int
+foo (x, y)
+ int x, y;
+@dots{}
+@end example
+
+@noindent
+and use a separate declaration to specify the argument prototype:
+
+@example
+int foo (int, int);
+@end example
+
+You need such a declaration anyway, in a header file, to get the benefit
+of prototypes in all the files where the function is called. And once
+you have the declaration, you normally lose nothing by writing the
+function definition in the pre-standard style.
+
+This technique does not work for integer types narrower than @code{int}.
+If you think of an argument as being of a type narrower than @code{int},
+declare it as @code{int} instead.
+
+There are a few special cases where this technique is hard to use. For
+example, if a function argument needs to hold the system type
+@code{dev_t}, you run into trouble, because @code{dev_t} is shorter than
+@code{int} on some machines; but you cannot use @code{int} instead,
+because @code{dev_t} is wider than @code{int} on some machines. There
+is no type you can safely use on all machines in a non-standard
+definition. The only way to support non-standard C and pass such an
+argument is to check the width of @code{dev_t} using Autoconf and choose
+the argument type accordingly. This may not be worth the trouble.
+
+In order to support pre-standard compilers that do not recognize
+prototypes, you may want to use a preprocessor macro like this:
+
+@example
+/* Declare the prototype for a general external function. */
+#if defined (__STDC__) || defined (WINDOWSNT)
+#define P_(proto) proto
+#else
+#define P_(proto) ()
+#endif
+@end example
+
+@node Conditional Compilation
+@section Conditional Compilation
+
+When supporting configuration options already known when building your
+program we prefer using @code{if (... )} over conditional compilation,
+as in the former case the compiler is able to perform more extensive
+checking of all possible code paths.
+
+For example, please write
+
+@smallexample
+ if (HAS_FOO)
+ ...
+ else
+ ...
+@end smallexample
+
+@noindent
+instead of:
+
+@smallexample
+ #ifdef HAS_FOO
+ ...
+ #else
+ ...
+ #endif
+@end smallexample
+
+A modern compiler such as GCC will generate exactly the same code in
+both cases, and we have been using similar techniques with good success
+in several projects. Of course, the former method assumes that
+@code{HAS_FOO} is defined as either 0 or 1.
+
+While this is not a silver bullet solving all portability problems,
+and is not always appropriate, following this policy would have saved
+GCC developers many hours, or even days, per year.
+
+In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in
+GCC which cannot be simply used in @code{if (...)} statements, there is
+an easy workaround. Simply introduce another macro
+@code{HAS_REVERSIBLE_CC_MODE} as in the following example:
+
+@smallexample
+ #ifdef REVERSIBLE_CC_MODE
+ #define HAS_REVERSIBLE_CC_MODE 1
+ #else
+ #define HAS_REVERSIBLE_CC_MODE 0
+ #endif
+@end smallexample
+
+@node Program Behavior
+@chapter Program Behavior for All Programs
+
+This chapter describes conventions for writing robust
+software. It also describes general standards for error messages, the
+command line interface, and how libraries should behave.
+
+@menu
+* Non-GNU Standards:: We consider standards such as POSIX;
+ we don't "obey" them.
+* Semantics:: Writing robust programs.
+* Libraries:: Library behavior.
+* Errors:: Formatting error messages.
+* User Interfaces:: Standards about interfaces generally.
+* Graphical Interfaces:: Standards for graphical interfaces.
+* Command-Line Interfaces:: Standards for command line interfaces.
+* Dynamic Plug-In Interfaces:: Standards for dynamic plug-in interfaces.
+* Option Table:: Table of long options.
+* OID Allocations:: Table of OID slots for GNU.
+* Memory Usage:: When and how to care about memory needs.
+* File Usage:: Which files to use, and where.
+@end menu
+
+@node Non-GNU Standards
+@section Non-GNU Standards
+
+The GNU Project regards standards published by other organizations as
+suggestions, not orders. We consider those standards, but we do not
+``obey'' them. In developing a GNU program, you should implement
+an outside standard's specifications when that makes the GNU system
+better overall in an objective sense. When it doesn't, you shouldn't.
+
+In most cases, following published standards is convenient for
+users---it means that their programs or scripts will work more
+portably. For instance, GCC implements nearly all the features of
+Standard C as specified by that standard. C program developers would
+be unhappy if it did not. And GNU utilities mostly follow
+specifications of POSIX.2; shell script writers and users would be
+unhappy if our programs were incompatible.
+
+But we do not follow either of these specifications rigidly, and there
+are specific points on which we decided not to follow them, so as to
+make the GNU system better for users.
+
+For instance, Standard C says that nearly all extensions to C are
+prohibited. How silly! GCC implements many extensions, some of which
+were later adopted as part of the standard. If you want these
+constructs to give an error message as ``required'' by the standard,
+you must specify @samp{--pedantic}, which was implemented only so that
+we can say ``GCC is a 100% implementation of the standard'', not
+because there is any reason to actually use it.
+
+POSIX.2 specifies that @samp{df} and @samp{du} must output sizes by
+default in units of 512 bytes. What users want is units of 1k, so
+that is what we do by default. If you want the ridiculous behavior
+``required'' by POSIX, you must set the environment variable
+@samp{POSIXLY_CORRECT} (which was originally going to be named
+@samp{POSIX_ME_HARDER}).
+
+GNU utilities also depart from the letter of the POSIX.2 specification
+when they support long-named command-line options, and intermixing
+options with ordinary arguments. This minor incompatibility with
+POSIX is never a problem in practice, and it is very useful.
+
+In particular, don't reject a new feature, or remove an old one,
+merely because a standard says it is ``forbidden'' or ``deprecated''.
+
+
+@node Semantics
+@section Writing Robust Programs
+
+@cindex arbitrary limits on data
+Avoid arbitrary limits on the length or number of @emph{any} data
+structure, including file names, lines, files, and symbols, by allocating
+all data structures dynamically. In most Unix utilities, ``long lines
+are silently truncated''. This is not acceptable in a GNU utility.
+
+@cindex @code{NUL} characters
+@findex libiconv
+Utilities reading files should not drop NUL characters, or any other
+nonprinting characters @emph{including those with codes above 0177}.
+The only sensible exceptions would be utilities specifically intended
+for interface to certain types of terminals or printers that can't
+handle those characters. Whenever possible, try to make programs work
+properly with sequences of bytes that represent multibyte characters;
+UTF-8 is the most important.
+
+@cindex error messages
+Check every system call for an error return, unless you know you wish
+to ignore errors. Include the system error text (from @code{perror},
+@code{strerror}, or equivalent) in @emph{every} error message
+resulting from a failing system call, as well as the name of the file
+if any and the name of the utility. Just ``cannot open foo.c'' or
+``stat failed'' is not sufficient.
+
+@cindex @code{malloc} return value
+@cindex memory allocation failure
+Check every call to @code{malloc} or @code{realloc} to see if it
+returned zero. Check @code{realloc} even if you are making the block
+smaller; in a system that rounds block sizes to a power of 2,
+@code{realloc} may get a different block if you ask for less space.
+
+In Unix, @code{realloc} can destroy the storage block if it returns
+zero. GNU @code{realloc} does not have this bug: if it fails, the
+original block is unchanged. Feel free to assume the bug is fixed. If
+you wish to run your program on Unix, and wish to avoid lossage in this
+case, you can use the GNU @code{malloc}.
+
+You must expect @code{free} to alter the contents of the block that was
+freed. Anything you want to fetch from the block, you must fetch before
+calling @code{free}.
+
+If @code{malloc} fails in a noninteractive program, make that a fatal
+error. In an interactive program (one that reads commands from the
+user), it is better to abort the command and return to the command
+reader loop. This allows the user to kill other processes to free up
+virtual memory, and then try the command again.
+
+@cindex command-line arguments, decoding
+Use @code{getopt_long} to decode arguments, unless the argument syntax
+makes this unreasonable.
+
+When static storage is to be written in during program execution, use
+explicit C code to initialize it. Reserve C initialized declarations
+for data that will not be changed.
+@c ADR: why?
+
+Try to avoid low-level interfaces to obscure Unix data structures (such
+as file directories, utmp, or the layout of kernel memory), since these
+are less likely to work compatibly. If you need to find all the files
+in a directory, use @code{readdir} or some other high-level interface.
+These are supported compatibly by GNU.
+
+@cindex signal handling
+The preferred signal handling facilities are the BSD variant of
+@code{signal}, and the @sc{posix} @code{sigaction} function; the
+alternative USG @code{signal} interface is an inferior design.
+
+Nowadays, using the @sc{posix} signal functions may be the easiest way
+to make a program portable. If you use @code{signal}, then on GNU/Linux
+systems running GNU libc version 1, you should include
+@file{bsd/signal.h} instead of @file{signal.h}, so as to get BSD
+behavior. It is up to you whether to support systems where
+@code{signal} has only the USG behavior, or give up on them.
+
+@cindex impossible conditions
+In error checks that detect ``impossible'' conditions, just abort.
+There is usually no point in printing any message. These checks
+indicate the existence of bugs. Whoever wants to fix the bugs will have
+to read the source code and run a debugger. So explain the problem with
+comments in the source. The relevant data will be in variables, which
+are easy to examine with the debugger, so there is no point moving them
+elsewhere.
+
+Do not use a count of errors as the exit status for a program.
+@emph{That does not work}, because exit status values are limited to 8
+bits (0 through 255). A single run of the program might have 256
+errors; if you try to return 256 as the exit status, the parent process
+will see 0 as the status, and it will appear that the program succeeded.
+
+@cindex temporary files
+@cindex @code{TMPDIR} environment variable
+If you make temporary files, check the @code{TMPDIR} environment
+variable; if that variable is defined, use the specified directory
+instead of @file{/tmp}.
+
+In addition, be aware that there is a possible security problem when
+creating temporary files in world-writable directories. In C, you can
+avoid this problem by creating temporary files in this manner:
+
+@example
+fd = open (filename, O_WRONLY | O_CREAT | O_EXCL, 0600);
+@end example
+
+@noindent
+or by using the @code{mkstemps} function from Gnulib
+(@pxref{mkstemps,,, gnulib, Gnulib}).
+
+In bash, use @code{set -C} (long name @code{noclobber}) to avoid this
+problem. In addition, the @code{mktemp} utility is a more general
+solution for creating temporary files from shell scripts
+(@pxref{mktemp invocation,,, coreutils, GNU Coreutils}).
+
+
+@node Libraries
+@section Library Behavior
+@cindex libraries
+
+Try to make library functions reentrant. If they need to do dynamic
+storage allocation, at least try to avoid any nonreentrancy aside from
+that of @code{malloc} itself.
+
+Here are certain name conventions for libraries, to avoid name
+conflicts.
+
+Choose a name prefix for the library, more than two characters long.
+All external function and variable names should start with this
+prefix. In addition, there should only be one of these in any given
+library member. This usually means putting each one in a separate
+source file.
+
+An exception can be made when two external symbols are always used
+together, so that no reasonable program could use one without the
+other; then they can both go in the same file.
+
+External symbols that are not documented entry points for the user
+should have names beginning with @samp{_}. The @samp{_} should be
+followed by the chosen name prefix for the library, to prevent
+collisions with other libraries. These can go in the same files with
+user entry points if you like.
+
+Static functions and variables can be used as you like and need not
+fit any naming convention.
+
+@node Errors
+@section Formatting Error Messages
+@cindex formatting error messages
+@cindex error messages, formatting
+
+Error messages from compilers should look like this:
+
+@example
+@var{sourcefile}:@var{lineno}: @var{message}
+@end example
+
+@noindent
+If you want to mention the column number, use one of these formats:
+
+@example
+@var{sourcefile}:@var{lineno}:@var{column}: @var{message}
+@var{sourcefile}:@var{lineno}.@var{column}: @var{message}
+
+@end example
+
+@noindent
+Line numbers should start from 1 at the beginning of the file, and
+column numbers should start from 1 at the beginning of the line.
+(Both of these conventions are chosen for compatibility.) Calculate
+column numbers assuming that space and all ASCII printing characters
+have equal width, and assuming tab stops every 8 columns. For
+non-ASCII characters, Unicode character widths should be used when in
+a UTF-8 locale; GNU libc and GNU gnulib provide suitable
+@code{wcwidth} functions.
+
+The error message can also give both the starting and ending positions
+of the erroneous text. There are several formats so that you can
+avoid redundant information such as a duplicate line number.
+Here are the possible formats:
+
+@example
+@var{sourcefile}:@var{line1}.@var{column1}-@var{line2}.@var{column2}: @var{message}
+@var{sourcefile}:@var{line1}.@var{column1}-@var{column2}: @var{message}
+@var{sourcefile}:@var{line1}-@var{line2}: @var{message}
+@end example
+
+@noindent
+When an error is spread over several files, you can use this format:
+
+@example
+@var{file1}:@var{line1}.@var{column1}-@var{file2}:@var{line2}.@var{column2}: @var{message}
+@end example
+
+Error messages from other noninteractive programs should look like this:
+
+@example
+@var{program}:@var{sourcefile}:@var{lineno}: @var{message}
+@end example
+
+@noindent
+when there is an appropriate source file, or like this:
+
+@example
+@var{program}: @var{message}
+@end example
+
+@noindent
+when there is no relevant source file.
+
+If you want to mention the column number, use this format:
+
+@example
+@var{program}:@var{sourcefile}:@var{lineno}:@var{column}: @var{message}
+@end example
+
+In an interactive program (one that is reading commands from a
+terminal), it is better not to include the program name in an error
+message. The place to indicate which program is running is in the
+prompt or with the screen layout. (When the same program runs with
+input from a source other than a terminal, it is not interactive and
+would do best to print error messages using the noninteractive style.)
+
+The string @var{message} should not begin with a capital letter when
+it follows a program name and/or file name, because that isn't the
+beginning of a sentence. (The sentence conceptually starts at the
+beginning of the line.) Also, it should not end with a period.
+
+Error messages from interactive programs, and other messages such as
+usage messages, should start with a capital letter. But they should not
+end with a period.
+
+@node User Interfaces
+@section Standards for Interfaces Generally
+
+@cindex program name and its behavior
+@cindex behavior, dependent on program's name
+Please don't make the behavior of a utility depend on the name used
+to invoke it. It is useful sometimes to make a link to a utility
+with a different name, and that should not change what it does.
+
+Instead, use a run time option or a compilation switch or both
+to select among the alternate behaviors.
+
+@cindex output device and program's behavior
+Likewise, please don't make the behavior of the program depend on the
+type of output device it is used with. Device independence is an
+important principle of the system's design; do not compromise it merely
+to save someone from typing an option now and then. (Variation in error
+message syntax when using a terminal is ok, because that is a side issue
+that people do not depend on.)
+
+If you think one behavior is most useful when the output is to a
+terminal, and another is most useful when the output is a file or a
+pipe, then it is usually best to make the default behavior the one that
+is useful with output to a terminal, and have an option for the other
+behavior.
+
+Compatibility requires certain programs to depend on the type of output
+device. It would be disastrous if @code{ls} or @code{sh} did not do so
+in the way all users expect. In some of these cases, we supplement the
+program with a preferred alternate version that does not depend on the
+output device type. For example, we provide a @code{dir} program much
+like @code{ls} except that its default output format is always
+multi-column format.
+
+
+@node Graphical Interfaces
+@section Standards for Graphical Interfaces
+@cindex graphical user interface
+@cindex interface styles
+@cindex user interface styles
+
+@cindex GTK+
+When you write a program that provides a graphical user interface,
+please make it work with the X Window System and the GTK+ toolkit
+unless the functionality specifically requires some alternative (for
+example, ``displaying jpeg images while in console mode'').
+
+In addition, please provide a command-line interface to control the
+functionality. (In many cases, the graphical user interface can be a
+separate program which invokes the command-line program.) This is
+so that the same jobs can be done from scripts.
+
+@cindex CORBA
+@cindex GNOME
+@cindex D-bus
+@cindex keyboard interface
+@cindex library interface
+Please also consider providing a D-bus interface for use from other
+running programs, such as within GNOME. (GNOME used to use CORBA
+for this, but that is being phased out.) In addition, consider
+providing a library interface (for use from C), and perhaps a
+keyboard-driven console interface (for use by users from console
+mode). Once you are doing the work to provide the functionality and
+the graphical interface, these won't be much extra work.
+
+
+@node Command-Line Interfaces
+@section Standards for Command Line Interfaces
+@cindex command-line interface
+
+@findex getopt
+It is a good idea to follow the @sc{posix} guidelines for the
+command-line options of a program. The easiest way to do this is to use
+@code{getopt} to parse them. Note that the GNU version of @code{getopt}
+will normally permit options anywhere among the arguments unless the
+special argument @samp{--} is used. This is not what @sc{posix}
+specifies; it is a GNU extension.
+
+@cindex long-named options
+Please define long-named options that are equivalent to the
+single-letter Unix-style options. We hope to make GNU more user
+friendly this way. This is easy to do with the GNU function
+@code{getopt_long}.
+
+One of the advantages of long-named options is that they can be
+consistent from program to program. For example, users should be able
+to expect the ``verbose'' option of any GNU program which has one, to be
+spelled precisely @samp{--verbose}. To achieve this uniformity, look at
+the table of common long-option names when you choose the option names
+for your program (@pxref{Option Table}).
+
+It is usually a good idea for file names given as ordinary arguments to
+be input files only; any output files would be specified using options
+(preferably @samp{-o} or @samp{--output}). Even if you allow an output
+file name as an ordinary argument for compatibility, try to provide an
+option as another way to specify it. This will lead to more consistency
+among GNU utilities, and fewer idiosyncrasies for users to remember.
+
+@cindex standard command-line options
+@cindex options, standard command-line
+@cindex CGI programs, standard options for
+@cindex PATH_INFO, specifying standard options as
+All programs should support two standard options: @samp{--version}
+and @samp{--help}. CGI programs should accept these as command-line
+options, and also if given as the @env{PATH_INFO}; for instance,
+visiting @url{http://example.org/p.cgi/--help} in a browser should
+output the same information as invoking @samp{p.cgi --help} from the
+command line.
+
+@menu
+* --version:: The standard output for --version.
+* --help:: The standard output for --help.
+@end menu
+
+@node --version
+@subsection @option{--version}
+
+@cindex @samp{--version} output
+
+The standard @code{--version} option should direct the program to
+print information about its name, version, origin and legal status,
+all on standard output, and then exit successfully. Other options and
+arguments should be ignored once this is seen, and the program should
+not perform its normal function.
+
+@cindex canonical name of a program
+@cindex program's canonical name
+The first line is meant to be easy for a program to parse; the version
+number proper starts after the last space. In addition, it contains
+the canonical name for this program, in this format:
+
+@example
+GNU Emacs 19.30
+@end example
+
+@noindent
+The program's name should be a constant string; @emph{don't} compute it
+from @code{argv[0]}. The idea is to state the standard or canonical
+name for the program, not its file name. There are other ways to find
+out the precise file name where a command is found in @code{PATH}.
+
+If the program is a subsidiary part of a larger package, mention the
+package name in parentheses, like this:
+
+@example
+emacsserver (GNU Emacs) 19.30
+@end example
+
+@noindent
+If the package has a version number which is different from this
+program's version number, you can mention the package version number
+just before the close-parenthesis.
+
+If you @emph{need} to mention the version numbers of libraries which
+are distributed separately from the package which contains this program,
+you can do so by printing an additional line of version info for each
+library you want to mention. Use the same format for these lines as for
+the first line.
+
+Please do not mention all of the libraries that the program uses ``just
+for completeness''---that would produce a lot of unhelpful clutter.
+Please mention library version numbers only if you find in practice that
+they are very important to you in debugging.
+
+The following line, after the version number line or lines, should be a
+copyright notice. If more than one copyright notice is called for, put
+each on a separate line.
+
+Next should follow a line stating the license, preferably using one of
+abbreviations below, and a brief statement that the program is free
+software, and that users are free to copy and change it. Also mention
+that there is no warranty, to the extent permitted by law. See
+recommended wording below.
+
+It is ok to finish the output with a list of the major authors of the
+program, as a way of giving credit.
+
+Here's an example of output that follows these rules:
+
+@smallexample
+GNU hello 2.3
+Copyright (C) 2007 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+@end smallexample
+
+You should adapt this to your program, of course, filling in the proper
+year, copyright holder, name of program, and the references to
+distribution terms, and changing the rest of the wording as necessary.
+
+This copyright notice only needs to mention the most recent year in
+which changes were made---there's no need to list the years for previous
+versions' changes. You don't have to mention the name of the program in
+these notices, if that is inconvenient, since it appeared in the first
+line. (The rules are different for copyright notices in source files;
+@pxref{Copyright Notices,,,maintain,Information for GNU Maintainers}.)
+
+Translations of the above lines must preserve the validity of the
+copyright notices (@pxref{Internationalization}). If the translation's
+character set supports it, the @samp{(C)} should be replaced with the
+copyright symbol, as follows:
+
+@ifinfo
+(the official copyright symbol, which is the letter C in a circle);
+@end ifinfo
+@ifnotinfo
+@copyright{}
+@end ifnotinfo
+
+Write the word ``Copyright'' exactly like that, in English. Do not
+translate it into another language. International treaties recognize
+the English word ``Copyright''; translations into other languages do not
+have legal significance.
+
+Finally, here is the table of our suggested license abbreviations.
+Any abbreviation can be followed by @samp{v@var{version}[+]}, meaning
+that particular version, or later versions with the @samp{+}, as shown
+above.
+
+In the case of exceptions for extra permissions with the GPL, we use
+@samp{/} for a separator; the version number can follow the license
+abbreviation as usual, as in the examples below.
+
+@table @asis
+@item GPL
+GNU General Public License, @url{http://www.gnu.org/@/licenses/@/gpl.html}.
+
+@item LGPL
+GNU Lesser General Public License, @url{http://www.gnu.org/@/licenses/@/lgpl.html}.
+
+@item GPL/Ada
+GNU GPL with the exception for Ada.
+
+@item Apache
+The Apache Software Foundation license,
+@url{http://www.apache.org/@/licenses}.
+
+@item Artistic
+The Artistic license used for Perl, @url{http://www.perlfoundation.org/@/legal}.
+
+@item Expat
+The Expat license, @url{http://www.jclark.com/@/xml/@/copying.txt}.
+
+@item MPL
+The Mozilla Public License, @url{http://www.mozilla.org/@/MPL/}.
+
+@item OBSD
+The original (4-clause) BSD license, incompatible with the GNU GPL
+@url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#6}.
+
+@item PHP
+The license used for PHP, @url{http://www.php.net/@/license/}.
+
+@item public domain
+The non-license that is being in the public domain,
+@url{http://www.gnu.org/@/licenses/@/license-list.html#PublicDomain}.
+
+@item Python
+The license for Python, @url{http://www.python.org/@/2.0.1/@/license.html}.
+
+@item RBSD
+The revised (3-clause) BSD, compatible with the GNU GPL,@*
+@url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#5}.
+
+@item X11
+The simple non-copyleft license used for most versions of the X Window
+System, @url{http://www.xfree86.org/@/3.3.6/@/COPYRIGHT2.html#3}.
+
+@item Zlib
+The license for Zlib, @url{http://www.gzip.org/@/zlib/@/zlib_license.html}.
+
+@end table
+
+More information about these licenses and many more are on the GNU
+licensing web pages,
+@url{http://www.gnu.org/@/licenses/@/license-list.html}.
+
+
+@node --help
+@subsection @option{--help}
+
+@cindex @samp{--help} output
+
+The standard @code{--help} option should output brief documentation
+for how to invoke the program, on standard output, then exit
+successfully. Other options and arguments should be ignored once this
+is seen, and the program should not perform its normal function.
+
+@cindex address for bug reports
+@cindex bug reports
+Near the end of the @samp{--help} option's output, please place lines
+giving the email address for bug reports, the package's home page
+(normally @indicateurl{http://www.gnu.org/software/@var{pkg}}, and the
+general page for help using GNU programs. The format should be like this:
+
+@example
+Report bugs to: @var{mailing-address}
+@var{pkg} home page: <http://www.gnu.org/software/@var{pkg}/>
+General help using GNU software: <http://www.gnu.org/gethelp/>
+@end example
+
+It is ok to mention other appropriate mailing lists and web pages.
+
+
+@node Dynamic Plug-In Interfaces
+@section Standards for Dynamic Plug-in Interfaces
+@cindex plug-ins
+@cindex dynamic plug-ins
+
+Another aspect of keeping free programs free is encouraging
+development of free plug-ins, and discouraging development of
+proprietary plug-ins. Many GNU programs will not have anything like
+plug-ins at all, but those that do should follow these
+practices.
+
+First, the general plug-in architecture design should closely tie the
+plug-in to the original code, such that the plug-in and the base
+program are parts of one extended program. For GCC, for example,
+plug-ins receive and modify GCC's internal data structures, and so
+clearly form an extended program with the base GCC.
+
+@vindex plugin_is_GPL_compatible
+Second, you should require plug-in developers to affirm that their
+plug-ins are released under an appropriate license. This should be
+enforced with a simple programmatic check. For GCC, again for
+example, a plug-in must define the global symbol
+@code{plugin_is_GPL_compatible}, thus asserting that the plug-in is
+released under a GPL-compatible license (@pxref{Plugins,, Plugins,
+gccint, GCC Internals}).
+
+By adding this check to your program you are not creating a new legal
+requirement. The GPL itself requires plug-ins to be free software,
+licensed compatibly. As long as you have followed the first rule above
+to keep plug-ins closely tied to your original program, the GPL and AGPL
+already require those plug-ins to be released under a compatible
+license. The symbol definition in the plug-in---or whatever equivalent
+works best in your program---makes it harder for anyone who might
+distribute proprietary plug-ins to legally defend themselves. If a case
+about this got to court, we can point to that symbol as evidence that
+the plug-in developer understood that the license had this requirement.
+
+
+@node Option Table
+@section Table of Long Options
+@cindex long option names
+@cindex table of long options
+
+Here is a table of long options used by GNU programs. It is surely
+incomplete, but we aim to list all the options that a new program might
+want to be compatible with. If you use names not already in the table,
+please send @email{bug-standards@@gnu.org} a list of them, with their
+meanings, so we can update the table.
+
+@c Please leave newlines between items in this table; it's much easier
+@c to update when it isn't completely squashed together and unreadable.
+@c When there is more than one short option for a long option name, put
+@c a semicolon between the lists of the programs that use them, not a
+@c period. --friedman
+
+@table @samp
+@item after-date
+@samp{-N} in @code{tar}.
+
+@item all
+@samp{-a} in @code{du}, @code{ls}, @code{nm}, @code{stty}, @code{uname},
+and @code{unexpand}.
+
+@item all-text
+@samp{-a} in @code{diff}.
+
+@item almost-all
+@samp{-A} in @code{ls}.
+
+@item append
+@samp{-a} in @code{etags}, @code{tee}, @code{time};
+@samp{-r} in @code{tar}.
+
+@item archive
+@samp{-a} in @code{cp}.
+
+@item archive-name
+@samp{-n} in @code{shar}.
+
+@item arglength
+@samp{-l} in @code{m4}.
+
+@item ascii
+@samp{-a} in @code{diff}.
+
+@item assign
+@samp{-v} in @code{gawk}.
+
+@item assume-new
+@samp{-W} in @code{make}.
+
+@item assume-old
+@samp{-o} in @code{make}.
+
+@item auto-check
+@samp{-a} in @code{recode}.
+
+@item auto-pager
+@samp{-a} in @code{wdiff}.
+
+@item auto-reference
+@samp{-A} in @code{ptx}.
+
+@item avoid-wraps
+@samp{-n} in @code{wdiff}.
+
+@item background
+For server programs, run in the background.
+
+@item backward-search
+@samp{-B} in @code{ctags}.
+
+@item basename
+@samp{-f} in @code{shar}.
+
+@item batch
+Used in GDB.
+
+@item baud
+Used in GDB.
+
+@item before
+@samp{-b} in @code{tac}.
+
+@item binary
+@samp{-b} in @code{cpio} and @code{diff}.
+
+@item bits-per-code
+@samp{-b} in @code{shar}.
+
+@item block-size
+Used in @code{cpio} and @code{tar}.
+
+@item blocks
+@samp{-b} in @code{head} and @code{tail}.
+
+@item break-file
+@samp{-b} in @code{ptx}.
+
+@item brief
+Used in various programs to make output shorter.
+
+@item bytes
+@samp{-c} in @code{head}, @code{split}, and @code{tail}.
+
+@item c@t{++}
+@samp{-C} in @code{etags}.
+
+@item catenate
+@samp{-A} in @code{tar}.
+
+@item cd
+Used in various programs to specify the directory to use.
+
+@item changes
+@samp{-c} in @code{chgrp} and @code{chown}.
+
+@item classify
+@samp{-F} in @code{ls}.
+
+@item colons
+@samp{-c} in @code{recode}.
+
+@item command
+@samp{-c} in @code{su};
+@samp{-x} in GDB.
+
+@item compare
+@samp{-d} in @code{tar}.
+
+@item compat
+Used in @code{gawk}.
+
+@item compress
+@samp{-Z} in @code{tar} and @code{shar}.
+
+@item concatenate
+@samp{-A} in @code{tar}.
+
+@item confirmation
+@samp{-w} in @code{tar}.
+
+@item context
+Used in @code{diff}.
+
+@item copyleft
+@samp{-W copyleft} in @code{gawk}.
+
+@item copyright
+@samp{-C} in @code{ptx}, @code{recode}, and @code{wdiff};
+@samp{-W copyright} in @code{gawk}.
+
+@item core
+Used in GDB.
+
+@item count
+@samp{-q} in @code{who}.
+
+@item count-links
+@samp{-l} in @code{du}.
+
+@item create
+Used in @code{tar} and @code{cpio}.
+
+@item cut-mark
+@samp{-c} in @code{shar}.
+
+@item cxref
+@samp{-x} in @code{ctags}.
+
+@item date
+@samp{-d} in @code{touch}.
+
+@item debug
+@samp{-d} in @code{make} and @code{m4};
+@samp{-t} in Bison.
+
+@item define
+@samp{-D} in @code{m4}.
+
+@item defines
+@samp{-d} in Bison and @code{ctags}.
+
+@item delete
+@samp{-D} in @code{tar}.
+
+@item dereference
+@samp{-L} in @code{chgrp}, @code{chown}, @code{cpio}, @code{du},
+@code{ls}, and @code{tar}.
+
+@item dereference-args
+@samp{-D} in @code{du}.
+
+@item device
+Specify an I/O device (special file name).
+
+@item diacritics
+@samp{-d} in @code{recode}.
+
+@item dictionary-order
+@samp{-d} in @code{look}.
+
+@item diff
+@samp{-d} in @code{tar}.
+
+@item digits
+@samp{-n} in @code{csplit}.
+
+@item directory
+Specify the directory to use, in various programs. In @code{ls}, it
+means to show directories themselves rather than their contents. In
+@code{rm} and @code{ln}, it means to not treat links to directories
+specially.
+
+@item discard-all
+@samp{-x} in @code{strip}.
+
+@item discard-locals
+@samp{-X} in @code{strip}.
+
+@item dry-run
+@samp{-n} in @code{make}.
+
+@item ed
+@samp{-e} in @code{diff}.
+
+@item elide-empty-files
+@samp{-z} in @code{csplit}.
+
+@item end-delete
+@samp{-x} in @code{wdiff}.
+
+@item end-insert
+@samp{-z} in @code{wdiff}.
+
+@item entire-new-file
+@samp{-N} in @code{diff}.
+
+@item environment-overrides
+@samp{-e} in @code{make}.
+
+@item eof
+@samp{-e} in @code{xargs}.
+
+@item epoch
+Used in GDB.
+
+@item error-limit
+Used in @code{makeinfo}.
+
+@item error-output
+@samp{-o} in @code{m4}.
+
+@item escape
+@samp{-b} in @code{ls}.
+
+@item exclude-from
+@samp{-X} in @code{tar}.
+
+@item exec
+Used in GDB.
+
+@item exit
+@samp{-x} in @code{xargs}.
+
+@item exit-0
+@samp{-e} in @code{unshar}.
+
+@item expand-tabs
+@samp{-t} in @code{diff}.
+
+@item expression
+@samp{-e} in @code{sed}.
+
+@item extern-only
+@samp{-g} in @code{nm}.
+
+@item extract
+@samp{-i} in @code{cpio};
+@samp{-x} in @code{tar}.
+
+@item faces
+@samp{-f} in @code{finger}.
+
+@item fast
+@samp{-f} in @code{su}.
+
+@item fatal-warnings
+@samp{-E} in @code{m4}.
+
+@item file
+@samp{-f} in @code{gawk}, @code{info}, @code{make}, @code{mt},
+@code{sed}, and @code{tar}.
+
+@item field-separator
+@samp{-F} in @code{gawk}.
+
+@item file-prefix
+@samp{-b} in Bison.
+
+@item file-type
+@samp{-F} in @code{ls}.
+
+@item files-from
+@samp{-T} in @code{tar}.
+
+@item fill-column
+Used in @code{makeinfo}.
+
+@item flag-truncation
+@samp{-F} in @code{ptx}.
+
+@item fixed-output-files
+@samp{-y} in Bison.
+
+@item follow
+@samp{-f} in @code{tail}.
+
+@item footnote-style
+Used in @code{makeinfo}.
+
+@item force
+@samp{-f} in @code{cp}, @code{ln}, @code{mv}, and @code{rm}.
+
+@item force-prefix
+@samp{-F} in @code{shar}.
+
+@item foreground
+For server programs, run in the foreground;
+in other words, don't do anything special to run the server
+in the background.
+
+@item format
+Used in @code{ls}, @code{time}, and @code{ptx}.
+
+@item freeze-state
+@samp{-F} in @code{m4}.
+
+@item fullname
+Used in GDB.
+
+@item gap-size
+@samp{-g} in @code{ptx}.
+
+@item get
+@samp{-x} in @code{tar}.
+
+@item graphic
+@samp{-i} in @code{ul}.
+
+@item graphics
+@samp{-g} in @code{recode}.
+
+@item group
+@samp{-g} in @code{install}.
+
+@item gzip
+@samp{-z} in @code{tar} and @code{shar}.
+
+@item hashsize
+@samp{-H} in @code{m4}.
+
+@item header
+@samp{-h} in @code{objdump} and @code{recode}
+
+@item heading
+@samp{-H} in @code{who}.
+
+@item help
+Used to ask for brief usage information.
+
+@item here-delimiter
+@samp{-d} in @code{shar}.
+
+@item hide-control-chars
+@samp{-q} in @code{ls}.
+
+@item html
+In @code{makeinfo}, output HTML.
+
+@item idle
+@samp{-u} in @code{who}.
+
+@item ifdef
+@samp{-D} in @code{diff}.
+
+@item ignore
+@samp{-I} in @code{ls};
+@samp{-x} in @code{recode}.
+
+@item ignore-all-space
+@samp{-w} in @code{diff}.
+
+@item ignore-backups
+@samp{-B} in @code{ls}.
+
+@item ignore-blank-lines
+@samp{-B} in @code{diff}.
+
+@item ignore-case
+@samp{-f} in @code{look} and @code{ptx};
+@samp{-i} in @code{diff} and @code{wdiff}.
+
+@item ignore-errors
+@samp{-i} in @code{make}.
+
+@item ignore-file
+@samp{-i} in @code{ptx}.
+
+@item ignore-indentation
+@samp{-I} in @code{etags}.
+
+@item ignore-init-file
+@samp{-f} in Oleo.
+
+@item ignore-interrupts
+@samp{-i} in @code{tee}.
+
+@item ignore-matching-lines
+@samp{-I} in @code{diff}.
+
+@item ignore-space-change
+@samp{-b} in @code{diff}.
+
+@item ignore-zeros
+@samp{-i} in @code{tar}.
+
+@item include
+@samp{-i} in @code{etags};
+@samp{-I} in @code{m4}.
+
+@item include-dir
+@samp{-I} in @code{make}.
+
+@item incremental
+@samp{-G} in @code{tar}.
+
+@item info
+@samp{-i}, @samp{-l}, and @samp{-m} in Finger.
+
+@item init-file
+In some programs, specify the name of the file to read as the user's
+init file.
+
+@item initial
+@samp{-i} in @code{expand}.
+
+@item initial-tab
+@samp{-T} in @code{diff}.
+
+@item inode
+@samp{-i} in @code{ls}.
+
+@item interactive
+@samp{-i} in @code{cp}, @code{ln}, @code{mv}, @code{rm};
+@samp{-e} in @code{m4};
+@samp{-p} in @code{xargs};
+@samp{-w} in @code{tar}.
+
+@item intermix-type
+@samp{-p} in @code{shar}.
+
+@item iso-8601
+Used in @code{date}
+
+@item jobs
+@samp{-j} in @code{make}.
+
+@item just-print
+@samp{-n} in @code{make}.
+
+@item keep-going
+@samp{-k} in @code{make}.
+
+@item keep-files
+@samp{-k} in @code{csplit}.
+
+@item kilobytes
+@samp{-k} in @code{du} and @code{ls}.
+
+@item language
+@samp{-l} in @code{etags}.
+
+@item less-mode
+@samp{-l} in @code{wdiff}.
+
+@item level-for-gzip
+@samp{-g} in @code{shar}.
+
+@item line-bytes
+@samp{-C} in @code{split}.
+
+@item lines
+Used in @code{split}, @code{head}, and @code{tail}.
+
+@item link
+@samp{-l} in @code{cpio}.
+
+@item lint
+@itemx lint-old
+Used in @code{gawk}.
+
+@item list
+@samp{-t} in @code{cpio};
+@samp{-l} in @code{recode}.
+
+@item list
+@samp{-t} in @code{tar}.
+
+@item literal
+@samp{-N} in @code{ls}.
+
+@item load-average
+@samp{-l} in @code{make}.
+
+@item login
+Used in @code{su}.
+
+@item machine
+Used in @code{uname}.
+
+@item macro-name
+@samp{-M} in @code{ptx}.
+
+@item mail
+@samp{-m} in @code{hello} and @code{uname}.
+
+@item make-directories
+@samp{-d} in @code{cpio}.
+
+@item makefile
+@samp{-f} in @code{make}.
+
+@item mapped
+Used in GDB.
+
+@item max-args
+@samp{-n} in @code{xargs}.
+
+@item max-chars
+@samp{-n} in @code{xargs}.
+
+@item max-lines
+@samp{-l} in @code{xargs}.
+
+@item max-load
+@samp{-l} in @code{make}.
+
+@item max-procs
+@samp{-P} in @code{xargs}.
+
+@item mesg
+@samp{-T} in @code{who}.
+
+@item message
+@samp{-T} in @code{who}.
+
+@item minimal
+@samp{-d} in @code{diff}.
+
+@item mixed-uuencode
+@samp{-M} in @code{shar}.
+
+@item mode
+@samp{-m} in @code{install}, @code{mkdir}, and @code{mkfifo}.
+
+@item modification-time
+@samp{-m} in @code{tar}.
+
+@item multi-volume
+@samp{-M} in @code{tar}.
+
+@item name-prefix
+@samp{-a} in Bison.
+
+@item nesting-limit
+@samp{-L} in @code{m4}.
+
+@item net-headers
+@samp{-a} in @code{shar}.
+
+@item new-file
+@samp{-W} in @code{make}.
+
+@item no-builtin-rules
+@samp{-r} in @code{make}.
+
+@item no-character-count
+@samp{-w} in @code{shar}.
+
+@item no-check-existing
+@samp{-x} in @code{shar}.
+
+@item no-common
+@samp{-3} in @code{wdiff}.
+
+@item no-create
+@samp{-c} in @code{touch}.
+
+@item no-defines
+@samp{-D} in @code{etags}.
+
+@item no-deleted
+@samp{-1} in @code{wdiff}.
+
+@item no-dereference
+@samp{-d} in @code{cp}.
+
+@item no-inserted
+@samp{-2} in @code{wdiff}.
+
+@item no-keep-going
+@samp{-S} in @code{make}.
+
+@item no-lines
+@samp{-l} in Bison.
+
+@item no-piping
+@samp{-P} in @code{shar}.
+
+@item no-prof
+@samp{-e} in @code{gprof}.
+
+@item no-regex
+@samp{-R} in @code{etags}.
+
+@item no-sort
+@samp{-p} in @code{nm}.
+
+@item no-splash
+Don't print a startup splash screen.
+
+@item no-split
+Used in @code{makeinfo}.
+
+@item no-static
+@samp{-a} in @code{gprof}.
+
+@item no-time
+@samp{-E} in @code{gprof}.
+
+@item no-timestamp
+@samp{-m} in @code{shar}.
+
+@item no-validate
+Used in @code{makeinfo}.
+
+@item no-wait
+Used in @code{emacsclient}.
+
+@item no-warn
+Used in various programs to inhibit warnings.
+
+@item node
+@samp{-n} in @code{info}.
+
+@item nodename
+@samp{-n} in @code{uname}.
+
+@item nonmatching
+@samp{-f} in @code{cpio}.
+
+@item nstuff
+@samp{-n} in @code{objdump}.
+
+@item null
+@samp{-0} in @code{xargs}.
+
+@item number
+@samp{-n} in @code{cat}.
+
+@item number-nonblank
+@samp{-b} in @code{cat}.
+
+@item numeric-sort
+@samp{-n} in @code{nm}.
+
+@item numeric-uid-gid
+@samp{-n} in @code{cpio} and @code{ls}.
+
+@item nx
+Used in GDB.
+
+@item old-archive
+@samp{-o} in @code{tar}.
+
+@item old-file
+@samp{-o} in @code{make}.
+
+@item one-file-system
+@samp{-l} in @code{tar}, @code{cp}, and @code{du}.
+
+@item only-file
+@samp{-o} in @code{ptx}.
+
+@item only-prof
+@samp{-f} in @code{gprof}.
+
+@item only-time
+@samp{-F} in @code{gprof}.
+
+@item options
+@samp{-o} in @code{getopt}, @code{fdlist}, @code{fdmount},
+@code{fdmountd}, and @code{fdumount}.
+
+@item output
+In various programs, specify the output file name.
+
+@item output-prefix
+@samp{-o} in @code{shar}.
+
+@item override
+@samp{-o} in @code{rm}.
+
+@item overwrite
+@samp{-c} in @code{unshar}.
+
+@item owner
+@samp{-o} in @code{install}.
+
+@item paginate
+@samp{-l} in @code{diff}.
+
+@item paragraph-indent
+Used in @code{makeinfo}.
+
+@item parents
+@samp{-p} in @code{mkdir} and @code{rmdir}.
+
+@item pass-all
+@samp{-p} in @code{ul}.
+
+@item pass-through
+@samp{-p} in @code{cpio}.
+
+@item port
+@samp{-P} in @code{finger}.
+
+@item portability
+@samp{-c} in @code{cpio} and @code{tar}.
+
+@item posix
+Used in @code{gawk}.
+
+@item prefix-builtins
+@samp{-P} in @code{m4}.
+
+@item prefix
+@samp{-f} in @code{csplit}.
+
+@item preserve
+Used in @code{tar} and @code{cp}.
+
+@item preserve-environment
+@samp{-p} in @code{su}.
+
+@item preserve-modification-time
+@samp{-m} in @code{cpio}.
+
+@item preserve-order
+@samp{-s} in @code{tar}.
+
+@item preserve-permissions
+@samp{-p} in @code{tar}.
+
+@item print
+@samp{-l} in @code{diff}.
+
+@item print-chars
+@samp{-L} in @code{cmp}.
+
+@item print-data-base
+@samp{-p} in @code{make}.
+
+@item print-directory
+@samp{-w} in @code{make}.
+
+@item print-file-name
+@samp{-o} in @code{nm}.
+
+@item print-symdefs
+@samp{-s} in @code{nm}.
+
+@item printer
+@samp{-p} in @code{wdiff}.
+
+@item prompt
+@samp{-p} in @code{ed}.
+
+@item proxy
+Specify an HTTP proxy.
+
+@item query-user
+@samp{-X} in @code{shar}.
+
+@item question
+@samp{-q} in @code{make}.
+
+@item quiet
+Used in many programs to inhibit the usual output. Every
+program accepting @samp{--quiet} should accept @samp{--silent} as a
+synonym.
+
+@item quiet-unshar
+@samp{-Q} in @code{shar}
+
+@item quote-name
+@samp{-Q} in @code{ls}.
+
+@item rcs
+@samp{-n} in @code{diff}.
+
+@item re-interval
+Used in @code{gawk}.
+
+@item read-full-blocks
+@samp{-B} in @code{tar}.
+
+@item readnow
+Used in GDB.
+
+@item recon
+@samp{-n} in @code{make}.
+
+@item record-number
+@samp{-R} in @code{tar}.
+
+@item recursive
+Used in @code{chgrp}, @code{chown}, @code{cp}, @code{ls}, @code{diff},
+and @code{rm}.
+
+@item reference
+@samp{-r} in @code{touch}.
+
+@item references
+@samp{-r} in @code{ptx}.
+
+@item regex
+@samp{-r} in @code{tac} and @code{etags}.
+
+@item release
+@samp{-r} in @code{uname}.
+
+@item reload-state
+@samp{-R} in @code{m4}.
+
+@item relocation
+@samp{-r} in @code{objdump}.
+
+@item rename
+@samp{-r} in @code{cpio}.
+
+@item replace
+@samp{-i} in @code{xargs}.
+
+@item report-identical-files
+@samp{-s} in @code{diff}.
+
+@item reset-access-time
+@samp{-a} in @code{cpio}.
+
+@item reverse
+@samp{-r} in @code{ls} and @code{nm}.
+
+@item reversed-ed
+@samp{-f} in @code{diff}.
+
+@item right-side-defs
+@samp{-R} in @code{ptx}.
+
+@item same-order
+@samp{-s} in @code{tar}.
+
+@item same-permissions
+@samp{-p} in @code{tar}.
+
+@item save
+@samp{-g} in @code{stty}.
+
+@item se
+Used in GDB.
+
+@item sentence-regexp
+@samp{-S} in @code{ptx}.
+
+@item separate-dirs
+@samp{-S} in @code{du}.
+
+@item separator
+@samp{-s} in @code{tac}.
+
+@item sequence
+Used by @code{recode} to chose files or pipes for sequencing passes.
+
+@item shell
+@samp{-s} in @code{su}.
+
+@item show-all
+@samp{-A} in @code{cat}.
+
+@item show-c-function
+@samp{-p} in @code{diff}.
+
+@item show-ends
+@samp{-E} in @code{cat}.
+
+@item show-function-line
+@samp{-F} in @code{diff}.
+
+@item show-tabs
+@samp{-T} in @code{cat}.
+
+@item silent
+Used in many programs to inhibit the usual output.
+Every program accepting
+@samp{--silent} should accept @samp{--quiet} as a synonym.
+
+@item size
+@samp{-s} in @code{ls}.
+
+@item socket
+Specify a file descriptor for a network server to use for its socket,
+instead of opening and binding a new socket. This provides a way to
+run, in a non-privileged process, a server that normally needs a
+reserved port number.
+
+@item sort
+Used in @code{ls}.
+
+@item source
+@samp{-W source} in @code{gawk}.
+
+@item sparse
+@samp{-S} in @code{tar}.
+
+@item speed-large-files
+@samp{-H} in @code{diff}.
+
+@item split-at
+@samp{-E} in @code{unshar}.
+
+@item split-size-limit
+@samp{-L} in @code{shar}.
+
+@item squeeze-blank
+@samp{-s} in @code{cat}.
+
+@item start-delete
+@samp{-w} in @code{wdiff}.
+
+@item start-insert
+@samp{-y} in @code{wdiff}.
+
+@item starting-file
+Used in @code{tar} and @code{diff} to specify which file within
+a directory to start processing with.
+
+@item statistics
+@samp{-s} in @code{wdiff}.
+
+@item stdin-file-list
+@samp{-S} in @code{shar}.
+
+@item stop
+@samp{-S} in @code{make}.
+
+@item strict
+@samp{-s} in @code{recode}.
+
+@item strip
+@samp{-s} in @code{install}.
+
+@item strip-all
+@samp{-s} in @code{strip}.
+
+@item strip-debug
+@samp{-S} in @code{strip}.
+
+@item submitter
+@samp{-s} in @code{shar}.
+
+@item suffix
+@samp{-S} in @code{cp}, @code{ln}, @code{mv}.
+
+@item suffix-format
+@samp{-b} in @code{csplit}.
+
+@item sum
+@samp{-s} in @code{gprof}.
+
+@item summarize
+@samp{-s} in @code{du}.
+
+@item symbolic
+@samp{-s} in @code{ln}.
+
+@item symbols
+Used in GDB and @code{objdump}.
+
+@item synclines
+@samp{-s} in @code{m4}.
+
+@item sysname
+@samp{-s} in @code{uname}.
+
+@item tabs
+@samp{-t} in @code{expand} and @code{unexpand}.
+
+@item tabsize
+@samp{-T} in @code{ls}.
+
+@item terminal
+@samp{-T} in @code{tput} and @code{ul}.
+@samp{-t} in @code{wdiff}.
+
+@item text
+@samp{-a} in @code{diff}.
+
+@item text-files
+@samp{-T} in @code{shar}.
+
+@item time
+Used in @code{ls} and @code{touch}.
+
+@item timeout
+Specify how long to wait before giving up on some operation.
+
+@item to-stdout
+@samp{-O} in @code{tar}.
+
+@item total
+@samp{-c} in @code{du}.
+
+@item touch
+@samp{-t} in @code{make}, @code{ranlib}, and @code{recode}.
+
+@item trace
+@samp{-t} in @code{m4}.
+
+@item traditional
+@samp{-t} in @code{hello};
+@samp{-W traditional} in @code{gawk};
+@samp{-G} in @code{ed}, @code{m4}, and @code{ptx}.
+
+@item tty
+Used in GDB.
+
+@item typedefs
+@samp{-t} in @code{ctags}.
+
+@item typedefs-and-c++
+@samp{-T} in @code{ctags}.
+
+@item typeset-mode
+@samp{-t} in @code{ptx}.
+
+@item uncompress
+@samp{-z} in @code{tar}.
+
+@item unconditional
+@samp{-u} in @code{cpio}.
+
+@item undefine
+@samp{-U} in @code{m4}.
+
+@item undefined-only
+@samp{-u} in @code{nm}.
+
+@item update
+@samp{-u} in @code{cp}, @code{ctags}, @code{mv}, @code{tar}.
+
+@item usage
+Used in @code{gawk}; same as @samp{--help}.
+
+@item uuencode
+@samp{-B} in @code{shar}.
+
+@item vanilla-operation
+@samp{-V} in @code{shar}.
+
+@item verbose
+Print more information about progress. Many programs support this.
+
+@item verify
+@samp{-W} in @code{tar}.
+
+@item version
+Print the version number.
+
+@item version-control
+@samp{-V} in @code{cp}, @code{ln}, @code{mv}.
+
+@item vgrind
+@samp{-v} in @code{ctags}.
+
+@item volume
+@samp{-V} in @code{tar}.
+
+@item what-if
+@samp{-W} in @code{make}.
+
+@item whole-size-limit
+@samp{-l} in @code{shar}.
+
+@item width
+@samp{-w} in @code{ls} and @code{ptx}.
+
+@item word-regexp
+@samp{-W} in @code{ptx}.
+
+@item writable
+@samp{-T} in @code{who}.
+
+@item zeros
+@samp{-z} in @code{gprof}.
+@end table
+
+@node OID Allocations
+@section OID Allocations
+@cindex OID allocations for GNU
+@cindex SNMP
+@cindex LDAP
+@cindex X.509
+
+The OID (object identifier) 1.3.6.1.4.1.11591 has been assigned to the
+GNU Project (thanks to Werner Koch). These are used for SNMP, LDAP,
+X.509 certificates, and so on. The web site
+@url{http://www.alvestrand.no/objectid} has a (voluntary) listing of
+many OID assignments.
+
+If you need a new slot for your GNU package, write
+@email{maintainers@@gnu.org}. Here is a list of arcs currently
+assigned:
+
+@example
+@include gnu-oids.texi
+@end example
+
+
+@node Memory Usage
+@section Memory Usage
+@cindex memory usage
+
+If a program typically uses just a few meg of memory, don't bother making any
+effort to reduce memory usage. For example, if it is impractical for
+other reasons to operate on files more than a few meg long, it is
+reasonable to read entire input files into memory to operate on them.
+
+However, for programs such as @code{cat} or @code{tail}, that can
+usefully operate on very large files, it is important to avoid using a
+technique that would artificially limit the size of files it can handle.
+If a program works by lines and could be applied to arbitrary
+user-supplied input files, it should keep only a line in memory, because
+this is not very hard and users will want to be able to operate on input
+files that are bigger than will fit in memory all at once.
+
+If your program creates complicated data structures, just make them in
+memory and give a fatal error if @code{malloc} returns zero.
+
+@pindex valgrind
+@cindex memory leak
+Memory analysis tools such as @command{valgrind} can be useful, but
+don't complicate a program merely to avoid their false alarms. For
+example, if memory is used until just before a process exits, don't
+free it simply to silence such a tool.
+
+
+@node File Usage
+@section File Usage
+@cindex file usage
+
+Programs should be prepared to operate when @file{/usr} and @file{/etc}
+are read-only file systems. Thus, if the program manages log files,
+lock files, backup files, score files, or any other files which are
+modified for internal purposes, these files should not be stored in
+@file{/usr} or @file{/etc}.
+
+There are two exceptions. @file{/etc} is used to store system
+configuration information; it is reasonable for a program to modify
+files in @file{/etc} when its job is to update the system configuration.
+Also, if the user explicitly asks to modify one file in a directory, it
+is reasonable for the program to store other files in the same
+directory.
+
+@node Writing C
+@chapter Making The Best Use of C
+
+This chapter provides advice on how best to use the C language
+when writing GNU software.
+
+@menu
+* Formatting:: Formatting your source code.
+* Comments:: Commenting your work.
+* Syntactic Conventions:: Clean use of C constructs.
+* Names:: Naming variables, functions, and files.
+* System Portability:: Portability among different operating systems.
+* CPU Portability:: Supporting the range of CPU types.
+* System Functions:: Portability and ``standard'' library functions.
+* Internationalization:: Techniques for internationalization.
+* Character Set:: Use ASCII by default.
+* Quote Characters:: Use "..." or '...' in the C locale.
+* Mmap:: How you can safely use @code{mmap}.
+@end menu
+
+@node Formatting
+@section Formatting Your Source Code
+@cindex formatting source code
+
+@cindex open brace
+@cindex braces, in C source
+@cindex function definitions, formatting
+It is important to put the open-brace that starts the body of a C
+function in column one, so that they will start a defun. Several
+tools look for open-braces in column one to find the beginnings of C
+functions. These tools will not work on code not formatted that way.
+
+Avoid putting open-brace, open-parenthesis or open-bracket in column
+one when they are inside a function, so that they won't start a defun.
+The open-brace that starts a @code{struct} body can go in column one
+if you find it useful to treat that definition as a defun.
+
+It is also important for function definitions to start the name of the
+function in column one. This helps people to search for function
+definitions, and may also help certain tools recognize them. Thus,
+using Standard C syntax, the format is this:
+
+@example
+static char *
+concat (char *s1, char *s2)
+@{
+ @dots{}
+@}
+@end example
+
+@noindent
+or, if you want to use traditional C syntax, format the definition like
+this:
+
+@example
+static char *
+concat (s1, s2) /* Name starts in column one here */
+ char *s1, *s2;
+@{ /* Open brace in column one here */
+ @dots{}
+@}
+@end example
+
+In Standard C, if the arguments don't fit nicely on one line,
+split it like this:
+
+@example
+int
+lots_of_args (int an_integer, long a_long, short a_short,
+ double a_double, float a_float)
+@dots{}
+@end example
+
+@cindex @code{struct} types, formatting
+@cindex @code{enum} types, formatting
+For @code{struct} and @code{enum} types, likewise put the braces in
+column one, unless the whole contents fits on one line:
+
+@example
+struct foo
+@{
+ int a, b;
+@}
+@exdent @r{or}
+struct foo @{ int a, b; @}
+@end example
+
+The rest of this section gives our recommendations for other aspects of
+C formatting style, which is also the default style of the @code{indent}
+program in version 1.2 and newer. It corresponds to the options
+
+@smallexample
+-nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
+-ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -psl -nsc -nsob
+@end smallexample
+
+We don't think of these recommendations as requirements, because it
+causes no problems for users if two different programs have different
+formatting styles.
+
+But whatever style you use, please use it consistently, since a mixture
+of styles within one program tends to look ugly. If you are
+contributing changes to an existing program, please follow the style of
+that program.
+
+For the body of the function, our recommended style looks like this:
+
+@example
+if (x < foo (y, z))
+ haha = bar[4] + 5;
+else
+ @{
+ while (z)
+ @{
+ haha += foo (z, z);
+ z--;
+ @}
+ return ++x + bar ();
+ @}
+@end example
+
+@cindex spaces before open-paren
+We find it easier to read a program when it has spaces before the
+open-parentheses and after the commas. Especially after the commas.
+
+When you split an expression into multiple lines, split it
+before an operator, not after one. Here is the right way:
+
+@cindex expressions, splitting
+@example
+if (foo_this_is_long && bar > win (x, y, z)
+ && remaining_condition)
+@end example
+
+Try to avoid having two operators of different precedence at the same
+level of indentation. For example, don't write this:
+
+@example
+mode = (inmode[j] == VOIDmode
+ || GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])
+ ? outmode[j] : inmode[j]);
+@end example
+
+Instead, use extra parentheses so that the indentation shows the nesting:
+
+@example
+mode = ((inmode[j] == VOIDmode
+ || (GET_MODE_SIZE (outmode[j]) > GET_MODE_SIZE (inmode[j])))
+ ? outmode[j] : inmode[j]);
+@end example
+
+Insert extra parentheses so that Emacs will indent the code properly.
+For example, the following indentation looks nice if you do it by hand,
+
+@example
+v = rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+ + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000;
+@end example
+
+@noindent
+but Emacs would alter it. Adding a set of parentheses produces
+something that looks equally nice, and which Emacs will preserve:
+
+@example
+v = (rup->ru_utime.tv_sec*1000 + rup->ru_utime.tv_usec/1000
+ + rup->ru_stime.tv_sec*1000 + rup->ru_stime.tv_usec/1000);
+@end example
+
+Format do-while statements like this:
+
+@example
+do
+ @{
+ a = foo (a);
+ @}
+while (a > 0);
+@end example
+
+@cindex formfeed
+@cindex control-L
+Please use formfeed characters (control-L) to divide the program into
+pages at logical places (but not within a function). It does not matter
+just how long the pages are, since they do not have to fit on a printed
+page. The formfeeds should appear alone on lines by themselves.
+
+@node Comments
+@section Commenting Your Work
+@cindex commenting
+
+Every program should start with a comment saying briefly what it is for.
+Example: @samp{fmt - filter for simple filling of text}. This comment
+should be at the top of the source file containing the @samp{main}
+function of the program.
+
+Also, please write a brief comment at the start of each source file,
+with the file name and a line or two about the overall purpose of the
+file.
+
+Please write the comments in a GNU program in English, because English
+is the one language that nearly all programmers in all countries can
+read. If you do not write English well, please write comments in
+English as well as you can, then ask other people to help rewrite them.
+If you can't write comments in English, please find someone to work with
+you and translate your comments into English.
+
+Please put a comment on each function saying what the function does,
+what sorts of arguments it gets, and what the possible values of
+arguments mean and are used for. It is not necessary to duplicate in
+words the meaning of the C argument declarations, if a C type is being
+used in its customary fashion. If there is anything nonstandard about
+its use (such as an argument of type @code{char *} which is really the
+address of the second character of a string, not the first), or any
+possible values that would not work the way one would expect (such as,
+that strings containing newlines are not guaranteed to work), be sure
+to say so.
+
+Also explain the significance of the return value, if there is one.
+
+Please put two spaces after the end of a sentence in your comments, so
+that the Emacs sentence commands will work. Also, please write
+complete sentences and capitalize the first word. If a lower-case
+identifier comes at the beginning of a sentence, don't capitalize it!
+Changing the spelling makes it a different identifier. If you don't
+like starting a sentence with a lower case letter, write the sentence
+differently (e.g., ``The identifier lower-case is @dots{}'').
+
+The comment on a function is much clearer if you use the argument
+names to speak about the argument values. The variable name itself
+should be lower case, but write it in upper case when you are speaking
+about the value rather than the variable itself. Thus, ``the inode
+number NODE_NUM'' rather than ``an inode''.
+
+There is usually no purpose in restating the name of the function in
+the comment before it, because readers can see that for themselves.
+There might be an exception when the comment is so long that the function
+itself would be off the bottom of the screen.
+
+There should be a comment on each static variable as well, like this:
+
+@example
+/* Nonzero means truncate lines in the display;
+ zero means continue them. */
+int truncate_lines;
+@end example
+
+@cindex conditionals, comments for
+@cindex @code{#endif}, commenting
+Every @samp{#endif} should have a comment, except in the case of short
+conditionals (just a few lines) that are not nested. The comment should
+state the condition of the conditional that is ending, @emph{including
+its sense}. @samp{#else} should have a comment describing the condition
+@emph{and sense} of the code that follows. For example:
+
+@example
+@group
+#ifdef foo
+ @dots{}
+#else /* not foo */
+ @dots{}
+#endif /* not foo */
+@end group
+@group
+#ifdef foo
+ @dots{}
+#endif /* foo */
+@end group
+@end example
+
+@noindent
+but, by contrast, write the comments this way for a @samp{#ifndef}:
+
+@example
+@group
+#ifndef foo
+ @dots{}
+#else /* foo */
+ @dots{}
+#endif /* foo */
+@end group
+@group
+#ifndef foo
+ @dots{}
+#endif /* not foo */
+@end group
+@end example
+
+@node Syntactic Conventions
+@section Clean Use of C Constructs
+@cindex syntactic conventions
+
+@cindex implicit @code{int}
+@cindex function argument, declaring
+Please explicitly declare the types of all objects. For example, you
+should explicitly declare all arguments to functions, and you should
+declare functions to return @code{int} rather than omitting the
+@code{int}.
+
+@cindex compiler warnings
+@cindex @samp{-Wall} compiler option
+Some programmers like to use the GCC @samp{-Wall} option, and change the
+code whenever it issues a warning. If you want to do this, then do.
+Other programmers prefer not to use @samp{-Wall}, because it gives
+warnings for valid and legitimate code which they do not want to change.
+If you want to do this, then do. The compiler should be your servant,
+not your master.
+
+@pindex clang
+@pindex lint
+Don't make the program ugly just to placate static analysis tools such
+as @command{lint}, @command{clang}, and GCC with extra warnings
+options such as @option{-Wconversion} and @option{-Wundef}. These
+tools can help find bugs and unclear code, but they can also generate
+so many false alarms that it hurts readability to silence them with
+unnecessary casts, wrappers, and other complications. For example,
+please don't insert casts to @code{void} or calls to do-nothing
+functions merely to pacify a lint checker.
+
+Declarations of external functions and functions to appear later in the
+source file should all go in one place near the beginning of the file
+(somewhere before the first function definition in the file), or else
+should go in a header file. Don't put @code{extern} declarations inside
+functions.
+
+@cindex temporary variables
+It used to be common practice to use the same local variables (with
+names like @code{tem}) over and over for different values within one
+function. Instead of doing this, it is better to declare a separate local
+variable for each distinct purpose, and give it a name which is
+meaningful. This not only makes programs easier to understand, it also
+facilitates optimization by good compilers. You can also move the
+declaration of each local variable into the smallest scope that includes
+all its uses. This makes the program even cleaner.
+
+Don't use local variables or parameters that shadow global identifiers.
+GCC's @samp{-Wshadow} option can detect this problem.
+
+@cindex multiple variables in a line
+Don't declare multiple variables in one declaration that spans lines.
+Start a new declaration on each line, instead. For example, instead
+of this:
+
+@example
+@group
+int foo,
+ bar;
+@end group
+@end example
+
+@noindent
+write either this:
+
+@example
+int foo, bar;
+@end example
+
+@noindent
+or this:
+
+@example
+int foo;
+int bar;
+@end example
+
+@noindent
+(If they are global variables, each should have a comment preceding it
+anyway.)
+
+When you have an @code{if}-@code{else} statement nested in another
+@code{if} statement, always put braces around the @code{if}-@code{else}.
+Thus, never write like this:
+
+@example
+if (foo)
+ if (bar)
+ win ();
+ else
+ lose ();
+@end example
+
+@noindent
+always like this:
+
+@example
+if (foo)
+ @{
+ if (bar)
+ win ();
+ else
+ lose ();
+ @}
+@end example
+
+If you have an @code{if} statement nested inside of an @code{else}
+statement, either write @code{else if} on one line, like this,
+
+@example
+if (foo)
+ @dots{}
+else if (bar)
+ @dots{}
+@end example
+
+@noindent
+with its @code{then}-part indented like the preceding @code{then}-part,
+or write the nested @code{if} within braces like this:
+
+@example
+if (foo)
+ @dots{}
+else
+ @{
+ if (bar)
+ @dots{}
+ @}
+@end example
+
+Don't declare both a structure tag and variables or typedefs in the
+same declaration. Instead, declare the structure tag separately
+and then use it to declare the variables or typedefs.
+
+Try to avoid assignments inside @code{if}-conditions (assignments
+inside @code{while}-conditions are ok). For example, don't write
+this:
+
+@example
+if ((foo = (char *) malloc (sizeof *foo)) == 0)
+ fatal ("virtual memory exhausted");
+@end example
+
+@noindent
+instead, write this:
+
+@example
+foo = (char *) malloc (sizeof *foo);
+if (foo == 0)
+ fatal ("virtual memory exhausted");
+@end example
+
+This example uses zero without a cast as a null pointer constant.
+This is perfectly fine, except that a cast is needed when calling a
+varargs function or when using @code{sizeof}.
+
+@node Names
+@section Naming Variables, Functions, and Files
+
+@cindex names of variables, functions, and files
+The names of global variables and functions in a program serve as
+comments of a sort. So don't choose terse names---instead, look for
+names that give useful information about the meaning of the variable or
+function. In a GNU program, names should be English, like other
+comments.
+
+Local variable names can be shorter, because they are used only within
+one context, where (presumably) comments explain their purpose.
+
+Try to limit your use of abbreviations in symbol names. It is ok to
+make a few abbreviations, explain what they mean, and then use them
+frequently, but don't use lots of obscure abbreviations.
+
+Please use underscores to separate words in a name, so that the Emacs
+word commands can be useful within them. Stick to lower case; reserve
+upper case for macros and @code{enum} constants, and for name-prefixes
+that follow a uniform convention.
+
+For example, you should use names like @code{ignore_space_change_flag};
+don't use names like @code{iCantReadThis}.
+
+Variables that indicate whether command-line options have been
+specified should be named after the meaning of the option, not after
+the option-letter. A comment should state both the exact meaning of
+the option and its letter. For example,
+
+@example
+@group
+/* Ignore changes in horizontal whitespace (-b). */
+int ignore_space_change_flag;
+@end group
+@end example
+
+When you want to define names with constant integer values, use
+@code{enum} rather than @samp{#define}. GDB knows about enumeration
+constants.
+
+@cindex file-name limitations
+@pindex doschk
+You might want to make sure that none of the file names would conflict
+if the files were loaded onto an MS-DOS file system which shortens the
+names. You can use the program @code{doschk} to test for this.
+
+Some GNU programs were designed to limit themselves to file names of 14
+characters or less, to avoid file name conflicts if they are read into
+older System V systems. Please preserve this feature in the existing
+GNU programs that have it, but there is no need to do this in new GNU
+programs. @code{doschk} also reports file names longer than 14
+characters.
+
+
+@node System Portability
+@section Portability between System Types
+@cindex portability, between system types
+
+In the Unix world, ``portability'' refers to porting to different Unix
+versions. For a GNU program, this kind of portability is desirable, but
+not paramount.
+
+The primary purpose of GNU software is to run on top of the GNU kernel,
+compiled with the GNU C compiler, on various types of @sc{cpu}. So the
+kinds of portability that are absolutely necessary are quite limited.
+But it is important to support Linux-based GNU systems, since they
+are the form of GNU that is popular.
+
+Beyond that, it is good to support the other free operating systems
+(*BSD), and it is nice to support other Unix-like systems if you want
+to. Supporting a variety of Unix-like systems is desirable, although
+not paramount. It is usually not too hard, so you may as well do it.
+But you don't have to consider it an obligation, if it does turn out to
+be hard.
+
+@pindex autoconf
+The easiest way to achieve portability to most Unix-like systems is to
+use Autoconf. It's unlikely that your program needs to know more
+information about the host platform than Autoconf can provide, simply
+because most of the programs that need such knowledge have already been
+written.
+
+Avoid using the format of semi-internal data bases (e.g., directories)
+when there is a higher-level alternative (@code{readdir}).
+
+@cindex non-@sc{posix} systems, and portability
+As for systems that are not like Unix, such as MSDOS, Windows, VMS, MVS,
+and older Macintosh systems, supporting them is often a lot of work.
+When that is the case, it is better to spend your time adding features
+that will be useful on GNU and GNU/Linux, rather than on supporting
+other incompatible systems.
+
+If you do support Windows, please do not abbreviate it as ``win''. In
+hacker terminology, calling something a ``win'' is a form of praise.
+You're free to praise Microsoft Windows on your own if you want, but
+please don't do this in GNU packages. Instead of abbreviating
+``Windows'' to ``win'', you can write it in full or abbreviate it to
+``woe'' or ``w''. In GNU Emacs, for instance, we use @samp{w32} in
+file names of Windows-specific files, but the macro for Windows
+conditionals is called @code{WINDOWSNT}.
+
+It is a good idea to define the ``feature test macro''
+@code{_GNU_SOURCE} when compiling your C files. When you compile on GNU
+or GNU/Linux, this will enable the declarations of GNU library extension
+functions, and that will usually give you a compiler error message if
+you define the same function names in some other way in your program.
+(You don't have to actually @emph{use} these functions, if you prefer
+to make the program more portable to other systems.)
+
+But whether or not you use these GNU extensions, you should avoid
+using their names for any other meanings. Doing so would make it hard
+to move your code into other GNU programs.
+
+@node CPU Portability
+@section Portability between @sc{cpu}s
+
+@cindex data types, and portability
+@cindex portability, and data types
+Even GNU systems will differ because of differences among @sc{cpu}
+types---for example, difference in byte ordering and alignment
+requirements. It is absolutely essential to handle these differences.
+However, don't make any effort to cater to the possibility that an
+@code{int} will be less than 32 bits. We don't support 16-bit machines
+in GNU.
+
+Similarly, don't make any effort to cater to the possibility that
+@code{long} will be smaller than predefined types like @code{size_t}.
+For example, the following code is ok:
+
+@example
+printf ("size = %lu\n", (unsigned long) sizeof array);
+printf ("diff = %ld\n", (long) (pointer2 - pointer1));
+@end example
+
+1989 Standard C requires this to work, and we know of only one
+counterexample: 64-bit programs on Microsoft Windows. We will leave
+it to those who want to port GNU programs to that environment to
+figure out how to do it.
+
+Predefined file-size types like @code{off_t} are an exception: they are
+longer than @code{long} on many platforms, so code like the above won't
+work with them. One way to print an @code{off_t} value portably is to
+print its digits yourself, one by one.
+
+Don't assume that the address of an @code{int} object is also the
+address of its least-significant byte. This is false on big-endian
+machines. Thus, don't make the following mistake:
+
+@example
+int c;
+@dots{}
+while ((c = getchar ()) != EOF)
+ write (file_descriptor, &c, 1);
+@end example
+
+@noindent Instead, use @code{unsigned char} as follows. (The @code{unsigned}
+is for portability to unusual systems where @code{char} is signed and
+where there is integer overflow checking.)
+
+@example
+int c;
+while ((c = getchar ()) != EOF)
+ @{
+ unsigned char u = c;
+ write (file_descriptor, &u, 1);
+ @}
+@end example
+
+@cindex casting pointers to integers
+Avoid casting pointers to integers if you can. Such casts greatly
+reduce portability, and in most programs they are easy to avoid. In the
+cases where casting pointers to integers is essential---such as, a Lisp
+interpreter which stores type information as well as an address in one
+word---you'll have to make explicit provisions to handle different word
+sizes. You will also need to make provision for systems in which the
+normal range of addresses you can get from @code{malloc} starts far away
+from zero.
+
+
+@node System Functions
+@section Calling System Functions
+
+@cindex C library functions, and portability
+@cindex POSIX functions, and portability
+@cindex library functions, and portability
+@cindex portability, and library functions
+
+Historically, C implementations differed substantially, and many
+systems lacked a full implementation of ANSI/ISO C89. Nowadays,
+however, very few systems lack a C89 compiler and GNU C supports
+almost all of C99. Similarly, most systems implement POSIX.1-1993
+libraries and tools, and many have POSIX.1-2001.
+
+Hence, there is little reason to support old C or non-POSIX systems,
+and you may want to take advantage of C99 and POSIX-1.2001 to write
+clearer, more portable, or faster code. You should use standard
+interfaces where possible; but if GNU extensions make your program
+more maintainable, powerful, or otherwise better, don't hesitate to
+use them. In any case, don't make your own declaration of system
+functions; that's a recipe for conflict.
+
+Despite the standards, nearly every library function has some sort of
+portability issue on some system or another. Here are some examples:
+
+@table @code
+@item open
+Names with trailing @code{/}'s are mishandled on many platforms.
+
+@item printf
+@code{long double} may be unimplemented; floating values Infinity and
+NaN are often mishandled; output for large precisions may be
+incorrect.
+
+@item readlink
+May return @code{int} instead of @code{ssize_t}.
+
+@item scanf
+On Windows, @code{errno} is not set on failure.
+@end table
+
+@cindex Gnulib
+@uref{http://www.gnu.org/software/gnulib/, Gnulib} is a big help in
+this regard. Gnulib provides implementations of standard interfaces
+on many of the systems that lack them, including portable
+implementations of enhanced GNU interfaces, thereby making their use
+portable, and of POSIX-1.2008 interfaces, some of which are missing
+even on up-to-date GNU systems.
+
+@findex xmalloc, in Gnulib
+@findex error messages, in Gnulib
+@findex data structures, in Gnulib
+Gnulib also provides many useful non-standard interfaces; for example,
+C implementations of standard data structures (hash tables, binary
+trees), error-checking type-safe wrappers for memory allocation
+functions (@code{xmalloc}, @code{xrealloc}), and output of error
+messages.
+
+Gnulib integrates with GNU Autoconf and Automake to remove much of the
+burden of writing portable code from the programmer: Gnulib makes your
+configure script automatically determine what features are missing and
+use the Gnulib code to supply the missing pieces.
+
+The Gnulib and Autoconf manuals have extensive sections on
+portability: @ref{Top,, Introduction, gnulib, Gnulib} and
+@pxref{Portable C and C++,,, autoconf, Autoconf}. Please consult them
+for many more details.
+
+
+@node Internationalization
+@section Internationalization
+@cindex internationalization
+
+@pindex gettext
+GNU has a library called GNU gettext that makes it easy to translate the
+messages in a program into various languages. You should use this
+library in every program. Use English for the messages as they appear
+in the program, and let gettext provide the way to translate them into
+other languages.
+
+Using GNU gettext involves putting a call to the @code{gettext} macro
+around each string that might need translation---like this:
+
+@example
+printf (gettext ("Processing file '%s'..."), file);
+@end example
+
+@noindent
+This permits GNU gettext to replace the string @code{"Processing file
+'%s'..."} with a translated version.
+
+Once a program uses gettext, please make a point of writing calls to
+@code{gettext} when you add new strings that call for translation.
+
+Using GNU gettext in a package involves specifying a @dfn{text domain
+name} for the package. The text domain name is used to separate the
+translations for this package from the translations for other packages.
+Normally, the text domain name should be the same as the name of the
+package---for example, @samp{coreutils} for the GNU core utilities.
+
+@cindex message text, and internationalization
+To enable gettext to work well, avoid writing code that makes
+assumptions about the structure of words or sentences. When you want
+the precise text of a sentence to vary depending on the data, use two or
+more alternative string constants each containing a complete sentences,
+rather than inserting conditionalized words or phrases into a single
+sentence framework.
+
+Here is an example of what not to do:
+
+@smallexample
+printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk");
+@end smallexample
+
+If you apply gettext to all strings, like this,
+
+@smallexample
+printf (gettext ("%s is full"),
+ capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk"));
+@end smallexample
+
+@noindent
+the translator will hardly know that "disk" and "floppy disk" are meant to
+be substituted in the other string. Worse, in some languages (like French)
+the construction will not work: the translation of the word "full" depends
+on the gender of the first part of the sentence; it happens to be not the
+same for "disk" as for "floppy disk".
+
+Complete sentences can be translated without problems:
+
+@example
+printf (capacity > 5000000 ? gettext ("disk is full")
+ : gettext ("floppy disk is full"));
+@end example
+
+A similar problem appears at the level of sentence structure with this
+code:
+
+@example
+printf ("# Implicit rule search has%s been done.\n",
+ f->tried_implicit ? "" : " not");
+@end example
+
+@noindent
+Adding @code{gettext} calls to this code cannot give correct results for
+all languages, because negation in some languages requires adding words
+at more than one place in the sentence. By contrast, adding
+@code{gettext} calls does the job straightforwardly if the code starts
+out like this:
+
+@example
+printf (f->tried_implicit
+ ? "# Implicit rule search has been done.\n",
+ : "# Implicit rule search has not been done.\n");
+@end example
+
+Another example is this one:
+
+@example
+printf ("%d file%s processed", nfiles,
+ nfiles != 1 ? "s" : "");
+@end example
+
+@noindent
+The problem with this example is that it assumes that plurals are made
+by adding `s'. If you apply gettext to the format string, like this,
+
+@example
+printf (gettext ("%d file%s processed"), nfiles,
+ nfiles != 1 ? "s" : "");
+@end example
+
+@noindent
+the message can use different words, but it will still be forced to use
+`s' for the plural. Here is a better way, with gettext being applied to
+the two strings independently:
+
+@example
+printf ((nfiles != 1 ? gettext ("%d files processed")
+ : gettext ("%d file processed")),
+ nfiles);
+@end example
+
+@noindent
+But this still doesn't work for languages like Polish, which has three
+plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, 24, ...
+and one for the rest. The GNU @code{ngettext} function solves this problem:
+
+@example
+printf (ngettext ("%d files processed", "%d file processed", nfiles),
+ nfiles);
+@end example
+
+
+@node Character Set
+@section Character Set
+@cindex character set
+@cindex encodings
+@cindex ASCII characters
+@cindex non-ASCII characters
+
+Sticking to the ASCII character set (plain text, 7-bit characters) is
+preferred in GNU source code comments, text documents, and other
+contexts, unless there is good reason to do something else because of
+the application domain. For example, if source code deals with the
+French Revolutionary calendar, it is OK if its literal strings contain
+accented characters in month names like ``Flor@'eal''. Also, it is OK
+(but not required) to use non-ASCII characters to represent proper
+names of contributors in change logs (@pxref{Change Logs}).
+
+If you need to use non-ASCII characters, you should normally stick
+with one encoding, certainly within a single file. UTF-8 is likely to
+be the best choice.
+
+
+@node Quote Characters
+@section Quote Characters
+@cindex quote characters
+@cindex locale-specific quote characters
+@cindex left quote
+@cindex right quote
+@cindex opening quote
+@cindex single quote
+@cindex double quote
+@cindex grave accent
+@set txicodequoteundirected
+@set txicodequotebacktick
+
+In the C locale, the output of GNU programs should stick to plain
+ASCII for quotation characters in messages to users: preferably 0x22
+(@samp{"}) or 0x27 (@samp{'}) for both opening and closing quotes.
+Although GNU programs traditionally used 0x60 (@samp{`}) for opening
+and 0x27 (@samp{'}) for closing quotes, nowadays quotes @samp{`like
+this'} are typically rendered asymmetrically, so quoting @samp{"like
+this"} or @samp{'like this'} typically looks better.
+
+It is ok, but not required, for GNU programs to generate
+locale-specific quotes in non-C locales. For example:
+
+@example
+printf (gettext ("Processing file '%s'..."), file);
+@end example
+
+@noindent
+Here, a French translation might cause @code{gettext} to return the
+string @code{"Traitement de fichier
+@guilsinglleft{}@tie{}%s@tie{}@guilsinglright{}..."}, yielding quotes
+more appropriate for a French locale.
+
+Sometimes a program may need to use opening and closing quotes
+directly. By convention, @code{gettext} translates the string
+@samp{"`"} to the opening quote and the string @samp{"'"} to the
+closing quote, and a program can use these translations. Generally,
+though, it is better to translate quote characters in the context of
+longer strings.
+
+If the output of your program is ever likely to be parsed by another
+program, it is good to provide an option that makes this parsing
+reliable. For example, you could escape special characters using
+conventions from the C language or the Bourne shell. See for example
+the option @option{--quoting-style} of GNU @code{ls}.
+
+@clear txicodequoteundirected
+@clear txicodequotebacktick
+
+
+@node Mmap
+@section Mmap
+@findex mmap
+
+Don't assume that @code{mmap} either works on all files or fails
+for all files. It may work on some files and fail on others.
+
+The proper way to use @code{mmap} is to try it on the specific file for
+which you want to use it---and if @code{mmap} doesn't work, fall back on
+doing the job in another way using @code{read} and @code{write}.
+
+The reason this precaution is needed is that the GNU kernel (the HURD)
+provides a user-extensible file system, in which there can be many
+different kinds of ``ordinary files''. Many of them support
+@code{mmap}, but some do not. It is important to make programs handle
+all these kinds of files.
+
+
+@node Documentation
+@chapter Documenting Programs
+@cindex documentation
+
+A GNU program should ideally come with full free documentation, adequate
+for both reference and tutorial purposes. If the package can be
+programmed or extended, the documentation should cover programming or
+extending it, as well as just using it.
+
+@menu
+* GNU Manuals:: Writing proper manuals.
+* Doc Strings and Manuals:: Compiling doc strings doesn't make a manual.
+* Manual Structure Details:: Specific structure conventions.
+* License for Manuals:: Writing the distribution terms for a manual.
+* Manual Credits:: Giving credit to documentation contributors.
+* Printed Manuals:: Mentioning the printed manual.
+* NEWS File:: NEWS files supplement manuals.
+* Change Logs:: Recording changes.
+* Man Pages:: Man pages are secondary.
+* Reading other Manuals:: How far you can go in learning
+ from other manuals.
+@end menu
+
+@node GNU Manuals
+@section GNU Manuals
+
+The preferred document format for the GNU system is the Texinfo
+formatting language. Every GNU package should (ideally) have
+documentation in Texinfo both for reference and for learners. Texinfo
+makes it possible to produce a good quality formatted book, using
+@TeX{}, and to generate an Info file. It is also possible to generate
+HTML output from Texinfo source. See the Texinfo manual, either the
+hardcopy, or the on-line version available through @code{info} or the
+Emacs Info subsystem (@kbd{C-h i}).
+
+Nowadays some other formats such as Docbook and Sgmltexi can be
+converted automatically into Texinfo. It is ok to produce the Texinfo
+documentation by conversion this way, as long as it gives good results.
+
+Make sure your manual is clear to a reader who knows nothing about the
+topic and reads it straight through. This means covering basic topics
+at the beginning, and advanced topics only later. This also means
+defining every specialized term when it is first used.
+
+Programmers tend to carry over the structure of the program as the
+structure for its documentation. But this structure is not
+necessarily good for explaining how to use the program; it may be
+irrelevant and confusing for a user.
+
+Instead, the right way to structure documentation is according to the
+concepts and questions that a user will have in mind when reading it.
+This principle applies at every level, from the lowest (ordering
+sentences in a paragraph) to the highest (ordering of chapter topics
+within the manual). Sometimes this structure of ideas matches the
+structure of the implementation of the software being documented---but
+often they are different. An important part of learning to write good
+documentation is to learn to notice when you have unthinkingly
+structured the documentation like the implementation, stop yourself,
+and look for better alternatives.
+
+For example, each program in the GNU system probably ought to be
+documented in one manual; but this does not mean each program should
+have its own manual. That would be following the structure of the
+implementation, rather than the structure that helps the user
+understand.
+
+Instead, each manual should cover a coherent @emph{topic}. For example,
+instead of a manual for @code{diff} and a manual for @code{diff3}, we
+have one manual for ``comparison of files'' which covers both of those
+programs, as well as @code{cmp}. By documenting these programs
+together, we can make the whole subject clearer.
+
+The manual which discusses a program should certainly document all of
+the program's command-line options and all of its commands. It should
+give examples of their use. But don't organize the manual as a list
+of features. Instead, organize it logically, by subtopics. Address
+the questions that a user will ask when thinking about the job that
+the program does. Don't just tell the reader what each feature can
+do---say what jobs it is good for, and show how to use it for those
+jobs. Explain what is recommended usage, and what kinds of usage
+users should avoid.
+
+In general, a GNU manual should serve both as tutorial and reference.
+It should be set up for convenient access to each topic through Info,
+and for reading straight through (appendixes aside). A GNU manual
+should give a good introduction to a beginner reading through from the
+start, and should also provide all the details that hackers want.
+The Bison manual is a good example of this---please take a look at it
+to see what we mean.
+
+That is not as hard as it first sounds. Arrange each chapter as a
+logical breakdown of its topic, but order the sections, and write their
+text, so that reading the chapter straight through makes sense. Do
+likewise when structuring the book into chapters, and when structuring a
+section into paragraphs. The watchword is, @emph{at each point, address
+the most fundamental and important issue raised by the preceding text.}
+
+If necessary, add extra chapters at the beginning of the manual which
+are purely tutorial and cover the basics of the subject. These provide
+the framework for a beginner to understand the rest of the manual. The
+Bison manual provides a good example of how to do this.
+
+To serve as a reference, a manual should have an Index that list all the
+functions, variables, options, and important concepts that are part of
+the program. One combined Index should do for a short manual, but
+sometimes for a complex package it is better to use multiple indices.
+The Texinfo manual includes advice on preparing good index entries, see
+@ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and
+see @ref{Indexing Commands, , Defining the Entries of an
+Index, texinfo, GNU Texinfo}.
+
+Don't use Unix man pages as a model for how to write GNU documentation;
+most of them are terse, badly structured, and give inadequate
+explanation of the underlying concepts. (There are, of course, some
+exceptions.) Also, Unix man pages use a particular format which is
+different from what we use in GNU manuals.
+
+Please include an email address in the manual for where to report
+bugs @emph{in the text of the manual}.
+
+Please do not use the term ``pathname'' that is used in Unix
+documentation; use ``file name'' (two words) instead. We use the term
+``path'' only for search paths, which are lists of directory names.
+
+Please do not use the term ``illegal'' to refer to erroneous input to
+a computer program. Please use ``invalid'' for this, and reserve the
+term ``illegal'' for activities prohibited by law.
+
+Please do not write @samp{()} after a function name just to indicate
+it is a function. @code{foo ()} is not a function, it is a function
+call with no arguments.
+
+@node Doc Strings and Manuals
+@section Doc Strings and Manuals
+
+Some programming systems, such as Emacs, provide a documentation string
+for each function, command or variable. You may be tempted to write a
+reference manual by compiling the documentation strings and writing a
+little additional text to go around them---but you must not do it. That
+approach is a fundamental mistake. The text of well-written
+documentation strings will be entirely wrong for a manual.
+
+A documentation string needs to stand alone---when it appears on the
+screen, there will be no other text to introduce or explain it.
+Meanwhile, it can be rather informal in style.
+
+The text describing a function or variable in a manual must not stand
+alone; it appears in the context of a section or subsection. Other text
+at the beginning of the section should explain some of the concepts, and
+should often make some general points that apply to several functions or
+variables. The previous descriptions of functions and variables in the
+section will also have given information about the topic. A description
+written to stand alone would repeat some of that information; this
+redundancy looks bad. Meanwhile, the informality that is acceptable in
+a documentation string is totally unacceptable in a manual.
+
+The only good way to use documentation strings in writing a good manual
+is to use them as a source of information for writing good text.
+
+@node Manual Structure Details
+@section Manual Structure Details
+@cindex manual structure
+
+The title page of the manual should state the version of the programs or
+packages documented in the manual. The Top node of the manual should
+also contain this information. If the manual is changing more
+frequently than or independent of the program, also state a version
+number for the manual in both of these places.
+
+Each program documented in the manual should have a node named
+@samp{@var{program} Invocation} or @samp{Invoking @var{program}}. This
+node (together with its subnodes, if any) should describe the program's
+command line arguments and how to run it (the sort of information people
+would look for in a man page). Start with an @samp{@@example}
+containing a template for all the options and arguments that the program
+uses.
+
+Alternatively, put a menu item in some menu whose item name fits one of
+the above patterns. This identifies the node which that item points to
+as the node for this purpose, regardless of the node's actual name.
+
+The @samp{--usage} feature of the Info reader looks for such a node
+or menu item in order to find the relevant text, so it is essential
+for every Texinfo file to have one.
+
+If one manual describes several programs, it should have such a node for
+each program described in the manual.
+
+@node License for Manuals
+@section License for Manuals
+@cindex license for manuals
+
+Please use the GNU Free Documentation License for all GNU manuals that
+are more than a few pages long. Likewise for a collection of short
+documents---you only need one copy of the GNU FDL for the whole
+collection. For a single short document, you can use a very permissive
+non-copyleft license, to avoid taking up space with a long license.
+
+See @uref{http://www.gnu.org/copyleft/fdl-howto.html} for more explanation
+of how to employ the GFDL.
+
+Note that it is not obligatory to include a copy of the GNU GPL or GNU
+LGPL in a manual whose license is neither the GPL nor the LGPL. It can
+be a good idea to include the program's license in a large manual; in a
+short manual, whose size would be increased considerably by including
+the program's license, it is probably better not to include it.
+
+@node Manual Credits
+@section Manual Credits
+@cindex credits for manuals
+
+Please credit the principal human writers of the manual as the authors,
+on the title page of the manual. If a company sponsored the work, thank
+the company in a suitable place in the manual, but do not cite the
+company as an author.
+
+@node Printed Manuals
+@section Printed Manuals
+
+The FSF publishes some GNU manuals in printed form. To encourage sales
+of these manuals, the on-line versions of the manual should mention at
+the very start that the printed manual is available and should point at
+information for getting it---for instance, with a link to the page
+@url{http://www.gnu.org/order/order.html}. This should not be included
+in the printed manual, though, because there it is redundant.
+
+It is also useful to explain in the on-line forms of the manual how the
+user can print out the manual from the sources.
+
+@node NEWS File
+@section The NEWS File
+@cindex @file{NEWS} file
+
+In addition to its manual, the package should have a file named
+@file{NEWS} which contains a list of user-visible changes worth
+mentioning. In each new release, add items to the front of the file and
+identify the version they pertain to. Don't discard old items; leave
+them in the file after the newer items. This way, a user upgrading from
+any previous version can see what is new.
+
+If the @file{NEWS} file gets very long, move some of the older items
+into a file named @file{ONEWS} and put a note at the end referring the
+user to that file.
+
+@node Change Logs
+@section Change Logs
+@cindex change logs
+
+Keep a change log to describe all the changes made to program source
+files. The purpose of this is so that people investigating bugs in the
+future will know about the changes that might have introduced the bug.
+Often a new bug can be found by looking at what was recently changed.
+More importantly, change logs can help you eliminate conceptual
+inconsistencies between different parts of a program, by giving you a
+history of how the conflicting concepts arose and who they came from.
+
+@menu
+* Change Log Concepts::
+* Style of Change Logs::
+* Simple Changes::
+* Conditional Changes::
+* Indicating the Part Changed::
+@end menu
+
+@node Change Log Concepts
+@subsection Change Log Concepts
+
+You can think of the change log as a conceptual ``undo list'' which
+explains how earlier versions were different from the current version.
+People can see the current version; they don't need the change log
+to tell them what is in it. What they want from a change log is a
+clear explanation of how the earlier version differed.
+
+The change log file is normally called @file{ChangeLog} and covers an
+entire directory. Each directory can have its own change log, or a
+directory can use the change log of its parent directory---it's up to
+you.
+
+Another alternative is to record change log information with a version
+control system such as RCS or CVS. This can be converted automatically
+to a @file{ChangeLog} file using @code{rcs2log}; in Emacs, the command
+@kbd{C-x v a} (@code{vc-update-change-log}) does the job.
+
+There's no need to describe the full purpose of the changes or how
+they work together. However, sometimes it is useful to write one line
+to describe the overall purpose of a change or a batch of changes. If
+you think that a change calls for explanation, you're probably right.
+Please do explain it---but please put the full explanation in comments
+in the code, where people will see it whenever they see the code. For
+example, ``New function'' is enough for the change log when you add a
+function, because there should be a comment before the function
+definition to explain what it does.
+
+In the past, we recommended not mentioning changes in non-software
+files (manuals, help files, etc.) in change logs. However, we've been
+advised that it is a good idea to include them, for the sake of
+copyright records.
+
+The easiest way to add an entry to @file{ChangeLog} is with the Emacs
+command @kbd{M-x add-change-log-entry}. An entry should have an
+asterisk, the name of the changed file, and then in parentheses the name
+of the changed functions, variables or whatever, followed by a colon.
+Then describe the changes you made to that function or variable.
+
+@node Style of Change Logs
+@subsection Style of Change Logs
+@cindex change logs, style
+
+Here are some simple examples of change log entries, starting with the
+header line that says who made the change and when it was installed,
+followed by descriptions of specific changes. (These examples are
+drawn from Emacs and GCC.)
+
+@example
+1998-08-17 Richard Stallman <rms@@gnu.org>
+
+* register.el (insert-register): Return nil.
+(jump-to-register): Likewise.
+
+* sort.el (sort-subr): Return nil.
+
+* tex-mode.el (tex-bibtex-file, tex-file, tex-region):
+Restart the tex shell if process is gone or stopped.
+(tex-shell-running): New function.
+
+* expr.c (store_one_arg): Round size up for move_block_to_reg.
+(expand_call): Round up when emitting USE insns.
+* stmt.c (assign_parms): Round size up for move_block_from_reg.
+@end example
+
+It's important to name the changed function or variable in full. Don't
+abbreviate function or variable names, and don't combine them.
+Subsequent maintainers will often search for a function name to find all
+the change log entries that pertain to it; if you abbreviate the name,
+they won't find it when they search.
+
+For example, some people are tempted to abbreviate groups of function
+names by writing @samp{* register.el (@{insert,jump-to@}-register)};
+this is not a good idea, since searching for @code{jump-to-register} or
+@code{insert-register} would not find that entry.
+
+Separate unrelated change log entries with blank lines. When two
+entries represent parts of the same change, so that they work together,
+then don't put blank lines between them. Then you can omit the file
+name and the asterisk when successive entries are in the same file.
+
+Break long lists of function names by closing continued lines with
+@samp{)}, rather than @samp{,}, and opening the continuation with
+@samp{(} as in this example:
+
+@example
+* keyboard.c (menu_bar_items, tool_bar_items)
+(Fexecute_extended_command): Deal with 'keymap' property.
+@end example
+
+When you install someone else's changes, put the contributor's name in
+the change log entry rather than in the text of the entry. In other
+words, write this:
+
+@example
+2002-07-14 John Doe <jdoe@@gnu.org>
+
+ * sewing.c: Make it sew.
+@end example
+
+@noindent
+rather than this:
+
+@example
+2002-07-14 Usual Maintainer <usual@@gnu.org>
+
+ * sewing.c: Make it sew. Patch by jdoe@@gnu.org.
+@end example
+
+As for the date, that should be the date you applied the change.
+
+@node Simple Changes
+@subsection Simple Changes
+
+Certain simple kinds of changes don't need much detail in the change
+log.
+
+When you change the calling sequence of a function in a simple fashion,
+and you change all the callers of the function to use the new calling
+sequence, there is no need to make individual entries for all the
+callers that you changed. Just write in the entry for the function
+being called, ``All callers changed''---like this:
+
+@example
+* keyboard.c (Fcommand_execute): New arg SPECIAL.
+All callers changed.
+@end example
+
+When you change just comments or doc strings, it is enough to write an
+entry for the file, without mentioning the functions. Just ``Doc
+fixes'' is enough for the change log.
+
+There's no technical need to make change log entries for documentation
+files. This is because documentation is not susceptible to bugs that
+are hard to fix. Documentation does not consist of parts that must
+interact in a precisely engineered fashion. To correct an error, you
+need not know the history of the erroneous passage; it is enough to
+compare what the documentation says with the way the program actually
+works.
+
+However, you should keep change logs for documentation files when the
+project gets copyright assignments from its contributors, so as to
+make the records of authorship more accurate.
+
+@node Conditional Changes
+@subsection Conditional Changes
+@cindex conditional changes, and change logs
+@cindex change logs, conditional changes
+
+Source files can often contain code that is conditional to build-time
+or static conditions. For example, C programs can contain
+compile-time @code{#if} conditionals; programs implemented in
+interpreted languages can contain module imports of function
+definitions that are only performed for certain versions of the
+interpreter; and Automake @file{Makefile.am} files can contain
+variable definitions or target declarations that are only to be
+considered if a configure-time Automake conditional is true.
+
+Many changes are conditional as well: sometimes you add a new variable,
+or function, or even a new program or library, which is entirely
+dependent on a build-time condition. It is useful to indicate
+in the change log the conditions for which a change applies.
+
+Our convention for indicating conditional changes is to use
+@emph{square brackets around the name of the condition}.
+
+Conditional changes can happen in numerous scenarios and with many
+variations, so here are some examples to help clarify. This first
+example describes changes in C, Perl, and Python files which are
+conditional but do not have an associated function or entity name:
+
+@example
+* xterm.c [SOLARIS2]: Include <string.h>.
+* FilePath.pm [$^O eq 'VMS']: Import the VMS::Feature module.
+* framework.py [sys.version_info < (2, 6)]: Make "with" statement
+ available by importing it from __future__,
+ to support also python 2.5.
+@end example
+
+Our other examples will for simplicity be limited to C, as the minor
+changes necessary to adapt them to other languages should be
+self-evident.
+
+Next, here is an entry describing a new definition which is entirely
+conditional: the C macro @code{FRAME_WINDOW_P} is defined (and used)
+only when the macro @code{HAVE_X_WINDOWS} is defined:
+
+@example
+* frame.h [HAVE_X_WINDOWS] (FRAME_WINDOW_P): Macro defined.
+@end example
+
+Next, an entry for a change within the function @code{init_display},
+whose definition as a whole is unconditional, but the changes
+themselves are contained in a @samp{#ifdef HAVE_LIBNCURSES}
+conditional:
+
+@example
+* dispnew.c (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
+@end example
+
+Finally, here is an entry for a change that takes effect only when
+a certain macro is @emph{not} defined:
+
+@example
+(gethostname) [!HAVE_SOCKETS]: Replace with winsock version.
+@end example
+
+@node Indicating the Part Changed
+@subsection Indicating the Part Changed
+
+Indicate the part of a function which changed by using angle brackets
+enclosing an indication of what the changed part does. Here is an entry
+for a change in the part of the function @code{sh-while-getopts} that
+deals with @code{sh} commands:
+
+@example
+* progmodes/sh-script.el (sh-while-getopts) <sh>: Handle case that
+user-specified option string is empty.
+@end example
+
+
+@node Man Pages
+@section Man Pages
+@cindex man pages
+
+In the GNU project, man pages are secondary. It is not necessary or
+expected for every GNU program to have a man page, but some of them do.
+It's your choice whether to include a man page in your program.
+
+When you make this decision, consider that supporting a man page
+requires continual effort each time the program is changed. The time
+you spend on the man page is time taken away from more useful work.
+
+For a simple program which changes little, updating the man page may be
+a small job. Then there is little reason not to include a man page, if
+you have one.
+
+For a large program that changes a great deal, updating a man page may
+be a substantial burden. If a user offers to donate a man page, you may
+find this gift costly to accept. It may be better to refuse the man
+page unless the same person agrees to take full responsibility for
+maintaining it---so that you can wash your hands of it entirely. If
+this volunteer later ceases to do the job, then don't feel obliged to
+pick it up yourself; it may be better to withdraw the man page from the
+distribution until someone else agrees to update it.
+
+When a program changes only a little, you may feel that the
+discrepancies are small enough that the man page remains useful without
+updating. If so, put a prominent note near the beginning of the man
+page explaining that you don't maintain it and that the Texinfo manual
+is more authoritative. The note should say how to access the Texinfo
+documentation.
+
+Be sure that man pages include a copyright statement and free license.
+The simple all-permissive license is appropriate for simple man pages
+(@pxref{License Notices for Other Files,,,maintain,Information for GNU
+Maintainers}).
+
+For long man pages, with enough explanation and documentation that
+they can be considered true manuals, use the GFDL (@pxref{License for
+Manuals}).
+
+Finally, the GNU help2man program
+(@uref{http://www.gnu.org/software/help2man/}) is one way to automate
+generation of a man page, in this case from @option{--help} output.
+This is sufficient in many cases.
+
+@node Reading other Manuals
+@section Reading other Manuals
+
+There may be non-free books or documentation files that describe the
+program you are documenting.
+
+It is ok to use these documents for reference, just as the author of a
+new algebra textbook can read other books on algebra. A large portion
+of any non-fiction book consists of facts, in this case facts about how
+a certain program works, and these facts are necessarily the same for
+everyone who writes about the subject. But be careful not to copy your
+outline structure, wording, tables or examples from preexisting non-free
+documentation. Copying from free documentation may be ok; please check
+with the FSF about the individual case.
+
+@node Managing Releases
+@chapter The Release Process
+@cindex releasing
+
+Making a release is more than just bundling up your source files in a
+tar file and putting it up for FTP. You should set up your software so
+that it can be configured to run on a variety of systems. Your Makefile
+should conform to the GNU standards described below, and your directory
+layout should also conform to the standards discussed below. Doing so
+makes it easy to include your package into the larger framework of
+all GNU software.
+
+@menu
+* Configuration:: How configuration of GNU packages should work.
+* Makefile Conventions:: Makefile conventions.
+* Releases:: Making releases
+@end menu
+
+@node Configuration
+@section How Configuration Should Work
+@cindex program configuration
+
+@pindex configure
+Each GNU distribution should come with a shell script named
+@code{configure}. This script is given arguments which describe the
+kind of machine and system you want to compile the program for.
+The @code{configure} script must record the configuration options so
+that they affect compilation.
+
+The description here is the specification of the interface for the
+@code{configure} script in GNU packages. Many packages implement it
+using GNU Autoconf (@pxref{Top,, Introduction, autoconf, Autoconf})
+and/or GNU Automake (@pxref{Top,, Introduction, automake, Automake}),
+but you do not have to use these tools. You can implement it any way
+you like; for instance, by making @code{configure} be a wrapper around
+a completely different configuration system.
+
+Another way for the @code{configure} script to operate is to make a
+link from a standard name such as @file{config.h} to the proper
+configuration file for the chosen system. If you use this technique,
+the distribution should @emph{not} contain a file named
+@file{config.h}. This is so that people won't be able to build the
+program without configuring it first.
+
+Another thing that @code{configure} can do is to edit the Makefile. If
+you do this, the distribution should @emph{not} contain a file named
+@file{Makefile}. Instead, it should include a file @file{Makefile.in} which
+contains the input used for editing. Once again, this is so that people
+won't be able to build the program without configuring it first.
+
+If @code{configure} does write the @file{Makefile}, then @file{Makefile}
+should have a target named @file{Makefile} which causes @code{configure}
+to be rerun, setting up the same configuration that was set up last
+time. The files that @code{configure} reads should be listed as
+dependencies of @file{Makefile}.
+
+All the files which are output from the @code{configure} script should
+have comments at the beginning explaining that they were generated
+automatically using @code{configure}. This is so that users won't think
+of trying to edit them by hand.
+
+The @code{configure} script should write a file named @file{config.status}
+which describes which configuration options were specified when the
+program was last configured. This file should be a shell script which,
+if run, will recreate the same configuration.
+
+The @code{configure} script should accept an option of the form
+@samp{--srcdir=@var{dirname}} to specify the directory where sources are found
+(if it is not the current directory). This makes it possible to build
+the program in a separate directory, so that the actual source directory
+is not modified.
+
+If the user does not specify @samp{--srcdir}, then @code{configure} should
+check both @file{.} and @file{..} to see if it can find the sources. If
+it finds the sources in one of these places, it should use them from
+there. Otherwise, it should report that it cannot find the sources, and
+should exit with nonzero status.
+
+Usually the easy way to support @samp{--srcdir} is by editing a
+definition of @code{VPATH} into the Makefile. Some rules may need to
+refer explicitly to the specified source directory. To make this
+possible, @code{configure} can add to the Makefile a variable named
+@code{srcdir} whose value is precisely the specified directory.
+
+In addition, the @samp{configure} script should take options
+corresponding to most of the standard directory variables
+(@pxref{Directory Variables}). Here is the list:
+
+@example
+--prefix --exec-prefix --bindir --sbindir --libexecdir --sysconfdir
+--sharedstatedir --localstatedir --libdir --includedir --oldincludedir
+--datarootdir --datadir --infodir --localedir --mandir --docdir
+--htmldir --dvidir --pdfdir --psdir
+@end example
+
+The @code{configure} script should also take an argument which specifies the
+type of system to build the program for. This argument should look like
+this:
+
+@example
+@var{cpu}-@var{company}-@var{system}
+@end example
+
+For example, an Athlon-based GNU/Linux system might be
+@samp{i686-pc-linux-gnu}.
+
+The @code{configure} script needs to be able to decode all plausible
+alternatives for how to describe a machine. Thus,
+@samp{athlon-pc-gnu/linux} would be a valid alias. There is a shell
+script called
+@uref{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD,
+@file{config.sub}} that you can use as a subroutine to validate system
+types and canonicalize aliases.
+
+The @code{configure} script should also take the option
+@option{--build=@var{buildtype}}, which should be equivalent to a
+plain @var{buildtype} argument. For example, @samp{configure
+--build=i686-pc-linux-gnu} is equivalent to @samp{configure
+i686-pc-linux-gnu}. When the build type is not specified by an option
+or argument, the @code{configure} script should normally guess it using
+the shell script
+@uref{http://git.savannah.gnu.org/@/gitweb/@/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD,
+@file{config.guess}}.
+
+@cindex optional features, configure-time
+Other options are permitted to specify in more detail the software
+or hardware present on the machine, to include or exclude optional parts
+of the package, or to adjust the name of some tools or arguments to them:
+
+@table @samp
+@item --enable-@var{feature}@r{[}=@var{parameter}@r{]}
+Configure the package to build and install an optional user-level
+facility called @var{feature}. This allows users to choose which
+optional features to include. Giving an optional @var{parameter} of
+@samp{no} should omit @var{feature}, if it is built by default.
+
+No @samp{--enable} option should @strong{ever} cause one feature to
+replace another. No @samp{--enable} option should ever substitute one
+useful behavior for another useful behavior. The only proper use for
+@samp{--enable} is for questions of whether to build part of the program
+or exclude it.
+
+@item --with-@var{package}
+@c @r{[}=@var{parameter}@r{]}
+The package @var{package} will be installed, so configure this package
+to work with @var{package}.
+
+@c Giving an optional @var{parameter} of
+@c @samp{no} should omit @var{package}, if it is used by default.
+
+Possible values of @var{package} include
+@samp{gnu-as} (or @samp{gas}), @samp{gnu-ld}, @samp{gnu-libc},
+@samp{gdb},
+@samp{x},
+and
+@samp{x-toolkit}.
+
+Do not use a @samp{--with} option to specify the file name to use to
+find certain files. That is outside the scope of what @samp{--with}
+options are for.
+
+@item @var{variable}=@var{value}
+Set the value of the variable @var{variable} to @var{value}. This is
+used to override the default values of commands or arguments in the
+build process. For example, the user could issue @samp{configure
+CFLAGS=-g CXXFLAGS=-g} to build with debugging information and without
+the default optimization.
+
+Specifying variables as arguments to @code{configure}, like this:
+@example
+./configure CC=gcc
+@end example
+is preferable to setting them in environment variables:
+@example
+CC=gcc ./configure
+@end example
+as it helps to recreate the same configuration later with
+@file{config.status}. However, both methods should be supported.
+@end table
+
+All @code{configure} scripts should accept all of the ``detail''
+options and the variable settings, whether or not they make any
+difference to the particular package at hand. In particular, they
+should accept any option that starts with @samp{--with-} or
+@samp{--enable-}. This is so users will be able to configure an
+entire GNU source tree at once with a single set of options.
+
+You will note that the categories @samp{--with-} and @samp{--enable-}
+are narrow: they @strong{do not} provide a place for any sort of option
+you might think of. That is deliberate. We want to limit the possible
+configuration options in GNU software. We do not want GNU programs to
+have idiosyncratic configuration options.
+
+Packages that perform part of the compilation process may support
+cross-compilation. In such a case, the host and target machines for the
+program may be different.
+
+The @code{configure} script should normally treat the specified type of
+system as both the host and the target, thus producing a program which
+works for the same type of machine that it runs on.
+
+To compile a program to run on a host type that differs from the build
+type, use the configure option @option{--host=@var{hosttype}}, where
+@var{hosttype} uses the same syntax as @var{buildtype}. The host type
+normally defaults to the build type.
+
+To configure a cross-compiler, cross-assembler, or what have you, you
+should specify a target different from the host, using the configure
+option @samp{--target=@var{targettype}}. The syntax for
+@var{targettype} is the same as for the host type. So the command would
+look like this:
+
+@example
+./configure --host=@var{hosttype} --target=@var{targettype}
+@end example
+
+The target type normally defaults to the host type.
+Programs for which cross-operation is not meaningful need not accept the
+@samp{--target} option, because configuring an entire operating system for
+cross-operation is not a meaningful operation.
+
+Some programs have ways of configuring themselves automatically. If
+your program is set up to do this, your @code{configure} script can simply
+ignore most of its arguments.
+
+@comment The makefile standards are in a separate file that is also
+@comment included by make.texinfo. Done by roland@gnu.ai.mit.edu on 1/6/93.
+@comment For this document, turn chapters into sections, etc.
+@lowersections
+@include make-stds.texi
+@raisesections
+
+@node Releases
+@section Making Releases
+@cindex packaging
+
+You should identify each release with a pair of version numbers, a
+major version and a minor. We have no objection to using more than
+two numbers, but it is very unlikely that you really need them.
+
+Package the distribution of @code{Foo version 69.96} up in a gzipped tar
+file with the name @file{foo-69.96.tar.gz}. It should unpack into a
+subdirectory named @file{foo-69.96}.
+
+Building and installing the program should never modify any of the files
+contained in the distribution. This means that all the files that form
+part of the program in any way must be classified into @dfn{source
+files} and @dfn{non-source files}. Source files are written by humans
+and never changed automatically; non-source files are produced from
+source files by programs under the control of the Makefile.
+
+@cindex @file{README} file
+The distribution should contain a file named @file{README} which gives
+the name of the package, and a general description of what it does. It
+is also good to explain the purpose of each of the first-level
+subdirectories in the package, if there are any. The @file{README} file
+should either state the version number of the package, or refer to where
+in the package it can be found.
+
+The @file{README} file should refer to the file @file{INSTALL}, which
+should contain an explanation of the installation procedure.
+
+The @file{README} file should also refer to the file which contains the
+copying conditions. The GNU GPL, if used, should be in a file called
+@file{COPYING}. If the GNU LGPL is used, it should be in a file called
+@file{COPYING.LESSER}.
+
+Naturally, all the source files must be in the distribution. It is
+okay to include non-source files in the distribution along with the
+source files they are generated from, provided they are up-to-date
+with the source they are made from, and machine-independent, so that
+normal building of the distribution will never modify them. We
+commonly include non-source files produced by Autoconf, Automake,
+Bison, @code{lex}, @TeX{}, and @code{makeinfo}; this helps avoid
+unnecessary dependencies between our distributions, so that users can
+install whichever packages they want to install.
+
+Non-source files that might actually be modified by building and
+installing the program should @strong{never} be included in the
+distribution. So if you do distribute non-source files, always make
+sure they are up to date when you make a new distribution.
+
+Make sure that all the files in the distribution are world-readable, and
+that directories are world-readable and world-searchable (octal mode 755).
+We used to recommend that all directories in the distribution also be
+world-writable (octal mode 777), because ancient versions of @code{tar}
+would otherwise not cope when extracting the archive as an unprivileged
+user. That can easily lead to security issues when creating the archive,
+however, so now we recommend against that.
+
+Don't include any symbolic links in the distribution itself. If the tar
+file contains symbolic links, then people cannot even unpack it on
+systems that don't support symbolic links. Also, don't use multiple
+names for one file in different directories, because certain file
+systems cannot handle this and that prevents unpacking the
+distribution.
+
+Try to make sure that all the file names will be unique on MS-DOS. A
+name on MS-DOS consists of up to 8 characters, optionally followed by a
+period and up to three characters. MS-DOS will truncate extra
+characters both before and after the period. Thus,
+@file{foobarhacker.c} and @file{foobarhacker.o} are not ambiguous; they
+are truncated to @file{foobarha.c} and @file{foobarha.o}, which are
+distinct.
+
+@cindex @file{texinfo.tex}, in a distribution
+Include in your distribution a copy of the @file{texinfo.tex} you used
+to test print any @file{*.texinfo} or @file{*.texi} files.
+
+Likewise, if your program uses small GNU software packages like regex,
+getopt, obstack, or termcap, include them in the distribution file.
+Leaving them out would make the distribution file a little smaller at
+the expense of possible inconvenience to a user who doesn't know what
+other files to get.
+
+@node References
+@chapter References to Non-Free Software and Documentation
+@cindex references to non-free material
+
+A GNU program should not recommend, promote, or grant legitimacy to
+the use of any non-free program. Proprietary software is a social and
+ethical problem, and our aim is to put an end to that problem. We
+can't stop some people from writing proprietary programs, or stop
+other people from using them, but we can and should refuse to
+advertise them to new potential customers, or to give the public the
+idea that their existence is ethical.
+
+The GNU definition of free software is found on the GNU web site at
+@url{http://www.gnu.org/@/philosophy/@/free-sw.html}, and the definition
+of free documentation is found at
+@url{http://www.gnu.org/@/philosophy/@/free-doc.html}. The terms ``free''
+and ``non-free'', used in this document, refer to those definitions.
+
+A list of important licenses and whether they qualify as free is in
+@url{http://www.gnu.org/@/licenses/@/license-list.html}. If it is not
+clear whether a license qualifies as free, please ask the GNU Project
+by writing to @email{licensing@@gnu.org}. We will answer, and if the
+license is an important one, we will add it to the list.
+
+When a non-free program or system is well known, you can mention it in
+passing---that is harmless, since users who might want to use it
+probably already know about it. For instance, it is fine to explain
+how to build your package on top of some widely used non-free
+operating system, or how to use it together with some widely used
+non-free program.
+
+However, you should give only the necessary information to help those
+who already use the non-free program to use your program with
+it---don't give, or refer to, any further information about the
+proprietary program, and don't imply that the proprietary program
+enhances your program, or that its existence is in any way a good
+thing. The goal should be that people already using the proprietary
+program will get the advice they need about how to use your free
+program with it, while people who don't already use the proprietary
+program will not see anything likely to lead them to take an interest
+in it.
+
+If a non-free program or system is obscure in your program's domain,
+your program should not mention or support it at all, since doing so
+would tend to popularize the non-free program more than it popularizes
+your program. (You cannot hope to find many additional users for your
+program among the users of Foobar, if the existence of Foobar is not
+generally known among people who might want to use your program.)
+
+Sometimes a program is free software in itself but depends on a
+non-free platform in order to run. For instance, many Java programs
+depend on some non-free Java libraries. To recommend or promote such
+a program is to promote the other programs it needs. This is why we
+are careful about listing Java programs in the Free Software
+Directory: we don't want to promote the non-free Java libraries.
+
+We hope this particular problem with Java will be gone by and by, as
+we replace the remaining non-free standard Java libraries with free
+software, but the general principle will remain the same: don't
+recommend, promote or legitimize programs that depend on non-free
+software to run.
+
+Some free programs strongly encourage the use of non-free software. A
+typical example is @command{mplayer}. It is free software in itself,
+and the free code can handle some kinds of files. However,
+@command{mplayer} recommends use of non-free codecs for other kinds of
+files, and users that install @command{mplayer} are very likely to
+install those codecs along with it. To recommend @command{mplayer}
+is, in effect, to promote use of the non-free codecs.
+
+Thus, you should not recommend programs that strongly encourage the
+use of non-free software. This is why we do not list
+@command{mplayer} in the Free Software Directory.
+
+A GNU package should not refer the user to any non-free documentation
+for free software. Free documentation that can be included in free
+operating systems is essential for completing the GNU system, or any
+free operating system, so encouraging it is a priority; to recommend
+use of documentation that we are not allowed to include undermines the
+impetus for the community to produce documentation that we can
+include. So GNU packages should never recommend non-free
+documentation.
+
+By contrast, it is ok to refer to journal articles and textbooks in
+the comments of a program for explanation of how it functions, even
+though they are non-free. This is because we don't include such
+things in the GNU system even if they are free---they are outside the
+scope of what a software distribution needs to include.
+
+Referring to a web site that describes or recommends a non-free
+program is promoting that program, so please do not make links to (or
+mention by name) web sites that contain such material. This policy is
+relevant particularly for the web pages for a GNU package.
+
+Following links from nearly any web site can lead eventually to
+non-free software; this is inherent in the nature of the web. So it
+makes no sense to criticize a site for having such links. As long as
+the site does not itself recommend a non-free program, there is no
+need to consider the question of the sites that it links to for other
+reasons.
+
+Thus, for example, you should not refer to AT&T's web site if that
+recommends AT&T's non-free software packages; you should not refer to
+a site that links to AT&T's site presenting it as a place to get some
+non-free program, because that link recommends and legitimizes the
+non-free program. However, that a site contains a link to AT&T's web
+site for some other purpose (such as long-distance telephone service)
+is not an objection against it.
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@include fdl.texi
+
+@node Index
+@unnumbered Index
+@printindex cp
+
+@bye
+
+Local variables:
+eval: (add-hook 'write-file-hooks 'time-stamp)
+time-stamp-start: "@set lastupdate "
+time-stamp-end: "$"
+time-stamp-format: "%:b %:d, %:y"
+compile-command: "cd work.s && make"
+End:
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..b9e94c9
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 24 April 2012
+@set UPDATED-MONTH April 2012
+@set EDITION 2.69
+@set VERSION 2.69
diff --git a/lib/Autom4te/C4che.pm b/lib/Autom4te/C4che.pm
new file mode 100644
index 0000000..b91a5e8
--- /dev/null
+++ b/lib/Autom4te/C4che.pm
@@ -0,0 +1,242 @@
+# autoconf -- create `configure' using m4 macros
+# Copyright (C) 2003, 2006, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Autom4te::C4che;
+
+=head1 NAME
+
+Autom4te::C4che - a single m4 run request
+
+=head1 SYNOPSIS
+
+ use Autom4te::C4che;
+
+=head1 DESCRIPTION
+
+This Perl module handles the cache of M4 runs used by autom4te.
+
+=cut
+
+use Data::Dumper;
+use Autom4te::Request;
+use Carp;
+use strict;
+
+=over 4
+
+=item @request
+
+List of requests.
+
+We cannot declare it "my" as the loading, performed via "do", would
+refer to another scope, and @request would not be updated. It used to
+work with "my" vars, and I do not know whether the current behavior
+(5.6) is wanted or not.
+
+=cut
+
+use vars qw(@request);
+
+=item C<$req = Autom4te::C4che-E<gt>retrieve (%attr)>
+
+Find a request with the same path and input.
+
+=cut
+
+sub retrieve($%)
+{
+ my ($self, %attr) = @_;
+
+ foreach (@request)
+ {
+ # Same path.
+ next
+ if join ("\n", @{$_->path}) ne join ("\n", @{$attr{path}});
+
+ # Same inputs.
+ next
+ if join ("\n", @{$_->input}) ne join ("\n", @{$attr{input}});
+
+ # Found it.
+ return $_;
+ }
+
+ return undef;
+}
+
+=item C<$req = Autom4te::C4che-E<gt>register (%attr)>
+
+Create and register a request for these path and input.
+
+=cut
+
+# $REQUEST-OBJ
+# register ($SELF, %ATTR)
+# -----------------------
+# NEW should not be called directly.
+# Private.
+sub register ($%)
+{
+ my ($self, %attr) = @_;
+
+ # path and input are the only ID for a request object.
+ my $obj = new Autom4te::Request ('path' => $attr{path},
+ 'input' => $attr{input});
+ push @request, $obj;
+
+ # Assign an id for cache file.
+ $obj->id ("$#request");
+
+ return $obj;
+}
+
+
+=item C<$req = Autom4te::C4che-E<gt>request (%request)>
+
+Get (retrieve or create) a request for the path C<$request{path}> and
+the input C<$request{input}>.
+
+=cut
+
+# $REQUEST-OBJ
+# request($SELF, %REQUEST)
+# ------------------------
+sub request ($%)
+{
+ my ($self, %request) = @_;
+
+ my $req =
+ Autom4te::C4che->retrieve (%request)
+ || Autom4te::C4che->register (%request);
+
+ # If there are new traces to produce, then we are not valid.
+ foreach (@{$request{'macro'}})
+ {
+ if (! exists ${$req->macro}{$_})
+ {
+ ${$req->macro}{$_} = 1;
+ $req->valid (0);
+ }
+ }
+
+ # It would be great to have $REQ check that it is up to date wrt
+ # its dependencies, but that requires getting traces (to fetch the
+ # included files), which is out of the scope of Request (currently?).
+
+ return $req;
+}
+
+
+=item C<$string = Autom4te::C4che-E<gt>marshall ()>
+
+Serialize all the current requests.
+
+=cut
+
+
+# marshall($SELF)
+# ---------------
+sub marshall ($)
+{
+ my ($caller) = @_;
+ my $res = '';
+
+ my $marshall = Data::Dumper->new ([\@request], [qw (*request)]);
+ $marshall->Indent(2)->Terse(0);
+ $res = $marshall->Dump . "\n";
+
+ return $res;
+}
+
+
+=item C<Autom4te::C4che-E<gt>save ($file)>
+
+Save the cache in the C<$file> file object.
+
+=cut
+
+# SAVE ($FILE)
+# ------------
+sub save ($$)
+{
+ my ($self, $file) = @_;
+
+ confess "cannot save a single request\n"
+ if ref ($self);
+
+ $file->seek (0, 0);
+ $file->truncate (0);
+ print $file
+ "# This file was generated.\n",
+ "# It contains the lists of macros which have been traced.\n",
+ "# It can be safely removed.\n",
+ "\n",
+ $self->marshall;
+}
+
+
+=item C<Autom4te::C4che-E<gt>load ($file)>
+
+Load the cache from the C<$file> file object.
+
+=cut
+
+# LOAD ($FILE)
+# ------------
+sub load ($$)
+{
+ my ($self, $file) = @_;
+ my $fname = $file->name;
+
+ confess "cannot load a single request\n"
+ if ref ($self);
+
+ my $contents = join "", $file->getlines;
+
+ eval $contents;
+
+ confess "cannot eval $fname: $@\n" if $@;
+}
+
+
+=head1 SEE ALSO
+
+L<Autom4te::Request>
+
+=head1 HISTORY
+
+Written by Akim Demaille E<lt>F<akim@freefriends.org>E<gt>.
+
+=cut
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/ChannelDefs.pm b/lib/Autom4te/ChannelDefs.pm
new file mode 100644
index 0000000..0d5b5c4
--- /dev/null
+++ b/lib/Autom4te/ChannelDefs.pm
@@ -0,0 +1,390 @@
+# Copyright (C) 2002-2003, 2006, 2008-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Autom4te::ChannelDefs;
+
+use Autom4te::Channels;
+
+=head1 NAME
+
+Autom4te::ChannelDefs - channel definitions for Automake and helper functions
+
+=head1 SYNOPSIS
+
+ use Autom4te::ChannelDefs;
+
+ print Autom4te::ChannelDefs::usage (), "\n";
+ prog_error ($MESSAGE, [%OPTIONS]);
+ error ($WHERE, $MESSAGE, [%OPTIONS]);
+ error ($MESSAGE);
+ fatal ($WHERE, $MESSAGE, [%OPTIONS]);
+ fatal ($MESSAGE);
+ verb ($MESSAGE, [%OPTIONS]);
+ switch_warning ($CATEGORY);
+ parse_WARNINGS ();
+ parse_warnings ($OPTION, @ARGUMENT);
+ Autom4te::ChannelDefs::set_strictness ($STRICTNESS_NAME);
+
+=head1 DESCRIPTION
+
+This package defines channels that can be used in Automake to
+output diagnostics and other messages (via C<msg()>). It also defines
+some helper function to enable or disable these channels, and some
+shorthand function to output on specific channels.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&prog_error &error &fatal &verb
+ &switch_warning &parse_WARNINGS &parse_warnings);
+
+=head2 CHANNELS
+
+The following channels can be used as the first argument of
+C<Autom4te::Channel::msg>. For some of them we list a shorthand
+function that makes the code more readable.
+
+=over 4
+
+=item C<fatal>
+
+Fatal errors. Use C<&fatal> to send messages over this channel.
+
+=item C<error>
+
+Common errors. Use C<&error> to send messages over this channel.
+
+=item C<error-gnu>
+
+Errors related to GNU Standards.
+
+=item C<error-gnu/warn>
+
+Errors related to GNU Standards that should be warnings in "foreign" mode.
+
+=item C<error-gnits>
+
+Errors related to GNITS Standards (silent by default).
+
+=item C<automake>
+
+Internal errors. Use C<&prog_error> to send messages over this channel.
+
+=item C<cross>
+
+Constructs compromising the cross-compilation of the package.
+
+=item C<gnu>
+
+Warnings related to GNU Coding Standards.
+
+=item C<obsolete>
+
+Warnings about obsolete features (silent by default).
+
+=item C<override>
+
+Warnings about user redefinitions of Automake rules or
+variables (silent by default).
+
+=item C<portability>
+
+Warnings about non-portable constructs.
+
+=item C<syntax>
+
+Warnings about weird syntax, unused variables, typos ...
+
+=item C<unsupported>
+
+Warnings about unsupported (or mis-supported) features.
+
+=item C<verb>
+
+Messages output in C<--verbose> mode. Use C<&verb> to send such messages.
+
+=item C<note>
+
+Informative messages.
+
+=back
+
+=cut
+
+# Initialize our list of error/warning channels.
+# Do not forget to update &usage and the manual
+# if you add or change a warning channel.
+
+register_channel 'fatal', type => 'fatal', ordered => 0;
+register_channel 'error', type => 'error';
+register_channel 'error-gnu', type => 'error';
+register_channel 'error-gnu/warn', type => 'error';
+register_channel 'error-gnits', type => 'error', silent => 1;
+register_channel 'automake', type => 'fatal', backtrace => 1,
+ header => ("####################\n" .
+ "## Internal Error ##\n" .
+ "####################\n"),
+ footer => "\nPlease contact <bug-automake\@gnu.org>.",
+ ordered => 0;
+
+register_channel 'cross', type => 'warning', silent => 1;
+register_channel 'gnu', type => 'warning';
+register_channel 'obsolete', type => 'warning', silent => 1;
+register_channel 'override', type => 'warning', silent => 1;
+register_channel 'portability', type => 'warning', silent => 1;
+register_channel 'syntax', type => 'warning';
+register_channel 'unsupported', type => 'warning';
+
+register_channel 'verb', type => 'debug', silent => 1, ordered => 0;
+register_channel 'note', type => 'debug', silent => 0;
+
+=head2 FUNCTIONS
+
+=over 4
+
+=item C<usage ()>
+
+Return the warning category descriptions.
+
+=cut
+
+sub usage ()
+{
+ return "Warning categories include:
+ `cross' cross compilation issues
+ `gnu' GNU coding standards (default in gnu and gnits modes)
+ `obsolete' obsolete features or constructions
+ `override' user redefinitions of Automake rules or variables
+ `portability' portability issues (default in gnu and gnits modes)
+ `syntax' dubious syntactic constructs (default)
+ `unsupported' unsupported or incomplete features (default)
+ `all' all the warnings
+ `no-CATEGORY' turn off warnings in CATEGORY
+ `none' turn off all the warnings
+ `error' treat warnings as errors";
+}
+
+=item C<prog_error ($MESSAGE, [%OPTIONS])>
+
+Signal a programming error (on channel C<automake>),
+display C<$MESSAGE>, and exit 1.
+
+=cut
+
+sub prog_error ($;%)
+{
+ my ($msg, %opts) = @_;
+ msg 'automake', '', $msg, %opts;
+}
+
+=item C<error ($WHERE, $MESSAGE, [%OPTIONS])>
+
+=item C<error ($MESSAGE)>
+
+Uncategorized errors.
+
+=cut
+
+sub error ($;$%)
+{
+ my ($where, $msg, %opts) = @_;
+ msg ('error', $where, $msg, %opts);
+}
+
+=item C<fatal ($WHERE, $MESSAGE, [%OPTIONS])>
+
+=item C<fatal ($MESSAGE)>
+
+Fatal errors.
+
+=cut
+
+sub fatal ($;$%)
+{
+ my ($where, $msg, %opts) = @_;
+ msg ('fatal', $where, $msg, %opts);
+}
+
+=item C<verb ($MESSAGE, [%OPTIONS])>
+
+C<--verbose> messages.
+
+=cut
+
+sub verb ($;%)
+{
+ my ($msg, %opts) = @_;
+ msg 'verb', '', $msg, %opts;
+}
+
+=item C<switch_warning ($CATEGORY)>
+
+If C<$CATEGORY> is C<mumble>, turn on channel C<mumble>.
+If it is C<no-mumble>, turn C<mumble> off.
+Else handle C<all> and C<none> for completeness.
+
+=cut
+
+sub switch_warning ($)
+{
+ my ($cat) = @_;
+ my $has_no = 0;
+
+ if ($cat =~ /^no-(.*)$/)
+ {
+ $cat = $1;
+ $has_no = 1;
+ }
+
+ if ($cat eq 'all')
+ {
+ setup_channel_type 'warning', silent => $has_no;
+ }
+ elsif ($cat eq 'none')
+ {
+ setup_channel_type 'warning', silent => ! $has_no;
+ }
+ elsif ($cat eq 'error')
+ {
+ $warnings_are_errors = ! $has_no;
+ # Set exit code if Perl warns about something
+ # (like uninitialized variables).
+ $SIG{"__WARN__"} =
+ $has_no ? 'DEFAULT' : sub { print STDERR @_; $exit_code = 1; };
+ }
+ elsif (channel_type ($cat) eq 'warning')
+ {
+ setup_channel $cat, silent => $has_no;
+ }
+ else
+ {
+ return 1;
+ }
+ return 0;
+}
+
+=item C<parse_WARNINGS ()>
+
+Parse the WARNINGS environment variable.
+
+=cut
+
+sub parse_WARNINGS ()
+{
+ if (exists $ENV{'WARNINGS'})
+ {
+ # Ignore unknown categories. This is required because WARNINGS
+ # should be honored by many tools.
+ switch_warning $_ foreach (split (',', $ENV{'WARNINGS'}));
+ }
+}
+
+=item C<parse_warnings ($OPTION, @ARGUMENT)>
+
+Parse the argument of C<--warning=CATEGORY> or C<-WCATEGORY>.
+
+C<$OPTIONS> is C<"--warning"> or C<"-W">, C<@ARGUMENT> is a list of
+C<CATEGORY>.
+
+This can be used as an argument to C<Getopt>.
+
+=cut
+
+sub parse_warnings ($@)
+{
+ my ($opt, @categories) = @_;
+
+ foreach my $cat (map { split ',' } @categories)
+ {
+ msg 'unsupported', "unknown warning category `$cat'"
+ if switch_warning $cat;
+ }
+}
+
+=item C<set_strictness ($STRICTNESS_NAME)>
+
+Configure channels for strictness C<$STRICTNESS_NAME>.
+
+=cut
+
+sub set_strictness ($)
+{
+ my ($name) = @_;
+
+ if ($name eq 'gnu')
+ {
+ setup_channel 'error-gnu', silent => 0;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'error';
+ setup_channel 'error-gnits', silent => 1;
+ setup_channel 'portability', silent => 0;
+ setup_channel 'gnu', silent => 0;
+ }
+ elsif ($name eq 'gnits')
+ {
+ setup_channel 'error-gnu', silent => 0;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'error';
+ setup_channel 'error-gnits', silent => 0;
+ setup_channel 'portability', silent => 0;
+ setup_channel 'gnu', silent => 0;
+ }
+ elsif ($name eq 'foreign')
+ {
+ setup_channel 'error-gnu', silent => 1;
+ setup_channel 'error-gnu/warn', silent => 0, type => 'warning';
+ setup_channel 'error-gnits', silent => 1;
+ setup_channel 'portability', silent => 1;
+ setup_channel 'gnu', silent => 1;
+ }
+ else
+ {
+ prog_error "level `$name' not recognized\n";
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Autom4te::Channels>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt>.
+
+=cut
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/Channels.pm b/lib/Autom4te/Channels.pm
new file mode 100644
index 0000000..1f0fc1e
--- /dev/null
+++ b/lib/Autom4te/Channels.pm
@@ -0,0 +1,836 @@
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Autom4te::Channels;
+
+=head1 NAME
+
+Autom4te::Channels - support functions for error and warning management
+
+=head1 SYNOPSIS
+
+ use Autom4te::Channels;
+
+ # Register a channel to output warnings about unused variables.
+ register_channel 'unused', type => 'warning';
+
+ # Register a channel for system errors.
+ register_channel 'system', type => 'error', exit_code => 4;
+
+ # Output a message on channel 'unused'.
+ msg 'unused', "$file:$line", "unused variable '$var'";
+
+ # Make the 'unused' channel silent.
+ setup_channel 'unused', silent => 1;
+
+ # Turn on all channels of type 'warning'.
+ setup_channel_type 'warning', silent => 0;
+
+ # Redirect all channels to push messages on a Thread::Queue using
+ # the specified serialization key.
+ setup_channel_queue $queue, $key;
+
+ # Output a message pending in a Thread::Queue.
+ pop_channel_queue $queue;
+
+ # Treat all warnings as errors.
+ $warnings_are_errors = 1;
+
+ # Exit with the greatest exit code encountered so far.
+ exit $exit_code;
+
+=head1 DESCRIPTION
+
+This perl module provides support functions for handling diagnostic
+channels in programs. Channels can be registered to convey fatal,
+error, warning, or debug messages. Each channel has various options
+(e.g. is the channel silent, should duplicate messages be removed,
+etc.) that can also be overridden on a per-message basis.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+use Carp;
+use File::Basename;
+
+use vars qw (@ISA @EXPORT %channels $me);
+
+@ISA = qw (Exporter);
+@EXPORT = qw ($exit_code $warnings_are_errors
+ &reset_local_duplicates &reset_global_duplicates
+ &register_channel &msg &exists_channel &channel_type
+ &setup_channel &setup_channel_type
+ &dup_channel_setup &drop_channel_setup
+ &buffer_messages &flush_messages
+ &setup_channel_queue &pop_channel_queue
+ US_GLOBAL US_LOCAL
+ UP_NONE UP_TEXT UP_LOC_TEXT);
+
+$me = basename $0;
+
+=head2 Global Variables
+
+=over 4
+
+=item C<$exit_code>
+
+The greatest exit code seen so far. C<$exit_code> is updated from
+the C<exit_code> options of C<fatal> and C<error> channels.
+
+=cut
+
+use vars qw ($exit_code);
+$exit_code = 0;
+
+=item C<$warnings_are_errors>
+
+Set this variable to 1 if warning messages should be treated as
+errors (i.e. if they should update C<$exit_code>).
+
+=cut
+
+use vars qw ($warnings_are_errors);
+$warnings_are_errors = 0;
+
+=back
+
+=head2 Constants
+
+=over 4
+
+=item C<UP_NONE>, C<UP_TEXT>, C<UP_LOC_TEXT>
+
+Possible values for the C<uniq_part> options. This selects the part
+of the message that should be considered when filtering out duplicates.
+If C<UP_LOC_TEXT> is used, the location and the explanation message
+are used for filtering. If C<UP_TEXT> is used, only the explanation
+message is used (so the same message will be filtered out if it appears
+at different locations). C<UP_NONE> means that duplicate messages
+should be output.
+
+=cut
+
+use constant UP_NONE => 0;
+use constant UP_TEXT => 1;
+use constant UP_LOC_TEXT => 2;
+
+=item C<US_LOCAL>, C<US_GLOBAL>
+
+Possible values for the C<uniq_scope> options.
+Use C<US_GLOBAL> for error messages that should be printed only
+once during the execution of the program, C<US_LOCAL> for message that
+should be printed only once per file. (Actually, C<Channels> does not
+do this now when files are changed, it relies on you calling
+C<reset_local_duplicates> when this happens.)
+
+=cut
+
+# possible values for uniq_scope
+use constant US_LOCAL => 0;
+use constant US_GLOBAL => 1;
+
+=back
+
+=head2 Options
+
+Channels accept the options described below. These options can be
+passed as a hash to the C<register_channel>, C<setup_channel>, and C<msg>
+functions. The possible keys, with their default value are:
+
+=over
+
+=item C<type =E<gt> 'warning'>
+
+The type of the channel. One of C<'debug'>, C<'warning'>, C<'error'>, or
+C<'fatal'>. Fatal messages abort the program when they are output.
+Error messages update the exit status. Debug and warning messages are
+harmless, except that warnings are treated as errors if
+C<$warnings_are_errors> is set.
+
+=item C<exit_code =E<gt> 1>
+
+The value to update C<$exit_code> with when a fatal or error message
+is emitted. C<$exit_code> is also updated for warnings output
+when C<$warnings_are_errors> is set.
+
+=item C<file =E<gt> \*STDERR>
+
+The file where the error should be output.
+
+=item C<silent =E<gt> 0>
+
+Whether the channel should be silent. Use this do disable a
+category of warning, for instance.
+
+=item C<ordered =E<gt> 1>
+
+Whether, with multi-threaded execution, the message should be queued
+for ordered output.
+
+=item C<uniq_part =E<gt> UP_LOC_TEXT>
+
+The part of the message subject to duplicate filtering. See the
+documentation for the C<UP_NONE>, C<UP_TEXT>, and C<UP_LOC_TEXT>
+constants above.
+
+C<uniq_part> can also be set to an arbitrary string that will be used
+instead of the message when considering duplicates.
+
+=item C<uniq_scope =E<gt> US_LOCAL>
+
+The scope of duplicate filtering. See the documentation for the
+C<US_LOCAL>, and C<US_GLOBAL> constants above.
+
+=item C<header =E<gt> ''>
+
+A string to prepend to each message emitted through this channel.
+With partial messages, only the first part will have C<header>
+prepended.
+
+=item C<footer =E<gt> ''>
+
+A string to append to each message emitted through this channel.
+With partial messages, only the final part will have C<footer>
+appended.
+
+=item C<backtrace =E<gt> 0>
+
+Die with a stack backtrace after displaying the message.
+
+=item C<partial =E<gt> 0>
+
+When set, indicates a partial message that should
+be output along with the next message with C<partial> unset.
+Several partial messages can be stacked this way.
+
+Duplicate filtering will apply to the I<global> message resulting from
+all I<partial> messages, using the options from the last (non-partial)
+message. Linking associated messages is the main reason to use this
+option.
+
+For instance the following messages
+
+ msg 'channel', 'foo:2', 'redefinition of A ...';
+ msg 'channel', 'foo:1', '... A previously defined here';
+ msg 'channel', 'foo:3', 'redefinition of A ...';
+ msg 'channel', 'foo:1', '... A previously defined here';
+
+will result in
+
+ foo:2: redefinition of A ...
+ foo:1: ... A previously defined here
+ foo:3: redefinition of A ...
+
+where the duplicate "I<... A previously defined here>" has been
+filtered out.
+
+Linking these messages using C<partial> as follows will prevent the
+fourth message to disappear.
+
+ msg 'channel', 'foo:2', 'redefinition of A ...', partial => 1;
+ msg 'channel', 'foo:1', '... A previously defined here';
+ msg 'channel', 'foo:3', 'redefinition of A ...', partial => 1;
+ msg 'channel', 'foo:1', '... A previously defined here';
+
+Note that because the stack of C<partial> messages is printed with the
+first non-C<partial> message, most options of C<partial> messages will
+be ignored.
+
+=back
+
+=cut
+
+use vars qw (%_default_options %_global_duplicate_messages
+ %_local_duplicate_messages);
+
+# Default options for a channel.
+%_default_options =
+ (
+ type => 'warning',
+ exit_code => 1,
+ file => \*STDERR,
+ silent => 0,
+ ordered => 1,
+ queue => 0,
+ queue_key => undef,
+ uniq_scope => US_LOCAL,
+ uniq_part => UP_LOC_TEXT,
+ header => '',
+ footer => '',
+ backtrace => 0,
+ partial => 0,
+ );
+
+# Filled with output messages as keys, to detect duplicates.
+# The value associated with each key is the number of occurrences
+# filtered out.
+%_local_duplicate_messages = ();
+%_global_duplicate_messages = ();
+
+sub _reset_duplicates (\%)
+{
+ my ($ref) = @_;
+ my $dup = 0;
+ foreach my $k (keys %$ref)
+ {
+ $dup += $ref->{$k};
+ }
+ %$ref = ();
+ return $dup;
+}
+
+
+=head2 Functions
+
+=over 4
+
+=item C<reset_local_duplicates ()>
+
+Reset local duplicate messages (see C<US_LOCAL>), and
+return the number of messages that have been filtered out.
+
+=cut
+
+sub reset_local_duplicates ()
+{
+ return _reset_duplicates %_local_duplicate_messages;
+}
+
+=item C<reset_global_duplicates ()>
+
+Reset local duplicate messages (see C<US_GLOBAL>), and
+return the number of messages that have been filtered out.
+
+=cut
+
+sub reset_global_duplicates ()
+{
+ return _reset_duplicates %_global_duplicate_messages;
+}
+
+sub _merge_options (\%%)
+{
+ my ($hash, %options) = @_;
+ local $_;
+
+ foreach (keys %options)
+ {
+ if (exists $hash->{$_})
+ {
+ $hash->{$_} = $options{$_}
+ }
+ else
+ {
+ confess "unknown option '$_'";
+ }
+ }
+ if ($hash->{'ordered'})
+ {
+ confess "fatal messages cannot be ordered"
+ if $hash->{'type'} eq 'fatal';
+ confess "backtrace cannot be output on ordered messages"
+ if $hash->{'backtrace'};
+ }
+}
+
+=item C<register_channel ($name, [%options])>
+
+Declare channel C<$name>, and override the default options
+with those listed in C<%options>.
+
+=cut
+
+sub register_channel ($;%)
+{
+ my ($name, %options) = @_;
+ my %channel_opts = %_default_options;
+ _merge_options %channel_opts, %options;
+ $channels{$name} = \%channel_opts;
+}
+
+=item C<exists_channel ($name)>
+
+Returns true iff channel C<$name> has been registered.
+
+=cut
+
+sub exists_channel ($)
+{
+ my ($name) = @_;
+ return exists $channels{$name};
+}
+
+=item C<channel_type ($name)>
+
+Returns the type of channel C<$name> if it has been registered.
+Returns the empty string otherwise.
+
+=cut
+
+sub channel_type ($)
+{
+ my ($name) = @_;
+ return $channels{$name}{'type'} if exists_channel $name;
+ return '';
+}
+
+# _format_sub_message ($LEADER, $MESSAGE)
+# ---------------------------------------
+# Split $MESSAGE at new lines and add $LEADER to each line.
+sub _format_sub_message ($$)
+{
+ my ($leader, $message) = @_;
+ return $leader . join ("\n" . $leader, split ("\n", $message)) . "\n";
+}
+
+# Store partial messages here. (See the 'partial' option.)
+use vars qw ($partial);
+$partial = '';
+
+# _format_message ($LOCATION, $MESSAGE, %OPTIONS)
+# -----------------------------------------------
+# Format the message. Return a string ready to print.
+sub _format_message ($$%)
+{
+ my ($location, $message, %opts) = @_;
+ my $msg = ($partial eq '' ? $opts{'header'} : '') . $message
+ . ($opts{'partial'} ? '' : $opts{'footer'});
+ if (ref $location)
+ {
+ # If $LOCATION is a reference, assume it's an instance of the
+ # Autom4te::Location class and display contexts.
+ my $loc = $location->get || $me;
+ $msg = _format_sub_message ("$loc: ", $msg);
+ for my $pair ($location->get_contexts)
+ {
+ $msg .= _format_sub_message ($pair->[0] . ": ", $pair->[1]);
+ }
+ }
+ else
+ {
+ $location ||= $me;
+ $msg = _format_sub_message ("$location: ", $msg);
+ }
+ return $msg;
+}
+
+# _enqueue ($QUEUE, $KEY, $UNIQ_SCOPE, $TO_FILTER, $MSG, $FILE)
+# -------------------------------------------------------------
+# Push message on a queue, to be processed by another thread.
+sub _enqueue ($$$$$$)
+{
+ my ($queue, $key, $uniq_scope, $to_filter, $msg, $file) = @_;
+ $queue->enqueue ($key, $msg, $to_filter, $uniq_scope);
+ confess "message queuing works only for STDERR"
+ if $file ne \*STDERR;
+}
+
+# _dequeue ($QUEUE)
+# -----------------
+# Pop a message from a queue, and print, similarly to how
+# _print_message would do it. Return 0 if the queue is
+# empty. Note that the key has already been dequeued.
+sub _dequeue ($)
+{
+ my ($queue) = @_;
+ my $msg = $queue->dequeue || return 0;
+ my $to_filter = $queue->dequeue;
+ my $uniq_scope = $queue->dequeue;
+ my $file = \*STDERR;
+
+ if ($to_filter ne '')
+ {
+ # Do we want local or global uniqueness?
+ my $dups;
+ if ($uniq_scope == US_LOCAL)
+ {
+ $dups = \%_local_duplicate_messages;
+ }
+ elsif ($uniq_scope == US_GLOBAL)
+ {
+ $dups = \%_global_duplicate_messages;
+ }
+ else
+ {
+ confess "unknown value for uniq_scope: " . $uniq_scope;
+ }
+
+ # Update the hash of messages.
+ if (exists $dups->{$to_filter})
+ {
+ ++$dups->{$to_filter};
+ return 1;
+ }
+ else
+ {
+ $dups->{$to_filter} = 0;
+ }
+ }
+ print $file $msg;
+ return 1;
+}
+
+
+# _print_message ($LOCATION, $MESSAGE, %OPTIONS)
+# ----------------------------------------------
+# Format the message, check duplicates, and print it.
+sub _print_message ($$%)
+{
+ my ($location, $message, %opts) = @_;
+
+ return 0 if ($opts{'silent'});
+
+ my $msg = _format_message ($location, $message, %opts);
+ if ($opts{'partial'})
+ {
+ # Incomplete message. Store, don't print.
+ $partial .= $msg;
+ return;
+ }
+ else
+ {
+ # Prefix with any partial message send so far.
+ $msg = $partial . $msg;
+ $partial = '';
+ }
+
+ msg ('note', '', 'warnings are treated as errors', uniq_scope => US_GLOBAL)
+ if ($opts{'type'} eq 'warning' && $warnings_are_errors);
+
+ # Check for duplicate message if requested.
+ my $to_filter;
+ if ($opts{'uniq_part'} ne UP_NONE)
+ {
+ # Which part of the error should we match?
+ if ($opts{'uniq_part'} eq UP_TEXT)
+ {
+ $to_filter = $message;
+ }
+ elsif ($opts{'uniq_part'} eq UP_LOC_TEXT)
+ {
+ $to_filter = $msg;
+ }
+ else
+ {
+ $to_filter = $opts{'uniq_part'};
+ }
+
+ # Do we want local or global uniqueness?
+ my $dups;
+ if ($opts{'uniq_scope'} == US_LOCAL)
+ {
+ $dups = \%_local_duplicate_messages;
+ }
+ elsif ($opts{'uniq_scope'} == US_GLOBAL)
+ {
+ $dups = \%_global_duplicate_messages;
+ }
+ else
+ {
+ confess "unknown value for uniq_scope: " . $opts{'uniq_scope'};
+ }
+
+ # Update the hash of messages.
+ if (exists $dups->{$to_filter})
+ {
+ ++$dups->{$to_filter};
+ return 0;
+ }
+ else
+ {
+ $dups->{$to_filter} = 0;
+ }
+ }
+ my $file = $opts{'file'};
+ if ($opts{'ordered'} && $opts{'queue'})
+ {
+ _enqueue ($opts{'queue'}, $opts{'queue_key'}, $opts{'uniq_scope'},
+ $to_filter, $msg, $file);
+ }
+ else
+ {
+ print $file $msg;
+ }
+ return 1;
+}
+
+=item C<msg ($channel, $location, $message, [%options])>
+
+Emit a message on C<$channel>, overriding some options of the channel with
+those specified in C<%options>. Obviously C<$channel> must have been
+registered with C<register_channel>.
+
+C<$message> is the text of the message, and C<$location> is a location
+associated to the message.
+
+For instance to complain about some unused variable C<mumble>
+declared at line 10 in F<foo.c>, one could do:
+
+ msg 'unused', 'foo.c:10', "unused variable 'mumble'";
+
+If channel C<unused> is not silent (and if this message is not a duplicate),
+the following would be output:
+
+ foo.c:10: unused variable 'mumble'
+
+C<$location> can also be an instance of C<Autom4te::Location>. In this
+case, the stack of contexts will be displayed in addition.
+
+If C<$message> contains newline characters, C<$location> is prepended
+to each line. For instance,
+
+ msg 'error', 'somewhere', "1st line\n2nd line";
+
+becomes
+
+ somewhere: 1st line
+ somewhere: 2nd line
+
+If C<$location> is an empty string, it is replaced by the name of the
+program. Actually, if you don't use C<%options>, you can even
+elide the empty C<$location>. Thus
+
+ msg 'fatal', '', 'fatal error';
+ msg 'fatal', 'fatal error';
+
+both print
+
+ progname: fatal error
+
+=cut
+
+
+use vars qw (@backlog %buffering);
+
+# See buffer_messages() and flush_messages() below.
+%buffering = (); # The map of channel types to buffer.
+@backlog = (); # The buffer of messages.
+
+sub msg ($$;$%)
+{
+ my ($channel, $location, $message, %options) = @_;
+
+ if (! defined $message)
+ {
+ $message = $location;
+ $location = '';
+ }
+
+ confess "unknown channel $channel" unless exists $channels{$channel};
+
+ my %opts = %{$channels{$channel}};
+ _merge_options (%opts, %options);
+
+ if (exists $buffering{$opts{'type'}})
+ {
+ push @backlog, [$channel, $location->clone, $message, %options];
+ return;
+ }
+
+ # Print the message if needed.
+ if (_print_message ($location, $message, %opts))
+ {
+ # Adjust exit status.
+ if ($opts{'type'} eq 'error'
+ || $opts{'type'} eq 'fatal'
+ || ($opts{'type'} eq 'warning' && $warnings_are_errors))
+ {
+ my $es = $opts{'exit_code'};
+ $exit_code = $es if $es > $exit_code;
+ }
+
+ # Die on fatal messages.
+ confess if $opts{'backtrace'};
+ if ($opts{'type'} eq 'fatal')
+ {
+ # flush messages explicitly here, needed in worker threads.
+ STDERR->flush;
+ exit $exit_code;
+ }
+ }
+}
+
+
+=item C<setup_channel ($channel, %options)>
+
+Override the options of C<$channel> with those specified by C<%options>.
+
+=cut
+
+sub setup_channel ($%)
+{
+ my ($name, %opts) = @_;
+ confess "unknown channel $name" unless exists $channels{$name};
+ _merge_options %{$channels{$name}}, %opts;
+}
+
+=item C<setup_channel_type ($type, %options)>
+
+Override the options of any channel of type C<$type>
+with those specified by C<%options>.
+
+=cut
+
+sub setup_channel_type ($%)
+{
+ my ($type, %opts) = @_;
+ foreach my $channel (keys %channels)
+ {
+ setup_channel $channel, %opts
+ if $channels{$channel}{'type'} eq $type;
+ }
+}
+
+=item C<dup_channel_setup ()>, C<drop_channel_setup ()>
+
+Sometimes it is necessary to make temporary modifications to channels.
+For instance one may want to disable a warning while processing a
+particular file, and then restore the initial setup. These two
+functions make it easy: C<dup_channel_setup ()> saves a copy of the
+current configuration for later restoration by
+C<drop_channel_setup ()>.
+
+You can think of this as a stack of configurations whose first entry
+is the active one. C<dup_channel_setup ()> duplicates the first
+entry, while C<drop_channel_setup ()> just deletes it.
+
+=cut
+
+use vars qw (@_saved_channels @_saved_werrors);
+@_saved_channels = ();
+@_saved_werrors = ();
+
+sub dup_channel_setup ()
+{
+ my %channels_copy;
+ foreach my $k1 (keys %channels)
+ {
+ $channels_copy{$k1} = {%{$channels{$k1}}};
+ }
+ push @_saved_channels, \%channels_copy;
+ push @_saved_werrors, $warnings_are_errors;
+}
+
+sub drop_channel_setup ()
+{
+ my $saved = pop @_saved_channels;
+ %channels = %$saved;
+ $warnings_are_errors = pop @_saved_werrors;
+}
+
+=item C<buffer_messages (@types)>, C<flush_messages ()>
+
+By default, when C<msg> is called, messages are processed immediately.
+
+Sometimes it is necessary to delay the output of messages.
+For instance you might want to make diagnostics before
+channels have been completely configured.
+
+After C<buffer_messages(@types)> has been called, messages sent with
+C<msg> to a channel whose type is listed in C<@types> will be stored in a
+list for later processing.
+
+This backlog of messages is processed when C<flush_messages> is
+called, with the current channel options (not the options in effect,
+at the time of C<msg>). So for instance, if some channel was silenced
+in the meantime, messages to this channel will not be printed.
+
+C<flush_messages> cancels the effect of C<buffer_messages>. Following
+calls to C<msg> are processed immediately as usual.
+
+=cut
+
+sub buffer_messages (@)
+{
+ foreach my $type (@_)
+ {
+ $buffering{$type} = 1;
+ }
+}
+
+sub flush_messages ()
+{
+ %buffering = ();
+ foreach my $args (@backlog)
+ {
+ &msg (@$args);
+ }
+ @backlog = ();
+}
+
+=item C<setup_channel_queue ($queue, $key)>
+
+Set the queue to fill for each channel that is ordered,
+and the key to use for serialization.
+
+=cut
+sub setup_channel_queue ($$)
+{
+ my ($queue, $key) = @_;
+ foreach my $channel (keys %channels)
+ {
+ setup_channel $channel, queue => $queue, queue_key => $key
+ if $channels{$channel}{'ordered'};
+ }
+}
+
+=item C<pop_channel_queue ($queue)>
+
+pop a message off the $queue; the key has already been popped.
+
+=cut
+sub pop_channel_queue ($)
+{
+ my ($queue) = @_;
+ return _dequeue ($queue);
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Autom4te::Location>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/Configure_ac.pm b/lib/Autom4te/Configure_ac.pm
new file mode 100644
index 0000000..924b23c
--- /dev/null
+++ b/lib/Autom4te/Configure_ac.pm
@@ -0,0 +1,127 @@
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Autom4te::Configure_ac;
+
+use 5.006;
+use strict;
+use Exporter;
+use Autom4te::Channels;
+use Autom4te::ChannelDefs;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&find_configure_ac &require_configure_ac);
+
+=head1 NAME
+
+Autom4te::Configure_ac - Locate configure.ac or configure.in.
+
+=head1 SYNOPSIS
+
+ use Autom4te::Configure_ac;
+
+ # Try to locate configure.in or configure.ac in the current
+ # directory. It may be absent. Complain if both files exist.
+ my $file_name = find_configure_ac;
+
+ # Likewise, but bomb out if the file does not exist.
+ my $file_name = require_configure_ac;
+
+ # Likewise, but in $dir.
+ my $file_name = find_configure_ac ($dir);
+ my $file_name = require_configure_ac ($dir);
+
+=over 4
+
+=back
+
+=head2 Functions
+
+=over 4
+
+=item C<$configure_ac = find_configure_ac ([$directory])>
+
+Find a F<configure.ac> or F<configure.in> file in C<$directory>,
+defaulting to the current directory. Complain if both files are present.
+Return the name of the file found, or the former if neither is present.
+
+=cut
+
+sub find_configure_ac (;@)
+{
+ my ($directory) = @_;
+ $directory ||= '.';
+ my $configure_ac =
+ File::Spec->canonpath (File::Spec->catfile ($directory, 'configure.ac'));
+ my $configure_in =
+ File::Spec->canonpath (File::Spec->catfile ($directory, 'configure.in'));
+
+ if (-f $configure_ac)
+ {
+ if (-f $configure_in)
+ {
+ msg ('unsupported',
+ "'$configure_ac' and '$configure_in' both present.\n"
+ . "proceeding with '$configure_ac'");
+ }
+ return $configure_ac
+ }
+ elsif (-f $configure_in)
+ {
+ return $configure_in;
+ }
+ return $configure_ac;
+}
+
+
+=item C<$configure_ac = require_configure_ac ([$directory])>
+
+Like C<find_configure_ac>, but fail if neither is present.
+
+=cut
+
+sub require_configure_ac (;$)
+{
+ my $res = find_configure_ac (@_);
+ fatal "'configure.ac' or 'configure.in' is required"
+ unless -f $res;
+ return $res
+}
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/FileUtils.pm b/lib/Autom4te/FileUtils.pm
new file mode 100644
index 0000000..30bbdb9
--- /dev/null
+++ b/lib/Autom4te/FileUtils.pm
@@ -0,0 +1,452 @@
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Autom4te::FileUtils;
+
+=head1 NAME
+
+Autom4te::FileUtils - handling files
+
+=head1 SYNOPSIS
+
+ use Autom4te::FileUtils
+
+=head1 DESCRIPTION
+
+This perl module provides various general purpose file handling functions.
+
+=cut
+
+use 5.006;
+use strict;
+use Exporter;
+use File::stat;
+use IO::File;
+use Autom4te::Channels;
+use Autom4te::ChannelDefs;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+@EXPORT = qw (&open_quote &contents
+ &find_file &mtime
+ &update_file &up_to_date_p
+ &xsystem &xsystem_hint &xqx
+ &dir_has_case_matching_file &reset_dir_cache
+ &set_dir_cache_file);
+
+
+=item C<open_quote ($file_name)>
+
+Quote C<$file_name> for open.
+
+=cut
+
+# $FILE_NAME
+# open_quote ($FILE_NAME)
+# -----------------------
+# If the string $S is a well-behaved file name, simply return it.
+# If it starts with white space, prepend './', if it ends with
+# white space, add '\0'. Return the new string.
+sub open_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m/^\s/)
+ {
+ $s = "./$s";
+ }
+ if ($s =~ m/\s$/)
+ {
+ $s = "$s\0";
+ }
+ return $s;
+}
+
+=item C<find_file ($file_name, @include)>
+
+Return the first path for a C<$file_name> in the C<include>s.
+
+We match exactly the behavior of GNU M4: first look in the current
+directory (which includes the case of absolute file names), and then,
+if the file name is not absolute, look in C<@include>.
+
+If the file is flagged as optional (ends with C<?>), then return undef
+if absent, otherwise exit with error.
+
+=cut
+
+# $FILE_NAME
+# find_file ($FILE_NAME, @INCLUDE)
+# --------------------------------
+sub find_file ($@)
+{
+ use File::Spec;
+
+ my ($file_name, @include) = @_;
+ my $optional = 0;
+
+ $optional = 1
+ if $file_name =~ s/\?$//;
+
+ return File::Spec->canonpath ($file_name)
+ if -e $file_name;
+
+ if (!File::Spec->file_name_is_absolute ($file_name))
+ {
+ foreach my $path (@include)
+ {
+ return File::Spec->canonpath (File::Spec->catfile ($path, $file_name))
+ if -e File::Spec->catfile ($path, $file_name)
+ }
+ }
+
+ fatal "$file_name: no such file or directory"
+ unless $optional;
+ return undef;
+}
+
+=item C<mtime ($file)>
+
+Return the mtime of C<$file>. Missing files, or C<-> standing for
+C<STDIN> or C<STDOUT> are "obsolete", i.e., as old as possible.
+
+=cut
+
+# $MTIME
+# MTIME ($FILE)
+# -------------
+sub mtime ($)
+{
+ my ($file) = @_;
+
+ return 0
+ if $file eq '-' || ! -f $file;
+
+ my $stat = stat ($file)
+ or fatal "cannot stat $file: $!";
+
+ return $stat->mtime;
+}
+
+
+=item C<update_file ($from, $to, [$force])>
+
+Rename C<$from> as C<$to>, preserving C<$to> timestamp if it has not
+changed, unless C<$force> is true (defaults to false). Recognize
+C<$to> = C<-> standing for C<STDIN>. C<$from> is always
+removed/renamed.
+
+=cut
+
+# &update_file ($FROM, $TO; $FORCE)
+# ---------------------------------
+sub update_file ($$;$)
+{
+ my ($from, $to, $force) = @_;
+ $force = 0
+ unless defined $force;
+ my $SIMPLE_BACKUP_SUFFIX = $ENV{'SIMPLE_BACKUP_SUFFIX'} || '~';
+ use File::Compare;
+ use File::Copy;
+
+ if ($to eq '-')
+ {
+ my $in = new IO::File ("< " . open_quote ($from));
+ my $out = new IO::File (">-");
+ while ($_ = $in->getline)
+ {
+ print $out $_;
+ }
+ $in->close;
+ unlink ($from) || fatal "cannot remove $from: $!";
+ return;
+ }
+
+ if (!$force && -f "$to" && compare ("$from", "$to") == 0)
+ {
+ # File didn't change, so don't update its mod time.
+ msg 'note', "'$to' is unchanged";
+ unlink ($from)
+ or fatal "cannot remove $from: $!";
+ return
+ }
+
+ if (-f "$to")
+ {
+ # Back up and install the new one.
+ move ("$to", "$to$SIMPLE_BACKUP_SUFFIX")
+ or fatal "cannot backup $to: $!";
+ move ("$from", "$to")
+ or fatal "cannot rename $from as $to: $!";
+ msg 'note', "'$to' is updated";
+ }
+ else
+ {
+ move ("$from", "$to")
+ or fatal "cannot rename $from as $to: $!";
+ msg 'note', "'$to' is created";
+ }
+}
+
+
+=item C<up_to_date_p ($file, @dep)>
+
+Is C<$file> more recent than C<@dep>?
+
+=cut
+
+# $BOOLEAN
+# &up_to_date_p ($FILE, @DEP)
+# ---------------------------
+sub up_to_date_p ($@)
+{
+ my ($file, @dep) = @_;
+ my $mtime = mtime ($file);
+
+ foreach my $dep (@dep)
+ {
+ if ($mtime < mtime ($dep))
+ {
+ verb "up_to_date ($file): outdated: $dep";
+ return 0;
+ }
+ }
+
+ verb "up_to_date ($file): up to date";
+ return 1;
+}
+
+
+=item C<handle_exec_errors ($command, [$expected_exit_code = 0], [$hint])>
+
+Display an error message for C<$command>, based on the content of
+C<$?> and C<$!>. Be quiet if the command exited normally
+with C<$expected_exit_code>. If C<$hint> is given, display that as well
+if the command failed to run at all.
+
+=cut
+
+sub handle_exec_errors ($;$$)
+{
+ my ($command, $expected, $hint) = @_;
+ $expected = 0 unless defined $expected;
+ if (defined $hint)
+ {
+ $hint = "\n" . $hint;
+ }
+ else
+ {
+ $hint = '';
+ }
+
+ $command = (split (' ', $command))[0];
+ if ($!)
+ {
+ fatal "failed to run $command: $!" . $hint;
+ }
+ else
+ {
+ use POSIX qw (WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
+
+ if (WIFEXITED ($?))
+ {
+ my $status = WEXITSTATUS ($?);
+ # Propagate exit codes.
+ fatal ('',
+ "$command failed with exit status: $status",
+ exit_code => $status)
+ unless $status == $expected;
+ }
+ elsif (WIFSIGNALED ($?))
+ {
+ my $signal = WTERMSIG ($?);
+ fatal "$command terminated by signal: $signal";
+ }
+ else
+ {
+ fatal "$command exited abnormally";
+ }
+ }
+}
+
+=item C<xqx ($command)>
+
+Same as C<qx> (but in scalar context), but fails on errors.
+
+=cut
+
+# xqx ($COMMAND)
+# --------------
+sub xqx ($)
+{
+ my ($command) = @_;
+
+ verb "running: $command";
+
+ $! = 0;
+ my $res = `$command`;
+ handle_exec_errors $command
+ if $?;
+
+ return $res;
+}
+
+
+=item C<xsystem (@argv)>
+
+Same as C<system>, but fails on errors, and reports the C<@argv>
+in verbose mode.
+
+=cut
+
+sub xsystem (@)
+{
+ my (@command) = @_;
+
+ verb "running: @command";
+
+ $! = 0;
+ handle_exec_errors "@command"
+ if system @command;
+}
+
+
+=item C<xsystem_hint ($msg, @argv)>
+
+Same as C<xsystem>, but allows to pass a hint that will be displayed
+in case the command failed to run at all.
+
+=cut
+
+sub xsystem_hint (@)
+{
+ my ($hint, @command) = @_;
+
+ verb "running: @command";
+
+ $! = 0;
+ handle_exec_errors "@command", 0, $hint
+ if system @command;
+}
+
+
+=item C<contents ($file_name)>
+
+Return the contents of C<$file_name>.
+
+=cut
+
+# contents ($FILE_NAME)
+# ---------------------
+sub contents ($)
+{
+ my ($file) = @_;
+ verb "reading $file";
+ local $/; # Turn on slurp-mode.
+ my $f = new Autom4te::XFile "< " . open_quote ($file);
+ my $contents = $f->getline;
+ $f->close;
+ return $contents;
+}
+
+
+=item C<dir_has_case_matching_file ($DIRNAME, $FILE_NAME)>
+
+Return true iff $DIR contains a file name that matches $FILE_NAME case
+insensitively.
+
+We need to be cautious on case-insensitive case-preserving file
+systems (e.g. Mac OS X's HFS+). On such systems C<-f 'Foo'> and C<-f
+'foO'> answer the same thing. Hence if a package distributes its own
+F<CHANGELOG> file, but has no F<ChangeLog> file, automake would still
+try to distribute F<ChangeLog> (because it thinks it exists) in
+addition to F<CHANGELOG>, although it is impossible for these two
+files to be in the same directory (the two file names designate the
+same file).
+
+=cut
+
+use vars '%_directory_cache';
+sub dir_has_case_matching_file ($$)
+{
+ # Note that print File::Spec->case_tolerant returns 0 even on MacOS
+ # X (with Perl v5.8.1-RC3 at least), so do not try to shortcut this
+ # function using that.
+
+ my ($dirname, $file_name) = @_;
+ return 0 unless -f "$dirname/$file_name";
+
+ # The file appears to exist, however it might be a mirage if the
+ # system is case insensitive. Let's browse the directory and check
+ # whether the file is really in. We maintain a cache of directories
+ # so Automake doesn't spend all its time reading the same directory
+ # again and again.
+ if (!exists $_directory_cache{$dirname})
+ {
+ error "failed to open directory '$dirname'"
+ unless opendir (DIR, $dirname);
+ $_directory_cache{$dirname} = { map { $_ => 1 } readdir (DIR) };
+ closedir (DIR);
+ }
+ return exists $_directory_cache{$dirname}{$file_name};
+}
+
+=item C<reset_dir_cache ($dirname)>
+
+Clear C<dir_has_case_matching_file>'s cache for C<$dirname>.
+
+=cut
+
+sub reset_dir_cache ($)
+{
+ delete $_directory_cache{$_[0]};
+}
+
+=item C<set_dir_cache_file ($dirname, $file_name)>
+
+State that C<$dirname> contains C<$file_name> now.
+
+=cut
+
+sub set_dir_cache_file ($$)
+{
+ my ($dirname, $file_name) = @_;
+ $_directory_cache{$dirname}{$file_name} = 1
+ if exists $_directory_cache{$dirname};
+}
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/General.pm b/lib/Autom4te/General.pm
new file mode 100644
index 0000000..ef1e987
--- /dev/null
+++ b/lib/Autom4te/General.pm
@@ -0,0 +1,426 @@
+# autoconf -- create `configure' using m4 macros
+# Copyright (C) 2001-2004, 2006-2007, 2009-2012 Free Software
+# Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Autom4te::General;
+
+=head1 NAME
+
+Autom4te::General - general support functions for Autoconf
+
+=head1 SYNOPSIS
+
+ use Autom4te::General
+
+=head1 DESCRIPTION
+
+This perl module provides various general purpose support functions
+used in several executables of the Autoconf package.
+
+=cut
+
+use 5.006;
+use Exporter;
+use Autom4te::ChannelDefs;
+use Autom4te::Channels;
+use Autom4te::Getopt ();
+use File::Basename;
+use File::Path ();
+use File::stat;
+use IO::File;
+use Carp;
+use strict;
+
+use vars qw (@ISA @EXPORT);
+
+@ISA = qw (Exporter);
+
+# Variables we define and export.
+my @export_vars =
+ qw ($debug $force $help $me $tmp $verbose $version);
+
+# Functions we define and export.
+my @export_subs =
+ qw (&debug
+ &getopt &shell_quote &mktmpdir
+ &uniq);
+
+# Functions we forward (coming from modules we use).
+my @export_forward_subs =
+ qw (&basename &dirname &fileparse);
+
+@EXPORT = (@export_vars, @export_subs, @export_forward_subs);
+
+
+# Variable we share with the main package. Be sure to have a single
+# copy of them: using `my' together with multiple inclusion of this
+# package would introduce several copies.
+
+=head2 Global Variables
+
+=over 4
+
+=item C<$debug>
+
+Set this variable to 1 if debug messages should be enabled. Debug
+messages are meant for developers only, or when tracking down an
+incorrect execution.
+
+=cut
+
+use vars qw ($debug);
+$debug = 0;
+
+=item C<$force>
+
+Set this variable to 1 to recreate all the files, or to consider all
+the output files are obsolete.
+
+=cut
+
+use vars qw ($force);
+$force = undef;
+
+=item C<$help>
+
+Set to the help message associated with the option C<--help>.
+
+=cut
+
+use vars qw ($help);
+$help = undef;
+
+=item C<$me>
+
+The name of this application, for diagnostic messages.
+
+=cut
+
+use vars qw ($me);
+$me = basename ($0);
+
+=item C<$tmp>
+
+The name of the temporary directory created by C<mktmpdir>. Left
+C<undef> otherwise.
+
+=cut
+
+# Our tmp dir.
+use vars qw ($tmp);
+$tmp = undef;
+
+=item C<$verbose>
+
+Enable verbosity messages. These messages are meant for ordinary
+users, and typically make explicit the steps being performed.
+
+=cut
+
+use vars qw ($verbose);
+$verbose = 0;
+
+=item C<$version>
+
+Set to the version message associated to the option C<--version>.
+
+=cut
+
+use vars qw ($version);
+$version = undef;
+
+=back
+
+=cut
+
+
+
+## ----- ##
+## END. ##
+## ----- ##
+
+=head2 Functions
+
+=over 4
+
+=item C<END>
+
+Filter Perl's exit codes, delete any temporary directory (unless
+C<$debug>), and exit nonzero whenever closing C<STDOUT> fails.
+
+=cut
+
+# END
+# ---
+sub END
+{
+ # $? contains the exit status we will return.
+ # It was set using one of the following ways:
+ #
+ # 1) normal termination
+ # this sets $? = 0
+ # 2) calling `exit (n)'
+ # this sets $? = n
+ # 3) calling die or friends (croak, confess...):
+ # a) when $! is non-0
+ # this set $? = $!
+ # b) when $! is 0 but $? is not
+ # this sets $? = ($? >> 8) (i.e., the exit code of the
+ # last program executed)
+ # c) when both $! and $? are 0
+ # this sets $? = 255
+ #
+ # Cases 1), 2), and 3b) are fine, but we prefer $? = 1 for 3a) and 3c).
+ my $status = $?;
+ $status = 1 if ($! && $! == $?) || $? == 255;
+ # (Note that we cannot safely distinguish calls to `exit (n)'
+ # from calls to die when `$! = n'. It's not big deal because
+ # we only call `exit (0)' or `exit (1)'.)
+
+ if (!$debug && defined $tmp && -d $tmp)
+ {
+ local $SIG{__WARN__} = sub { $status = 1; warn $_[0] };
+ File::Path::rmtree $tmp;
+ }
+
+ # This is required if the code might send any output to stdout
+ # E.g., even --version or --help. So it's best to do it unconditionally.
+ if (! close STDOUT)
+ {
+ print STDERR "$me: closing standard output: $!\n";
+ $? = 1;
+ return;
+ }
+
+ $? = $status;
+}
+
+
+## ----------- ##
+## Functions. ##
+## ----------- ##
+
+
+=item C<debug (@message)>
+
+If the debug mode is enabled (C<$debug> and C<$verbose>), report the
+C<@message> on C<STDERR>, signed with the name of the program.
+
+=cut
+
+# &debug(@MESSAGE)
+# ----------------
+# Messages displayed only if $DEBUG and $VERBOSE.
+sub debug (@)
+{
+ print STDERR "$me: ", @_, "\n"
+ if $verbose && $debug;
+}
+
+
+=item C<getopt (%option)>
+
+Wrapper around C<Autom4te::Getopt::parse_options>. In addition to
+the user C<option>s, support C<-h>/C<--help>, C<-V>/C<--version>,
+C<-v>/C<--verbose>, C<-d>/C<--debug>, C<-f>/C<--force>. Conform to
+the GNU Coding Standards for error messages.
+
+=cut
+
+# getopt (%OPTION)
+# ----------------
+# Handle the %OPTION, plus all the common options.
+sub getopt (%)
+{
+ my (%option) = @_;
+ %option = ("h|help" => sub { print $help; exit 0 },
+ "V|version" => sub { print $version; exit 0 },
+
+ "v|verbose" => sub { ++$verbose },
+ "d|debug" => sub { ++$debug },
+ 'f|force' => \$force,
+
+ # User options last, so that they have precedence.
+ %option);
+ Autom4te::Getopt::parse_options (%option);
+
+ setup_channel 'note', silent => !$verbose;
+ setup_channel 'verb', silent => !$verbose;
+}
+
+
+=item C<shell_quote ($file_name)>
+
+Quote C<$file_name> for the shell.
+
+=cut
+
+# $FILE_NAME
+# shell_quote ($FILE_NAME)
+# ------------------------
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return
+# the new string.
+sub shell_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m![^\w+/.,-]!)
+ {
+ # Convert each single quote to '\''
+ $s =~ s/\'/\'\\\'\'/g;
+ # Then single quote the string.
+ $s = "'$s'";
+ }
+ return $s;
+}
+
+=item C<mktmpdir ($signature)>
+
+Create a temporary directory which name is based on C<$signature>.
+Store its name in C<$tmp>. C<END> is in charge of removing it, unless
+C<$debug>.
+
+=cut
+
+# mktmpdir ($SIGNATURE)
+# ---------------------
+sub mktmpdir ($)
+{
+ my ($signature) = @_;
+ my $TMPDIR = $ENV{'TMPDIR'} || '/tmp';
+ my $quoted_tmpdir = shell_quote ($TMPDIR);
+
+ # If mktemp supports dirs, use it.
+ $tmp = `(umask 077 &&
+ mktemp -d $quoted_tmpdir/"${signature}XXXXXX") 2>/dev/null`;
+ chomp $tmp;
+
+ if (!$tmp || ! -d $tmp)
+ {
+ $tmp = "$TMPDIR/$signature" . int (rand 10000) . ".$$";
+ mkdir $tmp, 0700
+ or croak "$me: cannot create $tmp: $!\n";
+ }
+
+ print STDERR "$me:$$: working in $tmp\n"
+ if $debug;
+}
+
+
+=item C<uniq (@list)>
+
+Return C<@list> with no duplicates, keeping only the first
+occurrences.
+
+=cut
+
+# @RES
+# uniq (@LIST)
+# ------------
+sub uniq (@)
+{
+ my @res = ();
+ my %seen = ();
+ foreach my $item (@_)
+ {
+ if (! exists $seen{$item})
+ {
+ $seen{$item} = 1;
+ push (@res, $item);
+ }
+ }
+ return wantarray ? @res : "@res";
+}
+
+
+=item C<handle_exec_errors ($command)>
+
+Display an error message for C<$command>, based on the content of
+C<$?> and C<$!>.
+
+=cut
+
+
+# handle_exec_errors ($COMMAND)
+# -----------------------------
+sub handle_exec_errors ($)
+{
+ my ($command) = @_;
+
+ $command = (split (' ', $command))[0];
+ if ($!)
+ {
+ error "failed to run $command: $!";
+ }
+ else
+ {
+ use POSIX qw (WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
+
+ if (WIFEXITED ($?))
+ {
+ my $status = WEXITSTATUS ($?);
+ # WIFEXITED and WEXITSTATUS can alter $!, reset it so that
+ # error() actually propagates the command's exit status, not $!.
+ $! = 0;
+ error "$command failed with exit status: $status";
+ }
+ elsif (WIFSIGNALED ($?))
+ {
+ my $signal = WTERMSIG ($?);
+ # In this case we prefer to exit with status 1.
+ $! = 1;
+ error "$command terminated by signal: $signal";
+ }
+ else
+ {
+ error "$command exited abnormally";
+ }
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Autom4te::XFile>
+
+=head1 HISTORY
+
+Written by Alexandre Duret-Lutz E<lt>F<adl@gnu.org>E<gt> and Akim
+Demaille E<lt>F<akim@freefriends.org>E<gt>.
+
+=cut
+
+
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/Getopt.pm b/lib/Autom4te/Getopt.pm
new file mode 100644
index 0000000..d73c5ef
--- /dev/null
+++ b/lib/Autom4te/Getopt.pm
@@ -0,0 +1,115 @@
+# Copyright (C) 2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Autom4te::Getopt;
+
+=head1 NAME
+
+Autom4te::Getopt - GCS conforming parser for command line options
+
+=head1 SYNOPSIS
+
+ use Autom4te::Getopt;
+
+=head1 DESCRIPTION
+
+Export a function C<parse_options>, performing parsing of command
+line options in conformance to the GNU Coding standards.
+
+=cut
+
+use 5.006;
+use strict;
+use warnings FATAL => 'all';
+use Exporter ();
+use Getopt::Long ();
+use Autom4te::ChannelDefs qw/fatal/;
+use Carp qw/croak confess/;
+
+use vars qw (@ISA @EXPORT);
+@ISA = qw (Exporter);
+@EXPORT= qw/getopt/;
+
+=item C<parse_options (%option)>
+
+Wrapper around C<Getopt::Long>, trying to conform to the GNU
+Coding Standards for error messages.
+
+=cut
+
+sub parse_options (%)
+{
+ my %option = @_;
+
+ Getopt::Long::Configure ("bundling", "pass_through");
+ # Unrecognized options are passed through, so GetOption can only fail
+ # due to internal errors or misuse of options specification.
+ Getopt::Long::GetOptions (%option)
+ or confess "error in options specification (likely)";
+
+ if (@ARGV && $ARGV[0] =~ /^-./)
+ {
+ my %argopts;
+ for my $k (keys %option)
+ {
+ if ($k =~ /(.*)=s$/)
+ {
+ map { $argopts{(length ($_) == 1)
+ ? "-$_" : "--$_" } = 1; } (split (/\|/, $1));
+ }
+ }
+ if ($ARGV[0] eq '--')
+ {
+ shift @ARGV;
+ }
+ elsif (exists $argopts{$ARGV[0]})
+ {
+ fatal ("option '$ARGV[0]' requires an argument\n"
+ . "Try '$0 --help' for more information.");
+ }
+ else
+ {
+ fatal ("unrecognized option '$ARGV[0]'.\n"
+ . "Try '$0 --help' for more information.");
+ }
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<Getopt::Long>
+
+=cut
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/Makefile.am b/lib/Autom4te/Makefile.am
new file mode 100644
index 0000000..5d9bdac
--- /dev/null
+++ b/lib/Autom4te/Makefile.am
@@ -0,0 +1,37 @@
+## Process this file with automake to create Makefile.in
+
+# Copyright (C) 2001, 2003, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+perllibdir = $(pkgdatadir)/Autom4te
+dist_perllib_DATA = \
+ C4che.pm \
+ ChannelDefs.pm \
+ Channels.pm \
+ Configure_ac.pm \
+ FileUtils.pm \
+ General.pm \
+ Getopt.pm \
+ Request.pm \
+ XFile.pm
+
+
+## --------------- ##
+## Building TAGS. ##
+## --------------- ##
+
+TAGS_FILES = $(dist_perllib_DATA)
+
+ETAGS_ARGS = --lang=perl
diff --git a/lib/Autom4te/Makefile.in b/lib/Autom4te/Makefile.in
new file mode 100644
index 0000000..280af35
--- /dev/null
+++ b/lib/Autom4te/Makefile.in
@@ -0,0 +1,454 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2001, 2003, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/Autom4te
+DIST_COMMON = $(dist_perllib_DATA) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(perllibdir)"
+DATA = $(dist_perllib_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+perllibdir = $(pkgdatadir)/Autom4te
+dist_perllib_DATA = \
+ C4che.pm \
+ ChannelDefs.pm \
+ Channels.pm \
+ Configure_ac.pm \
+ FileUtils.pm \
+ General.pm \
+ Getopt.pm \
+ Request.pm \
+ XFile.pm
+
+TAGS_FILES = $(dist_perllib_DATA)
+ETAGS_ARGS = --lang=perl
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Autom4te/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/Autom4te/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_perllibDATA: $(dist_perllib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(perllibdir)" || $(MKDIR_P) "$(DESTDIR)$(perllibdir)"
+ @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(perllibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(perllibdir)" || exit $$?; \
+ done
+
+uninstall-dist_perllibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_perllib_DATA)'; test -n "$(perllibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(perllibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(perllibdir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(perllibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_perllibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_perllibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ ctags distclean distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dist_perllibDATA \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \
+ uninstall uninstall-am uninstall-dist_perllibDATA
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/Autom4te/Request.pm b/lib/Autom4te/Request.pm
new file mode 100644
index 0000000..c3cd050
--- /dev/null
+++ b/lib/Autom4te/Request.pm
@@ -0,0 +1,114 @@
+# autoconf -- create `configure' using m4 macros
+# Copyright (C) 2001-2003, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package Autom4te::Request;
+
+=head1 NAME
+
+Autom4te::Request - a single m4 run request
+
+=head1 SYNOPSIS
+
+ use Autom4te::Request;
+
+=head1 DESCRIPTION
+
+This perl module provides various general purpose support functions
+used in several executables of the Autoconf and Automake packages.
+
+=cut
+
+use strict;
+use Class::Struct;
+use Carp;
+use Data::Dumper;
+
+struct
+ (
+ # The key of the cache files.
+ 'id' => "\$",
+ # True iff %MACRO contains all the macros we want to trace.
+ 'valid' => "\$",
+ # The include path.
+ 'path' => '@',
+ # The set of input files.
+ 'input' => '@',
+ # The set of macros currently traced.
+ 'macro' => '%',
+ );
+
+
+# Serialize a request or all the current requests.
+sub marshall($)
+{
+ my ($caller) = @_;
+ my $res = '';
+
+ # CALLER is an object: instance method.
+ my $marshall = Data::Dumper->new ([$caller]);
+ $marshall->Indent(2)->Terse(0);
+ $res = $marshall->Dump . "\n";
+
+ return $res;
+}
+
+
+# includes_p ($SELF, @MACRO)
+# --------------------------
+# Does this request covers all the @MACRO.
+sub includes_p
+{
+ my ($self, @macro) = @_;
+
+ foreach (@macro)
+ {
+ return 0
+ if ! exists ${$self->macro}{$_};
+ }
+ return 1;
+}
+
+
+=head1 SEE ALSO
+
+L<Autom4te::C4che>
+
+=head1 HISTORY
+
+Written by Akim Demaille E<lt>F<akim@freefriends.org>E<gt>.
+
+=cut
+
+
+
+1; # for require
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Autom4te/XFile.pm b/lib/Autom4te/XFile.pm
new file mode 100644
index 0000000..28d5bc6
--- /dev/null
+++ b/lib/Autom4te/XFile.pm
@@ -0,0 +1,319 @@
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Akim Demaille <akim@freefriends.org>.
+
+###############################################################
+# The main copy of this file is in Automake's git repository. #
+# Updates should be sent to automake-patches@gnu.org. #
+###############################################################
+
+package Autom4te::XFile;
+
+=head1 NAME
+
+Autom4te::XFile - supply object methods for filehandles with error handling
+
+=head1 SYNOPSIS
+
+ use Autom4te::XFile;
+
+ $fh = new Autom4te::XFile;
+ $fh->open ("< file");
+ # No need to check $FH: we died if open failed.
+ print <$fh>;
+ $fh->close;
+ # No need to check the return value of close: we died if it failed.
+
+ $fh = new Autom4te::XFile "> file";
+ # No need to check $FH: we died if new failed.
+ print $fh "bar\n";
+ $fh->close;
+
+ $fh = new Autom4te::XFile "file", "r";
+ # No need to check $FH: we died if new failed.
+ defined $fh
+ print <$fh>;
+ undef $fh; # automatically closes the file and checks for errors.
+
+ $fh = new Autom4te::XFile "file", O_WRONLY | O_APPEND;
+ # No need to check $FH: we died if new failed.
+ print $fh "corge\n";
+
+ $pos = $fh->getpos;
+ $fh->setpos ($pos);
+
+ undef $fh; # automatically closes the file and checks for errors.
+
+ autoflush STDOUT 1;
+
+=head1 DESCRIPTION
+
+C<Autom4te::XFile> inherits from C<IO::File>. It provides the method
+C<name> returning the file name. It provides dying versions of the
+methods C<close>, C<lock> (corresponding to C<flock>), C<new>,
+C<open>, C<seek>, and C<truncate>. It also overrides the C<getline>
+and C<getlines> methods to translate C<\r\n> to C<\n>.
+
+=cut
+
+use 5.006;
+use strict;
+use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD @ISA);
+use Carp;
+use Errno;
+use IO::File;
+use File::Basename;
+use Autom4te::ChannelDefs;
+use Autom4te::Channels qw(msg);
+use Autom4te::FileUtils;
+
+require Exporter;
+require DynaLoader;
+
+@ISA = qw(IO::File Exporter DynaLoader);
+
+$VERSION = "1.2";
+
+@EXPORT = @IO::File::EXPORT;
+
+eval {
+ # Make all Fcntl O_XXX and LOCK_XXX constants available for importing
+ require Fcntl;
+ my @O = grep /^(LOCK|O)_/, @Fcntl::EXPORT, @Fcntl::EXPORT_OK;
+ Fcntl->import (@O); # first we import what we want to export
+ push (@EXPORT, @O);
+};
+
+=head2 Methods
+
+=over
+
+=item C<$fh = new Autom4te::XFile ([$expr, ...]>
+
+Constructor a new XFile object. Additional arguments
+are passed to C<open>, if any.
+
+=cut
+
+sub new
+{
+ my $type = shift;
+ my $class = ref $type || $type || "Autom4te::XFile";
+ my $fh = $class->SUPER::new ();
+ if (@_)
+ {
+ $fh->open (@_);
+ }
+ $fh;
+}
+
+=item C<$fh-E<gt>open ([$file, ...])>
+
+Open a file, passing C<$file> and further arguments to C<IO::File::open>.
+Die if opening fails. Store the name of the file. Use binmode for writing.
+
+=cut
+
+sub open
+{
+ my $fh = shift;
+ my ($file) = @_;
+
+ # WARNING: Gross hack: $FH is a typeglob: use its hash slot to store
+ # the 'name' of the file we are opening. See the example with
+ # io_socket_timeout in IO::Socket for more, and read Graham's
+ # comment in IO::Handle.
+ ${*$fh}{'autom4te_xfile_file'} = "$file";
+
+ if (!$fh->SUPER::open (@_))
+ {
+ fatal "cannot open $file: $!";
+ }
+
+ # In case we're running under MSWindows, don't write with CRLF.
+ # (This circumvents a bug in at least Cygwin bash where the shell
+ # parsing fails on lines ending with the continuation character '\'
+ # and CRLF).
+ binmode $fh if $file =~ /^\s*>/;
+}
+
+=item C<$fh-E<gt>close>
+
+Close the file, handling errors.
+
+=cut
+
+sub close
+{
+ my $fh = shift;
+ if (!$fh->SUPER::close (@_))
+ {
+ my $file = $fh->name;
+ Autom4te::FileUtils::handle_exec_errors $file
+ unless $!;
+ fatal "cannot close $file: $!";
+ }
+}
+
+=item C<$line = $fh-E<gt>getline>
+
+Read and return a line from the file. Ensure C<\r\n> is translated to
+C<\n> on input files.
+
+=cut
+
+# Some native Windows/perl installations fail to translate \r\n to \n on
+# input so we do that here.
+sub getline
+{
+ local $_ = $_[0]->SUPER::getline;
+ # Perform a _global_ replacement: $_ may can contains many lines
+ # in slurp mode ($/ = undef).
+ s/\015\012/\n/gs if defined $_;
+ return $_;
+}
+
+=item C<@lines = $fh-E<gt>getlines>
+
+Slurp lines from the files.
+
+=cut
+
+sub getlines
+{
+ my @res = ();
+ my $line;
+ push @res, $line while $line = $_[0]->getline;
+ return @res;
+}
+
+=item C<$name = $fh-E<gt>name>
+
+Return the name of the file.
+
+=cut
+
+sub name
+{
+ my $fh = shift;
+ return ${*$fh}{'autom4te_xfile_file'};
+}
+
+=item C<$fh-E<gt>lock>
+
+Lock the file using C<flock>. If locking fails for reasons other than
+C<flock> being unsupported, then error out if C<$ENV{'MAKEFLAGS'}> indicates
+that we are spawned from a parallel C<make>.
+
+=cut
+
+sub lock
+{
+ my ($fh, $mode) = @_;
+ # Cannot use @_ here.
+
+ # Unless explicitly configured otherwise, Perl implements its 'flock' with the
+ # first of flock(2), fcntl(2), or lockf(3) that works. These can fail on
+ # NFS-backed files, with ENOLCK (GNU/Linux) or EOPNOTSUPP (FreeBSD); we
+ # usually ignore these errors. If $ENV{MAKEFLAGS} suggests that a parallel
+ # invocation of 'make' has invoked the tool we serve, report all locking
+ # failures and abort.
+ #
+ # On Unicos, flock(2) and fcntl(2) over NFS hang indefinitely when 'lockd' is
+ # not running. NetBSD NFS clients silently grant all locks. We do not
+ # attempt to defend against these dangers.
+ #
+ # -j is for parallel BSD make, -P is for parallel HP-UX make.
+ if (!flock ($fh, $mode))
+ {
+ my $make_j = (exists $ENV{'MAKEFLAGS'}
+ && " -$ENV{'MAKEFLAGS'}" =~ / (-[BdeikrRsSw]*[jP]|--[jP]|---?jobs)/);
+ my $note = "\nforgo \"make -j\" or use a file system that supports locks";
+ my $file = $fh->name;
+
+ msg ($make_j ? 'fatal' : 'unsupported',
+ "cannot lock $file with mode $mode: $!" . ($make_j ? $note : ""))
+ if $make_j || !($!{ENOLCK} || $!{EOPNOTSUPP});
+ }
+}
+
+=item C<$fh-E<gt>seek ($position, [$whence])>
+
+Seek file to C<$position>. Die if seeking fails.
+
+=cut
+
+sub seek
+{
+ my $fh = shift;
+ # Cannot use @_ here.
+ if (!seek ($fh, $_[0], $_[1]))
+ {
+ my $file = $fh->name;
+ fatal "cannot rewind $file with @_: $!";
+ }
+}
+
+=item C<$fh-E<gt>truncate ($len)>
+
+Truncate the file to length C<$len>. Die on failure.
+
+=cut
+
+sub truncate
+{
+ my ($fh, $len) = @_;
+ if (!truncate ($fh, $len))
+ {
+ my $file = $fh->name;
+ fatal "cannot truncate $file at $len: $!";
+ }
+}
+
+=back
+
+=head1 SEE ALSO
+
+L<perlfunc>,
+L<perlop/"I/O Operators">,
+L<IO::File>
+L<IO::Handle>
+L<IO::Seekable>
+
+=head1 HISTORY
+
+Derived from IO::File.pm by Akim Demaille E<lt>F<akim@freefriends.org>E<gt>.
+
+=cut
+
+1;
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## End:
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..2e2bc5f
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,44 @@
+# Make Autoconf-related libraries.
+
+# Copyright (C) 2001-2005, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+SUBDIRS = Autom4te m4sugar autoconf autotest autoscan emacs
+nodist_pkgdata_DATA = autom4te.cfg
+EXTRA_DIST = autom4te.in freeze.mk
+
+edit = sed \
+ -e 's|@SHELL[@]|$(SHELL)|g' \
+ -e 's|@PERL[@]|$(PERL)|g' \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \
+ -e 's|@prefix[@]|$(prefix)|g' \
+ -e 's|@autoconf-name[@]|'`echo autoconf | sed '$(transform)'`'|g' \
+ -e 's|@autoheader-name[@]|'`echo autoheader | sed '$(transform)'`'|g' \
+ -e 's|@autom4te-name[@]|'`echo autom4te | sed '$(transform)'`'|g' \
+ -e 's|@M4[@]|$(M4)|g' \
+ -e 's|@AWK[@]|$(AWK)|g' \
+ -e 's|@VERSION[@]|$(VERSION)|g' \
+ -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g'
+
+# All the files below depend on Makefile so that they are rebuilt
+# when the prefix, etc. changes. Unfortunately, suffix rules
+# cannot have additional dependencies, so we have to use explicit rules.
+CLEANFILES = autom4te.cfg
+autom4te.cfg: $(srcdir)/autom4te.in Makefile
+ rm -f autom4te.cfg autom4te.tmp
+ $(edit) $(srcdir)/autom4te.in >autom4te.tmp
+ chmod a-w autom4te.tmp
+ mv autom4te.tmp autom4te.cfg
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..2316f2d
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,622 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf-related libraries.
+
+# Copyright (C) 2001-2005, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+DATA = $(nodist_pkgdata_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = Autom4te m4sugar autoconf autotest autoscan emacs
+nodist_pkgdata_DATA = autom4te.cfg
+EXTRA_DIST = autom4te.in freeze.mk
+edit = sed \
+ -e 's|@SHELL[@]|$(SHELL)|g' \
+ -e 's|@PERL[@]|$(PERL)|g' \
+ -e 's|@bindir[@]|$(bindir)|g' \
+ -e 's|@pkgdatadir[@]|$(pkgdatadir)|g' \
+ -e 's|@prefix[@]|$(prefix)|g' \
+ -e 's|@autoconf-name[@]|'`echo autoconf | sed '$(transform)'`'|g' \
+ -e 's|@autoheader-name[@]|'`echo autoheader | sed '$(transform)'`'|g' \
+ -e 's|@autom4te-name[@]|'`echo autom4te | sed '$(transform)'`'|g' \
+ -e 's|@M4[@]|$(M4)|g' \
+ -e 's|@AWK[@]|$(AWK)|g' \
+ -e 's|@VERSION[@]|$(VERSION)|g' \
+ -e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g'
+
+
+# All the files below depend on Makefile so that they are rebuilt
+# when the prefix, etc. changes. Unfortunately, suffix rules
+# cannot have additional dependencies, so we have to use explicit rules.
+CLEANFILES = autom4te.cfg
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-nodist_pkgdataDATA: $(nodist_pkgdata_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+ @list='$(nodist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \
+ done
+
+uninstall-nodist_pkgdataDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-nodist_pkgdataDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-nodist_pkgdataDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic ctags \
+ ctags-recursive distclean distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_pkgdataDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-nodist_pkgdataDATA
+
+autom4te.cfg: $(srcdir)/autom4te.in Makefile
+ rm -f autom4te.cfg autom4te.tmp
+ $(edit) $(srcdir)/autom4te.in >autom4te.tmp
+ chmod a-w autom4te.tmp
+ mv autom4te.tmp autom4te.cfg
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/autoconf/Makefile.am b/lib/autoconf/Makefile.am
new file mode 100644
index 0000000..4a35a93
--- /dev/null
+++ b/lib/autoconf/Makefile.am
@@ -0,0 +1,54 @@
+# Make Autoconf library.
+
+# Copyright (C) 2001-2002, 2006, 2009-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+autoconflibdir = $(pkgdatadir)/autoconf
+dist_autoconflib_DATA = \
+ autoconf.m4 \
+ general.m4 status.m4 oldnames.m4 specific.m4 \
+ autoheader.m4 autoupdate.m4 autotest.m4 autoscan.m4 \
+ lang.m4 c.m4 erlang.m4 fortran.m4 \
+ functions.m4 go.m4 headers.m4 types.m4 libs.m4 programs.m4
+
+nodist_autoconflib_DATA = autoconf.m4f
+CLEANFILES = $(nodist_autoconflib_DATA)
+
+
+## --------------- ##
+## Building TAGS. ##
+## --------------- ##
+
+TAGS_FILES = $(dist_autoconflib_DATA)
+
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+
+
+## -------- ##
+## Checks. ##
+## -------- ##
+
+check-local: check-forbidden-patterns
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_autoconflib_DATA)
+
+
+## ------------------ ##
+## The frozen files. ##
+## ------------------ ##
+
+autoconf.m4f: $(autoconf_m4f_dependencies)
+include ../freeze.mk
diff --git a/lib/autoconf/Makefile.in b/lib/autoconf/Makefile.in
new file mode 100644
index 0000000..6ff3138
--- /dev/null
+++ b/lib/autoconf/Makefile.in
@@ -0,0 +1,606 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf library.
+
+# Copyright (C) 2001-2002, 2006, 2009-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(dist_autoconflib_DATA) $(srcdir)/../freeze.mk \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = lib/autoconf
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(autoconflibdir)" \
+ "$(DESTDIR)$(autoconflibdir)"
+DATA = $(dist_autoconflib_DATA) $(nodist_autoconflib_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+autoconflibdir = $(pkgdatadir)/autoconf
+dist_autoconflib_DATA = \
+ autoconf.m4 \
+ general.m4 status.m4 oldnames.m4 specific.m4 \
+ autoheader.m4 autoupdate.m4 autotest.m4 autoscan.m4 \
+ lang.m4 c.m4 erlang.m4 fortran.m4 \
+ functions.m4 go.m4 headers.m4 types.m4 libs.m4 programs.m4
+
+nodist_autoconflib_DATA = autoconf.m4f
+CLEANFILES = $(nodist_autoconflib_DATA)
+TAGS_FILES = $(dist_autoconflib_DATA)
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_autoconflib_DATA)
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/autoconf/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/autoconf/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_autoconflibDATA: $(dist_autoconflib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autoconflibdir)" || $(MKDIR_P) "$(DESTDIR)$(autoconflibdir)"
+ @list='$(dist_autoconflib_DATA)'; test -n "$(autoconflibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autoconflibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autoconflibdir)" || exit $$?; \
+ done
+
+uninstall-dist_autoconflibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_autoconflib_DATA)'; test -n "$(autoconflibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autoconflibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autoconflibdir)" && rm -f $$files
+install-nodist_autoconflibDATA: $(nodist_autoconflib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autoconflibdir)" || $(MKDIR_P) "$(DESTDIR)$(autoconflibdir)"
+ @list='$(nodist_autoconflib_DATA)'; test -n "$(autoconflibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autoconflibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autoconflibdir)" || exit $$?; \
+ done
+
+uninstall-nodist_autoconflibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_autoconflib_DATA)'; test -n "$(autoconflibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autoconflibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autoconflibdir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(autoconflibdir)" "$(DESTDIR)$(autoconflibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_autoconflibDATA \
+ install-nodist_autoconflibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_autoconflibDATA \
+ uninstall-nodist_autoconflibDATA
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+ clean-generic ctags distclean distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am \
+ install-dist_autoconflibDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man \
+ install-nodist_autoconflibDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-dist_autoconflibDATA \
+ uninstall-nodist_autoconflibDATA
+
+
+check-local: check-forbidden-patterns
+
+autoconf.m4f: $(autoconf_m4f_dependencies)
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/autoconf/autoconf.m4 b/lib/autoconf/autoconf.m4
new file mode 100644
index 0000000..2687255
--- /dev/null
+++ b/lib/autoconf/autoconf.m4
@@ -0,0 +1,105 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Driver that loads the Autoconf macro files.
+#
+# Copyright (C) 1994, 1999-2002, 2006, 2008-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie and many others.
+#
+# Do not sinclude acsite.m4 here, because it may not be installed
+# yet when Autoconf is frozen.
+# Do not sinclude ./aclocal.m4 here, to prevent it from being frozen.
+
+# general includes some AU_DEFUN.
+m4_include([autoconf/autoupdate.m4])
+m4_include([autoconf/autoscan.m4])
+m4_include([autoconf/general.m4])
+m4_include([autoconf/status.m4])
+m4_include([autoconf/autoheader.m4])
+m4_include([autoconf/autotest.m4])
+m4_include([autoconf/programs.m4])
+m4_include([autoconf/lang.m4])
+m4_include([autoconf/c.m4])
+m4_include([autoconf/erlang.m4])
+m4_include([autoconf/fortran.m4])
+m4_include([autoconf/go.m4])
+m4_include([autoconf/functions.m4])
+m4_include([autoconf/headers.m4])
+m4_include([autoconf/types.m4])
+m4_include([autoconf/libs.m4])
+m4_include([autoconf/specific.m4])
+m4_include([autoconf/oldnames.m4])
+
+# We discourage the use of the non prefixed macro names: M4sugar maps
+# all the builtins into `m4_'. Autoconf has been converted to these
+# names too. But users may still depend upon these, so reestablish
+# them.
+
+# In order to copy pushdef stacks, m4_copy temporarily destroys the
+# current pushdef stack. But these builtins are so primitive that:
+# 1. they should not have more than one pushdef definition
+# 2. undefining the pushdef stack to copy breaks m4_copy
+# Hence, we temporarily restore a simpler m4_copy.
+
+m4_pushdef([m4_copy], [m4_define([$2], m4_defn([$1]))])
+
+m4_copy_unm4([m4_builtin])
+m4_copy_unm4([m4_changequote])
+m4_copy_unm4([m4_decr])
+m4_copy_unm4([m4_define])
+m4_copy_unm4([m4_defn])
+m4_copy_unm4([m4_divert])
+m4_copy_unm4([m4_divnum])
+m4_copy_unm4([m4_errprint])
+m4_copy_unm4([m4_esyscmd])
+m4_copy_unm4([m4_ifdef])
+m4_copy([m4_if], [ifelse])
+m4_copy_unm4([m4_incr])
+m4_copy_unm4([m4_index])
+m4_copy_unm4([m4_indir])
+m4_copy_unm4([m4_len])
+m4_copy([m4_bpatsubst], [patsubst])
+m4_copy_unm4([m4_popdef])
+m4_copy_unm4([m4_pushdef])
+m4_copy([m4_bregexp], [regexp])
+m4_copy_unm4([m4_sinclude])
+m4_copy_unm4([m4_syscmd])
+m4_copy_unm4([m4_sysval])
+m4_copy_unm4([m4_traceoff])
+m4_copy_unm4([m4_traceon])
+m4_copy_unm4([m4_translit])
+m4_copy_unm4([m4_undefine])
+m4_copy_unm4([m4_undivert])
+
+m4_popdef([m4_copy])
+
+# Yet some people have started to use m4_patsubst and m4_regexp.
+m4_define([m4_patsubst],
+[m4_expand_once([m4_warn([syntax],
+ [do not use m4_patsubst: use patsubst or m4_bpatsubst])])dnl
+patsubst($@)])
+
+m4_define([m4_regexp],
+[m4_expand_once([m4_warn([syntax],
+ [do not use m4_regexp: use regexp or m4_bregexp])])dnl
+regexp($@)])
diff --git a/lib/autoconf/autoheader.m4 b/lib/autoconf/autoheader.m4
new file mode 100644
index 0000000..14a91b9
--- /dev/null
+++ b/lib/autoconf/autoheader.m4
@@ -0,0 +1,78 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Interface with autoheader.
+
+# Copyright (C) 1992-1996, 1998-2002, 2008-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# AH_OUTPUT(KEY, TEXT)
+# --------------------
+# Pass TEXT to autoheader.
+# This macro is `read' only via `autoconf --trace', it outputs nothing.
+m4_define([AH_OUTPUT], [])
+
+
+# AH_VERBATIM(KEY, TEMPLATE)
+# --------------------------
+# If KEY is direct (i.e., no indirection such as in KEY=$my_func which
+# may occur if there is AC_CHECK_FUNCS($my_func)), issue an autoheader
+# TEMPLATE associated to the KEY. Otherwise, do nothing. TEMPLATE is
+# output as is, with no formatting.
+#
+# Quote for Perl '' strings, which are those used by Autoheader.
+m4_define([AH_VERBATIM],
+[AS_LITERAL_WORD_IF([$1],
+ [AH_OUTPUT(_m4_expand([$1]), AS_ESCAPE([[$2]], [\']))])])
+
+
+# AH_TEMPLATE(KEY, DESCRIPTION)
+# -----------------------------
+# Issue an autoheader template for KEY, i.e., a comment composed of
+# DESCRIPTION (properly wrapped), and then #undef KEY.
+m4_define([AH_TEMPLATE],
+[AH_VERBATIM([$1],
+ m4_text_wrap([$2 */], [ ], [/* ])[
+@%:@undef ]_m4_expand([$1]))])
+
+
+# AH_TOP(TEXT)
+# ------------
+# Output TEXT at the top of `config.h.in'.
+m4_define([AH_TOP],
+[m4_define([_AH_COUNTER], m4_incr(_AH_COUNTER))dnl
+AH_VERBATIM([0000]_AH_COUNTER, [$1])])
+
+
+# AH_BOTTOM(TEXT)
+# ---------------
+# Output TEXT at the bottom of `config.h.in'.
+m4_define([AH_BOTTOM],
+[m4_define([_AH_COUNTER], m4_incr(_AH_COUNTER))dnl
+AH_VERBATIM([zzzz]_AH_COUNTER, [$1])])
+
+# Initialize.
+m4_define([_AH_COUNTER], [0])
diff --git a/lib/autoconf/autoscan.m4 b/lib/autoconf/autoscan.m4
new file mode 100644
index 0000000..bad971e
--- /dev/null
+++ b/lib/autoconf/autoscan.m4
@@ -0,0 +1,50 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Interface with autoscan.
+
+# Copyright (C) 2002, 2009-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Akim Demaille.
+
+# The prefix `AN' is chosen after `AutoscaN'.
+
+# AN_OUTPUT(KIND, WORD, MACROS)
+# -----------------------------
+# Declare that the WORD, used as a KIND, requires triggering the MACROS.
+m4_define([AN_OUTPUT], [])
+
+
+# AN_FUNCTION(NAME, MACROS)
+# AN_HEADER(NAME, MACROS)
+# AN_IDENTIFIER(NAME, MACROS)
+# AN_LIBRARY(NAME, MACROS)
+# AN_MAKEVAR(NAME, MACROS)
+# AN_PROGRAM(NAME, MACROS)
+# ---------------------------
+# If the FUNCTION/HEADER etc. is used in the package, then the MACROS
+# should be invoked from configure.ac.
+m4_define([AN_FUNCTION], [AN_OUTPUT([function], $@)])
+m4_define([AN_HEADER], [AN_OUTPUT([header], $@)])
+m4_define([AN_IDENTIFIER], [AN_OUTPUT([identifier], $@)])
+m4_define([AN_LIBRARY], [AN_OUTPUT([library], $@)])
+m4_define([AN_MAKEVAR], [AN_OUTPUT([makevar], $@)])
+m4_define([AN_PROGRAM], [AN_OUTPUT([program], $@)])
diff --git a/lib/autoconf/autotest.m4 b/lib/autoconf/autotest.m4
new file mode 100644
index 0000000..64e3d56
--- /dev/null
+++ b/lib/autoconf/autotest.m4
@@ -0,0 +1,77 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Interface with Autotest.
+# Copyright (C) 1992-1996, 1998-2005, 2009-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# AC_CONFIG_TESTDIR(TEST-DIRECTORY, [AUTOTEST-PATH = TEST-DIRECTORY])
+# -------------------------------------------------------------------
+# Configure an Autotest test suite directory. Invoke it once per dir,
+# even if there are several test suites in there.
+#
+# AUTOTEST-PATH must help the test suite to find the executables.
+# It is relative to the top level of the package, and is expanded
+# into all the build dirs of AUTOTEST-PATH, then all the src dirs.
+#
+# Do not use _ACEOF as we are being dumped into config.status via
+# an _ACEOF-heredoc.
+AC_DEFUN([AC_CONFIG_TESTDIR],
+[AC_CONFIG_COMMANDS([$1/atconfig],
+[cat >$1/atconfig <<ATEOF
+@%:@ Configurable variable values for building test suites.
+@%:@ Generated by $[0].
+@%:@ Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc.
+
+# The test suite will define top_srcdir=$at_top_srcdir/../.. etc.
+at_testdir='$1'
+abs_builddir='$ac_abs_builddir'
+at_srcdir='$ac_srcdir'
+abs_srcdir='$ac_abs_srcdir'
+at_top_srcdir='$ac_top_srcdir'
+abs_top_srcdir='$ac_abs_top_srcdir'
+at_top_build_prefix='$ac_top_build_prefix'
+abs_top_builddir='$ac_abs_top_builddir'
+
+# Backward compatibility with Autotest <= 2.59b:
+at_top_builddir=\$at_top_build_prefix
+
+AUTOTEST_PATH='m4_default([$2], [$1])'
+
+SHELL=\${CONFIG_SHELL-'$SHELL'}
+m4_provide_if([AC_ERLANG_PATH_ERL], [
+ERL='$ERL'
+])dnl
+m4_provide_if([AC_ERLANG_PATH_ERLC], [
+ERLC='$ERLC'
+ERLCFLAGS='$ERLCFLAGS'
+])dnl
+ATEOF
+],
+[m4_provide_if([AC_ERLANG_PATH_ERL], [ERL="$ERL"
+])m4_provide_if([AC_ERLANG_PATH_ERLC], [ERLC="$ERLC"
+ERLCFLAGS="$ERLCFLAGS"
+])])])# AC_CONFIG_TESTDIR
diff --git a/lib/autoconf/autoupdate.m4 b/lib/autoconf/autoupdate.m4
new file mode 100644
index 0000000..8866d33
--- /dev/null
+++ b/lib/autoconf/autoupdate.m4
@@ -0,0 +1,108 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Interface with autoupdate.
+
+# Copyright (C) 1992-1996, 1998-2001, 2003-2004, 2006, 2009-2012 Free
+# Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+## ---------------------------------- ##
+## Macros to define obsolete macros. ##
+## ---------------------------------- ##
+
+
+# AU_DEFINE(NAME, CODE)
+# ---------------------
+# Define the macro NAME so that it expand to CODE only when
+# autoupdate is running. This is achieved with traces in
+# autoupdate itself, so this macro expands to nothing.
+#
+m4_define([AU_DEFINE], [])
+
+# AU_DEFUN(NAME, NEW-CODE, [MESSAGE])
+# -----------------------------------
+# Declare that the macro NAME is now obsoleted, and should be replaced
+# by NEW-CODE. Tell the user she should run autoupdate, and when
+# autoupdate is run, emit MESSAGE as a warning and include it in
+# the updated configure.ac file.
+#
+# Also define NAME as a macro which code is NEW-CODE.
+#
+# This allows sharing the same code for both supporting obsoleted macros,
+# and to update a configure.ac.
+# See the end of `autoupdate.in' for a longer description.
+m4_define([AU_DEFUN],
+[# This is what autoupdate's m4 run will expand. It fires
+# the warning (with _au_warn_XXX), outputs it into the
+# updated configure.ac (with AC_DIAGNOSE), and then outputs
+# the replacement expansion.
+AU_DEFINE([$1],
+[m4_ifval([$3], [_au_warn_$1([$3])AC_DIAGNOSE([obsolete], [$3])d[]nl
+])dnl
+$2])
+
+# This is an auxiliary macro that is also run when
+# autoupdate runs m4. It simply calls m4_warning, but
+# we need a wrapper so that each warning is emitted only
+# once. We break the quoting in m4_warning's argument in
+# order to expand this macro's arguments, not AU_DEFUN's.
+AU_DEFINE([_au_warn_$1],
+[m4_warning($][@)dnl
+m4_define([_au_warn_$1], [])])
+
+# Finally, this is the expansion that is picked up by
+# autoconf. It tells the user to run autoupdate, and
+# then outputs the replacement expansion. We do not care
+# about autoupdate's warning because that contains
+# information on what to do *after* running autoupdate.
+AC_DEFUN([$1],
+ [AC_DIAGNOSE([obsolete], [The macro `$1' is obsolete.
+You should run autoupdate.])dnl
+$2])])
+
+
+# AU_ALIAS(OLD-NAME, NEW-NAME)
+# ----------------------------
+# The OLD-NAME is no longer used, just use NEW-NAME instead. There is
+# little difference with using AU_DEFUN but the fact there is little
+# interest in running the test suite on both OLD-NAME and NEW-NAME.
+# This macro makes it possible to distinguish such cases.
+#
+# Do not use `defn' since then autoupdate would replace an old macro
+# call with the new macro body instead of the new macro call.
+#
+# Moreover, we have to take care that calls without parameters are
+# expanded to calls without parameters, not with one empty parameter.
+# This is not only an aesthetic improvement of autoupdate, it also
+# matters with poorly written macros which test for $# = 0.
+#
+m4_define([AU_ALIAS],
+[AU_DEFUN([$1], _AU_ALIAS_BODY([$], [$2]))])
+
+# The body for the AU_DEFUN above should look like:
+# [m4_if($#, 0, [NEW-NAME], [NEW-NAME($@)])]
+# Thus the helper macro is:
+m4_define([_AU_ALIAS_BODY], [[m4_if($1#, 0, [$2], [$2($1@)])]])
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
new file mode 100644
index 0000000..a4fa5d6
--- /dev/null
+++ b/lib/autoconf/c.m4
@@ -0,0 +1,2031 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Programming languages support.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Akim Demaille, Paul Eggert,
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# Table of Contents:
+#
+# 1. Language selection
+# 2. and routines to produce programs in a given language.
+# 1a. C 2a. C
+# 1b. C++
+# 1c. Objective C
+# 1d. Objective C++
+#
+# 3. Looking for a compiler
+# And possibly the associated preprocessor.
+# 3a. C 3b. C++ 3c. Objective C 3d. Objective C++
+#
+# 4. Compilers' characteristics.
+# 4a. C
+
+
+
+## ----------------------- ##
+## 1a/2a. The C language. ##
+## ----------------------- ##
+
+
+# ------------------------ #
+# 1a. Language selection. #
+# ------------------------ #
+
+# AC_LANG(C)
+# ----------
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+AC_LANG_DEFINE([C], [c], [C], [CC], [],
+[ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+])
+
+
+# AC_LANG_C
+# ---------
+AU_DEFUN([AC_LANG_C], [AC_LANG(C)])
+
+
+# ------------------------ #
+# 2a. Producing programs. #
+# ------------------------ #
+
+
+# AC_LANG_CONFTEST(C)(BODY)
+# -------------------------
+# We can't use '#line $LINENO "configure"' here, since
+# Sun c89 (Sun WorkShop 6 update 2 C 5.3 Patch 111679-08 2002/05/09)
+# rejects $LINENO greater than 32767, and some configure scripts
+# are longer than 32767 lines.
+m4_define([AC_LANG_CONFTEST(C)],
+[cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$1
+_ACEOF])
+
+
+# AC_LANG_PROGRAM(C)([PROLOGUE], [BODY])
+# --------------------------------------
+m4_define([AC_LANG_PROGRAM(C)],
+[$1
+m4_ifdef([_AC_LANG_PROGRAM_C_F77_HOOKS], [_AC_LANG_PROGRAM_C_F77_HOOKS])[]dnl
+m4_ifdef([_AC_LANG_PROGRAM_C_FC_HOOKS], [_AC_LANG_PROGRAM_C_FC_HOOKS])[]dnl
+int
+main ()
+{
+dnl Do *not* indent the following line: there may be CPP directives.
+dnl Don't move the `;' right after for the same reason.
+$2
+ ;
+ return 0;
+}])
+
+
+# _AC_LANG_IO_PROGRAM(C)
+# ----------------------
+# Produce source that performs I/O, necessary for proper
+# cross-compiler detection.
+m4_define([_AC_LANG_IO_PROGRAM(C)],
+[AC_LANG_PROGRAM([@%:@include <stdio.h>],
+[FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+])])
+
+
+# AC_LANG_CALL(C)(PROLOGUE, FUNCTION)
+# -----------------------------------
+# Avoid conflicting decl of main.
+m4_define([AC_LANG_CALL(C)],
+[AC_LANG_PROGRAM([$1
+m4_if([$2], [main], ,
+[/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();])], [return $2 ();])])
+
+
+# AC_LANG_FUNC_LINK_TRY(C)(FUNCTION)
+# ----------------------------------
+# Don't include <ctype.h> because on OSF/1 3.0 it includes
+# <sys/types.h> which includes <sys/select.h> which contains a
+# prototype for select. Similarly for bzero.
+#
+# This test used to merely assign f=$1 in main(), but that was
+# optimized away by HP unbundled cc A.05.36 for ia64 under +O3,
+# presumably on the basis that there's no need to do that store if the
+# program is about to exit. Conversely, the AIX linker optimizes an
+# unused external declaration that initializes f=$1. So this test
+# program has both an external initialization of f, and a use of f in
+# main that affects the exit status.
+#
+m4_define([AC_LANG_FUNC_LINK_TRY(C)],
+[AC_LANG_PROGRAM(
+[/* Define $1 to an innocuous variant, in case <limits.h> declares $1.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $1 innocuous_$1
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $1 (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $1
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $1 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$1 || defined __stub___$1
+choke me
+#endif
+], [return $1 ();])])
+
+
+# AC_LANG_BOOL_COMPILE_TRY(C)(PROLOGUE, EXPRESSION)
+# -------------------------------------------------
+# Return a program that is valid if EXPRESSION is nonzero.
+# EXPRESSION must be an integer constant expression.
+# Be sure to use this array to avoid `unused' warnings, which are even
+# errors with `-W error'.
+m4_define([AC_LANG_BOOL_COMPILE_TRY(C)],
+[AC_LANG_PROGRAM([$1], [static int test_array @<:@1 - 2 * !($2)@:>@;
+test_array @<:@0@:>@ = 0;
+return test_array @<:@0@:>@;
+])])
+
+
+# AC_LANG_INT_SAVE(C)(PROLOGUE, EXPRESSION)
+# -----------------------------------------
+# We need `stdio.h' to open a `FILE' and `stdlib.h' for `exit'.
+# But we include them only after the EXPRESSION has been evaluated.
+m4_define([AC_LANG_INT_SAVE(C)],
+[AC_LANG_PROGRAM([$1
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+@%:@include <stdio.h>
+@%:@include <stdlib.h>],
+[
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+])])
+
+
+
+## ---------------------- ##
+## 1b. The C++ language. ##
+## ---------------------- ##
+
+
+# AC_LANG(C++)
+# ------------
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+AC_LANG_DEFINE([C++], [cxx], [CXX], [CXX], [C],
+[ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+])
+
+
+# AC_LANG_CPLUSPLUS
+# -----------------
+AU_DEFUN([AC_LANG_CPLUSPLUS], [AC_LANG(C++)])
+
+
+
+## ------------------------------ ##
+## 1c. The Objective C language. ##
+## ------------------------------ ##
+
+
+# AC_LANG(Objective C)
+# --------------------
+AC_LANG_DEFINE([Objective C], [objc], [OBJC], [OBJC], [C],
+[ac_ext=m
+ac_cpp='$OBJCPP $CPPFLAGS'
+ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_objc_compiler_gnu
+])
+
+
+# AC_LANG_OBJC
+# ------------
+AU_DEFUN([AC_LANG_OBJC], [AC_LANG(Objective C)])
+
+
+
+## -------------------------------- ##
+## 1d. The Objective C++ language. ##
+## -------------------------------- ##
+
+
+# AC_LANG(Objective C++)
+# ----------------------
+AC_LANG_DEFINE([Objective C++], [objcxx], [OBJCXX], [OBJCXX], [C++],
+[ac_ext=mm
+ac_cpp='$OBJCXXCPP $CPPFLAGS'
+ac_compile='$OBJCXX -c $OBJCXXFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$OBJCXX -o conftest$ac_exeext $OBJCXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_objcxx_compiler_gnu
+])
+
+
+
+## -------------------------------------------- ##
+## 3. Looking for Compilers and Preprocessors. ##
+## -------------------------------------------- ##
+
+# -------------------- #
+# 3a. The C compiler. #
+# -------------------- #
+
+
+# _AC_ARG_VAR_CPPFLAGS
+# --------------------
+# Document and register CPPFLAGS, which is used by
+# AC_PROG_{CC, CPP, CXX, CXXCPP, OBJC, OBJCPP, OBJCXX, OBJCXXCPP}.
+AC_DEFUN([_AC_ARG_VAR_CPPFLAGS],
+[AC_ARG_VAR([CPPFLAGS],
+ [(Objective) C/C++ preprocessor flags, e.g. -I<include dir>
+ if you have headers in a nonstandard directory <include dir>])])
+
+
+# _AC_ARG_VAR_LDFLAGS
+# -------------------
+# Document and register LDFLAGS, which is used by
+# AC_PROG_{CC, CXX, F77, FC, OBJC, OBJCXX}.
+AC_DEFUN([_AC_ARG_VAR_LDFLAGS],
+[AC_ARG_VAR([LDFLAGS],
+ [linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>])])
+
+
+# _AC_ARG_VAR_LIBS
+# ----------------
+# Document and register LIBS, which is used by
+# AC_PROG_{CC, CXX, F77, FC, OBJC, OBJCXX}.
+AC_DEFUN([_AC_ARG_VAR_LIBS],
+[AC_ARG_VAR([LIBS],
+ [libraries to pass to the linker, e.g. -l<library>])])
+
+
+# AC_LANG_PREPROC(C)
+# ------------------
+# Find the C preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(C)],
+[AC_REQUIRE([AC_PROG_CPP])])
+
+
+# _AC_PROG_PREPROC_WORKS_IFELSE(IF-WORKS, IF-NOT)
+# -----------------------------------------------
+# Check if $ac_cpp is a working preprocessor that can flag absent
+# includes either by the exit status or by warnings.
+# This macro is for all languages, not only C.
+AC_DEFUN([_AC_PROG_PREPROC_WORKS_IFELSE],
+[ac_preproc_ok=false
+for ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ _AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@ifdef __STDC__
+@%:@ include <limits.h>
+@%:@else
+@%:@ include <assert.h>
+@%:@endif
+ Syntax error]])],
+ [],
+ [# Broken: fails on valid input.
+continue])
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ _AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@%:@include <ac_nonexistent.h>]])],
+ [# Broken: success on invalid input.
+continue],
+ [# Passes both tests.
+ac_preproc_ok=:
+break])
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+AS_IF([$ac_preproc_ok], [$1], [$2])
+])# _AC_PROG_PREPROC_WORKS_IFELSE
+
+
+# AC_PROG_CPP
+# -----------
+# Find a working C preprocessor.
+# We shouldn't have to require AC_PROG_CC, but this is due to the concurrency
+# between the AC_LANG_COMPILER_REQUIRE family and that of AC_PROG_CC.
+AN_MAKEVAR([CPP], [AC_PROG_CPP])
+AN_PROGRAM([cpp], [AC_PROG_CPP])
+AC_DEFUN([AC_PROG_CPP],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_ARG_VAR([CPP], [C preprocessor])dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+AC_LANG_PUSH(C)dnl
+AC_MSG_CHECKING([how to run the C preprocessor])
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ AC_CACHE_VAL([ac_cv_prog_CPP],
+ [dnl
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ _AC_PROG_PREPROC_WORKS_IFELSE([break])
+ done
+ ac_cv_prog_CPP=$CPP
+ ])dnl
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+AC_MSG_RESULT([$CPP])
+_AC_PROG_PREPROC_WORKS_IFELSE([],
+ [AC_MSG_FAILURE([C preprocessor "$CPP" fails sanity check])])
+AC_SUBST(CPP)dnl
+AC_LANG_POP(C)dnl
+])# AC_PROG_CPP
+
+# AC_PROG_CPP_WERROR
+# ------------------
+# Treat warnings from the preprocessor as errors.
+AC_DEFUN([AC_PROG_CPP_WERROR],
+[AC_REQUIRE([AC_PROG_CPP])dnl
+ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR
+
+# AC_LANG_COMPILER(C)
+# -------------------
+# Find the C compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(C)],
+[AC_REQUIRE([AC_PROG_CC])])
+
+
+# ac_cv_prog_gcc
+# --------------
+# We used to name the cache variable this way.
+AU_DEFUN([ac_cv_prog_gcc],
+[ac_cv_c_compiler_gnu])
+
+
+# AC_PROG_CC([COMPILER ...])
+# --------------------------
+# COMPILER ... is a space separated list of C compilers to search for.
+# This just gives the user an opportunity to specify an alternative
+# search list for the C compiler.
+AN_MAKEVAR([CC], [AC_PROG_CC])
+AN_PROGRAM([cc], [AC_PROG_CC])
+AN_PROGRAM([gcc], [AC_PROG_CC])
+AC_DEFUN([AC_PROG_CC],
+[AC_LANG_PUSH(C)dnl
+AC_ARG_VAR([CC], [C compiler command])dnl
+AC_ARG_VAR([CFLAGS], [C compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+m4_ifval([$1],
+ [AC_CHECK_TOOLS(CC, [$1])],
+[AC_CHECK_TOOL(CC, gcc)
+if test -z "$CC"; then
+ dnl Here we want:
+ dnl AC_CHECK_TOOL(CC, cc)
+ dnl but without the check for a tool without the prefix.
+ dnl Until the check is removed from there, copy the code:
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc])
+ fi
+fi
+if test -z "$CC"; then
+ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
+fi
+if test -z "$CC"; then
+ AC_CHECK_TOOLS(CC, cl.exe)
+fi
+])
+
+test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+_AC_PROG_CC_G
+_AC_PROG_CC_C89
+AC_LANG_POP(C)dnl
+])# AC_PROG_CC
+
+
+# _AC_PROG_CC_G
+# -------------
+# Check whether -g works, even if CFLAGS is set, in case the package
+# plays around with CFLAGS (such as to build both debugging and normal
+# versions of a library), tasteless as that idea is.
+# Don't consider -g to work if it generates warnings when plain compiles don't.
+m4_define([_AC_PROG_CC_G],
+[ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+AC_CACHE_CHECK(whether $CC accepts -g, ac_cv_prog_cc_g,
+ [ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_cc_g=yes],
+ [CFLAGS=""
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [],
+ [ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_cc_g=yes])])])
+ ac_c_werror_flag=$ac_save_c_werror_flag])
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi[]dnl
+])# _AC_PROG_CC_G
+
+
+# AC_PROG_GCC_TRADITIONAL
+# -----------------------
+AC_DEFUN([AC_PROG_GCC_TRADITIONAL],
+[AC_REQUIRE([AC_PROG_CC])dnl
+if test $ac_cv_c_compiler_gnu = yes; then
+ AC_CACHE_CHECK(whether $CC needs -traditional,
+ ac_cv_prog_gcc_traditional,
+[ ac_pattern="Autoconf.*'x'"
+ AC_EGREP_CPP($ac_pattern, [#include <sgtty.h>
+Autoconf TIOCGETP],
+ ac_cv_prog_gcc_traditional=yes, ac_cv_prog_gcc_traditional=no)
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ AC_EGREP_CPP($ac_pattern, [#include <termio.h>
+Autoconf TCGETA],
+ ac_cv_prog_gcc_traditional=yes)
+ fi])
+ if test $ac_cv_prog_gcc_traditional = yes; then
+ CC="$CC -traditional"
+ fi
+fi
+])# AC_PROG_GCC_TRADITIONAL
+
+
+# AC_PROG_CC_C_O
+# --------------
+AC_DEFUN([AC_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC])dnl
+if test "x$CC" != xcc; then
+ AC_MSG_CHECKING([whether $CC and cc understand -c and -o together])
+else
+ AC_MSG_CHECKING([whether cc understands -c and -o together])
+fi
+set dummy $CC; ac_cc=`AS_ECHO(["$[2]"]) |
+ sed 's/[[^a-zA-Z0-9_]]/_/g;s/^[[0-9]]/_/'`
+AC_CACHE_VAL(ac_cv_prog_cc_${ac_cc}_c_o,
+[AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&AS_MESSAGE_LOG_FD'
+rm -f conftest2.*
+if _AC_DO_VAR(ac_try) &&
+ test -f conftest2.$ac_objext && _AC_DO_VAR(ac_try);
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if _AC_DO_TOKENS(cc -c conftest.$ac_ext >&AS_MESSAGE_LOG_FD); then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&AS_MESSAGE_LOG_FD'
+ rm -f conftest2.*
+ if _AC_DO_VAR(ac_try) &&
+ test -f conftest2.$ac_objext && _AC_DO_VAR(ac_try);
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+])dnl
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+ AC_DEFINE(NO_MINUS_C_MINUS_O, 1,
+ [Define to 1 if your C compiler doesn't accept -c and -o together.])
+fi
+])# AC_PROG_CC_C_O
+
+
+
+# ---------------------- #
+# 3b. The C++ compiler. #
+# ---------------------- #
+
+
+# AC_LANG_PREPROC(C++)
+# --------------------
+# Find the C++ preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(C++)],
+[AC_REQUIRE([AC_PROG_CXXCPP])])
+
+
+# AC_PROG_CXXCPP
+# --------------
+# Find a working C++ preprocessor.
+# We shouldn't have to require AC_PROG_CC, but this is due to the concurrency
+# between the AC_LANG_COMPILER_REQUIRE family and that of AC_PROG_CXX.
+AC_DEFUN([AC_PROG_CXXCPP],
+[AC_REQUIRE([AC_PROG_CXX])dnl
+AC_ARG_VAR([CXXCPP], [C++ preprocessor])dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+AC_LANG_PUSH(C++)dnl
+AC_MSG_CHECKING([how to run the C++ preprocessor])
+if test -z "$CXXCPP"; then
+ AC_CACHE_VAL(ac_cv_prog_CXXCPP,
+ [dnl
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ _AC_PROG_PREPROC_WORKS_IFELSE([break])
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+ ])dnl
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+AC_MSG_RESULT([$CXXCPP])
+_AC_PROG_PREPROC_WORKS_IFELSE([],
+ [AC_MSG_FAILURE([C++ preprocessor "$CXXCPP" fails sanity check])])
+AC_SUBST(CXXCPP)dnl
+AC_LANG_POP(C++)dnl
+])# AC_PROG_CXXCPP
+
+
+# AC_LANG_COMPILER(C++)
+# ---------------------
+# Find the C++ compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(C++)],
+[AC_REQUIRE([AC_PROG_CXX])])
+
+
+# ac_cv_prog_gxx
+# --------------
+# We used to name the cache variable this way.
+AU_DEFUN([ac_cv_prog_gxx],
+[ac_cv_cxx_compiler_gnu])
+
+
+# AC_PROG_CXX([LIST-OF-COMPILERS])
+# --------------------------------
+# LIST-OF-COMPILERS is a space separated list of C++ compilers to search
+# for (if not specified, a default list is used). This just gives the
+# user an opportunity to specify an alternative search list for the C++
+# compiler.
+# aCC HP-UX C++ compiler much better than `CC', so test before.
+# FCC Fujitsu C++ compiler
+# KCC KAI C++ compiler
+# RCC Rational C++
+# xlC_r AIX C Set++ (with support for reentrant code)
+# xlC AIX C Set++
+AN_MAKEVAR([CXX], [AC_PROG_CXX])
+AN_PROGRAM([CC], [AC_PROG_CXX])
+AN_PROGRAM([c++], [AC_PROG_CXX])
+AN_PROGRAM([g++], [AC_PROG_CXX])
+AC_DEFUN([AC_PROG_CXX],
+[AC_LANG_PUSH(C++)dnl
+AC_ARG_VAR([CXX], [C++ compiler command])dnl
+AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([CCC])dnl
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ AC_CHECK_TOOLS(CXX,
+ [m4_default([$1],
+ [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC])],
+ g++)
+ fi
+fi
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+_AC_PROG_CXX_G
+AC_LANG_POP(C++)dnl
+])# AC_PROG_CXX
+
+
+# _AC_PROG_CXX_G
+# --------------
+# Check whether -g works, even if CXXFLAGS is set, in case the package
+# plays around with CXXFLAGS (such as to build both debugging and
+# normal versions of a library), tasteless as that idea is.
+# Don't consider -g to work if it generates warnings when plain compiles don't.
+m4_define([_AC_PROG_CXX_G],
+[ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+AC_CACHE_CHECK(whether $CXX accepts -g, ac_cv_prog_cxx_g,
+ [ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_cxx_g=yes],
+ [CXXFLAGS=""
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [],
+ [ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_cxx_g=yes])])])
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag])
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi[]dnl
+])# _AC_PROG_CXX_G
+
+
+# AC_PROG_CXX_C_O
+# ---------------
+# Test if the C++ compiler accepts the options `-c' and `-o'
+# simultaneously, and define `CXX_NO_MINUS_C_MINUS_O' if it does not.
+AC_DEFUN([AC_PROG_CXX_C_O],
+[AC_REQUIRE([AC_PROG_CXX])dnl
+AC_LANG_PUSH([C++])dnl
+AC_CACHE_CHECK([whether $CXX understands -c and -o together],
+ [ac_cv_prog_cxx_c_o],
+[AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+# We test twice because some compilers refuse to overwrite an existing
+# `.o' file with `-o', although they will create one.
+ac_try='$CXX $CXXFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&AS_MESSAGE_LOG_FD'
+rm -f conftest2.*
+if _AC_DO_VAR(ac_try) &&
+ test -f conftest2.$ac_objext &&
+ _AC_DO_VAR(ac_try); then
+ ac_cv_prog_cxx_c_o=yes
+else
+ ac_cv_prog_cxx_c_o=no
+fi
+rm -f conftest*])
+if test $ac_cv_prog_cxx_c_o = no; then
+ AC_DEFINE(CXX_NO_MINUS_C_MINUS_O, 1,
+ [Define to 1 if your C++ compiler doesn't accept
+ -c and -o together.])
+fi
+AC_LANG_POP([C++])dnl
+])# AC_PROG_CXX_C_O
+
+
+
+# ------------------------------ #
+# 3c. The Objective C compiler. #
+# ------------------------------ #
+
+
+# AC_LANG_PREPROC(Objective C)
+# ----------------------------
+# Find the Objective C preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(Objective C)],
+[AC_REQUIRE([AC_PROG_OBJCPP])])
+
+
+# AC_PROG_OBJCPP
+# --------------
+# Find a working Objective C preprocessor.
+AC_DEFUN([AC_PROG_OBJCPP],
+[AC_REQUIRE([AC_PROG_OBJC])dnl
+AC_ARG_VAR([OBJCPP], [Objective C preprocessor])dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+AC_LANG_PUSH(Objective C)dnl
+AC_MSG_CHECKING([how to run the Objective C preprocessor])
+if test -z "$OBJCPP"; then
+ AC_CACHE_VAL(ac_cv_prog_OBJCPP,
+ [dnl
+ # Double quotes because OBJCPP needs to be expanded
+ for OBJCPP in "$OBJC -E" "/lib/cpp"
+ do
+ _AC_PROG_PREPROC_WORKS_IFELSE([break])
+ done
+ ac_cv_prog_OBJCPP=$OBJCPP
+ ])dnl
+ OBJCPP=$ac_cv_prog_OBJCPP
+else
+ ac_cv_prog_OBJCPP=$OBJCPP
+fi
+AC_MSG_RESULT([$OBJCPP])
+_AC_PROG_PREPROC_WORKS_IFELSE([],
+ [AC_MSG_FAILURE([Objective C preprocessor "$OBJCPP" fails sanity check])])
+AC_SUBST(OBJCPP)dnl
+AC_LANG_POP(Objective C)dnl
+])# AC_PROG_OBJCPP
+
+
+# AC_LANG_COMPILER(Objective C)
+# -----------------------------
+# Find the Objective C compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(Objective C)],
+[AC_REQUIRE([AC_PROG_OBJC])])
+
+
+
+# AC_PROG_OBJC([LIST-OF-COMPILERS])
+# ---------------------------------
+# LIST-OF-COMPILERS is a space separated list of Objective C compilers to
+# search for (if not specified, a default list is used). This just gives
+# the user an opportunity to specify an alternative search list for the
+# Objective C compiler.
+# objcc StepStone Objective-C compiler (also "standard" name for OBJC)
+# objc David Stes' POC. If you installed this, you likely want it.
+# cc Native C compiler (for instance, Apple).
+# CC You never know.
+AN_MAKEVAR([OBJC], [AC_PROG_OBJC])
+AN_PROGRAM([objcc], [AC_PROG_OBJC])
+AN_PROGRAM([objc], [AC_PROG_OBJC])
+AC_DEFUN([AC_PROG_OBJC],
+[AC_LANG_PUSH(Objective C)dnl
+AC_ARG_VAR([OBJC], [Objective C compiler command])dnl
+AC_ARG_VAR([OBJCFLAGS], [Objective C compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([OBJC])dnl
+AC_CHECK_TOOLS(OBJC,
+ [m4_default([$1], [gcc objcc objc cc CC])],
+ gcc)
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GOBJC=yes
+else
+ GOBJC=
+fi
+_AC_PROG_OBJC_G
+AC_LANG_POP(Objective C)dnl
+])# AC_PROG_OBJC
+
+
+# _AC_PROG_OBJC_G
+# ---------------
+# Check whether -g works, even if OBJCFLAGS is set, in case the package
+# plays around with OBJCFLAGS (such as to build both debugging and
+# normal versions of a library), tasteless as that idea is.
+# Don't consider -g to work if it generates warnings when plain compiles don't.
+m4_define([_AC_PROG_OBJC_G],
+[ac_test_OBJCFLAGS=${OBJCFLAGS+set}
+ac_save_OBJCFLAGS=$OBJCFLAGS
+AC_CACHE_CHECK(whether $OBJC accepts -g, ac_cv_prog_objc_g,
+ [ac_save_objc_werror_flag=$ac_objc_werror_flag
+ ac_objc_werror_flag=yes
+ ac_cv_prog_objc_g=no
+ OBJCFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_objc_g=yes],
+ [OBJCFLAGS=""
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [],
+ [ac_objc_werror_flag=$ac_save_objc_werror_flag
+ OBJCFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_objc_g=yes])])])
+ ac_objc_werror_flag=$ac_save_objc_werror_flag])
+if test "$ac_test_OBJCFLAGS" = set; then
+ OBJCFLAGS=$ac_save_OBJCFLAGS
+elif test $ac_cv_prog_objc_g = yes; then
+ if test "$GOBJC" = yes; then
+ OBJCFLAGS="-g -O2"
+ else
+ OBJCFLAGS="-g"
+ fi
+else
+ if test "$GOBJC" = yes; then
+ OBJCFLAGS="-O2"
+ else
+ OBJCFLAGS=
+ fi
+fi[]dnl
+])# _AC_PROG_OBJC_G
+
+
+
+# -------------------------------- #
+# 3d. The Objective C++ compiler. #
+# -------------------------------- #
+
+
+# AC_LANG_PREPROC(Objective C++)
+# ------------------------------
+# Find the Objective C++ preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(Objective C++)],
+[AC_REQUIRE([AC_PROG_OBJCXXCPP])])
+
+
+# AC_PROG_OBJCXXCPP
+# -----------------
+# Find a working Objective C++ preprocessor.
+AC_DEFUN([AC_PROG_OBJCXXCPP],
+[AC_REQUIRE([AC_PROG_OBJCXX])dnl
+AC_ARG_VAR([OBJCXXCPP], [Objective C++ preprocessor])dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+AC_LANG_PUSH(Objective C++)dnl
+AC_MSG_CHECKING([how to run the Objective C++ preprocessor])
+if test -z "$OBJCXXCPP"; then
+ AC_CACHE_VAL(ac_cv_prog_OBJCXXCPP,
+ [dnl
+ # Double quotes because OBJCXXCPP needs to be expanded
+ for OBJCXXCPP in "$OBJCXX -E" "/lib/cpp"
+ do
+ _AC_PROG_PREPROC_WORKS_IFELSE([break])
+ done
+ ac_cv_prog_OBJCXXCPP=$OBJCXXCPP
+ ])dnl
+ OBJCXXCPP=$ac_cv_prog_OBJCXXCPP
+else
+ ac_cv_prog_OBJCXXCPP=$OBJCXXCPP
+fi
+AC_MSG_RESULT([$OBJCXXCPP])
+_AC_PROG_PREPROC_WORKS_IFELSE([],
+ [AC_MSG_FAILURE([Objective C++ preprocessor "$OBJCXXCPP" fails sanity check])])
+AC_SUBST(OBJCXXCPP)dnl
+AC_LANG_POP(Objective C++)dnl
+])# AC_PROG_OBJCXXCPP
+
+
+# AC_LANG_COMPILER(Objective C++)
+# -------------------------------
+# Find the Objective C++ compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(Objective C++)],
+[AC_REQUIRE([AC_PROG_OBJCXX])])
+
+
+
+# AC_PROG_OBJCXX([LIST-OF-COMPILERS])
+# -----------------------------------
+# LIST-OF-COMPILERS is a space separated list of Objective C++ compilers to
+# search for (if not specified, a default list is used). This just gives
+# the user an opportunity to specify an alternative search list for the
+# Objective C++ compiler.
+# FIXME: this list is pure guesswork
+# objc++ StepStone Objective-C++ compiler (also "standard" name for OBJCXX)
+# objcxx David Stes' POC. If you installed this, you likely want it.
+# c++ Native C++ compiler (for instance, Apple).
+# CXX You never know.
+AN_MAKEVAR([OBJCXX], [AC_PROG_OBJCXX])
+AN_PROGRAM([objcxx], [AC_PROG_OBJCXX])
+AC_DEFUN([AC_PROG_OBJCXX],
+[AC_LANG_PUSH(Objective C++)dnl
+AC_ARG_VAR([OBJCXX], [Objective C++ compiler command])dnl
+AC_ARG_VAR([OBJCXXFLAGS], [Objective C++ compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_ARG_VAR_CPPFLAGS()dnl
+_AC_ARG_VAR_PRECIOUS([OBJCXX])dnl
+AC_CHECK_TOOLS(OBJCXX,
+ [m4_default([$1], [g++ objc++ objcxx c++ CXX])],
+ g++)
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+_AC_LANG_COMPILER_GNU
+if test $ac_compiler_gnu = yes; then
+ GOBJCXX=yes
+else
+ GOBJCXX=
+fi
+_AC_PROG_OBJCXX_G
+AC_LANG_POP(Objective C++)dnl
+])# AC_PROG_OBJCXX
+
+
+# _AC_PROG_OBJCXX_G
+# -----------------
+# Check whether -g works, even if OBJCFLAGS is set, in case the package
+# plays around with OBJCFLAGS (such as to build both debugging and
+# normal versions of a library), tasteless as that idea is.
+# Don't consider -g to work if it generates warnings when plain compiles don't.
+m4_define([_AC_PROG_OBJCXX_G],
+[ac_test_OBJCXXFLAGS=${OBJCXXFLAGS+set}
+ac_save_OBJCXXFLAGS=$OBJCXXFLAGS
+AC_CACHE_CHECK(whether $OBJCXX accepts -g, ac_cv_prog_objcxx_g,
+ [ac_save_objcxx_werror_flag=$ac_objcxx_werror_flag
+ ac_objcxx_werror_flag=yes
+ ac_cv_prog_objcxx_g=no
+ OBJCXXFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_objcxx_g=yes],
+ [OBJCXXFLAGS=""
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [],
+ [ac_objcxx_werror_flag=$ac_save_objcxx_werror_flag
+ OBJCXXFLAGS="-g"
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [ac_cv_prog_objcxx_g=yes])])])
+ ac_objcxx_werror_flag=$ac_save_objcx_werror_flag])
+if test "$ac_test_OBJCXXFLAGS" = set; then
+ OBJCXXFLAGS=$ac_save_OBJCXXFLAGS
+elif test $ac_cv_prog_objcxx_g = yes; then
+ if test "$GOBJCXX" = yes; then
+ OBJCXXFLAGS="-g -O2"
+ else
+ OBJCXXFLAGS="-g"
+ fi
+else
+ if test "$GOBJCXX" = yes; then
+ OBJCXXFLAGS="-O2"
+ else
+ OBJCXXFLAGS=
+ fi
+fi[]dnl
+])# _AC_PROG_OBJCXX_G
+
+
+
+## ------------------------------- ##
+## 4. Compilers' characteristics. ##
+## ------------------------------- ##
+
+# -------------------------------- #
+# 4a. C compiler characteristics. #
+# -------------------------------- #
+
+
+# _AC_PROG_CC_C89 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ANSI C89 (ISO C90) mode by default, try
+# to add an option to output variable CC to make it so. This macro
+# tries various options that select ANSI C89 on some system or
+# another. It considers the compiler to be in ANSI C89 mode if it
+# handles function prototypes correctly.
+AC_DEFUN([_AC_PROG_CC_C89],
+[_AC_C_STD_TRY([c89],
+[[#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;]],
+[[return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];]],
+dnl Don't try gcc -ansi; that turns off useful extensions and
+dnl breaks some systems' header files.
+dnl AIX circa 2003 -qlanglvl=extc89
+dnl old AIX -qlanglvl=ansi
+dnl Ultrix, OSF/1, Tru64 -std
+dnl HP-UX 10.20 and later -Ae
+dnl HP-UX older versions -Aa -D_HPUX_SOURCE
+dnl SVR4 -Xc -D__EXTENSIONS__
+[-qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C89
+
+
+# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST,
+# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE)
+# --------------------------------------------------------------
+# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99')
+# by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails,
+# try again with each compiler option in the space-separated OPTION-LIST; if one
+# helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE,
+# else ACTION-IF-UNAVAILABLE.
+AC_DEFUN([_AC_C_STD_TRY],
+[AC_MSG_CHECKING([for $CC option to accept ISO ]m4_translit($1, [c], [C]))
+AC_CACHE_VAL(ac_cv_prog_cc_$1,
+[ac_cv_prog_cc_$1=no
+ac_save_CC=$CC
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])])
+for ac_arg in '' $4
+do
+ CC="$ac_save_CC $ac_arg"
+ _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg])
+ test "x$ac_cv_prog_cc_$1" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+])# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_$1" in
+ x)
+ AC_MSG_RESULT([none needed]) ;;
+ xno)
+ AC_MSG_RESULT([unsupported]) ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_$1"
+ AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;;
+esac
+AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6])
+])# _AC_C_STD_TRY
+
+
+# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE])
+# ----------------------------------------------------------------
+# If the C compiler is not in ISO C99 mode by default, try to add an
+# option to output variable CC to make it so. This macro tries
+# various options that select ISO C99 on some system or another. It
+# considers the compiler to be in ISO C99 mode if it handles _Bool,
+# // comments, flexible array members, inline, long long int, mixed
+# code and declarations, named initialization of structs, restrict,
+# va_copy, varargs macros, variable declarations in for loops and
+# variable length arrays.
+AC_DEFUN([_AC_PROG_CC_C99],
+[_AC_C_STD_TRY([c99],
+[[#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+ your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str;
+ int number;
+ float fnumber;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case 's': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case 'd': // int
+ number = va_arg (args_copy, int);
+ break;
+ case 'f': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+}
+]],
+[[
+ // Check bool.
+ _Bool success = false;
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ test_varargs ("s, d' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+ || dynamic_array[ni.number - 1] != 543);
+]],
+dnl Try
+dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999)
+dnl AIX -qlanglvl=extc99 (unused restrictive mode: -qlanglvl=stdc99)
+dnl HP cc -AC99
+dnl Intel ICC -std=c99, -c99 (deprecated)
+dnl IRIX -c99
+dnl Solaris -D_STDC_C99=
+dnl cc's -xc99 option uses linker magic to define the external
+dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99
+dnl behavior for C library functions. This is not wanted here,
+dnl because it means that a single module compiled with -xc99
+dnl alters C runtime behavior for the entire program, not for
+dnl just the module. Instead, define the (private) symbol
+dnl _STDC_C99, which suppresses a bogus failure in <stdbool.h>.
+dnl The resulting compiler passes the test case here, and that's
+dnl good enough. For more, please see the thread starting at:
+dnl http://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html
+dnl Tru64 -c99
+dnl with extended modes being tried first.
+[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99]], [$1], [$2])[]dnl
+])# _AC_PROG_CC_C99
+
+
+# AC_PROG_CC_C89
+# --------------
+AC_DEFUN([AC_PROG_CC_C89],
+[ AC_REQUIRE([AC_PROG_CC])dnl
+ _AC_PROG_CC_C89
+])
+
+
+# AC_PROG_CC_C99
+# --------------
+AC_DEFUN([AC_PROG_CC_C99],
+[ AC_REQUIRE([AC_PROG_CC])dnl
+ _AC_PROG_CC_C99
+])
+
+
+# AC_PROG_CC_STDC
+# ---------------
+AC_DEFUN([AC_PROG_CC_STDC],
+[ AC_REQUIRE([AC_PROG_CC])dnl
+ AS_CASE([$ac_cv_prog_cc_stdc],
+ [no], [ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no],
+ [_AC_PROG_CC_C99([ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99],
+ [_AC_PROG_CC_C89([ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89],
+ [ac_cv_prog_cc_stdc=no])])])
+ AC_MSG_CHECKING([for $CC option to accept ISO Standard C])
+ AC_CACHE_VAL([ac_cv_prog_cc_stdc], [])
+ AS_CASE([$ac_cv_prog_cc_stdc],
+ [no], [AC_MSG_RESULT([unsupported])],
+ [''], [AC_MSG_RESULT([none needed])],
+ [AC_MSG_RESULT([$ac_cv_prog_cc_stdc])])
+])
+
+
+# AC_C_BACKSLASH_A
+# ----------------
+AC_DEFUN([AC_C_BACKSLASH_A],
+[
+ AC_CACHE_CHECK([whether backslash-a works in strings], ac_cv_c_backslash_a,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+ [[
+#if '\a' == 'a'
+ syntax error;
+#endif
+ char buf['\a' == 'a' ? -1 : 1];
+ buf[0] = '\a';
+ return buf[0] != "\a"[0];
+ ]])],
+ [ac_cv_c_backslash_a=yes],
+ [ac_cv_c_backslash_a=no])])
+ if test $ac_cv_c_backslash_a = yes; then
+ AC_DEFINE(HAVE_C_BACKSLASH_A, 1,
+ [Define if backslash-a works in C strings.])
+ fi
+])
+
+
+# AC_C_CROSS
+# ----------
+# Has been merged into AC_PROG_CC.
+AU_DEFUN([AC_C_CROSS], [])
+
+
+# AC_C_CHAR_UNSIGNED
+# ------------------
+AC_DEFUN([AC_C_CHAR_UNSIGNED],
+[AH_VERBATIM([__CHAR_UNSIGNED__],
+[/* Define to 1 if type `char' is unsigned and you are not using gcc. */
+#ifndef __CHAR_UNSIGNED__
+# undef __CHAR_UNSIGNED__
+#endif])dnl
+AC_CACHE_CHECK(whether char is unsigned, ac_cv_c_char_unsigned,
+[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([])],
+ [((char) -1) < 0])],
+ ac_cv_c_char_unsigned=no, ac_cv_c_char_unsigned=yes)])
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+ AC_DEFINE(__CHAR_UNSIGNED__)
+fi
+])# AC_C_CHAR_UNSIGNED
+
+
+# AC_C_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN],
+# [ACTION-IF-UNIVERSAL])
+# -------------------------------------------------------------------------
+AC_DEFUN([AC_C_BIGENDIAN],
+[AH_VERBATIM([WORDS_BIGENDIAN],
+[/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+ significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+# define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+# undef WORDS_BIGENDIAN
+# endif
+#endif])dnl
+ AC_CACHE_CHECK([whether byte ordering is bigendian], [ac_cv_c_bigendian],
+ [ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+ ]])],
+ [
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done])
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ #include <sys/param.h>
+ ]],
+ [[#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+ ]])],
+ [# It does; now see whether it defined to BIG_ENDIAN or not.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ #include <sys/param.h>
+ ]],
+ [[#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+ ]])],
+ [ac_cv_c_bigendian=yes],
+ [ac_cv_c_bigendian=no])])
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <limits.h>
+ ]],
+ [[#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
+ ]])],
+ [# It does; now see whether it defined to _BIG_ENDIAN or not.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <limits.h>
+ ]],
+ [[#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+ ]])],
+ [ac_cv_c_bigendian=yes],
+ [ac_cv_c_bigendian=no])])
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [[
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+ ]])],
+ [ac_cv_c_bigendian=no],
+ [ac_cv_c_bigendian=yes],
+ [# Try to guess by grepping values from an object file.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+ ]],
+ [[return use_ascii (foo) == use_ebcdic (foo);]])],
+ [if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi])])
+ fi])
+ case $ac_cv_c_bigendian in #(
+ yes)
+ m4_default([$1],
+ [AC_DEFINE([WORDS_BIGENDIAN], 1)]);; #(
+ no)
+ $2 ;; #(
+ universal)
+dnl Note that AC_APPLE_UNIVERSAL_BUILD sorts less than WORDS_BIGENDIAN;
+dnl this is a necessity for proper config header operation. Warn if
+dnl the user did not specify a config header but is relying on the
+dnl default behavior for universal builds.
+ m4_default([$4],
+ [AC_CONFIG_COMMANDS_PRE([m4_ifset([AH_HEADER], [],
+ [AC_DIAGNOSE([obsolete],
+ [AC_C_BIGENDIAN should be used with AC_CONFIG_HEADERS])])])dnl
+ AC_DEFINE([AC_APPLE_UNIVERSAL_BUILD],1,
+ [Define if building universal (internal helper macro)])])
+ ;; #(
+ *)
+ m4_default([$3],
+ [AC_MSG_ERROR([unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help])]) ;;
+ esac
+])# AC_C_BIGENDIAN
+
+
+# AC_C_INLINE
+# -----------
+# Do nothing if the compiler accepts the inline keyword.
+# Otherwise define inline to __inline__ or __inline if one of those work,
+# otherwise define inline to be empty.
+#
+# HP C version B.11.11.04 doesn't allow a typedef as the return value for an
+# inline function, only builtin types.
+#
+AN_IDENTIFIER([inline], [AC_C_INLINE])
+AC_DEFUN([AC_C_INLINE],
+[AC_CACHE_CHECK([for inline], ac_cv_c_inline,
+[ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+[#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+])],
+ [ac_cv_c_inline=$ac_kw])
+ test "$ac_cv_c_inline" != no && break
+done
+])
+AH_VERBATIM([inline],
+[/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif])
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+])# AC_C_INLINE
+
+
+# AC_C_CONST
+# ----------
+AC_DEFUN([AC_C_CONST],
+[AC_CACHE_CHECK([for an ANSI C-conforming const], ac_cv_c_const,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+[[
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+]])],
+ [ac_cv_c_const=yes],
+ [ac_cv_c_const=no])])
+if test $ac_cv_c_const = no; then
+ AC_DEFINE(const,,
+ [Define to empty if `const' does not conform to ANSI C.])
+fi
+])# AC_C_CONST
+
+
+# AC_C_RESTRICT
+# -------------
+# based on acx_restrict.m4, from the GNU Autoconf Macro Archive at:
+# http://autoconf-archive.cryp.to/acx_restrict.html
+#
+# Determine whether the C/C++ compiler supports the "restrict" keyword
+# introduced in ANSI C99, or an equivalent. Define "restrict" to the alternate
+# spelling, if any; these are more likely to work in both C and C++ compilers of
+# the same family, and in the presence of varying compiler options. If only
+# plain "restrict" works, do nothing. Here are some variants:
+# - GCC supports both __restrict and __restrict__
+# - older DEC Alpha C compilers support only __restrict
+# - _Restrict is the only spelling accepted by Sun WorkShop 6 update 2 C
+# Otherwise, define "restrict" to be empty.
+AN_IDENTIFIER([restrict], [AC_C_RESTRICT])
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], ac_cv_c_restrict,
+ [ac_cv_c_restrict=no
+ # The order here caters to the fact that C++ does not require restrict.
+ for ac_kw in __restrict __restrict__ _Restrict restrict; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }]],
+ [[int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)]])],
+ [ac_cv_c_restrict=$ac_kw])
+ test "$ac_cv_c_restrict" != no && break
+ done
+ ])
+ AH_VERBATIM([restrict],
+[/* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported directly. */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+ __restrict__, even though the corresponding Sun C compiler ends up with
+ "#define restrict _Restrict" or "#define restrict __restrict__" in the
+ previous line. Perhaps some future version of Sun C++ will work with
+ restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif])
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) AC_DEFINE([restrict], []) ;;
+ *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])# AC_C_RESTRICT
+
+
+# AC_C_VOLATILE
+# -------------
+# Note that, unlike const, #defining volatile to be the empty string can
+# actually turn a correct program into an incorrect one, since removing
+# uses of volatile actually grants the compiler permission to perform
+# optimizations that could break the user's code. So, do not #define
+# volatile away unless it is really necessary to allow the user's code
+# to compile cleanly. Benign compiler failures should be tolerated.
+AC_DEFUN([AC_C_VOLATILE],
+[AC_CACHE_CHECK([for working volatile], ac_cv_c_volatile,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
+volatile int x;
+int * volatile y = (int *) 0;
+return !x && !y;])],
+ [ac_cv_c_volatile=yes],
+ [ac_cv_c_volatile=no])])
+if test $ac_cv_c_volatile = no; then
+ AC_DEFINE(volatile,,
+ [Define to empty if the keyword `volatile' does not work.
+ Warning: valid code using `volatile' can become incorrect
+ without. Disable with care.])
+fi
+])# AC_C_VOLATILE
+
+
+# AC_C_STRINGIZE
+# --------------
+# Checks if `#' can be used to glue strings together at the CPP level.
+# Defines HAVE_STRINGIZE if positive.
+AC_DEFUN([AC_C_STRINGIZE],
+[AC_CACHE_CHECK([for preprocessor stringizing operator],
+ [ac_cv_c_stringize],
+[AC_EGREP_CPP([@%:@teststring],
+ [@%:@define x(y) #y
+
+char *s = x(teststring);],
+ [ac_cv_c_stringize=no],
+ [ac_cv_c_stringize=yes])])
+if test $ac_cv_c_stringize = yes; then
+ AC_DEFINE(HAVE_STRINGIZE, 1,
+ [Define to 1 if cpp supports the ANSI @%:@ stringizing operator.])
+fi
+])# AC_C_STRINGIZE
+
+
+# AC_C_PROTOTYPES
+# ---------------
+# Check if the C compiler supports prototypes, included if it needs
+# options.
+AC_DEFUN([AC_C_PROTOTYPES],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_MSG_CHECKING([for function prototypes])
+if test "$ac_cv_prog_cc_c89" != no; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(PROTOTYPES, 1,
+ [Define to 1 if the C compiler supports function prototypes.])
+ AC_DEFINE(__PROTOTYPES, 1,
+ [Define like PROTOTYPES; this can be used by system headers.])
+else
+ AC_MSG_RESULT([no])
+fi
+])# AC_C_PROTOTYPES
+
+
+# AC_C_FLEXIBLE_ARRAY_MEMBER
+# --------------------------
+# Check whether the C compiler supports flexible array members.
+AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER],
+[
+ AC_CACHE_CHECK([for flexible array members],
+ ac_cv_c_flexmember,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ #include <stdio.h>
+ #include <stddef.h>
+ struct s { int n; double d[]; };]],
+ [[int m = getchar ();
+ struct s *p = malloc (offsetof (struct s, d)
+ + m * sizeof (double));
+ p->d[0] = 0.0;
+ return p->d != (double *) NULL;]])],
+ [ac_cv_c_flexmember=yes],
+ [ac_cv_c_flexmember=no])])
+ if test $ac_cv_c_flexmember = yes; then
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [],
+ [Define to nothing if C supports flexible array members, and to
+ 1 if it does not. That way, with a declaration like `struct s
+ { int n; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack
+ can be used with pre-C99 compilers.
+ When computing the size of such an object, don't use 'sizeof (struct s)'
+ as it overestimates the size. Use 'offsetof (struct s, d)' instead.
+ Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with
+ MSVC and with C++ compilers.])
+ else
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], 1)
+ fi
+])
+
+
+# AC_C_VARARRAYS
+# --------------
+# Check whether the C compiler supports variable-length arrays.
+AC_DEFUN([AC_C_VARARRAYS],
+[
+ AC_CACHE_CHECK([for variable-length arrays],
+ ac_cv_c_vararrays,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([],
+ [[static int x; char a[++x]; a[sizeof a - 1] = 0; return a[0];]])],
+ [ac_cv_c_vararrays=yes],
+ [ac_cv_c_vararrays=no])])
+ if test $ac_cv_c_vararrays = yes; then
+ AC_DEFINE([HAVE_C_VARARRAYS], 1,
+ [Define to 1 if C supports variable-length arrays.])
+ fi
+])
+
+
+# AC_C_TYPEOF
+# -----------
+# Check if the C compiler supports GCC's typeof syntax.
+# The test case provokes incompatibilities in the Sun C compilers
+# (both Solaris 8 and Solaris 10).
+AC_DEFUN([AC_C_TYPEOF],
+[
+ AC_CACHE_CHECK([for typeof syntax and keyword spelling], ac_cv_c_typeof,
+ [ac_cv_c_typeof=no
+ for ac_kw in typeof __typeof__ no; do
+ test $ac_kw = no && break
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+ [[
+ int value;
+ typedef struct {
+ char a [1
+ + ! (($ac_kw (value))
+ (($ac_kw (value)) 0 < ($ac_kw (value)) -1
+ ? ($ac_kw (value)) - 1
+ : ~ (~ ($ac_kw (value)) 0
+ << sizeof ($ac_kw (value)))))]; }
+ ac__typeof_type_;
+ return
+ (! ((void) ((ac__typeof_type_ *) 0), 0));
+ ]])],
+ [ac_cv_c_typeof=$ac_kw])
+ test $ac_cv_c_typeof != no && break
+ done])
+ if test $ac_cv_c_typeof != no; then
+ AC_DEFINE([HAVE_TYPEOF], 1,
+ [Define to 1 if typeof works with your compiler.])
+ if test $ac_cv_c_typeof != typeof; then
+ AC_DEFINE_UNQUOTED([typeof], [$ac_cv_c_typeof],
+ [Define to __typeof__ if your compiler spells it that way.])
+ fi
+ fi
+])
+
+
+# _AC_LANG_OPENMP
+# ---------------
+# Expands to some language dependent source code for testing the presence of
+# OpenMP.
+AC_DEFUN([_AC_LANG_OPENMP],
+[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+
+# _AC_LANG_OPENMP(C)
+# ------------------
+m4_define([_AC_LANG_OPENMP(C)],
+[
+#ifndef _OPENMP
+ choke me
+#endif
+#include <omp.h>
+int main () { return omp_get_num_threads (); }
+])
+
+# _AC_LANG_OPENMP(C++)
+# --------------------
+m4_copy([_AC_LANG_OPENMP(C)], [_AC_LANG_OPENMP(C++)])
+
+# _AC_LANG_OPENMP(Fortran 77)
+# ---------------------------
+m4_define([_AC_LANG_OPENMP(Fortran 77)],
+[
+ program main
+ implicit none
+!$ integer tid
+ tid = 42
+ call omp_set_num_threads(2)
+ end
+])
+
+# _AC_LANG_OPENMP(Fortran)
+# ------------------------
+m4_copy([_AC_LANG_OPENMP(Fortran 77)], [_AC_LANG_OPENMP(Fortran)])
+
+# AC_OPENMP
+# ---------
+# Check which options need to be passed to the C compiler to support OpenMP.
+# Set the OPENMP_CFLAGS / OPENMP_CXXFLAGS / OPENMP_FFLAGS variable to these
+# options.
+# The options are necessary at compile time (so the #pragmas are understood)
+# and at link time (so the appropriate library is linked with).
+# This macro takes care to not produce redundant options if $CC $CFLAGS already
+# supports OpenMP. It also is careful to not pass options to compilers that
+# misinterpret them; for example, most compilers accept "-openmp" and create
+# an output file called 'penmp' rather than activating OpenMP support.
+AC_DEFUN([AC_OPENMP],
+[
+ OPENMP_[]_AC_LANG_PREFIX[]FLAGS=
+ AC_ARG_ENABLE([openmp],
+ [AS_HELP_STRING([--disable-openmp], [do not use OpenMP])])
+ if test "$enable_openmp" != no; then
+ AC_CACHE_CHECK([for $[]_AC_CC[] option to support OpenMP],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp],
+ [AC_LINK_IFELSE([_AC_LANG_OPENMP],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='none needed'],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp='unsupported'
+ dnl Try these flags:
+ dnl GCC >= 4.2 -fopenmp
+ dnl SunPRO C -xopenmp
+ dnl Intel C -openmp
+ dnl SGI C, PGI C -mp
+ dnl Tru64 Compaq C -omp
+ dnl IBM C (AIX, Linux) -qsmp=omp
+ dnl Cray CCE -homp
+ dnl NEC SX -Popenmp
+ dnl Lahey Fortran (Linux) --openmp
+ dnl If in this loop a compiler is passed an option that it doesn't
+ dnl understand or that it misinterprets, the AC_LINK_IFELSE test
+ dnl will fail (since we know that it failed without the option),
+ dnl therefore the loop will continue searching for an option, and
+ dnl no output file called 'penmp' or 'mp' is created.
+ for ac_option in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \
+ -Popenmp --openmp; do
+ ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $ac_option"
+ AC_LINK_IFELSE([_AC_LANG_OPENMP],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp=$ac_option])
+ _AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS
+ if test "$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp" != unsupported; then
+ break
+ fi
+ done])])
+ case $ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp in #(
+ "none needed" | unsupported)
+ ;; #(
+ *)
+ OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ac_cv_prog_[]_AC_LANG_ABBREV[]_openmp ;;
+ esac
+ fi
+ AC_SUBST([OPENMP_]_AC_LANG_PREFIX[FLAGS])
+])
diff --git a/lib/autoconf/erlang.m4 b/lib/autoconf/erlang.m4
new file mode 100644
index 0000000..953ffb0
--- /dev/null
+++ b/lib/autoconf/erlang.m4
@@ -0,0 +1,320 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Erlang/OTP language support.
+# Copyright (C) 2006, 2008-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Romain Lenglet.
+
+
+# Table of Contents:
+#
+# 0. Utility macros
+#
+# 1. Language selection
+# and routines to produce programs in a given language.
+#
+# 2. Producing programs in a given language.
+#
+# 3. Looking for a compiler
+# And possibly the associated preprocessor.
+
+
+
+## ------------------- ##
+## 0. Utility macros. ##
+## ------------------- ##
+
+
+# AC_ERLANG_PATH_ERLC([VALUE-IF-NOT-FOUND], [PATH])
+# -------------------------------------------------
+AC_DEFUN([AC_ERLANG_PATH_ERLC],
+[AC_ARG_VAR([ERLC], [Erlang/OTP compiler command [autodetected]])dnl
+if test -n "$ERLC"; then
+ AC_MSG_CHECKING([for erlc])
+ AC_MSG_RESULT([$ERLC])
+else
+ AC_PATH_TOOL(ERLC, erlc, [$1], [$2])
+fi
+AC_ARG_VAR([ERLCFLAGS], [Erlang/OTP compiler flags [none]])dnl
+])
+
+
+# AC_ERLANG_NEED_ERLC([PATH])
+# ---------------------------
+AC_DEFUN([AC_ERLANG_NEED_ERLC],
+[AC_ERLANG_PATH_ERLC([not found], [$1])
+if test "$ERLC" = "not found"; then
+ AC_MSG_ERROR([Erlang/OTP compiler (erlc) not found but required])
+fi
+])
+
+
+# AC_ERLANG_PATH_ERL([VALUE-IF-NOT-FOUND], [PATH])
+# ------------------------------------------------
+AC_DEFUN([AC_ERLANG_PATH_ERL],
+[AC_ARG_VAR([ERL], [Erlang/OTP interpreter command [autodetected]])dnl
+if test -n "$ERL"; then
+ AC_MSG_CHECKING([for erl])
+ AC_MSG_RESULT([$ERL])
+else
+ AC_PATH_TOOL(ERL, erl, [$1], [$2])[]dnl
+fi
+])
+
+
+# AC_ERLANG_NEED_ERL([PATH])
+# --------------------------
+AC_DEFUN([AC_ERLANG_NEED_ERL],
+[AC_ERLANG_PATH_ERL([not found], [$1])
+if test "$ERL" = "not found"; then
+ AC_MSG_ERROR([Erlang/OTP interpreter (erl) not found but required])
+fi
+])
+
+
+
+## ----------------------- ##
+## 1. Language selection. ##
+## ----------------------- ##
+
+
+# AC_LANG(Erlang)
+# ---------------
+AC_LANG_DEFINE([Erlang], [erl], [ERL], [ERLC], [],
+[ac_ext=erl
+ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD && echo "[#]!/bin/sh" > conftest$ac_exeext && AS_ECHO(["\"$ERL\" -run conftest start -run init stop -noshell"]) >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
+])
+
+
+
+# AC_LANG_ERLANG
+# --------------
+AU_DEFUN([AC_LANG_ERLANG], [AC_LANG(Erlang)])
+
+
+
+## ----------------------- ##
+## 2. Producing programs. ##
+## ----------------------- ##
+
+
+# AC_LANG_PROGRAM(Erlang)([PROLOGUE], [BODY])
+# -------------------------------------------
+m4_define([AC_LANG_PROGRAM(Erlang)],
+[[-module(conftest).
+-export([start/0]).]]
+[$1
+start() ->
+$2
+.
+])
+
+
+# _AC_LANG_NULL_PROGRAM(Erlang)
+# -----------------------------
+# Produce source that does nothing.
+m4_define([_AC_LANG_NULL_PROGRAM(Erlang)],
+[AC_LANG_PROGRAM([], [halt(0)])])
+
+
+# _AC_LANG_IO_PROGRAM(Erlang)
+# ---------------------------
+# Produce source that performs I/O.
+m4_define([_AC_LANG_IO_PROGRAM(Erlang)],
+[AC_LANG_PROGRAM([], [dnl
+ ReturnValue = case file:write_file("conftest.out", "") of
+ {error, _} -> 1;
+ ok -> 0
+ end,
+ halt(ReturnValue)])])
+
+
+## -------------------------------------------- ##
+## 3. Looking for Compilers and Preprocessors. ##
+## -------------------------------------------- ##
+
+
+# AC_LANG_PREPROC(Erlang)
+# -----------------------
+# Find the Erlang preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(Erlang)],
+[m4_warn([syntax],
+ [$0: No preprocessor defined for ]_AC_LANG)])
+
+# AC_LANG_COMPILER(Erlang)
+# ------------------------
+# Find the Erlang compiler. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(Erlang)],
+[AC_REQUIRE([AC_ERLANG_PATH_ERLC])])
+
+
+# AC_ERLANG_CHECK_LIB(LIBRARY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ----------------------------------------------------------------------
+# Macro for checking if an Erlang library is installed, and to
+# determine its version.
+AC_DEFUN([AC_ERLANG_CHECK_LIB],
+[AC_REQUIRE([AC_ERLANG_PATH_ERLC])[]dnl
+AC_REQUIRE([AC_ERLANG_PATH_ERL])[]dnl
+AC_CACHE_CHECK([for Erlang/OTP '$1' library subdirectory],
+ [ac_cv_erlang_lib_dir_$1],
+ [AC_LANG_PUSH(Erlang)[]dnl
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ ReturnValue = case code:lib_dir("[$1]") of
+ {error, bad_name} ->
+ file:write_file("conftest.out", "not found\n"),
+ 1;
+ LibDir ->
+ file:write_file("conftest.out", LibDir),
+ 0
+ end,
+ halt(ReturnValue)])],
+ [ac_cv_erlang_lib_dir_$1=`cat conftest.out`
+ rm -f conftest.out],
+ [if test ! -f conftest.out; then
+ AC_MSG_FAILURE([test Erlang program execution failed])
+ else
+ ac_cv_erlang_lib_dir_$1="not found"
+ rm -f conftest.out
+ fi])
+ AC_LANG_POP(Erlang)[]dnl
+ ])
+AC_CACHE_CHECK([for Erlang/OTP '$1' library version],
+ [ac_cv_erlang_lib_ver_$1],
+ [AS_IF([test "$ac_cv_erlang_lib_dir_$1" = "not found"],
+ [ac_cv_erlang_lib_ver_$1="not found"],
+ [ac_cv_erlang_lib_ver_$1=`AS_ECHO(["$ac_cv_erlang_lib_dir_$1"]) | sed -n -e 's,^.*-\([[^/-]]*\)$,\1,p'`])[]dnl
+ ])
+AC_SUBST([ERLANG_LIB_DIR_$1], [$ac_cv_erlang_lib_dir_$1])
+AC_SUBST([ERLANG_LIB_VER_$1], [$ac_cv_erlang_lib_ver_$1])
+AS_IF([test "$ac_cv_erlang_lib_dir_$1" = "not found"], [$3], [$2])
+])# AC_ERLANG_CHECK_LIB
+
+
+# AC_ERLANG_SUBST_ROOT_DIR
+# ------------------------
+# Determines the Erlang/OTP root directory.
+AC_DEFUN([AC_ERLANG_SUBST_ROOT_DIR],
+[AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl
+AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl
+AC_CACHE_CHECK([for Erlang/OTP root directory],
+ [ac_cv_erlang_root_dir],
+ [AC_LANG_PUSH(Erlang)[]dnl
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ RootDir = code:root_dir(),
+ file:write_file("conftest.out", RootDir),
+ ReturnValue = 0,
+ halt(ReturnValue)])],
+ [ac_cv_erlang_root_dir=`cat conftest.out`
+ rm -f conftest.out],
+ [rm -f conftest.out
+ AC_MSG_FAILURE([test Erlang program execution failed])])
+ AC_LANG_POP(Erlang)[]dnl
+ ])
+AC_SUBST([ERLANG_ROOT_DIR], [$ac_cv_erlang_root_dir])
+])# AC_ERLANG_SUBST_ROOT_DIR
+
+
+# AC_ERLANG_SUBST_LIB_DIR
+# -----------------------
+AC_DEFUN([AC_ERLANG_SUBST_LIB_DIR],
+[AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl
+AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl
+AC_CACHE_CHECK([for Erlang/OTP library base directory],
+ [ac_cv_erlang_lib_dir],
+ [AC_LANG_PUSH(Erlang)[]dnl
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ LibDir = code:lib_dir(),
+ file:write_file("conftest.out", LibDir),
+ ReturnValue = 0,
+ halt(ReturnValue)])],
+ [ac_cv_erlang_lib_dir=`cat conftest.out`
+ rm -f conftest.out],
+ [rm -f conftest.out
+ AC_MSG_FAILURE([test Erlang program execution failed])])
+ AC_LANG_POP(Erlang)[]dnl
+ ])
+AC_SUBST([ERLANG_LIB_DIR], [$ac_cv_erlang_lib_dir])
+])# AC_ERLANG_SUBST_LIB_DIR
+
+
+# AC_ERLANG_SUBST_INSTALL_LIB_DIR
+# -------------------------------
+# Directories for installing Erlang/OTP packages are separated from the
+# directories determined by running the Erlang/OTP installation that is used
+# for building.
+AC_DEFUN([AC_ERLANG_SUBST_INSTALL_LIB_DIR],
+[AC_MSG_CHECKING([for Erlang/OTP library installation base directory])
+AC_ARG_VAR([ERLANG_INSTALL_LIB_DIR],
+ [Erlang/OTP library installation base directory [LIBDIR/erlang/lib]])
+if test -n "$ERLANG_INSTALL_LIB_DIR"; then
+ AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR])
+else
+ AC_SUBST([ERLANG_INSTALL_LIB_DIR], ['${libdir}/erlang/lib'])
+ AC_MSG_RESULT([$libdir/erlang/lib])
+fi
+])# AC_ERLANG_SUBST_INSTALL_LIB_DIR
+
+
+# AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR(PACKAGE_TARNAME, PACKAGE_VERSION)
+# --------------------------------------------------------------------
+AC_DEFUN([AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR],
+[AC_REQUIRE([AC_ERLANG_SUBST_INSTALL_LIB_DIR])[]dnl
+AC_MSG_CHECKING([for Erlang/OTP '$1' library installation subdirectory])
+AC_ARG_VAR([ERLANG_INSTALL_LIB_DIR_$1],
+ [Erlang/OTP '$1' library installation subdirectory
+ [ERLANG_INSTALL_LIB_DIR/$1-$2]])
+if test -n "$ERLANG_INSTALL_LIB_DIR_$1"; then
+ AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR_$1])
+else
+ AC_SUBST([ERLANG_INSTALL_LIB_DIR_$1], ['${ERLANG_INSTALL_LIB_DIR}/$1-$2'])
+ AC_MSG_RESULT([$ERLANG_INSTALL_LIB_DIR/$1-$2])
+fi
+])# AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR
+
+
+# AC_ERLANG_SUBST_ERTS_VER
+# ------------------------
+# Determines the Erlang runtime system version.
+AC_DEFUN([AC_ERLANG_SUBST_ERTS_VER],
+[AC_REQUIRE([AC_ERLANG_NEED_ERLC])[]dnl
+AC_REQUIRE([AC_ERLANG_NEED_ERL])[]dnl
+AC_CACHE_CHECK([for Erlang/OTP ERTS version],
+ [ac_cv_erlang_erts_ver],
+ [AC_LANG_PUSH([Erlang])[]dnl
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([], [dnl
+ Version = erlang:system_info(version),
+ file:write_file("conftest.out", Version),
+ ReturnValue = 0,
+ halt(ReturnValue)])],
+ [ac_cv_erlang_erts_ver=`cat conftest.out`
+ rm -f conftest.out],
+ [rm -f conftest.out
+ AC_MSG_FAILURE([test Erlang program execution failed])])
+ AC_LANG_POP([Erlang])[]dnl
+ ])
+AC_SUBST([ERLANG_ERTS_VER], [$ac_cv_erlang_erts_ver])
+])# AC_ERLANG_SUBST_ERTS_VER
diff --git a/lib/autoconf/fortran.m4 b/lib/autoconf/fortran.m4
new file mode 100644
index 0000000..3803595
--- /dev/null
+++ b/lib/autoconf/fortran.m4
@@ -0,0 +1,1862 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Fortran languages support.
+# Copyright (C) 2001, 2003-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# Table of Contents:
+#
+# Preamble
+#
+# 0. Utility macros
+#
+# 1. Language selection
+# and routines to produce programs in a given language.
+#
+# 2. Producing programs in a given language.
+#
+# 3. Looking for a compiler
+# And possibly the associated preprocessor.
+#
+# 4. Compilers' characteristics.
+
+
+
+## ---------- ##
+## Preamble. ##
+## ---------- ##
+
+# Fortran vs. Fortran 77:
+# This file contains macros for both "Fortran 77" and "Fortran", where
+# the former is the "classic" autoconf Fortran interface and is intended
+# for legacy F77 codes, while the latter is intended to support newer Fortran
+# dialects. Fortran 77 uses environment variables F77, FFLAGS, and FLIBS,
+# while Fortran uses FC, FCFLAGS, and FCLIBS. For each user-callable AC_*
+# macro, there is generally both an F77 and an FC version, where both versions
+# share the same _AC_*_FC_* backend. This backend macro requires that
+# the appropriate language be AC_LANG_PUSH'ed, and uses _AC_LANG_ABBREV and
+# _AC_LANG_PREFIX in order to name cache and environment variables, etc.
+
+
+
+## ------------------- ##
+## 0. Utility macros. ##
+## ------------------- ##
+
+
+# _AC_LIST_MEMBER_IF(ELEMENT, LIST, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+#
+# Processing the elements of a list is tedious in shell programming,
+# as lists tend to be implemented as space delimited strings.
+#
+# This macro searches LIST for ELEMENT, and executes ACTION-IF-FOUND
+# if ELEMENT is a member of LIST, otherwise it executes
+# ACTION-IF-NOT-FOUND.
+AC_DEFUN([_AC_LIST_MEMBER_IF],
+dnl Do some sanity checking of the arguments.
+[m4_if([$1], , [m4_fatal([$0: missing argument 1])],
+ [$2], , [m4_fatal([$0: missing argument 2])])]dnl
+[ ac_exists=false
+ for ac_i in $2; do
+ if test x"$1" = x"$ac_i"; then
+ ac_exists=true
+ break
+ fi
+ done
+
+ AS_IF([test x"$ac_exists" = xtrue], [$3], [$4])[]dnl
+])# _AC_LIST_MEMBER_IF
+
+
+# _AC_LINKER_OPTION(LINKER-OPTIONS, SHELL-VARIABLE)
+# -------------------------------------------------
+#
+# Specifying options to the compiler (whether it be the C, C++ or
+# Fortran 77 compiler) that are meant for the linker is compiler
+# dependent. This macro lets you give options to the compiler that
+# are meant for the linker in a portable, compiler-independent way.
+#
+# This macro take two arguments, a list of linker options that the
+# compiler should pass to the linker (LINKER-OPTIONS) and the name of
+# a shell variable (SHELL-VARIABLE). The list of linker options are
+# appended to the shell variable in a compiler-dependent way.
+#
+# For example, if the selected language is C, then this:
+#
+# _AC_LINKER_OPTION([-R /usr/local/lib/foo], foo_LDFLAGS)
+#
+# will expand into this if the selected C compiler is gcc:
+#
+# foo_LDFLAGS="-Xlinker -R -Xlinker /usr/local/lib/foo"
+#
+# otherwise, it will expand into this:
+#
+# foo_LDFLAGS"-R /usr/local/lib/foo"
+#
+# You are encouraged to add support for compilers that this macro
+# doesn't currently support.
+# FIXME: Get rid of this macro.
+AC_DEFUN([_AC_LINKER_OPTION],
+[if test "$ac_compiler_gnu" = yes; then
+ for ac_link_opt in $1; do
+ $2="[$]$2 -Xlinker $ac_link_opt"
+ done
+else
+ $2="[$]$2 $1"
+fi[]dnl
+])# _AC_LINKER_OPTION
+
+
+
+## ------------------------ ##
+## 1a. Language selection. ##
+## ------------------------ ##
+
+
+# AC_LANG(Fortran 77)
+# -------------------
+AC_LANG_DEFINE([Fortran 77], [f77], [F], [F77], [],
+[ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+])
+
+
+# AC_LANG_FORTRAN77
+# -----------------
+AU_DEFUN([AC_LANG_FORTRAN77], [AC_LANG(Fortran 77)])
+
+
+# _AC_FORTRAN_ASSERT
+# ------------------
+# Current language must be Fortran or Fortran 77.
+m4_defun([_AC_FORTRAN_ASSERT],
+[m4_if(_AC_LANG, [Fortran], [],
+ [m4_if(_AC_LANG, [Fortran 77], [],
+ [m4_fatal([$0: current language is not Fortran: ] _AC_LANG)])])])
+
+
+# _AC_FC
+# ------
+# Return F77 or FC, depending upon the language.
+AC_DEFUN([_AC_FC],
+[_AC_FORTRAN_ASSERT()dnl
+AC_LANG_CASE([Fortran 77], [F77],
+ [Fortran], [FC])])
+
+
+
+## ----------------------- ##
+## 2. Producing programs. ##
+## ----------------------- ##
+
+
+# AC_LANG_PROGRAM(Fortran 77)([PROLOGUE], [BODY])
+# -----------------------------------------------
+# Yes, we discard the PROLOGUE.
+m4_define([AC_LANG_PROGRAM(Fortran 77)],
+[m4_ifval([$1],
+ [m4_warn([syntax], [$0: ignoring PROLOGUE: $1])])dnl
+ program main
+$2
+ end])
+
+
+# _AC_LANG_IO_PROGRAM(Fortran 77)
+# -------------------------------
+# Produce source that performs I/O.
+m4_define([_AC_LANG_IO_PROGRAM(Fortran 77)],
+[AC_LANG_PROGRAM([],
+[dnl
+ open(unit=9,file='conftest.out')
+ close(unit=9)
+])])
+
+
+# AC_LANG_CALL(Fortran 77)(PROLOGUE, FUNCTION)
+# --------------------------------------------
+# FIXME: This is a guess, help!
+m4_define([AC_LANG_CALL(Fortran 77)],
+[AC_LANG_PROGRAM([$1],
+[ call $2])])
+
+
+# AC_LANG_FUNC_LINK_TRY(Fortran 77)(FUNCTION)
+# -------------------------------------------
+m4_define([AC_LANG_FUNC_LINK_TRY(Fortran 77)],
+[AC_LANG_PROGRAM([],
+[ call $1])])
+
+## ------------------------ ##
+## 1b. Language selection. ##
+## ------------------------ ##
+
+
+# AC_LANG(Fortran)
+# ----------------
+AC_LANG_DEFINE([Fortran], [fc], [FC], [FC], [Fortran 77],
+[ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+])
+
+
+## -------------------------------------------- ##
+## 3. Looking for Compilers and Preprocessors. ##
+## -------------------------------------------- ##
+
+
+# AC_LANG_PREPROC(Fortran 77)
+# ---------------------------
+# Find the Fortran 77 preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(Fortran 77)],
+[m4_warn([syntax],
+ [$0: No preprocessor defined for ]_AC_LANG)])
+
+# AC_LANG_PREPROC(Fortran)
+# ------------------------
+# Find the Fortran preprocessor. Must be AC_DEFUN'd to be AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_PREPROC(Fortran)],
+[m4_warn([syntax],
+ [$0: No preprocessor defined for ]_AC_LANG)])
+
+
+# AC_LANG_COMPILER(Fortran 77)
+# ----------------------------
+# Find the Fortran 77 compiler. Must be AC_DEFUN'd to be
+# AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(Fortran 77)],
+[AC_REQUIRE([AC_PROG_F77])])
+
+# AC_LANG_COMPILER(Fortran)
+# -------------------------
+# Find the Fortran compiler. Must be AC_DEFUN'd to be
+# AC_REQUIRE'able.
+AC_DEFUN([AC_LANG_COMPILER(Fortran)],
+[AC_REQUIRE([AC_PROG_FC])])
+
+
+# ac_cv_prog_g77
+# --------------
+# We used to name the cache variable this way.
+AU_DEFUN([ac_cv_prog_g77],
+[ac_cv_f77_compiler_gnu])
+
+
+# _AC_FC_DIALECT_YEAR([DIALECT])
+# ------------------------------
+# Given a Fortran DIALECT, which is Fortran [YY]YY or simply [YY]YY,
+# convert to a 4-digit year. The dialect must be one of Fortran 77,
+# 90, 95, or 2000, currently. If DIALECT is simply Fortran or the
+# empty string, returns the empty string.
+AC_DEFUN([_AC_FC_DIALECT_YEAR],
+[m4_case(m4_bpatsubsts(m4_tolower([$1]), [fortran],[], [ *],[]),
+ [77],[1977], [1977],[1977],
+ [90],[1990], [1990],[1990],
+ [95],[1995], [1995],[1995],
+ [2000],[2000],
+ [],[],
+ [m4_fatal([unknown Fortran dialect])])])
+
+
+# _AC_PROG_FC([DIALECT], [COMPILERS...])
+# --------------------------------------
+# DIALECT is a Fortran dialect, given by Fortran [YY]YY or simply [YY]YY,
+# and must be one of those supported by _AC_FC_DIALECT_YEAR
+#
+# If DIALECT is supplied, then we search for compilers of that dialect
+# first, and then later dialects. Otherwise, we search for compilers
+# of the newest dialect first, and then earlier dialects in increasing age.
+# This search order is necessarily imperfect because the dialect cannot
+# always be inferred from the compiler name.
+#
+# Known compilers:
+# f77/f90/f95: generic compiler names
+# g77: GNU Fortran 77 compiler
+# gfortran: GNU Fortran 95+ compiler (released in gcc 4.0)
+# g95: original gcc-based f95 compiler (gfortran is a fork)
+# ftn: native Fortran 95 compiler on Cray X1
+# cf77: native F77 compiler under older Crays (prefer over fort77)
+# fort77: native F77 compiler under HP-UX (and some older Crays)
+# frt: Fujitsu F77 compiler
+# pgf77/pgf90/pghpf/pgf95/pgfortran: Portland Group F77/F90/F95 compilers
+# xlf/xlf90/xlf95: IBM (AIX) F77/F90/F95 compilers
+# Prefer xlf9x to the generic names because they do not reject files
+# with extension `.f'.
+# lf95: Lahey-Fujitsu F95 compiler
+# fl32: Microsoft Fortran 77 "PowerStation" compiler
+# af77: Apogee F77 compiler for Intergraph hardware running CLIX
+# epcf90: "Edinburgh Portable Compiler" F90
+# fort: Compaq (now HP) Fortran 90/95 compiler for Tru64 and Linux/Alpha
+# ifort, previously ifc: Intel Fortran 95 compiler for Linux/x86
+# efc: Intel Fortran 95 compiler for IA64
+# nagfor: NAGWare Fortran 77/90/95 compiler
+m4_define([_AC_F95_FC], [gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor])
+m4_define([_AC_F90_FC], [xlf90 f90 pgf90 pghpf epcf90])
+m4_define([_AC_F77_FC], [g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77])
+AC_DEFUN([_AC_PROG_FC],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CHECK_TOOLS([]_AC_FC[],
+ m4_default([$2],
+ m4_case(_AC_FC_DIALECT_YEAR([$1]),
+ [1995], [_AC_F95_FC],
+ [1990], [_AC_F90_FC _AC_F95_FC],
+ [1977], [_AC_F77_FC _AC_F90_FC _AC_F95_FC],
+ [_AC_F95_FC _AC_F90_FC _AC_F77_FC])))
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+for ac_option in --version -v -V -qversion; do
+ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD])
+done
+rm -f a.out
+
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file. (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+_AC_LANG_COMPILER_GNU
+ac_ext=$ac_save_ext
+_AC_PROG_FC_G
+])# _AC_PROG_FC
+
+
+# AC_PROG_F77([COMPILERS...])
+# ---------------------------
+# COMPILERS is a space separated list of Fortran 77 compilers to search
+# for. See also _AC_PROG_FC.
+AC_DEFUN([AC_PROG_F77],
+[AC_LANG_PUSH(Fortran 77)dnl
+AC_ARG_VAR([F77], [Fortran 77 compiler command])dnl
+AC_ARG_VAR([FFLAGS], [Fortran 77 compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_PROG_FC([Fortran 77], [$1])
+if test $ac_compiler_gnu = yes; then
+ G77=yes
+else
+ G77=
+fi
+AC_LANG_POP(Fortran 77)dnl
+])# AC_PROG_F77
+
+
+# AC_PROG_FC([COMPILERS...], [DIALECT])
+# -------------------------------------
+# COMPILERS is a space separated list of Fortran 77 compilers to search
+# for, and [DIALECT] is an optional dialect. See also _AC_PROG_FC.
+AC_DEFUN([AC_PROG_FC],
+[AC_LANG_PUSH(Fortran)dnl
+AC_ARG_VAR([FC], [Fortran compiler command])dnl
+AC_ARG_VAR([FCFLAGS], [Fortran compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+_AC_ARG_VAR_LIBS()dnl
+_AC_PROG_FC([$2], [$1])
+if test $ac_compiler_gnu = yes; then
+ GFC=yes
+else
+ GFC=
+fi
+AC_LANG_POP(Fortran)dnl
+])# AC_PROG_FC
+
+
+# _AC_PROG_FC_G
+# -------------
+# Check whether -g works, even if F[C]FLAGS is set, in case the package
+# plays around with F[C]FLAGS (such as to build both debugging and normal
+# versions of a library), tasteless as that idea is.
+m4_define([_AC_PROG_FC_G],
+[_AC_FORTRAN_ASSERT()dnl
+ac_test_[]_AC_LANG_PREFIX[]FLAGS=${[]_AC_LANG_PREFIX[]FLAGS+set}
+ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+_AC_LANG_PREFIX[]FLAGS=
+AC_CACHE_CHECK(whether $[]_AC_FC[] accepts -g, ac_cv_prog_[]_AC_LANG_ABBREV[]_g,
+[_AC_LANG_PREFIX[]FLAGS=-g
+_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+[ac_cv_prog_[]_AC_LANG_ABBREV[]_g=yes],
+[ac_cv_prog_[]_AC_LANG_ABBREV[]_g=no])
+])
+if test "$ac_test_[]_AC_LANG_PREFIX[]FLAGS" = set; then
+ _AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS
+elif test $ac_cv_prog_[]_AC_LANG_ABBREV[]_g = yes; then
+ if test "x$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu" = xyes; then
+ _AC_LANG_PREFIX[]FLAGS="-g -O2"
+ else
+ _AC_LANG_PREFIX[]FLAGS="-g"
+ fi
+else
+ if test "x$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu" = xyes; then
+ _AC_LANG_PREFIX[]FLAGS="-O2"
+ else
+ _AC_LANG_PREFIX[]FLAGS=
+ fi
+fi[]dnl
+])# _AC_PROG_FC_G
+
+
+# _AC_PROG_FC_C_O
+# ---------------
+# Test if the Fortran compiler accepts the options `-c' and `-o'
+# simultaneously, and define `[F77/FC]_NO_MINUS_C_MINUS_O' if it does not.
+#
+# The usefulness of this macro is questionable, as I can't really see
+# why anyone would use it. The only reason I include it is for
+# completeness, since a similar test exists for the C compiler.
+#
+# FIXME: it seems like we could merge the C/C++/Fortran versions of this.
+AC_DEFUN([_AC_PROG_FC_C_O],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CACHE_CHECK([whether $[]_AC_FC[] understands -c and -o together],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o],
+[AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+# We test twice because some compilers refuse to overwrite an existing
+# `.o' file with `-o', although they will create one.
+ac_try='$[]_AC_FC[] $[]_AC_LANG_PREFIX[]FLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&AS_MESSAGE_LOG_FD'
+rm -f conftest2.*
+if _AC_DO_VAR(ac_try) &&
+ test -f conftest2.$ac_objext &&
+ _AC_DO_VAR(ac_try); then
+ ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o=yes
+else
+ ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o=no
+fi
+rm -f conftest*])
+if test $ac_cv_prog_[]_AC_LANG_ABBREV[]_c_o = no; then
+ AC_DEFINE([]_AC_FC[]_NO_MINUS_C_MINUS_O, 1,
+ [Define to 1 if your Fortran compiler doesn't accept
+ -c and -o together.])
+fi
+])# _AC_PROG_FC_C_O
+
+
+# AC_PROG_F77_C_O
+# ---------------
+AC_DEFUN([AC_PROG_F77_C_O],
+[AC_REQUIRE([AC_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_PROG_FC_C_O
+AC_LANG_POP(Fortran 77)dnl
+])# AC_PROG_F77_C_O
+
+
+# AC_PROG_FC_C_O
+# --------------
+AC_DEFUN([AC_PROG_FC_C_O],
+[AC_REQUIRE([AC_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_PROG_FC_C_O
+AC_LANG_POP(Fortran)dnl
+])# AC_PROG_FC_C_O
+
+
+
+## ------------------------------- ##
+## 4. Compilers' characteristics. ##
+## ------------------------------- ##
+
+
+# _AC_PROG_FC_V_OUTPUT([FLAG = $ac_cv_prog_{f77/fc}_v])
+# -----------------------------------------------------
+# Link a trivial Fortran program, compiling with a verbose output FLAG
+# (whose default value, $ac_cv_prog_{f77/fc}_v, is computed by
+# _AC_PROG_FC_V), and return the output in $ac_{f77/fc}_v_output. This
+# output is processed in the way expected by _AC_FC_LIBRARY_LDFLAGS,
+# so that any link flags that are echoed by the compiler appear as
+# space-separated items.
+AC_DEFUN([_AC_PROG_FC_V_OUTPUT],
+[_AC_FORTRAN_ASSERT()dnl
+AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
+_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS m4_default([$1], [$ac_cv_prog_[]_AC_LANG_ABBREV[]_v])"
+eval "set x $ac_link"
+shift
+_AS_ECHO_LOG([$[*]])
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_[]_AC_LANG_ABBREV[]_v_output=`eval $ac_link AS_MESSAGE_LOG_FD>&1 2>&1 |
+ sed '/^Driving:/d; /^Configured with:/d;
+ '"/^[[_$as_cr_Letters]][[_$as_cr_alnum]]*=/d"`
+AS_ECHO(["$ac_[]_AC_LANG_ABBREV[]_v_output"]) >&AS_MESSAGE_LOG_FD
+_AC_LANG_PREFIX[]FLAGS=$ac_save_[]_AC_LANG_PREFIX[]FLAGS
+
+rm -rf conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_[]_AC_LANG_ABBREV[]_v_output="`echo $ac_[]_AC_LANG_ABBREV[]_v_output |
+ grep 'LPATH is:' |
+ sed 's|.*LPATH is\(: *[[^ ]]*\).*|\1|;s|: */| -L/|g'` $ac_[]_AC_LANG_ABBREV[]_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+# that detects unbalanced quotes in FLIBS should be implemented
+# and (ugh) tested at some point.
+case $ac_[]_AC_LANG_ABBREV[]_v_output in
+ # With xlf replace commas with spaces,
+ # and remove "-link" and closing parenthesis.
+ *xlfentry*)
+ ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output |
+ sed '
+ s/,/ /g
+ s/ -link / /g
+ s/) *$//
+ '
+ ` ;;
+
+ # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+ # $LIBS confuse us, and the libraries appear later in the output anyway).
+ *mGLOB_options_string*)
+ ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed 's/"-mGLOB[[^"]]*"/ /g'` ;;
+
+ # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+ # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+ # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+ *-cmdline\ * | *-ignore\ * | *-def\ *)
+ ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed "\
+ s/-cmdline *'[[^']]*'/ /g; s/-cmdline *\"[[^\"]]*\"/ /g
+ s/-ignore *'[[^']]*'/ /g; s/-ignore *\"[[^\"]]*\"/ /g
+ s/-def *'[[^']]*'/ /g; s/-def *\"[[^\"]]*\"/ /g"` ;;
+
+ # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
+ *fort77*f2c*gcc*)
+ ac_[]_AC_LANG_ABBREV[]_v_output=`echo "$ac_[]_AC_LANG_ABBREV[]_v_output" | sed -n '
+ /:[[ ]]\+Running[[ ]]\{1,\}"gcc"/{
+ /"-c"/d
+ /[[.]]c"*/d
+ s/^.*"gcc"/"gcc"/
+ s/"//gp
+ }'` ;;
+
+ # If we are using Cray Fortran then delete quotes.
+ *cft90*)
+ ac_[]_AC_LANG_ABBREV[]_v_output=`echo $ac_[]_AC_LANG_ABBREV[]_v_output | sed 's/"//g'` ;;
+esac
+
+])# _AC_PROG_FC_V_OUTPUT
+
+
+# _AC_PROG_FC_V
+# -------------
+#
+# Determine the flag that causes the Fortran compiler to print
+# information of library and object files (normally -v)
+# Needed for _AC_FC_LIBRARY_FLAGS
+# Some compilers don't accept -v (Lahey: (-)-verbose, xlf: -V, Fujitsu: -###)
+AC_DEFUN([_AC_PROG_FC_V],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CACHE_CHECK([how to get verbose linking output from $[]_AC_FC[]],
+ [ac_cv_prog_[]_AC_LANG_ABBREV[]_v],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+[ac_cv_prog_[]_AC_LANG_ABBREV[]_v=
+# Try some options frequently used verbose output
+for ac_verb in -v -verbose --verbose -V -\#\#\#; do
+ _AC_PROG_FC_V_OUTPUT($ac_verb)
+ # look for -l* and *.a constructs in the output
+ for ac_arg in $ac_[]_AC_LANG_ABBREV[]_v_output; do
+ case $ac_arg in
+ [[\\/]]*.a | ?:[[\\/]]*.a | -[[lLRu]]*)
+ ac_cv_prog_[]_AC_LANG_ABBREV[]_v=$ac_verb
+ break 2 ;;
+ esac
+ done
+done
+if test -z "$ac_cv_prog_[]_AC_LANG_ABBREV[]_v"; then
+ AC_MSG_WARN([cannot determine how to obtain linking information from $[]_AC_FC[]])
+fi],
+ [AC_MSG_WARN([compilation failed])])
+])])# _AC_PROG_FC_V
+
+
+# _AC_FC_LIBRARY_LDFLAGS
+# ----------------------
+#
+# Determine the linker flags (e.g. "-L" and "-l") for the Fortran
+# intrinsic and runtime libraries that are required to successfully
+# link a Fortran program or shared library. The output variable
+# FLIBS/FCLIBS is set to these flags.
+#
+# This macro is intended to be used in those situations when it is
+# necessary to mix, e.g. C++ and Fortran, source code into a single
+# program or shared library.
+#
+# For example, if object files from a C++ and Fortran compiler must
+# be linked together, then the C++ compiler/linker must be used for
+# linking (since special C++-ish things need to happen at link time
+# like calling global constructors, instantiating templates, enabling
+# exception support, etc.).
+#
+# However, the Fortran intrinsic and runtime libraries must be
+# linked in as well, but the C++ compiler/linker doesn't know how to
+# add these Fortran libraries. Hence, the macro
+# "AC_F77_LIBRARY_LDFLAGS" was created to determine these Fortran
+# libraries.
+#
+# This macro was packaged in its current form by Matthew D. Langston.
+# However, nearly all of this macro came from the "OCTAVE_FLIBS" macro
+# in "octave-2.0.13/aclocal.m4", and full credit should go to John
+# W. Eaton for writing this extremely useful macro. Thank you John.
+AC_DEFUN([_AC_FC_LIBRARY_LDFLAGS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_AC_FORTRAN_ASSERT()dnl
+_AC_PROG_FC_V
+AC_CACHE_CHECK([for _AC_LANG libraries of $[]_AC_FC[]], ac_cv_[]_AC_LANG_ABBREV[]_libs,
+[if test "x$[]_AC_LANG_PREFIX[]LIBS" != "x"; then
+ ac_cv_[]_AC_LANG_ABBREV[]_libs="$[]_AC_LANG_PREFIX[]LIBS" # Let the user override the test.
+else
+
+_AC_PROG_FC_V_OUTPUT
+
+ac_cv_[]_AC_LANG_ABBREV[]_libs=
+
+# Save positional arguments (if any)
+ac_save_positional="$[@]"
+
+set X $ac_[]_AC_LANG_ABBREV[]_v_output
+while test $[@%:@] != 1; do
+ shift
+ ac_arg=$[1]
+ case $ac_arg in
+ [[\\/]]*.a | ?:[[\\/]]*.a)
+ _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, ,
+ ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg")
+ ;;
+ -bI:*)
+ _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, ,
+ [_AC_LINKER_OPTION([$ac_arg], ac_cv_[]_AC_LANG_ABBREV[]_libs)])
+ ;;
+ # Ignore these flags.
+ -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
+ |-LANG:=* | -LIST:* | -LNO:* | -link)
+ ;;
+ -lkernel32)
+ case $host_os in
+ *cygwin*) ;;
+ *) ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg"
+ ;;
+ esac
+ ;;
+ -[[LRuYz]])
+ # These flags, when seen by themselves, take an argument.
+ # We remove the space between option and argument and re-iterate
+ # unless we find an empty arg or a new option (starting with -)
+ case $[2] in
+ "" | -*);;
+ *)
+ ac_arg="$ac_arg$[2]"
+ shift; shift
+ set X $ac_arg "$[@]"
+ ;;
+ esac
+ ;;
+ -YP,*)
+ for ac_j in `AS_ECHO(["$ac_arg"]) | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
+ _AC_LIST_MEMBER_IF($ac_j, $ac_cv_[]_AC_LANG_ABBREV[]_libs, ,
+ [ac_arg="$ac_arg $ac_j"
+ ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_j"])
+ done
+ ;;
+ -[[lLR]]*)
+ _AC_LIST_MEMBER_IF($ac_arg, $ac_cv_[]_AC_LANG_ABBREV[]_libs, ,
+ ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg")
+ ;;
+ -zallextract*| -zdefaultextract)
+ ac_cv_[]_AC_LANG_ABBREV[]_libs="$ac_cv_[]_AC_LANG_ABBREV[]_libs $ac_arg"
+ ;;
+ # Ignore everything else.
+ esac
+done
+# restore positional arguments
+set X $ac_save_positional; shift
+
+# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen,
+# then we insist that the "run path" must be an absolute path (i.e. it
+# must begin with a "/").
+case `(uname -sr) 2>/dev/null` in
+ "SunOS 5"*)
+ ac_ld_run_path=`AS_ECHO(["$ac_[]_AC_LANG_ABBREV[]_v_output"]) |
+ sed -n 's,^.*LD_RUN_PATH *= *\(/[[^ ]]*\).*$,-R\1,p'`
+ test "x$ac_ld_run_path" != x &&
+ _AC_LINKER_OPTION([$ac_ld_run_path], ac_cv_[]_AC_LANG_ABBREV[]_libs)
+ ;;
+esac
+fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
+])
+[]_AC_LANG_PREFIX[]LIBS="$ac_cv_[]_AC_LANG_ABBREV[]_libs"
+AC_SUBST([]_AC_LANG_PREFIX[]LIBS)
+])# _AC_FC_LIBRARY_LDFLAGS
+
+
+# AC_F77_LIBRARY_LDFLAGS
+# ----------------------
+AC_DEFUN([AC_F77_LIBRARY_LDFLAGS],
+[AC_REQUIRE([AC_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_FC_LIBRARY_LDFLAGS
+AC_LANG_POP(Fortran 77)dnl
+])# AC_F77_LIBRARY_LDFLAGS
+
+
+# AC_FC_LIBRARY_LDFLAGS
+# ---------------------
+AC_DEFUN([AC_FC_LIBRARY_LDFLAGS],
+[AC_REQUIRE([AC_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_FC_LIBRARY_LDFLAGS
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_LIBRARY_LDFLAGS
+
+
+# _AC_FC_DUMMY_MAIN([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------------------------------------------------------
+#
+# Detect name of dummy main routine required by the Fortran libraries,
+# (if any) and define {F77,FC}_DUMMY_MAIN to this name (which should be
+# used for a dummy declaration, if it is defined). On some systems,
+# linking a C program to the Fortran library does not work unless you
+# supply a dummy function called something like MAIN__.
+#
+# Execute ACTION-IF-NOT-FOUND if no way of successfully linking a C
+# program with the {F77,FC} libs is found; default to exiting with an error
+# message. Execute ACTION-IF-FOUND if a dummy routine name is needed
+# and found or if it is not needed (default to defining {F77,FC}_DUMMY_MAIN
+# when needed).
+#
+# What is technically happening is that the Fortran libraries provide
+# their own main() function, which usually initializes Fortran I/O and
+# similar stuff, and then calls MAIN__, which is the entry point of
+# your program. Usually, a C program will override this with its own
+# main() routine, but the linker sometimes complain if you don't
+# provide a dummy (never-called) MAIN__ routine anyway.
+#
+# Of course, programs that want to allow Fortran subroutines to do
+# I/O, etcetera, should call their main routine MAIN__() (or whatever)
+# instead of main(). A separate autoconf test (_AC_FC_MAIN) checks
+# for the routine to use in this case (since the semantics of the test
+# are slightly different). To link to e.g. purely numerical
+# libraries, this is normally not necessary, however, and most C/C++
+# programs are reluctant to turn over so much control to Fortran. =)
+#
+# The name variants we check for are (in order):
+# MAIN__ (g77, MAIN__ required on some systems; IRIX, MAIN__ optional)
+# MAIN_, __main (SunOS)
+# MAIN _MAIN __MAIN main_ main__ _main (we follow DDD and try these too)
+AC_DEFUN([_AC_FC_DUMMY_MAIN],
+[_AC_FORTRAN_ASSERT()dnl
+m4_define(_AC_LANG_PROGRAM_C_[]_AC_FC[]_HOOKS,
+[#ifdef ]_AC_FC[_DUMMY_MAIN
+]AC_LANG_CASE([Fortran], [#ifndef FC_DUMMY_MAIN_EQ_F77])
+[# ifdef __cplusplus
+ extern "C"
+# endif
+ int ]_AC_FC[_DUMMY_MAIN() { return 1; }
+]AC_LANG_CASE([Fortran], [#endif])
+[#endif
+])
+AC_CACHE_CHECK([for dummy main to link with _AC_LANG libraries],
+ ac_cv_[]_AC_LANG_ABBREV[]_dummy_main,
+[ac_[]_AC_LANG_ABBREV[]_dm_save_LIBS=$LIBS
+ LIBS="$LIBS $[]_AC_LANG_PREFIX[]LIBS"
+ ac_fortran_dm_var=[]_AC_FC[]_DUMMY_MAIN
+ AC_LANG_PUSH(C)dnl
+
+ # First, try linking without a dummy main:
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [ac_cv_fortran_dummy_main=none],
+ [ac_cv_fortran_dummy_main=unknown])
+
+ if test $ac_cv_fortran_dummy_main = unknown; then
+ for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@define $ac_fortran_dm_var $ac_func]])],
+ [ac_cv_fortran_dummy_main=$ac_func; break])
+ done
+ fi
+ AC_LANG_POP(C)dnl
+ ac_cv_[]_AC_LANG_ABBREV[]_dummy_main=$ac_cv_fortran_dummy_main
+ rm -rf conftest*
+ LIBS=$ac_[]_AC_LANG_ABBREV[]_dm_save_LIBS
+])
+[]_AC_FC[]_DUMMY_MAIN=$ac_cv_[]_AC_LANG_ABBREV[]_dummy_main
+AS_IF([test "$[]_AC_FC[]_DUMMY_MAIN" != unknown],
+ [m4_default([$1],
+[if test $[]_AC_FC[]_DUMMY_MAIN != none; then
+ AC_DEFINE_UNQUOTED([]_AC_FC[]_DUMMY_MAIN, $[]_AC_FC[]_DUMMY_MAIN,
+ [Define to dummy `main' function (if any) required to
+ link to the Fortran libraries.])
+ if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then
+ AC_DEFINE([FC_DUMMY_MAIN_EQ_F77], 1,
+ [Define if F77 and FC dummy `main' functions are identical.])
+ fi
+fi])],
+ [m4_default([$2],
+ [AC_MSG_FAILURE([linking to Fortran libraries from C fails])])])
+])# _AC_FC_DUMMY_MAIN
+
+
+# AC_F77_DUMMY_MAIN
+# -----------------
+AC_DEFUN([AC_F77_DUMMY_MAIN],
+[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_FC_DUMMY_MAIN($@)
+AC_LANG_POP(Fortran 77)dnl
+])# AC_F77_DUMMY_MAIN
+
+
+# AC_FC_DUMMY_MAIN
+# ----------------
+AC_DEFUN([AC_FC_DUMMY_MAIN],
+[AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_FC_DUMMY_MAIN($@)
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_DUMMY_MAIN
+
+
+# _AC_FC_MAIN
+# -----------
+# Define {F77,FC}_MAIN to name of alternate main() function for use with
+# the Fortran libraries. (Typically, the libraries may define their
+# own main() to initialize I/O, etcetera, that then call your own
+# routine called MAIN__ or whatever.) See _AC_FC_DUMMY_MAIN, above.
+# If no such alternate name is found, just define {F77,FC}_MAIN to main.
+#
+AC_DEFUN([_AC_FC_MAIN],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CACHE_CHECK([for alternate main to link with _AC_LANG libraries],
+ ac_cv_[]_AC_LANG_ABBREV[]_main,
+[ac_[]_AC_LANG_ABBREV[]_m_save_LIBS=$LIBS
+ LIBS="$LIBS $[]_AC_LANG_PREFIX[]LIBS"
+ ac_fortran_dm_var=[]_AC_FC[]_DUMMY_MAIN
+ AC_LANG_PUSH(C)dnl
+ ac_cv_fortran_main="main" # default entry point name
+ for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@ifdef FC_DUMMY_MAIN_EQ_F77
+@%:@ undef F77_DUMMY_MAIN
+@%:@ undef FC_DUMMY_MAIN
+@%:@else
+@%:@ undef $ac_fortran_dm_var
+@%:@endif
+@%:@define main $ac_func])],
+ [ac_cv_fortran_main=$ac_func; break])
+ done
+ AC_LANG_POP(C)dnl
+ ac_cv_[]_AC_LANG_ABBREV[]_main=$ac_cv_fortran_main
+ rm -rf conftest*
+ LIBS=$ac_[]_AC_LANG_ABBREV[]_m_save_LIBS
+])
+AC_DEFINE_UNQUOTED([]_AC_FC[]_MAIN, $ac_cv_[]_AC_LANG_ABBREV[]_main,
+ [Define to alternate name for `main' routine that is
+ called from a `main' in the Fortran libraries.])
+])# _AC_FC_MAIN
+
+
+# AC_F77_MAIN
+# -----------
+AC_DEFUN([AC_F77_MAIN],
+[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_FC_MAIN
+AC_LANG_POP(Fortran 77)dnl
+])# AC_F77_MAIN
+
+
+# AC_FC_MAIN
+# ----------
+AC_DEFUN([AC_FC_MAIN],
+[AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_FC_MAIN
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_MAIN
+
+
+# __AC_FC_NAME_MANGLING
+# ---------------------
+# Test for the name mangling scheme used by the Fortran compiler.
+#
+# Sets ac_cv_{f77,fc}_mangling. The value contains three fields, separated
+# by commas:
+#
+# lower case / upper case:
+# case translation of the Fortran symbols
+# underscore / no underscore:
+# whether the compiler appends "_" to symbol names
+# extra underscore / no extra underscore:
+# whether the compiler appends an extra "_" to symbol names already
+# containing at least one underscore
+#
+AC_DEFUN([__AC_FC_NAME_MANGLING],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CACHE_CHECK([for _AC_LANG name-mangling scheme],
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling,
+[AC_COMPILE_IFELSE(
+[[ subroutine foobar()
+ return
+ end
+ subroutine foo_bar()
+ return
+ end]],
+[mv conftest.$ac_objext cfortran_test.$ac_objext
+
+ ac_save_LIBS=$LIBS
+ LIBS="cfortran_test.$ac_objext $LIBS $[]_AC_LANG_PREFIX[]LIBS"
+
+ AC_LANG_PUSH(C)dnl
+ ac_success=no
+ for ac_foobar in foobar FOOBAR; do
+ for ac_underscore in "" "_"; do
+ ac_func="$ac_foobar$ac_underscore"
+ AC_LINK_IFELSE([AC_LANG_CALL([], [$ac_func])],
+ [ac_success=yes; break 2])
+ done
+ done
+ AC_LANG_POP(C)dnl
+
+ if test "$ac_success" = "yes"; then
+ case $ac_foobar in
+ foobar)
+ ac_case=lower
+ ac_foo_bar=foo_bar
+ ;;
+ FOOBAR)
+ ac_case=upper
+ ac_foo_bar=FOO_BAR
+ ;;
+ esac
+
+ AC_LANG_PUSH(C)dnl
+ ac_success_extra=no
+ for ac_extra in "" "_"; do
+ ac_func="$ac_foo_bar$ac_underscore$ac_extra"
+ AC_LINK_IFELSE([AC_LANG_CALL([], [$ac_func])],
+ [ac_success_extra=yes; break])
+ done
+ AC_LANG_POP(C)dnl
+
+ if test "$ac_success_extra" = "yes"; then
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="$ac_case case"
+ if test -z "$ac_underscore"; then
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="$ac_cv_[]_AC_LANG_ABBREV[]_mangling, no underscore"
+ else
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="$ac_cv_[]_AC_LANG_ABBREV[]_mangling, underscore"
+ fi
+ if test -z "$ac_extra"; then
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="$ac_cv_[]_AC_LANG_ABBREV[]_mangling, no extra underscore"
+ else
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="$ac_cv_[]_AC_LANG_ABBREV[]_mangling, extra underscore"
+ fi
+ else
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="unknown"
+ fi
+ else
+ ac_cv_[]_AC_LANG_ABBREV[]_mangling="unknown"
+ fi
+
+ LIBS=$ac_save_LIBS
+ rm -rf conftest*
+ rm -f cfortran_test*],
+ [AC_MSG_FAILURE([cannot compile a simple Fortran program])])
+])
+])# __AC_FC_NAME_MANGLING
+
+# The replacement is empty.
+AU_DEFUN([AC_F77_NAME_MANGLING], [])
+
+
+# _AC_F77_NAME_MANGLING
+# ---------------------
+AC_DEFUN([_AC_F77_NAME_MANGLING],
+[AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS])dnl
+AC_REQUIRE([AC_F77_DUMMY_MAIN])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+__AC_FC_NAME_MANGLING
+AC_LANG_POP(Fortran 77)dnl
+])# _AC_F77_NAME_MANGLING
+
+
+# _AC_FC_NAME_MANGLING
+# --------------------
+AC_DEFUN([_AC_FC_NAME_MANGLING],
+[AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS])dnl
+AC_REQUIRE([AC_FC_DUMMY_MAIN])dnl
+AC_LANG_PUSH(Fortran)dnl
+__AC_FC_NAME_MANGLING
+AC_LANG_POP(Fortran)dnl
+])# _AC_FC_NAME_MANGLING
+
+
+# _AC_FC_WRAPPERS
+# ---------------
+# Defines C macros {F77,FC}_FUNC(name,NAME) and {F77,FC}_FUNC_(name,NAME) to
+# properly mangle the names of C identifiers, and C identifiers with
+# underscores, respectively, so that they match the name mangling
+# scheme used by the Fortran compiler.
+AC_DEFUN([_AC_FC_WRAPPERS],
+[_AC_FORTRAN_ASSERT()dnl
+AH_TEMPLATE(_AC_FC[_FUNC],
+ [Define to a macro mangling the given C identifier (in lower and upper
+ case), which must not contain underscores, for linking with Fortran.])dnl
+AH_TEMPLATE(_AC_FC[_FUNC_],
+ [As ]_AC_FC[_FUNC, but for C identifiers containing underscores.])dnl
+case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in
+ "lower case, no underscore, no extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name]) ;;
+ "lower case, no underscore, extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name [##] _]) ;;
+ "lower case, underscore, no extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name [##] _])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name [##] _]) ;;
+ "lower case, underscore, extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [name [##] _])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [name [##] __]) ;;
+ "upper case, no underscore, no extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME]) ;;
+ "upper case, no underscore, extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME [##] _]) ;;
+ "upper case, underscore, no extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME [##] _])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME [##] _]) ;;
+ "upper case, underscore, extra underscore")
+ AC_DEFINE(_AC_FC[_FUNC(name,NAME)], [NAME [##] _])
+ AC_DEFINE(_AC_FC[_FUNC_(name,NAME)], [NAME [##] __]) ;;
+ *)
+ AC_MSG_WARN([unknown Fortran name-mangling scheme])
+ ;;
+esac
+])# _AC_FC_WRAPPERS
+
+
+# AC_F77_WRAPPERS
+# ---------------
+AC_DEFUN([AC_F77_WRAPPERS],
+[AC_REQUIRE([_AC_F77_NAME_MANGLING])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_FC_WRAPPERS
+AC_LANG_POP(Fortran 77)dnl
+])# AC_F77_WRAPPERS
+
+
+# AC_FC_WRAPPERS
+# --------------
+AC_DEFUN([AC_FC_WRAPPERS],
+[AC_REQUIRE([_AC_FC_NAME_MANGLING])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_FC_WRAPPERS
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_WRAPPERS
+
+
+# _AC_FC_FUNC(NAME, [SHELLVAR = NAME])
+# ------------------------------------
+# For a Fortran subroutine of given NAME, define a shell variable
+# $SHELLVAR to the Fortran-mangled name. If the SHELLVAR
+# argument is not supplied, it defaults to NAME.
+AC_DEFUN([_AC_FC_FUNC],
+[_AC_FORTRAN_ASSERT()dnl
+case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in
+ upper*) ac_val="m4_toupper([$1])" ;;
+ lower*) ac_val="m4_tolower([$1])" ;;
+ *) ac_val="unknown" ;;
+esac
+case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
+m4_if(m4_index([$1],[_]),-1,[],
+[case $ac_cv_[]_AC_LANG_ABBREV[]_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac
+])
+m4_default([$2],[$1])="$ac_val"
+])# _AC_FC_FUNC
+
+
+# AC_F77_FUNC(NAME, [SHELLVAR = NAME])
+# ------------------------------------
+AC_DEFUN([AC_F77_FUNC],
+[AC_REQUIRE([_AC_F77_NAME_MANGLING])dnl
+AC_LANG_PUSH(Fortran 77)dnl
+_AC_FC_FUNC([$1],[$2])
+AC_LANG_POP(Fortran 77)dnl
+])# AC_F77_FUNC
+
+
+# AC_FC_FUNC(NAME, [SHELLVAR = NAME])
+# -----------------------------------
+AC_DEFUN([AC_FC_FUNC],
+[AC_REQUIRE([_AC_FC_NAME_MANGLING])dnl
+AC_LANG_PUSH(Fortran)dnl
+_AC_FC_FUNC([$1],[$2])
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_FUNC
+
+
+# AC_FC_SRCEXT(EXT, [ACTION-IF-SUCCESS], [ACTION-IF-FAILURE])
+# -----------------------------------------------------------
+# Set the source-code extension used in Fortran (FC) tests to EXT (which
+# defaults to f). Also, look for any necessary additional FCFLAGS needed
+# to allow this extension, and store them in the output variable
+# FCFLAGS_<EXT> (e.g. FCFLAGS_f90 for EXT=f90). If successful,
+# call ACTION-IF-SUCCESS. If unable to compile source code with EXT,
+# call ACTION-IF-FAILURE, which defaults to failing with an error
+# message.
+#
+# (The flags for the current source-code extension, if any, are stored in
+# $ac_fcflags_srcext and used automatically in subsequent autoconf tests.)
+#
+# For ordinary extensions like f90, etcetera, the modified FCFLAGS
+# are currently needed for IBM's xlf* and Intel's ifc (grrr). Unfortunately,
+# xlf* will only take flags to recognize one extension at a time, so if the
+# user wants to compile multiple extensions (.f90 and .f95, say), she
+# will need to use the FCFLAGS_F90 and FCFLAGS_F95 individually rather
+# than just adding them all to FCFLAGS, for example.
+#
+# Also, for Intel's ifc compiler (which does not accept .f95 by default in
+# some versions), the $FCFLAGS_<EXT> variable *must* go immediately before
+# the source file on the command line, unlike other $FCFLAGS. Ugh.
+#
+# gfortran requires '-x f77' in order to recognize .f77 files.
+AC_DEFUN([AC_FC_SRCEXT],
+[AC_LANG_PUSH(Fortran)dnl
+AC_CACHE_CHECK([for Fortran flag to compile .$1 files],
+ ac_cv_fc_srcext_$1,
+[ac_ext=$1
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_$1=unknown
+case $ac_ext in #(
+ [[fF]]77) ac_try=f77;; #(
+ *) ac_try=f95;;
+esac
+for ac_flag in none -qsuffix=f=$1 -Tf "-x $ac_try"; do
+ test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ac_cv_fc_srcext_$1=$ac_flag; break])
+done
+rm -f conftest.$ac_objext conftest.$1
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+])
+if test "x$ac_cv_fc_srcext_$1" = xunknown; then
+ m4_default([$3],[AC_MSG_ERROR([Fortran could not compile .$1 files])])
+else
+ ac_fc_srcext=$1
+ if test "x$ac_cv_fc_srcext_$1" = xnone; then
+ ac_fcflags_srcext=""
+ FCFLAGS_[]$1[]=""
+ else
+ ac_fcflags_srcext=$ac_cv_fc_srcext_$1
+ FCFLAGS_[]$1[]=$ac_cv_fc_srcext_$1
+ fi
+ AC_SUBST(FCFLAGS_[]$1)
+ $2
+fi
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_SRCEXT
+
+
+# AC_FC_PP_SRCEXT(EXT, [ACTION-IF-SUCCESS], [ACTION-IF-FAILURE])
+# --------------------------------------------------------------
+# Like AC_FC_SRCEXT, set the source-code extension used in Fortran (FC) tests
+# to EXT (which defaults to f). Also, look for any necessary additional
+# FCFLAGS needed to allow this extension for preprocessed Fortran, and store
+# them in the output variable FCFLAGS_<EXT> (e.g. FCFLAGS_f90 for EXT=f90).
+# If successful, call ACTION-IF-SUCCESS. If unable to compile preprocessed
+# source code with EXT, call ACTION-IF-FAILURE, which defaults to failing with
+# an error message.
+#
+# Some compilers allow preprocessing with either a Fortran preprocessor or
+# with the C preprocessor (cpp). Prefer the Fortran preprocessor, to deal
+# correctly with continuation lines, `//' (not a comment), and preserve white
+# space (for fixed form).
+#
+# (The flags for the current source-code extension, if any, are stored in
+# $ac_fcflags_srcext and used automatically in subsequent autoconf tests.)
+#
+# For ordinary extensions like f90, etcetera, the modified FCFLAGS
+# are needed for IBM's xlf*. Also, for Intel's ifort compiler, the
+# $FCFLAGS_<EXT> variable *must* go immediately before the source file on the
+# command line, unlike other $FCFLAGS. Ugh.
+#
+# Known extensions that enable preprocessing by default, and flags to force it:
+# GNU: .F .F90 .F95 .F03 .F08, -cpp for most others,
+# -x f77-cpp-input for .f77 .F77; -x f95-cpp-input for gfortran < 4.4
+# SGI: .F .F90, -ftpp or -cpp for .f .f90, -E write preproc to stdout
+# -macro_expand enable macro expansion everywhere (with -ftpp)
+# -P preproc only, save in .i, no #line's
+# SUN: .F .F95, -fpp for others; -xpp={fpp,cpp} for preprocessor selection
+# -F preprocess only (save in lowercase extension)
+# IBM: .F .F77 .F90 .F95 .F03, -qsuffix=cpp=EXT for extension .EXT to invoke cpp
+# -WF,-qnofpp -WF,-qfpp=comment:linecont:nocomment:nolinecont
+# -WF,-qlanglvl=classic or not -qnoescape (trigraph problems)
+# -d no #line in output, -qnoobject for preprocessing only (output in .f)
+# -q{no,}ppsuborigarg substitute original macro args before expansion
+# HP: .F, +cpp={yes|no|default} use cpp, -cpp, +cpp_keep save in .i/.i90
+# PGI: -Mpreprocess
+# Absoft: .F .FOR .F90 .F95, -cpp for others
+# Cray: .F .F90 .FTN, -e Z for others; -F enable macro expansion everywhere
+# Intel: .F .F90, -fpp for others, but except for .f and .f90, -Tf may also be
+# needed right before the source file name
+# PathScale: .F .F90 .F95, -ftpp or -cpp for .f .f90 .f95
+# -macro_expand for expansion everywhere, -P for no #line in output
+# Lahey: .F .FOR .F90 .F95, -Cpp
+# NAGWare: .F .F90 .F95, .ff .ff90 .ff95 (new), -fpp for others
+# Compaq/Tru64: .F .F90, -cpp, -P keep .i file, -P keep .i file
+# f2c: .F, -cpp
+# g95: .F .FOR .F90 .F95 .F03, -cpp -no-cpp, -E for stdout
+AC_DEFUN([AC_FC_PP_SRCEXT],
+[AC_LANG_PUSH(Fortran)dnl
+AC_CACHE_CHECK([for Fortran flag to compile preprocessed .$1 files],
+ ac_cv_fc_pp_srcext_$1,
+[ac_ext=$1
+ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_pp_srcext_$1=unknown
+case $ac_ext in #(
+ [[fF]]77) ac_try=f77-cpp-input;; #(
+ *) ac_try=f95-cpp-input;;
+esac
+for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
+ -cpp -xpp=cpp -qsuffix=cpp=$1 "-x $ac_try" +cpp -Cpp; do
+ test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if 0
+#include <ac_nonexistent.h>
+ choke me
+#endif]])],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if 1
+#include <ac_nonexistent.h>
+ choke me
+#endif]])],
+ [],
+ [ac_cv_fc_pp_srcext_$1=$ac_flag; break])])
+done
+rm -f conftest.$ac_objext conftest.$1
+ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+])
+if test "x$ac_cv_fc_pp_srcext_$1" = xunknown; then
+ m4_default([$3],
+ [AC_MSG_ERROR([Fortran could not compile preprocessed .$1 files])])
+else
+ ac_fc_srcext=$1
+ if test "x$ac_cv_fc_pp_srcext_$1" = xnone; then
+ ac_fcflags_srcext=""
+ FCFLAGS_[]$1[]=""
+ else
+ ac_fcflags_srcext=$ac_cv_fc_pp_srcext_$1
+ FCFLAGS_[]$1[]=$ac_cv_fc_pp_srcext_$1
+ fi
+ AC_SUBST(FCFLAGS_[]$1)
+ $2
+fi
+AC_LANG_POP(Fortran)dnl
+])# AC_FC_PP_SRCEXT
+
+
+# AC_FC_PP_DEFINE([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# -------------------------------------------------------------------
+# Find a flag to specify defines for preprocessed Fortran. Not all
+# Fortran compilers use -D. Substitute FC_DEFINE with the result and
+# call ACTION-IF-SUCCESS (defaults to nothing) if successful, and
+# ACTION-IF-FAILURE (defaults to failing with an error message) if not.
+#
+# Known flags:
+# IBM: -WF,-D
+# Lahey/Fujitsu: -Wp,-D older versions???
+# f2c: -D or -Wc,-D
+# others: -D
+AC_DEFUN([AC_FC_PP_DEFINE],
+[AC_LANG_PUSH([Fortran])dnl
+ac_fc_pp_define_srcext_save=$ac_fc_srcext
+AC_FC_PP_SRCEXT([F])
+AC_CACHE_CHECK([how to define symbols for preprocessed Fortran],
+ [ac_cv_fc_pp_define],
+[ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_cv_fc_pp_define=unknown
+ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
+for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
+do
+ FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#ifndef FOOBAR
+ choke me
+#endif
+#if ZORK != 42
+ choke me
+#endif]])],
+ [ac_cv_fc_pp_define=$ac_flag])
+ test x"$ac_cv_fc_pp_define" != xunknown && break
+done
+FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
+])
+ac_fc_srcext=$ac_fc_pp_define_srcext_save
+if test "x$ac_cv_fc_pp_define" = xunknown; then
+ FC_DEFINE=
+ m4_default([$2],
+ [AC_MSG_ERROR([Fortran does not allow to define preprocessor symbols], 77)])
+else
+ FC_DEFINE=$ac_cv_fc_pp_define
+ $1
+fi
+AC_SUBST([FC_DEFINE])dnl
+AC_LANG_POP([Fortran])dnl
+])
+
+
+# AC_FC_FREEFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ------------------------------------------------------------------
+# Look for a compiler flag to make the Fortran (FC) compiler accept
+# free-format source code, and adds it to FCFLAGS. Call
+# ACTION-IF-SUCCESS (defaults to nothing) if successful (i.e. can
+# compile code using new extension) and ACTION-IF-FAILURE (defaults to
+# failing with an error message) if not. (Defined via DEFUN_ONCE to
+# prevent flag from being added to FCFLAGS multiple times.)
+#
+# The known flags are:
+# -ffree-form: GNU g77, gfortran, g95
+# -FR, -free: Intel compiler (icc, ecc, ifort)
+# -free: Compaq compiler (fort), Sun compiler (f95)
+# -qfree: IBM compiler (xlf)
+# -Mfree, -Mfreeform: Portland Group compiler
+# -freeform: SGI compiler
+# -8, -f free: Absoft Fortran
+# +source=free: HP Fortran
+# (-)-nfix, -Free: Lahey/Fujitsu Fortran
+# -free: NAGWare
+# -f, -Wf,-f: f2c (but only a weak form of "free-form" and long lines)
+# We try to test the "more popular" flags first, by some prejudiced
+# notion of popularity.
+AC_DEFUN_ONCE([AC_FC_FREEFORM],
+[AC_LANG_PUSH([Fortran])dnl
+AC_CACHE_CHECK([for Fortran flag needed to accept free-form source],
+ [ac_cv_fc_freeform],
+[ac_cv_fc_freeform=unknown
+ac_fc_freeform_FCFLAGS_save=$FCFLAGS
+for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \
+ -freeform "-f free" -8 +source=free -nfix --nfix -Free
+do
+ test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag"
+dnl Use @&t@ below to ensure that editors don't turn 8+ spaces into tab.
+ AC_COMPILE_IFELSE([[
+ program freeform
+ ! FIXME: how to best confuse non-freeform compilers?
+ print *, 'Hello ', &
+ @&t@ 'world.'
+ end]],
+ [ac_cv_fc_freeform=$ac_flag; break])
+done
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_freeform_FCFLAGS_save
+])
+if test "x$ac_cv_fc_freeform" = xunknown; then
+ m4_default([$2],
+ [AC_MSG_ERROR([Fortran does not accept free-form source], 77)])
+else
+ if test "x$ac_cv_fc_freeform" != xnone; then
+ FCFLAGS="$FCFLAGS $ac_cv_fc_freeform"
+ fi
+ $1
+fi
+AC_LANG_POP([Fortran])dnl
+])# AC_FC_FREEFORM
+
+
+# AC_FC_FIXEDFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ------------------------------------------------------------------
+# Look for a compiler flag to make the Fortran (FC) compiler accept
+# fixed-format source code, and adds it to FCFLAGS. Call
+# ACTION-IF-SUCCESS (defaults to nothing) if successful (i.e. can
+# compile code using new extension) and ACTION-IF-FAILURE (defaults to
+# failing with an error message) if not. (Defined via DEFUN_ONCE to
+# prevent flag from being added to FCFLAGS multiple times.)
+#
+# The known flags are:
+# -ffixed-form: GNU g77, gfortran, g95
+# -fixed: Intel compiler (ifort), Sun compiler (f95)
+# -qfixed: IBM compiler (xlf*)
+# -Mfixed: Portland Group compiler
+# -fixedform: SGI compiler
+# -f fixed: Absoft Fortran
+# +source=fixed: HP Fortran
+# (-)-fix, -Fixed: Lahey/Fujitsu Fortran
+# -fixed: NAGWare
+# Since compilers may accept fixed form based on file name extension,
+# but users may want to use it with others as well, call AC_FC_SRCEXT
+# with the respective source extension before calling this macro.
+AC_DEFUN_ONCE([AC_FC_FIXEDFORM],
+[AC_LANG_PUSH([Fortran])dnl
+AC_CACHE_CHECK([for Fortran flag needed to accept fixed-form source],
+ [ac_cv_fc_fixedform],
+[ac_cv_fc_fixedform=unknown
+ac_fc_fixedform_FCFLAGS_save=$FCFLAGS
+for ac_flag in none -ffixed-form -fixed -qfixed -Mfixed -fixedform "-f fixed" \
+ +source=fixed -fix --fix -Fixed
+do
+ test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_fixedform_FCFLAGS_save $ac_flag"
+ AC_COMPILE_IFELSE([[
+C This comment should confuse free-form compilers.
+ program main
+ end]],
+ [ac_cv_fc_fixedform=$ac_flag; break])
+done
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_fixedform_FCFLAGS_save
+])
+if test "x$ac_cv_fc_fixedform" = xunknown; then
+ m4_default([$2],
+ [AC_MSG_ERROR([Fortran does not accept fixed-form source], 77)])
+else
+ if test "x$ac_cv_fc_fixedform" != xnone; then
+ FCFLAGS="$FCFLAGS $ac_cv_fc_fixedform"
+ fi
+ $1
+fi
+AC_LANG_POP([Fortran])dnl
+])# AC_FC_FIXEDFORM
+
+
+# AC_FC_LINE_LENGTH([LENGTH], [ACTION-IF-SUCCESS],
+# [ACTION-IF-FAILURE = FAILURE])
+# ------------------------------------------------
+# Look for a compiler flag to make the Fortran (FC) compiler accept long lines
+# in the current (free- or fixed-format) source code, and adds it to FCFLAGS.
+# The optional LENGTH may be 80, 132 (default), or `unlimited' for longer
+# lines. Note that line lengths above 254 columns are not portable, and some
+# compilers (hello ifort) do not accept more than 132 columns at least for
+# fixed format. Call ACTION-IF-SUCCESS (defaults to nothing) if successful
+# (i.e. can compile code using new extension) and ACTION-IF-FAILURE (defaults
+# to failing with an error message) if not. (Defined via DEFUN_ONCE to
+# prevent flag from being added to FCFLAGS multiple times.)
+# You should call AC_FC_FREEFORM or AC_FC_FIXEDFORM to set the desired format
+# prior to using this macro.
+#
+# The known flags are:
+# -f{free,fixed}-line-length-N with N 72, 80, 132, or 0 or none for none.
+# -ffree-line-length-none: GNU gfortran
+# -ffree-line-length-huge: g95 (also -ffixed-line-length-N as above)
+# -qfixed=132 80 72: IBM compiler (xlf)
+# -Mextend: Cray
+# -132 -80 -72: Intel compiler (ifort)
+# Needs to come before -extend_source because ifort
+# accepts that as well with an optional parameter and
+# doesn't fail but only warns about unknown arguments.
+# -extend_source: SGI compiler
+# -W, -WNN (132, 80, 72): Absoft Fortran
+# +es, +extend_source: HP Fortran (254 in either form, default is 72 fixed,
+# 132 free)
+# -w, (-)-wide: Lahey/Fujitsu Fortran (255 cols in fixed form)
+# -e: Sun Fortran compiler (132 characters)
+# -132: NAGWare
+# -72, -f, -Wf,-f: f2c (a weak form of "free-form" and long lines).
+# /XLine: Open Watcom
+AC_DEFUN_ONCE([AC_FC_LINE_LENGTH],
+[AC_LANG_PUSH([Fortran])dnl
+m4_case(m4_default([$1], [132]),
+ [unlimited], [ac_fc_line_len_string=unlimited
+ ac_fc_line_len=0
+ ac_fc_line_length_test='
+ subroutine longer_than_132(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,'\
+'arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19)'],
+ [132], [ac_fc_line_len=132
+ ac_fc_line_length_test='
+ subroutine longer_than_80(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,'\
+'arg10)'],
+ [80], [ac_fc_line_len=80
+ ac_fc_line_length_test='
+ subroutine longer_than_72(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9)'],
+ [m4_warning([Invalid length argument `$1'])])
+: ${ac_fc_line_len_string=$ac_fc_line_len}
+AC_CACHE_CHECK(
+[for Fortran flag needed to accept $ac_fc_line_len_string column source lines],
+ [ac_cv_fc_line_length],
+[ac_cv_fc_line_length=unknown
+ac_fc_line_length_FCFLAGS_save=$FCFLAGS
+for ac_flag in none \
+ -ffree-line-length-none -ffixed-line-length-none \
+ -ffree-line-length-huge \
+ -ffree-line-length-$ac_fc_line_len \
+ -ffixed-line-length-$ac_fc_line_len \
+ -qfixed=$ac_fc_line_len -Mextend \
+ -$ac_fc_line_len -extend_source \
+ -W$ac_fc_line_len -W +extend_source +es -wide --wide -w -e \
+ -f -Wf,-f -xline
+do
+ test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_line_length_FCFLAGS_save $ac_flag"
+ AC_COMPILE_IFELSE([[$ac_fc_line_length_test
+ end subroutine]],
+ [ac_cv_fc_line_length=$ac_flag; break])
+done
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_line_length_FCFLAGS_save
+])
+if test "x$ac_cv_fc_line_length" = xunknown; then
+ m4_default([$3],
+ [AC_MSG_ERROR([Fortran does not accept long source lines], 77)])
+else
+ if test "x$ac_cv_fc_line_length" != xnone; then
+ FCFLAGS="$FCFLAGS $ac_cv_fc_line_length"
+ fi
+ $2
+fi
+AC_LANG_POP([Fortran])dnl
+])# AC_FC_LINE_LENGTH
+
+
+# AC_FC_CHECK_BOUNDS([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ----------------------------------------------------------------------
+# Look for a compiler flag to turn on array bounds checking for the
+# Fortran (FC) compiler, and adds it to FCFLAGS. Call
+# ACTION-IF-SUCCESS (defaults to nothing) if successful (i.e. can
+# compile code using new extension) and ACTION-IF-FAILURE (defaults to
+# failing with an error message) if not. (Defined via DEFUN_ONCE to
+# prevent flag from being added to FCFLAGS multiple times.)
+#
+# The known flags are:
+# -fcheck=all, -fbounds-check: gfortran
+# -fbounds-check: g77, g95
+# -CB, -check bounds: Intel compiler (icc, ecc, ifort)
+# -C: Sun/Oracle compiler (f95)
+# -C, -qcheck: IBM compiler (xlf)
+# -Mbounds: Portland Group compiler
+# -C ,-Mbounds: Cray
+# -C, -check_bounds: SGI compiler
+# -check_bounds, +check=all: HP Fortran
+# -C, -Rb -Rc: Absoft (-Rb: array boundaries, -Rc: array conformance)
+# --chk e,s -chk (e,s): Lahey
+# -C -C=all: NAGWare
+# -C, -ffortran-bounds-check: PathScale pathf90
+# -C: f2c
+# -BOunds: Open Watcom
+AC_DEFUN_ONCE([AC_FC_CHECK_BOUNDS],
+[AC_LANG_PUSH([Fortran])dnl
+AC_CACHE_CHECK([for Fortran flag to enable array-bounds checking],
+ [ac_cv_fc_check_bounds],
+[ac_cv_fc_check_bounds=unknown
+ac_fc_check_bounds_FCFLAGS_save=$FCFLAGS
+for ac_flag in -fcheck=bounds -fbounds-check -check_bounds -Mbounds -qcheck \
+ '-check bounds' +check=all --check '-Rb -Rc' -CB -C=all -C \
+ -ffortran-bounds-check "--chk e,s" "-chk e -chk s" -bounds
+do
+ FCFLAGS="$ac_fc_check_bounds_FCFLAGS_save $ac_flag"
+ # We should be able to link a correct program.
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [AC_LINK_IFELSE([[
+ subroutine sub(a)
+ integer a(:)
+ a(8) = 0
+ end subroutine
+
+ program main
+ integer a(1:7)
+ interface
+ subroutine sub(a)
+ integer a(:)
+ end subroutine
+ end interface
+
+ call sub(a)
+ end program]],
+ [# If we can run the program, require failure at run time.
+ # In cross-compiling mode, we rely on the compiler not accepting
+ # unknown options.
+ AS_IF([test "$cross_compiling" = yes],
+ [ac_cv_fc_check_bounds=$ac_flag; break],
+ [AS_IF([_AC_DO_TOKENS(./conftest$ac_exeext)],
+ [],
+ [ac_cv_fc_check_bounds=$ac_flag; break])])])])
+done
+rm -f conftest$ac_exeext conftest.err conftest.$ac_objext conftest.$ac_ext \
+ core *.core core.conftest.*
+FCFLAGS=$ac_fc_check_bounds_FCFLAGS_save
+])
+if test "x$ac_cv_fc_check_bounds" = xunknown; then
+ m4_default([$2],
+ [AC_MSG_ERROR([no Fortran flag for bounds checking found], 77)])
+else
+ if test "x$ac_cv_fc_check_bounds" != xnone; then
+ FCFLAGS="$FCFLAGS $ac_cv_fc_check_bounds"
+ fi
+ $1
+fi
+AC_LANG_POP([Fortran])dnl
+])# AC_FC_CHECK_BOUNDS
+
+
+# _AC_FC_IMPLICIT_NONE([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ------------------------------------------------------------------------
+# Look for a flag to disallow implicit declarations, and add it to FCFLAGS.
+# Call ACTION-IF-SUCCESS (defaults to nothing) if successful and
+# ACTION-IF-FAILURE (defaults to failing with an error message) if not.
+#
+# Known flags:
+# GNU gfortran, g95: -fimplicit-none, g77: -Wimplicit
+# Intel: -u, -implicitnone; might also need '-warn errors' to turn into error.
+# Sun/Oracle: -u
+# HP: +implicit_none
+# IBM: -u, -qundef
+# SGI: -u
+# Compaq: -u, -warn declarations
+# NAGWare: -u
+# Lahey: -in, --in, -AT
+# Cray: -Mdclchk -e I
+# PGI: -Mcdlchk
+# f2c: -u
+AC_DEFUN([_AC_FC_IMPLICIT_NONE],
+[_AC_FORTRAN_ASSERT()dnl
+AC_CACHE_CHECK([for flag to disallow _AC_LANG implicit declarations],
+ [ac_cv_[]_AC_LANG_ABBREV[]_implicit_none],
+[ac_cv_[]_AC_LANG_ABBREV[]_implicit_none=unknown
+ac_fc_implicit_none_[]_AC_LANG_PREFIX[]FLAGS_save=$[]_AC_LANG_PREFIX[]FLAGS
+for ac_flag in none -fimplicit-none -u -Wimplicit -implicitnone +implicit_none \
+ -qundef "-warn declarations" -in --in -AT "-e I" -Mdclchk \
+ "-u -warn errors"
+do
+ if test "x$ac_flag" != xnone; then
+ _AC_LANG_PREFIX[]FLAGS="$ac_fc_implicit_none_[]_AC_LANG_PREFIX[]FLAGS_save $ac_flag"
+ fi
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+ i = 0
+ print *, i]])],
+ [],
+ [ac_cv_[]_AC_LANG_ABBREV[]_implicit_none=$ac_flag; break])])
+done
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+_AC_LANG_PREFIX[]FLAGS=$ac_fc_implicit_none_[]_AC_LANG_PREFIX[]FLAGS_save
+])
+if test "x$ac_cv_[]_AC_LANG_ABBREV[]_implicit_none" = xunknown; then
+ m4_default([$3],
+ [AC_MSG_ERROR([no Fortran flag to disallow implicit declarations found], 77)])
+else
+ if test "x$ac_cv_[]_AC_LANG_ABBREV[]_implicit_none" != xnone; then
+ _AC_LANG_PREFIX[]FLAGS="$_AC_LANG_PREFIX[]FLAGS $ac_cv_[]_AC_LANG_ABBREV[]_implicit_none"
+ fi
+ $2
+fi
+])# _AC_FC_IMPLICIT_NONE
+
+
+# AC_F77_IMPLICIT_NONE([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ------------------------------------------------------------------------
+AC_DEFUN([AC_F77_IMPLICIT_NONE],
+[AC_LANG_PUSH([Fortran 77])dnl
+_AC_FC_IMPLICIT_NONE($@)
+AC_LANG_POP([Fortran 77])dnl
+])# AC_F77_IMPLICIT_NONE
+
+
+# AC_FC_IMPLICIT_NONE([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# -----------------------------------------------------------------------
+AC_DEFUN([AC_FC_IMPLICIT_NONE],
+[AC_LANG_PUSH([Fortran])dnl
+_AC_FC_IMPLICIT_NONE($@)
+AC_LANG_POP([Fortran])dnl
+])# AC_FC_IMPLICIT_NONE
+
+
+# AC_FC_MODULE_EXTENSION
+# ----------------------
+# Find the Fortran 90 module file extension. The module extension is stored
+# in the variable FC_MODEXT and empty if it cannot be determined. The result
+# or "unknown" is cached in the cache variable ac_cv_fc_module_ext.
+AC_DEFUN([AC_FC_MODULE_EXTENSION],
+[AC_CACHE_CHECK([Fortran 90 module extension], [ac_cv_fc_module_ext],
+[AC_LANG_PUSH(Fortran)
+mkdir conftest.dir
+cd conftest.dir
+ac_cv_fc_module_ext=unknown
+AC_COMPILE_IFELSE([[
+ module conftest_module
+ contains
+ subroutine conftest_routine
+ write(*,'(a)') 'gotcha!'
+ end subroutine
+ end module]],
+ [ac_cv_fc_module_ext=`ls | sed -n 's,conftest_module\.,,p'`
+ if test x$ac_cv_fc_module_ext = x; then
+dnl Some F90 compilers use upper case characters for the module file name.
+ ac_cv_fc_module_ext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'`
+ fi])
+cd ..
+rm -rf conftest.dir
+AC_LANG_POP(Fortran)
+])
+FC_MODEXT=$ac_cv_fc_module_ext
+if test "$FC_MODEXT" = unknown; then
+ FC_MODEXT=
+fi
+AC_SUBST([FC_MODEXT])dnl
+])
+
+
+# AC_FC_MODULE_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ---------------------------------------------------------------------
+# Find a flag to include Fortran 90 modules from another directory.
+# If successful, run ACTION-IF-SUCCESS (defaults to nothing), otherwise
+# run ACTION-IF-FAILURE (defaults to failing with an error message).
+# The module flag is cached in the ac_cv_fc_module_flag variable.
+# It may contain significant trailing whitespace.
+#
+# Known flags:
+# gfortran: -Idir, -I dir (-M dir, -Mdir (deprecated), -Jdir for writing)
+# g95: -I dir (-fmod=dir for writing)
+# SUN: -Mdir, -M dir (-moddir=dir for writing;
+# -Idir for includes is also searched)
+# HP: -Idir, -I dir (+moddir=dir for writing)
+# IBM: -Idir (-qmoddir=dir for writing)
+# Intel: -Idir -I dir (-mod dir for writing)
+# Absoft: -pdir
+# Lahey: -mod dir
+# Cray: -module dir, -p dir (-J dir for writing)
+# -e m is needed to enable writing .mod files at all
+# Compaq: -Idir
+# NAGWare: -I dir
+# PathScale: -I dir (but -module dir is looked at first)
+# Portland: -module dir (first -module also names dir for writing)
+# Fujitsu: -Am -Idir (-Mdir for writing is searched first, then '.', then -I)
+# (-Am indicates how module information is saved)
+AC_DEFUN([AC_FC_MODULE_FLAG],[
+AC_CACHE_CHECK([Fortran 90 module inclusion flag], [ac_cv_fc_module_flag],
+[AC_LANG_PUSH([Fortran])
+ac_cv_fc_module_flag=unknown
+mkdir conftest.dir
+cd conftest.dir
+AC_COMPILE_IFELSE([[
+ module conftest_module
+ contains
+ subroutine conftest_routine
+ write(*,'(a)') 'gotcha!'
+ end subroutine
+ end module]],
+ [cd ..
+ ac_fc_module_flag_FCFLAGS_save=$FCFLAGS
+ # Flag ordering is significant for gfortran and Sun.
+ for ac_flag in -M -I '-I ' '-M ' -p '-mod ' '-module ' '-Am -I'; do
+ # Add the flag twice to prevent matching an output flag.
+ FCFLAGS="$ac_fc_module_flag_FCFLAGS_save ${ac_flag}conftest.dir ${ac_flag}conftest.dir"
+ AC_COMPILE_IFELSE([[
+ program main
+ use conftest_module
+ call conftest_routine
+ end program]],
+ [ac_cv_fc_module_flag="$ac_flag"])
+ if test "$ac_cv_fc_module_flag" != unknown; then
+ break
+ fi
+ done
+ FCFLAGS=$ac_fc_module_flag_FCFLAGS_save
+])
+rm -rf conftest.dir
+AC_LANG_POP([Fortran])
+])
+if test "$ac_cv_fc_module_flag" != unknown; then
+ FC_MODINC=$ac_cv_fc_module_flag
+ $1
+else
+ FC_MODINC=
+ m4_default([$2],
+ [AC_MSG_ERROR([unable to find compiler flag for module search path])])
+fi
+AC_SUBST([FC_MODINC])
+# Ensure trailing whitespace is preserved in a Makefile.
+AC_SUBST([ac_empty], [""])
+AC_CONFIG_COMMANDS_PRE([case $FC_MODINC in #(
+ *\ ) FC_MODINC=$FC_MODINC'${ac_empty}' ;;
+esac])dnl
+])
+
+
+# AC_FC_MODULE_OUTPUT_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ----------------------------------------------------------------------------
+# Find a flag to write Fortran 90 module information to another directory.
+# If successful, run ACTION-IF-SUCCESS (defaults to nothing), otherwise
+# run ACTION-IF-FAILURE (defaults to failing with an error message).
+# The module flag is cached in the ac_cv_fc_module_output_flag variable.
+# It may contain significant trailing whitespace.
+#
+# For known flags, see the documentation of AC_FC_MODULE_FLAG above.
+AC_DEFUN([AC_FC_MODULE_OUTPUT_FLAG],[
+AC_CACHE_CHECK([Fortran 90 module output flag], [ac_cv_fc_module_output_flag],
+[AC_LANG_PUSH([Fortran])
+mkdir conftest.dir conftest.dir/sub
+cd conftest.dir
+ac_cv_fc_module_output_flag=unknown
+ac_fc_module_output_flag_FCFLAGS_save=$FCFLAGS
+# Flag ordering is significant: put flags late which some compilers use
+# for the search path.
+for ac_flag in -J '-J ' -fmod= -moddir= +moddir= -qmoddir= '-mod ' \
+ '-module ' -M '-Am -M' '-e m -J '; do
+ FCFLAGS="$ac_fc_module_output_flag_FCFLAGS_save ${ac_flag}sub"
+ AC_COMPILE_IFELSE([[
+ module conftest_module
+ contains
+ subroutine conftest_routine
+ write(*,'(a)') 'gotcha!'
+ end subroutine
+ end module]],
+ [cd sub
+ AC_COMPILE_IFELSE([[
+ program main
+ use conftest_module
+ call conftest_routine
+ end program]],
+ [ac_cv_fc_module_output_flag="$ac_flag"])
+ cd ..
+ if test "$ac_cv_fc_module_output_flag" != unknown; then
+ break
+ fi])
+done
+FCFLAGS=$ac_fc_module_output_flag_FCFLAGS_save
+cd ..
+rm -rf conftest.dir
+AC_LANG_POP([Fortran])
+])
+if test "$ac_cv_fc_module_output_flag" != unknown; then
+ FC_MODOUT=$ac_cv_fc_module_output_flag
+ $1
+else
+ FC_MODOUT=
+ m4_default([$2],
+ [AC_MSG_ERROR([unable to find compiler flag to write module information to])])
+fi
+AC_SUBST([FC_MODOUT])
+# Ensure trailing whitespace is preserved in a Makefile.
+AC_SUBST([ac_empty], [""])
+AC_CONFIG_COMMANDS_PRE([case $FC_MODOUT in #(
+ *\ ) FC_MODOUT=$FC_MODOUT'${ac_empty}' ;;
+esac])dnl
+])
diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4
new file mode 100644
index 0000000..6f21fd5
--- /dev/null
+++ b/lib/autoconf/functions.m4
@@ -0,0 +1,2030 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Checking for functions.
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# Table of contents
+#
+# 1. Generic tests for functions.
+# 2. Functions to check with AC_CHECK_FUNCS
+# 3. Tests for specific functions.
+
+
+## -------------------------------- ##
+## 1. Generic tests for functions. ##
+## -------------------------------- ##
+
+# _AC_CHECK_FUNC_BODY
+# -------------------
+# Shell function body for AC_CHECK_FUNC.
+m4_define([_AC_CHECK_FUNC_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for $[]2], [$[]3],
+ [AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY($[]2)],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [no])])])
+ AS_LINENO_POP
+])# _AC_CHECK_FUNC_BODY
+
+
+# AC_CHECK_FUNC(FUNCTION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------------------------------------------------------------
+# Check whether FUNCTION links in the current language. Set the cache
+# variable ac_cv_func_FUNCTION accordingly, then execute
+# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND.
+AC_DEFUN([AC_CHECK_FUNC],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_func],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_func],
+ [LINENO FUNC VAR],
+ [Tests whether FUNC exists, setting the cache variable VAR accordingly])],
+ [_$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_func "$LINENO" "$1" "ac_var"
+AS_VAR_IF([ac_var], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_var])])# AC_CHECK_FUNC
+
+
+# _AH_CHECK_FUNC(FUNCTION)
+# ------------------------
+# Prepare the autoheader snippet for FUNCTION.
+m4_define([_AH_CHECK_FUNC],
+[AH_TEMPLATE(AS_TR_CPP([HAVE_$1]),
+ [Define to 1 if you have the `$1' function.])])
+
+
+# AC_CHECK_FUNCS(FUNCTION..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------
+# Check for each whitespace-separated FUNCTION, and perform
+# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND for each function.
+# Additionally, make the preprocessor definition HAVE_FUNCTION
+# available for each found function. Either ACTION may include
+# `break' to stop the search.
+AC_DEFUN([AC_CHECK_FUNCS],
+[m4_map_args_w([$1], [_AH_CHECK_FUNC(], [)])]dnl
+[AS_FOR([AC_func], [ac_func], [$1],
+[AC_CHECK_FUNC(AC_func,
+ [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_func)) $2],
+ [$3])dnl])
+])# AC_CHECK_FUNCS
+
+
+# _AC_CHECK_FUNC_ONCE(FUNCTION)
+# -----------------------------
+# Check for a single FUNCTION once.
+m4_define([_AC_CHECK_FUNC_ONCE],
+[_AH_CHECK_FUNC([$1])AC_DEFUN([_AC_Func_$1],
+ [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_func_list], [" $1"])])
+_AC_FUNCS_EXPANSION])AC_REQUIRE([_AC_Func_$1])])
+
+# AC_CHECK_FUNCS_ONCE(FUNCTION...)
+# --------------------------------
+# Add each whitespace-separated name in FUNCTION to the list of functions
+# to check once.
+AC_DEFUN([AC_CHECK_FUNCS_ONCE],
+[m4_map_args_w([$1], [_AC_CHECK_FUNC_ONCE(], [)])])
+
+m4_define([_AC_FUNCS_EXPANSION],
+[
+ m4_divert_text([DEFAULTS], [ac_func_list=])
+ AC_CHECK_FUNCS([$ac_func_list])
+ m4_define([_AC_FUNCS_EXPANSION], [])
+])
+
+
+# _AC_REPLACE_FUNC(FUNCTION)
+# --------------------------
+# If FUNCTION exists, define HAVE_FUNCTION; else add FUNCTION.c
+# to the list of library objects. FUNCTION must be literal.
+m4_define([_AC_REPLACE_FUNC],
+[AC_CHECK_FUNC([$1],
+ [_AH_CHECK_FUNC([$1])AC_DEFINE(AS_TR_CPP([HAVE_$1]))],
+ [_AC_LIBOBJ([$1])AC_LIBSOURCE([$1.c])])])
+
+# AC_REPLACE_FUNCS(FUNCTION...)
+# -----------------------------
+# For each FUNCTION in the whitespace separated list, perform the
+# equivalent of AC_CHECK_FUNC, then call AC_LIBOBJ if the function
+# was not found.
+AC_DEFUN([AC_REPLACE_FUNCS],
+[_$0(m4_flatten([$1]))])
+
+m4_define([_AC_REPLACE_FUNCS],
+[AS_LITERAL_IF([$1],
+[m4_map_args_w([$1], [_AC_REPLACE_FUNC(], [)
+])],
+[AC_CHECK_FUNCS([$1],
+ [_AH_CHECK_FUNC([$ac_func])],
+ [_AC_LIBOBJ([$ac_func])])])])
+
+
+# AC_TRY_LINK_FUNC(FUNC, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
+# ------------------------------------------------------------
+# Try to link a program that calls FUNC, handling GCC builtins. If
+# the link succeeds, execute ACTION-IF-FOUND; otherwise, execute
+# ACTION-IF-NOT-FOUND.
+AC_DEFUN([AC_TRY_LINK_FUNC],
+[AC_LINK_IFELSE([AC_LANG_CALL([], [$1])], [$2], [$3])])
+
+
+# AU::AC_FUNC_CHECK
+# -----------------
+AU_ALIAS([AC_FUNC_CHECK], [AC_CHECK_FUNC])
+
+
+# AU::AC_HAVE_FUNCS
+# -----------------
+AU_ALIAS([AC_HAVE_FUNCS], [AC_CHECK_FUNCS])
+
+
+
+
+## ------------------------------------------- ##
+## 2. Functions to check with AC_CHECK_FUNCS. ##
+## ------------------------------------------- ##
+
+AN_FUNCTION([__argz_count], [AC_CHECK_FUNCS])
+AN_FUNCTION([__argz_next], [AC_CHECK_FUNCS])
+AN_FUNCTION([__argz_stringify], [AC_CHECK_FUNCS])
+AN_FUNCTION([__fpending], [AC_CHECK_FUNCS])
+AN_FUNCTION([acl], [AC_CHECK_FUNCS])
+AN_FUNCTION([alarm], [AC_CHECK_FUNCS])
+AN_FUNCTION([atexit], [AC_CHECK_FUNCS])
+AN_FUNCTION([btowc], [AC_CHECK_FUNCS])
+AN_FUNCTION([bzero], [AC_CHECK_FUNCS])
+AN_FUNCTION([clock_gettime], [AC_CHECK_FUNCS])
+AN_FUNCTION([doprnt], [AC_CHECK_FUNCS])
+AN_FUNCTION([dup2], [AC_CHECK_FUNCS])
+AN_FUNCTION([endgrent], [AC_CHECK_FUNCS])
+AN_FUNCTION([endpwent], [AC_CHECK_FUNCS])
+AN_FUNCTION([euidaccess], [AC_CHECK_FUNCS])
+AN_FUNCTION([fchdir], [AC_CHECK_FUNCS])
+AN_FUNCTION([fdatasync], [AC_CHECK_FUNCS])
+AN_FUNCTION([fesetround], [AC_CHECK_FUNCS])
+AN_FUNCTION([floor], [AC_CHECK_FUNCS])
+AN_FUNCTION([fs_stat_dev], [AC_CHECK_FUNCS])
+AN_FUNCTION([ftime], [AC_CHECK_FUNCS])
+AN_FUNCTION([ftruncate], [AC_CHECK_FUNCS])
+AN_FUNCTION([getcwd], [AC_CHECK_FUNCS])
+AN_FUNCTION([getdelim], [AC_CHECK_FUNCS])
+AN_FUNCTION([gethostbyaddr], [AC_CHECK_FUNCS])
+AN_FUNCTION([gethostbyname], [AC_CHECK_FUNCS])
+AN_FUNCTION([gethostname], [AC_CHECK_FUNCS])
+AN_FUNCTION([gethrtime], [AC_CHECK_FUNCS])
+AN_FUNCTION([getmntent], [AC_CHECK_FUNCS])
+AN_FUNCTION([getmntinfo], [AC_CHECK_FUNCS])
+AN_FUNCTION([getpagesize], [AC_CHECK_FUNCS])
+AN_FUNCTION([getpass], [AC_CHECK_FUNCS])
+AN_FUNCTION([getspnam], [AC_CHECK_FUNCS])
+AN_FUNCTION([gettimeofday], [AC_CHECK_FUNCS])
+AN_FUNCTION([getusershell], [AC_CHECK_FUNCS])
+AN_FUNCTION([hasmntopt], [AC_CHECK_FUNCS])
+AN_FUNCTION([inet_ntoa], [AC_CHECK_FUNCS])
+AN_FUNCTION([isascii], [AC_CHECK_FUNCS])
+AN_FUNCTION([iswprint], [AC_CHECK_FUNCS])
+AN_FUNCTION([lchown], [AC_CHECK_FUNCS])
+AN_FUNCTION([listmntent], [AC_CHECK_FUNCS])
+AN_FUNCTION([localeconv], [AC_CHECK_FUNCS])
+AN_FUNCTION([localtime_r], [AC_CHECK_FUNCS])
+AN_FUNCTION([mblen], [AC_CHECK_FUNCS])
+AN_FUNCTION([mbrlen], [AC_CHECK_FUNCS])
+AN_FUNCTION([memchr], [AC_CHECK_FUNCS])
+AN_FUNCTION([memmove], [AC_CHECK_FUNCS])
+AN_FUNCTION([mempcpy], [AC_CHECK_FUNCS])
+AN_FUNCTION([memset], [AC_CHECK_FUNCS])
+AN_FUNCTION([mkdir], [AC_CHECK_FUNCS])
+AN_FUNCTION([mkfifo], [AC_CHECK_FUNCS])
+AN_FUNCTION([modf], [AC_CHECK_FUNCS])
+AN_FUNCTION([munmap], [AC_CHECK_FUNCS])
+AN_FUNCTION([next_dev], [AC_CHECK_FUNCS])
+AN_FUNCTION([nl_langinfo], [AC_CHECK_FUNCS])
+AN_FUNCTION([pathconf], [AC_CHECK_FUNCS])
+AN_FUNCTION([pow], [AC_CHECK_FUNCS])
+AN_FUNCTION([pstat_getdynamic], [AC_CHECK_FUNCS])
+AN_FUNCTION([putenv], [AC_CHECK_FUNCS])
+AN_FUNCTION([re_comp], [AC_CHECK_FUNCS])
+AN_FUNCTION([realpath], [AC_CHECK_FUNCS])
+AN_FUNCTION([regcmp], [AC_CHECK_FUNCS])
+AN_FUNCTION([regcomp], [AC_CHECK_FUNCS])
+AN_FUNCTION([resolvepath], [AC_CHECK_FUNCS])
+AN_FUNCTION([rint], [AC_CHECK_FUNCS])
+AN_FUNCTION([rmdir], [AC_CHECK_FUNCS])
+AN_FUNCTION([rpmatch], [AC_CHECK_FUNCS])
+AN_FUNCTION([select], [AC_CHECK_FUNCS])
+AN_FUNCTION([setenv], [AC_CHECK_FUNCS])
+AN_FUNCTION([sethostname], [AC_CHECK_FUNCS])
+AN_FUNCTION([setlocale], [AC_CHECK_FUNCS])
+AN_FUNCTION([socket], [AC_CHECK_FUNCS])
+AN_FUNCTION([sqrt], [AC_CHECK_FUNCS])
+AN_FUNCTION([stime], [AC_CHECK_FUNCS])
+AN_FUNCTION([stpcpy], [AC_CHECK_FUNCS])
+AN_FUNCTION([strcasecmp], [AC_CHECK_FUNCS])
+AN_FUNCTION([strchr], [AC_CHECK_FUNCS])
+AN_FUNCTION([strcspn], [AC_CHECK_FUNCS])
+AN_FUNCTION([strdup], [AC_CHECK_FUNCS])
+AN_FUNCTION([strerror], [AC_CHECK_FUNCS])
+AN_FUNCTION([strncasecmp], [AC_CHECK_FUNCS])
+AN_FUNCTION([strndup], [AC_CHECK_FUNCS])
+AN_FUNCTION([strpbrk], [AC_CHECK_FUNCS])
+AN_FUNCTION([strrchr], [AC_CHECK_FUNCS])
+AN_FUNCTION([strspn], [AC_CHECK_FUNCS])
+AN_FUNCTION([strstr], [AC_CHECK_FUNCS])
+AN_FUNCTION([strtol], [AC_CHECK_FUNCS])
+AN_FUNCTION([strtoul], [AC_CHECK_FUNCS])
+AN_FUNCTION([strtoull], [AC_CHECK_FUNCS])
+AN_FUNCTION([strtoumax], [AC_CHECK_FUNCS])
+AN_FUNCTION([strverscmp], [AC_CHECK_FUNCS])
+AN_FUNCTION([sysinfo], [AC_CHECK_FUNCS])
+AN_FUNCTION([tzset], [AC_CHECK_FUNCS])
+AN_FUNCTION([uname], [AC_CHECK_FUNCS])
+AN_FUNCTION([utime], [AC_CHECK_FUNCS])
+AN_FUNCTION([utmpname], [AC_CHECK_FUNCS])
+AN_FUNCTION([utmpxname], [AC_CHECK_FUNCS])
+AN_FUNCTION([wcwidth], [AC_CHECK_FUNCS])
+
+
+AN_FUNCTION([dcgettext], [AM_GNU_GETTEXT])
+AN_FUNCTION([getwd], [warn: getwd is deprecated, use getcwd instead])
+
+
+## --------------------------------- ##
+## 3. Tests for specific functions. ##
+## --------------------------------- ##
+
+
+# The macros are sorted:
+#
+# 1. AC_FUNC_* macros are sorted by alphabetical order.
+#
+# 2. Helping macros such as _AC_LIBOBJ_* are before the macro that
+# uses it.
+#
+# 3. Obsolete macros are right after the modern macro.
+
+
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of `alloca'. Well, not exactly
+# AC_LIBOBJ since we actually set the output variable `ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using `alloca.c'.])
+
+AC_CACHE_CHECK(whether `alloca.c' needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+ for ac_func in _getb67 GETB67 getb67; do
+ AC_CHECK_FUNC($ac_func,
+ [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
+ [Define to one of `_getb67', `GETB67',
+ `getb67' for Cray-2 and Cray-YMP
+ systems. This function is required for
+ `alloca.c' support on those systems.])
+ break])
+ done
+fi
+
+AC_CACHE_CHECK([stack direction for C alloca],
+ [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+ return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+ [ac_cv_c_stack_direction=1],
+ [ac_cv_c_stack_direction=-1],
+ [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([STACK_DIRECTION],
+[/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+@%:@undef STACK_DIRECTION])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+
+
+# AC_FUNC_ALLOCA
+# --------------
+AN_FUNCTION([alloca], [AC_FUNC_ALLOCA])
+AN_HEADER([alloca.h], [AC_FUNC_ALLOCA])
+AC_DEFUN([AC_FUNC_ALLOCA],
+[AC_REQUIRE([AC_TYPE_SIZE_T])]dnl
+[# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+AC_CACHE_CHECK([for working alloca.h], ac_cv_working_alloca_h,
+[AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[@%:@include <alloca.h>]],
+ [[char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;]])],
+ [ac_cv_working_alloca_h=yes],
+ [ac_cv_working_alloca_h=no])])
+if test $ac_cv_working_alloca_h = yes; then
+ AC_DEFINE(HAVE_ALLOCA_H, 1,
+ [Define to 1 if you have <alloca.h> and it should be used
+ (not on Ultrix).])
+fi
+
+AC_CACHE_CHECK([for alloca], ac_cv_func_alloca_works,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM(
+[[#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef _AIX
+ #pragma alloca
+# else
+# ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+# endif
+# endif
+# endif
+# endif
+#endif
+]], [[char *p = (char *) alloca (1);
+ if (p) return 0;]])],
+ [ac_cv_func_alloca_works=yes],
+ [ac_cv_func_alloca_works=no])])
+
+if test $ac_cv_func_alloca_works = yes; then
+ AC_DEFINE(HAVE_ALLOCA, 1,
+ [Define to 1 if you have `alloca', as a function or macro.])
+else
+ _AC_LIBOBJ_ALLOCA
+fi
+])# AC_FUNC_ALLOCA
+
+
+# AU::AC_ALLOCA
+# -------------
+AU_ALIAS([AC_ALLOCA], [AC_FUNC_ALLOCA])
+
+
+# AC_FUNC_CHOWN
+# -------------
+# Determine whether chown accepts arguments of -1 for uid and gid.
+AN_FUNCTION([chown], [AC_FUNC_CHOWN])
+AC_DEFUN([AC_FUNC_CHOWN],
+[AC_REQUIRE([AC_TYPE_UID_T])dnl
+AC_CHECK_HEADERS(unistd.h)
+AC_CACHE_CHECK([for working chown], ac_cv_func_chown_works,
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+#include <fcntl.h>
+],
+[[ char *f = "conftest.chown";
+ struct stat before, after;
+
+ if (creat (f, 0600) < 0)
+ return 1;
+ if (stat (f, &before) < 0)
+ return 1;
+ if (chown (f, (uid_t) -1, (gid_t) -1) == -1)
+ return 1;
+ if (stat (f, &after) < 0)
+ return 1;
+ return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid);
+]])],
+ [ac_cv_func_chown_works=yes],
+ [ac_cv_func_chown_works=no],
+ [ac_cv_func_chown_works=no])
+rm -f conftest.chown
+])
+if test $ac_cv_func_chown_works = yes; then
+ AC_DEFINE(HAVE_CHOWN, 1,
+ [Define to 1 if your system has a working `chown' function.])
+fi
+])# AC_FUNC_CHOWN
+
+
+# AC_FUNC_CLOSEDIR_VOID
+# ---------------------
+# Check whether closedir returns void, and #define CLOSEDIR_VOID in
+# that case.
+AC_DEFUN([AC_FUNC_CLOSEDIR_VOID],
+[AC_REQUIRE([AC_HEADER_DIRENT])dnl
+AC_CACHE_CHECK([whether closedir returns void],
+ [ac_cv_func_closedir_void],
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+#include <$ac_header_dirent>
+#ifndef __cplusplus
+int closedir ();
+#endif
+],
+ [[return closedir (opendir (".")) != 0;]])],
+ [ac_cv_func_closedir_void=no],
+ [ac_cv_func_closedir_void=yes],
+ [ac_cv_func_closedir_void=yes])])
+if test $ac_cv_func_closedir_void = yes; then
+ AC_DEFINE(CLOSEDIR_VOID, 1,
+ [Define to 1 if the `closedir' function returns void instead
+ of `int'.])
+fi
+])
+
+
+# AC_FUNC_ERROR_AT_LINE
+# ---------------------
+AN_FUNCTION([error], [AC_FUNC_ERROR_AT_LINE])
+AN_FUNCTION([error_at_line], [AC_FUNC_ERROR_AT_LINE])
+AC_DEFUN([AC_FUNC_ERROR_AT_LINE],
+[AC_LIBSOURCES([error.h, error.c])dnl
+AC_CACHE_CHECK([for error_at_line], ac_cv_lib_error_at_line,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <error.h>],
+ [error_at_line (0, 0, "", 0, "an error occurred");])],
+ [ac_cv_lib_error_at_line=yes],
+ [ac_cv_lib_error_at_line=no])])
+if test $ac_cv_lib_error_at_line = no; then
+ AC_LIBOBJ(error)
+fi
+])
+
+
+# AU::AM_FUNC_ERROR_AT_LINE
+# -------------------------
+AU_ALIAS([AM_FUNC_ERROR_AT_LINE], [AC_FUNC_ERROR_AT_LINE])
+
+
+# _AC_FUNC_FNMATCH_IF(STANDARD = GNU | POSIX, CACHE_VAR, IF-TRUE, IF-FALSE)
+# -------------------------------------------------------------------------
+# If a STANDARD compliant fnmatch is found, run IF-TRUE, otherwise
+# IF-FALSE. Use CACHE_VAR.
+AC_DEFUN([_AC_FUNC_FNMATCH_IF],
+[AC_CACHE_CHECK(
+ [for working $1 fnmatch],
+ [$2],
+ [# Some versions of Solaris, SCO, and the GNU C Library
+ # have a broken or incompatible fnmatch.
+ # So we run a test program. If we are cross-compiling, take no chance.
+ # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test.
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#include <fnmatch.h>
+# define y(a, b, c) (fnmatch (a, b, c) == 0)
+# define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH)
+ ],
+ [return
+ (!(y ("a*", "abc", 0)
+ && n ("d*/*1", "d/s/1", FNM_PATHNAME)
+ && y ("a\\\\bc", "abc", 0)
+ && n ("a\\\\bc", "abc", FNM_NOESCAPE)
+ && y ("*x", ".x", 0)
+ && n ("*x", ".x", FNM_PERIOD)
+ && m4_if([$1], [GNU],
+ [y ("xxXX", "xXxX", FNM_CASEFOLD)
+ && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
+ && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
+ && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
+ && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
+ && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)],
+ 1)));])],
+ [$2=yes],
+ [$2=no],
+ [$2=cross])])
+AS_IF([test $$2 = yes], [$3], [$4])
+])# _AC_FUNC_FNMATCH_IF
+
+
+# AC_FUNC_FNMATCH
+# ---------------
+AC_DEFUN([AC_FUNC_FNMATCH],
+[_AC_FUNC_FNMATCH_IF([POSIX], [ac_cv_func_fnmatch_works],
+ [AC_DEFINE([HAVE_FNMATCH], 1,
+ [Define to 1 if your system has a working POSIX `fnmatch'
+ function.])])
+])# AC_FUNC_FNMATCH
+
+
+# _AC_LIBOBJ_FNMATCH
+# ------------------
+# Prepare the replacement of fnmatch.
+AC_DEFUN([_AC_LIBOBJ_FNMATCH],
+[AC_REQUIRE([AC_C_CONST])dnl
+AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+AC_REQUIRE([AC_TYPE_MBSTATE_T])dnl
+AC_CHECK_DECLS([getenv])
+AC_CHECK_FUNCS([btowc mbsrtowcs mempcpy wmempcpy])
+AC_CHECK_HEADERS([wchar.h wctype.h])
+AC_LIBOBJ([fnmatch])
+AC_CONFIG_LINKS([$ac_config_libobj_dir/fnmatch.h:$ac_config_libobj_dir/fnmatch_.h])
+AC_DEFINE(fnmatch, rpl_fnmatch,
+ [Define to rpl_fnmatch if the replacement function should be used.])
+])# _AC_LIBOBJ_FNMATCH
+
+
+# AC_REPLACE_FNMATCH
+# ------------------
+AC_DEFUN([AC_REPLACE_FNMATCH],
+[_AC_FUNC_FNMATCH_IF([POSIX], [ac_cv_func_fnmatch_works],
+ [rm -f "$ac_config_libobj_dir/fnmatch.h"],
+ [_AC_LIBOBJ_FNMATCH])
+])# AC_REPLACE_FNMATCH
+
+
+# AC_FUNC_FNMATCH_GNU
+# -------------------
+AC_DEFUN([AC_FUNC_FNMATCH_GNU],
+[AC_REQUIRE([AC_GNU_SOURCE])
+_AC_FUNC_FNMATCH_IF([GNU], [ac_cv_func_fnmatch_gnu],
+ [rm -f "$ac_config_libobj_dir/fnmatch.h"],
+ [_AC_LIBOBJ_FNMATCH])
+])# AC_FUNC_FNMATCH_GNU
+
+
+# AU::AM_FUNC_FNMATCH
+# AU::fp_FUNC_FNMATCH
+# -------------------
+AU_ALIAS([AM_FUNC_FNMATCH], [AC_FUNC_FNMATCH])
+AU_ALIAS([fp_FUNC_FNMATCH], [AC_FUNC_FNMATCH])
+
+
+# AC_FUNC_FSEEKO
+# --------------
+AN_FUNCTION([ftello], [AC_FUNC_FSEEKO])
+AN_FUNCTION([fseeko], [AC_FUNC_FSEEKO])
+AC_DEFUN([AC_FUNC_FSEEKO],
+[_AC_SYS_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE, 1,
+ [ac_cv_sys_largefile_source],
+ [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).],
+ [[#include <sys/types.h> /* for off_t */
+ #include <stdio.h>]],
+ [[int (*fp) (FILE *, off_t, int) = fseeko;
+ return fseeko (stdin, 0, 0) && fp (stdin, 0, 0);]])
+
+# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
+# in glibc 2.1.3, but that breaks too many other things.
+# If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
+if test $ac_cv_sys_largefile_source != unknown; then
+ AC_DEFINE(HAVE_FSEEKO, 1,
+ [Define to 1 if fseeko (and presumably ftello) exists and is declared.])
+fi
+])# AC_FUNC_FSEEKO
+
+
+# AC_FUNC_GETGROUPS
+# -----------------
+# Try to find `getgroups', and check that it works.
+# When cross-compiling, assume getgroups is broken.
+AN_FUNCTION([getgroups], [AC_FUNC_GETGROUPS])
+AC_DEFUN([AC_FUNC_GETGROUPS],
+[AC_REQUIRE([AC_TYPE_GETGROUPS])dnl
+AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+AC_CHECK_FUNC(getgroups)
+
+# If we don't yet have getgroups, see if it's in -lbsd.
+# This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1.
+ac_save_LIBS=$LIBS
+if test $ac_cv_func_getgroups = no; then
+ AC_CHECK_LIB(bsd, getgroups, [GETGROUPS_LIB=-lbsd])
+fi
+
+# Run the program to test the functionality of the system-supplied
+# getgroups function only if there is such a function.
+if test $ac_cv_func_getgroups = yes; then
+ AC_CACHE_CHECK([for working getgroups], ac_cv_func_getgroups_works,
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [[/* On Ultrix 4.3, getgroups (0, 0) always fails. */
+ return getgroups (0, 0) == -1;]])],
+ [ac_cv_func_getgroups_works=yes],
+ [ac_cv_func_getgroups_works=no],
+ [ac_cv_func_getgroups_works=no])
+ ])
+else
+ ac_cv_func_getgroups_works=no
+fi
+if test $ac_cv_func_getgroups_works = yes; then
+ AC_DEFINE(HAVE_GETGROUPS, 1,
+ [Define to 1 if your system has a working `getgroups' function.])
+fi
+LIBS=$ac_save_LIBS
+])# AC_FUNC_GETGROUPS
+
+
+# _AC_LIBOBJ_GETLOADAVG
+# ---------------------
+# Set up the AC_LIBOBJ replacement of `getloadavg'.
+m4_define([_AC_LIBOBJ_GETLOADAVG],
+[AC_LIBOBJ(getloadavg)
+AC_DEFINE(C_GETLOADAVG, 1, [Define to 1 if using `getloadavg.c'.])
+# Figure out what our getloadavg.c needs.
+ac_have_func=no
+AC_CHECK_HEADER(sys/dg_sys_info.h,
+[ac_have_func=yes
+ AC_DEFINE(DGUX, 1, [Define to 1 for DGUX with <sys/dg_sys_info.h>.])
+ AC_CHECK_LIB(dgc, dg_sys_info)])
+
+AC_CHECK_HEADER(locale.h)
+AC_CHECK_FUNCS(setlocale)
+
+# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
+# uses stabs), but it is still SVR4. We cannot check for <elf.h> because
+# Irix 4.0.5F has the header but not the library.
+if test $ac_have_func = no && test "$ac_cv_lib_elf_elf_begin" = yes \
+ && test "$ac_cv_lib_kvm_kvm_open" = yes; then
+ ac_have_func=yes
+ AC_DEFINE(SVR4, 1, [Define to 1 on System V Release 4.])
+fi
+
+if test $ac_have_func = no; then
+ AC_CHECK_HEADER(inq_stats/cpustats.h,
+ [ac_have_func=yes
+ AC_DEFINE(UMAX, 1, [Define to 1 for Encore UMAX.])
+ AC_DEFINE(UMAX4_3, 1,
+ [Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h>
+ instead of <sys/cpustats.h>.])])
+fi
+
+if test $ac_have_func = no; then
+ AC_CHECK_HEADER(sys/cpustats.h,
+ [ac_have_func=yes; AC_DEFINE(UMAX)])
+fi
+
+if test $ac_have_func = no; then
+ AC_CHECK_HEADERS(mach/mach.h)
+fi
+
+AC_CHECK_HEADERS(nlist.h,
+[AC_CHECK_MEMBERS([struct nlist.n_un.n_name],
+ [AC_DEFINE(NLIST_NAME_UNION, 1,
+ [Define to 1 if your `struct nlist' has an
+ `n_un' member. Obsolete, depend on
+ `HAVE_STRUCT_NLIST_N_UN_N_NAME])], [],
+ [@%:@include <nlist.h>])
+])dnl
+])# _AC_LIBOBJ_GETLOADAVG
+
+
+# AC_FUNC_GETLOADAVG
+# ------------------
+AC_DEFUN([AC_FUNC_GETLOADAVG],
+[ac_have_func=no # yes means we've found a way to get the load average.
+
+# Make sure getloadavg.c is where it belongs, at configure-time.
+test -f "$srcdir/$ac_config_libobj_dir/getloadavg.c" ||
+ AC_MSG_ERROR([$srcdir/$ac_config_libobj_dir/getloadavg.c is missing])
+
+ac_save_LIBS=$LIBS
+
+# Check for getloadavg, but be sure not to touch the cache variable.
+(AC_CHECK_FUNC(getloadavg, exit 0, exit 1)) && ac_have_func=yes
+
+# On HPUX9, an unprivileged user can get load averages through this function.
+AC_CHECK_FUNCS(pstat_getdynamic)
+
+# Solaris has libkstat which does not require root.
+AC_CHECK_LIB(kstat, kstat_open)
+test $ac_cv_lib_kstat_kstat_open = yes && ac_have_func=yes
+
+# Some systems with -lutil have (and need) -lkvm as well, some do not.
+# On Solaris, -lkvm requires nlist from -lelf, so check that first
+# to get the right answer into the cache.
+# For kstat on solaris, we need libelf to force the definition of SVR4 below.
+if test $ac_have_func = no; then
+ AC_CHECK_LIB(elf, elf_begin, LIBS="-lelf $LIBS")
+fi
+if test $ac_have_func = no; then
+ AC_CHECK_LIB(kvm, kvm_open, LIBS="-lkvm $LIBS")
+ # Check for the 4.4BSD definition of getloadavg.
+ AC_CHECK_LIB(util, getloadavg,
+ [LIBS="-lutil $LIBS" ac_have_func=yes ac_cv_func_getloadavg_setgid=yes])
+fi
+
+if test $ac_have_func = no; then
+ # There is a commonly available library for RS/6000 AIX.
+ # Since it is not a standard part of AIX, it might be installed locally.
+ ac_getloadavg_LIBS=$LIBS
+ LIBS="-L/usr/local/lib $LIBS"
+ AC_CHECK_LIB(getloadavg, getloadavg,
+ [LIBS="-lgetloadavg $LIBS"], [LIBS=$ac_getloadavg_LIBS])
+fi
+
+# Make sure it is really in the library, if we think we found it,
+# otherwise set up the replacement function.
+AC_CHECK_FUNCS(getloadavg, [],
+ [_AC_LIBOBJ_GETLOADAVG])
+
+# Some definitions of getloadavg require that the program be installed setgid.
+AC_CACHE_CHECK(whether getloadavg requires setgid,
+ ac_cv_func_getloadavg_setgid,
+[AC_EGREP_CPP([Yowza Am I SETGID yet],
+[#include "$srcdir/$ac_config_libobj_dir/getloadavg.c"
+#ifdef LDAV_PRIVILEGED
+Yowza Am I SETGID yet
+@%:@endif],
+ ac_cv_func_getloadavg_setgid=yes,
+ ac_cv_func_getloadavg_setgid=no)])
+if test $ac_cv_func_getloadavg_setgid = yes; then
+ NEED_SETGID=true
+ AC_DEFINE(GETLOADAVG_PRIVILEGED, 1,
+ [Define to 1 if the `getloadavg' function needs to be run setuid
+ or setgid.])
+else
+ NEED_SETGID=false
+fi
+AC_SUBST(NEED_SETGID)dnl
+
+if test $ac_cv_func_getloadavg_setgid = yes; then
+ AC_CACHE_CHECK(group of /dev/kmem, ac_cv_group_kmem,
+[ # On Solaris, /dev/kmem is a symlink. Get info on the real file.
+ ac_ls_output=`ls -lgL /dev/kmem 2>/dev/null`
+ # If we got an error (system does not support symlinks), try without -L.
+ test -z "$ac_ls_output" && ac_ls_output=`ls -lg /dev/kmem`
+ ac_cv_group_kmem=`AS_ECHO(["$ac_ls_output"]) \
+ | sed -ne ['s/[ ][ ]*/ /g;
+ s/^.[sSrwx-]* *[0-9]* *\([^0-9]*\) *.*/\1/;
+ / /s/.* //;p;']`
+])
+ AC_SUBST(KMEM_GROUP, $ac_cv_group_kmem)dnl
+fi
+if test "x$ac_save_LIBS" = x; then
+ GETLOADAVG_LIBS=$LIBS
+else
+ GETLOADAVG_LIBS=`AS_ECHO(["$LIBS"]) | sed "s|$ac_save_LIBS||"`
+fi
+LIBS=$ac_save_LIBS
+
+AC_SUBST(GETLOADAVG_LIBS)dnl
+])# AC_FUNC_GETLOADAVG
+
+
+# AU::AC_GETLOADAVG
+# -----------------
+AU_ALIAS([AC_GETLOADAVG], [AC_FUNC_GETLOADAVG])
+
+
+# AC_FUNC_GETMNTENT
+# -----------------
+AN_FUNCTION([getmntent], [AC_FUNC_GETMNTENT])
+AC_DEFUN([AC_FUNC_GETMNTENT],
+[# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
+# -lseq on Dynix/PTX, -lgen on Unixware.
+AC_SEARCH_LIBS(getmntent, [sun seq gen],
+ [ac_cv_func_getmntent=yes
+ AC_DEFINE([HAVE_GETMNTENT], 1,
+ [Define to 1 if you have the `getmntent' function.])],
+ [ac_cv_func_getmntent=no])
+])
+
+
+# AC_FUNC_GETPGRP
+# ---------------
+# Figure out whether getpgrp requires zero arguments.
+AC_DEFUN([AC_FUNC_GETPGRP],
+[AC_CACHE_CHECK(whether getpgrp requires zero arguments,
+ ac_cv_func_getpgrp_void,
+[# Use it with a single arg.
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [getpgrp (0);])],
+ [ac_cv_func_getpgrp_void=no],
+ [ac_cv_func_getpgrp_void=yes])
+])
+if test $ac_cv_func_getpgrp_void = yes; then
+ AC_DEFINE(GETPGRP_VOID, 1,
+ [Define to 1 if the `getpgrp' function requires zero arguments.])
+fi
+])# AC_FUNC_GETPGRP
+
+
+# AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
+# -------------------------------------
+# When cross-compiling, be pessimistic so we will end up using the
+# replacement version of lstat that checks for trailing slashes and
+# calls lstat a second time when necessary.
+AN_FUNCTION([lstat], [AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+AC_DEFUN([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
+[AC_CACHE_CHECK(
+ [whether lstat correctly handles trailing slash],
+ [ac_cv_func_lstat_dereferences_slashed_symlink],
+[rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [struct stat sbuf;
+ /* Linux will dereference the symlink and fail, as required by POSIX.
+ That is better in the sense that it means we will not
+ have to compile and use the lstat wrapper. */
+ return lstat ("conftest.sym/", &sbuf) == 0;])],
+ [ac_cv_func_lstat_dereferences_slashed_symlink=yes],
+ [ac_cv_func_lstat_dereferences_slashed_symlink=no],
+ [ac_cv_func_lstat_dereferences_slashed_symlink=no])
+else
+ # If the `ln -s' command failed, then we probably don't even
+ # have an lstat function.
+ ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+])
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+ AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
+ [Define to 1 if `lstat' dereferences a symlink specified
+ with a trailing slash.])
+
+if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+ AC_LIBOBJ([lstat])
+fi
+])
+
+
+# _AC_FUNC_MALLOC_IF(IF-WORKS, IF-NOT)
+# ------------------------------------
+# If `malloc (0)' properly handled, run IF-WORKS, otherwise, IF-NOT.
+AC_DEFUN([_AC_FUNC_MALLOC_IF],
+[AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_CHECK_HEADERS(stdlib.h)
+AC_CACHE_CHECK([for GNU libc compatible malloc], ac_cv_func_malloc_0_nonnull,
+[AC_RUN_IFELSE(
+[AC_LANG_PROGRAM(
+[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+]],
+ [return ! malloc (0);])],
+ [ac_cv_func_malloc_0_nonnull=yes],
+ [ac_cv_func_malloc_0_nonnull=no],
+ [ac_cv_func_malloc_0_nonnull=no])])
+AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2])
+])# _AC_FUNC_MALLOC_IF
+
+
+# AC_FUNC_MALLOC
+# --------------
+# Report whether `malloc (0)' properly handled, and replace malloc if
+# needed.
+AN_FUNCTION([malloc], [AC_FUNC_MALLOC])
+AC_DEFUN([AC_FUNC_MALLOC],
+[_AC_FUNC_MALLOC_IF(
+ [AC_DEFINE([HAVE_MALLOC], 1,
+ [Define to 1 if your system has a GNU libc compatible `malloc'
+ function, and to 0 otherwise.])],
+ [AC_DEFINE([HAVE_MALLOC], 0)
+ AC_LIBOBJ(malloc)
+ AC_DEFINE([malloc], [rpl_malloc],
+ [Define to rpl_malloc if the replacement function should be used.])])
+])# AC_FUNC_MALLOC
+
+
+# AC_FUNC_MBRTOWC
+# ---------------
+AN_FUNCTION([mbrtowc], [AC_FUNC_MBRTOWC])
+AC_DEFUN([AC_FUNC_MBRTOWC],
+[
+ AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
+ ac_cv_func_mbrtowc,
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[@%:@include <wchar.h>]],
+ [[wchar_t wc;
+ char const s[] = "";
+ size_t n = 1;
+ mbstate_t state;
+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
+ ac_cv_func_mbrtowc=yes,
+ ac_cv_func_mbrtowc=no)])
+ if test $ac_cv_func_mbrtowc = yes; then
+ AC_DEFINE([HAVE_MBRTOWC], 1,
+ [Define to 1 if mbrtowc and mbstate_t are properly declared.])
+ fi
+])
+
+
+# AC_FUNC_MEMCMP
+# --------------
+AC_DEFUN([AC_FUNC_MEMCMP],
+[AC_CACHE_CHECK([for working memcmp], ac_cv_func_memcmp_working,
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[
+ /* Some versions of memcmp are not 8-bit clean. */
+ char c0 = '\100', c1 = '\200', c2 = '\201';
+ if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+ return 1;
+
+ /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+ or more and with at least one buffer not starting on a 4-byte boundary.
+ William Lewis provided this test program. */
+ {
+ char foo[21];
+ char bar[21];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ char *a = foo + i;
+ char *b = bar + i;
+ strcpy (a, "--------01111111");
+ strcpy (b, "--------10000000");
+ if (memcmp (a, b, 16) >= 0)
+ return 1;
+ }
+ return 0;
+ }
+]])],
+ [ac_cv_func_memcmp_working=yes],
+ [ac_cv_func_memcmp_working=no],
+ [ac_cv_func_memcmp_working=no])])
+test $ac_cv_func_memcmp_working = no && AC_LIBOBJ([memcmp])
+])# AC_FUNC_MEMCMP
+
+
+# AC_FUNC_MKTIME
+# --------------
+AN_FUNCTION([mktime], [AC_FUNC_MKTIME])
+AC_DEFUN([AC_FUNC_MKTIME],
+[AC_REQUIRE([AC_HEADER_TIME])dnl
+AC_CHECK_HEADERS_ONCE(sys/time.h unistd.h)
+AC_CHECK_FUNCS_ONCE(alarm)
+AC_CACHE_CHECK([for working mktime], ac_cv_func_working_mktime,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[/* Test program from Paul Eggert and Tony Leneis. */
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
+#include <limits.h>
+#include <stdlib.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifndef HAVE_ALARM
+# define alarm(X) /* empty */
+#endif
+
+/* Work around redefinition to rpl_putenv by other config tests. */
+#undef putenv
+
+static time_t time_t_max;
+static time_t time_t_min;
+
+/* Values we'll use to set the TZ environment variable. */
+static const char *tz_strings[] = {
+ (const char *) 0, "TZ=GMT0", "TZ=JST-9",
+ "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"
+};
+#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0]))
+
+/* Return 0 if mktime fails to convert a date in the spring-forward gap.
+ Based on a problem report from Andreas Jaeger. */
+static int
+spring_forward_gap ()
+{
+ /* glibc (up to about 1998-10-07) failed this test. */
+ struct tm tm;
+
+ /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
+ instead of "TZ=America/Vancouver" in order to detect the bug even
+ on systems that don't support the Olson extension, or don't have the
+ full zoneinfo tables installed. */
+ putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
+
+ tm.tm_year = 98;
+ tm.tm_mon = 3;
+ tm.tm_mday = 5;
+ tm.tm_hour = 2;
+ tm.tm_min = 0;
+ tm.tm_sec = 0;
+ tm.tm_isdst = -1;
+ return mktime (&tm) != (time_t) -1;
+}
+
+static int
+mktime_test1 (time_t now)
+{
+ struct tm *lt;
+ return ! (lt = localtime (&now)) || mktime (lt) == now;
+}
+
+static int
+mktime_test (time_t now)
+{
+ return (mktime_test1 (now)
+ && mktime_test1 ((time_t) (time_t_max - now))
+ && mktime_test1 ((time_t) (time_t_min + now)));
+}
+
+static int
+irix_6_4_bug ()
+{
+ /* Based on code from Ariel Faigon. */
+ struct tm tm;
+ tm.tm_year = 96;
+ tm.tm_mon = 3;
+ tm.tm_mday = 0;
+ tm.tm_hour = 0;
+ tm.tm_min = 0;
+ tm.tm_sec = 0;
+ tm.tm_isdst = -1;
+ mktime (&tm);
+ return tm.tm_mon == 2 && tm.tm_mday == 31;
+}
+
+static int
+bigtime_test (int j)
+{
+ struct tm tm;
+ time_t now;
+ tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j;
+ now = mktime (&tm);
+ if (now != (time_t) -1)
+ {
+ struct tm *lt = localtime (&now);
+ if (! (lt
+ && lt->tm_year == tm.tm_year
+ && lt->tm_mon == tm.tm_mon
+ && lt->tm_mday == tm.tm_mday
+ && lt->tm_hour == tm.tm_hour
+ && lt->tm_min == tm.tm_min
+ && lt->tm_sec == tm.tm_sec
+ && lt->tm_yday == tm.tm_yday
+ && lt->tm_wday == tm.tm_wday
+ && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst)
+ == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst))))
+ return 0;
+ }
+ return 1;
+}
+
+static int
+year_2050_test ()
+{
+ /* The correct answer for 2050-02-01 00:00:00 in Pacific time,
+ ignoring leap seconds. */
+ unsigned long int answer = 2527315200UL;
+
+ struct tm tm;
+ time_t t;
+ tm.tm_year = 2050 - 1900;
+ tm.tm_mon = 2 - 1;
+ tm.tm_mday = 1;
+ tm.tm_hour = tm.tm_min = tm.tm_sec = 0;
+ tm.tm_isdst = -1;
+
+ /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0"
+ instead of "TZ=America/Vancouver" in order to detect the bug even
+ on systems that don't support the Olson extension, or don't have the
+ full zoneinfo tables installed. */
+ putenv ((char*) "TZ=PST8PDT,M4.1.0,M10.5.0");
+
+ t = mktime (&tm);
+
+ /* Check that the result is either a failure, or close enough
+ to the correct answer that we can assume the discrepancy is
+ due to leap seconds. */
+ return (t == (time_t) -1
+ || (0 < t && answer - 120 <= t && t <= answer + 120));
+}
+
+int
+main ()
+{
+ time_t t, delta;
+ int i, j;
+
+ /* This test makes some buggy mktime implementations loop.
+ Give up after 60 seconds; a mktime slower than that
+ isn't worth using anyway. */
+ alarm (60);
+
+ for (;;)
+ {
+ t = (time_t_max << 1) + 1;
+ if (t <= time_t_max)
+ break;
+ time_t_max = t;
+ }
+ time_t_min = - ((time_t) ~ (time_t) 0 == (time_t) -1) - time_t_max;
+
+ delta = time_t_max / 997; /* a suitable prime number */
+ for (i = 0; i < N_STRINGS; i++)
+ {
+ if (tz_strings[i])
+ putenv ((char*) tz_strings[i]);
+
+ for (t = 0; t <= time_t_max - delta; t += delta)
+ if (! mktime_test (t))
+ return 1;
+ if (! (mktime_test ((time_t) 1)
+ && mktime_test ((time_t) (60 * 60))
+ && mktime_test ((time_t) (60 * 60 * 24))))
+ return 1;
+
+ for (j = 1; ; j <<= 1)
+ if (! bigtime_test (j))
+ return 1;
+ else if (INT_MAX / 2 < j)
+ break;
+ if (! bigtime_test (INT_MAX))
+ return 1;
+ }
+ return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
+}]])],
+ [ac_cv_func_working_mktime=yes],
+ [ac_cv_func_working_mktime=no],
+ [ac_cv_func_working_mktime=no])])
+if test $ac_cv_func_working_mktime = no; then
+ AC_LIBOBJ([mktime])
+fi
+])# AC_FUNC_MKTIME
+
+
+# AU::AM_FUNC_MKTIME
+# ------------------
+AU_ALIAS([AM_FUNC_MKTIME], [AC_FUNC_MKTIME])
+
+
+# AC_FUNC_MMAP
+# ------------
+AN_FUNCTION([mmap], [AC_FUNC_MMAP])
+AC_DEFUN([AC_FUNC_MMAP],
+[AC_CHECK_HEADERS_ONCE([stdlib.h unistd.h sys/param.h])
+AC_CHECK_FUNCS([getpagesize])
+AC_CACHE_CHECK([for working mmap], [ac_cv_func_mmap_fixed_mapped],
+[AC_RUN_IFELSE([AC_LANG_SOURCE([AC_INCLUDES_DEFAULT]
+[[/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the file system buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propagated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+ char *data, *data2, *data3;
+ const char *cdata2;
+ int i, pagesize;
+ int fd, fd2;
+
+ pagesize = getpagesize ();
+
+ /* First, make a file with some known garbage in it. */
+ data = (char *) malloc (pagesize);
+ if (!data)
+ return 1;
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand ();
+ umask (0);
+ fd = creat ("conftest.mmap", 0600);
+ if (fd < 0)
+ return 2;
+ if (write (fd, data, pagesize) != pagesize)
+ return 3;
+ close (fd);
+
+ /* Next, check that the tail of a page is zero-filled. File must have
+ non-zero length, otherwise we risk SIGBUS for entire page. */
+ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
+ if (fd2 < 0)
+ return 4;
+ cdata2 = "";
+ if (write (fd2, cdata2, 1) != 1)
+ return 5;
+ data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
+ if (data2 == MAP_FAILED)
+ return 6;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data2 + i))
+ return 7;
+ close (fd2);
+ if (munmap (data2, pagesize))
+ return 8;
+
+ /* Next, try to mmap the file at a fixed address which already has
+ something else allocated at it. If we can, also make sure that
+ we see the same garbage. */
+ fd = open ("conftest.mmap", O_RDWR);
+ if (fd < 0)
+ return 9;
+ if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ return 10;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ return 11;
+
+ /* Finally, make sure that changes to the mapped area do not
+ percolate back to the file as seen by read(). (This is a bug on
+ some variants of i386 svr4.0.) */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = (char *) malloc (pagesize);
+ if (!data3)
+ return 12;
+ if (read (fd, data3, pagesize) != pagesize)
+ return 13;
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ return 14;
+ close (fd);
+ return 0;
+}]])],
+ [ac_cv_func_mmap_fixed_mapped=yes],
+ [ac_cv_func_mmap_fixed_mapped=no],
+ [ac_cv_func_mmap_fixed_mapped=no])])
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+ AC_DEFINE([HAVE_MMAP], [1],
+ [Define to 1 if you have a working `mmap' system call.])
+fi
+rm -f conftest.mmap conftest.txt
+])# AC_FUNC_MMAP
+
+
+# AU::AC_MMAP
+# -----------
+AU_ALIAS([AC_MMAP], [AC_FUNC_MMAP])
+
+
+# AC_FUNC_OBSTACK
+# ---------------
+# Ensure obstack support. Yeah, this is not exactly a `FUNC' check.
+AN_FUNCTION([obstack_init], [AC_FUNC_OBSTACK])
+AN_IDENTIFIER([obstack], [AC_FUNC_OBSTACK])
+AC_DEFUN([AC_FUNC_OBSTACK],
+[AC_LIBSOURCES([obstack.h, obstack.c])dnl
+AC_CACHE_CHECK([for obstacks], ac_cv_func_obstack,
+[AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+ [@%:@include "obstack.h"]],
+ [[struct obstack mem;
+ @%:@define obstack_chunk_alloc malloc
+ @%:@define obstack_chunk_free free
+ obstack_init (&mem);
+ obstack_free (&mem, 0);]])],
+ [ac_cv_func_obstack=yes],
+ [ac_cv_func_obstack=no])])
+if test $ac_cv_func_obstack = yes; then
+ AC_DEFINE(HAVE_OBSTACK, 1, [Define to 1 if libc includes obstacks.])
+else
+ AC_LIBOBJ(obstack)
+fi
+])# AC_FUNC_OBSTACK
+
+
+# AU::AM_FUNC_OBSTACK
+# -------------------
+AU_ALIAS([AM_FUNC_OBSTACK], [AC_FUNC_OBSTACK])
+
+
+
+# _AC_FUNC_REALLOC_IF(IF-WORKS, IF-NOT)
+# -------------------------------------
+# If `realloc (0, 0)' is properly handled, run IF-WORKS, otherwise, IF-NOT.
+AC_DEFUN([_AC_FUNC_REALLOC_IF],
+[AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_CHECK_HEADERS(stdlib.h)
+AC_CACHE_CHECK([for GNU libc compatible realloc], ac_cv_func_realloc_0_nonnull,
+[AC_RUN_IFELSE(
+[AC_LANG_PROGRAM(
+[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *realloc ();
+#endif
+]],
+ [return ! realloc (0, 0);])],
+ [ac_cv_func_realloc_0_nonnull=yes],
+ [ac_cv_func_realloc_0_nonnull=no],
+ [ac_cv_func_realloc_0_nonnull=no])])
+AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2])
+])# AC_FUNC_REALLOC
+
+
+# AC_FUNC_REALLOC
+# ---------------
+# Report whether `realloc (0, 0)' is properly handled, and replace realloc if
+# needed.
+AN_FUNCTION([realloc], [AC_FUNC_REALLOC])
+AC_DEFUN([AC_FUNC_REALLOC],
+[_AC_FUNC_REALLOC_IF(
+ [AC_DEFINE([HAVE_REALLOC], 1,
+ [Define to 1 if your system has a GNU libc compatible `realloc'
+ function, and to 0 otherwise.])],
+ [AC_DEFINE([HAVE_REALLOC], 0)
+ AC_LIBOBJ([realloc])
+ AC_DEFINE([realloc], [rpl_realloc],
+ [Define to rpl_realloc if the replacement function should be used.])])
+])# AC_FUNC_REALLOC
+
+
+# AC_FUNC_SELECT_ARGTYPES
+# -----------------------
+# Determine the correct type to be passed to each of the `select'
+# function's arguments, and define those types in `SELECT_TYPE_ARG1',
+# `SELECT_TYPE_ARG234', and `SELECT_TYPE_ARG5'.
+AC_DEFUN([AC_FUNC_SELECT_ARGTYPES],
+[AC_CHECK_HEADERS(sys/select.h sys/socket.h)
+AC_CACHE_CHECK([types of arguments for select],
+[ac_cv_func_select_args],
+[for ac_arg234 in 'fd_set *' 'int *' 'void *'; do
+ for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do
+ for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+[AC_INCLUDES_DEFAULT
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+],
+ [extern int select ($ac_arg1,
+ $ac_arg234, $ac_arg234, $ac_arg234,
+ $ac_arg5);])],
+ [ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3])
+ done
+ done
+done
+# Provide a safe default value.
+: "${ac_cv_func_select_args=int,int *,struct timeval *}"
+])
+ac_save_IFS=$IFS; IFS=','
+set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'`
+IFS=$ac_save_IFS
+shift
+AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1, $[1],
+ [Define to the type of arg 1 for `select'.])
+AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234, ($[2]),
+ [Define to the type of args 2, 3 and 4 for `select'.])
+AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5, ($[3]),
+ [Define to the type of arg 5 for `select'.])
+rm -f conftest*
+])# AC_FUNC_SELECT_ARGTYPES
+
+
+# AC_FUNC_SETPGRP
+# ---------------
+AC_DEFUN([AC_FUNC_SETPGRP],
+[AC_CACHE_CHECK(whether setpgrp takes no argument, ac_cv_func_setpgrp_void,
+[AC_RUN_IFELSE(
+[AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+[/* If this system has a BSD-style setpgrp which takes arguments,
+ setpgrp(1, 1) will fail with ESRCH and return -1, in that case
+ exit successfully. */
+ return setpgrp (1,1) != -1;])],
+ [ac_cv_func_setpgrp_void=no],
+ [ac_cv_func_setpgrp_void=yes],
+ [AC_MSG_ERROR([cannot check setpgrp when cross compiling])])])
+if test $ac_cv_func_setpgrp_void = yes; then
+ AC_DEFINE(SETPGRP_VOID, 1,
+ [Define to 1 if the `setpgrp' function takes no argument.])
+fi
+])# AC_FUNC_SETPGRP
+
+
+# _AC_FUNC_STAT(STAT | LSTAT)
+# ---------------------------
+# Determine whether stat or lstat have the bug that it succeeds when
+# given the zero-length file name argument. The stat and lstat from
+# SunOS4.1.4 and the Hurd (as of 1998-11-01) do this.
+#
+# If it does, then define HAVE_STAT_EMPTY_STRING_BUG (or
+# HAVE_LSTAT_EMPTY_STRING_BUG) and arrange to compile the wrapper
+# function.
+m4_define([_AC_FUNC_STAT],
+[AC_REQUIRE([AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])dnl
+AC_CACHE_CHECK([whether $1 accepts an empty string],
+ [ac_cv_func_$1_empty_string_bug],
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+[[struct stat sbuf;
+ return $1 ("", &sbuf) == 0;]])],
+ [ac_cv_func_$1_empty_string_bug=no],
+ [ac_cv_func_$1_empty_string_bug=yes],
+ [ac_cv_func_$1_empty_string_bug=yes])])
+if test $ac_cv_func_$1_empty_string_bug = yes; then
+ AC_LIBOBJ([$1])
+ AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1_EMPTY_STRING_BUG]), 1,
+ [Define to 1 if `$1' has the bug that it succeeds when
+ given the zero-length file name argument.])
+fi
+])# _AC_FUNC_STAT
+
+
+# AC_FUNC_STAT & AC_FUNC_LSTAT
+# ----------------------------
+AC_DEFUN([AC_FUNC_STAT], [_AC_FUNC_STAT(stat)])
+AC_DEFUN([AC_FUNC_LSTAT], [_AC_FUNC_STAT(lstat)])
+
+
+# _AC_LIBOBJ_STRTOD
+# -----------------
+m4_define([_AC_LIBOBJ_STRTOD],
+[AC_LIBOBJ(strtod)
+AC_CHECK_FUNC(pow)
+if test $ac_cv_func_pow = no; then
+ AC_CHECK_LIB(m, pow,
+ [POW_LIB=-lm],
+ [AC_MSG_WARN([cannot find library containing definition of pow])])
+fi
+])# _AC_LIBOBJ_STRTOD
+
+
+# AC_FUNC_STRTOD
+# --------------
+AN_FUNCTION([strtod], [AC_FUNC_STRTOD])
+AC_DEFUN([AC_FUNC_STRTOD],
+[AC_SUBST(POW_LIB)dnl
+AC_CACHE_CHECK(for working strtod, ac_cv_func_strtod,
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
+]AC_INCLUDES_DEFAULT[
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+ {
+ /* Some versions of Linux strtod mis-parse strings with leading '+'. */
+ char *string = " +69";
+ char *term;
+ double value;
+ value = strtod (string, &term);
+ if (value != 69 || term != (string + 4))
+ return 1;
+ }
+
+ {
+ /* Under Solaris 2.4, strtod returns the wrong value for the
+ terminating character under some conditions. */
+ char *string = "NaN";
+ char *term;
+ strtod (string, &term);
+ if (term != string && *(term - 1) == 0)
+ return 1;
+ }
+ return 0;
+}
+]])],
+ ac_cv_func_strtod=yes,
+ ac_cv_func_strtod=no,
+ ac_cv_func_strtod=no)])
+if test $ac_cv_func_strtod = no; then
+ _AC_LIBOBJ_STRTOD
+fi
+])
+
+
+# AC_FUNC_STRTOLD
+# ---------------
+AC_DEFUN([AC_FUNC_STRTOLD],
+[
+ AC_CACHE_CHECK([whether strtold conforms to C99],
+ [ac_cv_func_strtold],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* On HP-UX before 11.23, strtold returns a struct instead of
+ long double. Reject implementations like that, by requiring
+ compatibility with the C99 prototype. */
+# include <stdlib.h>
+ static long double (*p) (char const *, char **) = strtold;
+ static long double
+ test (char const *nptr, char **endptr)
+ {
+ long double r;
+ r = strtold (nptr, endptr);
+ return r;
+ }]],
+ [[return test ("1.0", NULL) != 1 || p ("1.0", NULL) != 1;]])],
+ [ac_cv_func_strtold=yes],
+ [ac_cv_func_strtold=no])])
+ if test $ac_cv_func_strtold = yes; then
+ AC_DEFINE([HAVE_STRTOLD], 1,
+ [Define to 1 if strtold exists and conforms to C99.])
+ fi
+])# AC_FUNC_STRTOLD
+
+
+# AU::AM_FUNC_STRTOD
+# ------------------
+AU_ALIAS([AM_FUNC_STRTOD], [AC_FUNC_STRTOD])
+
+
+# AC_FUNC_STRERROR_R
+# ------------------
+AN_FUNCTION([strerror_r], [AC_FUNC_STRERROR_R])
+AC_DEFUN([AC_FUNC_STRERROR_R],
+[AC_CHECK_DECLS([strerror_r])
+AC_CHECK_FUNCS([strerror_r])
+AC_CACHE_CHECK([whether strerror_r returns char *],
+ ac_cv_func_strerror_r_char_p,
+ [
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [[
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+ ]])],
+ ac_cv_func_strerror_r_char_p=yes)
+ else
+ # strerror_r is not declared. Choose between
+ # systems that have relatively inaccessible declarations for the
+ # function. BeOS and DEC UNIX 4.0 fall in this category, but the
+ # former has a strerror_r that returns char*, while the latter
+ # has a strerror_r that returns `int'.
+ # This test should segfault on the DEC system.
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+ extern char *strerror_r ();],
+ [[char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ return ! isalpha (x);]])],
+ ac_cv_func_strerror_r_char_p=yes, , :)
+ fi
+ ])
+if test $ac_cv_func_strerror_r_char_p = yes; then
+ AC_DEFINE([STRERROR_R_CHAR_P], 1,
+ [Define to 1 if strerror_r returns char *.])
+fi
+])# AC_FUNC_STRERROR_R
+
+
+# AC_FUNC_STRFTIME
+# ----------------
+AC_DEFUN([AC_FUNC_STRFTIME],
+[AC_CHECK_FUNCS(strftime, [],
+[# strftime is in -lintl on SCO UNIX.
+AC_CHECK_LIB(intl, strftime,
+ [AC_DEFINE(HAVE_STRFTIME)
+LIBS="-lintl $LIBS"])])dnl
+])# AC_FUNC_STRFTIME
+
+
+# AC_FUNC_STRNLEN
+# ---------------
+AN_FUNCTION([strnlen], [AC_FUNC_STRNLEN])
+AC_DEFUN([AC_FUNC_STRNLEN],
+[AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])dnl
+AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+AC_CACHE_CHECK([for working strnlen], ac_cv_func_strnlen_working,
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[
+#define S "foobar"
+#define S_LEN (sizeof S - 1)
+
+ /* At least one implementation is buggy: that of AIX 4.3 would
+ give strnlen (S, 1) == 3. */
+
+ int i;
+ for (i = 0; i < S_LEN + 1; ++i)
+ {
+ int expected = i <= S_LEN ? i : S_LEN;
+ if (strnlen (S, i) != expected)
+ return 1;
+ }
+ return 0;
+]])],
+ [ac_cv_func_strnlen_working=yes],
+ [ac_cv_func_strnlen_working=no],
+ [# Guess no on AIX systems, yes otherwise.
+ case "$host_os" in
+ aix*) ac_cv_func_strnlen_working=no;;
+ *) ac_cv_func_strnlen_working=yes;;
+ esac])])
+test $ac_cv_func_strnlen_working = no && AC_LIBOBJ([strnlen])
+])# AC_FUNC_STRNLEN
+
+
+# AC_FUNC_SETVBUF_REVERSED
+# ------------------------
+AC_DEFUN([AC_FUNC_SETVBUF_REVERSED],
+[AC_DIAGNOSE([obsolete],
+[The macro `$0' is obsolete. Remove it and all references to SETVBUF_REVERSED.])dnl
+AC_CACHE_VAL([ac_cv_func_setvbuf_reversed], [ac_cv_func_setvbuf_reversed=no])
+])# AC_FUNC_SETVBUF_REVERSED
+
+
+# AU::AC_SETVBUF_REVERSED
+# -----------------------
+AU_ALIAS([AC_SETVBUF_REVERSED], [AC_FUNC_SETVBUF_REVERSED])
+
+
+# AC_FUNC_STRCOLL
+# ---------------
+AN_FUNCTION([strcoll], [AC_FUNC_STRCOLL])
+AC_DEFUN([AC_FUNC_STRCOLL],
+[AC_CACHE_CHECK(for working strcoll, ac_cv_func_strcoll_works,
+[AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [[return (strcoll ("abc", "def") >= 0 ||
+ strcoll ("ABC", "DEF") >= 0 ||
+ strcoll ("123", "456") >= 0)]])],
+ ac_cv_func_strcoll_works=yes,
+ ac_cv_func_strcoll_works=no,
+ ac_cv_func_strcoll_works=no)])
+if test $ac_cv_func_strcoll_works = yes; then
+ AC_DEFINE(HAVE_STRCOLL, 1,
+ [Define to 1 if you have the `strcoll' function and it is properly
+ defined.])
+fi
+])# AC_FUNC_STRCOLL
+
+
+# AU::AC_STRCOLL
+# --------------
+AU_ALIAS([AC_STRCOLL], [AC_FUNC_STRCOLL])
+
+
+# AC_FUNC_UTIME_NULL
+# ------------------
+AC_DEFUN([AC_FUNC_UTIME_NULL],
+[AC_CHECK_HEADERS_ONCE(utime.h)
+AC_CACHE_CHECK(whether utime accepts a null argument, ac_cv_func_utime_null,
+[rm -f conftest.data; >conftest.data
+# Sequent interprets utime(file, 0) to mean use start of epoch. Wrong.
+AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
+ #ifdef HAVE_UTIME_H
+ # include <utime.h>
+ #endif],
+[[struct stat s, t;
+ return ! (stat ("conftest.data", &s) == 0
+ && utime ("conftest.data", 0) == 0
+ && stat ("conftest.data", &t) == 0
+ && t.st_mtime >= s.st_mtime
+ && t.st_mtime - s.st_mtime < 120);]])],
+ ac_cv_func_utime_null=yes,
+ ac_cv_func_utime_null=no,
+ ac_cv_func_utime_null='guessing yes')])
+if test "x$ac_cv_func_utime_null" != xno; then
+ ac_cv_func_utime_null=yes
+ AC_DEFINE(HAVE_UTIME_NULL, 1,
+ [Define to 1 if `utime(file, NULL)' sets file's timestamp to the
+ present.])
+fi
+rm -f conftest.data
+])# AC_FUNC_UTIME_NULL
+
+
+# AU::AC_UTIME_NULL
+# -----------------
+AU_ALIAS([AC_UTIME_NULL], [AC_FUNC_UTIME_NULL])
+
+
+# AC_FUNC_FORK
+# ------------
+AN_FUNCTION([fork], [AC_FUNC_FORK])
+AN_FUNCTION([vfork], [AC_FUNC_FORK])
+AC_DEFUN([AC_FUNC_FORK],
+[AC_REQUIRE([AC_TYPE_PID_T])dnl
+AC_CHECK_HEADERS(vfork.h)
+AC_CHECK_FUNCS(fork vfork)
+if test "x$ac_cv_func_fork" = xyes; then
+ _AC_FUNC_FORK
+else
+ ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+ case $host in
+ *-*-amigaos* | *-*-msdosdjgpp*)
+ # Override, as these systems have only a dummy fork() stub
+ ac_cv_func_fork_works=no
+ ;;
+ *)
+ ac_cv_func_fork_works=yes
+ ;;
+ esac
+ AC_MSG_WARN([result $ac_cv_func_fork_works guessed because of cross compilation])
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+ _AC_FUNC_VFORK
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+ ac_cv_func_vfork_works=$ac_cv_func_vfork
+ AC_MSG_WARN([result $ac_cv_func_vfork_works guessed because of cross compilation])
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+ AC_DEFINE(HAVE_WORKING_VFORK, 1, [Define to 1 if `vfork' works.])
+else
+ AC_DEFINE(vfork, fork, [Define as `fork' if `vfork' does not work.])
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+ AC_DEFINE(HAVE_WORKING_FORK, 1, [Define to 1 if `fork' works.])
+fi
+])# AC_FUNC_FORK
+
+
+# _AC_FUNC_FORK
+# -------------
+AC_DEFUN([_AC_FUNC_FORK],
+ [AC_CACHE_CHECK(for working fork, ac_cv_func_fork_works,
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+ [
+ /* By Ruediger Kuhlmann. */
+ return fork () < 0;
+ ])],
+ [ac_cv_func_fork_works=yes],
+ [ac_cv_func_fork_works=no],
+ [ac_cv_func_fork_works=cross])])]
+)# _AC_FUNC_FORK
+
+
+# _AC_FUNC_VFORK
+# --------------
+AC_DEFUN([_AC_FUNC_VFORK],
+[AC_CACHE_CHECK(for working vfork, ac_cv_func_vfork_works,
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[/* Thanks to Paul Eggert for this test. */
+]AC_INCLUDES_DEFAULT[
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+ argument registers are propagated back to the parent. The compiler
+ is told about this with #include <vfork.h>, but some compilers
+ (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
+ static variable whose address is put into a register that is
+ clobbered by the vfork. */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+ static pid_t child;
+ if (!child) {
+ child = vfork ();
+ if (child < 0) {
+ perror ("vfork");
+ _exit(2);
+ }
+ if (!child) {
+ arg = getpid();
+ write(-1, "", 0);
+ _exit (arg);
+ }
+ }
+}
+
+int
+main ()
+{
+ pid_t parent = getpid ();
+ pid_t child;
+
+ sparc_address_test (0);
+
+ child = vfork ();
+
+ if (child == 0) {
+ /* Here is another test for sparc vfork register problems. This
+ test uses lots of local variables, at least as many local
+ variables as main has allocated so far including compiler
+ temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
+ 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
+ reuse the register of parent for one of the local variables,
+ since it will think that parent can't possibly be used any more
+ in this routine. Assigning to the local variable will thus
+ munge parent in the parent process. */
+ pid_t
+ p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+ p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+ /* Convince the compiler that p..p7 are live; otherwise, it might
+ use the same hardware register for all 8 local variables. */
+ if (p != p1 || p != p2 || p != p3 || p != p4
+ || p != p5 || p != p6 || p != p7)
+ _exit(1);
+
+ /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+ from child file descriptors. If the child closes a descriptor
+ before it execs or exits, this munges the parent's descriptor
+ as well. Test for this by closing stdout in the child. */
+ _exit(close(fileno(stdout)) != 0);
+ } else {
+ int status;
+ struct stat st;
+
+ while (wait(&status) != child)
+ ;
+ return (
+ /* Was there some problem with vforking? */
+ child < 0
+
+ /* Did the child fail? (This shouldn't happen.) */
+ || status
+
+ /* Did the vfork/compiler bug occur? */
+ || parent != getpid()
+
+ /* Did the file descriptor bug occur? */
+ || fstat(fileno(stdout), &st) != 0
+ );
+ }
+}]])],
+ [ac_cv_func_vfork_works=yes],
+ [ac_cv_func_vfork_works=no],
+ [ac_cv_func_vfork_works=cross])])
+])# _AC_FUNC_VFORK
+
+
+# AU::AC_FUNC_VFORK
+# -----------------
+AU_ALIAS([AC_FUNC_VFORK], [AC_FUNC_FORK])
+
+# AU::AC_VFORK
+# ------------
+AU_ALIAS([AC_VFORK], [AC_FUNC_FORK])
+
+
+# AC_FUNC_VPRINTF
+# ---------------
+# Why the heck is that _doprnt does not define HAVE__DOPRNT???
+# That the logical name!
+AC_DEFUN([AC_FUNC_VPRINTF],
+[AC_CHECK_FUNCS(vprintf, []
+[AC_CHECK_FUNC(_doprnt,
+ [AC_DEFINE(HAVE_DOPRNT, 1,
+ [Define to 1 if you don't have `vprintf' but do have
+ `_doprnt.'])])])
+])
+
+
+# AU::AC_VPRINTF
+# --------------
+AU_ALIAS([AC_VPRINTF], [AC_FUNC_VPRINTF])
+
+
+# AC_FUNC_WAIT3
+# -------------
+# Don't bother too hard maintaining this macro, as it's obsoleted.
+# We don't AU define it, since we don't have any alternative to propose,
+# any invocation should be removed, and the code adjusted.
+AN_FUNCTION([wait3], [AC_FUNC_WAIT3])
+AC_DEFUN([AC_FUNC_WAIT3],
+[AC_DIAGNOSE([obsolete],
+[$0: `wait3' has been removed from POSIX.
+Remove this `AC_FUNC_WAIT3' and adjust your code to use `waitpid' instead.])dnl
+AC_CACHE_CHECK([for wait3 that fills in rusage],
+ [ac_cv_func_wait3_rusage],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT[
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+/* HP-UX has wait3 but does not fill in rusage at all. */
+int
+main ()
+{
+ struct rusage r;
+ int i;
+ /* Use a field that we can force nonzero --
+ voluntary context switches.
+ For systems like NeXT and OSF/1 that don't set it,
+ also use the system CPU time. And page faults (I/O) for Linux. */
+ r.ru_nvcsw = 0;
+ r.ru_stime.tv_sec = 0;
+ r.ru_stime.tv_usec = 0;
+ r.ru_majflt = r.ru_minflt = 0;
+ switch (fork ())
+ {
+ case 0: /* Child. */
+ sleep(1); /* Give up the CPU. */
+ _exit(0);
+ break;
+ case -1: /* What can we do? */
+ _exit(0);
+ break;
+ default: /* Parent. */
+ wait3(&i, 0, &r);
+ /* Avoid "text file busy" from rm on fast HP-UX machines. */
+ sleep(2);
+ return (r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0
+ && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0);
+ }
+}]])],
+ [ac_cv_func_wait3_rusage=yes],
+ [ac_cv_func_wait3_rusage=no],
+ [ac_cv_func_wait3_rusage=no])])
+if test $ac_cv_func_wait3_rusage = yes; then
+ AC_DEFINE(HAVE_WAIT3, 1,
+ [Define to 1 if you have the `wait3' system call.
+ Deprecated, you should no longer depend upon `wait3'.])
+fi
+])# AC_FUNC_WAIT3
+
+
+# AU::AC_WAIT3
+# ------------
+AU_ALIAS([AC_WAIT3], [AC_FUNC_WAIT3])
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
new file mode 100644
index 0000000..adfae1d
--- /dev/null
+++ b/lib/autoconf/general.m4
@@ -0,0 +1,3081 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Parameterized macros.
+m4_define([_AC_COPYRIGHT_YEARS], [
+Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+])
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+## ---------------- ##
+## The diversions. ##
+## ---------------- ##
+
+
+# We heavily use m4's diversions both for the initializations and for
+# required macros (see AC_REQUIRE), because in both cases we have to
+# issue high in `configure' something which is discovered late.
+#
+# KILL is only used to suppress output.
+#
+# The layers of `configure'. We let m4 undivert them by itself, when
+# it reaches the end of `configure.ac'.
+#
+# - BINSH
+# #! /bin/sh
+# - HEADER-REVISION
+# Sent by AC_REVISION
+# - HEADER-COMMENT
+# Purpose of the script.
+# - HEADER-COPYRIGHT
+# Copyright notice(s)
+# - M4SH-INIT
+# Initialization of bottom layers.
+#
+# - DEFAULTS
+# early initializations (defaults)
+# - PARSE_ARGS
+# initialization code, option handling loop.
+#
+# - HELP_BEGIN
+# Handling `configure --help'.
+# - HELP_CANON
+# Help msg for AC_CANONICAL_*
+# - HELP_ENABLE
+# Help msg from AC_ARG_ENABLE.
+# - HELP_WITH
+# Help msg from AC_ARG_WITH.
+# - HELP_VAR
+# Help msg from AC_ARG_VAR.
+# - HELP_VAR_END
+# A small paragraph on the use of the variables.
+# - HELP_END
+# Tail of the handling of --help.
+#
+# - VERSION_BEGIN
+# Head of the handling of --version.
+# - VERSION_FSF
+# FSF copyright notice for --version.
+# - VERSION_USER
+# User copyright notice for --version.
+# - VERSION_END
+# Tail of the handling of --version.
+#
+# - SHELL_FN
+# Shell functions.
+#
+# - INIT_PREPARE
+# Tail of initialization code.
+#
+# - BODY
+# the tests and output code
+#
+
+
+# _m4_divert(DIVERSION-NAME)
+# --------------------------
+# Convert a diversion name into its number. Otherwise, return
+# DIVERSION-NAME which is supposed to be an actual diversion number.
+# Of course it would be nicer to use m4_case here, instead of zillions
+# of little macros, but it then takes twice longer to run `autoconf'!
+#
+# From M4sugar:
+# -1. KILL
+# 10000. GROW
+#
+# From M4sh:
+# 0. BINSH
+# 1. HEADER-REVISION
+# 2. HEADER-COMMENT
+# 3. HEADER-COPYRIGHT
+# 4. M4SH-INIT
+# 1000. BODY
+m4_define([_m4_divert(DEFAULTS)], 10)
+m4_define([_m4_divert(PARSE_ARGS)], 20)
+
+m4_define([_m4_divert(HELP_BEGIN)], 100)
+m4_define([_m4_divert(HELP_CANON)], 101)
+m4_define([_m4_divert(HELP_ENABLE)], 102)
+m4_define([_m4_divert(HELP_WITH)], 103)
+m4_define([_m4_divert(HELP_VAR)], 104)
+m4_define([_m4_divert(HELP_VAR_END)], 105)
+m4_define([_m4_divert(HELP_END)], 106)
+
+m4_define([_m4_divert(VERSION_BEGIN)], 200)
+m4_define([_m4_divert(VERSION_FSF)], 201)
+m4_define([_m4_divert(VERSION_USER)], 202)
+m4_define([_m4_divert(VERSION_END)], 203)
+
+m4_define([_m4_divert(SHELL_FN)], 250)
+
+m4_define([_m4_divert(INIT_PREPARE)], 300)
+
+
+
+# AC_DIVERT_PUSH(DIVERSION-NAME)
+# AC_DIVERT_POP
+# ------------------------------
+m4_copy([m4_divert_push],[AC_DIVERT_PUSH])
+m4_copy([m4_divert_pop], [AC_DIVERT_POP])
+
+
+
+## ------------------------------------ ##
+## Defining/requiring Autoconf macros. ##
+## ------------------------------------ ##
+
+
+# AC_DEFUN(NAME, EXPANSION)
+# AC_DEFUN_ONCE(NAME, EXPANSION)
+# AC_BEFORE(THIS-MACRO-NAME, CALLED-MACRO-NAME)
+# AC_REQUIRE(STRING)
+# AC_PROVIDE(MACRO-NAME)
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+m4_copy([m4_defun], [AC_DEFUN])
+m4_copy([m4_defun_once], [AC_DEFUN_ONCE])
+m4_copy([m4_before], [AC_BEFORE])
+m4_copy([m4_require], [AC_REQUIRE])
+m4_copy([m4_provide], [AC_PROVIDE])
+m4_copy([m4_provide_if], [AC_PROVIDE_IFELSE])
+
+
+# AC_OBSOLETE(THIS-MACRO-NAME, [SUGGESTION])
+# ------------------------------------------
+m4_define([AC_OBSOLETE],
+[AC_DIAGNOSE([obsolete], [$1 is obsolete$2])])
+
+
+
+## ----------------------------- ##
+## Implementing shell functions. ##
+## ----------------------------- ##
+
+
+# AC_REQUIRE_SHELL_FN(NAME-TO-CHECK, COMMENT, BODY, [DIVERSION = SHELL_FN]
+# ------------------------------------------------------------------------
+# Same as AS_REQUIRE_SHELL_FN except that the default diversion comes
+# later in the script (speeding up configure --help and --version).
+AC_DEFUN([AC_REQUIRE_SHELL_FN],
+[AS_REQUIRE_SHELL_FN([$1], [$2], [$3], m4_default_quoted([$4], [SHELL_FN]))])
+
+
+
+## ----------------------------- ##
+## Implementing Autoconf loops. ##
+## ----------------------------- ##
+
+
+# AU::AC_FOREACH(VARIABLE, LIST, EXPRESSION)
+# ------------------------------------------
+AU_DEFUN([AC_FOREACH], [[m4_foreach_w($@)]])
+AC_DEFUN([AC_FOREACH], [m4_foreach_w($@)dnl
+AC_DIAGNOSE([obsolete], [The macro `AC_FOREACH' is obsolete.
+You should run autoupdate.])])
+
+
+
+## ----------------------------------- ##
+## Helping macros to display strings. ##
+## ----------------------------------- ##
+
+
+# AU::AC_HELP_STRING(LHS, RHS, [COLUMN])
+# --------------------------------------
+AU_ALIAS([AC_HELP_STRING], [AS_HELP_STRING])
+
+
+
+## ---------------------------------------------- ##
+## Information on the package being Autoconf'ed. ##
+## ---------------------------------------------- ##
+
+
+# It is suggested that the macros in this section appear before
+# AC_INIT in `configure.ac'. Nevertheless, this is just stylistic,
+# and from the implementation point of view, AC_INIT *must* be expanded
+# beforehand: it puts data in diversions which must appear before the
+# data provided by the macros of this section.
+
+# The solution is to require AC_INIT in each of these macros. AC_INIT
+# has the needed magic so that it can't be expanded twice.
+
+# _AC_INIT_LITERAL(STRING)
+# ------------------------
+# Reject STRING if it contains newline, or if it cannot be used as-is
+# in single-quoted strings, double-quoted strings, and quoted and
+# unquoted here-docs.
+m4_define([_AC_INIT_LITERAL],
+[m4_if(m4_index(m4_translit([[$1]], [
+""], ['']), ['])AS_LITERAL_HEREDOC_IF([$1], [-]), [-1-], [],
+ [m4_warn([syntax], [AC_INIT: not a literal: $1])])])
+
+# _AC_INIT_PACKAGE(PACKAGE-NAME, VERSION, BUG-REPORT, [TARNAME], [URL])
+# ---------------------------------------------------------------------
+m4_define([_AC_INIT_PACKAGE],
+[_AC_INIT_LITERAL([$1])
+_AC_INIT_LITERAL([$2])
+_AC_INIT_LITERAL([$3])
+m4_ifndef([AC_PACKAGE_NAME],
+ [m4_define([AC_PACKAGE_NAME], [$1])])
+m4_ifndef([AC_PACKAGE_TARNAME],
+ [m4_define([AC_PACKAGE_TARNAME],
+ m4_default([$4],
+ [m4_bpatsubst(m4_tolower(m4_bpatsubst([[$1]],
+ [GNU ])),
+ [[^_abcdefghijklmnopqrstuvwxyz0123456789]],
+ [-])]))])
+m4_ifndef([AC_PACKAGE_VERSION],
+ [m4_define([AC_PACKAGE_VERSION], [$2])])
+m4_ifndef([AC_PACKAGE_STRING],
+ [m4_define([AC_PACKAGE_STRING], [$1 $2])])
+m4_ifndef([AC_PACKAGE_BUGREPORT],
+ [m4_define([AC_PACKAGE_BUGREPORT], [$3])])
+m4_ifndef([AC_PACKAGE_URL],
+ [m4_define([AC_PACKAGE_URL],
+ m4_if([$5], [], [m4_if(m4_index([$1], [GNU ]), [0],
+ [[http://www.gnu.org/software/]m4_defn([AC_PACKAGE_TARNAME])[/]])],
+ [[$5]]))])
+])
+
+
+# AC_COPYRIGHT(TEXT, [VERSION-DIVERSION = VERSION_USER],
+# [FILTER = m4_newline])
+# ------------------------------------------------------
+# Emit TEXT, a copyright notice, in the top of `configure' and in
+# --version output. Macros in TEXT are evaluated once. Process
+# the --version output through FILTER (m4_newline, m4_do, and
+# m4_copyright_condense are common filters).
+m4_define([AC_COPYRIGHT],
+[AS_COPYRIGHT([$1])[]]dnl
+[m4_divert_text(m4_default_quoted([$2], [VERSION_USER]),
+[m4_default([$3], [m4_newline])([$1])])])# AC_COPYRIGHT
+
+
+# AC_REVISION(REVISION-INFO)
+# --------------------------
+# The second quote in the translit is just to cope with font-lock-mode
+# which sees the opening of a string.
+m4_define([AC_REVISION],
+[m4_divert_text([HEADER-REVISION],
+ [@%:@ From __file__ m4_translit([$1], [$""]).])dnl
+])
+
+
+
+
+## ---------------------------------------- ##
+## Requirements over the Autoconf version. ##
+## ---------------------------------------- ##
+
+
+# AU::AC_PREREQ(VERSION)
+# ----------------------
+# Update this `AC_PREREQ' statement to require the current version of
+# Autoconf. But fail if ever this autoupdate is too old.
+#
+# Note that `m4_defn([m4_PACKAGE_VERSION])' below are expanded before
+# calling `AU_DEFUN', i.e., it is hard coded. Otherwise it would be
+# quite complex for autoupdate to import the value of
+# `m4_PACKAGE_VERSION'. We could `AU_DEFUN' `m4_PACKAGE_VERSION', but
+# this would replace all its occurrences with the current version of
+# Autoconf, which is certainly not what the user intended.
+AU_DEFUN([AC_PREREQ],
+[m4_version_prereq([$1])[]dnl
+[AC_PREREQ(]]m4_dquote(m4_dquote(m4_defn([m4_PACKAGE_VERSION])))[[)]])
+
+
+# AC_PREREQ(VERSION)
+# ------------------
+# Complain and exit if the Autoconf version is less than VERSION.
+m4_undefine([AC_PREREQ])
+m4_copy([m4_version_prereq], [AC_PREREQ])
+
+
+# AC_AUTOCONF_VERSION
+# -------------------
+# The current version of Autoconf parsing this file.
+m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])
+
+
+
+
+
+## ---------------- ##
+## Initialization. ##
+## ---------------- ##
+
+
+# All the following macros are used by AC_INIT. Ideally, they should
+# be presented in the order in which they are output. Please, help us
+# sorting it, or at least, don't augment the entropy.
+
+
+# _AC_INIT_NOTICE
+# ---------------
+# Provide useful headers; override the HEADER-COMMENT created by M4sh.
+m4_define([_AC_INIT_NOTICE],
+[m4_cleardivert([HEADER-COMMENT])]dnl
+[m4_divert_text([HEADER-COMMENT],
+[@%:@ Guess values for system-dependent variables and create Makefiles.
+@%:@ Generated by m4_PACKAGE_STRING[]dnl
+m4_ifset([AC_PACKAGE_STRING], [ for AC_PACKAGE_STRING]).])
+
+m4_ifset([AC_PACKAGE_BUGREPORT],
+ [m4_divert_text([HEADER-COMMENT],
+ [@%:@
+@%:@ Report bugs to <AC_PACKAGE_BUGREPORT>.])])
+])
+
+
+# _AC_INIT_COPYRIGHT
+# ------------------
+# We dump to VERSION_FSF to make sure we are inserted before the
+# user copyrights, and after the setup of the --version handling.
+m4_define([_AC_INIT_COPYRIGHT],
+[AC_COPYRIGHT(m4_defn([_AC_COPYRIGHT_YEARS]), [VERSION_FSF], [
+m4_copyright_condense])dnl
+AC_COPYRIGHT(
+[This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.],
+ [VERSION_FSF], [m4_echo])])
+
+
+# File Descriptors
+# ----------------
+# Set up the file descriptors used by `configure'.
+# File descriptor usage:
+# 0 standard input (/dev/null)
+# 1 file creation
+# 2 errors and warnings
+# AS_MESSAGE_LOG_FD compiler messages saved in config.log
+# AS_MESSAGE_FD checking for... messages and results
+# AS_ORIGINAL_STDIN_FD original standard input (still open)
+#
+# stdin is /dev/null because checks that run programs may
+# inadvertently run interactive ones, which would stop configuration
+# until someone typed an EOF.
+m4_define([AS_MESSAGE_FD], 6)
+m4_define([AS_ORIGINAL_STDIN_FD], 7)
+# That's how they used to be named.
+AU_ALIAS([AC_FD_CC], [AS_MESSAGE_LOG_FD])
+AU_ALIAS([AC_FD_MSG], [AS_MESSAGE_FD])
+
+
+# _AC_INIT_DEFAULTS
+# -----------------
+# Values which defaults can be set from `configure.ac'.
+# `/bin/machine' is used in `glibcbug'. The others are used in config.*
+m4_define([_AC_INIT_DEFAULTS],
+[m4_divert_push([DEFAULTS])dnl
+
+test -n "$DJDIR" || exec AS_ORIGINAL_STDIN_FD<&0 </dev/null
+exec AS_MESSAGE_FD>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIB@&t@OBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+AC_SUBST([SHELL])dnl
+AC_SUBST([PATH_SEPARATOR])dnl
+
+# Identity of this package.
+AC_SUBST([PACKAGE_NAME],
+ [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])dnl
+AC_SUBST([PACKAGE_TARNAME],
+ [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])dnl
+AC_SUBST([PACKAGE_VERSION],
+ [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])dnl
+AC_SUBST([PACKAGE_STRING],
+ [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])dnl
+AC_SUBST([PACKAGE_BUGREPORT],
+ [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])dnl
+AC_SUBST([PACKAGE_URL],
+ [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])dnl
+
+m4_divert_pop([DEFAULTS])dnl
+m4_wrap_lifo([m4_divert_text([DEFAULTS],
+[ac_subst_vars='m4_set_dump([_AC_SUBST_VARS], m4_newline)'
+ac_subst_files='m4_ifdef([_AC_SUBST_FILES], [m4_defn([_AC_SUBST_FILES])])'
+ac_user_opts='
+enable_option_checking
+m4_ifdef([_AC_USER_OPTS], [m4_defn([_AC_USER_OPTS])
+])'
+m4_ifdef([_AC_PRECIOUS_VARS],
+ [_AC_ARG_VAR_STORE[]dnl
+ _AC_ARG_VAR_VALIDATE[]dnl
+ ac_precious_vars='m4_defn([_AC_PRECIOUS_VARS])'])
+m4_ifdef([_AC_LIST_SUBDIRS],
+ [ac_subdirs_all='m4_defn([_AC_LIST_SUBDIRS])'])dnl
+])])dnl
+])# _AC_INIT_DEFAULTS
+
+
+# AC_PREFIX_DEFAULT(PREFIX)
+# -------------------------
+AC_DEFUN([AC_PREFIX_DEFAULT],
+[m4_divert_text([DEFAULTS], [ac_default_prefix=$1])])
+
+
+# AC_PREFIX_PROGRAM(PROGRAM)
+# --------------------------
+# Guess the value for the `prefix' variable by looking for
+# the argument program along PATH and taking its parent.
+# Example: if the argument is `gcc' and we find /usr/local/gnu/bin/gcc,
+# set `prefix' to /usr/local/gnu.
+# This comes too late to find a site file based on the prefix,
+# and it might use a cached value for the path.
+# No big loss, I think, since most configures don't use this macro anyway.
+AC_DEFUN([AC_PREFIX_PROGRAM],
+[if test "x$prefix" = xNONE; then
+dnl We reimplement AC_MSG_CHECKING (mostly) to avoid the ... in the middle.
+ _AS_ECHO_N([checking for prefix by ])
+ AC_PATH_PROG(ac_prefix_program, [$1])
+ if test -n "$ac_prefix_program"; then
+ prefix=`AS_DIRNAME(["$ac_prefix_program"])`
+ prefix=`AS_DIRNAME(["$prefix"])`
+ fi
+fi
+])# AC_PREFIX_PROGRAM
+
+
+# AC_CONFIG_SRCDIR([UNIQUE-FILE-IN-SOURCE-DIR])
+# ---------------------------------------------
+# UNIQUE-FILE-IN-SOURCE-DIR is a file name unique to this package,
+# relative to the directory that configure is in, which we can look
+# for to find out if srcdir is correct.
+AC_DEFUN([AC_CONFIG_SRCDIR],
+[m4_divert_text([DEFAULTS], [ac_unique_file="$1"])])
+
+
+# _AC_INIT_DIRCHECK
+# -----------------
+# Set ac_pwd, and sanity-check it and the source and installation directories.
+#
+# (This macro is AC_REQUIREd by _AC_INIT_SRCDIR, so it has to be AC_DEFUNed.)
+#
+AC_DEFUN([_AC_INIT_DIRCHECK],
+[m4_divert_push([PARSE_ARGS])dnl
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ AC_MSG_ERROR([working directory cannot be determined])
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ AC_MSG_ERROR([pwd does not report name of working directory])
+
+m4_divert_pop([PARSE_ARGS])dnl
+])# _AC_INIT_DIRCHECK
+
+# _AC_INIT_SRCDIR
+# ---------------
+# Compute `srcdir' based on `$ac_unique_file'.
+#
+# (We have to AC_DEFUN it, since we use AC_REQUIRE.)
+#
+AC_DEFUN([_AC_INIT_SRCDIR],
+[AC_REQUIRE([_AC_INIT_DIRCHECK])dnl
+m4_divert_push([PARSE_ARGS])dnl
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`AS_DIRNAME(["$as_myself"])`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ AC_MSG_ERROR([cannot find sources ($ac_unique_file) in $srcdir])
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || AC_MSG_ERROR([$ac_msg])
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[[^/]]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+m4_divert_pop([PARSE_ARGS])dnl
+])# _AC_INIT_SRCDIR
+
+
+# _AC_INIT_PARSE_ARGS
+# -------------------
+m4_define([_AC_INIT_PARSE_ARGS],
+[m4_divert_push([PARSE_ARGS])dnl
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+AC_SUBST(exec_prefix, NONE)dnl
+no_create=
+no_recursion=
+AC_SUBST(prefix, NONE)dnl
+program_prefix=NONE
+program_suffix=NONE
+AC_SUBST(program_transform_name, [s,x,x,])dnl
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+AC_SUBST([bindir], ['${exec_prefix}/bin'])dnl
+AC_SUBST([sbindir], ['${exec_prefix}/sbin'])dnl
+AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])dnl
+AC_SUBST([datarootdir], ['${prefix}/share'])dnl
+AC_SUBST([datadir], ['${datarootdir}'])dnl
+AC_SUBST([sysconfdir], ['${prefix}/etc'])dnl
+AC_SUBST([sharedstatedir], ['${prefix}/com'])dnl
+AC_SUBST([localstatedir], ['${prefix}/var'])dnl
+AC_SUBST([includedir], ['${prefix}/include'])dnl
+AC_SUBST([oldincludedir], ['/usr/include'])dnl
+AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+ ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
+ ['${datarootdir}/doc/${PACKAGE}'])])dnl
+AC_SUBST([infodir], ['${datarootdir}/info'])dnl
+AC_SUBST([htmldir], ['${docdir}'])dnl
+AC_SUBST([dvidir], ['${docdir}'])dnl
+AC_SUBST([pdfdir], ['${docdir}'])dnl
+AC_SUBST([psdir], ['${docdir}'])dnl
+AC_SUBST([libdir], ['${exec_prefix}/lib'])dnl
+AC_SUBST([localedir], ['${datarootdir}/locale'])dnl
+AC_SUBST([mandir], ['${datarootdir}/man'])dnl
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[[^=]]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ _AC_INIT_PARSE_ENABLE([disable])
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ _AC_INIT_PARSE_ENABLE([enable])
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ _AC_INIT_PARSE_ENABLE([with])
+
+ _AC_INIT_PARSE_ENABLE([without])
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: `$ac_option'
+Try `$[0] --help' for more information])
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([[^=]]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [[0-9]]* | *[[!_$as_cr_alnum]]* )
+ AC_MSG_ERROR([invalid variable name: `$ac_envvar']) ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ AC_MSG_WARN([you should use --build, --host, --target])
+ expr "x$ac_option" : "[.*[^-._$as_cr_alnum]]" >/dev/null &&
+ AC_MSG_WARN([invalid host type: $ac_option])
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ AC_MSG_ERROR([missing argument to $ac_option])
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) AC_MSG_ERROR([unrecognized options: $ac_unrecognized_opts]) ;;
+ *) AC_MSG_WARN( [unrecognized options: $ac_unrecognized_opts]) ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[[^/]]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [[\\/$]]* | ?:[[\\/]]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ AC_MSG_ERROR([expected an absolute directory name for --$ac_var: $ac_val])
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec AS_MESSAGE_FD>/dev/null
+
+m4_divert_pop([PARSE_ARGS])dnl
+])# _AC_INIT_PARSE_ARGS
+
+
+# _AC_INIT_PARSE_ENABLE(OPTION-NAME)
+# ----------------------------------
+# A trivial front-end for _AC_INIT_PARSE_ENABLE2.
+#
+m4_define([_AC_INIT_PARSE_ENABLE],
+[m4_bmatch([$1], [^with],
+ [_AC_INIT_PARSE_ENABLE2([$1], [with])],
+ [_AC_INIT_PARSE_ENABLE2([$1], [enable])])])
+
+
+# _AC_INIT_PARSE_ENABLE2(OPTION-NAME, POSITIVE-NAME)
+# --------------------------------------------------
+# Handle an `--enable' or a `--with' option.
+#
+# OPTION-NAME is `enable', `disable', `with', or `without'.
+# POSITIVE-NAME is the corresponding positive variant, i.e. `enable' or `with'.
+#
+# Positive variant of the option is recognized by the condition
+# OPTION-NAME == POSITIVE-NAME .
+#
+m4_define([_AC_INIT_PARSE_ENABLE2],
+[-$1-* | --$1-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*$1-\(m4_if([$1], [$2], [[[^=]]], [.])*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : "[.*[^-+._$as_cr_alnum]]" >/dev/null &&
+ AC_MSG_ERROR(
+ [invalid ]m4_if([$2], [with], [package], [feature])[ name: $ac_useropt])
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`AS_ECHO(["$ac_useropt"]) | sed 's/[[-+.]]/_/g'`
+ case $ac_user_opts in
+ *"
+"$2_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--$1-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval $2_$ac_useropt=m4_if([$1], [$2], [\$ac_optarg], [no]) ;;dnl
+])
+
+
+# _AC_INIT_HELP
+# -------------
+# Handle the `configure --help' message.
+m4_define([_AC_INIT_HELP],
+[m4_divert_push([HELP_BEGIN])dnl
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures m4_ifset([AC_PACKAGE_STRING],
+ [AC_PACKAGE_STRING],
+ [this package]) to adapt to many kinds of systems.
+
+Usage: $[0] [[OPTION]]... [[VAR=VALUE]]...
+
+[To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+]AS_HELP_STRING([--prefix=PREFIX],
+ [install architecture-independent files in PREFIX [$ac_default_prefix]])
+AS_HELP_STRING([--exec-prefix=EPREFIX],
+ [install architecture-dependent files in EPREFIX [PREFIX]])[
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+]AS_HELP_STRING([--docdir=DIR],
+ [documentation root ]@<:@DATAROOTDIR/doc/m4_ifset([AC_PACKAGE_TARNAME],
+ [AC_PACKAGE_TARNAME], [PACKAGE])@:>@)[
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF]
+m4_divert_pop([HELP_BEGIN])dnl
+dnl The order of the diversions here is
+dnl - HELP_BEGIN
+dnl which may be extended by extra generic options such as with X or
+dnl AC_ARG_PROGRAM. Displayed only in long --help.
+dnl
+dnl - HELP_CANON
+dnl Support for cross compilation (--build, --host and --target).
+dnl Display only in long --help.
+dnl
+dnl - HELP_ENABLE
+dnl which starts with the trailer of the HELP_BEGIN, HELP_CANON section,
+dnl then implements the header of the non generic options.
+dnl
+dnl - HELP_WITH
+dnl
+dnl - HELP_VAR
+dnl
+dnl - HELP_VAR_END
+dnl
+dnl - HELP_END
+dnl initialized below, in which we dump the trailer (handling of the
+dnl recursion for instance).
+m4_divert_push([HELP_ENABLE])dnl
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+m4_ifset([AC_PACKAGE_STRING],
+[ case $ac_init_help in
+ short | recursive ) echo "Configuration of AC_PACKAGE_STRING:";;
+ esac])
+ cat <<\_ACEOF
+m4_divert_pop([HELP_ENABLE])dnl
+m4_divert_push([HELP_END])dnl
+
+Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>],
+ [the package provider]).dnl
+m4_ifdef([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], [
+AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])])
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ _AC_SRCDIRS(["$ac_dir"])
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ AC_MSG_WARN([no configuration information is in $ac_dir])
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+m4_divert_pop([HELP_END])dnl
+])# _AC_INIT_HELP
+
+
+# _AC_INIT_VERSION
+# ----------------
+# Handle the `configure --version' message.
+m4_define([_AC_INIT_VERSION],
+[m4_divert_text([VERSION_BEGIN],
+[if $ac_init_version; then
+ cat <<\_ACEOF
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])configure[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+generated by m4_PACKAGE_STRING])
+m4_divert_text([VERSION_END],
+[_ACEOF
+ exit
+fi])dnl
+])# _AC_INIT_VERSION
+
+
+# _AC_INIT_CONFIG_LOG
+# -------------------
+# Initialize the config.log file descriptor and write header to it.
+m4_define([_AC_INIT_CONFIG_LOG],
+[m4_divert_text([INIT_PREPARE],
+[m4_define([AS_MESSAGE_LOG_FD], 5)dnl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])dnl
+$as_me[]m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]), which was
+generated by m4_PACKAGE_STRING. Invocation command line was
+
+ $ $[0] $[@]
+
+_ACEOF
+exec AS_MESSAGE_LOG_FD>>config.log
+AS_UNAME >&AS_MESSAGE_LOG_FD
+
+cat >&AS_MESSAGE_LOG_FD <<_ACEOF
+
+
+m4_text_box([Core tests.])
+
+_ACEOF
+])])# _AC_INIT_CONFIG_LOG
+
+
+# _AC_INIT_PREPARE
+# ----------------
+# Called by AC_INIT to build the preamble of the `configure' scripts.
+# 1. Trap and clean up various tmp files.
+# 2. Set up the fd and output files
+# 3. Remember the options given to `configure' for `config.status --recheck'.
+# 4. Initiates confdefs.h
+# 5. Loads site and cache files
+m4_define([_AC_INIT_PREPARE],
+[m4_divert_push([INIT_PREPARE])dnl
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) AS_VAR_APPEND([ac_configure_args0], [" '$ac_arg'"]) ;;
+ 2)
+ AS_VAR_APPEND([ac_configure_args1], [" '$ac_arg'"])
+dnl If trying to remove duplicates, be sure to (i) keep the *last*
+dnl value (e.g. --prefix=1 --prefix=2 --prefix=1 might keep 2 only),
+dnl and (ii) not to strip long options (--prefix foo --prefix bar might
+dnl give --prefix foo bar).
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+dnl Use broad patterns, as arguments that would have already made configure
+dnl exit don't matter.
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ AS_VAR_APPEND([ac_configure_args], [" '$ac_arg'"])
+ ;;
+ esac
+ done
+done
+AS_UNSET(ac_configure_args0)
+AS_UNSET(ac_configure_args1)
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ AS_BOX([Cache variables.])
+ echo
+ m4_bpatsubsts(m4_defn([_AC_CACHE_DUMP]),
+ [^ *\(#.*\)?
+], [],
+ ['], ['\\''])
+ echo
+
+ AS_BOX([Output variables.])
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`AS_ECHO(["$ac_val"]) | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ AS_ECHO(["$ac_var='\''$ac_val'\''"])
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ AS_BOX([File substitutions.])
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`AS_ECHO(["$ac_val"]) | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ AS_ECHO(["$ac_var='\''$ac_val'\''"])
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ AS_BOX([confdefs.h.])
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ AS_ECHO(["$as_me: caught signal $ac_signal"])
+ AS_ECHO(["$as_me: exit $exit_status"])
+ } >&AS_MESSAGE_LOG_FD
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$[$]* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; AS_EXIT([1])' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+dnl AIX cpp loses on an empty file, NextStep 3.3 (patch 3) loses on a file
+dnl containing less than 14 bytes (including the newline).
+AS_ECHO(["/* confdefs.h */"]) > confdefs.h
+
+# Predefined preprocessor variables.
+AC_DEFINE_UNQUOTED([PACKAGE_NAME], ["$PACKAGE_NAME"],
+ [Define to the full name of this package.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_TARNAME], ["$PACKAGE_TARNAME"],
+ [Define to the one symbol short name of this package.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_VERSION], ["$PACKAGE_VERSION"],
+ [Define to the version of this package.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_STRING], ["$PACKAGE_STRING"],
+ [Define to the full name and version of this package.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_BUGREPORT], ["$PACKAGE_BUGREPORT"],
+ [Define to the address where bug reports for this package
+ should be sent.])dnl
+AC_DEFINE_UNQUOTED([PACKAGE_URL], ["$PACKAGE_URL"],
+ [Define to the home page for this package.])
+
+# Let the site file select an alternate cache file if it wants to.
+AC_SITE_LOAD
+AC_CACHE_LOAD
+m4_divert_pop([INIT_PREPARE])dnl
+])# _AC_INIT_PREPARE
+
+
+# AU::AC_INIT([UNIQUE-FILE-IN-SOURCE-DIR])
+# ----------------------------------------
+# This macro is used only for Autoupdate.
+AU_DEFUN([AC_INIT],
+[m4_ifval([$2], [[AC_INIT($@)]],
+ [m4_ifval([$1],
+[[AC_INIT]
+AC_CONFIG_SRCDIR([$1])], [[AC_INIT]])])[]dnl
+])
+
+
+# AC_INIT([PACKAGE, VERSION, [BUG-REPORT], [TARNAME], [URL])
+# ----------------------------------------------------------
+# Include the user macro files, prepare the diversions, and output the
+# preamble of the `configure' script.
+#
+# If BUG-REPORT is omitted, do without (unless the user previously
+# defined the m4 macro AC_PACKAGE_BUGREPORT). If TARNAME is omitted,
+# use PACKAGE to seed it. If URL is omitted, use
+# `http://www.gnu.org/software/TARNAME/' if PACKAGE begins with `GNU',
+# otherwise, do without.
+#
+# Note that the order is important: first initialize, then set the
+# AC_CONFIG_SRCDIR.
+m4_define([AC_INIT],
+[# Forbidden tokens and exceptions.
+m4_pattern_forbid([^_?A[CHUM]_])
+m4_pattern_forbid([_AC_])
+m4_pattern_forbid([^LIBOBJS$],
+ [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+# Actually reserved by M4sh.
+m4_pattern_allow([^AS_FLAGS$])
+# So that the autoconf-generated scripts will always re-execute
+# themselves with $CONFIG_SHELL, if that's set in the environment.
+m4_define([_AS_FORCE_REEXEC_WITH_CONFIG_SHELL], [yes])
+AS_INIT[]dnl
+AS_PREPARE[]dnl
+m4_divert_push([KILL])
+m4_ifval([$2], [_AC_INIT_PACKAGE($@)])
+_AC_INIT_DEFAULTS
+_AC_INIT_PARSE_ARGS
+_AC_INIT_DIRCHECK
+_AC_INIT_SRCDIR
+_AC_INIT_HELP
+_AC_INIT_VERSION
+_AC_INIT_CONFIG_LOG
+_AC_INIT_PREPARE
+_AC_INIT_NOTICE
+_AC_INIT_COPYRIGHT
+m4_divert_text([SHELL_FN], [
+m4_text_box([Autoconf initialization.])])
+m4_divert_pop
+m4_ifval([$2], , [m4_ifval([$1], [AC_CONFIG_SRCDIR([$1])])])dnl
+dnl
+dnl Substitute for predefined variables.
+AC_SUBST([DEFS])dnl
+AC_SUBST([ECHO_C])dnl
+AC_SUBST([ECHO_N])dnl
+AC_SUBST([ECHO_T])dnl
+AC_SUBST([LIBS])dnl
+_AC_ARG_VAR_PRECIOUS([build_alias])AC_SUBST([build_alias])dnl
+_AC_ARG_VAR_PRECIOUS([host_alias])AC_SUBST([host_alias])dnl
+_AC_ARG_VAR_PRECIOUS([target_alias])AC_SUBST([target_alias])dnl
+dnl
+AC_LANG_PUSH(C)
+])
+
+
+
+
+## ------------------------------------------------------------- ##
+## Selecting optional features, working with optional software. ##
+## ------------------------------------------------------------- ##
+
+# AC_PRESERVE_HELP_ORDER
+# ----------------------
+# Emit help strings in the order given, rather than grouping all --enable-FOO
+# and all --with-BAR.
+AC_DEFUN([AC_PRESERVE_HELP_ORDER],
+[m4_divert_once([HELP_ENABLE], [[
+Optional Features and Packages:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)]])
+m4_define([_m4_divert(HELP_ENABLE)], _m4_divert(HELP_WITH))
+])# AC_PRESERVE_HELP_ORDER
+
+# _AC_ENABLE_IF(OPTION, FEATURE, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# -------------------------------------------------------------------
+# Common code for AC_ARG_ENABLE and AC_ARG_WITH.
+# OPTION is either "enable" or "with".
+#
+m4_define([_AC_ENABLE_IF],
+[@%:@ Check whether --$1-$2 was given.
+_AC_ENABLE_IF_ACTION([$1], m4_translit([$2], [-+.], [___]), [$3], [$4])
+])
+
+m4_define([_AC_ENABLE_IF_ACTION],
+[m4_append_uniq([_AC_USER_OPTS], [$1_$2], [
+])dnl
+AS_IF([test "${$1_$2+set}" = set], [$1val=$$1_$2; $3], [$4])dnl
+])
+
+# AC_ARG_ENABLE(FEATURE, HELP-STRING, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ------------------------------------------------------------------------
+AC_DEFUN([AC_ARG_ENABLE],
+[AC_PROVIDE_IFELSE([AC_PRESERVE_HELP_ORDER],
+[],
+[m4_divert_once([HELP_ENABLE], [[
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]]])])dnl
+m4_divert_once([HELP_ENABLE], [$2])dnl
+_AC_ENABLE_IF([enable], [$1], [$3], [$4])dnl
+])# AC_ARG_ENABLE
+
+
+AU_DEFUN([AC_ENABLE],
+[AC_ARG_ENABLE([$1], [ --enable-$1], [$2], [$3])])
+
+
+# AC_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, [ACTION-IF-FALSE])
+# --------------------------------------------------------------------
+AC_DEFUN([AC_ARG_WITH],
+[AC_PROVIDE_IFELSE([AC_PRESERVE_HELP_ORDER],
+[],
+[m4_divert_once([HELP_WITH], [[
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)]])])
+m4_divert_once([HELP_WITH], [$2])dnl
+_AC_ENABLE_IF([with], [$1], [$3], [$4])dnl
+])# AC_ARG_WITH
+
+AU_DEFUN([AC_WITH],
+[AC_ARG_WITH([$1], [ --with-$1], [$2], [$3])])
+
+# AC_DISABLE_OPTION_CHECKING
+# --------------------------
+AC_DEFUN([AC_DISABLE_OPTION_CHECKING],
+[m4_divert_once([DEFAULTS], [enable_option_checking=no])
+])# AC_DISABLE_OPTION_CHECKING
+
+
+## ----------------------------------------- ##
+## Remembering variables for reconfiguring. ##
+## ----------------------------------------- ##
+
+
+# AC_ARG_VAR(VARNAME, DOCUMENTATION)
+# ----------------------------------
+# Register VARNAME as a precious variable, and document it in
+# `configure --help' (but only once).
+AC_DEFUN([AC_ARG_VAR],
+[m4_divert_once([HELP_VAR], [[
+Some influential environment variables:]])dnl
+m4_divert_once([HELP_VAR_END], [[
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.]])dnl
+m4_expand_once([m4_divert_text([HELP_VAR],
+ [AS_HELP_STRING([$1], [$2], [ ])])],
+ [$0($1)])dnl
+AC_SUBST([$1])dnl
+_AC_ARG_VAR_PRECIOUS([$1])dnl
+])# AC_ARG_VAR
+
+
+# _AC_ARG_VAR_PRECIOUS(VARNAME)
+# -----------------------------
+# Declare VARNAME is precious.
+m4_define([_AC_ARG_VAR_PRECIOUS],
+[m4_append_uniq([_AC_PRECIOUS_VARS], [$1], [
+])dnl
+])
+
+
+# _AC_ARG_VAR_STORE
+# -----------------
+# We try to diagnose when precious variables have changed. To do this,
+# make two early snapshots (after the option processing to take
+# explicit variables into account) of those variables: one (ac_env_)
+# which represents the current run, and a second (ac_cv_env_) which,
+# at the first run, will be saved in the cache. As an exception to
+# the cache mechanism, its loading will override these variables (non
+# `ac_cv_env_' cache value are only set when unset).
+#
+# In subsequent runs, after having loaded the cache, compare
+# ac_cv_env_foo against ac_env_foo. See _AC_ARG_VAR_VALIDATE.
+m4_define([_AC_ARG_VAR_STORE],
+[m4_divert_text([PARSE_ARGS],
+[for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done])dnl
+])
+
+
+# _AC_ARG_VAR_VALIDATE
+# --------------------
+# The precious variables are saved twice at the beginning of
+# configure. E.g., PRECIOUS is saved as `ac_env_PRECIOUS_set' and
+# `ac_env_PRECIOUS_value' on the one hand and `ac_cv_env_PRECIOUS_set'
+# and `ac_cv_env_PRECIOUS_value' on the other hand.
+#
+# Now the cache has just been loaded, so `ac_cv_env_' represents the
+# content of the cached values, while `ac_env_' represents that of the
+# current values.
+#
+# So we check that `ac_env_' and `ac_cv_env_' are consistent. If
+# they aren't, die.
+m4_define([_AC_ARG_VAR_VALIDATE],
+[m4_divert_text([INIT_PREPARE],
+[# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ AS_MESSAGE([error: `$ac_var' was set to `$ac_old_val' in the previous run], 2)
+ ac_cache_corrupted=: ;;
+ ,set)
+ AS_MESSAGE([error: `$ac_var' was not set in the previous run], 2)
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ AS_MESSAGE([error: `$ac_var' has changed since the previous run:], 2)
+ ac_cache_corrupted=:
+ else
+ AS_MESSAGE([warning: ignoring whitespace changes in `$ac_var' since the previous run:], 2)
+ eval $ac_var=\$ac_old_val
+ fi
+ AS_MESSAGE([ former value: `$ac_old_val'], 2)
+ AS_MESSAGE([ current value: `$ac_new_val'], 2)
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`AS_ECHO(["$ac_new_val"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) AS_VAR_APPEND([ac_configure_args], [" '$ac_arg'"]) ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ AS_MESSAGE([error: in `$ac_pwd':], 2)
+ AS_MESSAGE([error: changes in the environment can compromise the build], 2)
+ AS_ERROR([run `make distclean' and/or `rm $cache_file' and start over])
+fi])dnl
+])# _AC_ARG_VAR_VALIDATE
+
+
+
+
+
+## ---------------------------- ##
+## Transforming program names. ##
+## ---------------------------- ##
+
+
+# AC_ARG_PROGRAM
+# --------------
+# This macro is expanded only once, to avoid that `foo' ends up being
+# installed as `ggfoo'.
+AC_DEFUN_ONCE([AC_ARG_PROGRAM],
+[dnl Document the options.
+m4_divert_push([HELP_BEGIN])dnl
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+m4_divert_pop([HELP_BEGIN])dnl
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+[ac_script='s/[\\$]/&&/g;s/;s,x,x,$//']
+program_transform_name=`AS_ECHO(["$program_transform_name"]) | sed "$ac_script"`
+])# AC_ARG_PROGRAM
+
+
+
+
+
+## ------------------------- ##
+## Finding auxiliary files. ##
+## ------------------------- ##
+
+
+# AC_CONFIG_AUX_DIR(DIR)
+# ----------------------
+# Find install-sh, config.sub, config.guess, and Cygnus configure
+# in directory DIR. These are auxiliary files used in configuration.
+# DIR can be either absolute or relative to $srcdir.
+AC_DEFUN([AC_CONFIG_AUX_DIR],
+[AC_CONFIG_AUX_DIRS($1 "$srcdir"/$1)])
+
+
+# AC_CONFIG_AUX_DIR_DEFAULT
+# -------------------------
+# The default is `$srcdir' or `$srcdir/..' or `$srcdir/../..'.
+# There's no need to call this macro explicitly; just AC_REQUIRE it.
+AC_DEFUN([AC_CONFIG_AUX_DIR_DEFAULT],
+[AC_CONFIG_AUX_DIRS("$srcdir" "$srcdir/.." "$srcdir/../..")])
+
+
+# AC_CONFIG_AUX_DIRS(DIR ...)
+# ---------------------------
+# Internal subroutine.
+# Search for the configuration auxiliary files in directory list $1.
+# We look only for install-sh, so users of AC_PROG_INSTALL
+# do not automatically need to distribute the other auxiliary files.
+AC_DEFUN([AC_CONFIG_AUX_DIRS],
+[ac_aux_dir=
+for ac_dir in $1; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ AC_MSG_ERROR([cannot find install-sh, install.sh, or shtool in $1])
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+])# AC_CONFIG_AUX_DIRS
+
+
+
+
+## ------------------------ ##
+## Finding aclocal macros. ##
+## ------------------------ ##
+
+
+# AC_CONFIG_MACRO_DIR(DIR)
+# ------------------------
+# Declare directory containing additional macros for aclocal.
+AC_DEFUN([AC_CONFIG_MACRO_DIR], [])
+
+
+
+## --------------------- ##
+## Requiring aux files. ##
+## --------------------- ##
+
+# AC_REQUIRE_AUX_FILE(FILE)
+# -------------------------
+# This macro does nothing, it's a hook to be read with `autoconf --trace'.
+# It announces FILE is required in the auxdir.
+m4_define([AC_REQUIRE_AUX_FILE],
+[AS_LITERAL_WORD_IF([$1], [],
+ [m4_fatal([$0: requires a literal argument])])])
+
+
+
+## ----------------------------------- ##
+## Getting the canonical system type. ##
+## ----------------------------------- ##
+
+# The inputs are:
+# configure --host=HOST --target=TARGET --build=BUILD
+#
+# The rules are:
+# 1. Build defaults to the current platform, as determined by config.guess.
+# 2. Host defaults to build.
+# 3. Target defaults to host.
+
+
+# _AC_CANONICAL_SPLIT(THING)
+# --------------------------
+# Generate the variables THING, THING_{alias cpu vendor os}.
+m4_define([_AC_CANONICAL_SPLIT],
+[case $ac_cv_$1 in
+*-*-*) ;;
+*) AC_MSG_ERROR([invalid value of canonical $1]);;
+esac
+AC_SUBST([$1], [$ac_cv_$1])dnl
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_$1
+shift
+AC_SUBST([$1_cpu], [$[1]])dnl
+AC_SUBST([$1_vendor], [$[2]])dnl
+shift; shift
+[# Remember, the first character of IFS is used to create $]*,
+# except with old shells:
+$1_os=$[*]
+IFS=$ac_save_IFS
+case $$1_os in *\ *) $1_os=`echo "$$1_os" | sed 's/ /-/g'`;; esac
+AC_SUBST([$1_os])dnl
+])# _AC_CANONICAL_SPLIT
+
+
+# AC_CANONICAL_BUILD
+# ------------------
+AC_DEFUN_ONCE([AC_CANONICAL_BUILD],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_REQUIRE_AUX_FILE([config.sub])dnl
+AC_REQUIRE_AUX_FILE([config.guess])dnl
+m4_divert_once([HELP_CANON],
+[[
+System types:
+ --build=BUILD configure for building on BUILD [guessed]]])dnl
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ AC_MSG_ERROR([cannot run $SHELL $ac_aux_dir/config.sub])
+
+AC_CACHE_CHECK([build system type], [ac_cv_build],
+[ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ AC_MSG_ERROR([cannot guess build type; you must specify one])
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $ac_build_alias failed])
+])
+_AC_CANONICAL_SPLIT(build)
+])# AC_CANONICAL_BUILD
+
+
+# AC_CANONICAL_HOST
+# -----------------
+AC_DEFUN_ONCE([AC_CANONICAL_HOST],
+[AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_divert_once([HELP_CANON],
+[[ --host=HOST cross-compile to build programs to run on HOST [BUILD]]])dnl
+AC_CACHE_CHECK([host system type], [ac_cv_host],
+[if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $host_alias failed])
+fi
+])
+_AC_CANONICAL_SPLIT([host])
+])# AC_CANONICAL_HOST
+
+
+# AC_CANONICAL_TARGET
+# -------------------
+AC_DEFUN_ONCE([AC_CANONICAL_TARGET],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_BEFORE([$0], [AC_ARG_PROGRAM])dnl
+m4_divert_once([HELP_CANON],
+[[ --target=TARGET configure for building compilers for TARGET [HOST]]])dnl
+AC_CACHE_CHECK([target system type], [ac_cv_target],
+[if test "x$target_alias" = x; then
+ ac_cv_target=$ac_cv_host
+else
+ ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+ AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $target_alias failed])
+fi
+])
+_AC_CANONICAL_SPLIT([target])
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ NONENONEs,x,x, &&
+ program_prefix=${target_alias}-[]dnl
+])# AC_CANONICAL_TARGET
+
+
+AU_ALIAS([AC_CANONICAL_SYSTEM], [AC_CANONICAL_TARGET])
+
+
+# AU::AC_VALIDATE_CACHED_SYSTEM_TUPLE([CMD])
+# ------------------------------------------
+# If the cache file is inconsistent with the current host,
+# target and build system types, execute CMD or print a default
+# error message. Now handled via _AC_ARG_VAR_PRECIOUS.
+AU_DEFUN([AC_VALIDATE_CACHED_SYSTEM_TUPLE], [])
+
+
+## ---------------------- ##
+## Caching test results. ##
+## ---------------------- ##
+
+
+# AC_SITE_LOAD
+# ------------
+# Look for site- or system-specific initialization scripts.
+m4_define([AC_SITE_LOAD],
+[# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in @%:@((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ AC_MSG_NOTICE([loading site script $ac_site_file])
+ sed 's/^/| /' "$ac_site_file" >&AS_MESSAGE_LOG_FD
+ . "$ac_site_file" \
+ || AC_MSG_FAILURE([failed to load site script $ac_site_file])
+ fi
+done
+])
+
+
+# AC_CACHE_LOAD
+# -------------
+m4_define([AC_CACHE_LOAD],
+[if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ AC_MSG_NOTICE([loading cache $cache_file])
+ case $cache_file in
+ [[\\/]]* | ?:[[\\/]]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ AC_MSG_NOTICE([creating cache $cache_file])
+ >$cache_file
+fi
+])# AC_CACHE_LOAD
+
+
+# _AC_CACHE_DUMP
+# --------------
+# Dump the cache to stdout. It can be in a pipe (this is a requirement).
+m4_define([_AC_CACHE_DUMP],
+[# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n ['s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p']`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) AC_MSG_WARN([cache variable $ac_var contains a newline]) ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) AS_UNSET([$ac_var]) ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ ["s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"]
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n ["/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"]
+ ;;
+ esac |
+ sort
+)dnl
+])# _AC_CACHE_DUMP
+
+
+# AC_CACHE_SAVE
+# -------------
+# Save the cache.
+# Allow a site initialization script to override cache values.
+m4_define([AC_CACHE_SAVE],
+[cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+_AC_CACHE_DUMP() |
+ sed ['
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end'] >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ AC_MSG_NOTICE([updating cache $cache_file])
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+dnl Try to update the cache file atomically even on different mount points;
+dnl at the same time, avoid filename limitation issues in the common case.
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ AC_MSG_NOTICE([not updating unwritable cache $cache_file])
+ fi
+fi
+rm -f confcache[]dnl
+])# AC_CACHE_SAVE
+
+
+# AC_CACHE_VAL(CACHE-ID, COMMANDS-TO-SET-IT)
+# ------------------------------------------
+# The name of shell var CACHE-ID must contain `_cv_' in order to get saved.
+# Should be dnl'ed. Try to catch common mistakes.
+m4_defun([AC_CACHE_VAL],
+[AS_LITERAL_WORD_IF([$1], [m4_if(m4_index(m4_quote($1), [_cv_]), [-1],
+ [AC_DIAGNOSE([syntax],
+[$0($1, ...): suspicious cache-id, must contain _cv_ to be cached])])])dnl
+m4_if(m4_index([$2], [AC_DEFINE]), [-1], [],
+ [AC_DIAGNOSE([syntax],
+[$0($1, ...): suspicious presence of an AC_DEFINE in the second argument, ]dnl
+[where no actions should be taken])])dnl
+m4_if(m4_index([$2], [AC_SUBST]), [-1], [],
+ [AC_DIAGNOSE([syntax],
+[$0($1, ...): suspicious presence of an AC_SUBST in the second argument, ]dnl
+[where no actions should be taken])])dnl
+AS_VAR_SET_IF([$1],
+ [_AS_ECHO_N([(cached) ])],
+ [$2])
+])
+
+
+# AC_CACHE_CHECK(MESSAGE, CACHE-ID, COMMANDS)
+# -------------------------------------------
+# Do not call this macro with a dnl right behind.
+m4_defun([AC_CACHE_CHECK],
+[AC_MSG_CHECKING([$1])
+AC_CACHE_VAL([$2], [$3])dnl
+AS_LITERAL_WORD_IF([$2],
+ [AC_MSG_RESULT([$$2])],
+ [AS_VAR_COPY([ac_res], [$2])
+ AC_MSG_RESULT([$ac_res])])dnl
+])
+
+# _AC_CACHE_CHECK_INT(MESSAGE, CACHE-ID, EXPRESSION,
+# [PROLOGUE = DEFAULT-INCLUDES], [IF-FAILS])
+# --------------------------------------------------------------
+AC_DEFUN([_AC_CACHE_CHECK_INT],
+[AC_CACHE_CHECK([$1], [$2],
+ [AC_COMPUTE_INT([$2], [$3], [$4], [$5])])
+])# _AC_CACHE_CHECK_INT
+
+
+
+## ---------------------- ##
+## Defining CPP symbols. ##
+## ---------------------- ##
+
+
+# AC_DEFINE_TRACE_LITERAL(LITERAL-CPP-SYMBOL)
+# -------------------------------------------
+# Used by --trace to collect the list of AC_DEFINEd macros.
+m4_define([AC_DEFINE_TRACE_LITERAL],
+[m4_pattern_allow([^$1$])dnl
+AS_IDENTIFIER_IF([$1], [],
+ [m4_warn([syntax], [AC_DEFINE: not an identifier: $1])])dnl
+])# AC_DEFINE_TRACE_LITERAL
+
+
+# AC_DEFINE_TRACE(CPP-SYMBOL)
+# ---------------------------
+# This macro is a wrapper around AC_DEFINE_TRACE_LITERAL which filters
+# out non literal symbols. CPP-SYMBOL must not include any parameters.
+m4_define([AC_DEFINE_TRACE],
+[AS_LITERAL_WORD_IF([$1], [AC_DEFINE_TRACE_LITERAL(_m4_expand([$1]))])])
+
+
+# AC_DEFINE(VARIABLE, [VALUE], [DESCRIPTION])
+# -------------------------------------------
+# Set VARIABLE to VALUE, verbatim, or 1. Remember the value
+# and if VARIABLE is affected the same VALUE, do nothing, else
+# die. The third argument is used by autoheader.
+m4_define([AC_DEFINE], [_AC_DEFINE_Q([_$0], $@)])
+
+# _AC_DEFINE(STRING)
+# ------------------
+# Append the pre-expanded STRING and a newline to confdefs.h, as if by
+# a quoted here-doc.
+m4_define([_AC_DEFINE],
+[AS_ECHO(["AS_ESCAPE([[$1]])"]) >>confdefs.h])
+
+
+# AC_DEFINE_UNQUOTED(VARIABLE, [VALUE], [DESCRIPTION])
+# ----------------------------------------------------
+# Similar, but perform shell substitutions $ ` \ once on VALUE, as
+# in an unquoted here-doc.
+m4_define([AC_DEFINE_UNQUOTED], [_AC_DEFINE_Q([_$0], $@)])
+
+# _AC_DEFINE_UNQUOTED(STRING)
+# ---------------------------
+# Append the pre-expanded STRING and a newline to confdefs.h, as if
+# with an unquoted here-doc, but avoiding a fork in the common case of
+# no backslash, no command substitution, no complex variable
+# substitution, and no quadrigraphs.
+m4_define([_AC_DEFINE_UNQUOTED],
+[m4_if(m4_bregexp([$1], [\\\|`\|\$(\|\${\|@]), [-1],
+ [AS_ECHO(["AS_ESCAPE([$1], [""])"]) >>confdefs.h],
+ [cat >>confdefs.h <<_ACEOF
+[$1]
+_ACEOF])])
+
+
+# _AC_DEFINE_Q(MACRO, VARIABLE, [VALUE], [DESCRIPTION])
+# -----------------------------------------------------
+# Internal function that performs common elements of AC_DEFINE{,_UNQUOTED}.
+# MACRO must take one argument, which is the fully expanded string to
+# append to confdefs.h as if by a possibly-quoted here-doc.
+#
+# m4_index is roughly 5 to 8 times faster than m4_bpatsubst, so we use
+# m4_format rather than regex to grab prefix up to first (). AC_name
+# is defined with over-quotation, so that we can avoid m4_defn; this
+# is only safe because the name should not contain $.
+#
+# Guarantee a match in m4_index, so as to avoid a bug with precision
+# -1 in m4_format in older m4.
+m4_define([_AC_DEFINE_Q],
+[m4_pushdef([AC_name], m4_format([[[%.*s]]], m4_index([$2(], [(]), [$2]))]dnl
+[AC_DEFINE_TRACE(AC_name)]dnl
+[m4_cond([m4_index([$3], [
+])], [-1], [],
+ [m4_bregexp([[$3]], [[^\\]
+], [-])], [], [],
+ [m4_warn([syntax], [AC_DEFINE]m4_if([$1], [_AC_DEFINE], [],
+ [[_UNQUOTED]])[: `$3' is not a valid preprocessor define value])])]dnl
+[m4_ifval([$4], [AH_TEMPLATE(AC_name, [$4])
+])_m4_popdef([AC_name])]dnl
+[$1(m4_expand([[@%:@define] $2 ]m4_if([$#], 2, 1,
+ [$3], [], [/**/], [[$3]])))
+])
+
+
+
+## -------------------------- ##
+## Setting output variables. ##
+## -------------------------- ##
+
+
+# AC_SUBST_TRACE(VARIABLE)
+# ------------------------
+# This macro is used with --trace to collect the list of substituted variables.
+m4_define([AC_SUBST_TRACE])
+
+
+# AC_SUBST(VARIABLE, [VALUE])
+# ---------------------------
+# Create an output variable from a shell VARIABLE. If VALUE is given
+# assign it to VARIABLE. Use `""' if you want to set VARIABLE to an
+# empty value, not an empty second argument.
+#
+m4_define([AC_SUBST],
+[AS_IDENTIFIER_IF([$1], [],
+ [m4_fatal([$0: `$1' is not a valid shell variable name])])]dnl
+[AC_SUBST_TRACE([$1])]dnl
+[m4_pattern_allow([^$1$])]dnl
+[m4_ifvaln([$2], [$1=$2])[]]dnl
+[m4_set_add([_AC_SUBST_VARS], [$1])])# AC_SUBST
+
+
+# AC_SUBST_FILE(VARIABLE)
+# -----------------------
+# Read the comments of the preceding macro.
+m4_define([AC_SUBST_FILE],
+[m4_pattern_allow([^$1$])dnl
+m4_append_uniq([_AC_SUBST_FILES], [$1], [
+])])
+
+
+
+## --------------------------------------- ##
+## Printing messages at autoconf runtime. ##
+## --------------------------------------- ##
+
+# In fact, I think we should promote the use of m4_warn and m4_fatal
+# directly. This will also avoid to some people to get it wrong
+# between AC_FATAL and AC_MSG_ERROR.
+
+
+# AC_DIAGNOSE(CATEGORY, MESSAGE)
+# AC_FATAL(MESSAGE, [EXIT-STATUS])
+# --------------------------------
+m4_define([AC_DIAGNOSE], [m4_warn($@)])
+m4_define([AC_FATAL], [m4_fatal($@)])
+
+
+# AC_WARNING(MESSAGE)
+# -------------------
+# Report a MESSAGE to the user of autoconf if `-W' or `-W all' was
+# specified.
+m4_define([AC_WARNING],
+[AC_DIAGNOSE([syntax], [$1])])
+
+
+
+
+## ---------------------------------------- ##
+## Printing messages at configure runtime. ##
+## ---------------------------------------- ##
+
+
+# AC_MSG_CHECKING(FEATURE)
+# ------------------------
+m4_define([AC_MSG_CHECKING],
+[{ _AS_ECHO_LOG([checking $1])
+_AS_ECHO_N([checking $1... ]); }dnl
+])
+
+
+# AC_MSG_RESULT(RESULT)
+# ---------------------
+m4_define([AC_MSG_RESULT],
+[{ _AS_ECHO_LOG([result: $1])
+_AS_ECHO([$1]); }dnl
+])
+
+
+# AC_MSG_WARN(PROBLEM)
+# AC_MSG_NOTICE(STRING)
+# AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
+# AC_MSG_FAILURE(ERROR, [EXIT-STATUS = 1])
+# ----------------------------------------
+m4_copy([AS_WARN], [AC_MSG_WARN])
+m4_copy([AS_MESSAGE], [AC_MSG_NOTICE])
+m4_copy([AS_ERROR], [AC_MSG_ERROR])
+m4_define([AC_MSG_FAILURE],
+[{ AS_MESSAGE([error: in `$ac_pwd':], 2)
+AC_MSG_ERROR([$1
+See `config.log' for more details], [$2]); }])
+
+
+# _AC_MSG_LOG_CONFTEST
+# --------------------
+m4_define([_AC_MSG_LOG_CONFTEST],
+[AS_ECHO(["$as_me: failed program was:"]) >&AS_MESSAGE_LOG_FD
+sed 's/^/| /' conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+])
+
+
+# AU::AC_CHECKING(FEATURE)
+# ------------------------
+AU_DEFUN([AC_CHECKING],
+[AS_MESSAGE([checking $1...])])
+
+
+# AU::AC_MSG_RESULT_UNQUOTED(RESULT)
+# ----------------------------------
+# No escaping, so it performed also backtick substitution.
+AU_DEFUN([AC_MSG_RESULT_UNQUOTED],
+[_AS_ECHO_UNQUOTED([$as_me:${as_lineno-$LINENO}: result: $1], AS_MESSAGE_LOG_FD)
+_AS_ECHO_UNQUOTED([$1])[]dnl
+])
+
+
+# AU::AC_VERBOSE(STRING)
+# ----------------------
+AU_ALIAS([AC_VERBOSE], [AC_MSG_RESULT])
+
+
+
+
+
+
+## ---------------------------- ##
+## Compiler-running mechanics. ##
+## ---------------------------- ##
+
+
+# _AC_RUN_LOG(COMMAND, LOG-COMMANDS)
+# ----------------------------------
+# Eval COMMAND, save the exit status in ac_status, and log it. The return
+# code is 0 if COMMAND succeeded, so that it can be used directly in AS_IF
+# constructs.
+AC_DEFUN([_AC_RUN_LOG],
+[{ { $2; } >&AS_MESSAGE_LOG_FD
+ ($1) 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ _AS_ECHO_LOG([\$? = $ac_status])
+ test $ac_status = 0; }])
+
+
+# _AC_RUN_LOG_STDERR(COMMAND, LOG-COMMANDS)
+# -----------------------------------------
+# Run COMMAND, save its stderr into conftest.err, save the exit status
+# in ac_status, and log it. Don't forget to clean up conftest.err after
+# use.
+# Note that when tracing, most shells will leave the traces in stderr
+# starting with "+": that's what this macro tries to address.
+# The return code is 0 if COMMAND succeeded, so that it can be used directly
+# in AS_IF constructs.
+AC_DEFUN([_AC_RUN_LOG_STDERR],
+[{ { $2; } >&AS_MESSAGE_LOG_FD
+ ($1) 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&AS_MESSAGE_LOG_FD
+ mv -f conftest.er1 conftest.err
+ fi
+ _AS_ECHO_LOG([\$? = $ac_status])
+ test $ac_status = 0; }])
+
+
+# _AC_RUN_LOG_LIMIT(COMMAND, LOG-COMMANDS, [LINES])
+# -------------------------------------------------
+# Like _AC_RUN_LOG, but only log LINES lines from stderr,
+# defaulting to 10 lines.
+AC_DEFUN([_AC_RUN_LOG_LIMIT],
+[{ { $2; } >&AS_MESSAGE_LOG_FD
+ ($1) 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed 'm4_default([$3], [10])a\
+... rest of stderr output deleted ...
+ m4_default([$3], [10])q' conftest.err >conftest.er1
+ cat conftest.er1 >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.er1 conftest.err
+ _AS_ECHO_LOG([\$? = $ac_status])
+ test $ac_status = 0; }])
+
+
+# _AC_DO_ECHO(COMMAND)
+# --------------------
+# Echo COMMAND. This is designed to be used just before evaluating COMMAND.
+AC_DEFUN([_AC_DO_ECHO],
+[m4_if([$1], [$ac_try], [], [ac_try="$1"
+])]dnl
+dnl If the string contains '\"', '`', or '\\', then just echo it rather
+dnl than expanding it. This is a hack, but it is safer, while also
+dnl typically expanding simple substrings like '$CC', which is what we want.
+dnl
+dnl Much of this macro body is quoted, to work around misuses like
+dnl `AC_CHECK_FUNC(sigblock, , AC_CHECK_LIB(bsd, sigblock))',
+dnl which underquotes the 3rd arg and would misbehave if we didn't quote here.
+dnl The "(($ac_try" instead of $ac_try avoids problems with even-worse
+dnl underquoting misuses, such as
+dnl `AC_CHECK_FUNC(foo, , AC_CHECK_LIB(a, foo, , AC_CHECK_LIB(b, foo)))'.
+dnl We normally wouldn't bother with this kind of workaround for invalid code
+dnl but this change was put in just before Autoconf 2.60 and we wanted to
+dnl minimize the integration hassle.
+[[case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""]
+AS_ECHO(["$ac_try_echo"])])
+
+# _AC_DO(COMMAND)
+# ---------------
+# Eval COMMAND, save the exit status in ac_status, and log it.
+# For internal use only.
+AC_DEFUN([_AC_DO],
+[_AC_RUN_LOG([eval "$1"],
+ [_AC_DO_ECHO([$1])])])
+
+
+# _AC_DO_STDERR(COMMAND)
+# ----------------------
+# Like _AC_RUN_LOG_STDERR, but eval (instead of running) COMMAND.
+AC_DEFUN([_AC_DO_STDERR],
+[_AC_RUN_LOG_STDERR([eval "$1"],
+ [_AC_DO_ECHO([$1])])])
+
+
+# _AC_DO_VAR(VARIABLE)
+# --------------------
+# Evaluate "$VARIABLE", which should be a valid shell command.
+# The purpose of this macro is to write "configure:123: command line"
+# into config.log for every test run.
+AC_DEFUN([_AC_DO_VAR],
+[_AC_DO([$$1])])
+
+
+# _AC_DO_TOKENS(COMMAND)
+# ----------------------
+# Like _AC_DO_VAR, but execute COMMAND instead, where COMMAND is a series of
+# tokens of the shell command language.
+AC_DEFUN([_AC_DO_TOKENS],
+[{ ac_try='$1'
+ _AC_DO([$ac_try]); }])
+
+
+# _AC_DO_LIMIT(COMMAND, [LINES])
+# ------------------------------
+# Like _AC_DO, but limit the amount of stderr lines logged to LINES.
+# For internal use only.
+AC_DEFUN([_AC_DO_LIMIT],
+[_AC_RUN_LOG_LIMIT([eval "$1"],
+ [_AC_DO_ECHO([$1])], [$2])])
+
+
+# _AC_EVAL(COMMAND)
+# -----------------
+# Eval COMMAND, save the exit status in ac_status, and log it.
+# Unlike _AC_DO, this macro mishandles quoted arguments in some cases.
+# It is present only for backward compatibility with previous Autoconf versions.
+AC_DEFUN([_AC_EVAL],
+[_AC_RUN_LOG([eval $1],
+ [eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$1\""])])
+
+
+# _AC_EVAL_STDERR(COMMAND)
+# ------------------------
+# Like _AC_RUN_LOG_STDERR, but eval (instead of running) COMMAND.
+# Unlike _AC_DO_STDERR, this macro mishandles quoted arguments in some cases.
+# It is present only for backward compatibility with previous Autoconf versions.
+AC_DEFUN([_AC_EVAL_STDERR],
+[_AC_RUN_LOG_STDERR([eval $1],
+ [eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$1\""])])
+
+
+# AC_TRY_EVAL(VARIABLE)
+# ---------------------
+# Evaluate $VARIABLE, which should be a valid shell command.
+# The purpose of this macro is to write "configure:123: command line"
+# into config.log for every test run.
+#
+# The AC_TRY_EVAL and AC_TRY_COMMAND macros are dangerous and
+# undocumented, and should not be used.
+# They may be removed or their API changed in a future release.
+# Autoconf itself no longer uses these two macros; they are present
+# only for backward compatibility with previous versions of Autoconf.
+# Not every shell command will work due to problems with eval
+# and quoting, and the rules for exactly what does work are tricky.
+# Worse, due to double-expansion during evaluation, arbitrary unintended
+# shell commands could be executed in some situations.
+AC_DEFUN([AC_TRY_EVAL],
+[_AC_EVAL([$$1])])
+
+
+# AC_TRY_COMMAND(COMMAND)
+# -----------------------
+# Like AC_TRY_EVAL, but execute COMMAND instead, where COMMAND is a series of
+# tokens of the shell command language.
+# This macro should not be used; see the comments under AC_TRY_EVAL for why.
+AC_DEFUN([AC_TRY_COMMAND],
+[{ ac_try='$1'
+ _AC_EVAL([$ac_try]); }])
+
+
+# AC_RUN_LOG(COMMAND)
+# -------------------
+AC_DEFUN([AC_RUN_LOG],
+[_AC_RUN_LOG([$1],
+ [AS_ECHO(["$as_me:${as_lineno-$LINENO}: AS_ESCAPE([$1])"])])])
+
+
+
+
+## ------------------------ ##
+## Examining declarations. ##
+## ------------------------ ##
+
+
+# _AC_PREPROC_IFELSE_BODY
+# -----------------------
+# Shell function body for _AC_PREPROC_IFELSE.
+m4_define([_AC_PREPROC_IFELSE_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AS_IF([_AC_DO_STDERR([$ac_cpp conftest.$ac_ext]) > conftest.i && {
+ test -z "$ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag$ac_[]_AC_LANG_ABBREV[]_werror_flag" ||
+ test ! -s conftest.err
+ }],
+ [ac_retval=0],
+ [_AC_MSG_LOG_CONFTEST
+ ac_retval=1])
+ AS_LINENO_POP
+ AS_SET_STATUS([$ac_retval])
+])# _AC_PREPROC_IFELSE_BODY
+
+
+# _AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ----------------------------------------------------------------
+# Try to preprocess PROGRAM.
+#
+# This macro can be used during the selection of a preprocessor.
+# eval is necessary to expand ac_cpp.
+AC_DEFUN([_AC_PREPROC_IFELSE],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_cpp],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_cpp], [LINENO],
+ [Try to preprocess conftest.$ac_ext, and return whether this succeeded.])],
+ [$0_BODY])]dnl
+[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl
+[AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_cpp "$LINENO"], [$2], [$3])
+rm -f conftest.err conftest.i[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl
+])# _AC_PREPROC_IFELSE
+
+# AC_PREPROC_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------
+# Try to preprocess PROGRAM. Requires that the preprocessor for the
+# current language was checked for, hence do not use this macro in macros
+# looking for a preprocessor.
+AC_DEFUN([AC_PREPROC_IFELSE],
+[AC_LANG_PREPROC_REQUIRE()dnl
+_AC_PREPROC_IFELSE($@)])
+
+
+# AC_TRY_CPP(INCLUDES, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------
+# AC_TRY_CPP is used to check whether particular header files exist.
+# (But it actually tests whether INCLUDES produces no CPP errors.)
+#
+# INCLUDES are not defaulted and are double quoted.
+AU_DEFUN([AC_TRY_CPP],
+[AC_PREPROC_IFELSE([AC_LANG_SOURCE([[$1]])], [$2], [$3])])
+
+
+# AC_EGREP_CPP(PATTERN, PROGRAM,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ------------------------------------------------------
+# Because this macro is used by AC_PROG_GCC_TRADITIONAL, which must
+# come early, it is not included in AC_BEFORE checks.
+AC_DEFUN([AC_EGREP_CPP],
+[AC_LANG_PREPROC_REQUIRE()dnl
+AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_LANG_CONFTEST([AC_LANG_SOURCE([[$2]])])
+AS_IF([dnl eval is necessary to expand ac_cpp.
+dnl Ultrix and Pyramid sh refuse to redirect output of eval, so use subshell.
+(eval "$ac_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+dnl Quote $1 to prevent m4 from eating character classes
+ $EGREP "[$1]" >/dev/null 2>&1],
+ [$3],
+ [$4])
+rm -f conftest*
+])# AC_EGREP_CPP
+
+
+# AC_EGREP_HEADER(PATTERN, HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------
+AC_DEFUN([AC_EGREP_HEADER],
+[AC_EGREP_CPP([$1],
+[#include <$2>
+], [$3], [$4])])
+
+
+
+
+## ------------------ ##
+## Examining syntax. ##
+## ------------------ ##
+
+# _AC_COMPILE_IFELSE_BODY
+# -----------------------
+# Shell function body for _AC_COMPILE_IFELSE.
+m4_define([_AC_COMPILE_IFELSE_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ rm -f conftest.$ac_objext
+ AS_IF([_AC_DO_STDERR($ac_compile) && {
+ test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext],
+ [ac_retval=0],
+ [_AC_MSG_LOG_CONFTEST
+ ac_retval=1])
+ AS_LINENO_POP
+ AS_SET_STATUS([$ac_retval])
+])# _AC_COMPILE_IFELSE_BODY
+
+
+# _AC_COMPILE_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ----------------------------------------------------------------
+# Try to compile PROGRAM.
+# This macro can be used during the selection of a compiler.
+AC_DEFUN([_AC_COMPILE_IFELSE],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_compile],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_compile], [LINENO],
+ [Try to compile conftest.$ac_ext, and return whether this succeeded.])],
+ [$0_BODY])]dnl
+[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl
+[AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_compile "$LINENO"], [$2], [$3])
+rm -f core conftest.err conftest.$ac_objext[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl
+])# _AC_COMPILE_IFELSE
+
+
+# AC_COMPILE_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------
+# Try to compile PROGRAM. Requires that the compiler for the current
+# language was checked for, hence do not use this macro in macros looking
+# for a compiler.
+AC_DEFUN([AC_COMPILE_IFELSE],
+[AC_LANG_COMPILER_REQUIRE()dnl
+_AC_COMPILE_IFELSE($@)])
+
+
+# AC_TRY_COMPILE(INCLUDES, FUNCTION-BODY,
+# [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------
+AU_DEFUN([AC_TRY_COMPILE],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4])])
+
+
+
+## --------------------- ##
+## Examining libraries. ##
+## --------------------- ##
+
+
+# _AC_LINK_IFELSE_BODY
+# --------------------
+# Shell function body for _AC_LINK_IFELSE.
+m4_define([_AC_LINK_IFELSE_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ AS_IF([_AC_DO_STDERR($ac_link) && {
+ test -z "$ac_[]_AC_LANG_ABBREV[]_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ AS_TEST_X([conftest$ac_exeext])
+ }],
+ [ac_retval=0],
+ [_AC_MSG_LOG_CONFTEST
+ ac_retval=1])
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ AS_LINENO_POP
+ AS_SET_STATUS([$ac_retval])
+])# _AC_LINK_IFELSE_BODY
+
+
+# _AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# -------------------------------------------------------------
+# Try to link PROGRAM.
+# This macro can be used during the selection of a compiler.
+#
+# Test that resulting file is executable; see the problem reported by mwoehlke
+# in <http://lists.gnu.org/archive/html/bug-coreutils/2006-10/msg00048.html>.
+# But skip the test when cross-compiling, to prevent problems like the one
+# reported by Chris Johns in
+# <http://lists.gnu.org/archive/html/autoconf/2007-03/msg00085.html>.
+#
+AC_DEFUN([_AC_LINK_IFELSE],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_link],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_link], [LINENO],
+ [Try to link conftest.$ac_ext, and return whether this succeeded.])],
+ [$0_BODY])]dnl
+[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl
+[AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_link "$LINENO"], [$2], [$3])
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl
+])# _AC_LINK_IFELSE
+
+
+# AC_LINK_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ------------------------------------------------------------
+# Try to link PROGRAM. Requires that the compiler for the current
+# language was checked for, hence do not use this macro in macros looking
+# for a compiler.
+AC_DEFUN([AC_LINK_IFELSE],
+[AC_LANG_COMPILER_REQUIRE()dnl
+_AC_LINK_IFELSE($@)])
+
+
+# AC_TRY_LINK(INCLUDES, FUNCTION-BODY,
+# [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ------------------------------------------------
+# Contrarily to AC_LINK_IFELSE, this macro double quote its first two args.
+AU_DEFUN([AC_TRY_LINK],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4])])
+
+
+# AC_COMPILE_CHECK(ECHO-TEXT, INCLUDES, FUNCTION-BODY,
+# ACTION-IF-TRUE, [ACTION-IF-FALSE])
+# ---------------------------------------------------
+AU_DEFUN([AC_COMPILE_CHECK],
+[m4_ifvaln([$1], [AC_MSG_CHECKING([for $1])])dnl
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[$2]], [[$3]])], [$4], [$5])])
+
+
+
+
+## ------------------------------- ##
+## Checking for runtime features. ##
+## ------------------------------- ##
+
+
+# _AC_RUN_IFELSE_BODY
+# -------------------
+# Shell function body for _AC_RUN_IFELSE.
+m4_define([_AC_RUN_IFELSE_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AS_IF([_AC_DO_VAR(ac_link) && _AC_DO_TOKENS(./conftest$ac_exeext)],
+ [ac_retval=0],
+ [AS_ECHO(["$as_me: program exited with status $ac_status"]) >&AS_MESSAGE_LOG_FD
+ _AC_MSG_LOG_CONFTEST
+ ac_retval=$ac_status])
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ AS_LINENO_POP
+ AS_SET_STATUS([$ac_retval])
+])# _AC_RUN_IFELSE_BODY
+
+
+# _AC_RUN_IFELSE(PROGRAM, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ------------------------------------------------------------
+# Compile, link, and run.
+# This macro can be used during the selection of a compiler.
+# We also remove conftest.o as if the compilation fails, some compilers
+# don't remove it. We remove gmon.out and bb.out, which may be
+# created during the run if the program is built with profiling support.
+AC_DEFUN([_AC_RUN_IFELSE],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_try_run],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_try_run], [LINENO],
+ [Try to link conftest.$ac_ext, and return whether this succeeded.
+ Assumes that executables *can* be run.])],
+ [$0_BODY])]dnl
+[m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])]dnl
+[AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_try_run "$LINENO"], [$2], [$3])
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam[]m4_ifval([$1], [ conftest.$ac_ext])[]dnl
+])# _AC_RUN_IFELSE
+
+# AC_RUN_IFELSE(PROGRAM,
+# [ACTION-IF-TRUE], [ACTION-IF-FALSE],
+# [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
+# ----------------------------------------------------------
+# Compile, link, and run. Requires that the compiler for the current
+# language was checked for, hence do not use this macro in macros looking
+# for a compiler.
+AC_DEFUN([AC_RUN_IFELSE],
+[AC_LANG_COMPILER_REQUIRE()dnl
+m4_ifval([$4], [],
+ [AC_DIAGNOSE([cross],
+ [$0 called without default to allow cross compiling])])dnl
+AS_IF([test "$cross_compiling" = yes],
+ [m4_default([$4],
+ [AC_MSG_FAILURE([cannot run test program while cross compiling])])],
+ [_AC_RUN_IFELSE($@)])
+])
+
+
+# AC_TRY_RUN(PROGRAM,
+# [ACTION-IF-TRUE], [ACTION-IF-FALSE],
+# [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
+# -------------------------------------------------------
+AU_DEFUN([AC_TRY_RUN],
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[$1]])], [$2], [$3], [$4])])
+
+
+
+## ------------------------------------- ##
+## Checking for the existence of files. ##
+## ------------------------------------- ##
+
+# AC_CHECK_FILE(FILE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------------------------
+#
+# Check for the existence of FILE.
+AC_DEFUN([AC_CHECK_FILE],
+[AC_DIAGNOSE([cross],
+ [cannot check for file existence when cross compiling])dnl
+AS_VAR_PUSHDEF([ac_File], [ac_cv_file_$1])dnl
+AC_CACHE_CHECK([for $1], [ac_File],
+[test "$cross_compiling" = yes &&
+ AC_MSG_ERROR([cannot check for file existence when cross compiling])
+if test -r "$1"; then
+ AS_VAR_SET([ac_File], [yes])
+else
+ AS_VAR_SET([ac_File], [no])
+fi])
+AS_VAR_IF([ac_File], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_File])dnl
+])# AC_CHECK_FILE
+
+
+# _AC_CHECK_FILES(FILE)
+# ---------------------
+# Helper to AC_CHECK_FILES, which generates two of the three arguments
+# to AC_CHECK_FILE based on FILE.
+m4_define([_AC_CHECK_FILES],
+[[$1], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1],
+ [Define to 1 if you have the file `$1'.])]])
+
+
+# AC_CHECK_FILES(FILE..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -----------------------------------------------------------------
+# For each word in the whitespace-separated FILE list, perform either
+# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND. For files that exist, also
+# provide the preprocessor variable HAVE_FILE.
+AC_DEFUN([AC_CHECK_FILES],
+[m4_map_args_w([$1], [AC_CHECK_FILE(_$0(], [)[$2], [$3])])])
+
+
+## ------------------------------- ##
+## Checking for declared symbols. ##
+## ------------------------------- ##
+
+
+# _AC_CHECK_DECL_BODY
+# -------------------
+# Shell function body for AC_CHECK_DECL.
+m4_define([_AC_CHECK_DECL_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ [as_decl_name=`echo $][2|sed 's/ *(.*//'`]
+ [as_decl_use=`echo $][2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`]
+ AC_CACHE_CHECK([whether $as_decl_name is declared], [$[]3],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]4],
+[@%:@ifndef $[]as_decl_name
+@%:@ifdef __cplusplus
+ (void) $[]as_decl_use;
+@%:@else
+ (void) $[]as_decl_name;
+@%:@endif
+@%:@endif
+])],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [no])])])
+ AS_LINENO_POP
+])# _AC_CHECK_DECL_BODY
+
+# AC_CHECK_DECL(SYMBOL,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# -------------------------------------------------------
+# Check whether SYMBOL (a function, variable, or constant) is declared.
+AC_DEFUN([AC_CHECK_DECL],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_decl],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_decl],
+ [LINENO SYMBOL VAR INCLUDES],
+ [Tests whether SYMBOL is declared in INCLUDES, setting cache variable
+ VAR accordingly.])],
+ [_$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_Symbol], [ac_cv_have_decl_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_decl ]dnl
+["$LINENO" "$1" "ac_Symbol" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])"
+AS_VAR_IF([ac_Symbol], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Symbol])dnl
+])# AC_CHECK_DECL
+
+
+# _AC_CHECK_DECLS(SYMBOL, ACTION-IF_FOUND, ACTION-IF-NOT-FOUND,
+# INCLUDES)
+# -------------------------------------------------------------
+# Helper to AC_CHECK_DECLS, which generates the check for a single
+# SYMBOL with INCLUDES, performs the AC_DEFINE, then expands
+# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND.
+m4_define([_AC_CHECK_DECLS],
+[AC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])]dnl
+[AC_DEFINE_UNQUOTED(AS_TR_CPP(m4_bpatsubst(HAVE_DECL_[$1],[ *(.*])),
+ [$ac_have_decl],
+ [Define to 1 if you have the declaration of `$1',
+ and to 0 if you don't.])]dnl
+[m4_ifvaln([$2$3], [AS_IF([test $ac_have_decl = 1], [$2], [$3])])])
+
+# AC_CHECK_DECLS(SYMBOLS,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# --------------------------------------------------------
+# Defines HAVE_DECL_SYMBOL to 1 if declared, 0 otherwise. See the
+# documentation for a detailed explanation of this difference with
+# other AC_CHECK_*S macros. SYMBOLS is an m4 list.
+AC_DEFUN([AC_CHECK_DECLS],
+[m4_map_args_sep([_$0(], [, [$2], [$3], [$4])], [], $1)])
+
+
+# _AC_CHECK_DECL_ONCE(SYMBOL)
+# ---------------------------
+# Check for a single SYMBOL once.
+m4_define([_AC_CHECK_DECL_ONCE],
+[AC_DEFUN([_AC_Check_Decl_$1], [_AC_CHECK_DECLS([$1])])]dnl
+[AC_REQUIRE([_AC_Check_Decl_$1])])
+
+# AC_CHECK_DECLS_ONCE(SYMBOLS)
+# ----------------------------
+# Like AC_CHECK_DECLS(SYMBOLS), but do it at most once.
+AC_DEFUN([AC_CHECK_DECLS_ONCE],
+[m4_map_args_sep([_AC_CHECK_DECL_ONCE(], [)], [], $1)])
+
+
+
+## ---------------------------------- ##
+## Replacement of library functions. ##
+## ---------------------------------- ##
+
+
+# AC_CONFIG_LIBOBJ_DIR(DIRNAME)
+# -----------------------------
+# Announce LIBOBJ replacement files are in $top_srcdir/DIRNAME.
+AC_DEFUN_ONCE([AC_CONFIG_LIBOBJ_DIR],
+[m4_divert_text([DEFAULTS], [ac_config_libobj_dir=$1])])
+
+
+# AC_LIBSOURCE(FILE-NAME)
+# -----------------------
+# Announce we might need the file `FILE-NAME'.
+m4_define([AC_LIBSOURCE], [])
+
+
+# AC_LIBSOURCES([FILE-NAME1, ...])
+# --------------------------------
+# Announce we might need these files.
+AC_DEFUN([AC_LIBSOURCES],
+[m4_map_args([AC_LIBSOURCE], $1)])
+
+
+# _AC_LIBOBJ(FILE-NAME-NOEXT, ACTION-IF-INDIR)
+# --------------------------------------------
+# We need `FILE-NAME-NOEXT.o', save this into `LIBOBJS'.
+m4_define([_AC_LIBOBJ],
+[case " $LIB@&t@OBJS " in
+ *" $1.$ac_objext "* ) ;;
+ *) AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS $1.$ac_objext"]) ;;
+esac
+])
+
+
+# AC_LIBOBJ(FILE-NAME-NOEXT)
+# --------------------------
+# We need `FILE-NAME-NOEXT.o', save this into `LIBOBJS'.
+AC_DEFUN([AC_LIBOBJ],
+[_AC_LIBOBJ([$1])]dnl
+[AS_LITERAL_WORD_IF([$1], [AC_LIBSOURCE([$1.c])],
+ [AC_DIAGNOSE([syntax], [$0($1): you should use literals])])])
+
+
+# _AC_LIBOBJS_NORMALIZE
+# ---------------------
+# Clean up LIBOBJS and LTLIBOBJS so that they work with 1. ac_objext,
+# 2. Automake's ANSI2KNR, 3. Libtool, 4. combination of the three.
+# Used with AC_CONFIG_COMMANDS_PRE.
+AC_DEFUN([_AC_LIBOBJS_NORMALIZE],
+[ac_libobjs=
+ac_ltlibobjs=
+m4_ifndef([AM_C_PROTOTYPES], [U=
+])dnl
+for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`AS_ECHO(["$ac_i"]) | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ AS_VAR_APPEND([ac_libobjs], [" \${LIBOBJDIR}$ac_i\$U.$ac_objext"])
+ AS_VAR_APPEND([ac_ltlibobjs], [" \${LIBOBJDIR}$ac_i"'$U.lo'])
+done
+AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
+AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+])
+
+
+## ----------------------------------- ##
+## Checking compiler characteristics. ##
+## ----------------------------------- ##
+
+
+# _AC_COMPUTE_INT_COMPILE(EXPRESSION, VARIABLE, PROLOGUE, [IF-SUCCESS],
+# [IF-FAILURE])
+# ---------------------------------------------------------------------
+# Compute the integer EXPRESSION and store the result in the VARIABLE.
+# Works OK if cross compiling, but assumes twos-complement arithmetic.
+m4_define([_AC_COMPUTE_INT_COMPILE],
+[# Depending upon the size, compute the lo and hi bounds.
+_AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) >= 0])],
+ [ac_lo=0 ac_mid=0
+ while :; do
+ _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) <= $ac_mid])],
+ [ac_hi=$ac_mid; break],
+ [AS_VAR_ARITH([ac_lo], [$ac_mid + 1])
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ AS_VAR_ARITH([ac_mid], [2 '*' $ac_mid + 1])])
+ done],
+[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) < 0])],
+ [ac_hi=-1 ac_mid=-1
+ while :; do
+ _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) >= $ac_mid])],
+ [ac_lo=$ac_mid; break],
+ [AS_VAR_ARITH([ac_hi], ['(' $ac_mid ')' - 1])
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ AS_VAR_ARITH([ac_mid], [2 '*' $ac_mid])])
+ done],
+ [ac_lo= ac_hi=])])
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ AS_VAR_ARITH([ac_mid], ['(' $ac_hi - $ac_lo ')' / 2 + $ac_lo])
+ _AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$3], [($1) <= $ac_mid])],
+ [ac_hi=$ac_mid],
+ [AS_VAR_ARITH([ac_lo], ['(' $ac_mid ')' + 1])])
+done
+case $ac_lo in @%:@((
+?*) AS_VAR_SET([$2], [$ac_lo]); $4 ;;
+'') $5 ;;
+esac[]dnl
+])# _AC_COMPUTE_INT_COMPILE
+
+
+# _AC_COMPUTE_INT_RUN(EXPRESSION, VARIABLE, PROLOGUE, [IF-SUCCESS],
+# [IF-FAILURE])
+# -----------------------------------------------------------------
+# Store the evaluation of the integer EXPRESSION in VARIABLE.
+#
+# AC_LANG_INT_SAVE intentionally does not end the file in a newline, so
+# we must add one to make it a text file before passing it to read.
+m4_define([_AC_COMPUTE_INT_RUN],
+[_AC_RUN_IFELSE([AC_LANG_INT_SAVE([$3], [$1])],
+ [echo >>conftest.val; read $2 <conftest.val; $4], [$5])
+rm -f conftest.val
+])# _AC_COMPUTE_INT_RUN
+
+
+# _AC_COMPUTE_INT_BODY
+# --------------------
+# Shell function body for AC_COMPUTE_INT.
+m4_define([_AC_COMPUTE_INT_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ if test "$cross_compiling" = yes; then
+ _AC_COMPUTE_INT_COMPILE([$[]2], [$[]3], [$[]4],
+ [ac_retval=0], [ac_retval=1])
+ else
+ _AC_COMPUTE_INT_RUN([$[]2], [$[]3], [$[]4],
+ [ac_retval=0], [ac_retval=1])
+ fi
+ AS_LINENO_POP
+ AS_SET_STATUS([$ac_retval])
+])# _AC_COMPUTE_INT_BODY
+
+# AC_COMPUTE_INT(VARIABLE, EXPRESSION, PROLOGUE, [IF-FAILS])
+# ----------------------------------------------------------
+# Store into the shell variable VARIABLE the value of the integer C expression
+# EXPRESSION. The value should fit in an initializer in a C variable of type
+# `signed long'. If no PROLOGUE are specified, the default includes are used.
+# IF-FAILS is evaluated if the value cannot be found (which includes the
+# case of cross-compilation, if EXPRESSION is not computable at compile-time.
+AC_DEFUN([AC_COMPUTE_INT],
+[AC_LANG_COMPILER_REQUIRE()]dnl
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_compute_int],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_compute_int],
+ [LINENO EXPR VAR INCLUDES],
+ [Tries to find the compile-time value of EXPR in a program that includes
+ INCLUDES, setting VAR accordingly. Returns whether the value could
+ be computed])],
+ [_$0_BODY])]dnl
+[AS_IF([ac_fn_[]_AC_LANG_ABBREV[]_compute_int "$LINENO" "$2" "$1" ]dnl
+ ["AS_ESCAPE([$3], [""])"],
+ [], [$4])
+])# AC_COMPUTE_INT
+
+# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS])
+# -----------------------------------------------------------
+# FIXME: this private interface was used by several packages.
+# Give them time to transition to AC_COMPUTE_INT and then delete this one.
+AC_DEFUN([_AC_COMPUTE_INT],
+[AC_COMPUTE_INT([$2], [$1], [$3], [$4])
+AC_DIAGNOSE([obsolete],
+[The macro `_AC_COMPUTE_INT' is obsolete and will be deleted in a
+future version or Autoconf. Hence, it is suggested that you use
+instead the public AC_COMPUTE_INT macro. Note that the arguments are
+slightly different between the two.])dnl
+])# _AC_COMPUTE_INT
diff --git a/lib/autoconf/go.m4 b/lib/autoconf/go.m4
new file mode 100644
index 0000000..bf215bf
--- /dev/null
+++ b/lib/autoconf/go.m4
@@ -0,0 +1,177 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Go language support.
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Go support contributed by Ian Lance Taylor.
+
+# This currently only supports gccgo, not 6g/8g/5g.
+
+# ------------------- #
+# Language selection.
+# ------------------- #
+
+# AC_LANG(Go)
+# -----------
+AC_LANG_DEFINE([Go], [go], [GO], [GOC], [],
+[ac_ext=go
+ac_compile='$GOC -c $GOFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
+ac_link='$GOC -o conftest$ac_exeext $GOFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
+ac_compiler_gnu=yes
+])
+
+# AC_LANG_GO
+# ----------
+AU_DEFUN([AC_LANG_GO], [AC_LANG(Go)])
+
+# ------------------- #
+# Producing programs.
+# ------------------- #
+
+# AC_LANG_PROGRAM(Go)([PROLOGUE], [BODY])
+# ---------------------------------------
+m4_define([AC_LANG_PROGRAM(Go)],
+[package main
+$1
+func main() {
+$2
+}])
+
+# _AC_LANG_IO_PROGRAM(Go)
+# -----------------------
+# Produce source that performs I/O.
+m4_define([_AC_LANG_IO_PROGRAM(Go)],
+[AC_LANG_PROGRAM([import ( "fmt"; "os" )],
+[f, err := os.Open("conftest.out", os.O_CREATE|os.O_WRONLY, 0777)
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ if err = f.Close(); err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ os.Exit(0)
+])])
+
+# AC_LANG_CALL(Go)(PROLOGUE, FUNCTION)
+# ------------------------------------
+# Avoid conflicting decl of main.
+m4_define([AC_LANG_CALL(Go)],
+[AC_LANG_PROGRAM([$1
+m4_if([$2], [main], ,
+[func $2()])],[$2()])])
+
+# AC_LANG_FUNC_LINK_TRY(Go)(FUNCTION)
+# -----------------------------------
+# Try to link a program which calls FUNCTION.
+m4_define([AC_LANG_FUNC_LINK_TRY(Go)],
+[AC_LANG_PROGRAM(
+[func $1() int
+var f = $1
+], [return f()])])
+
+# AC_LANG_BOOL_COMPILE_TRY(Go)(PROLOGUE, EXPRESSION)
+# --------------------------------------------------
+# Return a program which is valid if EXPRESSION is nonzero.
+m4_define([AC_LANG_BOOL_COMPILE_TRY(Go)],
+[AC_LANG_PROGRAM([$1], [var test_array @<:@1 - 2 * !($2)@:>@int
+test_array @<:@0@:>@ = 0
+])])
+
+# AC_LANG_INT_SAVE(Go)(PROLOGUE, EXPRESSION)
+# ------------------------------------------
+m4_define([AC_LANG_INT_SAVE(Go)],
+[AC_LANG_PROGRAM([$1
+import (
+ "fmt"
+ "os"
+)
+],
+[f, err := os.Open("conftest.val", os.O_CREATE|os.O_WRONLY, 0777)
+ if err != nil {
+ os.Exit(1)
+ }
+ if $2 < 0 {
+ int64 i = int64($2)
+ if i != $2 {
+ os.Exit(1)
+ }
+ if _, err := fmt.Print(f, i); err != nil {
+ os.Exit(1)
+ }
+ } else {
+ uint64 i = uint64($2)
+ if i != $2 {
+ os.Exit(1)
+ }
+ if _, err := fmt.Print(f, i); err != nil {
+ os.Exit(1)
+ }
+ }
+ if err = f.Close(); err != nil {
+ os.Exit(1)
+ }
+ os.Exit(0);
+])])
+
+# ---------------------- #
+# Looking for compilers. #
+# ---------------------- #
+
+# AC_LANG_COMPILER(Go)
+# --------------------
+AC_DEFUN([AC_LANG_COMPILER(Go)],
+[AC_REQUIRE([AC_PROG_GO])])
+
+# AC_PROG_GO
+# ----------
+AN_MAKEVAR([GOC], [AC_PROG_GO])
+AN_PROGRAM([gccgo], [AC_PROG_GO])
+AC_DEFUN([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+m4_ifval([$1],
+ [AC_CHECK_TOOLS(GOC, [$1])],
+[AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [$ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, , , false)
+fi
+])
+
+# Provide some information about the compiler.
+_AS_ECHO_LOG([checking for _AC_LANG compiler version])
+set X $ac_compile
+ac_compiler=$[2]
+_AC_DO_LIMIT([$ac_compiler --version >&AS_MESSAGE_LOG_FD])
+m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl
+m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl
+GOFLAGS="-g -O2"
+AC_LANG_POP(Go)dnl
+])# AC_PROG_GO
diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4
new file mode 100644
index 0000000..81a7fa2
--- /dev/null
+++ b/lib/autoconf/headers.m4
@@ -0,0 +1,895 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Checking for headers.
+#
+# Copyright (C) 1988, 1999-2004, 2006, 2008-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# Table of contents
+#
+# 1. Generic tests for headers
+# 2. Default includes
+# 3. Headers to tests with AC_CHECK_HEADERS
+# 4. Tests for specific headers
+
+
+## ------------------------------ ##
+## 1. Generic tests for headers. ##
+## ------------------------------ ##
+
+
+# AC_CHECK_HEADER(HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES])
+# ---------------------------------------------------------
+# We are slowly moving to checking headers with the compiler instead
+# of the preproc, so that we actually learn about the usability of a
+# header instead of its mere presence. But since users are used to
+# the old semantics, they check for headers in random order and
+# without providing prerequisite headers. This macro implements the
+# transition phase, and should be cleaned up latter to use compilation
+# only.
+#
+# If INCLUDES is empty, then check both via the compiler and preproc.
+# If the results are different, issue a warning, but keep the preproc
+# result.
+#
+# If INCLUDES is `-', keep only the old semantics.
+#
+# If INCLUDES is specified and different from `-', then use the new
+# semantics only.
+#
+# The m4_indir allows for fewer expansions of $@.
+AC_DEFUN([AC_CHECK_HEADER],
+[m4_indir(m4_case([$4],
+ [], [[_AC_CHECK_HEADER_MONGREL]],
+ [-], [[_AC_CHECK_HEADER_PREPROC]],
+ [[_AC_CHECK_HEADER_COMPILE]]), $@)
+])# AC_CHECK_HEADER
+
+
+# _AC_CHECK_HEADER_MONGREL_BODY
+# -----------------------------
+# Shell function body for _AC_CHECK_HEADER_MONGREL
+m4_define([_AC_CHECK_HEADER_MONGREL_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AS_VAR_SET_IF([$[]3],
+ [AC_CACHE_CHECK([for $[]2], [$[]3], [])],
+ [# Is the header compilable?
+AC_MSG_CHECKING([$[]2 usability])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([$[]4
+@%:@include <$[]2>])],
+ [ac_header_compiler=yes],
+ [ac_header_compiler=no])
+AC_MSG_RESULT([$ac_header_compiler])
+
+# Is the header present?
+AC_MSG_CHECKING([$[]2 presence])
+AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <$[]2>])],
+ [ac_header_preproc=yes],
+ [ac_header_preproc=no])
+AC_MSG_RESULT([$ac_header_preproc])
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_[]_AC_LANG_ABBREV[]_preproc_warn_flag in #((
+ yes:no: )
+ AC_MSG_WARN([$[]2: accepted by the compiler, rejected by the preprocessor!])
+ AC_MSG_WARN([$[]2: proceeding with the compiler's result])
+ ;;
+ no:yes:* )
+ AC_MSG_WARN([$[]2: present but cannot be compiled])
+ AC_MSG_WARN([$[]2: check for missing prerequisite headers?])
+ AC_MSG_WARN([$[]2: see the Autoconf documentation])
+ AC_MSG_WARN([$[]2: section "Present But Cannot Be Compiled"])
+ AC_MSG_WARN([$[]2: proceeding with the compiler's result])
+m4_ifset([AC_PACKAGE_BUGREPORT],
+[m4_n([( AS_BOX([Report this to ]AC_PACKAGE_BUGREPORT)
+ ) | sed "s/^/$as_me: WARNING: /" >&2])])dnl
+ ;;
+esac
+ AC_CACHE_CHECK([for $[]2], [$[]3],
+ [AS_VAR_SET([$[]3], [$ac_header_compiler])])])
+ AS_LINENO_POP
+])#_AC_CHECK_HEADER_MONGREL_BODY
+
+# _AC_CHECK_HEADER_MONGREL(HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# ------------------------------------------------------------------
+# Check using both the compiler and the preprocessor. If they disagree,
+# warn, and the preproc wins.
+#
+# This is not based on _AC_CHECK_HEADER_COMPILE and _AC_CHECK_HEADER_PREPROC
+# because it obfuscate the code to try to factor everything, in particular
+# because of the cache variables, and the `checking ...' messages.
+AC_DEFUN([_AC_CHECK_HEADER_MONGREL],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_header_mongrel],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_header_mongrel],
+ [LINENO HEADER VAR INCLUDES],
+ [Tests whether HEADER exists, giving a warning if it cannot be compiled
+ using the include files in INCLUDES and setting the cache variable VAR
+ accordingly.])],
+ [$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_Header], [ac_cv_header_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_header_mongrel ]dnl
+["$LINENO" "$1" "ac_Header" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])"
+AS_VAR_IF([ac_Header], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Header])])# _AC_CHECK_HEADER_MONGREL
+
+
+# _AC_CHECK_HEADER_COMPILE_BODY
+# -----------------------------
+# Shell function body for _AC_CHECK_HEADER_COMPILE
+m4_define([_AC_CHECK_HEADER_COMPILE_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for $[]2], [$[]3],
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([$[]4
+@%:@include <$[]2>])],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [no])])])
+ AS_LINENO_POP
+])# _AC_CHECK_HEADER_COMPILE_BODY
+
+# _AC_CHECK_HEADER_COMPILE(HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# --------------------------------------------------------------
+# Check the compiler accepts HEADER-FILE. The INCLUDES are defaulted.
+AC_DEFUN([_AC_CHECK_HEADER_COMPILE],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_header_compile],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_header_compile],
+ [LINENO HEADER VAR INCLUDES],
+ [Tests whether HEADER exists and can be compiled using the include files
+ in INCLUDES, setting the cache variable VAR accordingly.])],
+ [$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_Header], [ac_cv_header_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_header_compile ]dnl
+["$LINENO" "$1" "ac_Header" "AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])"
+AS_VAR_IF([ac_Header], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Header])])# _AC_CHECK_HEADER_COMPILE
+
+# _AC_CHECK_HEADER_PREPROC_BODY
+# -----------------------------
+# Shell function body for _AC_CHECK_HEADER_PREPROC.
+m4_define([_AC_CHECK_HEADER_PREPROC_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for $[]2], [$[]3],
+ [AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <$[]2>])],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [no])])])
+ AS_LINENO_POP
+])# _AC_CHECK_HEADER_PREPROC_BODY
+
+
+
+# _AC_CHECK_HEADER_PREPROC(HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# --------------------------------------------------------------
+# Check the preprocessor accepts HEADER-FILE.
+AC_DEFUN([_AC_CHECK_HEADER_PREPROC],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_header_preproc],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_header_preproc],
+ [LINENO HEADER VAR],
+ [Tests whether HEADER is present, setting the cache variable VAR accordingly.])],
+ [$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_Header], [ac_cv_header_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_header_preproc "$LINENO" "$1" "ac_Header"
+AS_VAR_IF([ac_Header], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Header])dnl
+])# _AC_CHECK_HEADER_PREPROC
+
+# _AC_CHECK_HEADER_OLD(HEADER-FILE, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+# _AC_CHECK_HEADER_NEW(HEADER-FILE, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+# ----------------------------------------------------
+# Some packages used these undocumented macros. Even worse, gcc
+# redefined AC_CHECK_HEADER in terms of _AC_CHECK_HEADER_OLD, so we
+# can't do the simpler:
+# AU_DEFUN([_AC_CHECK_HEADER_OLD],
+# [AC_CHECK_HEADER([$1], [$2], [$3], [-])])
+AC_DEFUN([_AC_CHECK_HEADER_OLD],
+[AC_DIAGNOSE([obsolete], [The macro `$0' is obsolete.
+You should use AC_CHECK_HEADER with a fourth argument.])]dnl
+[_AC_CHECK_HEADER_PREPROC($@)])
+
+AC_DEFUN([_AC_CHECK_HEADER_NEW],
+[AC_DIAGNOSE([obsolete], [The macro `$0' is obsolete.
+You should use AC_CHECK_HEADER with a fourth argument.])]dnl
+[_AC_CHECK_HEADER_COMPILE($@)])
+
+
+# _AH_CHECK_HEADER(HEADER-FILE)
+# -----------------------------
+# Prepare the autoheader snippet for HEADER-FILE.
+m4_define([_AH_CHECK_HEADER],
+[AH_TEMPLATE(AS_TR_CPP([HAVE_$1]),
+ [Define to 1 if you have the <$1> header file.])])
+
+
+# AH_CHECK_HEADERS(HEADER-FILE...)
+# --------------------------------
+m4_define([AH_CHECK_HEADERS],
+[m4_foreach_w([AC_Header], [$1], [_AH_CHECK_HEADER(m4_defn([AC_Header]))])])
+
+
+# AC_CHECK_HEADERS(HEADER-FILE...,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES])
+# ----------------------------------------------------------
+# Check for each whitespace-separated HEADER-FILE (omitting the <> or
+# ""), and perform ACTION-IF-FOUND or ACTION-IF-NOT-FOUND for each
+# header. INCLUDES is as for AC_CHECK_HEADER. Additionally, make the
+# preprocessor definition HAVE_HEADER_FILE available for each found
+# header. Either ACTION may include `break' to stop the search.
+AC_DEFUN([AC_CHECK_HEADERS],
+[m4_map_args_w([$1], [_AH_CHECK_HEADER(], [)])]dnl
+[AS_FOR([AC_header], [ac_header], [$1],
+[AC_CHECK_HEADER(AC_header,
+ [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_]AC_header)) $2],
+ [$3], [$4])dnl])
+])# AC_CHECK_HEADERS
+
+
+# _AC_CHECK_HEADER_ONCE(HEADER-FILE)
+# ----------------------------------
+# Check for a single HEADER-FILE once.
+m4_define([_AC_CHECK_HEADER_ONCE],
+[_AH_CHECK_HEADER([$1])AC_DEFUN([_AC_Header_]m4_translit([[$1]],
+ [./-], [___]),
+ [m4_divert_text([INIT_PREPARE], [AS_VAR_APPEND([ac_header_list], [" $1"])])
+_AC_HEADERS_EXPANSION])AC_REQUIRE([_AC_Header_]m4_translit([[$1]],
+ [./-], [___]))])
+
+
+# AC_CHECK_HEADERS_ONCE(HEADER-FILE...)
+# -------------------------------------
+# Add each whitespace-separated name in HEADER-FILE to the list of
+# headers to check once.
+AC_DEFUN([AC_CHECK_HEADERS_ONCE],
+[m4_map_args_w([$1], [_AC_CHECK_HEADER_ONCE(], [)])])
+
+m4_define([_AC_HEADERS_EXPANSION],
+[
+ m4_divert_text([DEFAULTS], [ac_header_list=])
+ AC_CHECK_HEADERS([$ac_header_list], [], [], [AC_INCLUDES_DEFAULT])
+ m4_define([_AC_HEADERS_EXPANSION], [])
+])
+
+
+
+
+## --------------------- ##
+## 2. Default includes. ##
+## --------------------- ##
+
+# Always use the same set of default headers for all the generic
+# macros. It is easier to document, to extend, and to understand than
+# having specific defaults for each macro.
+
+# _AC_INCLUDES_DEFAULT_REQUIREMENTS
+# ---------------------------------
+# Required when AC_INCLUDES_DEFAULT uses its default branch.
+AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
+[m4_divert_text([DEFAULTS],
+[# Factoring default headers for most tests.
+dnl If ever you change this variable, please keep autoconf.texi in sync.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+])dnl
+AC_REQUIRE([AC_HEADER_STDC])dnl
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h],
+ [], [], $ac_includes_default)
+])# _AC_INCLUDES_DEFAULT_REQUIREMENTS
+
+
+# AC_INCLUDES_DEFAULT([INCLUDES])
+# -------------------------------
+# If INCLUDES is empty, expand in default includes, otherwise in
+# INCLUDES.
+# In most cases INCLUDES is not double quoted as it should, and if
+# for instance INCLUDES = `#include <stdio.h>' then unless we force
+# a newline, the hash will swallow the closing paren etc. etc.
+# The usual failure.
+# Take no risk: for the newline.
+AC_DEFUN([AC_INCLUDES_DEFAULT],
+[m4_ifval([$1], [$1
+],
+ [AC_REQUIRE([_AC_INCLUDES_DEFAULT_REQUIREMENTS])dnl
+$ac_includes_default])])
+
+
+
+
+
+## ------------------------------------------- ##
+## 3. Headers to check with AC_CHECK_HEADERS. ##
+## ------------------------------------------- ##
+
+# errno.h is portable.
+
+AN_HEADER([OS.h], [AC_CHECK_HEADERS])
+AN_HEADER([argz.h], [AC_CHECK_HEADERS])
+AN_HEADER([arpa/inet.h], [AC_CHECK_HEADERS])
+AN_HEADER([fcntl.h], [AC_CHECK_HEADERS])
+AN_HEADER([fenv.h], [AC_CHECK_HEADERS])
+AN_HEADER([float.h], [AC_CHECK_HEADERS])
+AN_HEADER([fs_info.h], [AC_CHECK_HEADERS])
+AN_HEADER([inttypes.h], [AC_CHECK_HEADERS])
+AN_HEADER([langinfo.h], [AC_CHECK_HEADERS])
+AN_HEADER([libintl.h], [AC_CHECK_HEADERS])
+AN_HEADER([limits.h], [AC_CHECK_HEADERS])
+AN_HEADER([locale.h], [AC_CHECK_HEADERS])
+AN_HEADER([mach/mach.h], [AC_CHECK_HEADERS])
+AN_HEADER([malloc.h], [AC_CHECK_HEADERS])
+AN_HEADER([memory.h], [AC_CHECK_HEADERS])
+AN_HEADER([mntent.h], [AC_CHECK_HEADERS])
+AN_HEADER([mnttab.h], [AC_CHECK_HEADERS])
+AN_HEADER([netdb.h], [AC_CHECK_HEADERS])
+AN_HEADER([netinet/in.h], [AC_CHECK_HEADERS])
+AN_HEADER([nl_types.h], [AC_CHECK_HEADERS])
+AN_HEADER([nlist.h], [AC_CHECK_HEADERS])
+AN_HEADER([paths.h], [AC_CHECK_HEADERS])
+AN_HEADER([sgtty.h], [AC_CHECK_HEADERS])
+AN_HEADER([shadow.h], [AC_CHECK_HEADERS])
+AN_HEADER([stddef.h], [AC_CHECK_HEADERS])
+AN_HEADER([stdint.h], [AC_CHECK_HEADERS])
+AN_HEADER([stdio_ext.h], [AC_CHECK_HEADERS])
+AN_HEADER([stdlib.h], [AC_CHECK_HEADERS])
+AN_HEADER([string.h], [AC_CHECK_HEADERS])
+AN_HEADER([strings.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/acl.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/file.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/filsys.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/fs/s5param.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/fs_types.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/fstyp.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/ioctl.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/mntent.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/mount.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/param.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/socket.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/statfs.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/statvfs.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/systeminfo.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/time.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/timeb.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/vfs.h], [AC_CHECK_HEADERS])
+AN_HEADER([sys/window.h], [AC_CHECK_HEADERS])
+AN_HEADER([syslog.h], [AC_CHECK_HEADERS])
+AN_HEADER([termio.h], [AC_CHECK_HEADERS])
+AN_HEADER([termios.h], [AC_CHECK_HEADERS])
+AN_HEADER([unistd.h], [AC_CHECK_HEADERS])
+AN_HEADER([utime.h], [AC_CHECK_HEADERS])
+AN_HEADER([utmp.h], [AC_CHECK_HEADERS])
+AN_HEADER([utmpx.h], [AC_CHECK_HEADERS])
+AN_HEADER([values.h], [AC_CHECK_HEADERS])
+AN_HEADER([wchar.h], [AC_CHECK_HEADERS])
+AN_HEADER([wctype.h], [AC_CHECK_HEADERS])
+
+
+
+## ------------------------------- ##
+## 4. Tests for specific headers. ##
+## ------------------------------- ##
+
+# AC_HEADER_ASSERT
+# ----------------
+# Check whether to enable assertions.
+AC_DEFUN_ONCE([AC_HEADER_ASSERT],
+[
+ AC_MSG_CHECKING([whether to enable assertions])
+ AC_ARG_ENABLE([assert],
+ [AS_HELP_STRING([--disable-assert], [turn off assertions])],
+ [ac_enable_assert=$enableval
+ AS_IF(dnl
+ [test "x$enableval" = xno],
+ [AC_DEFINE([NDEBUG], [1],
+ [Define to 1 if assertions should be disabled.])],
+ [test "x$enableval" != xyes],
+ [AC_MSG_WARN([invalid argument supplied to --enable-assert])
+ ac_enable_assert=yes])],
+ [ac_enable_assert=yes])
+ AC_MSG_RESULT([$ac_enable_assert])
+])
+
+
+# _AC_CHECK_HEADER_DIRENT(HEADER-FILE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT_FOUND])
+# -----------------------------------------------------------------
+# Like AC_CHECK_HEADER, except also make sure that HEADER-FILE
+# defines the type `DIR'. dirent.h on NextStep 3.2 doesn't.
+m4_define([_AC_CHECK_HEADER_DIRENT],
+[AS_VAR_PUSHDEF([ac_Header], [ac_cv_header_dirent_$1])dnl
+AC_CACHE_CHECK([for $1 that defines DIR], [ac_Header],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
+#include <$1>
+],
+ [if ((DIR *) 0)
+return 0;])],
+ [AS_VAR_SET([ac_Header], [yes])],
+ [AS_VAR_SET([ac_Header], [no])])])
+AS_VAR_IF([ac_Header], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Header])dnl
+])# _AC_CHECK_HEADER_DIRENT
+
+
+# _AH_CHECK_HEADER_DIRENT(HEADERS)
+# --------------------------------
+# Like _AH_CHECK_HEADER, but tuned to a dirent provider.
+m4_define([_AH_CHECK_HEADER_DIRENT],
+[AH_TEMPLATE(AS_TR_CPP([HAVE_$1]),
+ [Define to 1 if you have the <$1> header file, and it defines `DIR'.])])
+
+
+# AC_HEADER_DIRENT
+# ----------------
+AC_DEFUN([AC_HEADER_DIRENT],
+[m4_map_args([_AH_CHECK_HEADER_DIRENT], [dirent.h], [sys/ndir.h],
+ [sys/dir.h], [ndir.h])]dnl
+[ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ _AC_CHECK_HEADER_DIRENT($ac_hdr,
+ [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$ac_hdr), 1)
+ac_header_dirent=$ac_hdr; break])
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+ AC_SEARCH_LIBS(opendir, dir)
+else
+ AC_SEARCH_LIBS(opendir, x)
+fi
+])# AC_HEADER_DIRENT
+
+
+# AC_HEADER_MAJOR
+# ---------------
+AN_FUNCTION([major], [AC_HEADER_MAJOR])
+AN_FUNCTION([makedev], [AC_HEADER_MAJOR])
+AN_FUNCTION([minor], [AC_HEADER_MAJOR])
+AN_HEADER([sys/mkdev.h], [AC_HEADER_MAJOR])
+AC_DEFUN([AC_HEADER_MAJOR],
+[AC_CACHE_CHECK(whether sys/types.h defines makedev,
+ ac_cv_header_sys_types_h_makedev,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <sys/types.h>]],
+ [[return makedev(0, 0);]])],
+ [ac_cv_header_sys_types_h_makedev=yes],
+ [ac_cv_header_sys_types_h_makedev=no])
+])
+
+if test $ac_cv_header_sys_types_h_makedev = no; then
+AC_CHECK_HEADER(sys/mkdev.h,
+ [AC_DEFINE(MAJOR_IN_MKDEV, 1,
+ [Define to 1 if `major', `minor', and `makedev' are
+ declared in <mkdev.h>.])])
+
+ if test $ac_cv_header_sys_mkdev_h = no; then
+ AC_CHECK_HEADER(sys/sysmacros.h,
+ [AC_DEFINE(MAJOR_IN_SYSMACROS, 1,
+ [Define to 1 if `major', `minor', and `makedev'
+ are declared in <sysmacros.h>.])])
+ fi
+fi
+])# AC_HEADER_MAJOR
+
+
+# AC_HEADER_RESOLV
+# ----------------
+# According to http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?resolver+3
+# (or http://www.chemie.fu-berlin.de/cgi-bin/man/sgi_irix?resolver+3),
+# sys/types.h, netinet/in.h and arpa/nameser.h are required on IRIX.
+# netinet/in.h is needed on Cygwin, too.
+# With Solaris 9, netdb.h is required, to get symbols like HOST_NOT_FOUND.
+#
+AN_HEADER(resolv.h, [AC_HEADER_RESOLV])
+AC_DEFUN([AC_HEADER_RESOLV],
+[AC_CHECK_HEADERS(sys/types.h netinet/in.h arpa/nameser.h netdb.h resolv.h,
+ [], [],
+[[#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h> /* inet_ functions / structs */
+#endif
+#ifdef HAVE_ARPA_NAMESER_H
+# include <arpa/nameser.h> /* DNS HEADER struct */
+#endif
+#ifdef HAVE_NETDB_H
+# include <netdb.h>
+#endif]])
+])# AC_HEADER_RESOLV
+
+
+# AC_HEADER_STAT
+# --------------
+# FIXME: Shouldn't this be named AC_HEADER_SYS_STAT?
+AC_DEFUN([AC_HEADER_STAT],
+[AC_CACHE_CHECK(whether stat file-mode macros are broken,
+ ac_cv_header_stat_broken,
+[AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+]])], ac_cv_header_stat_broken=no, ac_cv_header_stat_broken=yes)])
+if test $ac_cv_header_stat_broken = yes; then
+ AC_DEFINE(STAT_MACROS_BROKEN, 1,
+ [Define to 1 if the `S_IS*' macros in <sys/stat.h> do not
+ work properly.])
+fi
+])# AC_HEADER_STAT
+
+
+# AC_CHECK_HEADER_STDBOOL
+# -----------------
+# Check for stdbool.h that conforms to C99.
+AN_IDENTIFIER([bool], [AC_CHECK_HEADER_STDBOOL])
+AN_IDENTIFIER([true], [AC_CHECK_HEADER_STDBOOL])
+AN_IDENTIFIER([false],[AC_CHECK_HEADER_STDBOOL])
+AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
+ [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
+ [ac_cv_header_stdbool_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <stdbool.h>
+ #ifndef bool
+ "error: bool is not defined"
+ #endif
+ #ifndef false
+ "error: false is not defined"
+ #endif
+ #if false
+ "error: false is not 0"
+ #endif
+ #ifndef true
+ "error: true is not defined"
+ #endif
+ #if true != 1
+ "error: true is not 1"
+ #endif
+ #ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+ #endif
+
+ struct s { _Bool s: 1; _Bool t; } s;
+
+ char a[true == 1 ? 1 : -1];
+ char b[false == 0 ? 1 : -1];
+ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+ char d[(bool) 0.5 == true ? 1 : -1];
+ /* See body of main program for 'e'. */
+ char f[(_Bool) 0.0 == false ? 1 : -1];
+ char g[true];
+ char h[sizeof (_Bool)];
+ char i[sizeof s.t];
+ enum { j = false, k = true, l = false * true, m = true * 256 };
+ /* The following fails for
+ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+ _Bool n[m];
+ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+ /* Catch a bug in an HP-UX C compiler. See
+ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+ */
+ _Bool q = true;
+ _Bool *pq = &q;
+ ]],
+ [[
+ bool e = &s;
+ *pq |= q;
+ *pq |= ! q;
+ /* Refer to every declared value, to avoid compiler optimizations. */
+ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+ + !m + !n + !o + !p + !q + !pq);
+ ]])],
+ [ac_cv_header_stdbool_h=yes],
+ [ac_cv_header_stdbool_h=no])])
+ AC_CHECK_TYPES([_Bool])
+])# AC_CHECK_HEADER_STDBOOL
+
+
+# AC_HEADER_STDBOOL
+# -----------------
+# Define HAVE_STDBOOL_H if tdbool.h that conforms to C99.
+AC_DEFUN([AC_HEADER_STDBOOL],
+[AC_CHECK_HEADER_STDBOOL
+if test $ac_cv_header_stdbool_h = yes; then
+ AC_DEFINE(HAVE_STDBOOL_H, 1, [Define to 1 if stdbool.h conforms to C99.])
+fi
+])# AC_HEADER_STDBOOL
+
+
+# AC_HEADER_STDC
+# --------------
+AC_DEFUN([AC_HEADER_STDC],
+[AC_CACHE_CHECK(for ANSI C header files, ac_cv_header_stdc,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+]])],
+ [ac_cv_header_stdc=yes],
+ [ac_cv_header_stdc=no])
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ AC_EGREP_HEADER(memchr, string.h, , ac_cv_header_stdc=no)
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ AC_EGREP_HEADER(free, stdlib.h, , ac_cv_header_stdc=no)
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}]])], , ac_cv_header_stdc=no, :)
+fi])
+if test $ac_cv_header_stdc = yes; then
+ AC_DEFINE(STDC_HEADERS, 1,
+ [Define to 1 if you have the ANSI C header files.])
+fi
+])# AC_HEADER_STDC
+
+
+# AC_HEADER_SYS_WAIT
+# ------------------
+AC_DEFUN([AC_HEADER_SYS_WAIT],
+[AC_CACHE_CHECK([for sys/wait.h that is POSIX.1 compatible],
+ ac_cv_header_sys_wait_h,
+[AC_COMPILE_IFELSE(
+[AC_LANG_PROGRAM([#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+],
+[ int s;
+ wait (&s);
+ s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;])],
+ [ac_cv_header_sys_wait_h=yes],
+ [ac_cv_header_sys_wait_h=no])])
+if test $ac_cv_header_sys_wait_h = yes; then
+ AC_DEFINE(HAVE_SYS_WAIT_H, 1,
+ [Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible.])
+fi
+])# AC_HEADER_SYS_WAIT
+
+
+# AC_HEADER_TIME
+# --------------
+AC_DEFUN([AC_HEADER_TIME],
+[AC_CACHE_CHECK([whether time.h and sys/time.h may both be included],
+ ac_cv_header_time,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+],
+[if ((struct tm *) 0)
+return 0;])],
+ [ac_cv_header_time=yes],
+ [ac_cv_header_time=no])])
+if test $ac_cv_header_time = yes; then
+ AC_DEFINE(TIME_WITH_SYS_TIME, 1,
+ [Define to 1 if you can safely include both <sys/time.h>
+ and <time.h>.])
+fi
+])# AC_HEADER_TIME
+
+
+# _AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H
+# ----------------------------------
+m4_define([_AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H],
+[AC_CACHE_CHECK([whether termios.h defines TIOCGWINSZ],
+ ac_cv_sys_tiocgwinsz_in_termios_h,
+[AC_EGREP_CPP([yes],
+ [#include <sys/types.h>
+#include <termios.h>
+#ifdef TIOCGWINSZ
+ yes
+#endif
+],
+ ac_cv_sys_tiocgwinsz_in_termios_h=yes,
+ ac_cv_sys_tiocgwinsz_in_termios_h=no)])
+])# _AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H
+
+
+# _AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL
+# ----------------------------------
+m4_define([_AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL],
+[AC_CACHE_CHECK([whether sys/ioctl.h defines TIOCGWINSZ],
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h,
+[AC_EGREP_CPP([yes],
+ [#include <sys/types.h>
+#include <sys/ioctl.h>
+#ifdef TIOCGWINSZ
+ yes
+#endif
+],
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes,
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no)])
+])# _AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL
+
+
+# AC_HEADER_TIOCGWINSZ
+# --------------------
+# Look for a header that defines TIOCGWINSZ.
+# FIXME: Is this the proper name? Is this the proper implementation?
+# I need more help.
+AC_DEFUN([AC_HEADER_TIOCGWINSZ],
+[_AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H
+if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
+ _AC_HEADER_TIOCGWINSZ_IN_SYS_IOCTL
+ if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then
+ AC_DEFINE(GWINSZ_IN_SYS_IOCTL,1,
+ [Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>.])
+ fi
+fi
+])# AC_HEADER_TIOCGWINSZ
+
+
+# AU::AC_UNISTD_H
+# ---------------
+AU_DEFUN([AC_UNISTD_H],
+[AC_CHECK_HEADERS(unistd.h)])
+
+
+# AU::AC_USG
+# ----------
+# Define `USG' if string functions are in strings.h.
+AU_DEFUN([AC_USG],
+[AC_MSG_CHECKING([for BSD string and memory functions])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <strings.h>]],
+ [[rindex(0, 0); bzero(0, 0);]])],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)
+ AC_DEFINE(USG, 1,
+ [Define to 1 if you do not have <strings.h>, index,
+ bzero, etc... This symbol is obsolete, you should
+ not depend upon it.])])
+AC_CHECK_HEADERS(string.h)],
+[Remove `AC_MSG_CHECKING', `AC_LINK_IFELSE' and this warning
+when you adjust your code to use HAVE_STRING_H.])
+
+
+# AU::AC_MEMORY_H
+# ---------------
+# To be precise this macro used to be:
+#
+# | AC_MSG_CHECKING(whether string.h declares mem functions)
+# | AC_EGREP_HEADER(memchr, string.h, ac_found=yes, ac_found=no)
+# | AC_MSG_RESULT($ac_found)
+# | if test $ac_found = no; then
+# | AC_CHECK_HEADER(memory.h, [AC_DEFINE(NEED_MEMORY_H)])
+# | fi
+#
+# But it is better to check for both headers, and alias NEED_MEMORY_H to
+# HAVE_MEMORY_H.
+AU_DEFUN([AC_MEMORY_H],
+[AC_CHECK_HEADER(memory.h,
+ [AC_DEFINE([NEED_MEMORY_H], 1,
+ [Same as `HAVE_MEMORY_H', don't depend on me.])])
+AC_CHECK_HEADERS(string.h memory.h)],
+[Remove this warning and
+`AC_CHECK_HEADER(memory.h, AC_DEFINE(...))' when you adjust your code to
+use HAVE_STRING_H and HAVE_MEMORY_H, not NEED_MEMORY_H.])
+
+
+# AU::AC_DIR_HEADER
+# -----------------
+# Like calling `AC_HEADER_DIRENT' and `AC_FUNC_CLOSEDIR_VOID', but
+# defines a different set of C preprocessor macros to indicate which
+# header file is found.
+AU_DEFUN([AC_DIR_HEADER],
+[AC_HEADER_DIRENT
+AC_FUNC_CLOSEDIR_VOID
+test ac_cv_header_dirent_dirent_h &&
+ AC_DEFINE([DIRENT], 1, [Same as `HAVE_DIRENT_H', don't depend on me.])
+test ac_cv_header_dirent_sys_ndir_h &&
+ AC_DEFINE([SYSNDIR], 1, [Same as `HAVE_SYS_NDIR_H', don't depend on me.])
+test ac_cv_header_dirent_sys_dir_h &&
+ AC_DEFINE([SYSDIR], 1, [Same as `HAVE_SYS_DIR_H', don't depend on me.])
+test ac_cv_header_dirent_ndir_h &&
+ AC_DEFINE([NDIR], 1, [Same as `HAVE_NDIR_H', don't depend on me.])],
+[Remove this warning and the four `AC_DEFINE' when you
+adjust your code to use `AC_HEADER_DIRENT'.])
diff --git a/lib/autoconf/lang.m4 b/lib/autoconf/lang.m4
new file mode 100644
index 0000000..19852b8
--- /dev/null
+++ b/lib/autoconf/lang.m4
@@ -0,0 +1,721 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Programming languages support.
+# Copyright (C) 2000-2002, 2004-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# Table of Contents:
+#
+# 1. Language selection
+# and routines to produce programs in a given language.
+#
+# 2. Producing programs in a given language.
+#
+# 3. Looking for a compiler
+# And possibly the associated preprocessor.
+#
+# 3a. Computing EXEEXT and OBJEXT.
+#
+# 4. Compilers' characteristics.
+
+
+
+## ----------------------- ##
+## 1. Language selection. ##
+## ----------------------- ##
+
+
+# AC_LANG_CASE(LANG1, IF-LANG1, LANG2, IF-LANG2, ..., DEFAULT)
+# ------------------------------------------------------------
+# Expand into IF-LANG1 if the current language is LANG1 etc. else
+# into default.
+m4_define([AC_LANG_CASE],
+[m4_case(_AC_LANG, $@)])
+
+
+# _AC_LANG_DISPATCH(MACRO, LANG, ARGS)
+# ------------------------------------
+# Call the specialization of MACRO for LANG with ARGS. Complain if
+# unavailable.
+m4_define([_AC_LANG_DISPATCH],
+[m4_ifdef([$1($2)],
+ [m4_indir([$1($2)], m4_shift2($@))],
+ [m4_fatal([$1: unknown language: $2])])])
+
+
+# _AC_LANG_SET(OLD, NEW)
+# ----------------------
+# Output the shell code needed to switch from OLD language to NEW language.
+# Do not try to optimize like this:
+#
+# m4_defun([_AC_LANG_SET],
+# [m4_if([$1], [$2], [],
+# [_AC_LANG_DISPATCH([AC_LANG], [$2])])])
+#
+# as it can introduce differences between the sh-current language and the
+# m4-current-language when m4_require is used. Something more subtle
+# might be possible, but at least for the time being, play it safe.
+m4_defun([_AC_LANG_SET],
+[_AC_LANG_DISPATCH([AC_LANG], [$2])])
+
+
+# AC_LANG(LANG)
+# -------------
+# Set the current language to LANG.
+m4_defun([AC_LANG],
+[_AC_LANG_SET(m4_ifdef([_AC_LANG], [m4_defn([_AC_LANG])]),
+ [$1])dnl
+m4_define([_AC_LANG], [$1])])
+
+
+# AC_LANG_PUSH(LANG)
+# ------------------
+# Save the current language, and use LANG.
+m4_defun([AC_LANG_PUSH],
+[_AC_LANG_SET(m4_ifdef([_AC_LANG], [m4_defn([_AC_LANG])]),
+ [$1])dnl
+m4_pushdef([_AC_LANG], [$1])])
+
+
+# AC_LANG_POP([LANG])
+# -------------------
+# If given, check that the current language is LANG, and restore the
+# previous language.
+m4_defun([AC_LANG_POP],
+[m4_ifval([$1],
+ [m4_if([$1], m4_defn([_AC_LANG]), [],
+ [m4_fatal([$0($1): unexpected current language: ]m4_defn([_AC_LANG]))])])dnl
+m4_pushdef([$0 OLD], m4_defn([_AC_LANG]))dnl
+m4_popdef([_AC_LANG])dnl
+_AC_LANG_SET(m4_defn([$0 OLD]), m4_defn([_AC_LANG]))dnl
+m4_popdef([$0 OLD])dnl
+])
+
+
+# AC_LANG_SAVE
+# ------------
+# Save the current language, but don't change language.
+AU_DEFUN([AC_LANG_SAVE],
+[[AC_LANG_SAVE]],
+[Instead of using `AC_LANG', `AC_LANG_SAVE', and `AC_LANG_RESTORE',
+you should use `AC_LANG_PUSH' and `AC_LANG_POP'.])
+AC_DEFUN([AC_LANG_SAVE],
+[m4_pushdef([_AC_LANG], _AC_LANG)dnl
+AC_DIAGNOSE([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
+You should run autoupdate.])])
+
+
+# AC_LANG_RESTORE
+# ---------------
+# Restore the current language from the stack.
+AU_DEFUN([AC_LANG_RESTORE], [AC_LANG_POP($@)])
+
+
+# _AC_LANG_ABBREV
+# ---------------
+# Return a short signature of _AC_LANG which can be used in shell
+# variable names, or in M4 macro names.
+m4_defun([_AC_LANG_ABBREV],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# _AC_LANG_PREFIX
+# ---------------
+# Return a short (upper case) signature of _AC_LANG that is used to
+# prefix environment variables like FLAGS.
+m4_defun([_AC_LANG_PREFIX],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_ASSERT(LANG)
+# --------------------
+# Current language must be LANG.
+m4_defun([AC_LANG_ASSERT],
+[m4_if(_AC_LANG, $1, [],
+ [m4_fatal([$0: current language is not $1: ] _AC_LANG)])])
+
+
+
+# AC_LANG_DEFINE(NAME, ABBREV, PREFIX, COMPILER-VAR, COPY-FROM, SHELL-VARS)
+# -------------------------------------------------------------------------
+# Define a language referenced by AC_LANG(NAME), with cache variable prefix
+# ABBREV, Makefile variable prefix PREFIX and compiler variable COMPILER-VAR.
+# AC_LANG(NAME) is defined to SHELL-VARS, other macros are copied from language
+# COPY-FROM. Even if COPY-FROM is empty, a default definition is provided for
+# language-specific macros AC_LANG_SOURCE(NAME) and AC_LANG_CONFTEST(NAME).
+m4_define([AC_LANG_DEFINE],
+[m4_define([AC_LANG($1)], [$6])]
+[m4_define([_AC_LANG_ABBREV($1)], [$2])]
+[m4_define([_AC_LANG_PREFIX($1)], [$3])]
+[m4_define([_AC_CC($1)], [$4])]
+[m4_copy([AC_LANG_CONFTEST($5)], [AC_LANG_CONFTEST($1)])]
+[m4_copy([AC_LANG_SOURCE($5)], [AC_LANG_SOURCE($1)])]
+[m4_copy([_AC_LANG_NULL_PROGRAM($5)], [_AC_LANG_NULL_PROGRAM($1)])]
+[m4_ifval([$5],
+[m4_copy([AC_LANG_PROGRAM($5)], [AC_LANG_PROGRAM($1)])]
+[m4_copy([AC_LANG_CALL($5)], [AC_LANG_CALL($1)])]
+[m4_copy([AC_LANG_FUNC_LINK_TRY($5)], [AC_LANG_FUNC_LINK_TRY($1)])]
+[m4_copy([AC_LANG_BOOL_COMPILE_TRY($5)], [AC_LANG_BOOL_COMPILE_TRY($1)])]
+[m4_copy([AC_LANG_INT_SAVE($5)], [AC_LANG_INT_SAVE($1)])]
+[m4_copy([_AC_LANG_IO_PROGRAM($5)], [_AC_LANG_IO_PROGRAM($1)])])])
+
+## ----------------------- ##
+## 2. Producing programs. ##
+## ----------------------- ##
+
+
+# AC_LANG_CONFTEST(BODY)
+# ----------------------
+# Save the BODY in `conftest.$ac_ext'. Add a trailing new line.
+AC_DEFUN([AC_LANG_CONFTEST],
+[m4_pushdef([_AC_LANG_DEFINES_PROVIDED],
+ [m4_warn([syntax], [$0: no AC_LANG_SOURCE call detected in body])])]dnl
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]dnl
+[[]_AC_LANG_DEFINES_PROVIDED[]m4_popdef([_AC_LANG_DEFINES_PROVIDED])])
+
+
+# AC_LANG_CONFTEST()(BODY)
+# ------------------------
+# Default implementation of AC_LANG_CONFTEST.
+# This version assumes that you can't inline confdefs.h into your
+# language, and as such, it is safe to blindly call
+# AC_LANG_DEFINES_PROVIDED. Language-specific overrides should
+# remove this call if AC_LANG_SOURCE does inline confdefs.h.
+m4_define([AC_LANG_CONFTEST()],
+[cat > conftest.$ac_ext <<_ACEOF
+AC_LANG_DEFINES_PROVIDED[]$1
+_ACEOF])
+
+# AC_LANG_DEFINES_PROVIDED
+# ------------------------
+# Witness macro that all prior AC_DEFINE results have been output
+# into the current expansion, to silence warning from AC_LANG_CONFTEST.
+m4_define([AC_LANG_DEFINES_PROVIDED],
+[m4_define([_$0])])
+
+
+# AC_LANG_SOURCE(BODY)
+# --------------------
+# Produce a valid source for the current language, which includes the
+# BODY, and as much as possible `confdefs.h'.
+AC_DEFUN([AC_LANG_SOURCE],
+[AC_LANG_DEFINES_PROVIDED[]_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_SOURCE()(BODY)
+# ----------------------
+# Default implementation of AC_LANG_SOURCE.
+m4_define([AC_LANG_SOURCE()],
+[$1])
+
+
+# AC_LANG_PROGRAM([PROLOGUE], [BODY])
+# -----------------------------------
+# Produce a valid source for the current language. Prepend the
+# PROLOGUE (typically CPP directives and/or declarations) to an
+# execution the BODY (typically glued inside the `main' function, or
+# equivalent).
+AC_DEFUN([AC_LANG_PROGRAM],
+[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+
+
+# _AC_LANG_NULL_PROGRAM()()
+# -------------------------
+# Default implementation of AC_LANG_NULL_PROGRAM
+m4_define([_AC_LANG_NULL_PROGRAM()],
+[AC_LANG_PROGRAM([], [])])
+
+
+# _AC_LANG_NULL_PROGRAM
+# ---------------------
+# Produce valid source for the current language that does
+# nothing.
+AC_DEFUN([_AC_LANG_NULL_PROGRAM],
+[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+
+
+# _AC_LANG_IO_PROGRAM
+# -------------------
+# Produce valid source for the current language that creates
+# a file. (This is used when detecting whether executables
+# work, e.g. to detect cross-compiling.)
+AC_DEFUN([_AC_LANG_IO_PROGRAM],
+[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+
+
+# AC_LANG_CALL(PROLOGUE, FUNCTION)
+# --------------------------------
+# Call the FUNCTION.
+AC_DEFUN([AC_LANG_CALL],
+[m4_ifval([$2], [], [m4_warn([syntax], [$0: no function given])])dnl
+_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_FUNC_LINK_TRY(FUNCTION)
+# -------------------------------
+# Produce a source which links correctly iff the FUNCTION exists.
+AC_DEFUN([AC_LANG_FUNC_LINK_TRY],
+[m4_ifval([$1], [], [m4_warn([syntax], [$0: no function given])])dnl
+_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_BOOL_COMPILE_TRY(PROLOGUE, EXPRESSION)
+# ----------------------------------------------
+# Produce a program that compiles with success iff the boolean EXPRESSION
+# evaluates to true at compile time.
+AC_DEFUN([AC_LANG_BOOL_COMPILE_TRY],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_INT_SAVE(PROLOGUE, EXPRESSION)
+# --------------------------------------
+# Produce a program that saves the runtime evaluation of the integer
+# EXPRESSION into `conftest.val'.
+AC_DEFUN([AC_LANG_INT_SAVE],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# _AC_CC
+# ------
+# The variable name of the compiler.
+m4_define([_AC_CC],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+## -------------------------------------------- ##
+## 3. Looking for Compilers and Preprocessors. ##
+## -------------------------------------------- ##
+
+
+# AC_LANG_COMPILER
+# ----------------
+# Find a compiler for the current LANG. Be sure to be run before
+# AC_LANG_PREPROC.
+#
+# Note that because we might AC_REQUIRE `AC_LANG_COMPILER(C)' for
+# instance, the latter must be AC_DEFUN'd, not just define'd.
+m4_define([AC_LANG_COMPILER],
+[AC_BEFORE([AC_LANG_COMPILER(]_AC_LANG[)],
+ [AC_LANG_PREPROC(]_AC_LANG[)])dnl
+_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_COMPILER_REQUIRE
+# ------------------------
+# Ensure we have a compiler for the current LANG.
+AC_DEFUN([AC_LANG_COMPILER_REQUIRE],
+[m4_require([AC_LANG_COMPILER(]_AC_LANG[)],
+ [AC_LANG_COMPILER])])
+
+
+
+# _AC_LANG_COMPILER_GNU
+# ---------------------
+# Check whether the compiler for the current language is GNU.
+#
+# It doesn't seem necessary right now to have a different source
+# according to the current language, since this works fine. Some day
+# it might be needed. Nevertheless, pay attention to the fact that
+# the position of `choke me' on the seventh column is meant: otherwise
+# some Fortran compilers (e.g., SGI) might consider it's a
+# continuation line, and warn instead of reporting an error.
+m4_define([_AC_LANG_COMPILER_GNU],
+[AC_CACHE_CHECK([whether we are using the GNU _AC_LANG compiler],
+ [ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu],
+[_AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef __GNUC__
+ choke me
+#endif
+]])],
+ [ac_compiler_gnu=yes],
+ [ac_compiler_gnu=no])
+ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu=$ac_compiler_gnu
+])])# _AC_LANG_COMPILER_GNU
+
+
+# AC_LANG_PREPROC
+# ---------------
+# Find a preprocessor for the current language. Note that because we
+# might AC_REQUIRE `AC_LANG_PREPROC(C)' for instance, the latter must
+# be AC_DEFUN'd, not just define'd. Since the preprocessor depends
+# upon the compiler, look for the compiler.
+m4_define([AC_LANG_PREPROC],
+[AC_LANG_COMPILER_REQUIRE()dnl
+_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+
+# AC_LANG_PREPROC_REQUIRE
+# -----------------------
+# Ensure we have a preprocessor for the current language.
+AC_DEFUN([AC_LANG_PREPROC_REQUIRE],
+[m4_require([AC_LANG_PREPROC(]_AC_LANG[)],
+ [AC_LANG_PREPROC])])
+
+
+# AC_REQUIRE_CPP
+# --------------
+# Require the preprocessor for the current language.
+# FIXME: AU_ALIAS once AC_LANG is officially documented (2.51?).
+AC_DEFUN([AC_REQUIRE_CPP],
+[AC_LANG_PREPROC_REQUIRE])
+
+
+
+# AC_NO_EXECUTABLES
+# -----------------
+# FIXME: The GCC team has specific needs which the current Autoconf
+# framework cannot solve elegantly. This macro implements a dirty
+# hack until Autoconf is able to provide the services its users
+# need.
+#
+# Several of the support libraries that are often built with GCC can't
+# assume the tool-chain is already capable of linking a program: the
+# compiler often expects to be able to link with some of such
+# libraries.
+#
+# In several of these libraries, workarounds have been introduced to
+# avoid the AC_PROG_CC_WORKS test, that would just abort their
+# configuration. The introduction of AC_EXEEXT, enabled either by
+# libtool or by CVS autoconf, have just made matters worse.
+#
+# Unlike an earlier version of this macro, using AC_NO_EXECUTABLES does
+# not disable link tests at autoconf time, but at configure time.
+# This allows AC_NO_EXECUTABLES to be invoked conditionally.
+AC_DEFUN_ONCE([AC_NO_EXECUTABLES],
+[m4_divert_push([KILL])
+m4_divert_text([DEFAULTS], [ac_no_link=no])
+
+AC_BEFORE([$0], [_AC_COMPILER_EXEEXT])
+AC_BEFORE([$0], [AC_LINK_IFELSE])
+
+m4_define([_AC_COMPILER_EXEEXT],
+[AC_LANG_CONFTEST([_AC_LANG_NULL_PROGRAM])
+if _AC_DO_VAR(ac_link); then
+ ac_no_link=no
+ ]m4_defn([_AC_COMPILER_EXEEXT])[
+else
+ rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM
+ ac_no_link=yes
+ # Setting cross_compile will disable run tests; it will
+ # also disable AC_CHECK_FILE but that's generally
+ # correct if we can't link.
+ cross_compiling=yes
+ EXEEXT=
+ _AC_COMPILER_EXEEXT_CROSS
+fi
+])
+
+m4_define([AC_LINK_IFELSE],
+[if test x$ac_no_link = xyes; then
+ AC_MSG_ERROR([link tests are not allowed after AC@&t@_NO_EXECUTABLES])
+fi
+]m4_defn([AC_LINK_IFELSE]))
+
+m4_divert_pop()dnl
+])# AC_NO_EXECUTABLES
+
+
+
+# --------------------------------- #
+# 3a. Computing EXEEXT and OBJEXT. #
+# --------------------------------- #
+
+
+# Files to ignore
+# ---------------
+# Ignore .d files produced by CFLAGS=-MD.
+#
+# On UWIN (which uses a cc wrapper for MSVC), the compiler also generates
+# a .pdb file
+#
+# When the w32 free Borland C++ command line compiler links a program
+# (conftest.exe), it also produces a file named `conftest.tds' in
+# addition to `conftest.obj'.
+#
+# - *.bb, *.bbg
+# Created per object by GCC when given -ftest-coverage.
+#
+# - *.xSYM
+# Created on BeOS. Seems to be per executable.
+#
+# - *.map, *.inf
+# Created by the Green Hills compiler.
+#
+# - *.dSYM
+# Directory created on Mac OS X Leopard.
+
+
+# _AC_COMPILER_OBJEXT_REJECT
+# --------------------------
+# Case/esac pattern matching the files to be ignored when looking for
+# compiled object files.
+m4_define([_AC_COMPILER_OBJEXT_REJECT],
+[*.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM])
+
+
+# _AC_COMPILER_EXEEXT_REJECT
+# --------------------------
+# Case/esac pattern matching the files to be ignored when looking for
+# compiled executables.
+m4_define([_AC_COMPILER_EXEEXT_REJECT],
+[_AC_COMPILER_OBJEXT_REJECT | *.o | *.obj])
+
+
+# We must not AU define them, because autoupdate would then remove
+# them, which is right, but Automake 1.4 would remove the support for
+# $(EXEEXT) etc.
+# FIXME: Remove this once Automake fixed.
+AC_DEFUN([AC_EXEEXT], [])
+AC_DEFUN([AC_OBJEXT], [])
+
+
+# _AC_COMPILER_EXEEXT_DEFAULT
+# ---------------------------
+# Check for the extension used for the default name for executables.
+#
+# We do this in order to find out what is the extension we must add for
+# creating executables (see _AC_COMPILER_EXEEXT's comments).
+#
+# On OpenVMS 7.1 system, the DEC C 5.5 compiler when called through a
+# GNV (gnv.sourceforge.net) cc wrapper, produces the output file named
+# `a_out.exe'.
+# b.out is created by i960 compilers.
+#
+# Start with the most likely output file names, but:
+# 1) Beware the clever `test -f' on Cygwin, try the DOS-like .exe names
+# before the counterparts without the extension.
+# 2) The algorithm is not robust to junk in `.', hence go to wildcards
+# (conftest.*) only as a last resort.
+# Beware of `expr' that may return `0' or `'. Since this macro is
+# the first one in touch with the compiler, it should also check that
+# it compiles properly.
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions. Remove them first so a
+# subsequent execution test works.
+#
+m4_define([_AC_COMPILER_EXEEXT_DEFAULT],
+[# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+AC_MSG_CHECKING([whether the _AC_LANG compiler works])
+ac_link_default=`AS_ECHO(["$ac_link"]) | sed ['s/ -o *conftest[^ ]*//']`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ _AC_COMPILER_EXEEXT_REJECT ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+AS_IF([_AC_DO_VAR(ac_link_default)],
+[# Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ _AC_COMPILER_EXEEXT_REJECT )
+ ;;
+ [[ab]].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : ['[^.]*\(\..*\)']`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+],
+ [ac_file=''])
+AS_IF([test -z "$ac_file"],
+[AC_MSG_RESULT([no])
+_AC_MSG_LOG_CONFTEST
+AC_MSG_FAILURE([_AC_LANG compiler cannot create executables], 77)],
+[AC_MSG_RESULT([yes])])
+AC_MSG_CHECKING([for _AC_LANG compiler default output file name])
+AC_MSG_RESULT([$ac_file])
+ac_exeext=$ac_cv_exeext
+])# _AC_COMPILER_EXEEXT_DEFAULT
+
+
+# _AC_COMPILER_EXEEXT_CROSS
+# -------------------------
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+#
+# It is not sufficient to run a no-op program -- this succeeds and gives
+# a false negative when cross-compiling for the compute nodes on the
+# IBM Blue Gene/L. Instead, _AC_COMPILER_EXEEXT calls _AC_LANG_IO_PROGRAM
+# to create a program that writes to a file, which is sufficient to
+# detect cross-compiling on Blue Gene. Note also that AC_COMPUTE_INT
+# requires programs that create files when not cross-compiling, so it
+# is safe and not a bad idea to check for this capability in general.
+m4_define([_AC_COMPILER_EXEEXT_CROSS],
+[# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+AC_MSG_CHECKING([whether we are cross compiling])
+if test "$cross_compiling" != yes; then
+ _AC_DO_VAR(ac_link)
+ if _AC_DO_TOKENS([./conftest$ac_cv_exeext]); then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ AC_MSG_FAILURE([cannot run _AC_LANG compiled programs.
+If you meant to cross compile, use `--host'.])
+ fi
+ fi
+fi
+AC_MSG_RESULT([$cross_compiling])
+])# _AC_COMPILER_EXEEXT_CROSS
+
+
+# _AC_COMPILER_EXEEXT_O
+# ---------------------
+# Check for the extension used when `-o foo'. Try to see if ac_cv_exeext,
+# as computed by _AC_COMPILER_EXEEXT_DEFAULT is OK.
+m4_define([_AC_COMPILER_EXEEXT_O],
+[AC_MSG_CHECKING([for suffix of executables])
+AS_IF([_AC_DO_VAR(ac_link)],
+[# If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ _AC_COMPILER_EXEEXT_REJECT ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : ['[^.]*\(\..*\)']`
+ break;;
+ * ) break;;
+ esac
+done],
+ [AC_MSG_FAILURE([cannot compute suffix of executables: cannot compile and link])])
+rm -f conftest conftest$ac_cv_exeext
+AC_MSG_RESULT([$ac_cv_exeext])
+])# _AC_COMPILER_EXEEXT_O
+
+
+# _AC_COMPILER_EXEEXT
+# -------------------
+# Check for the extension used for executables. It compiles a test
+# executable. If this is called, the executable extensions will be
+# automatically used by link commands run by the configure script.
+#
+# Note that some compilers (cross or not), strictly obey to `-o foo' while
+# the host requires `foo.exe', so we should not depend upon `-o' to
+# test EXEEXT. But then, be sure not to destroy user files.
+#
+# Must be run before _AC_COMPILER_OBJEXT because _AC_COMPILER_EXEEXT_DEFAULT
+# checks whether the compiler works.
+#
+# Do not rename this macro; Automake decides whether EXEEXT is used
+# by checking whether `_AC_COMPILER_EXEEXT' has been expanded.
+#
+# See _AC_COMPILER_EXEEXT_CROSS for why we need _AC_LANG_IO_PROGRAM.
+m4_define([_AC_COMPILER_EXEEXT],
+[AC_LANG_CONFTEST([_AC_LANG_NULL_PROGRAM])
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+_AC_COMPILER_EXEEXT_DEFAULT
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+_AC_COMPILER_EXEEXT_O
+rm -f conftest.$ac_ext
+AC_SUBST([EXEEXT], [$ac_cv_exeext])dnl
+ac_exeext=$EXEEXT
+AC_LANG_CONFTEST([_AC_LANG_IO_PROGRAM])
+ac_clean_files="$ac_clean_files conftest.out"
+_AC_COMPILER_EXEEXT_CROSS
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+])# _AC_COMPILER_EXEEXT
+
+
+# _AC_COMPILER_OBJEXT
+# -------------------
+# Check the object extension used by the compiler: typically `.o' or
+# `.obj'. If this is called, some other behavior will change,
+# determined by ac_objext.
+#
+# This macro is called by AC_LANG_COMPILER, the latter being required
+# by the AC_COMPILE_IFELSE macros, so use _AC_COMPILE_IFELSE. And in fact,
+# don't, since _AC_COMPILE_IFELSE needs to know ac_objext for the `test -s'
+# it includes. So do it by hand.
+m4_define([_AC_COMPILER_OBJEXT],
+[AC_CACHE_CHECK([for suffix of object files], ac_cv_objext,
+[AC_LANG_CONFTEST([_AC_LANG_NULL_PROGRAM])
+rm -f conftest.o conftest.obj
+AS_IF([_AC_DO_VAR(ac_compile)],
+[for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ _AC_COMPILER_OBJEXT_REJECT ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done],
+ [_AC_MSG_LOG_CONFTEST
+AC_MSG_FAILURE([cannot compute suffix of object files: cannot compile])])
+rm -f conftest.$ac_cv_objext conftest.$ac_ext])
+AC_SUBST([OBJEXT], [$ac_cv_objext])dnl
+ac_objext=$OBJEXT
+])# _AC_COMPILER_OBJEXT
+
+
+
+
+## ------------------------------- ##
+## 4. Compilers' characteristics. ##
+## ------------------------------- ##
+
+# AC_LANG_WERROR
+# --------------
+# Treat warnings from the current language's preprocessor, compiler, and
+# linker as fatal errors.
+AC_DEFUN([AC_LANG_WERROR],
+[m4_divert_text([DEFAULTS], [ac_[]_AC_LANG_ABBREV[]_werror_flag=])
+ac_[]_AC_LANG_ABBREV[]_werror_flag=yes])# AC_LANG_WERROR
diff --git a/lib/autoconf/libs.m4 b/lib/autoconf/libs.m4
new file mode 100644
index 0000000..934c50d
--- /dev/null
+++ b/lib/autoconf/libs.m4
@@ -0,0 +1,478 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Checking for libraries.
+# Copyright (C) 1992-1996, 1998-2006, 2008-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+# Table of contents
+#
+# 1. Generic tests for libraries
+# 2. Tests for specific libraries
+
+
+## --------------------------------- ##
+## 1. Generic tests for libraries.## ##
+## --------------------------------- ##
+
+
+
+# AC_SEARCH_LIBS(FUNCTION, SEARCH-LIBS,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [OTHER-LIBRARIES])
+# --------------------------------------------------------
+# Search for a library defining FUNC, if it's not already available.
+AC_DEFUN([AC_SEARCH_LIBS],
+[AS_VAR_PUSHDEF([ac_Search], [ac_cv_search_$1])dnl
+AC_CACHE_CHECK([for library containing $1], [ac_Search],
+[ac_func_search_save_LIBS=$LIBS
+AC_LANG_CONFTEST([AC_LANG_CALL([], [$1])])
+for ac_lib in '' $2; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $5 $ac_func_search_save_LIBS"
+ fi
+ AC_LINK_IFELSE([], [AS_VAR_SET([ac_Search], [$ac_res])])
+ AS_VAR_SET_IF([ac_Search], [break])
+done
+AS_VAR_SET_IF([ac_Search], , [AS_VAR_SET([ac_Search], [no])])
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS])
+AS_VAR_COPY([ac_res], [ac_Search])
+AS_IF([test "$ac_res" != no],
+ [test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ $3],
+ [$4])
+AS_VAR_POPDEF([ac_Search])dnl
+])
+
+
+
+# AC_CHECK_LIB(LIBRARY, FUNCTION,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [OTHER-LIBRARIES])
+# ------------------------------------------------------
+#
+# Use a cache variable name containing both the library and function name,
+# because the test really is for library $1 defining function $2, not
+# just for library $1. Separate tests with the same $1 and different $2s
+# may have different results.
+#
+# Note that using directly AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$2])
+# is asking for troubles, since AC_CHECK_LIB($lib, fun) would give
+# ac_cv_lib_$lib_fun, which is definitely not what was meant. Hence
+# the AS_LITERAL_IF indirection.
+#
+# FIXME: This macro is extremely suspicious. It DEFINEs unconditionally,
+# whatever the FUNCTION, in addition to not being a *S macro. Note
+# that the cache does depend upon the function we are looking for.
+#
+# It is on purpose we used `ac_check_lib_save_LIBS' and not just
+# `ac_save_LIBS': there are many macros which don't want to see `LIBS'
+# changed but still want to use AC_CHECK_LIB, so they save `LIBS'.
+# And ``ac_save_LIBS' is too tempting a name, so let's leave them some
+# freedom.
+AC_DEFUN([AC_CHECK_LIB],
+[m4_ifval([$3], , [AH_CHECK_LIB([$1])])dnl
+AS_LITERAL_WORD_IF([$1],
+ [AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$2])],
+ [AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1''_$2])])dnl
+AC_CACHE_CHECK([for $2 in -l$1], [ac_Lib],
+[ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$1 $5 $LIBS"
+AC_LINK_IFELSE([AC_LANG_CALL([], [$2])],
+ [AS_VAR_SET([ac_Lib], [yes])],
+ [AS_VAR_SET([ac_Lib], [no])])
+LIBS=$ac_check_lib_save_LIBS])
+AS_VAR_IF([ac_Lib], [yes],
+ [m4_default([$3], [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_LIB$1))
+ LIBS="-l$1 $LIBS"
+])],
+ [$4])
+AS_VAR_POPDEF([ac_Lib])dnl
+])# AC_CHECK_LIB
+
+
+# AH_CHECK_LIB(LIBNAME)
+# ---------------------
+m4_define([AH_CHECK_LIB],
+[AH_TEMPLATE(AS_TR_CPP([HAVE_LIB$1]),
+ [Define to 1 if you have the `$1' library (-l$1).])])
+
+
+# AC_HAVE_LIBRARY(LIBRARY,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [OTHER-LIBRARIES])
+# ---------------------------------------------------------
+#
+# This macro is equivalent to calling `AC_CHECK_LIB' with a FUNCTION
+# argument of `main'. In addition, LIBRARY can be written as any of
+# `foo', `-lfoo', or `libfoo.a'. In all of those cases, the compiler
+# is passed `-lfoo'. However, LIBRARY cannot be a shell variable;
+# it must be a literal name.
+AU_DEFUN([AC_HAVE_LIBRARY],
+[m4_pushdef([AC_Lib_Name],
+ m4_bpatsubst(m4_bpatsubst([[$1]],
+ [lib\([^\.]*\)\.a], [\1]),
+ [-l], []))dnl
+AC_CHECK_LIB(AC_Lib_Name, main, [$2], [$3], [$4])dnl
+ac_cv_lib_[]AC_Lib_Name()=ac_cv_lib_[]AC_Lib_Name()_main
+m4_popdef([AC_Lib_Name])dnl
+])
+
+
+
+
+## --------------------------------- ##
+## 2. Tests for specific libraries. ##
+## --------------------------------- ##
+
+
+
+# --------------------- #
+# Checks for X window. #
+# --------------------- #
+
+
+# _AC_PATH_X_XMKMF
+# ----------------
+# Internal subroutine of _AC_PATH_X.
+# Set ac_x_includes and/or ac_x_libraries.
+m4_define([_AC_PATH_X_XMKMF],
+[AC_ARG_VAR(XMKMF, [Path to xmkmf, Makefile generator for X Window System])dnl
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ cat >Imakefile <<'_ACEOF'
+incroot:
+ @echo incroot='${INCROOT}'
+usrlibdir:
+ @echo usrlibdir='${USRLIBDIR}'
+libdir:
+ @echo libdir='${LIBDIR}'
+_ACEOF
+ if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+ for ac_var in incroot usrlibdir libdir; do
+ eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+ done
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl dylib la dll; do
+ if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+ test -f "$ac_im_libdir/libX11.$ac_extension"; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ac_x_includes= ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -f -r conftest.dir
+fi
+])# _AC_PATH_X_XMKMF
+
+
+# _AC_PATH_X_DIRECT
+# -----------------
+# Internal subroutine of _AC_PATH_X.
+# Set ac_x_includes and/or ac_x_libraries.
+m4_define([_AC_PATH_X_DIRECT],
+[# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+ AC_PREPROC_IFELSE([AC_LANG_SOURCE([@%:@include <X11/Xlib.h>])],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done])
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lX11 $LIBS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([@%:@include <X11/Xlib.h>],
+ [XrmInitialize ()])],
+ [LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=],
+ [LIBS=$ac_save_LIBS
+for ac_dir in `AS_ECHO(["$ac_x_includes $ac_x_header_dirs"]) | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl dylib la dll; do
+ if test -r "$ac_dir/libX11.$ac_extension"; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = no
+])# _AC_PATH_X_DIRECT
+
+
+# _AC_PATH_X
+# ----------
+# Compute ac_cv_have_x.
+AC_DEFUN([_AC_PATH_X],
+[AC_CACHE_VAL(ac_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+_AC_PATH_X_XMKMF
+_AC_PATH_X_DIRECT
+case $ac_x_includes,$ac_x_libraries in #(
+ no,* | *,no | *\'*)
+ # Didn't find X, or a directory has "'" in its name.
+ ac_cv_have_x="have_x=no";; #(
+ *)
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$ac_x_includes'\
+ ac_x_libraries='$ac_x_libraries'"
+esac])dnl
+])
+
+
+# AC_PATH_X
+# ---------
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+AN_HEADER([X11/Xlib.h], [AC_PATH_X])
+AC_DEFUN([AC_PATH_X],
+[dnl Document the X abnormal options inherited from history.
+m4_divert_once([HELP_BEGIN], [
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR])dnl
+AC_MSG_CHECKING([for X])
+
+AC_ARG_WITH(x, [ --with-x use the X Window System])
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ case $x_includes,$x_libraries in #(
+ *\'*) AC_MSG_ERROR([cannot use X directory names containing ']);; #(
+ *,NONE | NONE,*) _AC_PATH_X;; #(
+ *) have_x=yes;;
+ esac
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT([$have_x])
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$x_includes'\
+ ac_x_libraries='$x_libraries'"
+ AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+fi
+])# AC_PATH_X
+
+
+
+# AC_PATH_XTRA
+# ------------
+# Find additional X libraries, magic flags, etc.
+AC_DEFUN([AC_PATH_XTRA],
+[AC_REQUIRE([AC_PATH_X])dnl
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+ AC_DEFINE([X_DISPLAY_MISSING], 1,
+ [Define to 1 if the X Window System is missing or not being used.])
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ AC_MSG_CHECKING([whether -R must be followed by a space])
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag=$ac_[]_AC_LANG_ABBREV[]_werror_flag
+ ac_[]_AC_LANG_ABBREV[]_werror_flag=yes
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+ [AC_MSG_RESULT([no])
+ X_LIBS="$X_LIBS -R$x_libraries"],
+ [LIBS="$ac_xsave_LIBS -R $x_libraries"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+ [AC_MSG_RESULT([yes])
+ X_LIBS="$X_LIBS -R $x_libraries"],
+ [AC_MSG_RESULT([neither works])])])
+ ac_[]_AC_LANG_ABBREV[]_werror_flag=$ac_xsave_[]_AC_LANG_ABBREV[]_werror_flag
+ LIBS=$ac_xsave_LIBS
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ AC_LINK_IFELSE([AC_LANG_CALL([], [XOpenDisplay])],
+ [],
+ [AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi])
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ AC_CHECK_FUNC(gethostbyname)
+ if test $ac_cv_func_gethostbyname = no; then
+ AC_CHECK_LIB(nsl, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ AC_CHECK_LIB(bsd, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd")
+ fi
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat)
+ if test $ac_cv_func_shmat = no; then
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc")
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], , $X_EXTRA_LIBS)
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+AC_SUBST(X_CFLAGS)dnl
+AC_SUBST(X_PRE_LIBS)dnl
+AC_SUBST(X_LIBS)dnl
+AC_SUBST(X_EXTRA_LIBS)dnl
+])# AC_PATH_XTRA
diff --git a/lib/autoconf/oldnames.m4 b/lib/autoconf/oldnames.m4
new file mode 100644
index 0000000..a04eec8
--- /dev/null
+++ b/lib/autoconf/oldnames.m4
@@ -0,0 +1,92 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Support old macros, and provide automated updates.
+# Copyright (C) 1994, 1999-2001, 2003, 2009-2012 Free Software
+# Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Originally written by David J. MacKenzie.
+
+
+## ---------------------------- ##
+## General macros of Autoconf. ##
+## ---------------------------- ##
+
+AU_ALIAS([AC_WARN], [AC_MSG_WARN])
+AU_ALIAS([AC_ERROR], [AC_MSG_ERROR])
+AU_ALIAS([AC_HAVE_HEADERS], [AC_CHECK_HEADERS])
+AU_ALIAS([AC_HEADER_CHECK], [AC_CHECK_HEADER])
+AU_ALIAS([AC_HEADER_EGREP], [AC_EGREP_HEADER])
+AU_ALIAS([AC_PREFIX], [AC_PREFIX_PROGRAM])
+AU_ALIAS([AC_PROGRAMS_CHECK], [AC_CHECK_PROGS])
+AU_ALIAS([AC_PROGRAMS_PATH], [AC_PATH_PROGS])
+AU_ALIAS([AC_PROGRAM_CHECK], [AC_CHECK_PROG])
+AU_ALIAS([AC_PROGRAM_EGREP], [AC_EGREP_CPP])
+AU_ALIAS([AC_PROGRAM_PATH], [AC_PATH_PROG])
+AU_ALIAS([AC_SIZEOF_TYPE], [AC_CHECK_SIZEOF])
+AU_ALIAS([AC_TEST_CPP], [AC_TRY_CPP])
+AU_ALIAS([AC_TEST_PROGRAM], [AC_TRY_RUN])
+
+
+
+## ----------------------------- ##
+## Specific macros of Autoconf. ##
+## ----------------------------- ##
+
+AU_ALIAS([AC_CHAR_UNSIGNED], [AC_C_CHAR_UNSIGNED])
+AU_ALIAS([AC_CONST], [AC_C_CONST])
+AU_ALIAS([AC_CROSS_CHECK], [AC_C_CROSS])
+AU_ALIAS([AC_FIND_X], [AC_PATH_X])
+AU_ALIAS([AC_FIND_XTRA], [AC_PATH_XTRA])
+AU_ALIAS([AC_GCC_TRADITIONAL], [AC_PROG_GCC_TRADITIONAL])
+AU_ALIAS([AC_GETGROUPS_T], [AC_TYPE_GETGROUPS])
+AU_ALIAS([AC_INLINE], [AC_C_INLINE])
+AU_ALIAS([AC_LN_S], [AC_PROG_LN_S])
+AU_ALIAS([AC_LONG_DOUBLE], [AC_C_LONG_DOUBLE])
+AU_ALIAS([AC_LONG_FILE_NAMES], [AC_SYS_LONG_FILE_NAMES])
+AU_ALIAS([AC_MAJOR_HEADER], [AC_HEADER_MAJOR])
+AU_ALIAS([AC_MINUS_C_MINUS_O], [AC_PROG_CC_C_O])
+AU_ALIAS([AC_MODE_T], [AC_TYPE_MODE_T])
+AU_ALIAS([AC_OFF_T], [AC_TYPE_OFF_T])
+AU_ALIAS([AC_PID_T], [AC_TYPE_PID_T])
+AU_ALIAS([AC_RESTARTABLE_SYSCALLS], [AC_SYS_RESTARTABLE_SYSCALLS])
+AU_ALIAS([AC_RETSIGTYPE], [AC_TYPE_SIGNAL])
+AU_ALIAS([AC_SET_MAKE], [AC_PROG_MAKE_SET])
+AU_ALIAS([AC_SIZE_T], [AC_TYPE_SIZE_T])
+AU_ALIAS([AC_STAT_MACROS_BROKEN], [AC_HEADER_STAT])
+AU_ALIAS([AC_STDC_HEADERS], [AC_HEADER_STDC])
+AU_ALIAS([AC_ST_BLKSIZE], [AC_STRUCT_ST_BLKSIZE])
+AU_ALIAS([AC_ST_BLOCKS], [AC_STRUCT_ST_BLOCKS])
+AU_ALIAS([AC_ST_RDEV], [AC_STRUCT_ST_RDEV])
+AU_ALIAS([AC_SYS_SIGLIST_DECLARED], [AC_DECL_SYS_SIGLIST])
+AU_ALIAS([AC_TIMEZONE], [AC_STRUCT_TIMEZONE])
+AU_ALIAS([AC_TIME_WITH_SYS_TIME], [AC_HEADER_TIME])
+AU_ALIAS([AC_UID_T], [AC_TYPE_UID_T])
+AU_ALIAS([AC_WORDS_BIGENDIAN], [AC_C_BIGENDIAN])
+AU_ALIAS([AC_YYTEXT_POINTER], [AC_DECL_YYTEXT])
+AU_ALIAS([AM_CYGWIN32], [AC_CYGWIN32])
+AU_ALIAS([AC_CYGWIN32], [AC_CYGWIN])
+AU_ALIAS([AM_EXEEXT], [AC_EXEEXT])
+# We cannot do this, because in libtool.m4 yet they provide
+# this update. Some solution is needed.
+# AU_ALIAS([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AU_ALIAS([AM_MINGW32], [AC_MINGW32])
+AU_ALIAS([AM_PROG_INSTALL], [AC_PROG_INSTALL])
diff --git a/lib/autoconf/programs.m4 b/lib/autoconf/programs.m4
new file mode 100644
index 0000000..2013a7a
--- /dev/null
+++ b/lib/autoconf/programs.m4
@@ -0,0 +1,902 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Checking for programs.
+
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+## ----------------------------- ##
+## Generic checks for programs. ##
+## ----------------------------- ##
+
+
+# _AC_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
+# [VALUE-IF-FOUND], [VALUE-IF-NOT-FOUND],
+# [PATH], [REJECT])
+# -----------------------------------------------------
+AC_DEFUN([_AC_CHECK_PROG],
+[# 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_prog_$1,
+[if test -n "$$1"; then
+ ac_cv_prog_$1="$$1" # Let the user override the test.
+else
+m4_ifvaln([$6],
+[ ac_prog_rejected=no])dnl
+_AS_PATH_WALK([$5],
+[for ac_exec_ext in '' $ac_executable_extensions; do
+ if AS_EXECUTABLE_P(["$as_dir/$ac_word$ac_exec_ext"]); then
+m4_ifvaln([$6],
+[ if test "$as_dir/$ac_word$ac_exec_ext" = "$6"; then
+ ac_prog_rejected=yes
+ continue
+ fi])dnl
+ ac_cv_prog_$1="$3"
+ _AS_ECHO_LOG([found $as_dir/$ac_word$ac_exec_ext])
+ break 2
+ fi
+done])
+m4_ifvaln([$6],
+[if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_$1
+ shift
+ if test $[@%:@] != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set $1 to just the basename; use the full file name.
+ shift
+ ac_cv_prog_$1="$as_dir/$ac_word${1+' '}$[@]"
+m4_if([$2], [$4],
+[ else
+ # Default is a loser.
+ AC_MSG_ERROR([$1=$6 unacceptable, but no other $4 found in dnl
+m4_default([$5], [\$PATH])])
+])dnl
+ fi
+fi])dnl
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_CHECK_PROGS will keep looking.
+m4_ifvaln([$4],
+[ test -z "$ac_cv_prog_$1" && ac_cv_prog_$1="$4"])dnl
+fi])dnl
+$1=$ac_cv_prog_$1
+if test -n "$$1"; then
+ AC_MSG_RESULT([$$1])
+else
+ AC_MSG_RESULT([no])
+fi
+])# _AC_CHECK_PROG
+
+
+# AC_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR,
+# [VALUE-IF-FOUND], [VALUE-IF-NOT-FOUND],
+# [PATH], [REJECT])
+# -----------------------------------------------------
+AC_DEFUN([AC_CHECK_PROG],
+[_AC_CHECK_PROG($@)
+AC_SUBST([$1])dnl
+])
+
+
+# AC_CHECK_PROGS(VARIABLE, PROGS-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND],
+# [PATH])
+# ------------------------------------------------------------------
+AC_DEFUN([AC_CHECK_PROGS],
+[for ac_prog in $2
+do
+ AC_CHECK_PROG([$1], [$ac_prog], [$ac_prog], , [$4])
+ test -n "$$1" && break
+done
+m4_ifvaln([$3], [test -n "$$1" || $1="$3"])])
+
+
+# _AC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# ------------------------------------------------------------------------
+AC_DEFUN([_AC_PATH_PROG],
+[# 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.
+ ;;
+ *)
+ _AS_PATH_WALK([$4],
+[for ac_exec_ext in '' $ac_executable_extensions; do
+ if AS_EXECUTABLE_P(["$as_dir/$ac_word$ac_exec_ext"]); then
+ ac_cv_path_$1="$as_dir/$ac_word$ac_exec_ext"
+ _AS_ECHO_LOG([found $as_dir/$ac_word$ac_exec_ext])
+ break 2
+ fi
+done])
+dnl If no 3rd arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+m4_ifvaln([$3],
+[ test -z "$ac_cv_path_$1" && ac_cv_path_$1="$3"])dnl
+ ;;
+esac])dnl
+$1=$ac_cv_path_$1
+if test -n "$$1"; then
+ AC_MSG_RESULT([$$1])
+else
+ AC_MSG_RESULT([no])
+fi
+])# _AC_PATH_PROG
+
+
+# AC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# -----------------------------------------------------------------------
+AC_DEFUN([AC_PATH_PROG],
+[_AC_PATH_PROG($@)
+AC_SUBST([$1])dnl
+])
+
+
+# AC_PATH_PROGS(VARIABLE, PROGS-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND],
+# [PATH])
+# -----------------------------------------------------------------
+AC_DEFUN([AC_PATH_PROGS],
+[for ac_prog in $2
+do
+ AC_PATH_PROG([$1], [$ac_prog], , [$4])
+ test -n "$$1" && break
+done
+m4_ifvaln([$3], [test -n "$$1" || $1="$3"])dnl
+])
+
+
+
+
+## -------------------------- ##
+## Generic checks for tools. ##
+## -------------------------- ##
+
+
+# AC_CHECK_TOOL_PREFIX
+# --------------------
+AU_DEFUN([AC_CHECK_TOOL_PREFIX])
+
+
+# _AC_TOOL_WARN
+# -------------
+AC_DEFUN([_AC_TOOL_WARN],
+[case $cross_compiling:$ac_tool_warned in
+yes:)
+AC_MSG_WARN([using cross tools not prefixed with host triplet])
+ac_tool_warned=yes ;;
+esac])
+
+# AC_PATH_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# -----------------------------------------------------------------------
+# (Use different variables $1 and ac_pt_$1 so that cache vars don't conflict.)
+AC_DEFUN([AC_PATH_TOOL],
+[if test -n "$ac_tool_prefix"; then
+ AC_PATH_PROG([$1], [${ac_tool_prefix}$2], , [$4])
+fi
+if test -z "$ac_cv_path_$1"; then
+ ac_pt_$1=$$1
+ _AC_PATH_PROG([ac_pt_$1], [$2], [], [$4])
+ if test "x$ac_pt_$1" = x; then
+ $1="$3"
+ else
+ _AC_TOOL_WARN
+ $1=$ac_pt_$1
+ fi
+else
+ $1="$ac_cv_path_$1"
+fi
+])# AC_PATH_TOOL
+
+
+# AC_CHECK_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# ------------------------------------------------------------------------
+# (Use different variables $1 and ac_ct_$1 so that cache vars don't conflict.)
+AC_DEFUN([AC_CHECK_TOOL],
+[if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG([$1], [${ac_tool_prefix}$2], [${ac_tool_prefix}$2], , [$4])
+fi
+if test -z "$ac_cv_prog_$1"; then
+ ac_ct_$1=$$1
+ _AC_CHECK_PROG([ac_ct_$1], [$2], [$2], [], [$4])
+ if test "x$ac_ct_$1" = x; then
+ $1="$3"
+ else
+ _AC_TOOL_WARN
+ $1=$ac_ct_$1
+ fi
+else
+ $1="$ac_cv_prog_$1"
+fi
+])# AC_CHECK_TOOL
+
+
+# AC_CHECK_TOOLS(VARIABLE, PROGS-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND],
+# [PATH])
+# ------------------------------------------------------------------
+# Check for each tool in PROGS-TO-CHECK-FOR with the cross prefix. If
+# none can be found with a cross prefix, then use the first one that
+# was found without the cross prefix.
+AC_DEFUN([AC_CHECK_TOOLS],
+[if test -n "$ac_tool_prefix"; then
+ for ac_prog in $2
+ do
+ AC_CHECK_PROG([$1],
+ [$ac_tool_prefix$ac_prog], [$ac_tool_prefix$ac_prog],,
+ [$4])
+ test -n "$$1" && break
+ done
+fi
+if test -z "$$1"; then
+ ac_ct_$1=$$1
+ AC_CHECK_PROGS([ac_ct_$1], [$2], [], [$4])
+ if test "x$ac_ct_$1" = x; then
+ $1="$3"
+ else
+ _AC_TOOL_WARN
+ $1=$ac_ct_$1
+ fi
+fi
+])# AC_CHECK_TOOLS
+
+
+# AC_PATH_TARGET_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# ------------------------------------------------------------------------------
+# (Use different variables $1 and ac_pt_$1 so that cache vars don't conflict.)
+AC_DEFUN([AC_PATH_TARGET_TOOL],
+[AC_REQUIRE([AC_CANONICAL_TARGET])dnl
+AC_PATH_PROG([$1], [$target_alias-$2], , [$4])
+if test -z "$ac_cv_path_$1"; then
+ if test "$build" = "$target"; then
+ ac_pt_$1=$$1
+ _AC_PATH_PROG([ac_pt_$1], [$2], [$3], [$4])
+ $1=$ac_pt_$1
+ else
+ $1="$3"
+ fi
+else
+ $1="$ac_cv_path_$1"
+fi
+])# AC_PATH_TARGET_TOOL
+
+
+# AC_CHECK_TARGET_TOOL(VARIABLE, PROG-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND], [PATH])
+# -------------------------------------------------------------------------------
+# (Use different variables $1 and ac_ct_$1 so that cache vars don't conflict.)
+AC_DEFUN([AC_CHECK_TARGET_TOOL],
+[AC_REQUIRE([AC_CANONICAL_TARGET])dnl
+AC_CHECK_PROG([$1], [$target_alias-$2], [$target_alias-$2], , [$4])
+if test -z "$ac_cv_prog_$1"; then
+ if test "$build" = "$target"; then
+ ac_ct_$1=$$1
+ _AC_CHECK_PROG([ac_ct_$1], [$2], [$2], [$3], [$4])
+ $1=$ac_ct_$1
+ else
+ $1="$3"
+ fi
+else
+ $1="$ac_cv_prog_$1"
+fi
+])# AC_CHECK_TARGET_TOOL
+
+
+# AC_CHECK_TARGET_TOOLS(VARIABLE, PROGS-TO-CHECK-FOR, [VALUE-IF-NOT-FOUND],
+# [PATH])
+# -------------------------------------------------------------------------
+# Check for each tool in PROGS-TO-CHECK-FOR with the cross prefix. If
+# none can be found with a cross prefix, then use the first one that
+# was found without the cross prefix.
+AC_DEFUN([AC_CHECK_TARGET_TOOLS],
+[AC_REQUIRE([AC_CANONICAL_TARGET])dnl
+for ac_prog in $2
+do
+ AC_CHECK_PROG([$1],
+ [$target_alias-$ac_prog], [$target_alias-$ac_prog],,
+ [$4])
+ test -n "$$1" && break
+done
+if test -z "$$1"; then
+ if test "$build" = "$target"; then
+ ac_ct_$1=$$1
+ AC_CHECK_PROGS([ac_ct_$1], [$2], [$3], [$4])
+ $1=$ac_ct_$1
+ else
+ $1="$3"
+ fi
+fi
+])# AC_CHECK_TARGET_TOOLS
+
+
+
+## ---------------- ##
+## Specific tests. ##
+## ---------------- ##
+
+# Please, keep this section sorted.
+# (But of course when keeping related things together).
+
+# Check for gawk first since it's generally better.
+AN_MAKEVAR([AWK], [AC_PROG_AWK])
+AN_PROGRAM([awk], [AC_PROG_AWK])
+AN_PROGRAM([gawk], [AC_PROG_AWK])
+AN_PROGRAM([mawk], [AC_PROG_AWK])
+AN_PROGRAM([nawk], [AC_PROG_AWK])
+AC_DEFUN([AC_PROG_AWK],
+[AC_CHECK_PROGS(AWK, gawk mawk nawk awk, )])
+
+
+# AC_PROG_EGREP
+# -------------
+AC_DEFUN([AC_PROG_EGREP],
+[AC_REQUIRE([AC_PROG_GREP])dnl
+AC_CACHE_CHECK([for egrep], ac_cv_path_EGREP,
+ [if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ _AC_PROG_GREP(EGREP, egrep, ['EGREP$'])
+ fi])
+ EGREP="$ac_cv_path_EGREP"
+ AC_SUBST([EGREP])
+])# AC_PROG_EGREP
+
+
+# AC_PROG_FGREP
+# -------------
+AC_DEFUN([AC_PROG_FGREP],
+[AC_REQUIRE([AC_PROG_GREP])dnl
+AC_CACHE_CHECK([for fgrep], ac_cv_path_FGREP,
+ [if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ _AC_PROG_GREP(FGREP, fgrep, [FGREP])
+ fi])
+ FGREP="$ac_cv_path_FGREP"
+ AC_SUBST([FGREP])
+])# AC_PROG_FGREP
+
+
+# AC_PROG_GREP
+# ------------
+# Check for a fully functional grep program that handles
+# the longest lines possible and which respects multiple -e options.
+# Prefer GNU grep if found.
+AC_DEFUN([AC_PROG_GREP],
+[AC_CACHE_CHECK([for grep that handles long lines and -e], ac_cv_path_GREP,
+ [_$0(GREP, [grep ggrep], [-e 'GREP$' -e '-(cannot match)-'])])
+ GREP="$ac_cv_path_GREP"
+ AC_SUBST([GREP])
+])
+
+
+# _AC_PROG_GREP(VARIABLE, PROGNAME-LIST, PROG-ARGUMENTS)
+# ------------------------------------------------------
+# Solaris 9 /usr/xpg4/bin/*grep is suitable, but /usr/bin/*grep lacks -e.
+# AIX silently truncates long lines before matching.
+# NeXT understands only one -e and truncates long lines.
+m4_define([_AC_PROG_GREP],
+[_AC_PATH_PROGS_FEATURE_CHECK([$1], [$2],
+ [_AC_FEATURE_CHECK_LENGTH([ac_path_$1], [ac_cv_path_$1],
+ ["$ac_path_$1" $3], [$1])], [],
+ [$PATH$PATH_SEPARATOR/usr/xpg4/bin])dnl
+])
+
+
+# _AC_PATH_PROGS_FEATURE_CHECK(VARIABLE, PROGNAME-LIST, FEATURE-TEST,
+# [ACTION-IF-NOT-FOUND], [PATH=$PATH])
+# -------------------------------------------------------------------
+# FEATURE-TEST is called repeatedly with $ac_path_VARIABLE set to the
+# name of a program in PROGNAME-LIST found in PATH. FEATURE-TEST must set
+# $ac_cv_path_VARIABLE to the path of an acceptable program, or else
+# ACTION-IF-NOT-FOUND is executed; the default action (for internal use
+# only) issues a fatal error message. If a suitable $ac_path_VARIABLE is
+# found in the FEATURE-TEST macro, it can set $ac_path_VARIABLE_found=':'
+# to accept that value without any further checks.
+m4_define([_AC_PATH_PROGS_FEATURE_CHECK],
+[if test -z "$$1"; then
+ ac_path_$1_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ _AS_PATH_WALK([$5],
+ [for ac_prog in $2; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_$1="$as_dir/$ac_prog$ac_exec_ext"
+ AS_EXECUTABLE_P(["$ac_path_$1"]) || continue
+$3
+ $ac_path_$1_found && break 3
+ done
+ done])dnl
+ if test -z "$ac_cv_path_$1"; then
+ m4_default([$4],
+ [AC_MSG_ERROR([no acceptable m4_bpatsubst([$2], [ .*]) could be dnl
+found in m4_default([$5], [\$PATH])])])
+ fi
+else
+ ac_cv_path_$1=$$1
+fi
+])
+
+
+# AC_PATH_PROGS_FEATURE_CHECK(VARIABLE, PROGNAME-LIST,
+# FEATURE-TEST, [ACTION-IF-NOT-FOUND=:],
+# [PATH=$PATH])
+# ------------------------------------------------------------------
+# Designed to be used inside AC_CACHE_VAL. It is recommended,
+# but not required, that the user also use AC_ARG_VAR([VARIABLE]).
+# If VARIABLE is not empty, set the cache variable
+# $ac_cv_path_VARIABLE to VARIABLE without any further tests.
+# Otherwise, call FEATURE_TEST repeatedly with $ac_path_VARIABLE
+# set to the name of a program in PROGNAME-LIST found in PATH. If
+# no invocation of FEATURE-TEST sets $ac_cv_path_VARIABLE to the
+# path of an acceptable program, ACTION-IF-NOT-FOUND is executed.
+# FEATURE-TEST is invoked even when $ac_cv_path_VARIABLE is set,
+# in case a better candidate occurs later in PATH; to accept the
+# current setting and bypass further checks, FEATURE-TEST can set
+# $ac_path_VARIABLE_found=':'. Note that, unlike AC_CHECK_PROGS,
+# this macro does not have any side effect on the current value
+# of VARIABLE.
+m4_define([AC_PATH_PROGS_FEATURE_CHECK],
+[_$0([$1], [$2], [$3], m4_default([$4], [:]), [$5])dnl
+])
+
+
+# _AC_FEATURE_CHECK_LENGTH(PROGPATH, CACHE-VAR, CHECK-CMD, [MATCH-STRING])
+# ------------------------------------------------------------------------
+# For use as the FEATURE-TEST argument to _AC_PATH_PROGS_FEATURE_TEST.
+# On each iteration run CHECK-CMD on an input file, storing the value
+# of PROGPATH in CACHE-VAR if the CHECK-CMD succeeds. The input file
+# is always one line, starting with only 10 characters, and doubling
+# in length at each iteration until approx 10000 characters or the
+# feature check succeeds. The feature check is called at each
+# iteration by appending (optionally, MATCH-STRING and) a newline
+# to the file, and using the result as input to CHECK-CMD.
+m4_define([_AC_FEATURE_CHECK_LENGTH],
+[# Check for GNU $1 and select it if it is found.
+ _AC_PATH_PROG_FLAVOR_GNU([$$1],
+ [$2="$$1" $1_found=:],
+ [ac_count=0
+ AS_ECHO_N([0123456789]) >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ AS_ECHO(['$4']) >> "conftest.nl"
+ $3 < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ AS_VAR_ARITH([ac_count], [$ac_count + 1])
+ if test $ac_count -gt ${$1_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ $2="$$1"
+dnl # Using $1_max so that each tool feature checked gets its
+dnl # own variable. Don't reset it otherwise the implied search
+dnl # for best performing tool in a list breaks down.
+ $1_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out])dnl
+])
+
+
+# _AC_PATH_PROG_FLAVOR_GNU(PROGRAM-PATH, IF-SUCCESS, [IF-FAILURE])
+# ----------------------------------------------------------------
+m4_define([_AC_PATH_PROG_FLAVOR_GNU],
+[# Check for GNU $1
+case `"$1" --version 2>&1` in
+*GNU*)
+ $2;;
+m4_ifval([$3],
+[*)
+ $3;;
+])esac
+])# _AC_PATH_PROG_FLAVOR_GNU
+
+
+# AC_PROG_INSTALL
+# ---------------
+AN_MAKEVAR([INSTALL], [AC_PROG_INSTALL])
+AN_PROGRAM([install], [AC_PROG_INSTALL])
+AC_DEFUN_ONCE([AC_PROG_INSTALL],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_REQUIRE_AUX_FILE([install-sh])dnl
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+AC_MSG_CHECKING([for a BSD-compatible install])
+if test -z "$INSTALL"; then
+AC_CACHE_VAL(ac_cv_path_install,
+[_AS_PATH_WALK([$PATH],
+[[# Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in @%:@((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)]
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if AS_EXECUTABLE_P(["$as_dir/$ac_prog$ac_exec_ext"]); then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+])
+rm -rf conftest.one conftest.two conftest.dir
+])dnl
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+dnl Do special magic for INSTALL instead of AC_SUBST, to get
+dnl relative names right.
+AC_MSG_RESULT([$INSTALL])
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+AC_SUBST(INSTALL_PROGRAM)dnl
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+AC_SUBST(INSTALL_SCRIPT)dnl
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+AC_SUBST(INSTALL_DATA)dnl
+])# AC_PROG_INSTALL
+
+
+# AC_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is known to be thread-safe, and fall back to
+# install-sh -d otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are vulnerable to race conditions:
+# if a parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out. Consequently we
+# restrict ourselves to known race-free implementations.
+#
+# Automake used to define mkdir_p as `mkdir -p .', in order to
+# allow $(mkdir_p) to be used without argument. As in
+# $(mkdir_p) $(somedir)
+# where $(somedir) is conditionally defined. However we don't do
+# that for MKDIR_P.
+# 1. before we restricted the check to GNU mkdir, `mkdir -p .' was
+# reported to fail in read-only directories. The system where this
+# happened has been forgotten.
+# 2. in practice we call $(MKDIR_P) on directories such as
+# $(MKDIR_P) "$(DESTDIR)$(somedir)"
+# and we don't want to create $(DESTDIR) if $(somedir) is empty.
+# To support the latter case, we have to write
+# test -z "$(somedir)" || $(MKDIR_P) "$(DESTDIR)$(somedir)"
+# so $(MKDIR_P) always has an argument.
+# We will have better chances of detecting a missing test if
+# $(MKDIR_P) complains about missing arguments.
+# 3. $(MKDIR_P) is named after `mkdir -p' and we don't expect this
+# to accept no argument.
+# 4. having something like `mkdir .' in the output is unsightly.
+#
+# On NextStep and OpenStep, the `mkdir' command does not
+# recognize any option. It will interpret all options as
+# directories to create.
+AN_MAKEVAR([MKDIR_P], [AC_PROG_MKDIR_P])
+AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_REQUIRE_AUX_FILE([install-sh])dnl
+AC_MSG_CHECKING([for a thread-safe mkdir -p])
+if test -z "$MKDIR_P"; then
+ AC_CACHE_VAL([ac_cv_path_mkdir],
+ [_AS_PATH_WALK([$PATH$PATH_SEPARATOR/opt/sfw/bin],
+ [for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ AS_EXECUTABLE_P(["$as_dir/$ac_prog$ac_exec_ext"]) || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done])])
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+dnl status.m4 does special magic for MKDIR_P instead of AC_SUBST,
+dnl to get relative names right. However, also AC_SUBST here so
+dnl that Automake versions before 1.10 will pick it up (they do not
+dnl trace AC_SUBST_TRACE).
+dnl FIXME: Remove this once we drop support for Automake < 1.10.
+AC_SUBST([MKDIR_P])dnl
+AC_MSG_RESULT([$MKDIR_P])
+])# AC_PROG_MKDIR_P
+
+
+# AC_PROG_LEX
+# -----------
+# Look for flex or lex. Set its associated library to LEXLIB.
+# Check if lex declares yytext as a char * by default, not a char[].
+AN_MAKEVAR([LEX], [AC_PROG_LEX])
+AN_PROGRAM([lex], [AC_PROG_LEX])
+AN_PROGRAM([flex], [AC_PROG_LEX])
+AC_DEFUN_ONCE([AC_PROG_LEX],
+[AC_CHECK_PROGS(LEX, flex lex, :)
+if test "x$LEX" != "x:"; then
+ _AC_PROG_LEX_YYTEXT_DECL
+fi])
+
+
+# _AC_PROG_LEX_YYTEXT_DECL
+# ------------------------
+# Check for the Lex output root, the Lex library, and whether Lex
+# declares yytext as a char * by default.
+m4_define([_AC_PROG_LEX_YYTEXT_DECL],
+[cat >conftest.l <<_ACEOF[
+%%
+a { ECHO; }
+b { REJECT; }
+c { yymore (); }
+d { yyless (1); }
+e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */
+ yyless ((input () != 0)); }
+f { unput (yytext[0]); }
+. { BEGIN INITIAL; }
+%%
+#ifdef YYTEXT_POINTER
+extern char *yytext;
+#endif
+int
+main (void)
+{
+ return ! yylex () + ! yywrap ();
+}
+]_ACEOF
+_AC_DO_VAR(LEX conftest.l)
+AC_CACHE_CHECK([lex output file root], [ac_cv_prog_lex_root], [
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ AC_MSG_ERROR([cannot find output from $LEX; giving up])
+fi])
+AC_SUBST([LEX_OUTPUT_ROOT], [$ac_cv_prog_lex_root])dnl
+
+if test -z "${LEXLIB+set}"; then
+ AC_CACHE_CHECK([lex library], [ac_cv_lib_lex], [
+ ac_save_LIBS=$LIBS
+ ac_cv_lib_lex='none needed'
+ for ac_lib in '' -lfl -ll; do
+ LIBS="$ac_lib $ac_save_LIBS"
+ AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED[`cat $LEX_OUTPUT_ROOT.c`]],
+ [ac_cv_lib_lex=$ac_lib])
+ test "$ac_cv_lib_lex" != 'none needed' && break
+ done
+ LIBS=$ac_save_LIBS
+ ])
+ test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex
+fi
+AC_SUBST(LEXLIB)
+
+AC_CACHE_CHECK(whether yytext is a pointer, ac_cv_prog_lex_yytext_pointer,
+[# POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+ac_save_LIBS=$LIBS
+LIBS="$LEXLIB $ac_save_LIBS"
+AC_LINK_IFELSE([AC_LANG_DEFINES_PROVIDED
+ [#define YYTEXT_POINTER 1
+`cat $LEX_OUTPUT_ROOT.c`]],
+ [ac_cv_prog_lex_yytext_pointer=yes])
+LIBS=$ac_save_LIBS
+])
+dnl
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+ AC_DEFINE(YYTEXT_POINTER, 1,
+ [Define to 1 if `lex' declares `yytext' as a `char *' by default,
+ not a `char[]'.])
+fi
+rm -f conftest.l $LEX_OUTPUT_ROOT.c
+])# _AC_PROG_LEX_YYTEXT_DECL
+
+
+# Require AC_PROG_LEX in case some people were just calling this macro.
+AU_DEFUN([AC_DECL_YYTEXT], [AC_PROG_LEX])
+
+
+# AC_PROG_LN_S
+# ------------
+AN_MAKEVAR([LN], [AC_PROG_LN_S])
+AN_PROGRAM([ln], [AC_PROG_LN_S])
+AC_DEFUN([AC_PROG_LN_S],
+[AC_MSG_CHECKING([whether ln -s works])
+AC_SUBST([LN_S], [$as_ln_s])dnl
+if test "$LN_S" = "ln -s"; then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no, using $LN_S])
+fi
+])# AC_PROG_LN_S
+
+
+# AC_PROG_MAKE_SET
+# ----------------
+# Define SET_MAKE to set ${MAKE} if Make does not do so automatically. If Make
+# does not run the test Makefile, we assume that the Make program the user will
+# invoke does set $(MAKE). This is typical, and emitting `MAKE=foomake' is
+# always wrong if `foomake' is not available or does not work.
+AN_MAKEVAR([MAKE], [AC_PROG_MAKE_SET])
+AN_PROGRAM([make], [AC_PROG_MAKE_SET])
+AC_DEFUN([AC_PROG_MAKE_SET],
+[AC_MSG_CHECKING([whether ${MAKE-make} sets \$(MAKE)])
+set x ${MAKE-make}
+ac_make=`AS_ECHO(["$[2]"]) | sed 's/+/p/g; s/[[^a-zA-Z0-9_]]/_/g'`
+AC_CACHE_VAL(ac_cv_prog_make_${ac_make}_set,
+[cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make])dnl
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ AC_MSG_RESULT([yes])
+ SET_MAKE=
+else
+ AC_MSG_RESULT([no])
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+AC_SUBST([SET_MAKE])dnl
+])# AC_PROG_MAKE_SET
+
+
+# AC_PROG_RANLIB
+# --------------
+AN_MAKEVAR([RANLIB], [AC_PROG_RANLIB])
+AN_PROGRAM([ranlib], [AC_PROG_RANLIB])
+AC_DEFUN([AC_PROG_RANLIB],
+[AC_CHECK_TOOL(RANLIB, ranlib, :)])
+
+
+# AC_RSH
+# ------
+# I don't know what it used to do, but it no longer does.
+AU_DEFUN([AC_RSH], [],
+[$0 is no longer supported. Remove this warning when you
+adjust the code.])
+
+
+# AC_PROG_SED
+# -----------
+# Check for a fully functional sed program that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([AC_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+ [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+ dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ AS_UNSET([ac_script])
+ _AC_PATH_PROGS_FEATURE_CHECK(SED, [sed gsed],
+ [_AC_FEATURE_CHECK_LENGTH([ac_path_SED], [ac_cv_path_SED],
+ ["$ac_path_SED" -f conftest.sed])])])
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])# AC_PROG_SED
+
+
+# AC_PROG_YACC
+# ------------
+AN_MAKEVAR([BISON], [AC_PROG_YACC])
+AN_MAKEVAR([YACC], [AC_PROG_YACC])
+AN_MAKEVAR([YFLAGS], [AC_PROG_YACC])
+AN_PROGRAM([yacc], [AC_PROG_YACC])
+AN_PROGRAM([byacc], [AC_PROG_YACC])
+AN_PROGRAM([bison], [AC_PROG_YACC])
+AC_DEFUN([AC_PROG_YACC],
+[AC_CHECK_PROGS(YACC, 'bison -y' byacc, yacc)dnl
+AC_ARG_VAR(YACC,
+[The `Yet Another Compiler Compiler' implementation to use. Defaults to
+the first program found out of: `bison -y', `byacc', `yacc'.])dnl
+AC_ARG_VAR(YFLAGS,
+[The list of arguments that will be passed by default to $YACC. This script
+will default YFLAGS to the empty string to avoid a default value of `-d' given
+by some make applications.])])
diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4
new file mode 100644
index 0000000..7d6be57
--- /dev/null
+++ b/lib/autoconf/specific.m4
@@ -0,0 +1,481 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Macros that test for specific, unclassified, features.
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+## ------------------------- ##
+## Checks for declarations. ##
+## ------------------------- ##
+
+
+# AC_DECL_SYS_SIGLIST
+# -------------------
+AN_IDENTIFIER([sys_siglist], [AC_CHECK_DECLS([sys_siglist])])
+AU_DEFUN([AC_DECL_SYS_SIGLIST],
+[AC_CHECK_DECLS([sys_siglist],,,
+[#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h. */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+])
+])# AC_DECL_SYS_SIGLIST
+
+
+
+
+## -------------------------------------- ##
+## Checks for operating system services. ##
+## -------------------------------------- ##
+
+
+# AC_SYS_INTERPRETER
+# ------------------
+AC_DEFUN([AC_SYS_INTERPRETER],
+[AC_CACHE_CHECK(whether @%:@! works in shell scripts, ac_cv_sys_interpreter,
+[echo '#! /bin/cat
+exit 69
+' >conftest
+chmod u+x conftest
+(SHELL=/bin/sh; export SHELL; ./conftest >/dev/null 2>&1)
+if test $? -ne 69; then
+ ac_cv_sys_interpreter=yes
+else
+ ac_cv_sys_interpreter=no
+fi
+rm -f conftest])
+interpval=$ac_cv_sys_interpreter
+])
+
+
+AU_DEFUN([AC_HAVE_POUNDBANG],
+[AC_SYS_INTERPRETER],
+[Remove this warning when you adjust your code to use
+`AC_SYS_INTERPRETER'.])
+
+
+AU_DEFUN([AC_ARG_ARRAY], [],
+[$0 is no longer implemented: don't do unportable things
+with arguments. Remove this warning when you adjust your code.])
+
+
+# _AC_SYS_LARGEFILE_TEST_INCLUDES
+# -------------------------------
+m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
+[@%:@include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+ int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1]];[]dnl
+])
+
+
+# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE,
+# CACHE-VAR,
+# DESCRIPTION,
+# PROLOGUE, [FUNCTION-BODY])
+# --------------------------------------------------------
+m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE],
+[AC_CACHE_CHECK([for $1 value needed for large files], [$3],
+[while :; do
+ m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+ [AC_LANG_PROGRAM([$5], [$6])],
+ [$3=no; break])
+ m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])(
+ [AC_LANG_PROGRAM([@%:@define $1 $2
+$5], [$6])],
+ [$3=$2; break])
+ $3=unknown
+ break
+done])
+case $$3 in #(
+ no | unknown) ;;
+ *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);;
+esac
+rm -rf conftest*[]dnl
+])# _AC_SYS_LARGEFILE_MACRO_VALUE
+
+
+# AC_SYS_LARGEFILE
+# ----------------
+# By default, many hosts won't let programs access large files;
+# one must use special compiler options to get large-file access to work.
+# For more details about this brain damage please see:
+# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html
+AC_DEFUN([AC_SYS_LARGEFILE],
+[AC_ARG_ENABLE(largefile,
+ [ --disable-largefile omit support for large files])
+if test "$enable_largefile" != no; then
+
+ AC_CACHE_CHECK([for special C compiler options needed for large files],
+ ac_cv_sys_largefile_CC,
+ [ac_cv_sys_largefile_CC=no
+ if test "$GCC" != yes; then
+ ac_save_CC=$CC
+ while :; do
+ # IRIX 6.2 and later do not support large files by default,
+ # so use the C compiler's -n32 option if that helps.
+ AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])])
+ AC_COMPILE_IFELSE([], [break])
+ CC="$CC -n32"
+ AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break])
+ break
+ done
+ CC=$ac_save_CC
+ rm -f conftest.$ac_ext
+ fi])
+ if test "$ac_cv_sys_largefile_CC" != no; then
+ CC=$CC$ac_cv_sys_largefile_CC
+ fi
+
+ _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64,
+ ac_cv_sys_file_offset_bits,
+ [Number of bits in a file offset, on hosts where this is settable.],
+ [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+ if test $ac_cv_sys_file_offset_bits = unknown; then
+ _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1,
+ ac_cv_sys_large_files,
+ [Define for large files, on AIX-style hosts.],
+ [_AC_SYS_LARGEFILE_TEST_INCLUDES])
+ fi
+
+ AH_VERBATIM([_DARWIN_USE_64_BIT_INODE],
+[/* Enable large inode numbers on Mac OS X 10.5. */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif])
+fi
+])# AC_SYS_LARGEFILE
+
+
+# AC_SYS_LONG_FILE_NAMES
+# ----------------------
+# Security: use a temporary directory as the most portable way of
+# creating files in /tmp securely. Removing them leaves a race
+# condition, set -C is not portably guaranteed to use O_EXCL, so still
+# leaves a race, and not all systems have the `mktemp' utility. We
+# still test for existence first in case of broken systems where the
+# mkdir succeeds even when the directory exists. Broken systems may
+# retain a race, but they probably have other security problems
+# anyway; this should be secure on well-behaved systems. In any case,
+# use of `mktemp' is probably inappropriate here since it would fail in
+# attempting to create different file names differing after the 14th
+# character on file systems without long file names.
+AC_DEFUN([AC_SYS_LONG_FILE_NAMES],
+[AC_CACHE_CHECK(for long file names, ac_cv_sys_long_file_names,
+[ac_cv_sys_long_file_names=yes
+# Test for long file names in all the places we know might matter:
+# . the current directory, where building will happen
+# $prefix/lib where we will be installing things
+# $exec_prefix/lib likewise
+# $TMPDIR if set, where it might want to write temporary files
+# /tmp where it might want to write temporary files
+# /var/tmp likewise
+# /usr/tmp likewise
+for ac_dir in . "$TMPDIR" /tmp /var/tmp /usr/tmp "$prefix/lib" "$exec_prefix/lib"; do
+ # Skip $TMPDIR if it is empty or bogus, and skip $exec_prefix/lib
+ # in the usual case where exec_prefix is '${prefix}'.
+ case $ac_dir in #(
+ . | /* | ?:[[\\/]]*) ;; #(
+ *) continue;;
+ esac
+ test -w "$ac_dir/." || continue # It is less confusing to not echo anything here.
+ ac_xdir=$ac_dir/cf$$
+ (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue
+ ac_tf1=$ac_xdir/conftest9012345
+ ac_tf2=$ac_xdir/conftest9012346
+ touch "$ac_tf1" 2>/dev/null && test -f "$ac_tf1" && test ! -f "$ac_tf2" ||
+ ac_cv_sys_long_file_names=no
+ rm -f -r "$ac_xdir" 2>/dev/null
+ test $ac_cv_sys_long_file_names = no && break
+done])
+if test $ac_cv_sys_long_file_names = yes; then
+ AC_DEFINE(HAVE_LONG_FILE_NAMES, 1,
+ [Define to 1 if you support file names longer than 14 characters.])
+fi
+])
+
+
+# AC_SYS_RESTARTABLE_SYSCALLS
+# ---------------------------
+# If the system automatically restarts a system call that is
+# interrupted by a signal, define `HAVE_RESTARTABLE_SYSCALLS'.
+AC_DEFUN([AC_SYS_RESTARTABLE_SYSCALLS],
+[AC_DIAGNOSE([obsolete],
+[$0: AC_SYS_RESTARTABLE_SYSCALLS is useful only when supporting very
+old systems that lack `sigaction' and `SA_RESTART'. Don't bother with
+this macro unless you need to support very old systems like 4.2BSD and
+SVR3.])dnl
+AC_REQUIRE([AC_HEADER_SYS_WAIT])dnl
+AC_CACHE_CHECK(for restartable system calls, ac_cv_sys_restartable_syscalls,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[/* Exit 0 (true) if wait returns something other than -1,
+ i.e. the pid of the child, which means that wait was restarted
+ after getting the signal. */
+
+AC_INCLUDES_DEFAULT
+#include <signal.h>
+#ifdef HAVE_SYS_WAIT_H
+# include <sys/wait.h>
+#endif
+
+/* Some platforms explicitly require an extern "C" signal handler
+ when using C++. */
+#ifdef __cplusplus
+extern "C" void ucatch (int dummy) { }
+#else
+void ucatch (dummy) int dummy; { }
+#endif
+
+int
+main ()
+{
+ int i = fork (), status;
+
+ if (i == 0)
+ {
+ sleep (3);
+ kill (getppid (), SIGINT);
+ sleep (3);
+ return 0;
+ }
+
+ signal (SIGINT, ucatch);
+
+ status = wait (&i);
+ if (status == -1)
+ wait (&i);
+
+ return status == -1;
+}])],
+ [ac_cv_sys_restartable_syscalls=yes],
+ [ac_cv_sys_restartable_syscalls=no])])
+if test $ac_cv_sys_restartable_syscalls = yes; then
+ AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS, 1,
+ [Define to 1 if system calls automatically restart after
+ interruption by a signal.])
+fi
+])# AC_SYS_RESTARTABLE_SYSCALLS
+
+
+# AC_SYS_POSIX_TERMIOS
+# --------------------
+AC_DEFUN([AC_SYS_POSIX_TERMIOS],
+[AC_CACHE_CHECK([POSIX termios], ac_cv_sys_posix_termios,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+]],
+ [/* SunOS 4.0.3 has termios.h but not the library calls. */
+ tcgetattr(0, 0);])],
+ ac_cv_sys_posix_termios=yes,
+ ac_cv_sys_posix_termios=no)])
+])# AC_SYS_POSIX_TERMIOS
+
+
+
+
+## ------------------------------------ ##
+## Checks for not-quite-Unix variants. ##
+## ------------------------------------ ##
+
+
+# AC_GNU_SOURCE
+# -------------
+AU_DEFUN([AC_GNU_SOURCE], [AC_USE_SYSTEM_EXTENSIONS])
+
+
+# AC_CYGWIN
+# ---------
+# Check for Cygwin. This is a way to set the right value for
+# EXEEXT.
+AU_DEFUN([AC_CYGWIN],
+[AC_CANONICAL_HOST
+case $host_os in
+ *cygwin* ) CYGWIN=yes;;
+ * ) CYGWIN=no;;
+esac
+], [$0 is obsolete: use AC_CANONICAL_HOST and check if $host_os
+matches *cygwin*])# AC_CYGWIN
+
+
+# AC_EMXOS2
+# ---------
+# Check for EMX on OS/2. This is another way to set the right value
+# for EXEEXT.
+AU_DEFUN([AC_EMXOS2],
+[AC_CANONICAL_HOST
+case $host_os in
+ *emx* ) EMXOS2=yes;;
+ * ) EMXOS2=no;;
+esac
+], [$0 is obsolete: use AC_CANONICAL_HOST and check if $host_os
+matches *emx*])# AC_EMXOS2
+
+
+# AC_MINGW32
+# ----------
+# Check for mingw32. This is another way to set the right value for
+# EXEEXT.
+AU_DEFUN([AC_MINGW32],
+[AC_CANONICAL_HOST
+case $host_os in
+ *mingw32* ) MINGW32=yes;;
+ * ) MINGW32=no;;
+esac
+], [$0 is obsolete: use AC_CANONICAL_HOST and check if $host_os
+matches *mingw32*])# AC_MINGW32
+
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+#
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE. The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+
+ AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
+ if test "$MINIX" = yes; then
+ AC_DEFINE([_POSIX_SOURCE], [1],
+ [Define to 1 if you need to in order for `stat' and other
+ things to work.])
+ AC_DEFINE([_POSIX_1_SOURCE], [2],
+ [Define to 2 if the system does not provide POSIX.1 features
+ except with this defined.])
+ AC_DEFINE([_MINIX], [1],
+ [Define to 1 if on MINIX.])
+ fi
+
+dnl Use a different key than __EXTENSIONS__, as that name broke existing
+dnl configure.ac when using autoheader 2.62.
+ AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
+[/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+ AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+ [ac_cv_safe_to_define___extensions__],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+# define __EXTENSIONS__ 1
+ ]AC_INCLUDES_DEFAULT])],
+ [ac_cv_safe_to_define___extensions__=yes],
+ [ac_cv_safe_to_define___extensions__=no])])
+ test $ac_cv_safe_to_define___extensions__ = yes &&
+ AC_DEFINE([__EXTENSIONS__])
+ AC_DEFINE([_ALL_SOURCE])
+ AC_DEFINE([_GNU_SOURCE])
+ AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+ AC_DEFINE([_TANDEM_SOURCE])
+])# AC_USE_SYSTEM_EXTENSIONS
+
+
+
+## -------------------------- ##
+## Checks for UNIX variants. ##
+## -------------------------- ##
+
+
+# These are kludges which should be replaced by a single POSIX check.
+# They aren't cached, to discourage their use.
+
+# AC_AIX
+# ------
+AU_DEFUN([AC_AIX], [AC_USE_SYSTEM_EXTENSIONS])
+
+
+# AC_MINIX
+# --------
+AU_DEFUN([AC_MINIX], [AC_USE_SYSTEM_EXTENSIONS])
+
+
+# AC_ISC_POSIX
+# ------------
+AU_DEFUN([AC_ISC_POSIX], [AC_SEARCH_LIBS([strerror], [cposix])])
+
+
+# AC_XENIX_DIR
+# ------------
+AU_DEFUN([AC_XENIX_DIR],
+[AC_MSG_CHECKING([for Xenix])
+AC_EGREP_CPP([yes],
+[#if defined M_XENIX && ! defined M_UNIX
+ yes
+@%:@endif],
+ [AC_MSG_RESULT([yes]); XENIX=yes],
+ [AC_MSG_RESULT([no]); XENIX=])
+
+AC_HEADER_DIRENT[]dnl
+],
+[You shouldn't need to depend upon XENIX. Remove the
+`AC_MSG_CHECKING', `AC_EGREP_CPP', and this warning if this part
+of the test is useless.])
+
+
+# AC_DYNIX_SEQ
+# ------------
+AU_DEFUN([AC_DYNIX_SEQ], [AC_FUNC_GETMNTENT])
+
+
+# AC_IRIX_SUN
+# -----------
+AU_DEFUN([AC_IRIX_SUN],
+[AC_FUNC_GETMNTENT
+AC_CHECK_LIB([sun], [getpwnam])])
+
+
+# AC_SCO_INTL
+# -----------
+AU_DEFUN([AC_SCO_INTL], [AC_FUNC_STRFTIME])
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
new file mode 100644
index 0000000..157fe6a
--- /dev/null
+++ b/lib/autoconf/status.m4
@@ -0,0 +1,1782 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Parameterizing and creating config.status.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+# This file handles about all the preparation aspects for
+# `config.status': registering the configuration files, the headers,
+# the links, and the commands `config.status' will run. There is a
+# little mixture though of things actually handled by `configure',
+# such as running the `configure' in the sub directories. Minor
+# detail.
+#
+# There are two kinds of commands:
+#
+# COMMANDS:
+#
+# They are output into `config.status' via a quoted here doc. These
+# commands are always associated to a tag which the user can use to
+# tell `config.status' what are the commands she wants to run.
+#
+# INIT-CMDS:
+#
+# They are output via an *unquoted* here-doc. As a consequence $var
+# will be output as the value of VAR. This is typically used by
+# `configure' to give `config.status' some variables it needs to run
+# the COMMANDS. At the difference of COMMANDS, the INIT-CMDS are
+# always run.
+#
+#
+# Honorable members of this family are AC_CONFIG_FILES,
+# AC_CONFIG_HEADERS, AC_CONFIG_LINKS and AC_CONFIG_COMMANDS. Bad boys
+# are AC_LINK_FILES, AC_OUTPUT_COMMANDS and AC_OUTPUT when used with
+# arguments. False members are AC_CONFIG_SRCDIR, AC_CONFIG_SUBDIRS
+# and AC_CONFIG_AUX_DIR. Cousins are AC_CONFIG_COMMANDS_PRE and
+# AC_CONFIG_COMMANDS_POST.
+
+
+## ------------------ ##
+## Auxiliary macros. ##
+## ------------------ ##
+
+# _AC_SRCDIRS(BUILD-DIR-NAME)
+# ---------------------------
+# Inputs:
+# - BUILD-DIR-NAME is `top-build -> build' and `top-src -> src'
+# - `$srcdir' is `top-build -> top-src'
+#
+# Outputs:
+# - `ac_builddir' is `.', for symmetry only.
+# - `ac_top_builddir_sub' is `build -> top_build'.
+# This is used for @top_builddir@.
+# - `ac_top_build_prefix' is `build -> top_build'.
+# If not empty, has a trailing slash.
+# - `ac_srcdir' is `build -> src'.
+# - `ac_top_srcdir' is `build -> top-src'.
+# and `ac_abs_builddir' etc., the absolute directory names.
+m4_define([_AC_SRCDIRS],
+[ac_builddir=.
+
+case $1 in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`AS_ECHO([$1]) | sed 's|^\.[[\\/]]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`AS_ECHO(["$ac_dir_suffix"]) | sed 's|/[[^\\/]]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [[\\/]]* | ?:[[\\/]]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+])# _AC_SRCDIRS
+
+
+# _AC_HAVE_TOP_BUILD_PREFIX
+# -------------------------
+# Announce to the world (to Libtool) that we substitute @top_build_prefix@.
+AC_DEFUN([_AC_HAVE_TOP_BUILD_PREFIX])
+
+
+## ---------------------- ##
+## Registering the tags. ##
+## ---------------------- ##
+
+
+# _AC_CONFIG_COMMANDS_INIT([INIT-COMMANDS])
+# -----------------------------------------
+#
+# Register INIT-COMMANDS as command pasted *unquoted* in
+# `config.status'. This is typically used to pass variables from
+# `configure' to `config.status'. Note that $[1] is not over quoted as
+# was the case in AC_OUTPUT_COMMANDS.
+m4_define([_AC_CONFIG_COMMANDS_INIT],
+[m4_ifval([$1],
+ [m4_append([_AC_OUTPUT_COMMANDS_INIT],
+ [$1
+])])])
+
+
+# AC_FILE_DEPENDENCY_TRACE(DEST, SOURCE1, [SOURCE2...])
+# -----------------------------------------------------
+# This macro does nothing, it's a hook to be read with `autoconf --trace'.
+#
+# It announces DEST depends upon the SOURCE1 etc.
+m4_define([AC_FILE_DEPENDENCY_TRACE], [])
+
+
+# _AC_FILE_DEPENDENCY_TRACE_COLON(DEST:SOURCE1[:SOURCE2...])
+# ----------------------------------------------------------
+# Declare that DEST depends upon SOURCE1 etc.
+#
+m4_define([_AC_FILE_DEPENDENCY_TRACE_COLON],
+[AC_FILE_DEPENDENCY_TRACE(m4_translit([$1], [:], [,]))])
+
+
+# _AC_CONFIG_DEPENDENCY(MODE, DEST[:SOURCE1...])
+# ----------------------------------------------
+# MODE is `FILES', `HEADERS', or `LINKS'.
+#
+# Be sure that a missing dependency is expressed as a dependency upon
+# `DEST.in' (except with config links).
+#
+m4_define([_AC_CONFIG_DEPENDENCY],
+[_AC_FILE_DEPENDENCY_TRACE_COLON([$2]_AC_CONFIG_DEPENDENCY_DEFAULT($@))dnl
+])
+
+
+# _AC_CONFIG_DEPENDENCY_DEFAULT(MODE, DEST[:SOURCE1...])
+# ------------------------------------------------------
+# Expand to `:DEST.in' if appropriate, or to empty string otherwise.
+#
+# More detailed description:
+# If the tag contains `:', expand to nothing.
+# Otherwise, for a config file or header, add `:DEST.in'.
+# For a config link, DEST.in is not appropriate:
+# - if the tag is literal, complain.
+# - otherwise, just expand to nothing and proceed with fingers crossed.
+# (We get to this case from the obsolete AC_LINK_FILES, for example.)
+#
+m4_define([_AC_CONFIG_DEPENDENCY_DEFAULT],
+[m4_if(m4_index([$2], [:]), [-1],
+ [m4_if([$1], [LINKS],
+ [AS_LITERAL_IF([$2],
+ [m4_fatal([Invalid AC_CONFIG_LINKS tag: `$2'])])],
+ [:$2.in])])])
+
+
+# _AC_CONFIG_UNIQUE(MODE, DEST)
+# -----------------------------
+# MODE is `FILES', `HEADERS', `LINKS', `COMMANDS', or `SUBDIRS'.
+#
+# Verify that there is no double definition of an output file.
+#
+m4_define([_AC_CONFIG_UNIQUE],
+[m4_ifdef([_AC_SEEN_TAG($2)],
+ [m4_fatal([`$2' is already registered with AC_CONFIG_]m4_defn(
+ [_AC_SEEN_TAG($2)]).)],
+ [m4_define([_AC_SEEN_TAG($2)], [$1])])dnl
+])
+
+
+# _AC_CONFIG_FOOS(MODE, TAGS..., [COMMANDS], [INIT-CMDS])
+# -------------------------------------------------------
+# MODE is `FILES', `HEADERS', `LINKS', or `COMMANDS'.
+#
+# Associate the COMMANDS to each TAG, i.e., when config.status creates TAG,
+# run COMMANDS afterwards. (This is done in _AC_CONFIG_REGISTER_DEST.)
+#
+# For COMMANDS, do not m4_normalize TAGS before adding it to ac_config_commands.
+# This historical difference allows macro calls in TAGS.
+#
+m4_define([_AC_CONFIG_FOOS],
+[m4_map_args_w([$2], [_AC_CONFIG_REGISTER([$1],], [, [$3])])]dnl
+[m4_define([_AC_SEEN_CONFIG(ANY)])]dnl
+[m4_define([_AC_SEEN_CONFIG($1)])]dnl
+[_AC_CONFIG_COMMANDS_INIT([$4])]dnl
+[ac_config_[]m4_tolower([$1])="$ac_config_[]m4_tolower([$1]) ]dnl
+[m4_if([$1], [COMMANDS], [$2], [m4_normalize([$2])])"
+])
+
+# _AC_CONFIG_COMPUTE_DEST(STRING)
+# -------------------------------
+# Compute the DEST from STRING by stripping any : and following
+# characters. Guarantee a match in m4_index, so as to avoid a bug
+# with precision -1 in m4_format in older m4.
+m4_define([_AC_CONFIG_COMPUTE_DEST],
+[m4_format([[%.*s]], m4_index([$1:], [:]), [$1])])
+
+# _AC_CONFIG_REGISTER(MODE, TAG, [COMMANDS])
+# ------------------------------------------
+# MODE is `FILES', `HEADERS', `LINKS', or `COMMANDS'.
+#
+m4_define([_AC_CONFIG_REGISTER],
+[m4_if([$1], [COMMANDS],
+ [],
+ [_AC_CONFIG_DEPENDENCY([$1], [$2])])]dnl
+[_AC_CONFIG_REGISTER_DEST([$1], [$2],
+ _AC_CONFIG_COMPUTE_DEST([$2]), [$3])])
+
+
+# _AC_CONFIG_REGISTER_DEST(MODE, TAG, DEST, [COMMANDS])
+# -----------------------------------------------------
+# MODE is `FILES', `HEADERS', `LINKS', or `COMMANDS'.
+# TAG is in the form DEST[:SOURCE...].
+# Thus parameter $3 is the first part of $2.
+#
+# With CONFIG_LINKS, reject DEST=., because it is makes it hard for ./config.status
+# to guess the links to establish (`./config.status .').
+#
+# Save the name of the first config header to AH_HEADER.
+#
+m4_define([_AC_CONFIG_REGISTER_DEST],
+[_AC_CONFIG_UNIQUE([$1], [$3])]dnl
+[m4_if([$1 $3], [LINKS .],
+ [m4_fatal([invalid destination of a config link: `.'])],
+ [$1], [HEADERS],
+ [m4_define_default([AH_HEADER], [$3])])]dnl
+dnl
+dnl Recognize TAG as an argument to config.status:
+dnl
+[m4_append([_AC_LIST_TAGS],
+[ "$3") CONFIG_$1="$CONFIG_$1 $2" ;;
+])]dnl
+dnl
+dnl Register the associated commands, if any:
+dnl
+[m4_ifval([$4],
+[m4_append([_AC_LIST_TAG_COMMANDS],
+[ "$3":]m4_format([[%.1s]], [$1])[) $4 ;;
+])])])# _AC_CONFIG_REGISTER_DEST
+
+
+
+
+## --------------------- ##
+## Configuration files. ##
+## --------------------- ##
+
+
+# AC_CONFIG_FILES(FILE..., [COMMANDS], [INIT-CMDS])
+# -------------------------------------------------
+# Specify output files, i.e., files that are configured with AC_SUBST.
+#
+AC_DEFUN([AC_CONFIG_FILES], [_AC_CONFIG_FOOS([FILES], $@)])
+
+
+# _AC_SED_CMD_LIMIT
+# -----------------
+# Evaluate to an m4 number equal to the maximum number of commands to put
+# in any single sed program, not counting ":" commands.
+#
+# Some seds have small command number limits, like on Digital OSF/1 and HP-UX.
+m4_define([_AC_SED_CMD_LIMIT],
+dnl One cannot portably go further than 99 commands because of HP-UX.
+[99])
+
+
+# _AC_AWK_LITERAL_LIMIT
+# ---------------------
+# Evaluate to the maximum number of characters to put in an awk
+# string literal, not counting escape characters.
+#
+# Some awk's have small limits, such as Solaris and AIX awk.
+m4_define([_AC_AWK_LITERAL_LIMIT],
+[148])
+
+
+# _AC_OUTPUT_FILES_PREPARE
+# ------------------------
+# Create the awk scripts needed for CONFIG_FILES.
+# Support multiline substitutions and make sure that the substitutions are
+# not evaluated recursively.
+# The intention is to have readable config.status and configure, even
+# though this m4 code might be scary.
+#
+# This code was written by Dan Manthey and rewritten by Ralf Wildenhues.
+#
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+#
+m4_define([_AC_OUTPUT_FILES_PREPARE],
+[# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+dnl For AC_SUBST_FILE, check for usable getline support in awk,
+dnl at config.status execution time.
+dnl Otherwise, do the interpolation in sh, which is slower.
+dnl Without any AC_SUBST_FILE, omit all related code.
+dnl Note the expansion is double-quoted for readability.
+m4_ifdef([_AC_SUBST_FILES],
+[[if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
+ ac_cs_awk_getline=:
+ ac_cs_awk_pipe_init=
+ ac_cs_awk_read_file='
+ while ((getline aline < (F[key])) > 0)
+ print(aline)
+ close(F[key])'
+ ac_cs_awk_pipe_fini=
+else
+ ac_cs_awk_getline=false
+ ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
+ ac_cs_awk_read_file='
+ print "|#_!!_#|"
+ print "cat " F[key] " &&"
+ '$ac_cs_awk_pipe_init
+ # The final `:' finishes the AND list.
+ ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
+fi]])
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+dnl
+dnl Define the pipe that does the substitution.
+m4_ifdef([_AC_SUBST_FILES],
+[m4_define([_AC_SUBST_CMDS], [|
+if $ac_cs_awk_getline; then
+ $AWK -f "$ac_tmp/subs.awk"
+else
+ $AWK -f "$ac_tmp/subs.awk" | $SHELL
+fi])],
+[m4_define([_AC_SUBST_CMDS],
+[| $AWK -f "$ac_tmp/subs.awk"])])dnl
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+m4_ifdef([_AC_SUBST_FILES],
+[# Create commands to substitute file output variables.
+{
+ echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
+ echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' &&
+ echo "$ac_subst_files" | sed 's/.*/F@<:@"&"@:>@="$&"/' &&
+ echo "_ACAWK" &&
+ echo "_ACEOF"
+} >conf$$files.sh &&
+. ./conf$$files.sh ||
+ AC_MSG_ERROR([could not make $CONFIG_STATUS])
+rm -f conf$$files.sh
+])dnl
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ AC_MSG_ERROR([could not make $CONFIG_STATUS])
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ AC_MSG_ERROR([could not make $CONFIG_STATUS])
+
+dnl Do not use grep on conf$$subs.awk, since AIX grep has a line length limit.
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ AC_MSG_ERROR([could not make $CONFIG_STATUS])
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+dnl Initialize an awk array of substitutions, keyed by variable name.
+dnl
+dnl The initial line contains the variable name VAR, then a `!'.
+dnl Construct `S["VAR"]=' from it.
+dnl The rest of the line, and potentially further lines, contain the
+dnl substituted value; the last of those ends with $ac_delim. We split
+dnl the output both along those substituted newlines and at intervals of
+dnl length _AC_AWK_LITERAL_LIMIT. The latter is done to comply with awk
+dnl string literal limitations, the former for simplicity in doing so.
+dnl
+dnl We deal with one input line at a time to avoid sed pattern space
+dnl limitations. We kill the delimiter $ac_delim before splitting the
+dnl string (otherwise we risk splitting the delimiter). And we do the
+dnl splitting before the quoting of awk special characters (otherwise we
+dnl risk splitting an escape sequence).
+dnl
+dnl Output as separate string literals, joined with backslash-newline.
+dnl Eliminate the newline after `=' in a second script, for readability.
+dnl
+dnl Notes to the main part of the awk script:
+dnl - the unusual FS value helps prevent running into the limit of 99 fields,
+dnl - we avoid sub/gsub because of the \& quoting issues, see
+dnl http://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html
+dnl - Writing `$ 0' prevents expansion by both the shell and m4 here.
+dnl
+dnl m4-double-quote most of the scripting for readability.
+[cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{]_AC_AWK_LITERAL_LIMIT[\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{]_AC_AWK_LITERAL_LIMIT[\}//
+t nl
+:delim
+h
+s/\(.\{]_AC_AWK_LITERAL_LIMIT[\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{]_AC_AWK_LITERAL_LIMIT[\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+]m4_ifdef([_AC_SUBST_FILES],
+[ \$ac_cs_awk_pipe_init])[
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+]m4_ifdef([_AC_SUBST_FILES],
+[[ if (nfields == 3 && !substed) {
+ key = field[2]
+ if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) {
+ \$ac_cs_awk_read_file
+ next
+ }
+ }]])[
+ print line
+}
+]dnl end of double-quoted part
+m4_ifdef([_AC_SUBST_FILES],
+[\$ac_cs_awk_pipe_fini])
+_ACAWK
+_ACEOF
+dnl See if CR is the EOL marker. If not, remove any EOL-related
+dnl ^M bytes and escape any remaining ones. If so, just use mv.
+dnl In case you're wondering how ^M bytes can make it into subs1.awk,
+dnl [from Ralf Wildenhues] one way is if you have e.g.,
+dnl AC_SUBST([variable_that_contains_cr], ["
+dnl "])
+dnl The original aim was that users should be able to substitute any
+dnl characters they like (except for \0). And the above is not so
+dnl unlikely if the configure script itself happens to be converted
+dnl to w32 text mode.
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || AC_MSG_ERROR([could not setup config files machinery])
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub=['/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}']
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+])# _AC_OUTPUT_FILES_PREPARE
+
+# _AC_OUTPUT_FILE_ADJUST_DIR(VAR)
+# -------------------------------
+# Generate the sed snippet needed to output VAR relative to the
+# top-level directory.
+m4_define([_AC_OUTPUT_FILE_ADJUST_DIR],
+[s&@$1@&$ac_$1&;t t[]AC_SUBST_TRACE([$1])])
+
+
+# _AC_OUTPUT_FILE
+# ---------------
+# Do the variable substitutions to create the Makefiles or whatever.
+#
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+#
+m4_define([_AC_OUTPUT_FILE],
+[
+ #
+ # CONFIG_FILE
+ #
+
+AC_PROVIDE_IFELSE([AC_PROG_INSTALL],
+[ case $INSTALL in
+ [[\\/$]]* | ?:[[\\/]]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+])dnl
+AC_PROVIDE_IFELSE([AC_PROG_MKDIR_P],
+[ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [[\\/$]]* | ?:[[\\/]]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+])dnl
+_ACEOF
+
+m4_ifndef([AC_DATAROOTDIR_CHECKED],
+[cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+m4_define([_AC_datarootdir_vars],
+ [datadir, docdir, infodir, localedir, mandir])]dnl
+[m4_define([_AC_datarootdir_subst], [ s&@$][1@&$$][1&g])]dnl
+[ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+m4_map_args_sep([/@], [@/p], [
+], _AC_datarootdir_vars)'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@[]m4_join([@*|*@], _AC_datarootdir_vars)@*)
+ AC_MSG_WARN([$ac_file_inputs seems to ignore the --datarootdir setting])
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+m4_map_args_sep([_AC_datarootdir_subst(], [)], [
+], _AC_datarootdir_vars)
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+])dnl
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+[/@[a-zA-Z_][a-zA-Z_0-9]*@/!b]
+dnl configure_input is a somewhat special, so we don't call AC_SUBST_TRACE.
+dnl Note if you change the s||| delimiter here, don't forget to adjust
+dnl ac_sed_conf_input accordingly. Using & is a bad idea if & appears in
+dnl the replacement string.
+s|@configure_input@|$ac_sed_conf_input|;t t
+dnl During the transition period, this is a special case:
+s&@top_builddir@&$ac_top_builddir_sub&;t t[]AC_SUBST_TRACE([top_builddir])
+dnl For this substitution see the witness macro _AC_HAVE_TOP_BUILD_PREFIX above.
+s&@top_build_prefix@&$ac_top_build_prefix&;t t[]AC_SUBST_TRACE([top_build_prefix])
+m4_map_args_sep([$0_ADJUST_DIR(], [)], [
+], [srcdir], [abs_srcdir], [top_srcdir], [abs_top_srcdir],
+ [builddir], [abs_builddir],
+ [abs_top_builddir]AC_PROVIDE_IFELSE([AC_PROG_INSTALL],
+ [, [INSTALL]])AC_PROVIDE_IFELSE([AC_PROG_MKDIR_P], [, [MKDIR_P]]))
+m4_ifndef([AC_DATAROOTDIR_CHECKED], [$ac_datarootdir_hack
+])dnl
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" m4_defn([_AC_SUBST_CMDS]) \
+ >$ac_tmp/out || AC_MSG_ERROR([could not create $ac_file])
+
+m4_ifndef([AC_DATAROOTDIR_CHECKED],
+[test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[[ ]]*datarootdir[[ ]]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ AC_MSG_WARN([$ac_file contains a reference to the variable `datarootdir'
+which seems to be undefined. Please make sure it is defined])
+])dnl
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || AC_MSG_ERROR([could not create $ac_file])
+dnl This would break Makefile dependencies:
+dnl if diff "$ac_file" "$ac_tmp/out" >/dev/null 2>&1; then
+dnl echo "$ac_file is unchanged"
+dnl else
+dnl rm -f "$ac_file"; mv "$ac_tmp/out" "$ac_file"
+dnl fi
+])# _AC_OUTPUT_FILE
+
+
+
+
+## ----------------------- ##
+## Configuration headers. ##
+## ----------------------- ##
+
+
+# AC_CONFIG_HEADERS(HEADERS..., [COMMANDS], [INIT-CMDS])
+# ------------------------------------------------------
+# Specify that the HEADERS are to be created by instantiation of the
+# AC_DEFINEs.
+#
+AC_DEFUN([AC_CONFIG_HEADERS], [_AC_CONFIG_FOOS([HEADERS], $@)])
+
+
+# AC_CONFIG_HEADER(HEADER-TO-CREATE ...)
+# --------------------------------------
+# FIXME: Make it obsolete?
+AC_DEFUN([AC_CONFIG_HEADER],
+[AC_CONFIG_HEADERS([$1])])
+
+
+# _AC_OUTPUT_HEADERS_PREPARE
+# --------------------------
+# Create the awk scripts needed for CONFIG_HEADERS.
+# Support multiline #defines.
+#
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+#
+m4_define([_AC_OUTPUT_HEADERS_PREPARE],
+[# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+dnl This `||' list is finished at the end of _AC_OUTPUT_HEADERS_PREPARE.
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ AC_MSG_ERROR([could not make $CONFIG_HEADERS])
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+dnl
+dnl Structure of the sed script that reads confdefs.h:
+dnl rset: main loop, searches for `#define' lines
+dnl def: deal with a `#define' line
+dnl bsnl: deal with a `#define' line that ends with backslash-newline
+dnl cont: handle a continuation line
+dnl bsnlc: handle a continuation line that ends with backslash-newline
+dnl
+dnl Each sub part escapes the awk special characters and outputs a statement
+dnl inserting the macro value into the array D, keyed by name. If the macro
+dnl uses parameters, they are added in the array P, keyed by name.
+dnl
+dnl Long values are split into several string literals with help of ac_delim.
+dnl Assume nobody uses macro names of nearly 150 bytes length.
+dnl
+dnl The initial replace for `#define' lines inserts a leading space
+dnl in order to ease later matching; otherwise, output lines may be
+dnl repeatedly matched.
+dnl
+dnl m4-double-quote most of this for [, ], define, and substr:
+[
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{]_AC_AWK_LITERAL_LIMIT[\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{]_AC_AWK_LITERAL_LIMIT[\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+]dnl End of double-quoted section
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+dnl finish `||' list indicating write error:
+ AC_MSG_ERROR([could not setup config headers machinery])
+fi # test -n "$CONFIG_HEADERS"
+
+])# _AC_OUTPUT_HEADERS_PREPARE
+
+
+# _AC_OUTPUT_HEADER
+# -----------------
+#
+# Output the code which instantiates the `config.h' files from their
+# `config.h.in'.
+#
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+#
+m4_define([_AC_OUTPUT_HEADER],
+[
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ AS_ECHO(["/* $configure_input */"]) \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || AC_MSG_ERROR([could not create $ac_file])
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ AC_MSG_NOTICE([$ac_file is unchanged])
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || AC_MSG_ERROR([could not create $ac_file])
+ fi
+ else
+ AS_ECHO(["/* $configure_input */"]) \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || AC_MSG_ERROR([could not create -])
+ fi
+dnl If running for Automake, be ready to perform additional
+dnl commands to set up the timestamp files.
+m4_ifdef([_AC_AM_CONFIG_HEADER_HOOK],
+ [_AC_AM_CONFIG_HEADER_HOOK(["$ac_file"])
+])dnl
+])# _AC_OUTPUT_HEADER
+
+
+
+## --------------------- ##
+## Configuration links. ##
+## --------------------- ##
+
+
+# AC_CONFIG_LINKS(DEST:SOURCE..., [COMMANDS], [INIT-CMDS])
+# --------------------------------------------------------
+# Specify that config.status should establish a (symbolic if possible)
+# link from TOP_SRCDIR/SOURCE to TOP_SRCDIR/DEST.
+# Reject DEST=., because it is makes it hard for ./config.status
+# to guess the links to establish (`./config.status .').
+#
+AC_DEFUN([AC_CONFIG_LINKS], [_AC_CONFIG_FOOS([LINKS], $@)])
+
+
+# AC_LINK_FILES(SOURCE..., DEST...)
+# ---------------------------------
+# Link each of the existing files SOURCE... to the corresponding
+# link name in DEST...
+#
+# Unfortunately we can't provide a very good autoupdate service here,
+# since in `AC_LINK_FILES($from, $to)' it is possible that `$from'
+# and `$to' are actually lists. It would then be completely wrong to
+# replace it with `AC_CONFIG_LINKS($to:$from). It is possible in the
+# case of literal values though, but because I don't think there is any
+# interest in creating config links with literal values, no special
+# mechanism is implemented to handle them.
+#
+# _AC_LINK_FILES_CNT is used to be robust to multiple calls.
+AU_DEFUN([AC_LINK_FILES],
+[m4_if($#, 2, ,
+ [m4_fatal([$0: incorrect number of arguments])])dnl
+m4_define_default([_AC_LINK_FILES_CNT], 0)dnl
+m4_define([_AC_LINK_FILES_CNT], m4_incr(_AC_LINK_FILES_CNT))dnl
+ac_sources="$1"
+ac_dests="$2"
+while test -n "$ac_sources"; do
+ set $ac_dests; ac_dest=$[1]; shift; ac_dests=$[*]
+ set $ac_sources; ac_source=$[1]; shift; ac_sources=$[*]
+ [ac_config_links_]_AC_LINK_FILES_CNT="$[ac_config_links_]_AC_LINK_FILES_CNT $ac_dest:$ac_source"
+done
+AC_CONFIG_LINKS($[ac_config_links_]_AC_LINK_FILES_CNT)dnl
+],
+[It is technically impossible to `autoupdate' cleanly from AC_LINK_FILES
+to AC_CONFIG_LINKS. `autoupdate' provides a functional but inelegant
+update, you should probably tune the result yourself.])# AC_LINK_FILES
+
+
+# _AC_OUTPUT_LINK
+# ---------------
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+m4_define([_AC_OUTPUT_LINK],
+[
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+
+ AC_MSG_NOTICE([linking $ac_source to $ac_file])
+
+ if test ! -r "$ac_source"; then
+ AC_MSG_ERROR([$ac_source: file not found])
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $ac_source in
+ [[\\/$]]* | ?:[[\\/]]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ AC_MSG_ERROR([cannot link or copy $ac_source to $ac_file])
+ fi
+])# _AC_OUTPUT_LINK
+
+
+
+## ------------------------ ##
+## Configuration commands. ##
+## ------------------------ ##
+
+
+# AC_CONFIG_COMMANDS(NAME...,[COMMANDS], [INIT-CMDS])
+# ---------------------------------------------------
+#
+# Specify additional commands to be run by config.status. This
+# commands must be associated with a NAME, which should be thought
+# as the name of a file the COMMANDS create.
+#
+AC_DEFUN([AC_CONFIG_COMMANDS], [_AC_CONFIG_FOOS([COMMANDS], $@)])
+
+
+# AC_OUTPUT_COMMANDS(EXTRA-CMDS, INIT-CMDS)
+# -----------------------------------------
+#
+# Add additional commands for AC_OUTPUT to put into config.status.
+#
+# This macro is an obsolete version of AC_CONFIG_COMMANDS. The only
+# difficulty in mapping AC_OUTPUT_COMMANDS to AC_CONFIG_COMMANDS is
+# to give a unique key. The scheme we have chosen is `default-1',
+# `default-2' etc. for each call.
+#
+# Unfortunately this scheme is fragile: bad things might happen
+# if you update an included file and configure.ac: you might have
+# clashes :( On the other hand, I'd like to avoid weird keys (e.g.,
+# depending upon __file__ or the pid).
+AU_DEFUN([AC_OUTPUT_COMMANDS],
+[m4_define_default([_AC_OUTPUT_COMMANDS_CNT], 0)dnl
+m4_define([_AC_OUTPUT_COMMANDS_CNT], m4_incr(_AC_OUTPUT_COMMANDS_CNT))dnl
+dnl Double quoted since that was the case in the original macro.
+AC_CONFIG_COMMANDS([default-]_AC_OUTPUT_COMMANDS_CNT, [[$1]], [[$2]])dnl
+])
+
+
+# _AC_OUTPUT_COMMAND
+# ------------------
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+m4_define([_AC_OUTPUT_COMMAND],
+[ AC_MSG_NOTICE([executing $ac_file commands])
+])
+
+
+
+## -------------------------------------- ##
+## Pre- and post-config.status commands. ##
+## -------------------------------------- ##
+
+
+# AC_CONFIG_COMMANDS_PRE(CMDS)
+# ----------------------------
+# Commands to run right before config.status is created. Accumulates.
+AC_DEFUN([AC_CONFIG_COMMANDS_PRE],
+[m4_append([AC_OUTPUT_COMMANDS_PRE], [$1
+])])
+
+
+# AC_OUTPUT_COMMANDS_PRE
+# ----------------------
+# A *variable* in which we append all the actions that must be
+# performed before *creating* config.status. For a start, clean
+# up all the LIBOBJ mess.
+m4_define([AC_OUTPUT_COMMANDS_PRE],
+[_AC_LIBOBJS_NORMALIZE
+])
+
+
+# AC_CONFIG_COMMANDS_POST(CMDS)
+# -----------------------------
+# Commands to run after config.status was created. Accumulates.
+AC_DEFUN([AC_CONFIG_COMMANDS_POST],
+[m4_append([AC_OUTPUT_COMMANDS_POST], [$1
+])])
+
+# Initialize.
+m4_define([AC_OUTPUT_COMMANDS_POST])
+
+
+
+## ----------------------- ##
+## Configuration subdirs. ##
+## ----------------------- ##
+
+
+# AC_CONFIG_SUBDIRS(DIR ...)
+# --------------------------
+# We define two variables:
+# - _AC_LIST_SUBDIRS
+# A statically built list, should contain *all* the arguments of
+# AC_CONFIG_SUBDIRS. The final value is assigned to ac_subdirs_all in
+# the `default' section, and used for --help=recursive.
+# It makes no sense for arguments which are sh variables.
+# - subdirs
+# Shell variable built at runtime, so some of these dirs might not be
+# included, if for instance the user refused a part of the tree.
+# This is used in _AC_OUTPUT_SUBDIRS.
+AC_DEFUN([AC_CONFIG_SUBDIRS],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])]dnl
+[AC_REQUIRE([AC_DISABLE_OPTION_CHECKING])]dnl
+[m4_map_args_w([$1], [_AC_CONFIG_UNIQUE([SUBDIRS],
+ _AC_CONFIG_COMPUTE_DEST(], [))])]dnl
+[m4_append([_AC_LIST_SUBDIRS], [$1], [
+])]dnl
+[AS_LITERAL_IF([$1], [],
+ [AC_DIAGNOSE([syntax], [$0: you should use literals])])]dnl
+[AC_SUBST([subdirs], ["$subdirs m4_normalize([$1])"])])
+
+
+# _AC_OUTPUT_SUBDIRS
+# ------------------
+# This is a subroutine of AC_OUTPUT, but it does not go into
+# config.status, rather, it is called after running config.status.
+m4_define([_AC_OUTPUT_SUBDIRS],
+[
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+ # so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ eval "set x $ac_configure_args"
+ shift
+ for ac_arg
+ do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case $ac_arg in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+ | --c=*)
+ ;;
+ --config-cache | -C)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ ;;
+ --disable-option-checking)
+ ;;
+ *)
+ case $ac_arg in
+ *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ AS_VAR_APPEND([ac_sub_configure_args], [" '$ac_arg'"]) ;;
+ esac
+ done
+
+ # Always prepend --prefix to ensure using the same prefix
+ # in subdir configurations.
+ ac_arg="--prefix=$prefix"
+ case $ac_arg in
+ *\'*) ac_arg=`AS_ECHO(["$ac_arg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+ # Pass --silent
+ if test "$silent" = yes; then
+ ac_sub_configure_args="--silent $ac_sub_configure_args"
+ fi
+
+ # Always prepend --disable-option-checking to silence warnings, since
+ # different subdirs can have different --enable and --with options.
+ ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+ ac_popdir=`pwd`
+ for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ test -d "$srcdir/$ac_dir" || continue
+
+ ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+ _AS_ECHO_LOG([$ac_msg])
+ _AS_ECHO([$ac_msg])
+ AS_MKDIR_P(["$ac_dir"])
+ _AC_SRCDIRS(["$ac_dir"])
+
+ cd "$ac_dir"
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ ac_sub_configure=$ac_srcdir/configure.gnu
+ elif test -f "$ac_srcdir/configure"; then
+ ac_sub_configure=$ac_srcdir/configure
+ elif test -f "$ac_srcdir/configure.in"; then
+ # This should be Cygnus configure.
+ ac_sub_configure=$ac_aux_dir/configure
+ else
+ AC_MSG_WARN([no configuration information is in $ac_dir])
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+ # Make the cache file name correct relative to the subdirectory.
+ case $cache_file in
+ [[\\/]]* | ?:[[\\/]]* ) ac_sub_cache_file=$cache_file ;;
+ *) # Relative name.
+ ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+ esac
+
+ AC_MSG_NOTICE([running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
+ # The eval makes quoting arguments work.
+ eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+ AC_MSG_ERROR([$ac_sub_configure failed for $ac_dir])
+ fi
+
+ cd "$ac_popdir"
+ done
+fi
+])# _AC_OUTPUT_SUBDIRS
+
+
+
+
+## -------------------------- ##
+## Outputting config.status. ##
+## -------------------------- ##
+
+
+# AU::AC_OUTPUT([CONFIG_FILES...], [EXTRA-CMDS], [INIT-CMDS])
+# -----------------------------------------------------------
+#
+# If there are arguments given to AC_OUTPUT, dispatch them to the
+# proper modern macros.
+AU_DEFUN([AC_OUTPUT],
+[m4_ifvaln([$1],
+ [AC_CONFIG_FILES([$1])])dnl
+m4_ifvaln([$2$3],
+ [AC_CONFIG_COMMANDS(default, [$2], [$3])])dnl
+[AC_OUTPUT]])
+
+
+# AC_OUTPUT([CONFIG_FILES...], [EXTRA-CMDS], [INIT-CMDS])
+# -------------------------------------------------------
+# The big finish.
+# Produce config.status, config.h, and links; and configure subdirs.
+#
+m4_define([AC_OUTPUT],
+[dnl Dispatch the extra arguments to their native macros.
+m4_ifvaln([$1],
+ [AC_CONFIG_FILES([$1])])dnl
+m4_ifvaln([$2$3],
+ [AC_CONFIG_COMMANDS(default, [$2], [$3])])dnl
+m4_ifval([$1$2$3],
+ [AC_DIAGNOSE([obsolete],
+ [$0 should be used without arguments.
+You should run autoupdate.])])dnl
+AC_CACHE_SAVE
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [DEFS=-DHAVE_CONFIG_H], [AC_OUTPUT_MAKE_DEFS()])
+
+dnl Commands to run before creating config.status.
+AC_OUTPUT_COMMANDS_PRE()dnl
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+_AC_OUTPUT_CONFIG_STATUS()dnl
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ AC_MSG_ERROR([write failure creating $CONFIG_STATUS])
+
+dnl Commands to run after config.status was created
+AC_OUTPUT_COMMANDS_POST()dnl
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec AS_MESSAGE_LOG_FD>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec AS_MESSAGE_LOG_FD>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || AS_EXIT([1])
+fi
+dnl config.status should not do recursion.
+AC_PROVIDE_IFELSE([AC_CONFIG_SUBDIRS], [_AC_OUTPUT_SUBDIRS()])dnl
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ AC_MSG_WARN([unrecognized options: $ac_unrecognized_opts])
+fi
+])# AC_OUTPUT
+
+
+# _AC_OUTPUT_CONFIG_STATUS
+# ------------------------
+# Produce config.status. Called by AC_OUTPUT.
+# Pay special attention not to have too long here docs: some old
+# shells die. Unfortunately the limit is not known precisely...
+m4_define([_AC_OUTPUT_CONFIG_STATUS],
+[AC_MSG_NOTICE([creating $CONFIG_STATUS])
+dnl AS_MESSAGE_LOG_FD is not available yet:
+m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[AS_INIT_GENERATED([$CONFIG_STATUS],
+[# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+]) || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+[#] Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])dnl
+$as_me[]m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]), which was
+generated by m4_PACKAGE_STRING. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $[0] $[@]
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+dnl remove any newlines from these variables.
+m4_ifdef([_AC_SEEN_CONFIG(FILES)],
+[case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$[*];;
+esac
+])
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)],
+[case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$[*];;
+esac
+])
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+m4_ifdef([_AC_SEEN_CONFIG(FILES)],
+[config_files="$ac_config_files"
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)],
+[config_headers="$ac_config_headers"
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(LINKS)],
+[config_links="$ac_config_links"
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)],
+[config_commands="$ac_config_commands"
+])dnl
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $[0] [[OPTION]]... [[TAG]]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+[] do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+m4_ifdef([_AC_SEEN_CONFIG(FILES)],
+ [AS_HELP_STRING([[ --file=FILE[:TEMPLATE]]],
+ [instantiate the configuration file FILE], [ ])
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)],
+ [AS_HELP_STRING([[ --header=FILE[:TEMPLATE]]],
+ [instantiate the configuration header FILE], [ ])
+])dnl
+
+m4_ifdef([_AC_SEEN_CONFIG(FILES)],
+[Configuration files:
+$config_files
+
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)],
+[Configuration headers:
+$config_headers
+
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(LINKS)],
+[Configuration links:
+$config_links
+
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)],
+[Configuration commands:
+$config_commands
+
+])dnl
+Report bugs to m4_ifset([AC_PACKAGE_BUGREPORT], [<AC_PACKAGE_BUGREPORT>],
+ [the package provider]).dnl
+m4_ifdef([AC_PACKAGE_NAME], [m4_ifset([AC_PACKAGE_URL], [
+AC_PACKAGE_NAME home page: <AC_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AC_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])])"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`AS_ECHO(["$ac_configure_args"]) | sed 's/^ //; s/[[\\""\`\$]]/\\\\&/g'`"
+ac_cs_version="\\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.status[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) m4_PACKAGE_YEAR Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+AC_PROVIDE_IFELSE([AC_PROG_INSTALL],
+[INSTALL='$INSTALL'
+])dnl
+AC_PROVIDE_IFELSE([AC_PROG_MKDIR_P],
+[MKDIR_P='$MKDIR_P'
+])dnl
+AC_PROVIDE_IFELSE([AC_PROG_AWK],
+[AWK='$AWK'
+])dnl
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $[#] != 0
+do
+ case $[1] in
+ --*=?*)
+ ac_option=`expr "X$[1]" : 'X\([[^=]]*\)='`
+ ac_optarg=`expr "X$[1]" : 'X[[^=]]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$[1]" : 'X\([[^=]]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$[1]
+ ac_optarg=$[2]
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ AS_ECHO(["$ac_cs_version"]); exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ AS_ECHO(["$ac_cs_config"]); exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+m4_ifdef([_AC_SEEN_CONFIG(FILES)], [dnl
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`AS_ECHO(["$ac_optarg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') AC_MSG_ERROR([missing file argument]) ;;
+ esac
+ AS_VAR_APPEND([CONFIG_FILES], [" '$ac_optarg'"])
+ ac_need_defaults=false;;
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [dnl
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`AS_ECHO(["$ac_optarg"]) | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ AS_VAR_APPEND([CONFIG_HEADERS], [" '$ac_optarg'"])
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ AC_MSG_ERROR([ambiguous option: `$[1]'
+Try `$[0] --help' for more information.]);;
+], [ --he | --h |])dnl
+ --help | --hel | -h )
+ AS_ECHO(["$ac_cs_usage"]); exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) AC_MSG_ERROR([unrecognized option: `$[1]'
+Try `$[0] --help' for more information.]) ;;
+
+ *) AS_VAR_APPEND([ac_config_targets], [" $[1]"])
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+dnl Check this before opening the log, to avoid a bug on MinGW,
+dnl which prohibits the recursive instance from truncating an open log.
+if \$ac_cs_recheck; then
+ set X $SHELL '$[0]' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \AS_ECHO(["running CONFIG_SHELL=$SHELL \$[*]"]) >&AS_MESSAGE_FD
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$[@]"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+dnl Open the log:
+m4_popdef([AS_MESSAGE_LOG_FD])dnl
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+ AS_ECHO(["$ac_log"])
+} >&AS_MESSAGE_LOG_FD
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+m4_ifdef([_AC_OUTPUT_COMMANDS_INIT],
+[#
+# INIT-COMMANDS
+#
+_AC_OUTPUT_COMMANDS_INIT
+])dnl
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+m4_ifdef([_AC_LIST_TAGS], [_AC_LIST_TAGS])
+ *) AC_MSG_ERROR([invalid argument: `$ac_config_target']);;
+ esac
+done
+
+m4_ifdef([_AC_SEEN_CONFIG(ANY)], [_AC_OUTPUT_MAIN_LOOP])[]dnl
+
+AS_EXIT(0)
+_ACEOF
+])# _AC_OUTPUT_CONFIG_STATUS
+
+# _AC_OUTPUT_MAIN_LOOP
+# --------------------
+# The main loop in $CONFIG_STATUS.
+#
+# This macro is expanded inside a here document. If the here document is
+# closed, it has to be reopened with
+# "cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1".
+#
+AC_DEFUN([_AC_OUTPUT_MAIN_LOOP],
+[
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+m4_ifdef([_AC_SEEN_CONFIG(FILES)],
+[ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)],
+[ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(LINKS)],
+[ test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+])dnl
+m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)],
+[ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+])dnl
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+dnl For historical reasons, AS_TMPDIR must continue to place the results
+dnl in $tmp; but we swap to the namespace-clean $ac_tmp to avoid issues
+dnl with any CONFIG_COMMANDS playing with the common variable name $tmp.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'AS_EXIT([1])' 1 2 13 15
+}
+dnl The comment above AS_TMPDIR says at most 4 chars are allowed.
+AS_TMPDIR([conf], [.])
+ac_tmp=$tmp
+
+m4_ifdef([_AC_SEEN_CONFIG(FILES)], [_AC_OUTPUT_FILES_PREPARE])[]dnl
+m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [_AC_OUTPUT_HEADERS_PREPARE])[]dnl
+
+eval set X "dnl
+ m4_ifdef([_AC_SEEN_CONFIG(FILES)], [:F $CONFIG_FILES])[]dnl
+ m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [:H $CONFIG_HEADERS])[]dnl
+ m4_ifdef([_AC_SEEN_CONFIG(LINKS)], [:L $CONFIG_LINKS])[]dnl
+ m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)], [:C $CONFIG_COMMANDS])[]dnl
+"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[[FHLC]]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[[FHL]]*:*);;
+ :L* | :C*:*) AC_MSG_ERROR([invalid tag `$ac_tag']);;
+ :[[FH]]-) ac_tag=-:-;;
+ :[[FH]]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$[1]
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$[1];;
+ :[[FH]])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [[\\/$]]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ AC_MSG_ERROR([cannot find input file: `$ac_f'], [1]);;
+ esac
+ case $ac_f in *\'*) ac_f=`AS_ECHO(["$ac_f"]) | sed "s/'/'\\\\\\\\''/g"`;; esac
+ AS_VAR_APPEND([ac_file_inputs], [" '$ac_f'"])
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ AS_ECHO(["$[*]"]) | sed ['s|^[^:]*/||;s|:[^:]*/|, |g']
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ AC_MSG_NOTICE([creating $ac_file])
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`AS_ECHO(["$configure_input"]) |
+ sed 's/[[\\\\&|]]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || AC_MSG_ERROR([could not create $ac_file]) ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`AS_DIRNAME(["$ac_file"])`
+ AS_MKDIR_P(["$ac_dir"])
+ _AC_SRCDIRS(["$ac_dir"])
+
+ case $ac_mode in
+ m4_ifdef([_AC_SEEN_CONFIG(FILES)], [:F)_AC_OUTPUT_FILE ;;])
+ m4_ifdef([_AC_SEEN_CONFIG(HEADERS)], [:H)_AC_OUTPUT_HEADER ;;])
+ m4_ifdef([_AC_SEEN_CONFIG(LINKS)], [:L)_AC_OUTPUT_LINK ;;])
+ m4_ifdef([_AC_SEEN_CONFIG(COMMANDS)], [:C)_AC_OUTPUT_COMMAND ;;])
+ esac
+
+dnl Some shells don't like empty case/esac
+m4_ifdef([_AC_LIST_TAG_COMMANDS], [
+ case $ac_file$ac_mode in
+_AC_LIST_TAG_COMMANDS
+ esac
+])dnl
+done # for ac_tag
+
+])# _AC_OUTPUT_MAIN_LOOP
+
+
+# AC_OUTPUT_MAKE_DEFS
+# -------------------
+# Set the DEFS variable to the -D options determined earlier.
+# This is a subroutine of AC_OUTPUT.
+# It is called inside configure, outside of config.status.
+m4_define([AC_OUTPUT_MAKE_DEFS],
+[[# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+]])# AC_OUTPUT_MAKE_DEFS
diff --git a/lib/autoconf/types.m4 b/lib/autoconf/types.m4
new file mode 100644
index 0000000..18fc175
--- /dev/null
+++ b/lib/autoconf/types.m4
@@ -0,0 +1,1077 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# Type related macros: existence, sizeof, and structure members.
+#
+# Copyright (C) 2000-2002, 2004-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by David MacKenzie, with help from
+# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
+# Roland McGrath, Noah Friedman, david d zuhn, and many others.
+
+
+## ---------------- ##
+## Type existence. ##
+## ---------------- ##
+
+# ---------------- #
+# General checks. #
+# ---------------- #
+
+# Up to 2.13 included, Autoconf used to provide the macro
+#
+# AC_CHECK_TYPE(TYPE, DEFAULT)
+#
+# Since, it provides another version which fits better with the other
+# AC_CHECK_ families:
+#
+# AC_CHECK_TYPE(TYPE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+#
+# In order to provide backward compatibility, the new scheme is
+# implemented as _AC_CHECK_TYPE_NEW, the old scheme as _AC_CHECK_TYPE_OLD,
+# and AC_CHECK_TYPE branches to one or the other, depending upon its
+# arguments.
+
+
+# _AC_CHECK_TYPE_NEW_BODY
+# -----------------------
+# Shell function body for _AC_CHECK_TYPE_NEW. This macro implements the
+# former task of AC_CHECK_TYPE, with one big difference though: AC_CHECK_TYPE
+# used to grep in the headers, which, BTW, led to many problems until the
+# extended regular expression was correct and did not give false positives.
+# It turned out there are even portability issues with egrep...
+#
+# The most obvious way to check for a TYPE is just to compile a variable
+# definition:
+#
+# TYPE my_var;
+#
+# (TYPE being the second parameter to the shell function, hence $[]2 in m4).
+# Unfortunately this does not work for const qualified types in C++, where
+# you need an initializer. So you think of
+#
+# TYPE my_var = (TYPE) 0;
+#
+# Unfortunately, again, this is not valid for some C++ classes.
+#
+# Then you look for another scheme. For instance you think of declaring
+# a function which uses a parameter of type TYPE:
+#
+# int foo (TYPE param);
+#
+# but of course you soon realize this does not make it with K&R
+# compilers. And by no means do you want to use this:
+#
+# int foo (param)
+# TYPE param
+# { ; }
+#
+# since C++ would complain loudly.
+#
+# Don't even think of using a function return type, since K&R cries
+# there too. So you start thinking of declaring a *pointer* to this TYPE:
+#
+# TYPE *p;
+#
+# but you know fairly well that this is legal in C for aggregates which
+# are unknown (TYPE = struct does-not-exist).
+#
+# Then you think of using sizeof to make sure the TYPE is really
+# defined:
+#
+# sizeof (TYPE);
+#
+# That is great, but has one drawback: it succeeds when TYPE happens
+# to be a variable: you'd get the size of the variable's type.
+# Obviously, we must not accept a variable in place of a type name.
+#
+# So, to filter out the last possibility, we will require that this fail:
+#
+# sizeof ((TYPE));
+#
+# This evokes a syntax error when TYPE is a type, but succeeds if TYPE
+# is actually a variable.
+#
+# Also note that we use
+#
+# if (sizeof (TYPE))
+#
+# to `read' sizeof (to avoid warnings), while not depending on its type
+# (not necessarily size_t etc.).
+#
+# C++ disallows defining types inside `sizeof ()', but that's OK,
+# since we don't want to consider unnamed structs to be types for C++,
+# precisely because they don't work in cases like that.
+m4_define([_AC_CHECK_TYPE_NEW_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for $[]2], [$[]3],
+ [AS_VAR_SET([$[]3], [no])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([$[]4],
+ [if (sizeof ($[]2))
+ return 0;])],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([$[]4],
+ [if (sizeof (($[]2)))
+ return 0;])],
+ [],
+ [AS_VAR_SET([$[]3], [yes])])])])
+ AS_LINENO_POP
+])dnl
+
+# _AC_CHECK_TYPE_NEW(TYPE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# ------------------------------------------------------------
+# Check whether the type TYPE is supported by the system, maybe via the
+# the provided includes.
+AC_DEFUN([_AC_CHECK_TYPE_NEW],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_type],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_type],
+ [LINENO TYPE VAR INCLUDES],
+ [Tests whether TYPE exists after having included INCLUDES, setting
+ cache variable VAR accordingly.])],
+ [$0_BODY])]dnl
+[AS_VAR_PUSHDEF([ac_Type], [ac_cv_type_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_type "$LINENO" "$1" "ac_Type" ]dnl
+["AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])"
+AS_VAR_IF([ac_Type], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Type])dnl
+])# _AC_CHECK_TYPE_NEW
+
+
+# _AC_CHECK_TYPES(TYPE)
+# ---------------------
+# Helper to AC_CHECK_TYPES, which generates two of the four arguments
+# to _AC_CHECK_TYPE_NEW that are based on TYPE.
+m4_define([_AC_CHECK_TYPES],
+[[$1], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1],
+ [Define to 1 if the system has the type `$1'.])]])
+
+
+# AC_CHECK_TYPES(TYPES,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# --------------------------------------------------------
+# TYPES is an m4 list. There are no ambiguities here, we mean the newer
+# AC_CHECK_TYPE.
+AC_DEFUN([AC_CHECK_TYPES],
+[m4_map_args_sep([_AC_CHECK_TYPE_NEW(_$0(], [)[
+$2], [$3], [$4])], [], $1)])
+
+
+# _AC_CHECK_TYPE_OLD(TYPE, DEFAULT)
+# ---------------------------------
+# FIXME: This is an extremely badly chosen name, since this
+# macro actually performs an AC_REPLACE_TYPE. Some day we
+# have to clean this up.
+m4_define([_AC_CHECK_TYPE_OLD],
+[_AC_CHECK_TYPE_NEW([$1],,
+ [AC_DEFINE_UNQUOTED([$1], [$2],
+ [Define to `$2' if <sys/types.h> does not define.])])dnl
+])# _AC_CHECK_TYPE_OLD
+
+
+# _AC_CHECK_TYPE_REPLACEMENT_TYPE_P(STRING)
+# -----------------------------------------
+# Return `1' if STRING seems to be a builtin C/C++ type, i.e., if it
+# starts with `_Bool', `bool', `char', `double', `float', `int',
+# `long', `short', `signed', or `unsigned' followed by characters
+# that are defining types.
+# Because many people have used `off_t' and `size_t' too, they are added
+# for better common-use backward compatibility.
+m4_define([_AC_CHECK_TYPE_REPLACEMENT_TYPE_P],
+[m4_bmatch([$1],
+ [^\(_Bool\|bool\|char\|double\|float\|int\|long\|short\|\(un\)?signed\|[_a-zA-Z][_a-zA-Z0-9]*_t\)[][_a-zA-Z0-9() *]*$],
+ 1, 0)dnl
+])# _AC_CHECK_TYPE_REPLACEMENT_TYPE_P
+
+
+# _AC_CHECK_TYPE_MAYBE_TYPE_P(STRING)
+# -----------------------------------
+# Return `1' if STRING looks like a C/C++ type.
+m4_define([_AC_CHECK_TYPE_MAYBE_TYPE_P],
+[m4_bmatch([$1], [^[_a-zA-Z0-9 ]+\([_a-zA-Z0-9() *]\|\[\|\]\)*$],
+ 1, 0)dnl
+])# _AC_CHECK_TYPE_MAYBE_TYPE_P
+
+
+# AC_CHECK_TYPE(TYPE, DEFAULT)
+# or
+# AC_CHECK_TYPE(TYPE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# -------------------------------------------------------
+#
+# Dispatch respectively to _AC_CHECK_TYPE_OLD or _AC_CHECK_TYPE_NEW.
+# 1. More than two arguments => NEW
+# 2. $2 seems to be replacement type => OLD
+# See _AC_CHECK_TYPE_REPLACEMENT_TYPE_P for `replacement type'.
+# 3. $2 seems to be a type => NEW plus a warning
+# 4. default => NEW
+AC_DEFUN([AC_CHECK_TYPE],
+[m4_cond([$#], [3],
+ [_AC_CHECK_TYPE_NEW],
+ [$#], [4],
+ [_AC_CHECK_TYPE_NEW],
+ [_AC_CHECK_TYPE_REPLACEMENT_TYPE_P([$2])], [1],
+ [_AC_CHECK_TYPE_OLD],
+ [_AC_CHECK_TYPE_MAYBE_TYPE_P([$2])], [1],
+ [AC_DIAGNOSE([syntax],
+ [$0: assuming `$2' is not a type])_AC_CHECK_TYPE_NEW],
+ [_AC_CHECK_TYPE_NEW])($@)])# AC_CHECK_TYPE
+
+
+
+# ---------------------------- #
+# Types that must be checked. #
+# ---------------------------- #
+
+AN_IDENTIFIER([ptrdiff_t], [AC_CHECK_TYPES])
+
+
+# ----------------- #
+# Specific checks. #
+# ----------------- #
+
+# AC_TYPE_GETGROUPS
+# -----------------
+AC_DEFUN([AC_TYPE_GETGROUPS],
+[AC_REQUIRE([AC_TYPE_UID_T])dnl
+AC_CACHE_CHECK(type of array argument to getgroups, ac_cv_type_getgroups,
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[[/* Thanks to Mike Rendell for this test. */
+]AC_INCLUDES_DEFAULT[
+#define NGID 256
+#undef MAX
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+
+int
+main ()
+{
+ gid_t gidset[NGID];
+ int i, n;
+ union { gid_t gval; long int lval; } val;
+
+ val.lval = -1;
+ for (i = 0; i < NGID; i++)
+ gidset[i] = val.gval;
+ n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
+ gidset);
+ /* Exit non-zero if getgroups seems to require an array of ints. This
+ happens when gid_t is short int but getgroups modifies an array
+ of ints. */
+ return n > 0 && gidset[n] != val.gval;
+}]])],
+ [ac_cv_type_getgroups=gid_t],
+ [ac_cv_type_getgroups=int],
+ [ac_cv_type_getgroups=cross])
+if test $ac_cv_type_getgroups = cross; then
+ dnl When we can't run the test program (we are cross compiling), presume
+ dnl that <unistd.h> has either an accurate prototype for getgroups or none.
+ dnl Old systems without prototypes probably use int.
+ AC_EGREP_HEADER([getgroups.*int.*gid_t], unistd.h,
+ ac_cv_type_getgroups=gid_t, ac_cv_type_getgroups=int)
+fi])
+AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups,
+ [Define to the type of elements in the array set by
+ `getgroups'. Usually this is either `int' or `gid_t'.])
+])# AC_TYPE_GETGROUPS
+
+
+# AU::AM_TYPE_PTRDIFF_T
+# ---------------------
+AU_DEFUN([AM_TYPE_PTRDIFF_T],
+[AC_CHECK_TYPES(ptrdiff_t)])
+
+
+# AC_TYPE_INTMAX_T
+# ----------------
+AC_DEFUN([AC_TYPE_INTMAX_T],
+[
+ AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+ AC_CHECK_TYPE([intmax_t],
+ [AC_DEFINE([HAVE_INTMAX_T], 1,
+ [Define to 1 if the system has the type `intmax_t'.])],
+ [test $ac_cv_type_long_long_int = yes \
+ && ac_type='long long int' \
+ || ac_type='long int'
+ AC_DEFINE_UNQUOTED([intmax_t], [$ac_type],
+ [Define to the widest signed integer type
+ if <stdint.h> and <inttypes.h> do not define.])])
+])
+
+
+# AC_TYPE_UINTMAX_T
+# -----------------
+AC_DEFUN([AC_TYPE_UINTMAX_T],
+[
+ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+ AC_CHECK_TYPE([uintmax_t],
+ [AC_DEFINE([HAVE_UINTMAX_T], 1,
+ [Define to 1 if the system has the type `uintmax_t'.])],
+ [test $ac_cv_type_unsigned_long_long_int = yes \
+ && ac_type='unsigned long long int' \
+ || ac_type='unsigned long int'
+ AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
+ [Define to the widest unsigned integer type
+ if <stdint.h> and <inttypes.h> do not define.])])
+])
+
+
+# AC_TYPE_INTPTR_T
+# ----------------
+AC_DEFUN([AC_TYPE_INTPTR_T],
+[
+ AC_CHECK_TYPE([intptr_t],
+ [AC_DEFINE([HAVE_INTPTR_T], 1,
+ [Define to 1 if the system has the type `intptr_t'.])],
+ [for ac_type in 'int' 'long int' 'long long int'; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [AC_INCLUDES_DEFAULT],
+ [[sizeof (void *) <= sizeof ($ac_type)]])],
+ [AC_DEFINE_UNQUOTED([intptr_t], [$ac_type],
+ [Define to the type of a signed integer type wide enough to
+ hold a pointer, if such a type exists, and if the system
+ does not define it.])
+ ac_type=])
+ test -z "$ac_type" && break
+ done])
+])
+
+
+# AC_TYPE_UINTPTR_T
+# -----------------
+AC_DEFUN([AC_TYPE_UINTPTR_T],
+[
+ AC_CHECK_TYPE([uintptr_t],
+ [AC_DEFINE([HAVE_UINTPTR_T], 1,
+ [Define to 1 if the system has the type `uintptr_t'.])],
+ [for ac_type in 'unsigned int' 'unsigned long int' \
+ 'unsigned long long int'; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [AC_INCLUDES_DEFAULT],
+ [[sizeof (void *) <= sizeof ($ac_type)]])],
+ [AC_DEFINE_UNQUOTED([uintptr_t], [$ac_type],
+ [Define to the type of an unsigned integer type wide enough to
+ hold a pointer, if such a type exists, and if the system
+ does not define it.])
+ ac_type=])
+ test -z "$ac_type" && break
+ done])
+])
+
+
+# AC_TYPE_LONG_DOUBLE
+# -------------------
+AC_DEFUN([AC_TYPE_LONG_DOUBLE],
+[
+ AC_CACHE_CHECK([for long double], [ac_cv_type_long_double],
+ [if test "$GCC" = yes; then
+ ac_cv_type_long_double=yes
+ else
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [[/* The Stardent Vistra knows sizeof (long double), but does
+ not support it. */
+ long double foo = 0.0L;]],
+ [[/* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ sizeof (double) <= sizeof (long double)]])],
+ [ac_cv_type_long_double=yes],
+ [ac_cv_type_long_double=no])
+ fi])
+ if test $ac_cv_type_long_double = yes; then
+ AC_DEFINE([HAVE_LONG_DOUBLE], 1,
+ [Define to 1 if the system has the type `long double'.])
+ fi
+])
+
+
+# AC_TYPE_LONG_DOUBLE_WIDER
+# -------------------------
+AC_DEFUN([AC_TYPE_LONG_DOUBLE_WIDER],
+[
+ AC_CACHE_CHECK(
+ [for long double with more range or precision than double],
+ [ac_cv_type_long_double_wider],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [[#include <float.h>
+ long double const a[] =
+ {
+ 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON,
+ LDBL_MIN, LDBL_MAX, LDBL_EPSILON
+ };
+ long double
+ f (long double x)
+ {
+ return ((x + (unsigned long int) 10) * (-1 / x) + a[0]
+ + (x ? f (x) : 'c'));
+ }
+ ]],
+ [[(0 < ((DBL_MAX_EXP < LDBL_MAX_EXP)
+ + (DBL_MANT_DIG < LDBL_MANT_DIG)
+ - (LDBL_MAX_EXP < DBL_MAX_EXP)
+ - (LDBL_MANT_DIG < DBL_MANT_DIG)))
+ && (int) LDBL_EPSILON == 0
+ ]])],
+ ac_cv_type_long_double_wider=yes,
+ ac_cv_type_long_double_wider=no)])
+ if test $ac_cv_type_long_double_wider = yes; then
+ AC_DEFINE([HAVE_LONG_DOUBLE_WIDER], 1,
+ [Define to 1 if the type `long double' works and has more range or
+ precision than `double'.])
+ fi
+])# AC_TYPE_LONG_DOUBLE_WIDER
+
+
+# AC_C_LONG_DOUBLE
+# ----------------
+AU_DEFUN([AC_C_LONG_DOUBLE],
+ [
+ AC_TYPE_LONG_DOUBLE_WIDER
+ ac_cv_c_long_double=$ac_cv_type_long_double_wider
+ if test $ac_cv_c_long_double = yes; then
+ AC_DEFINE([HAVE_LONG_DOUBLE], 1,
+ [Define to 1 if the type `long double' works and has more range or
+ precision than `double'.])
+ fi
+ ],
+ [The macro `AC_C_LONG_DOUBLE' is obsolete.
+You should use `AC_TYPE_LONG_DOUBLE' or `AC_TYPE_LONG_DOUBLE_WIDER' instead.]
+)
+
+
+# _AC_TYPE_LONG_LONG_SNIPPET
+# --------------------------
+# 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));]])
+])
+
+
+# AC_TYPE_LONG_LONG_INT
+# ---------------------
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+ AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+ [ac_cv_type_long_long_int=yes
+ if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+ ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+ if test $ac_cv_type_long_long_int = yes; then
+ dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+ dnl If cross compiling, assume the bug is not important, since
+ dnl nobody cross compiles for this platform as far as we know.
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[@%:@include <limits.h>
+ @%:@ifndef LLONG_MAX
+ @%:@ define HALF \
+ (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+ @%:@ define LLONG_MAX (HALF - 1 + HALF)
+ @%:@endif]],
+ [[long long int n = 1;
+ int i;
+ for (i = 0; ; i++)
+ {
+ long long int m = n << i;
+ if (m >> i != n)
+ return 1;
+ if (LLONG_MAX / 2 < m)
+ break;
+ }
+ return 0;]])],
+ [],
+ [ac_cv_type_long_long_int=no],
+ [:])
+ fi
+ fi])
+ if test $ac_cv_type_long_long_int = yes; then
+ AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type `long long int'.])
+ fi
+])
+
+
+# AC_TYPE_UNSIGNED_LONG_LONG_INT
+# ------------------------------
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+ AC_CACHE_CHECK([for unsigned long long int],
+ [ac_cv_type_unsigned_long_long_int],
+ [ac_cv_type_unsigned_long_long_int=yes
+ if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+ AC_LINK_IFELSE(
+ [_AC_TYPE_LONG_LONG_SNIPPET],
+ [],
+ [ac_cv_type_unsigned_long_long_int=no])
+ fi])
+ if test $ac_cv_type_unsigned_long_long_int = yes; then
+ AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type `unsigned long long int'.])
+ fi
+])
+
+
+# AC_TYPE_MBSTATE_T
+# -----------------
+AC_DEFUN([AC_TYPE_MBSTATE_T],
+ [AC_CACHE_CHECK([for mbstate_t], ac_cv_type_mbstate_t,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT
+# include <wchar.h>],
+ [mbstate_t x; return sizeof x;])],
+ [ac_cv_type_mbstate_t=yes],
+ [ac_cv_type_mbstate_t=no])])
+ if test $ac_cv_type_mbstate_t = yes; then
+ AC_DEFINE([HAVE_MBSTATE_T], 1,
+ [Define to 1 if <wchar.h> declares mbstate_t.])
+ else
+ AC_DEFINE([mbstate_t], int,
+ [Define to a type if <wchar.h> does not define.])
+ fi])
+
+
+# AC_TYPE_UID_T
+# -------------
+# FIXME: Rewrite using AC_CHECK_TYPE.
+AN_IDENTIFIER([gid_t], [AC_TYPE_UID_T])
+AN_IDENTIFIER([uid_t], [AC_TYPE_UID_T])
+AC_DEFUN([AC_TYPE_UID_T],
+[AC_CACHE_CHECK(for uid_t in sys/types.h, ac_cv_type_uid_t,
+[AC_EGREP_HEADER(uid_t, sys/types.h,
+ ac_cv_type_uid_t=yes, ac_cv_type_uid_t=no)])
+if test $ac_cv_type_uid_t = no; then
+ AC_DEFINE(uid_t, int, [Define to `int' if <sys/types.h> doesn't define.])
+ AC_DEFINE(gid_t, int, [Define to `int' if <sys/types.h> doesn't define.])
+fi
+])
+
+
+AN_IDENTIFIER([size_t], [AC_TYPE_SIZE_T])
+AC_DEFUN([AC_TYPE_SIZE_T], [AC_CHECK_TYPE(size_t, unsigned int)])
+
+AN_IDENTIFIER([ssize_t], [AC_TYPE_SSIZE_T])
+AC_DEFUN([AC_TYPE_SSIZE_T], [AC_CHECK_TYPE(ssize_t, int)])
+
+AN_IDENTIFIER([pid_t], [AC_TYPE_PID_T])
+AC_DEFUN([AC_TYPE_PID_T], [AC_CHECK_TYPE(pid_t, int)])
+
+AN_IDENTIFIER([off_t], [AC_TYPE_OFF_T])
+AC_DEFUN([AC_TYPE_OFF_T], [AC_CHECK_TYPE(off_t, long int)])
+
+AN_IDENTIFIER([mode_t], [AC_TYPE_MODE_T])
+AC_DEFUN([AC_TYPE_MODE_T], [AC_CHECK_TYPE(mode_t, int)])
+
+AN_IDENTIFIER([int8_t], [AC_TYPE_INT8_T])
+AN_IDENTIFIER([int16_t], [AC_TYPE_INT16_T])
+AN_IDENTIFIER([int32_t], [AC_TYPE_INT32_T])
+AN_IDENTIFIER([int64_t], [AC_TYPE_INT64_T])
+AN_IDENTIFIER([uint8_t], [AC_TYPE_UINT8_T])
+AN_IDENTIFIER([uint16_t], [AC_TYPE_UINT16_T])
+AN_IDENTIFIER([uint32_t], [AC_TYPE_UINT32_T])
+AN_IDENTIFIER([uint64_t], [AC_TYPE_UINT64_T])
+AC_DEFUN([AC_TYPE_INT8_T], [_AC_TYPE_INT(8)])
+AC_DEFUN([AC_TYPE_INT16_T], [_AC_TYPE_INT(16)])
+AC_DEFUN([AC_TYPE_INT32_T], [_AC_TYPE_INT(32)])
+AC_DEFUN([AC_TYPE_INT64_T], [_AC_TYPE_INT(64)])
+AC_DEFUN([AC_TYPE_UINT8_T], [_AC_TYPE_UNSIGNED_INT(8)])
+AC_DEFUN([AC_TYPE_UINT16_T], [_AC_TYPE_UNSIGNED_INT(16)])
+AC_DEFUN([AC_TYPE_UINT32_T], [_AC_TYPE_UNSIGNED_INT(32)])
+AC_DEFUN([AC_TYPE_UINT64_T], [_AC_TYPE_UNSIGNED_INT(64)])
+
+# _AC_TYPE_INT_BODY
+# -----------------
+# Shell function body for _AC_TYPE_INT.
+m4_define([_AC_TYPE_INT_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for int$[]2_t], [$[]3],
+ [AS_VAR_SET([$[]3], [no])
+ # Order is important - never check a type that is potentially smaller
+ # than half of the expected target width.
+ for ac_type in int$[]2_t 'int' 'long int' \
+ 'long long int' 'short int' 'signed char'; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [AC_INCLUDES_DEFAULT
+ enum { N = $[]2 / 2 - 1 };],
+ [0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)])],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [AC_INCLUDES_DEFAULT
+ enum { N = $[]2 / 2 - 1 };],
+ [($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
+ < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2)])],
+ [],
+ [AS_CASE([$ac_type], [int$[]2_t],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [$ac_type])])])])
+ AS_VAR_IF([$[]3], [no], [], [break])
+ done])
+ AS_LINENO_POP
+])# _AC_TYPE_INT_BODY
+
+# _AC_TYPE_INT(NBITS)
+# -------------------
+# Set a variable ac_cv_c_intNBITS_t to `yes' if intNBITS_t is available,
+# `no' if it is not and no replacement types could be found, and a C type
+# if it is not available but a replacement signed integer type of width
+# exactly NBITS bits was found. In the third case, intNBITS_t is AC_DEFINEd
+# to type, as well.
+AC_DEFUN([_AC_TYPE_INT],
+[AC_REQUIRE_SHELL_FN([ac_fn_c_find_intX_t],
+ [AS_FUNCTION_DESCRIBE([ac_fn_c_find_intX_t], [LINENO BITS VAR],
+ [Finds a signed integer type with width BITS, setting cache variable VAR
+ accordingly.])],
+ [$0_BODY])]dnl
+[ac_fn_c_find_intX_t "$LINENO" "$1" "ac_cv_c_int$1_t"
+case $ac_cv_c_int$1_t in #(
+ no|yes) ;; #(
+ *)
+ AC_DEFINE_UNQUOTED([int$1_t], [$ac_cv_c_int$1_t],
+ [Define to the type of a signed integer type of width exactly $1 bits
+ if such a type exists and the standard includes do not define it.]);;
+esac
+])# _AC_TYPE_INT
+
+# _AC_TYPE_UNSIGNED_INT_BODY
+# --------------------------
+# Shell function body for _AC_TYPE_UNSIGNED_INT.
+m4_define([_AC_TYPE_UNSIGNED_INT_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for uint$[]2_t], $[]3,
+ [AS_VAR_SET([$[]3], [no])
+ # Order is important - never check a type that is potentially smaller
+ # than half of the expected target width.
+ for ac_type in uint$[]2_t 'unsigned int' 'unsigned long int' \
+ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(
+ [AC_INCLUDES_DEFAULT],
+ [(($ac_type) -1 >> ($[]2 / 2 - 1)) >> ($[]2 / 2 - 1) == 3])],
+ [AS_CASE([$ac_type], [uint$[]2_t],
+ [AS_VAR_SET([$[]3], [yes])],
+ [AS_VAR_SET([$[]3], [$ac_type])])])
+ AS_VAR_IF([$[]3], [no], [], [break])
+ done])
+ AS_LINENO_POP
+])# _AC_TYPE_UNSIGNED_INT_BODY
+
+
+# _AC_TYPE_UNSIGNED_INT(NBITS)
+# ----------------------------
+# Set a variable ac_cv_c_uintNBITS_t to `yes' if uintNBITS_t is available,
+# `no' if it is not and no replacement types could be found, and a C type
+# if it is not available but a replacement unsigned integer type of width
+# exactly NBITS bits was found. In the third case, uintNBITS_t is AC_DEFINEd
+# to type, as well.
+AC_DEFUN([_AC_TYPE_UNSIGNED_INT],
+[AC_REQUIRE_SHELL_FN([ac_fn_c_find_uintX_t],
+ [AS_FUNCTION_DESCRIBE([ac_fn_c_find_uintX_t], [LINENO BITS VAR],
+ [Finds an unsigned integer type with width BITS, setting cache variable VAR
+ accordingly.])],
+ [$0_BODY])]dnl
+[ac_fn_c_find_uintX_t "$LINENO" "$1" "ac_cv_c_uint$1_t"
+case $ac_cv_c_uint$1_t in #(
+ no|yes) ;; #(
+ *)
+ m4_bmatch([$1], [^\(8\|32\|64\)$],
+ [AC_DEFINE([_UINT$1_T], 1,
+ [Define for Solaris 2.5.1 so the uint$1_t typedef from
+ <sys/synch.h>, <pthread.h>, or <semaphore.h> is not used.
+ If the typedef were allowed, the #define below would cause a
+ syntax error.])])
+ AC_DEFINE_UNQUOTED([uint$1_t], [$ac_cv_c_uint$1_t],
+ [Define to the type of an unsigned integer type of width exactly $1 bits
+ if such a type exists and the standard includes do not define it.]);;
+ esac
+])# _AC_TYPE_UNSIGNED_INT
+
+# AC_TYPE_SIGNAL
+# --------------
+# Note that identifiers starting with SIG are reserved by ANSI C.
+# C89 requires signal handlers to return void; only K&R returned int;
+# modern code does not need to worry about using this macro (not to
+# mention that sigaction is better than signal).
+AU_DEFUN([AC_TYPE_SIGNAL],
+[AC_CACHE_CHECK([return type of signal handlers], ac_cv_type_signal,
+[AC_COMPILE_IFELSE(
+[AC_LANG_PROGRAM([#include <sys/types.h>
+#include <signal.h>
+],
+ [return *(signal (0, 0)) (0) == 1;])],
+ [ac_cv_type_signal=int],
+ [ac_cv_type_signal=void])])
+AC_DEFINE_UNQUOTED(RETSIGTYPE, $ac_cv_type_signal,
+ [Define as the return type of signal handlers
+ (`int' or `void').])
+], [your code may safely assume C89 semantics that RETSIGTYPE is void.
+Remove this warning and the `AC_CACHE_CHECK' when you adjust the code.])
+
+
+## ------------------------ ##
+## Checking size of types. ##
+## ------------------------ ##
+
+# ---------------- #
+# Generic checks. #
+# ---------------- #
+
+
+# AC_CHECK_SIZEOF(TYPE, [IGNORED], [INCLUDES = DEFAULT-INCLUDES])
+# ---------------------------------------------------------------
+AC_DEFUN([AC_CHECK_SIZEOF],
+[AS_LITERAL_IF(m4_translit([[$1]], [*], [p]), [],
+ [m4_fatal([$0: requires literal arguments])])]dnl
+[# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+_AC_CACHE_CHECK_INT([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])],
+ [(long int) (sizeof ($1))],
+ [AC_INCLUDES_DEFAULT([$3])],
+ [if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
+ AC_MSG_FAILURE([cannot compute sizeof ($1)], 77)
+ else
+ AS_TR_SH([ac_cv_sizeof_$1])=0
+ fi])
+
+AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_$1), $AS_TR_SH([ac_cv_sizeof_$1]),
+ [The size of `$1', as computed by sizeof.])
+])# AC_CHECK_SIZEOF
+
+
+# AC_CHECK_ALIGNOF(TYPE, [INCLUDES = DEFAULT-INCLUDES])
+# -----------------------------------------------------
+# TYPE can include braces and semicolon, which AS_TR_CPP and AS_TR_SH
+# (correctly) recognize as potential shell metacharacters. So we
+# have to flatten problematic characters ourselves to guarantee that
+# AC_DEFINE_UNQUOTED will see a literal.
+AC_DEFUN([AC_CHECK_ALIGNOF],
+[m4_if(m4_index(m4_translit([[$1]], [`\"], [$]), [$]), [-1], [],
+ [m4_fatal([$0: requires literal arguments])])]dnl
+[_$0([$1], [$2], m4_translit([[$1]], [{;}], [___]))])
+
+m4_define([_AC_CHECK_ALIGNOF],
+[# The cast to long int works around a bug in the HP C Compiler,
+# see AC_CHECK_SIZEOF for more information.
+_AC_CACHE_CHECK_INT([alignment of $1], [AS_TR_SH([ac_cv_alignof_$3])],
+ [(long int) offsetof (ac__type_alignof_, y)],
+ [AC_INCLUDES_DEFAULT([$2])
+#ifndef offsetof
+# define offsetof(type, member) ((char *) &((type *) 0)->member - (char *) 0)
+#endif
+typedef struct { char x; $1 y; } ac__type_alignof_;],
+ [if test "$AS_TR_SH([ac_cv_type_$3])" = yes; then
+ AC_MSG_FAILURE([cannot compute alignment of $1], 77)
+ else
+ AS_TR_SH([ac_cv_alignof_$3])=0
+ fi])
+
+AC_DEFINE_UNQUOTED(AS_TR_CPP(alignof_$3), $AS_TR_SH([ac_cv_alignof_$3]),
+ [The normal alignment of `$1', in bytes.])
+])# AC_CHECK_ALIGNOF
+
+
+# AU::AC_INT_16_BITS
+# ------------------
+# What a great name :)
+AU_DEFUN([AC_INT_16_BITS],
+[AC_CHECK_SIZEOF([int])
+test $ac_cv_sizeof_int = 2 &&
+ AC_DEFINE(INT_16_BITS, 1,
+ [Define to 1 if `sizeof (int)' = 2. Obsolete, use `SIZEOF_INT'.])
+], [your code should no longer depend upon `INT_16_BITS', but upon
+`SIZEOF_INT == 2'. Remove this warning and the `AC_DEFINE' when you
+adjust the code.])
+
+
+# AU::AC_LONG_64_BITS
+# -------------------
+AU_DEFUN([AC_LONG_64_BITS],
+[AC_CHECK_SIZEOF([long int])
+test $ac_cv_sizeof_long_int = 8 &&
+ AC_DEFINE(LONG_64_BITS, 1,
+ [Define to 1 if `sizeof (long int)' = 8. Obsolete, use
+ `SIZEOF_LONG_INT'.])
+], [your code should no longer depend upon `LONG_64_BITS', but upon
+`SIZEOF_LONG_INT == 8'. Remove this warning and the `AC_DEFINE' when
+you adjust the code.])
+
+
+
+## -------------------------- ##
+## Generic structure checks. ##
+## -------------------------- ##
+
+
+# ---------------- #
+# Generic checks. #
+# ---------------- #
+
+# _AC_CHECK_MEMBER_BODY
+# ---------------------
+# Shell function body for AC_CHECK_MEMBER.
+m4_define([_AC_CHECK_MEMBER_BODY],
+[ AS_LINENO_PUSH([$[]1])
+ AC_CACHE_CHECK([for $[]2.$[]3], [$[]4],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]5],
+[static $[]2 ac_aggr;
+if (ac_aggr.$[]3)
+return 0;])],
+ [AS_VAR_SET([$[]4], [yes])],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$[]5],
+[static $[]2 ac_aggr;
+if (sizeof ac_aggr.$[]3)
+return 0;])],
+ [AS_VAR_SET([$[]4], [yes])],
+ [AS_VAR_SET([$[]4], [no])])])])
+ AS_LINENO_POP
+])dnl
+
+# AC_CHECK_MEMBER(AGGREGATE.MEMBER,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# ---------------------------------------------------------
+# AGGREGATE.MEMBER is for instance `struct passwd.pw_gecos', shell
+# variables are not a valid argument.
+AC_DEFUN([AC_CHECK_MEMBER],
+[AC_REQUIRE_SHELL_FN([ac_fn_]_AC_LANG_ABBREV[_check_member],
+ [AS_FUNCTION_DESCRIBE([ac_fn_]_AC_LANG_ABBREV[_check_member],
+ [LINENO AGGR MEMBER VAR INCLUDES],
+ [Tries to find if the field MEMBER exists in type AGGR, after including
+ INCLUDES, setting cache variable VAR accordingly.])],
+ [_$0_BODY])]dnl
+[AS_LITERAL_IF([$1], [], [m4_fatal([$0: requires literal arguments])])]dnl
+[m4_if(m4_index([$1], [.]), [-1],
+ [m4_fatal([$0: Did not see any dot in `$1'])])]dnl
+[AS_VAR_PUSHDEF([ac_Member], [ac_cv_member_$1])]dnl
+[ac_fn_[]_AC_LANG_ABBREV[]_check_member "$LINENO" ]dnl
+[m4_bpatsubst([$1], [^\([^.]*\)\.\(.*\)], ["\1" "\2"]) "ac_Member" ]dnl
+["AS_ESCAPE([AC_INCLUDES_DEFAULT([$4])], [""])"
+AS_VAR_IF([ac_Member], [yes], [$2], [$3])
+AS_VAR_POPDEF([ac_Member])dnl
+])# AC_CHECK_MEMBER
+
+
+# _AC_CHECK_MEMBERS(AGGREGATE.MEMBER)
+# -----------------------------------
+# Helper to AC_CHECK_MEMBERS, which generates two of the four
+# arguments to AC_CHECK_MEMBER that are based on AGGREGATE and MEMBER.
+m4_define([_AC_CHECK_MEMBERS],
+[[$1], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1],
+ [Define to 1 if `]m4_bpatsubst([$1],
+ [^\([^.]*\)\.\(.*\)], [[\2' is a member of `\1]])['.])]])
+
+# AC_CHECK_MEMBERS([AGGREGATE.MEMBER, ...],
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
+# [INCLUDES = DEFAULT-INCLUDES])
+# ----------------------------------------------------------
+# The first argument is an m4 list.
+AC_DEFUN([AC_CHECK_MEMBERS],
+[m4_map_args_sep([AC_CHECK_MEMBER(_$0(], [)[
+$2], [$3], [$4])], [], $1)])
+
+
+
+# ------------------------------------------------------- #
+# Members that ought to be tested with AC_CHECK_MEMBERS. #
+# ------------------------------------------------------- #
+
+AN_IDENTIFIER([st_blksize], [AC_CHECK_MEMBERS([struct stat.st_blksize])])
+AN_IDENTIFIER([st_rdev], [AC_CHECK_MEMBERS([struct stat.st_rdev])])
+
+
+# Alphabetic order, please.
+
+# _AC_STRUCT_DIRENT(MEMBER)
+# -------------------------
+AC_DEFUN([_AC_STRUCT_DIRENT],
+[
+ AC_REQUIRE([AC_HEADER_DIRENT])
+ AC_CHECK_MEMBERS([struct dirent.$1], [], [],
+ [[
+#include <sys/types.h>
+#ifdef HAVE_DIRENT_H
+# include <dirent.h>
+#else
+# define dirent direct
+# ifdef HAVE_SYS_NDIR_H
+# include <sys/ndir.h>
+# endif
+# ifdef HAVE_SYS_DIR_H
+# include <sys/dir.h>
+# endif
+# ifdef HAVE_NDIR_H
+# include <ndir.h>
+# endif
+#endif
+ ]])
+])
+
+# AC_STRUCT_DIRENT_D_INO
+# ----------------------
+AC_DEFUN([AC_STRUCT_DIRENT_D_INO], [_AC_STRUCT_DIRENT([d_ino])])
+
+# AC_STRUCT_DIRENT_D_TYPE
+# -----------------------
+AC_DEFUN([AC_STRUCT_DIRENT_D_TYPE], [_AC_STRUCT_DIRENT([d_type])])
+
+
+# AC_STRUCT_ST_BLKSIZE
+# --------------------
+AU_DEFUN([AC_STRUCT_ST_BLKSIZE],
+[AC_CHECK_MEMBERS([struct stat.st_blksize],
+ [AC_DEFINE(HAVE_ST_BLKSIZE, 1,
+ [Define to 1 if your `struct stat' has
+ `st_blksize'. Deprecated, use
+ `HAVE_STRUCT_STAT_ST_BLKSIZE' instead.])])
+], [your code should no longer depend upon `HAVE_ST_BLKSIZE', but
+`HAVE_STRUCT_STAT_ST_BLKSIZE'. Remove this warning and
+the `AC_DEFINE' when you adjust the code.])# AC_STRUCT_ST_BLKSIZE
+
+
+# AC_STRUCT_ST_BLOCKS
+# -------------------
+# If `struct stat' contains an `st_blocks' member, define
+# HAVE_STRUCT_STAT_ST_BLOCKS. Otherwise, add `fileblocks.o' to the
+# output variable LIBOBJS. We still define HAVE_ST_BLOCKS for backward
+# compatibility. In the future, we will activate specializations for
+# this macro, so don't obsolete it right now.
+#
+# AC_OBSOLETE([$0], [; replace it with
+# AC_CHECK_MEMBERS([struct stat.st_blocks],
+# [AC_LIBOBJ([fileblocks])])
+# Please note that it will define `HAVE_STRUCT_STAT_ST_BLOCKS',
+# and not `HAVE_ST_BLOCKS'.])dnl
+#
+AN_IDENTIFIER([st_blocks], [AC_STRUCT_ST_BLOCKS])
+AC_DEFUN([AC_STRUCT_ST_BLOCKS],
+[AC_CHECK_MEMBERS([struct stat.st_blocks],
+ [AC_DEFINE(HAVE_ST_BLOCKS, 1,
+ [Define to 1 if your `struct stat' has
+ `st_blocks'. Deprecated, use
+ `HAVE_STRUCT_STAT_ST_BLOCKS' instead.])],
+ [AC_LIBOBJ([fileblocks])])
+])# AC_STRUCT_ST_BLOCKS
+
+
+# AC_STRUCT_ST_RDEV
+# -----------------
+AU_DEFUN([AC_STRUCT_ST_RDEV],
+[AC_CHECK_MEMBERS([struct stat.st_rdev],
+ [AC_DEFINE(HAVE_ST_RDEV, 1,
+ [Define to 1 if your `struct stat' has `st_rdev'.
+ Deprecated, use `HAVE_STRUCT_STAT_ST_RDEV'
+ instead.])])
+], [your code should no longer depend upon `HAVE_ST_RDEV', but
+`HAVE_STRUCT_STAT_ST_RDEV'. Remove this warning and
+the `AC_DEFINE' when you adjust the code.])# AC_STRUCT_ST_RDEV
+
+
+# AC_STRUCT_TM
+# ------------
+# FIXME: This macro is badly named, it should be AC_CHECK_TYPE_STRUCT_TM.
+# Or something else, but what? AC_CHECK_TYPE_STRUCT_TM_IN_SYS_TIME?
+AC_DEFUN([AC_STRUCT_TM],
+[AC_CACHE_CHECK([whether struct tm is in sys/time.h or time.h],
+ ac_cv_struct_tm,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
+#include <time.h>
+],
+ [struct tm tm;
+ int *p = &tm.tm_sec;
+ return !p;])],
+ [ac_cv_struct_tm=time.h],
+ [ac_cv_struct_tm=sys/time.h])])
+if test $ac_cv_struct_tm = sys/time.h; then
+ AC_DEFINE(TM_IN_SYS_TIME, 1,
+ [Define to 1 if your <sys/time.h> declares `struct tm'.])
+fi
+])# AC_STRUCT_TM
+
+
+# AC_STRUCT_TIMEZONE
+# ------------------
+# Figure out how to get the current timezone. If `struct tm' has a
+# `tm_zone' member, define `HAVE_TM_ZONE'. Otherwise, if the
+# external array `tzname' is found, define `HAVE_TZNAME'.
+AN_IDENTIFIER([tm_zone], [AC_STRUCT_TIMEZONE])
+AC_DEFUN([AC_STRUCT_TIMEZONE],
+[AC_REQUIRE([AC_STRUCT_TM])dnl
+AC_CHECK_MEMBERS([struct tm.tm_zone],,,[#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+])
+if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+ AC_DEFINE(HAVE_TM_ZONE, 1,
+ [Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+ `HAVE_STRUCT_TM_TM_ZONE' instead.])
+else
+ AC_CHECK_DECLS([tzname], , , [#include <time.h>])
+ AC_CACHE_CHECK(for tzname, ac_cv_var_tzname,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM(
+[[#include <time.h>
+#if !HAVE_DECL_TZNAME
+extern char *tzname[];
+#endif
+]],
+[[return tzname[0][0];]])],
+ [ac_cv_var_tzname=yes],
+ [ac_cv_var_tzname=no])])
+ if test $ac_cv_var_tzname = yes; then
+ AC_DEFINE(HAVE_TZNAME, 1,
+ [Define to 1 if you don't have `tm_zone' but do have the external
+ array `tzname'.])
+ fi
+fi
+])# AC_STRUCT_TIMEZONE
diff --git a/lib/autom4te.in b/lib/autom4te.in
new file mode 100644
index 0000000..a560501
--- /dev/null
+++ b/lib/autom4te.in
@@ -0,0 +1,165 @@
+# Definition of Autom4te option sets. -*- Makefile -*-
+#
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+## -------------------------- ##
+## Autoheader preselections. ##
+## -------------------------- ##
+
+begin-language: "Autoheader-preselections"
+args: --preselect AC_CONFIG_HEADERS
+args: --preselect AH_OUTPUT
+args: --preselect AC_DEFINE_TRACE_LITERAL
+end-language: "Autoheader-preselections"
+
+
+## ------------------------ ##
+## Automake-preselections. ##
+## ------------------------ ##
+
+begin-language: "Automake-preselections"
+args: --preselect AC_CANONICAL_BUILD
+args: --preselect AC_CANONICAL_HOST
+# AC_CANONICAL_SYSTEM was traced from Automake 1.7 to Automake 1.9.
+# Later versions trace AC_CANONICAL_TARGET instead.
+args: --preselect AC_CANONICAL_SYSTEM
+args: --preselect AC_CANONICAL_TARGET
+args: --preselect AC_CONFIG_AUX_DIR
+args: --preselect AC_CONFIG_FILES
+args: --preselect AC_CONFIG_HEADERS
+args: --preselect AC_CONFIG_LIBOBJ_DIR
+args: --preselect AC_CONFIG_LINKS
+args: --preselect AC_FC_FREEFORM
+args: --preselect AC_FC_SRCEXT
+args: --preselect AC_FC_PP_DEFINE
+args: --preselect AC_FC_PP_SRCEXT
+args: --preselect AC_INIT
+args: --preselect AC_LIBSOURCE
+args: --preselect AC_REQUIRE_AUX_FILE
+# Automake < 1.10 traces AC_SUBST. Automake >= 1.10 traces AC_SUBST_TRACE.
+args: --preselect AC_SUBST
+args: --preselect AC_SUBST_TRACE
+args: --preselect AM_AUTOMAKE_VERSION
+args: --preselect AM_CONDITIONAL
+args: --preselect AM_ENABLE_MULTILIB
+args: --preselect AM_GNU_GETTEXT
+args: --preselect AM_GNU_GETTEXT_INTL_SUBDIR
+args: --preselect AM_INIT_AUTOMAKE
+args: --preselect AM_MAKEFILE_INCLUDE
+args: --preselect AM_MAINTAINER_MODE
+args: --preselect AM_NLS
+args: --preselect AM_POT_TOOLS
+args: --preselect AM_PATH_GUILE
+args: --preselect AM_PROG_AR
+args: --preselect AM_PROG_CC_C_O
+args: --preselect AM_PROG_CXX_C_O
+args: --preselect AM_PROG_F77_C_O
+args: --preselect AM_PROG_FC_C_O
+args: --preselect AM_PROG_MOC
+args: --preselect AM_SILENT_RULES
+args: --preselect AM_XGETTEXT_OPTION
+args: --preselect _AM_MAKEFILE_INCLUDE
+args: --preselect _AM_SUBST_NOTMAKE
+args: --preselect _AM_COND_IF
+args: --preselect _AM_COND_ELSE
+args: --preselect _AM_COND_ENDIF
+args: --preselect LT_SUPPORTED_TAG
+args: --preselect _LT_AC_TAGCONFIG
+args: --preselect m4_include
+args: --preselect m4_sinclude
+end-language: "Automake-preselections"
+
+
+## -------------------------- ##
+## Autoreconf-preselections. ##
+## -------------------------- ##
+
+begin-language: "Autoreconf-preselections"
+args: --preselect AC_CONFIG_AUX_DIR
+args: --preselect AC_CONFIG_HEADERS
+args: --preselect AC_CONFIG_SUBDIRS
+args: --preselect AC_INIT
+args: --preselect AC_PROG_LIBTOOL
+args: --preselect LT_INIT
+args: --preselect LT_CONFIG_LTDL_DIR
+args: --preselect AM_GNU_GETTEXT
+end-language: "Autoreconf-preselections"
+
+
+## ----------------------------- ##
+## Autoconf without aclocal.m4. ##
+## ----------------------------- ##
+
+# This intermediate language is used by aclocal to build aclocal.m4.
+
+begin-language: "Autoconf-without-aclocal-m4"
+args: --prepend-include '@pkgdatadir@'
+args: --cache=autom4te.cache
+args: autoconf/autoconf.m4f
+args: acsite.m4?
+args: --mode 777
+args: --language M4sh
+end-language: "Autoconf-without-aclocal-m4"
+
+
+## ---------- ##
+## Autoconf. ##
+## ---------- ##
+
+begin-language: "Autoconf"
+args: --language Autoheader-preselections
+args: --language Automake-preselections
+args: --language Autoreconf-preselections
+args: --language Autoconf-without-aclocal-m4
+args: aclocal.m4?
+end-language: "Autoconf"
+
+
+## -------- ##
+## Autotest ##
+## -------- ##
+
+begin-language: "Autotest"
+args: --prepend-include '@pkgdatadir@'
+args: autotest/autotest.m4f
+args: package.m4?
+args: local.at?
+args: --mode 777
+args: --language M4sh
+end-language: "Autotest"
+
+
+## ---- ##
+## M4sh ##
+## ---- ##
+
+begin-language: "M4sh"
+args: --prepend-include '@pkgdatadir@'
+args: m4sugar/m4sh.m4f
+args: --mode 777
+args: --language M4sugar
+end-language: "M4sh"
+
+
+## ------- ##
+## M4sugar ##
+## ------- ##
+
+begin-language: "M4sugar"
+args: --prepend-include '@pkgdatadir@'
+args: m4sugar/m4sugar.m4f
+args: --warnings syntax
+end-language: "M4sugar"
diff --git a/lib/autoscan/Makefile.am b/lib/autoscan/Makefile.am
new file mode 100644
index 0000000..f4a2dea
--- /dev/null
+++ b/lib/autoscan/Makefile.am
@@ -0,0 +1,40 @@
+# Make Autoscan library.
+
+# Copyright (C) 2001-2002, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+autoscanlibdir = $(pkgdatadir)/autoscan
+
+EXTRA_DIST = autoscan.pre
+nodist_autoscanlib_DATA = autoscan.list
+CLEANFILES = autoscan.list
+
+## ------------------------ ##
+## Building autoscan.list. ##
+## ------------------------ ##
+
+## autoscan.list might change when autoconf.m4f sources change.
+## Therefore we want the same dependencies as autoconf.m4f, which
+## are listed in freeze.mk. It also ensure that tests/autom4te
+## is built (we need it in the command below).
+include ../freeze.mk
+
+autoscan.list: $(srcdir)/autoscan.pre $(autoconf_m4f_dependencies) Makefile.am
+ echo '# Automatically Generated: do not edit this file' >autoscan.list
+ sed '/^[#]/!q' $(srcdir)/autoscan.pre >>autoscan.list
+ ( \
+ sed -n '/^[^#]/p' $(srcdir)/autoscan.pre; \
+ $(MY_AUTOM4TE) --cache '' -M -l autoconf -t'AN_OUTPUT:$$1: $$2 $$3' \
+ ) | LC_ALL=C sort >>autoscan.list
diff --git a/lib/autoscan/Makefile.in b/lib/autoscan/Makefile.in
new file mode 100644
index 0000000..ea2abef
--- /dev/null
+++ b/lib/autoscan/Makefile.in
@@ -0,0 +1,524 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoscan library.
+
+# Copyright (C) 2001-2002, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/../freeze.mk $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+subdir = lib/autoscan
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(autoscanlibdir)"
+DATA = $(nodist_autoscanlib_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+autoscanlibdir = $(pkgdatadir)/autoscan
+EXTRA_DIST = autoscan.pre
+nodist_autoscanlib_DATA = autoscan.list
+CLEANFILES = autoscan.list
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/autoscan/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/autoscan/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-nodist_autoscanlibDATA: $(nodist_autoscanlib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autoscanlibdir)" || $(MKDIR_P) "$(DESTDIR)$(autoscanlibdir)"
+ @list='$(nodist_autoscanlib_DATA)'; test -n "$(autoscanlibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autoscanlibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autoscanlibdir)" || exit $$?; \
+ done
+
+uninstall-nodist_autoscanlibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_autoscanlib_DATA)'; test -n "$(autoscanlibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autoscanlibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autoscanlibdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(autoscanlibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_autoscanlibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-nodist_autoscanlibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-nodist_autoscanlibDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-nodist_autoscanlibDATA
+
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+autoscan.list: $(srcdir)/autoscan.pre $(autoconf_m4f_dependencies) Makefile.am
+ echo '# Automatically Generated: do not edit this file' >autoscan.list
+ sed '/^[#]/!q' $(srcdir)/autoscan.pre >>autoscan.list
+ ( \
+ sed -n '/^[^#]/p' $(srcdir)/autoscan.pre; \
+ $(MY_AUTOM4TE) --cache '' -M -l autoconf -t'AN_OUTPUT:$$1: $$2 $$3' \
+ ) | LC_ALL=C sort >>autoscan.list
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/autoscan/autoscan.pre b/lib/autoscan/autoscan.pre
new file mode 100644
index 0000000..d7892bb
--- /dev/null
+++ b/lib/autoscan/autoscan.pre
@@ -0,0 +1,16 @@
+# autoscan's mapping to Autoconf macros -*- Makefile -*-
+# Copyright (C) 1992-1994, 1996, 1999-2002, 2009-2012 Free Software
+# Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/lib/autotest/Makefile.am b/lib/autotest/Makefile.am
new file mode 100644
index 0000000..c70dafb
--- /dev/null
+++ b/lib/autotest/Makefile.am
@@ -0,0 +1,46 @@
+# Make Autotest library.
+
+# Copyright (C) 2001-2002, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+autotestlibdir = $(pkgdatadir)/autotest
+dist_autotestlib_DATA = autotest.m4 general.m4 specific.m4
+nodist_autotestlib_DATA = autotest.m4f
+CLEANFILES = $(nodist_autotestlib_DATA)
+
+## --------------- ##
+## Building TAGS. ##
+## --------------- ##
+
+TAGS_FILES = $(dist_autotestlib_DATA)
+
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+
+
+## -------- ##
+## Checks. ##
+## -------- ##
+
+check-local: check-forbidden-patterns
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_autotestlib_DATA)
+
+
+## ------------------ ##
+## The frozen files. ##
+## ------------------ ##
+
+autotest.m4f: $(autotest_m4f_dependencies)
+include ../freeze.mk
diff --git a/lib/autotest/Makefile.in b/lib/autotest/Makefile.in
new file mode 100644
index 0000000..a31632a
--- /dev/null
+++ b/lib/autotest/Makefile.in
@@ -0,0 +1,599 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autotest library.
+
+# Copyright (C) 2001-2002, 2009-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(dist_autotestlib_DATA) $(srcdir)/../freeze.mk \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = lib/autotest
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(autotestlibdir)" \
+ "$(DESTDIR)$(autotestlibdir)"
+DATA = $(dist_autotestlib_DATA) $(nodist_autotestlib_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+autotestlibdir = $(pkgdatadir)/autotest
+dist_autotestlib_DATA = autotest.m4 general.m4 specific.m4
+nodist_autotestlib_DATA = autotest.m4f
+CLEANFILES = $(nodist_autotestlib_DATA)
+TAGS_FILES = $(dist_autotestlib_DATA)
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_autotestlib_DATA)
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/autotest/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/autotest/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_autotestlibDATA: $(dist_autotestlib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autotestlibdir)" || $(MKDIR_P) "$(DESTDIR)$(autotestlibdir)"
+ @list='$(dist_autotestlib_DATA)'; test -n "$(autotestlibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autotestlibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autotestlibdir)" || exit $$?; \
+ done
+
+uninstall-dist_autotestlibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_autotestlib_DATA)'; test -n "$(autotestlibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autotestlibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autotestlibdir)" && rm -f $$files
+install-nodist_autotestlibDATA: $(nodist_autotestlib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(autotestlibdir)" || $(MKDIR_P) "$(DESTDIR)$(autotestlibdir)"
+ @list='$(nodist_autotestlib_DATA)'; test -n "$(autotestlibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(autotestlibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(autotestlibdir)" || exit $$?; \
+ done
+
+uninstall-nodist_autotestlibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_autotestlib_DATA)'; test -n "$(autotestlibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(autotestlibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(autotestlibdir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(autotestlibdir)" "$(DESTDIR)$(autotestlibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_autotestlibDATA \
+ install-nodist_autotestlibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_autotestlibDATA \
+ uninstall-nodist_autotestlibDATA
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+ clean-generic ctags distclean distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am \
+ install-dist_autotestlibDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man \
+ install-nodist_autotestlibDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-dist_autotestlibDATA \
+ uninstall-nodist_autotestlibDATA
+
+
+check-local: check-forbidden-patterns
+
+autotest.m4f: $(autotest_m4f_dependencies)
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/autotest/autotest.m4 b/lib/autotest/autotest.m4
new file mode 100644
index 0000000..11a3443
--- /dev/null
+++ b/lib/autotest/autotest.m4
@@ -0,0 +1,26 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# M4 macros used in building test suites.
+# Copyright (C) 2000-2002, 2009-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+m4_include([autotest/general.m4])
+m4_include([autotest/specific.m4])
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
new file mode 100644
index 0000000..60c0352
--- /dev/null
+++ b/lib/autotest/general.m4
@@ -0,0 +1,2215 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# M4 macros used in building test suites.
+m4_define([_AT_COPYRIGHT_YEARS], [
+Copyright (C) 2000-2012 Free Software Foundation, Inc.
+])
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+
+# _m4_divert(DIVERSION-NAME)
+# --------------------------
+# Convert a diversion name into its number. Otherwise, return
+# DIVERSION-NAME which is supposed to be an actual diversion number.
+# Of course it would be nicer to use m4_case here, instead of zillions
+# of little macros, but it then takes twice longer to run `autoconf'!
+#
+# From M4sugar:
+# -1. KILL
+# 10000. GROW
+#
+# From M4sh:
+# 0. BINSH
+# 1. HEADER-REVISION
+# 2. HEADER-COMMENT
+# 3. HEADER-COPYRIGHT
+# 4. M4SH-SANITIZE
+# 5. M4SH-INIT
+# 1000. BODY
+#
+# Defined below:
+# - DEFAULTS
+# Overall initialization, value of $at_groups_all.
+# - PARSE_ARGS_BEGIN
+# Setup defaults required for option processing.
+# - PARSE_ARGS
+# Option processing. After AT_INIT, user options can be entered here as
+# cases of a case statement.
+# - PARSE_ARGS_END
+# Finish up the option processing.
+#
+# - HELP
+# Start printing the help message.
+# - HELP_MODES
+# Modes help text. Additional modes can be appended as self-contained
+# cat'd here-docs as generated by AS_HELP_STRING.
+# - HELP_TUNING_BEGIN
+# Tuning help text. This is for Autotest-provided text.
+# - HELP_TUNING
+# Additional tuning options' help text can be appended here as
+# self-contained cat'd here-docs as generated by AS_HELP_STRING.
+# - HELP_OTHER
+# User help can be appended to this as self-contained cat'd here-docs.
+# - HELP_END
+# Finish up the help texts.
+#
+# - VERSION
+# Head of the handling of --version.
+# - VERSION_NOTICES
+# Copyright notices for --version.
+# - VERSION_END
+# Tail of the handling of --version.
+#
+# - BANNERS
+# Output shell initialization for the associative array of banner text.
+# - TESTS_BEGIN
+# Like DEFAULTS but run after argument processing for purposes of
+# optimization. Do anything else that needs to be done to prepare for
+# tests. Sets up verbose and log file descriptors. Sets and logs PATH.
+# - PREPARE_TESTS
+# Declares functions shared among the tests. Perform any user
+# initialization to be shared among all tests.
+# - TESTS
+# The core of the test suite.
+#
+# - TEST_SCRIPT
+# The collector for code for each test, the ``normal'' diversion, but
+# undiverted into other locations before final output.
+#
+# - TEST_GROUPS
+# Contents of each test group. The tests deliberately occur after the
+# end of the shell script, so that the shell need not spend time parsing
+# commands it will not execute.
+
+m4_define([_m4_divert(DEFAULTS)], 100)
+m4_define([_m4_divert(PARSE_ARGS_BEGIN)], 200)
+m4_define([_m4_divert(PARSE_ARGS)], 201)
+m4_define([_m4_divert(PARSE_ARGS_END)], 202)
+m4_define([_m4_divert(HELP)], 300)
+m4_define([_m4_divert(HELP_MODES)], 301)
+m4_define([_m4_divert(HELP_TUNING_BEGIN)], 302)
+m4_define([_m4_divert(HELP_TUNING)], 303)
+m4_define([_m4_divert(HELP_OTHER)], 304)
+m4_define([_m4_divert(HELP_END)], 305)
+m4_define([_m4_divert(VERSION)], 350)
+m4_define([_m4_divert(VERSION_NOTICES)], 351)
+m4_define([_m4_divert(VERSION_END)], 352)
+m4_define([_m4_divert(BANNERS)], 400)
+m4_define([_m4_divert(TESTS_BEGIN)], 401)
+m4_define([_m4_divert(PREPARE_TESTS)], 402)
+m4_define([_m4_divert(TESTS)], 403)
+m4_define([_m4_divert(TEST_SCRIPT)], 450)
+m4_define([_m4_divert(TEST_GROUPS)], 500)
+
+
+# AT_LINE
+# -------
+# Return the current file sans directory, a colon, and the current
+# line. Be sure to return a _quoted_ file name, so if, for instance,
+# the user is lunatic enough to have a file named `dnl' (and I, for
+# one, love to be brainless and stubborn sometimes), then we return a
+# quoted name.
+#
+# Gee, we can't use simply
+#
+# m4_bpatsubst(__file__, [^.*/\(.*\)], [[\1]])
+#
+# since then, since `dnl' doesn't match the pattern, it is returned
+# with once quotation level less, so you lose! And since GNU M4
+# is one of the biggest junk in the whole universe wrt regexp, don't
+# even think about using `?' or `\?'. Bah, `*' will do.
+# Pleeeeeeeease, Gary, provide us with dirname and ERE!
+#
+# M4 recompiles the regular expression for every m4_bpatsubst, but __file__
+# rarely changes. Be fast - only compute the dirname when necessary; for
+# autoconf alone, this shaves off several seconds in building testsuite.
+m4_define([_AT_LINE_file])
+m4_define([_AT_LINE_base])
+m4_define([AT_LINE],
+[m4_if(m4_defn([_AT_LINE_file]), __file__, [],
+ [m4_do([m4_define([_AT_LINE_file], __file__)],
+ [m4_define([_AT_LINE_base],
+ m4_bregexp(/__file__, [/\([^/]*\)$], [[\1]]))])])dnl
+m4_defn([_AT_LINE_base]):__line__])
+
+# _AT_LINE_ESCAPED
+# ----------------
+# Same as AT_LINE, but already escaped for the shell.
+m4_define([_AT_LINE_ESCAPED], ["AS_ESCAPE(m4_dquote(AT_LINE))"])
+
+
+# _AT_NORMALIZE_TEST_GROUP_NUMBER(SHELL-VAR)
+# ------------------------------------------
+# Normalize SHELL-VAR so that its value has the same number of digits as
+# all the other test group numbers.
+m4_define([_AT_NORMALIZE_TEST_GROUP_NUMBER],
+[
+ eval 'while :; do
+ case $$1 in #(
+ '"$at_format"'*) break;;
+ esac
+ $1=0$$1
+ done'
+])
+
+# _AT_DEFINE_INIT(NAME, [DEFINITION])
+# -----------------------------------
+# Define macro NAME to die if invoked prior to AT_INIT, and to DEFINITION
+# after AT_INIT.
+m4_define([_AT_DEFINE_INIT],
+[m4_define($@)m4_pushdef([$1], [m4_fatal([$1: missing AT_INIT detected])])dnl
+m4_append([_AT_DEFINE_INIT_LIST], [[$1]], [,])])
+
+# _AT_DEFINE_SETUP(NAME, [DEFINITION])
+# ------------------------------------
+# Define macro NAME to die if invoked outside AT_SETUP/AT_CLEANUP, and
+# to DEFINITION otherwise.
+m4_define([_AT_DEFINE_SETUP],
+[m4_define([$1], [m4_ifndef([AT_ingroup],
+ [m4_fatal([$1: missing AT_SETUP detected])])$2])])
+
+
+# AT_INIT([TESTSUITE-NAME])
+# -------------------------
+# Begin test suite.
+m4_define([AT_INIT],
+[m4_pushdef([AT_INIT], [m4_fatal([$0: invoked multiple times])])]
+[m4_pattern_forbid([^_?AT_])]
+[m4_pattern_allow([^_ATEOF$])]
+[m4_ifndef([AT_PACKAGE_BUGREPORT], [m4_fatal(
+ [$1: AT_PACKAGE_BUGREPORT is missing, consider writing package.m4])])]
+[m4_define([AT_TESTSUITE_NAME],
+ m4_defn([AT_PACKAGE_STRING])[ test suite]m4_ifval([$1],
+ [m4_expand([: $1])]))]
+[m4_define([AT_ordinal], 0)]
+[m4_define([AT_banner_ordinal], 0)]
+[m4_define([AT_help_all], [])]
+[m4_map_args([_m4_popdef], _AT_DEFINE_INIT_LIST)]
+[m4_wrap([_AT_FINISH])]
+[AS_INIT[]]dnl
+dnl We don't use m4sh's BODY diversion, but AS_INIT sticks a banner there.
+dnl This trick removes that banner, since it adds nothing to autotest.
+[m4_cleardivert([BODY])]dnl
+[AS_ME_PREPARE[]]dnl
+[m4_divert_push([DEFAULTS])]dnl
+[AT_COPYRIGHT(m4_defn([_AT_COPYRIGHT_YEARS]), [
+m4_copyright_condense])]
+[AT_COPYRIGHT(
+[This test suite is free software; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.], [m4_echo])]
+[AS_PREPARE
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# How were we run?
+at_cli_args="$[@]"
+
+m4_divert_push([BANNERS])dnl
+
+# Should we print banners? Yes if more than one test is run.
+case $at_groups in #(
+ *$as_nl* )
+ at_print_banners=: ;; #(
+ * ) at_print_banners=false ;;
+esac
+# Text for banner N, set to a single space once printed.
+m4_divert_pop([BANNERS])dnl back to DEFAULTS
+m4_divert_push([PREPARE_TESTS])dnl
+
+m4_text_box([Autotest shell functions.])
+
+AS_FUNCTION_DESCRIBE([at_fn_banner], [NUMBER],
+[Output banner NUMBER, provided the testsuite is running multiple groups
+and this particular banner has not yet been printed.])
+at_fn_banner ()
+{
+ $at_print_banners || return 0
+ eval at_banner_text=\$at_banner_text_$[1]
+ test "x$at_banner_text" = "x " && return 0
+ eval "at_banner_text_$[1]=\" \""
+ if test -z "$at_banner_text"; then
+ $at_first || echo
+ else
+ AS_ECHO(["$as_nl$at_banner_text$as_nl"])
+ fi
+} # at_fn_banner
+
+AS_FUNCTION_DESCRIBE([at_fn_check_prepare_notrace], [REASON LINE],
+[Perform AT_CHECK preparations for the command at LINE for an
+untraceable command; REASON is the reason for disabling tracing.])
+at_fn_check_prepare_notrace ()
+{
+ $at_trace_echo "Not enabling shell tracing (command contains $[1])"
+ AS_ECHO(["$[2]"]) >"$at_check_line_file"
+ at_check_trace=: at_check_filter=:
+ : >"$at_stdout"; : >"$at_stderr"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_check_prepare_trace], [LINE],
+[Perform AT_CHECK preparations for the command at LINE for a traceable
+command.])
+at_fn_check_prepare_trace ()
+{
+ AS_ECHO(["$[1]"]) >"$at_check_line_file"
+ at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
+ : >"$at_stdout"; : >"$at_stderr"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_check_prepare_dynamic], [COMMAND LINE],
+[Decide if COMMAND at LINE is traceable at runtime, and call the
+appropriate preparation function.])
+at_fn_check_prepare_dynamic ()
+{
+ case $[1] in
+ *$as_nl*)
+ at_fn_check_prepare_notrace 'an embedded newline' "$[2]" ;;
+ *)
+ at_fn_check_prepare_trace "$[2]" ;;
+ esac
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_filter_trace], [],
+[Remove the lines in the file "$at_stderr" generated by "set -x" and print
+them to stderr.])
+at_fn_filter_trace ()
+{
+ mv "$at_stderr" "$at_stder1"
+ grep '^ *+' "$at_stder1" >&2
+ grep -v '^ *+' "$at_stder1" >"$at_stderr"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_log_failure], [FILE-LIST],
+[Copy the files in the list on stdout with a "> " prefix, and exit the shell
+with a failure exit code.])
+at_fn_log_failure ()
+{
+ for file
+ do AS_ECHO(["$file:"]); sed 's/^/> /' "$file"; done
+ echo 1 > "$at_status_file"
+ exit 1
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_check_skip], [EXIT-CODE LINE],
+[Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
+the test group subshell with that same exit code. Use LINE in any report
+about test failure.])
+at_fn_check_skip ()
+{
+ case $[1] in
+ 99) echo 99 > "$at_status_file"; at_failed=:
+ AS_ECHO(["$[2]: hard failure"]); exit 99;;
+ 77) echo 77 > "$at_status_file"; exit 77;;
+ esac
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_check_status], [EXPECTED EXIT-CODE LINE],
+[Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing.
+Otherwise, if it is 77 or 99, exit the test group subshell with that same
+exit code; if it is anything else print an error message referring to LINE,
+and fail the test.])
+at_fn_check_status ()
+{
+dnl This order ensures that we don't `skip' if we are precisely checking
+dnl $? = 77 or $? = 99.
+ case $[2] in
+ $[1] ) ;;
+ 77) echo 77 > "$at_status_file"; exit 77;;
+ 99) echo 99 > "$at_status_file"; at_failed=:
+ AS_ECHO(["$[3]: hard failure"]); exit 99;;
+ *) AS_ECHO(["$[3]: exit code was $[2], expected $[1]"])
+ at_failed=:;;
+ esac
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_diff_devnull], [FILE],
+[Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless
+diff invocations.])
+at_fn_diff_devnull ()
+{
+ test -s "$[1]" || return 0
+ $at_diff "$at_devnull" "$[1]"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_test], [NUMBER],
+[Parse out test NUMBER from the tail of this file.])
+at_fn_test ()
+{
+ eval at_sed=\$at_sed$[1]
+ sed "$at_sed" "$at_myself" > "$at_test_source"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_create_debugging_script], [],
+[Create the debugging script $at_group_dir/run which will reproduce the
+current test group.])
+at_fn_create_debugging_script ()
+{
+ {
+ echo "#! /bin/sh" &&
+ echo 'test "${ZSH_VERSION+set}" = set dnl
+&& alias -g '\''${1+"$[@]"}'\''='\''"$[@]"'\''' &&
+ AS_ECHO(["cd '$at_dir'"]) &&
+ AS_ECHO(["exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d ]dnl
+[$at_debug_args $at_group \${1+\"\$[@]\"}"]) &&
+ echo 'exit 1'
+ } >"$at_group_dir/run" &&
+ chmod +x "$at_group_dir/run"
+}
+
+m4_text_box([End of autotest shell functions.])
+m4_divert_pop([PREPARE_TESTS])dnl back to DEFAULTS
+
+# Not all shells have the 'times' builtin; the subshell is needed to make
+# sure we discard the 'times: not found' message from the shell.
+at_times_p=false
+(times) >/dev/null 2>&1 && at_times_p=:
+
+# CLI Arguments to pass to the debugging scripts.
+at_debug_args=
+# -e sets to true
+at_errexit_p=false
+# Shall we be verbose? ':' means no, empty means yes.
+at_verbose=:
+at_quiet=
+# Running several jobs in parallel, 0 means as many as test groups.
+at_jobs=1
+at_traceon=:
+at_trace_echo=:
+at_check_filter_trace=:
+
+# Shall we keep the debug scripts? Must be `:' when the suite is
+# run by a debug script, so that the script doesn't remove itself.
+at_debug_p=false
+# Display help message?
+at_help_p=false
+# Display the version message?
+at_version_p=false
+# List test groups?
+at_list_p=false
+# --clean
+at_clean=false
+# Test groups to run
+at_groups=
+# Whether to rerun failed tests.
+at_recheck=
+# Whether a write failure occurred
+at_write_fail=0
+
+# The directory we run the suite in. Default to . if no -C option.
+at_dir=`pwd`
+# An absolute reference to this testsuite script.
+dnl m4-double quote, to preserve []
+[case $as_myself in
+ [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
+ * ) at_myself=$at_dir/$as_myself ;;
+esac]
+# Whether -C is in effect.
+at_change_dir=false
+m4_divert_pop([DEFAULTS])dnl
+m4_define([_AT_FINISH],
+[m4_ifdef([AT_ingroup], [m4_fatal([missing AT_CLEANUP detected])])dnl
+m4_divert_text([DEFAULTS],
+[
+# Whether to enable colored test results.
+at_color=m4_ifdef([AT_color], [AT_color], [no])
+# List of the tested programs.
+at_tested='m4_ifdef([AT_tested],
+ [m4_translit(m4_dquote(m4_defn([AT_tested])), [ ], m4_newline)])'
+# As many question marks as there are digits in the last test group number.
+# Used to normalize the test group numbers so that `ls' lists them in
+# numerical order.
+at_format='m4_bpatsubst(m4_defn([AT_ordinal]), [.], [?])'
+# Description of all the test groups.
+at_help_all="AS_ESCAPE(m4_dquote(m4_defn([AT_help_all])))"
+# List of the all the test groups.
+at_groups_all=`AS_ECHO(["$at_help_all"]) | sed 's/;.*//'`
+
+AS_FUNCTION_DESCRIBE([at_fn_validate_ranges], [NAME...],
+[Validate and normalize the test group number contained in each
+variable NAME. Leading zeroes are treated as decimal.])
+at_fn_validate_ranges ()
+{
+ for at_grp
+ do
+ eval at_value=\$$at_grp
+ if test $at_value -lt 1 || test $at_value -gt AT_ordinal; then
+ AS_ECHO(["invalid test group: $at_value"]) >&2
+ exit 1
+ fi
+ case $at_value in
+ 0*) # We want to treat leading 0 as decimal, like expr and test, but
+ # AS_VAR_ARITH treats it as octal if it uses $(( )).
+ # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
+ # expr fork, but it is not worth the effort to determine if the
+ # shell supports XSI when the user can just avoid leading 0.
+ eval $at_grp='`expr $at_value + 0`' ;;
+ esac
+ done
+}])])dnl
+m4_divert_push([PARSE_ARGS])dnl
+
+at_prev=
+for at_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$at_prev"; then
+ at_option=$at_prev=$at_option
+ at_prev=
+ fi
+
+ case $at_option in
+ *=?*) at_optarg=`expr "X$at_option" : '[[^=]]*=\(.*\)'` ;;
+ *) at_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $at_option in
+ --help | -h )
+ at_help_p=:
+ ;;
+
+ --list | -l )
+ at_list_p=:
+ ;;
+
+ --version | -V )
+ at_version_p=:
+ ;;
+
+ --clean | -c )
+ at_clean=:
+ ;;
+
+ --color )
+ at_color=always
+ ;;
+ --color=* )
+ case $at_optarg in
+ no | never | none) at_color=never ;;
+ auto | tty | if-tty) at_color=auto ;;
+ always | yes | force) at_color=always ;;
+ *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'`
+ AS_ERROR([unrecognized argument to $at_optname: $at_optarg]) ;;
+ esac
+ ;;
+
+ --debug | -d )
+ at_debug_p=:
+ ;;
+
+ --errexit | -e )
+ at_debug_p=:
+ at_errexit_p=:
+ ;;
+
+ --verbose | -v )
+ at_verbose=; at_quiet=:
+ ;;
+
+ --trace | -x )
+ at_traceon='set -x'
+ at_trace_echo=echo
+ at_check_filter_trace=at_fn_filter_trace
+ ;;
+
+ [[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]])
+ at_fn_validate_ranges at_option
+ AS_VAR_APPEND([at_groups], ["$at_option$as_nl"])
+ ;;
+
+ # Ranges
+ [[0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-])
+ at_range_start=`echo $at_option |tr -d X-`
+ at_fn_validate_ranges at_range_start
+ at_range=`AS_ECHO(["$at_groups_all"]) | \
+ sed -ne '/^'$at_range_start'$/,$p'`
+ AS_VAR_APPEND([at_groups], ["$at_range$as_nl"])
+ ;;
+
+ [-[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]])
+ at_range_end=`echo $at_option |tr -d X-`
+ at_fn_validate_ranges at_range_end
+ at_range=`AS_ECHO(["$at_groups_all"]) | \
+ sed -ne '1,/^'$at_range_end'$/p'`
+ AS_VAR_APPEND([at_groups], ["$at_range$as_nl"])
+ ;;
+
+ [[0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9]] | \
+ [[0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9]] | \
+ [[0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9]] | \
+ [[0-9][0-9][0-9]-[0-9][0-9][0-9]] | \
+ [[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] | \
+ [[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] )
+ at_range_start=`expr $at_option : '\(.*\)-'`
+ at_range_end=`expr $at_option : '.*-\(.*\)'`
+ if test $at_range_start -gt $at_range_end; then
+ at_tmp=$at_range_end
+ at_range_end=$at_range_start
+ at_range_start=$at_tmp
+ fi
+ at_fn_validate_ranges at_range_start at_range_end
+ at_range=`AS_ECHO(["$at_groups_all"]) | \
+ sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'`
+ AS_VAR_APPEND([at_groups], ["$at_range$as_nl"])
+ ;;
+
+ # Directory selection.
+ --directory | -C )
+ at_prev=--directory
+ ;;
+ --directory=* )
+ at_change_dir=:
+ at_dir=$at_optarg
+ if test x- = "x$at_dir" ; then
+ at_dir=./-
+ fi
+ ;;
+
+ # Parallel execution.
+ --jobs | -j )
+ at_jobs=0
+ ;;
+ --jobs=* | -j[[0-9]]* )
+ if test -n "$at_optarg"; then
+ at_jobs=$at_optarg
+ else
+ at_jobs=`expr X$at_option : 'X-j\(.*\)'`
+ fi
+ case $at_jobs in *[[!0-9]]*)
+ at_optname=`echo " $at_option" | sed 's/^ //; s/[[0-9=]].*//'`
+ AS_ERROR([non-numeric argument to $at_optname: $at_jobs]) ;;
+ esac
+ ;;
+
+ # Keywords.
+ --keywords | -k )
+ at_prev=--keywords
+ ;;
+ --keywords=* )
+ at_groups_selected=$at_help_all
+ at_save_IFS=$IFS
+ IFS=,
+ set X $at_optarg
+ shift
+ IFS=$at_save_IFS
+ for at_keyword
+ do
+ at_invert=
+ case $at_keyword in
+ '!'*)
+ at_invert="-v"
+ at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'`
+ ;;
+ esac
+ # It is on purpose that we match the test group titles too.
+ at_groups_selected=`AS_ECHO(["$at_groups_selected"]) |
+ grep -i $at_invert ["^[1-9][^;]*;.*[; ]$at_keyword[ ;]"]`
+ done
+ # Smash the keywords.
+ at_groups_selected=`AS_ECHO(["$at_groups_selected"]) | sed 's/;.*//'`
+ AS_VAR_APPEND([at_groups], ["$at_groups_selected$as_nl"])
+ ;;
+ --recheck)
+ at_recheck=:
+ ;;
+m4_divert_pop([PARSE_ARGS])dnl
+dnl Process *=* last to allow for user specified --option=* type arguments.
+m4_divert_push([PARSE_ARGS_END])dnl
+
+ *=*)
+ at_envvar=`expr "x$at_option" : 'x\([[^=]]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $at_envvar in
+ '' | [[0-9]]* | *[[!_$as_cr_alnum]]* )
+ AS_ERROR([invalid variable name: `$at_envvar']) ;;
+ esac
+ at_value=`AS_ECHO(["$at_optarg"]) | sed "s/'/'\\\\\\\\''/g"`
+ # Export now, but save eval for later and for debug scripts.
+ export $at_envvar
+ AS_VAR_APPEND([at_debug_args], [" $at_envvar='$at_value'"])
+ ;;
+
+ *) AS_ECHO(["$as_me: invalid option: $at_option"]) >&2
+ AS_ECHO(["Try \`$[0] --help' for more information."]) >&2
+ exit 1
+ ;;
+ esac
+done
+
+# Verify our last option didn't require an argument
+AS_IF([test -n "$at_prev"], [AS_ERROR([`$at_prev' requires an argument])])
+
+# The file containing the suite.
+at_suite_log=$at_dir/$as_me.log
+
+# Selected test groups.
+if test -z "$at_groups$at_recheck"; then
+ at_groups=$at_groups_all
+else
+ if test -n "$at_recheck" && test -r "$at_suite_log"; then
+ at_oldfails=`sed -n ['
+ /^Failed tests:$/,/^Skipped tests:$/{
+ s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+ }
+ /^Unexpected passes:$/,/^## Detailed failed tests/{
+ s/^[ ]*\([1-9][0-9]*\):.*/\1/p
+ }
+ /^## Detailed failed tests/q
+ '] "$at_suite_log"`
+ AS_VAR_APPEND([at_groups], ["$at_oldfails$as_nl"])
+ fi
+ # Sort the tests, removing duplicates.
+ at_groups=`AS_ECHO(["$at_groups"]) | sort -nu | sed '/^$/d'`
+fi
+
+if test x"$at_color" = xalways \
+ || { test x"$at_color" = xauto && test -t 1; }; then
+ at_red=`printf '\033@<:@0;31m'`
+ at_grn=`printf '\033@<:@0;32m'`
+ at_lgn=`printf '\033@<:@1;32m'`
+ at_blu=`printf '\033@<:@1;34m'`
+ at_std=`printf '\033@<:@m'`
+else
+ at_red= at_grn= at_lgn= at_blu= at_std=
+fi
+m4_divert_pop([PARSE_ARGS_END])dnl
+m4_divert_push([HELP])dnl
+
+# Help message.
+if $at_help_p; then
+ cat <<_ATEOF || at_write_fail=1
+Usage: $[0] [[OPTION]... [VARIABLE=VALUE]... [TESTS]]
+
+Run all the tests, or the selected TESTS, given by numeric ranges, and
+save a detailed log file. Upon failure, create debugging scripts.
+
+Do not change environment variables directly. Instead, set them via
+command line arguments. Set \`AUTOTEST_PATH' to select the executables
+to exercise. Each relative directory is expanded as build and source
+directories relative to the top level of this distribution.
+E.g., from within the build directory /tmp/foo-1.0, invoking this:
+
+ $ $[0] AUTOTEST_PATH=bin
+
+is equivalent to the following, assuming the source directory is /src/foo-1.0:
+
+ PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $[0]
+_ATEOF
+m4_divert_pop([HELP])dnl
+m4_divert_push([HELP_MODES])dnl
+cat <<_ATEOF || at_write_fail=1
+
+Operation modes:
+ -h, --help print the help message, then exit
+ -V, --version print version number, then exit
+ -c, --clean remove all the files this test suite might create and exit
+ -l, --list describes all the tests, or the selected TESTS
+_ATEOF
+m4_divert_pop([HELP_MODES])dnl
+m4_wrap([m4_divert_push([HELP_TUNING_BEGIN])dnl
+cat <<_ATEOF || at_write_fail=1
+
+dnl extra quoting prevents emacs whitespace mode from putting tabs in output
+Execution tuning:
+ -C, --directory=DIR
+[ change to directory DIR before starting]
+ --color[[=never|auto|always]]
+[ ]m4_ifdef([AT_color],
+ [disable colored test results, or enable even without terminal],
+ [enable colored test results on terminal, or always])
+ -j, --jobs[[=N]]
+[ Allow N jobs at once; infinite jobs with no arg (default 1)]
+ -k, --keywords=KEYWORDS
+[ select the tests matching all the comma-separated KEYWORDS]
+[ multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD]
+ --recheck select all tests that failed or passed unexpectedly last time
+ -e, --errexit abort as soon as a test fails; implies --debug
+ -v, --verbose force more detailed output
+[ default for debugging scripts]
+ -d, --debug inhibit clean up and top-level logging
+[ default for debugging scripts]
+ -x, --trace enable tests shell tracing
+_ATEOF
+m4_divert_pop([HELP_TUNING_BEGIN])])dnl
+m4_divert_push([HELP_END])dnl
+cat <<_ATEOF || at_write_fail=1
+
+Report bugs to <AT_PACKAGE_BUGREPORT>.dnl
+m4_ifdef([AT_PACKAGE_NAME],
+[m4_ifset([AT_PACKAGE_URL], [
+m4_defn([AT_PACKAGE_NAME]) home page: <AT_PACKAGE_URL>.])dnl
+m4_if(m4_index(m4_defn([AT_PACKAGE_NAME]), [GNU ]), [0], [
+General help using GNU software: <http://www.gnu.org/gethelp/>.])])
+_ATEOF
+ exit $at_write_fail
+fi
+
+# List of tests.
+if $at_list_p; then
+ cat <<_ATEOF || at_write_fail=1
+AT_TESTSUITE_NAME test groups:
+
+ NUM: FILE-NAME:LINE TEST-GROUP-NAME
+ KEYWORDS
+
+_ATEOF
+ # Pass an empty line as separator between selected groups and help.
+ AS_ECHO(["$at_groups$as_nl$as_nl$at_help_all"]) |
+ awk 'NF == 1 && FS != ";" {
+ selected[[$ 1]] = 1
+ next
+ }
+ /^$/ { FS = ";" }
+ NF > 0 {
+ if (selected[[$ 1]]) {
+ printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
+ if ($ 4) {
+ lmax = 79
+ indent = " "
+ line = indent
+ len = length (line)
+ n = split ($ 4, a, " ")
+ for (i = 1; i <= n; i++) {
+ l = length (a[[i]]) + 1
+ if (i > 1 && len + l > lmax) {
+ print line
+ line = indent " " a[[i]]
+ len = length (line)
+ } else {
+ line = line " " a[[i]]
+ len += l
+ }
+ }
+ if (n)
+ print line
+ }
+ }
+ }' || at_write_fail=1
+ exit $at_write_fail
+fi
+m4_divert_pop([HELP_END])dnl
+m4_divert_push([VERSION])dnl
+if $at_version_p; then
+ AS_ECHO(["$as_me (AT_PACKAGE_STRING)"]) &&
+ cat <<\_ATEOF || at_write_fail=1
+m4_divert_pop([VERSION])dnl
+m4_divert_push([VERSION_END])dnl
+_ATEOF
+ exit $at_write_fail
+fi
+m4_divert_pop([VERSION_END])dnl
+m4_divert_push([TESTS_BEGIN])dnl
+
+# Take any -C into account.
+if $at_change_dir ; then
+ test x != "x$at_dir" && cd "$at_dir" \
+ || AS_ERROR([unable to change directory])
+ at_dir=`pwd`
+fi
+
+# Load the config files for any default variable assignments.
+for at_file in atconfig atlocal
+do
+ test -r $at_file || continue
+ . ./$at_file || AS_ERROR([invalid content: $at_file])
+done
+
+# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
+: "${at_top_build_prefix=$at_top_builddir}"
+
+# Perform any assignments requested during argument parsing.
+eval "$at_debug_args"
+
+# atconfig delivers names relative to the directory the test suite is
+# in, but the groups themselves are run in testsuite-dir/group-dir.
+if test -n "$at_top_srcdir"; then
+ builddir=../..
+ for at_dir_var in srcdir top_srcdir top_build_prefix
+ do
+ AS_VAR_COPY([at_val], [at_$at_dir_var])
+ case $at_val in
+ [[\\/$]]* | ?:[[\\/]]* ) at_prefix= ;;
+ *) at_prefix=../../ ;;
+ esac
+ AS_VAR_SET([$at_dir_var], [$at_prefix$at_val])
+ done
+fi
+
+m4_text_box([Directory structure.])
+
+# This is the set of directories and files used by this script
+# (non-literals are capitalized):
+#
+# TESTSUITE - the testsuite
+# TESTSUITE.log - summarizes the complete testsuite run
+# TESTSUITE.dir/ - created during a run, remains after -d or failed test
+# + at-groups/ - during a run: status of all groups in run
+# | + NNN/ - during a run: meta-data about test group NNN
+# | | + check-line - location (source file and line) of current AT_CHECK
+# | | + status - exit status of current AT_CHECK
+# | | + stdout - stdout of current AT_CHECK
+# | | + stder1 - stderr, including trace
+# | | + stderr - stderr, with trace filtered out
+# | | + test-source - portion of testsuite that defines group
+# | | + times - timestamps for computing duration
+# | | + pass - created if group passed
+# | | + xpass - created if group xpassed
+# | | + fail - created if group failed
+# | | + xfail - created if group xfailed
+# | | + skip - created if group skipped
+# + at-stop - during a run: end the run if this file exists
+# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
+# + 0..NNN/ - created for each group NNN, remains after -d or failed test
+# | + TESTSUITE.log - summarizes the group results
+# | + ... - files created during the group
+
+# The directory the whole suite works in.
+# Should be absolute to let the user `cd' at will.
+at_suite_dir=$at_dir/$as_me.dir
+# The file containing the suite ($at_dir might have changed since earlier).
+at_suite_log=$at_dir/$as_me.log
+# The directory containing helper files per test group.
+at_helper_dir=$at_suite_dir/at-groups
+# Stop file: if it exists, do not start new jobs.
+at_stop_file=$at_suite_dir/at-stop
+# The fifo used for the job dispatcher.
+at_job_fifo=$at_suite_dir/at-job-fifo
+
+if $at_clean; then
+ test -d "$at_suite_dir" &&
+ find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+ rm -f -r "$at_suite_dir" "$at_suite_log"
+ exit $?
+fi
+
+# Don't take risks: use only absolute directories in PATH.
+#
+# For stand-alone test suites (ie. atconfig was not found),
+# AUTOTEST_PATH is relative to `.'.
+#
+# For embedded test suites, AUTOTEST_PATH is relative to the top level
+# of the package. Then expand it into build/src parts, since users
+# may create executables in both places.
+AUTOTEST_PATH=`AS_ECHO(["$AUTOTEST_PATH"]) | sed "s|:|$PATH_SEPARATOR|g"`
+at_path=
+_AS_PATH_WALK([$AUTOTEST_PATH $PATH],
+[test -n "$at_path" && AS_VAR_APPEND([at_path], [$PATH_SEPARATOR])
+case $as_dir in
+ [[\\/]]* | ?:[[\\/]]* )
+ AS_VAR_APPEND([at_path], ["$as_dir"])
+ ;;
+ * )
+ if test -z "$at_top_build_prefix"; then
+ # Stand-alone test suite.
+ AS_VAR_APPEND([at_path], ["$as_dir"])
+ else
+ # Embedded test suite.
+ AS_VAR_APPEND([at_path], ["$at_top_build_prefix$as_dir$PATH_SEPARATOR"])
+ AS_VAR_APPEND([at_path], ["$at_top_srcdir/$as_dir"])
+ fi
+ ;;
+esac])
+
+# Now build and simplify PATH.
+#
+# There might be directories that don't exist, but don't redirect
+# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
+at_new_path=
+_AS_PATH_WALK([$at_path],
+[test -d "$as_dir" || continue
+case $as_dir in
+ [[\\/]]* | ?:[[\\/]]* ) ;;
+ * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
+esac
+case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
+ *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
+ $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
+ *) AS_VAR_APPEND([at_new_path], ["$PATH_SEPARATOR$as_dir"]) ;;
+esac])
+PATH=$at_new_path
+export PATH
+
+# Setting up the FDs.
+m4_define([AS_MESSAGE_LOG_FD], [5])
+dnl The parent needs two fds to the same fifo, otherwise, there is a race
+dnl where the parent can read the fifo before a child opens it for writing
+m4_define([AT_JOB_FIFO_IN_FD], [6])
+m4_define([AT_JOB_FIFO_OUT_FD], [7])
+[#] AS_MESSAGE_LOG_FD is the log file. Not to be overwritten if `-d'.
+if $at_debug_p; then
+ at_suite_log=/dev/null
+else
+ : >"$at_suite_log"
+fi
+exec AS_MESSAGE_LOG_FD>>"$at_suite_log"
+
+# Banners and logs.
+AS_BOX(m4_defn([AT_TESTSUITE_NAME])[.])
+{
+ AS_BOX(m4_defn([AT_TESTSUITE_NAME])[.])
+ echo
+
+ AS_ECHO(["$as_me: command line was:"])
+ AS_ECHO([" \$ $[0] $at_cli_args"])
+ echo
+
+ # If ChangeLog exists, list a few lines in case it might help determining
+ # the exact version.
+ if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then
+ AS_BOX([ChangeLog.])
+ echo
+ sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog"
+ echo
+ fi
+
+ AS_UNAME
+ echo
+
+ # Contents of the config files.
+ for at_file in atconfig atlocal
+ do
+ test -r $at_file || continue
+ AS_ECHO(["$as_me: $at_file:"])
+ sed 's/^/| /' $at_file
+ echo
+ done
+} >&AS_MESSAGE_LOG_FD
+
+m4_divert_pop([TESTS_BEGIN])dnl
+m4_divert_push([PREPARE_TESTS])dnl
+{
+ AS_BOX([Tested programs.])
+ echo
+} >&AS_MESSAGE_LOG_FD
+
+# Report what programs are being tested.
+for at_program in : $at_tested
+do
+ test "$at_program" = : && continue
+ case $at_program in
+ [[\\/]* | ?:[\\/]* ) $at_program_=$at_program ;;]
+ * )
+ _AS_PATH_WALK([$PATH], [test -f "$as_dir/$at_program" && break])
+ at_program_=$as_dir/$at_program ;;
+ esac
+ if test -f "$at_program_"; then
+ {
+ AS_ECHO(["$at_srcdir/AT_LINE: $at_program_ --version"])
+ "$at_program_" --version </dev/null
+ echo
+ } >&AS_MESSAGE_LOG_FD 2>&1
+ else
+ AS_ERROR([cannot find $at_program])
+ fi
+done
+
+{
+ AS_BOX([Running the tests.])
+} >&AS_MESSAGE_LOG_FD
+
+at_start_date=`date`
+at_start_time=`date +%s 2>/dev/null`
+AS_ECHO(["$as_me: starting at: $at_start_date"]) >&AS_MESSAGE_LOG_FD
+m4_divert_pop([PREPARE_TESTS])dnl
+m4_divert_push([TESTS])dnl
+
+# Create the master directory if it doesn't already exist.
+AS_MKDIR_P(["$at_suite_dir"]) ||
+ AS_ERROR([cannot create `$at_suite_dir'])
+
+# Can we diff with `/dev/null'? DU 5.0 refuses.
+if diff /dev/null /dev/null >/dev/null 2>&1; then
+ at_devnull=/dev/null
+else
+ at_devnull=$at_suite_dir/devnull
+ >"$at_devnull"
+fi
+
+# Use `diff -u' when possible.
+if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff"
+then
+ at_diff='diff -u'
+else
+ at_diff=diff
+fi
+
+# Get the last needed group.
+for at_group in : $at_groups; do :; done
+
+# Extract the start and end lines of each test group at the tail
+# of this file
+awk '
+BEGIN { FS="" }
+/^@%:@AT_START_/ {
+ start = NR
+}
+/^@%:@AT_STOP_/ {
+ test = substr ($ 0, 10)
+ print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
+ if (test == "'"$at_group"'") exit
+}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
+. "$at_suite_dir/at-source-lines" ||
+ AS_ERROR([cannot create test line number cache])
+rm -f "$at_suite_dir/at-source-lines"
+
+# Set number of jobs for `-j'; avoid more jobs than test groups.
+set X $at_groups; shift; at_max_jobs=$[@%:@]
+if test $at_max_jobs -eq 0; then
+ at_jobs=1
+fi
+if test $at_jobs -ne 1 &&
+ { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
+ at_jobs=$at_max_jobs
+fi
+
+# If parallel mode, don't output banners, don't split summary lines.
+if test $at_jobs -ne 1; then
+ at_print_banners=false
+ at_quiet=:
+fi
+
+# Set up helper dirs.
+rm -rf "$at_helper_dir" &&
+mkdir "$at_helper_dir" &&
+cd "$at_helper_dir" &&
+{ test -z "$at_groups" || mkdir $at_groups; } ||
+AS_ERROR([testsuite directory setup failed])
+
+# Functions for running a test group. We leave the actual
+# test group execution outside of a shell function in order
+# to avoid hitting zsh 4.x exit status bugs.
+
+AS_FUNCTION_DESCRIBE([at_fn_group_prepare], [],
+[Prepare for running a test group.])
+at_fn_group_prepare ()
+{
+ # The directory for additional per-group helper files.
+ at_job_dir=$at_helper_dir/$at_group
+ # The file containing the location of the last AT_CHECK.
+ at_check_line_file=$at_job_dir/check-line
+ # The file containing the exit status of the last command.
+ at_status_file=$at_job_dir/status
+ # The files containing the output of the tested commands.
+ at_stdout=$at_job_dir/stdout
+ at_stder1=$at_job_dir/stder1
+ at_stderr=$at_job_dir/stderr
+ # The file containing the code for a test group.
+ at_test_source=$at_job_dir/test-source
+ # The file containing dates.
+ at_times_file=$at_job_dir/times
+
+ # Be sure to come back to the top test directory.
+ cd "$at_suite_dir"
+
+ # Clearly separate the test groups when verbose.
+ $at_first || $at_verbose echo
+
+ at_group_normalized=$at_group
+ _AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized)
+
+ # Create a fresh directory for the next test group, and enter.
+ # If one already exists, the user may have invoked ./run from
+ # within that directory; we remove the contents, but not the
+ # directory itself, so that we aren't pulling the rug out from
+ # under the shell's notion of the current directory.
+ at_group_dir=$at_suite_dir/$at_group_normalized
+ at_group_log=$at_group_dir/$as_me.log
+ _AS_CLEAN_DIR("$at_group_dir") ||
+ AS_WARN([test directory for $at_group_normalized could not be cleaned])
+ # Be tolerant if the above `rm' was not able to remove the directory.
+ AS_MKDIR_P(["$at_group_dir"])
+
+ echo 0 > "$at_status_file"
+
+ # In verbose mode, append to the log file *and* show on
+ # the standard output; in quiet mode only write to the log.
+ if test -z "$at_verbose"; then
+ at_tee_pipe='tee -a "$at_group_log"'
+ else
+ at_tee_pipe='cat >> "$at_group_log"'
+ fi
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_group_banner], [[ORDINAL LINE DESC PAD [BANNER]]],
+[Declare the test group ORDINAL, located at LINE with group description
+DESC, and residing under BANNER. Use PAD to align the status column.])
+at_fn_group_banner ()
+{
+ at_setup_line="$[2]"
+ test -n "$[5]" && at_fn_banner $[5]
+ at_desc="$[3]"
+ case $[1] in
+ [[0-9]]) at_desc_line=" $[1]: ";;
+ [[0-9][0-9]]) at_desc_line=" $[1]: " ;;
+ [*]) at_desc_line="$[1]: " ;;
+ esac
+ AS_VAR_APPEND([at_desc_line], ["$[3]$[4]"])
+ $at_quiet AS_ECHO_N(["$at_desc_line"])
+ echo "# -*- compilation -*-" >> "$at_group_log"
+}
+
+AS_FUNCTION_DESCRIBE([at_fn_group_postprocess], [],
+[Perform cleanup after running a test group.])
+at_fn_group_postprocess ()
+{
+ # Be sure to come back to the suite directory, in particular
+ # since below we might `rm' the group directory we are in currently.
+ cd "$at_suite_dir"
+
+ if test ! -f "$at_check_line_file"; then
+ sed "s/^ */$as_me: WARNING: /" <<_ATEOF
+ A failure happened in a test group before any test could be
+ run. This means that test suite is improperly designed. Please
+ report this failure to <AT_PACKAGE_BUGREPORT>.
+_ATEOF
+ AS_ECHO(["$at_setup_line"]) >"$at_check_line_file"
+ at_status=99
+ fi
+ $at_verbose AS_ECHO_N(["$at_group. $at_setup_line: "])
+ AS_ECHO_N(["$at_group. $at_setup_line: "]) >> "$at_group_log"
+ case $at_xfail:$at_status in
+ yes:0)
+ at_msg="UNEXPECTED PASS"
+ at_res=xpass
+ at_errexit=$at_errexit_p
+ at_color=$at_red
+ ;;
+ no:0)
+ at_msg="ok"
+ at_res=pass
+ at_errexit=false
+ at_color=$at_grn
+ ;;
+ *:77)
+ at_msg='skipped ('`cat "$at_check_line_file"`')'
+ at_res=skip
+ at_errexit=false
+ at_color=$at_blu
+ ;;
+ no:* | *:99)
+ at_msg='FAILED ('`cat "$at_check_line_file"`')'
+ at_res=fail
+ at_errexit=$at_errexit_p
+ at_color=$at_red
+ ;;
+ yes:*)
+ at_msg='expected failure ('`cat "$at_check_line_file"`')'
+ at_res=xfail
+ at_errexit=false
+ at_color=$at_lgn
+ ;;
+ esac
+ echo "$at_res" > "$at_job_dir/$at_res"
+ # In parallel mode, output the summary line only afterwards.
+ if test $at_jobs -ne 1 && test -n "$at_verbose"; then
+ AS_ECHO(["$at_desc_line $at_color$at_msg$at_std"])
+ else
+ # Make sure there is a separator even with long titles.
+ AS_ECHO([" $at_color$at_msg$at_std"])
+ fi
+ at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
+ case $at_status in
+ 0|77)
+ # $at_times_file is only available if the group succeeded.
+ # We're not including the group log, so the success message
+ # is written in the global log separately. But we also
+ # write to the group log in case they're using -d.
+ if test -f "$at_times_file"; then
+ at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')'
+ rm -f "$at_times_file"
+ fi
+ AS_ECHO(["$at_log_msg"]) >> "$at_group_log"
+ AS_ECHO(["$at_log_msg"]) >&AS_MESSAGE_LOG_FD
+
+ # Cleanup the group directory, unless the user wants the files
+ # or the success was unexpected.
+ if $at_debug_p || test $at_res = xpass; then
+ at_fn_create_debugging_script
+ if test $at_res = xpass && $at_errexit; then
+ echo stop > "$at_stop_file"
+ fi
+ else
+ if test -d "$at_group_dir"; then
+ find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+ rm -fr "$at_group_dir"
+ fi
+ rm -f "$at_test_source"
+ fi
+ ;;
+ *)
+ # Upon failure, include the log into the testsuite's global
+ # log. The failure message is written in the group log. It
+ # is later included in the global log.
+ AS_ECHO(["$at_log_msg"]) >> "$at_group_log"
+
+ # Upon failure, keep the group directory for autopsy, and create
+ # the debugging script. With -e, do not start any further tests.
+ at_fn_create_debugging_script
+ if $at_errexit; then
+ echo stop > "$at_stop_file"
+ fi
+ ;;
+ esac
+}
+
+
+m4_text_box([Driver loop.])
+
+dnl Catching signals correctly:
+dnl
+dnl The first idea was: trap the signal, send it to all spawned jobs,
+dnl then reset the handler and reraise the signal for ourselves.
+dnl However, before exiting, ksh will then send the signal to all
+dnl process group members, potentially killing the outer testsuite
+dnl and/or the 'make' process driving us.
+dnl So now the strategy is: trap the signal, send it to all spawned jobs,
+dnl then exit the script with the right status.
+dnl
+dnl In order to let the jobs know about the signal, we cannot just send it
+dnl to the current process group (kill $SIG 0), for the same reason as above.
+dnl Also, it does not reliably stop the suite to send the signal to the
+dnl spawned processes, because they might not transport it further
+dnl (maybe this can be fixed?).
+dnl
+dnl So what we do is enable shell job control if available, which causes the
+dnl shell to start each parallel task as its own shell job, thus as a new
+dnl process group leader. We then send the signal to all new process groups.
+
+dnl Do we have job control?
+if (set -m && set +m && set +b) >/dev/null 2>&1; then
+ set +b
+ at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
+else
+ at_job_control_on=: at_job_control_off=: at_job_group=
+fi
+
+for at_signal in 1 2 15; do
+dnl This signal handler is not suitable for PIPE: it causes writes.
+dnl The code that was interrupted may have the errexit, monitor, or xtrace
+dnl flags enabled, so sanitize.
+ trap 'set +x; set +e
+ $at_job_control_off
+ at_signal='"$at_signal"'
+dnl Safety belt: even with runaway processes, prevent starting new jobs.
+ echo stop > "$at_stop_file"
+dnl Do not enter this area multiple times, do not kill self prematurely.
+ trap "" $at_signal
+dnl Gather process group IDs of currently running jobs.
+ at_pgids=
+ for at_pgid in `jobs -p 2>/dev/null`; do
+ at_pgids="$at_pgids $at_job_group$at_pgid"
+ done
+dnl Ignore `kill' errors, as some jobs may have finished in the meantime.
+ test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
+dnl wait until all jobs have exited.
+ wait
+dnl Status output. Do this after waiting for the jobs, for ordered output.
+dnl Avoid scribbling onto the end of a possibly incomplete line.
+ if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
+ echo >&2
+ fi
+ at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
+ set x $at_signame
+ test $# -gt 2 && at_signame=$at_signal
+ AS_WARN([caught signal $at_signame, bailing out])
+dnl Do not reinstall the default handler here and reraise the signal to
+dnl let the default handler do its job, see the note about ksh above.
+dnl trap - $at_signal
+dnl kill -$at_signal $$
+dnl Instead, exit with appropriate status.
+ AS_VAR_ARITH([exit_status], [128 + $at_signal])
+ AS_EXIT([$exit_status])' $at_signal
+done
+
+rm -f "$at_stop_file"
+at_first=:
+
+if test $at_jobs -ne 1 &&
+ rm -f "$at_job_fifo" &&
+ test -n "$at_job_group" &&
+ ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
+then
+ # FIFO job dispatcher.
+
+dnl Since we use job control, we need to propagate TSTP.
+dnl This handler need not be used for serial execution.
+dnl Again, we should stop all processes in the job groups, otherwise
+dnl the stopping will not be effective while one test group is running.
+dnl Apparently ksh does not honor the TSTP trap.
+dnl As a safety measure, not use the same variable names as in the
+dnl termination handlers above, one might get called during execution
+dnl of the other.
+ trap 'at_pids=
+ for at_pid in `jobs -p`; do
+ at_pids="$at_pids $at_job_group$at_pid"
+ done
+dnl Send it to all spawned jobs, ignoring those finished meanwhile.
+ if test -n "$at_pids"; then
+dnl Unfortunately, ksh93 fork-bombs when we send TSTP, so send STOP
+dnl if this might be ksh (STOP prevents possible TSTP handlers inside
+dnl AT_CHECKs from running). Then stop ourselves.
+ at_sig=TSTP
+ test "${TMOUT+set}" = set && at_sig=STOP
+ kill -$at_sig $at_pids 2>/dev/null
+ fi
+ kill -STOP $$
+dnl We got a CONT, so let's go again. Passing this to all processes
+dnl in the groups is necessary (because we stopped them), but it may
+dnl cause changed test semantics; e.g., a sleep will be interrupted.
+ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP
+
+ echo
+ # Turn jobs into a list of numbers, starting from 1.
+ at_joblist=`AS_ECHO(["$at_groups"]) | sed -n 1,${at_jobs}p`
+
+ set X $at_joblist
+ shift
+ for at_group in $at_groups; do
+dnl Enable job control only for spawning the test group:
+dnl Let the jobs to run in separate process groups, but
+dnl avoid all the status output by the shell.
+ $at_job_control_on 2>/dev/null
+ (
+ # Start one test group.
+ $at_job_control_off
+dnl First child must open the fifo to avoid blocking parent; all other
+dnl children inherit it already opened from the parent.
+ if $at_first; then
+ exec AT_JOB_FIFO_OUT_FD>"$at_job_fifo"
+ else
+dnl Children do not need parent's copy of fifo.
+ exec AT_JOB_FIFO_IN_FD<&-
+ fi
+dnl When a child receives PIPE, be sure to write back the token,
+dnl so the master does not hang waiting for it.
+dnl errexit and xtrace should not be set in this shell instance,
+dnl except as debug measures. However, shells such as dash may
+dnl optimize away the _AT_CHECK subshell, so normalize here.
+ trap 'set +x; set +e
+dnl Ignore PIPE signals that stem from writing back the token.
+ trap "" PIPE
+ echo stop > "$at_stop_file"
+ echo >&AT_JOB_FIFO_OUT_FD
+dnl Do not reraise the default PIPE handler.
+dnl It wreaks havoc with ksh, see above.
+dnl trap - 13
+dnl kill -13 $$
+ AS_EXIT([141])' PIPE
+ at_fn_group_prepare
+ if cd "$at_group_dir" &&
+ at_fn_test $at_group &&
+ . "$at_test_source"
+ then :; else
+ AS_WARN([unable to parse test group: $at_group])
+ at_failed=:
+ fi
+ at_fn_group_postprocess
+ echo >&AT_JOB_FIFO_OUT_FD
+ ) &
+ $at_job_control_off
+ if $at_first; then
+ at_first=false
+ exec AT_JOB_FIFO_IN_FD<"$at_job_fifo" AT_JOB_FIFO_OUT_FD>"$at_job_fifo"
+ fi
+ shift # Consume one token.
+ if test $[@%:@] -gt 0; then :; else
+ read at_token <&AT_JOB_FIFO_IN_FD || break
+ set x $[*]
+ fi
+ test -f "$at_stop_file" && break
+ done
+ exec AT_JOB_FIFO_OUT_FD>&-
+ # Read back the remaining ($at_jobs - 1) tokens.
+ set X $at_joblist
+ shift
+ if test $[@%:@] -gt 0; then
+ shift
+ for at_job
+ do
+ read at_token
+ done <&AT_JOB_FIFO_IN_FD
+ fi
+ exec AT_JOB_FIFO_IN_FD<&-
+ wait
+else
+ # Run serially, avoid forks and other potential surprises.
+ for at_group in $at_groups; do
+ at_fn_group_prepare
+ if cd "$at_group_dir" &&
+ at_fn_test $at_group &&
+ . "$at_test_source"; then :; else
+ AS_WARN([unable to parse test group: $at_group])
+ at_failed=:
+ fi
+ at_fn_group_postprocess
+ test -f "$at_stop_file" && break
+ at_first=false
+ done
+fi
+
+# Wrap up the test suite with summary statistics.
+cd "$at_helper_dir"
+
+# Use ?..???? when the list must remain sorted, the faster * otherwise.
+at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
+at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
+at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
+at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
+ echo $f; done | sed '/?/d; s,/xpass,,'`
+at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
+ echo $f; done | sed '/?/d; s,/fail,,'`
+
+set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
+shift; at_group_count=$[@%:@]
+set X $at_xpass_list; shift; at_xpass_count=$[@%:@]; at_xpass_list=$[*]
+set X $at_xfail_list; shift; at_xfail_count=$[@%:@]
+set X $at_fail_list; shift; at_fail_count=$[@%:@]; at_fail_list=$[*]
+set X $at_skip_list; shift; at_skip_count=$[@%:@]
+
+AS_VAR_ARITH([at_run_count], [$at_group_count - $at_skip_count])
+AS_VAR_ARITH([at_unexpected_count], [$at_xpass_count + $at_fail_count])
+AS_VAR_ARITH([at_total_fail_count], [$at_xfail_count + $at_fail_count])
+
+# Back to the top directory.
+cd "$at_dir"
+rm -rf "$at_helper_dir"
+
+# Compute the duration of the suite.
+at_stop_date=`date`
+at_stop_time=`date +%s 2>/dev/null`
+AS_ECHO(["$as_me: ending at: $at_stop_date"]) >&AS_MESSAGE_LOG_FD
+case $at_start_time,$at_stop_time in
+ [[0-9]*,[0-9]*])
+ AS_VAR_ARITH([at_duration_s], [$at_stop_time - $at_start_time])
+ AS_VAR_ARITH([at_duration_m], [$at_duration_s / 60])
+ AS_VAR_ARITH([at_duration_h], [$at_duration_m / 60])
+ AS_VAR_ARITH([at_duration_s], [$at_duration_s % 60])
+ AS_VAR_ARITH([at_duration_m], [$at_duration_m % 60])
+ at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
+ AS_ECHO(["$as_me: test suite duration: $at_duration"]) >&AS_MESSAGE_LOG_FD
+ ;;
+esac
+
+echo
+AS_BOX([Test results.])
+echo
+{
+ echo
+ AS_BOX([Test results.])
+ echo
+} >&AS_MESSAGE_LOG_FD
+
+dnl
+dnl FIXME: this code is as far from i18n-cleanness as man
+dnl could imagine...
+dnl
+if test $at_run_count = 1; then
+ at_result="1 test"
+ at_were=was
+else
+ at_result="$at_run_count tests"
+ at_were=were
+fi
+if $at_errexit_p && test $at_unexpected_count != 0; then
+ if test $at_xpass_count = 1; then
+ at_result="$at_result $at_were run, one passed"
+ else
+ at_result="$at_result $at_were run, one failed"
+ fi
+ at_result="$at_result unexpectedly and inhibited subsequent tests."
+ at_color=$at_red
+else
+ # Don't you just love exponential explosion of the number of cases?
+ at_color=$at_red
+ case $at_xpass_count:$at_fail_count:$at_xfail_count in
+ # So far, so good.
+ 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;;
+ 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;;
+
+ # Some unexpected failures
+ 0:*:0) at_result="$at_result $at_were run,
+$at_fail_count failed unexpectedly." ;;
+
+ # Some failures, both expected and unexpected
+ 0:*:1) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+ 0:*:*) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+
+ # No unexpected failures, but some xpasses
+ *:0:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly." ;;
+
+ # No expected failures, but failures and xpasses
+ *:1:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected dnl
+($at_fail_count unexpected failure)." ;;
+ *:*:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected dnl
+($at_fail_count unexpected failures)." ;;
+
+ # All of them.
+ *:*:1) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+ *:*:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+ esac
+
+ if test $at_skip_count = 0 && test $at_run_count -gt 1; then
+ at_result="All $at_result"
+ fi
+fi
+
+# Now put skips in the mix.
+case $at_skip_count in
+ 0) ;;
+ 1) at_result="$at_result
+1 test was skipped." ;;
+ *) at_result="$at_result
+$at_skip_count tests were skipped." ;;
+esac
+
+if test $at_unexpected_count = 0; then
+ echo "$at_color$at_result$at_std"
+ echo "$at_result" >&AS_MESSAGE_LOG_FD
+else
+ echo "${at_color}ERROR: $at_result$at_std" >&2
+ echo "ERROR: $at_result" >&AS_MESSAGE_LOG_FD
+ {
+ echo
+ AS_BOX([Summary of the failures.])
+
+ # Summary of failed and skipped tests.
+ if test $at_fail_count != 0; then
+ echo "Failed tests:"
+ $SHELL "$at_myself" $at_fail_list --list
+ echo
+ fi
+ if test $at_skip_count != 0; then
+ echo "Skipped tests:"
+ $SHELL "$at_myself" $at_skip_list --list
+ echo
+ fi
+ if test $at_xpass_count != 0; then
+ echo "Unexpected passes:"
+ $SHELL "$at_myself" $at_xpass_list --list
+ echo
+ fi
+ if test $at_fail_count != 0; then
+ AS_BOX([Detailed failed tests.])
+ echo
+ for at_group in $at_fail_list
+ do
+ at_group_normalized=$at_group
+ _AT_NORMALIZE_TEST_GROUP_NUMBER(at_group_normalized)
+ cat "$at_suite_dir/$at_group_normalized/$as_me.log"
+ echo
+ done
+ echo
+ fi
+ if test -n "$at_top_srcdir"; then
+ AS_BOX([${at_top_build_prefix}config.log])
+ sed 's/^/| /' ${at_top_build_prefix}config.log
+ echo
+ fi
+ } >&AS_MESSAGE_LOG_FD
+
+ AS_BOX([$as_me.log was created.])
+
+ echo
+ if $at_debug_p; then
+ at_msg='per-test log files'
+ else
+ at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'"
+ fi
+ AS_ECHO(["Please send $at_msg and all information you think might help:
+
+ To: <AT_PACKAGE_BUGREPORT>
+ Subject: @<:@AT_PACKAGE_STRING@:>@ $as_me: dnl
+$at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}dnl
+$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+
+You may investigate any problem if you feel able to do so, in which
+case the test suite provides a good starting point. Its output may
+be found below \`${at_testdir+${at_testdir}/}$as_me.dir'.
+"])
+ exit 1
+fi
+
+exit 0
+
+m4_text_box([Actual tests.])
+m4_divert_pop([TESTS])dnl
+dnl End of AT_INIT: divert to KILL, only test groups are to be
+dnl output, the rest is ignored. Current diversion is BODY, inherited
+dnl from M4sh.
+m4_divert([KILL])
+])# AT_INIT
+
+
+# _AT_ARG_OPTION(OPTIONS,HELP-TEXT,[ARGS],[ACTION-IF-GIVEN],
+# [ACTION-IF-NOT-GIVEN])
+# ----------------------------------------------------------
+# Internal implementation of AT_ARG_OPTION & AT_ARG_OPTION_ARG
+m4_defun([_AT_ARG_OPTION],
+[m4_divert_once([HELP_OTHER],
+[cat <<_ATEOF || at_write_fail=1
+
+Other options:
+_ATEOF
+])dnl m4_divert_once HELP_OTHER
+m4_divert_text([HELP_OTHER],
+[cat <<_ATEOF || at_write_fail=1
+$2
+_ATEOF])dnl
+dnl Turn our options into our desired strings
+m4_ifdef([AT_first_option],[m4_undefine([AT_first_option])])dnl
+m4_ifdef([AT_case],[m4_undefine([AT_case])])dnl
+m4_ifdef([AT_case_no],[m4_undefine([AT_case_no])])dnl
+m4_ifdef([AT_case_arg],[m4_undefine([AT_case_arg])])dnl
+m4_foreach([AT_option], m4_split(m4_normalize([$1]),[[ \|]+]),
+[m4_define_default([AT_first_option],AT_option)dnl
+m4_define_default([AT_first_option_tr],
+ [m4_bpatsubst(m4_defn([AT_first_option]), -, [_])])dnl
+m4_append([AT_case],m4_if(m4_len(AT_option),1,[],[-])[-]AT_option, [ | ])dnl
+m4_append([AT_case_no],[--no-]AT_option, [ | ])dnl
+m4_append([AT_case_arg],
+ m4_if(m4_len(AT_option),1,[],[-])[-]AT_option[=*], [ | ])dnl
+])dnl m4_foreach AT_option
+dnl keep track so we or the user may process ACTION-IF-NOT-GIVEN
+m4_divert_once([PARSE_ARGS_BEGIN],
+[
+##
+## Set up package specific options.
+##
+])dnl
+m4_divert_text([PARSE_ARGS_BEGIN],
+[dnl Provide a default value for options without arguments.
+m4_ifvaln([$3],,[at_arg_[]AT_first_option_tr=false])dnl
+at_arg_given_[]AT_first_option_tr=false
+])dnl m4_divert_text DEFAULTS
+m4_divert_text([PARSE_ARGS],
+[dnl Parse the options and args when necessary.
+m4_ifvaln([$3],
+[ AT_case )
+ at_prev=--AT_first_option_tr
+ ;;
+ AT_case_arg )
+ at_arg_[]AT_first_option_tr=$at_optarg
+ at_arg_given_[]AT_first_option_tr=:
+ $4
+ ;;],
+[ AT_case )
+ at_optarg=:
+ at_arg_[]AT_first_option_tr=:
+ at_arg_given_[]AT_first_option_tr=:
+ m4_ifval([$4],[$4])[]dnl
+ ;;
+ AT_case_no )
+ at_optarg=false
+ at_arg_[]AT_first_option_tr=false
+ at_arg_given_[]AT_first_option_tr=:
+ m4_ifval([$4],[$4])[]dnl
+ ;;])dnl m4_ifvaln $3
+])dnl m4_divert_text PARSE_ARGS
+m4_ifvaln([$5],
+[m4_divert_once([PARSE_ARGS_END],
+[
+##
+## Process package specific options when _not_ supplied.
+##])dnl m4_divert_once PARSE_ARGS_END
+m4_divert_text([PARSE_ARGS_END],
+[
+AS_IF([$at_arg_given_[]AT_first_option_tr],,[$5])dnl
+])dnl m4_divert_text PARSE_ARGS_END
+])dnl m4_ifvaln $5
+])dnl _AT_ARG_OPTION
+
+
+# AT_ARG_OPTION(OPTIONS,HELP-TEXT,[ACTION-IF-GIVEN],[ACTION-IF-NOT-GIVEN])
+# ------------------------------------------------------------------------
+# Accept a list of space-separated OPTIONS, all aliases of the first one.
+# Add HELP-TEXT to the HELP_OTHER diversion.
+#
+# Leading dashes should not be passed in OPTIONS. Users will be required
+# to pass `--' before long options and `-' before single character options.
+#
+# $at_arg_OPTION will be set to `:' if this option is received, `false' if
+# if --no-OPTION is received, and `false' by default.
+#
+# Run ACTION-IF-GIVEN each time an option in OPTIONS is encountered; here,
+# $at_optarg will be set to `:' or `false' as appropriate. $at_optarg is
+# actually just a copy of $at_arg_OPTION.
+#
+# ACTION-IF-NOT-GIVEN will be run once after option parsing is complete and
+# if no option from OPTIONS was used.
+m4_defun([AT_ARG_OPTION],[_AT_ARG_OPTION([$1],[$2],,[$3],[$4])])
+
+
+# AT_ARG_OPTION_ARG(OPTIONS,HELP-TEXT,[ACTION-IF-GIVEN],[ACTION-IF-NOT-GIVEN])
+# ----------------------------------------------------------------------------
+# Accept a set of space-separated OPTIONS with arguments, all aliases of the
+# first one. Add HELP-TEXT to the HELP_OTHER diversion.
+#
+# Leading dashes should not be passed in OPTIONS. Users will be required
+# to pass `--' before long options and `-' before single character options.
+#
+# By default, any argument to these options will be assigned to the shell
+# variable $at_arg_OPTION, where OPTION is the first option in OPTIONS with
+# any `-' characters replaced with `_'.
+#
+# Run ACTION-IF-GIVEN each time an option in OPTIONS is encountered; here,
+# $at_optarg will be set to the option argument. $at_optarg is actually just
+# a copy of $at_arg_OPTION.
+#
+# ACTION-IF-NOT-GIVEN will be run once after option parsing is complete
+# and if no option from OPTIONS was used.
+m4_defun([AT_ARG_OPTION_ARG],[_AT_ARG_OPTION([$1],[$2],1,[$3],[$4])])
+
+
+# AT_TESTED(PROGRAMS)
+# -------------------
+# Specify the list of programs exercised by the test suite. Their
+# versions are logged, and in the case of embedded test suite, they
+# must correspond to the version of the package. PATH should be
+# already preset so the proper executable will be selected.
+m4_define([AT_TESTED],
+[m4_append_uniq_w([AT_tested], [$1])])
+
+
+# AT_COPYRIGHT(TEXT, [FILTER = m4_newline])
+# -----------------------------------------
+# Emit TEXT, a copyright notice, in the top of the test suite and in
+# --version output. Macros in TEXT are evaluated once. Process
+# the --version output through FILTER (m4_newline, m4_do, and
+# m4_copyright_condense are common filters).
+m4_define([AT_COPYRIGHT],
+[AS_COPYRIGHT([$1])[]]dnl
+[m4_divert_text([VERSION_NOTICES],
+[m4_default([$2], [m4_newline])([$1])])])# AT_COPYRIGHT
+
+
+# AT_COLOR_TESTS
+# --------------
+# Enable colored test results if standard error is connected to a terminal.
+m4_define([AT_COLOR_TESTS],
+[m4_define([AT_color], [auto])])
+
+# AT_SETUP(DESCRIPTION)
+# ---------------------
+# Start a group of related tests, all to be executed in the same subshell.
+# The group is testing what DESCRIPTION says.
+_AT_DEFINE_INIT([AT_SETUP],
+[m4_ifdef([AT_ingroup], [m4_fatal([$0: nested AT_SETUP detected])],
+ [m4_define([AT_ingroup], [AS_ECHO(["$at_setup_line"]) >"$at_check_line_file"
+])])
+m4_ifdef([AT_keywords], [m4_undefine([AT_keywords])])
+m4_define([AT_capture_files], [])
+m4_define([AT_line], AT_LINE)
+m4_define([AT_xfail], [at_xfail=no])
+m4_define([AT_description], m4_expand([$1]))
+m4_define([AT_ordinal], m4_incr(AT_ordinal))
+m4_divert_push([TEST_GROUPS])dnl
+[#AT_START_]AT_ordinal
+at_fn_group_banner AT_ordinal 'm4_defn([AT_line])' \
+ "AS_ESCAPE(m4_dquote(m4_defn([AT_description])))" m4_format(["%*s"],
+ m4_max(0, m4_eval(47 - m4_qlen(m4_defn([AT_description])))), [])m4_if(
+ AT_banner_ordinal, [0], [], [ AT_banner_ordinal])
+m4_divert_push([TEST_SCRIPT])dnl
+])
+
+
+# AT_FAIL_IF(SHELL-EXPRESSION)
+# ----------------------------
+# Make the test die with hard failure if SHELL-EXPRESSION evaluates to
+# true (exitcode = 0).
+_AT_DEFINE_SETUP([AT_FAIL_IF],
+[dnl
+dnl Try to limit the amount of conditionals that we emit.
+m4_case([$1],
+ [], [],
+ [false], [],
+ [:], [_AT_CHECK_EXIT([], [99])],
+ [true], [_AT_CHECK_EXIT([], [99])],
+ [_AT_CHECK_EXIT([$1], [99])])])
+
+
+# AT_SKIP_IF(SHELL-EXPRESSION)
+# ----------------------------
+# Skip the rest of the group if SHELL-EXPRESSION evaluates to true
+# (exitcode = 0).
+_AT_DEFINE_SETUP([AT_SKIP_IF],
+[dnl
+dnl Try to limit the amount of conditionals that we emit.
+m4_case([$1],
+ [], [],
+ [false], [],
+ [:], [_AT_CHECK_EXIT([], [77])],
+ [true], [_AT_CHECK_EXIT([], [77])],
+ [_AT_CHECK_EXIT([$1], [77])])])
+
+
+# AT_XFAIL_IF(SHELL-EXPRESSION)
+# -----------------------------
+# Set up the test to be expected to fail if SHELL-EXPRESSION evaluates to
+# true (exitcode = 0).
+_AT_DEFINE_SETUP([AT_XFAIL_IF],
+[dnl
+dnl Try to limit the amount of conditionals that we emit.
+m4_case([$1],
+ [], [],
+ [false], [],
+ [:], [m4_define([AT_xfail], [at_xfail=yes])],
+ [true], [m4_define([AT_xfail], [at_xfail=yes])],
+ [m4_append([AT_xfail], [
+ $1 && at_xfail=yes])])])
+
+
+# AT_KEYWORDS(KEYWORDS)
+# ---------------------
+# Declare a list of keywords associated to the current test group.
+# Since the -k option is case-insensitive, the list is stored in lower case
+# to avoid duplicates that differ only by case.
+_AT_DEFINE_SETUP([AT_KEYWORDS],
+[m4_append_uniq_w([AT_keywords], m4_tolower(_m4_expand([$1
+])))])
+
+
+# AT_CAPTURE_FILE(FILE)
+# ---------------------
+# If the current test group does not behave as expected, save the contents of
+# FILE in the test suite log.
+_AT_DEFINE_SETUP([AT_CAPTURE_FILE],
+[m4_append_uniq([AT_capture_files], ["$1"], [ \
+])])
+
+
+# AT_CLEANUP
+# ----------
+# Complete a group of related tests.
+_AT_DEFINE_INIT([AT_CLEANUP],
+[m4_ifdef([AT_ingroup], [AT_ingroup[]_m4_undefine([AT_ingroup])],
+ [m4_fatal([$0: missing AT_SETUP detected])])dnl
+m4_append([AT_help_all],
+m4_defn([AT_ordinal]);m4_defn([AT_line]);m4_defn([AT_description]);dnl
+m4_ifdef([AT_keywords], [m4_defn([AT_keywords])]);
+)dnl
+m4_divert_pop([TEST_SCRIPT])dnl Back to TEST_GROUPS
+AT_xfail
+(
+ AS_ECHO(["AT_ordinal. $at_setup_line: testing $at_desc ..."])
+ $at_traceon
+m4_undivert([TEST_SCRIPT])dnl Insert the code here
+ set +x
+ $at_times_p && times >"$at_times_file"
+) AS_MESSAGE_LOG_FD>&1 2>&1 AT_JOB_FIFO_OUT_FD>&- | eval $at_tee_pipe
+read at_status <"$at_status_file"
+[#AT_STOP_]AT_ordinal
+m4_divert_pop([TEST_GROUPS])dnl Back to KILL.
+])# AT_CLEANUP
+
+
+# AT_BANNER([TEXT])
+# -----------------
+# Start a category of related test groups. If multiple groups are executed,
+# output TEXT as a banner without any shell expansion, prior to any test
+# from the category. If TEXT is empty, no banner is printed.
+_AT_DEFINE_INIT([AT_BANNER],
+[m4_ifdef([AT_ingroup], [m4_fatal([$0: nested AT_SETUP detected])])dnl
+m4_define([AT_banner_ordinal], m4_incr(AT_banner_ordinal))
+m4_divert_text([BANNERS],
+[@%:@ Banner AT_banner_ordinal. AT_LINE
+@%:@ Category starts at test group m4_incr(AT_ordinal).
+at_banner_text_[]AT_banner_ordinal="AS_ESCAPE([$1])"])dnl
+])# AT_BANNER
+
+
+# AT_DATA(FILE, CONTENTS)
+# -----------------------
+# Initialize an input data FILE with given CONTENTS, which should be
+# empty or end with a newline.
+# This macro is not robust to active symbols in CONTENTS *on purpose*.
+# If you don't want CONTENTS to be evaluated, quote it twice.
+_AT_DEFINE_SETUP([AT_DATA],
+[m4_if([$2], [], [: >$1],
+ [$2], [[]], [: >$1],
+[cat >$1 <<'_ATEOF'
+$2[]_ATEOF
+])])
+
+
+# AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR,
+# [RUN-IF-FAIL], [RUN-IF-PASS])
+# ------------------------------------------------
+# Execute a test by performing given shell COMMANDS. These commands
+# should normally exit with STATUS, while producing expected STDOUT and
+# STDERR contents. Shell metacharacters in STDOUT and STDERR are
+# _not_ processed by the shell, but are treated as string literals.
+#
+# STATUS, STDOUT, and STDERR are not checked if equal to `ignore'.
+#
+# If STDOUT is `expout', then stdout is compared to the content of the file
+# `expout'. Likewise for STDERR and `experr'.
+#
+# If STDOUT is `stdout', then the stdout is left in the file `stdout',
+# likewise for STDERR and `stderr'. Don't do this:
+#
+# AT_CHECK([command >out])
+# # Some checks on `out'
+#
+# do this instead:
+#
+# AT_CHECK([command], [], [stdout])
+# # Some checks on `stdout'
+#
+# You might wonder why you can't just use `ignore', then directly use stdout
+# and stderr left by the test suite:
+#
+# AT_CHECK([command], [], [ignore])
+# AT_CHECK([check stdout])
+#
+# If the test suite always captured data in the file `stdout', then the
+# second command would be trying to read and write from the same file, with
+# undefined behavior. Therefore, the test suite actually captures data in
+# an internal file of a different name, and only creates `stdout' when
+# explicitly requested.
+#
+# Any line of stderr starting with leading blanks and a `+' are filtered
+# out, since most shells when tracing include subshell traces in stderr.
+# This may cause spurious failures when the test suite is run with `-x'.
+#
+_AT_DEFINE_SETUP([AT_CHECK],
+[_AT_CHECK(m4_expand([$1]), [$2], AS_ESCAPE(m4_dquote(m4_expand([$3]))),
+ AS_ESCAPE(m4_dquote(m4_expand([$4]))), [$5], [$6])])
+
+# AT_CHECK_UNQUOTED(COMMANDS, [STATUS = 0], STDOUT, STDERR,
+# [RUN-IF-FAIL], [RUN-IF-PASS])
+# ---------------------------------------------------------
+# Like AT_CHECK, but do not AS_ESCAPE shell metacharacters in the STDOUT
+# and STDERR arguments before running the comparison.
+_AT_DEFINE_SETUP([AT_CHECK_UNQUOTED],
+[_AT_CHECK(m4_expand([$1]), [$2], AS_ESCAPE(m4_dquote(m4_expand([$3])), [""]),
+ AS_ESCAPE(m4_dquote(m4_expand([$4])), [""]), [$5], [$6])])
+
+# AT_CHECK_NOESCAPE(COMMANDS, [STATUS = 0], STDOUT, STDERR,
+# [RUN-IF-FAIL], [RUN-IF-PASS])
+# ---------------------------------------------------------
+# Obsolete spelling of AT_CHECK_UNQUOTED.
+m4_define([AT_CHECK_NOESCAPE],
+[m4_warn([obsolete], [consider using AT_CHECK_UNQUOTED instead of $0])]dnl
+[_AT_CHECK(m4_expand([$1]), [$2], m4_expand([$3]),
+ m4_expand([$4]), [$5], [$6])])
+
+
+# _AT_DECIDE_TRACEABLE(COMMANDS)
+# ------------------------------
+# Worker for _AT_CHECK that expands to shell code. If COMMANDS are safe to
+# trace with `set -x', the shell code will evaluate to true. Otherwise,
+# the shell code will print a message stating an aspect of COMMANDS that makes
+# tracing them unsafe, and evaluate to false.
+#
+# Tracing COMMANDS is not safe if they contain a command that spans multiple
+# lines. When the test suite user passes `-x' or `--trace', the test suite
+# precedes every command with a `set -x'. Since most tests expect a specific
+# stderr, if only to confirm that it is empty, the test suite filters ^+ from
+# the captured stderr before comparing with the expected stderr. If a command
+# spans multiple lines, so will its trace, but a `+' only prefixes the first
+# line of that trace:
+#
+# $ echo 'foo
+# bar'
+# => stdout
+# foo
+# bar
+# => stderr
+# + foo
+# bar
+#
+# In a subset of cases, one could filter such extended shell traces from
+# stderr. Since test commands spanning several lines are rare, I chose
+# instead to simply not trace COMMANDS that could yield multiple trace lines.
+# Distinguishing such COMMANDS became the task at hand.
+#
+# These features may cause a shell command to span multiple lines:
+#
+# (a) A quoted literal newline.
+# Example:
+# echo foo'
+# 'bar
+# M4 is a hostile language for the job of parsing COMMANDS to determine whether
+# each literal newline is quoted, so we simply disable tracing for all COMMANDS
+# that bear literal newlines.
+#
+# (b) A command substitution not subject to word splitting.
+# Example:
+# var=$(printf 'foo\nbar')
+# Example:
+# echo "`printf 'foo\\nbar`"
+# One cannot know in general the number of lines a command substitution will
+# yield without executing the substituted command. As such, we disable tracing
+# for all COMMANDS containing these constructs.
+#
+# (c) A parameter expansion not subject to word splitting.
+# Example:
+# var=foo'
+# 'bar
+# echo "$var"
+# Parameter expansions appear in COMMANDS with much greater frequency than do
+# newlines and command substitutions, so disabling tracing for all such
+# COMMANDS would much more substantially devalue `testsuite -x'. To determine
+# which parameter expansions yield multiple lines, we escape all ``', `"',
+# and `\' in a copy of COMMANDS and expand that string within double quotes
+# at runtime. If the result of that expansion contains multiple lines, the
+# test suite disables tracing for the command in question.
+#
+# This method leads the test suite to expand some parameters that the shell
+# itself will never expand due to single-quotes or backslash escapes. This is
+# not a problem for `$foo' expansions, which will simply yield the empty string
+# or some unrelated value. A `${...}' expansion could actually form invalid
+# shell code, however; consider `${=foo}'. Therefore, we disable tracing for
+# all COMMANDS containing `${...}'. This affects few COMMANDS.
+#
+# This macro falls in a very hot path; the Autoconf test suite expands it 1640
+# times as of this writing. To give a sense of the impact of the heuristics I
+# just described, the test suite preemptively disables tracing for 31 of those,
+# and 268 contain parameter expansions that require runtime evaluation. The
+# balance are always safe to trace.
+m4_define([_AT_DECIDE_TRACEABLE],
+dnl Utility macro.
+dnl
+dnl Examine COMMANDS for a reason to never trace COMMANDS.
+[m4_pushdef([at_reason],
+m4_cond([m4_eval(m4_index([$1], [`]) >= 0)], [1],
+ [[a `...` command substitution]],
+ [m4_eval(m4_index([$1], [$(]) >= 0)], [1],
+ [[a $(...) command substitution]],
+ [m4_eval(m4_index([$1], [${]) >= 0)], [1],
+ [[a ${...} parameter expansion]],
+ [m4_eval(m4_index([$1], m4_newline) >= 0)], [1],
+ [[an embedded newline]],
+ [m4_eval(m4_bregexp([$1], [[^|]|[^|]]) >= 0)], [1],
+ [[a shell pipeline]],
+ []))]dnl No reason.
+[m4_if(m4_index(_m4_defn([at_reason]), [a]), [0],]dnl
+dnl We know at build time that tracing COMMANDS is never safe.
+[[at_fn_check_prepare_notrace '_m4_defn([at_reason])'],
+ m4_index([$1], [$]), [-1],]dnl
+dnl We know at build time that tracing COMMANDS is always safe.
+[[at_fn_check_prepare_trace],]dnl
+dnl COMMANDS may contain parameter expansions; expand them at runtime.
+[[at_fn_check_prepare_dynamic "AS_ESCAPE([[$1]], [`\"])"])[]]dnl
+[_m4_popdef([at_reason])])
+
+
+# AT_DIFF_STDERR/AT_DIFF_STDOUT
+# -----------------------------
+# These are subroutines of AT_CHECK. Using indirect dispatch is a tad
+# faster than using m4_case, and these are called very frequently.
+m4_define([AT_DIFF_STDERR(stderr)],
+ [echo stderr:; tee stderr <"$at_stderr"])
+m4_define([AT_DIFF_STDERR(stderr-nolog)],
+ [echo stderr captured; cp "$at_stderr" stderr])
+m4_define([AT_DIFF_STDERR(ignore)],
+ [echo stderr:; cat "$at_stderr"])
+m4_define([AT_DIFF_STDERR(ignore-nolog)])
+m4_define([AT_DIFF_STDERR(experr)],
+ [$at_diff experr "$at_stderr" || at_failed=:])
+m4_define([AT_DIFF_STDERR()],
+ [at_fn_diff_devnull "$at_stderr" || at_failed=:])
+
+m4_define([AT_DIFF_STDOUT(stdout)],
+ [echo stdout:; tee stdout <"$at_stdout"])
+m4_define([AT_DIFF_STDOUT(stdout-nolog)],
+ [echo stdout captured; cp "$at_stdout" stdout])
+m4_define([AT_DIFF_STDOUT(ignore)],
+ [echo stdout:; cat "$at_stdout"])
+m4_define([AT_DIFF_STDOUT(ignore-nolog)])
+m4_define([AT_DIFF_STDOUT(expout)],
+ [$at_diff expout "$at_stdout" || at_failed=:])
+m4_define([AT_DIFF_STDOUT()],
+ [at_fn_diff_devnull "$at_stdout" || at_failed=:])
+
+# _AT_CHECK(COMMANDS, [STATUS = 0], STDOUT, STDERR,
+# [RUN-IF-FAIL], [RUN-IF-PASS])
+# -------------------------------------------------
+# Worker for AT_CHECK and AT_CHECK_UNQUOTED, with COMMANDS, STDOUT, and
+# STDERR pre-expanded.
+#
+# Implementation Details
+# ----------------------
+# Ideally, we would like to run
+#
+# ( $at_traceon; COMMANDS >at-stdout 2> at-stderr )
+#
+# but we must group COMMANDS as it is not limited to a single command, and
+# then the shells will save the traces in at-stderr. So we have to filter
+# them out when checking stderr, and we must send them into the test suite's
+# stderr to honor -x properly. Since only the first line of the trace of a
+# multiline command starts with a `+', and I know of no straightforward way to
+# filter out the unadorned trace lines, we disable shell tracing entirely for
+# commands that could span multiple lines.
+#
+# Limiting COMMANDS to a single command is not good either, since then
+# the user herself would use {} or (), and then we face the same problem.
+#
+# But then, there is no point in running
+#
+# ( $at_traceon { $1 ; } >at-stdout 2>at-stder1 )
+#
+# instead of the simpler
+#
+# ( $at_traceon; $1 ) >at-stdout 2>at-stder1
+#
+# Note that we truncate and append to the output files, to avoid losing
+# output from multiple concurrent processes, e.g., an inner testsuite
+# with parallel jobs.
+m4_define([_AT_CHECK],
+[m4_define([AT_ingroup])]dnl
+[{ set +x
+AS_ECHO(["$at_srcdir/AT_LINE: AS_ESCAPE([[$1]])"])
+_AT_DECIDE_TRACEABLE([$1]) _AT_LINE_ESCAPED
+( $at_check_trace; [$1]
+) >>"$at_stdout" 2>>"$at_stderr" AS_MESSAGE_LOG_FD>&-
+at_status=$? at_failed=false
+$at_check_filter
+m4_ifdef([AT_DIFF_STDERR($4)], [m4_indir([AT_DIFF_STDERR($4)])],
+ [echo >>"$at_stderr"; AS_ECHO([["$4"]]) | \
+ $at_diff - "$at_stderr" || at_failed=:])
+m4_ifdef([AT_DIFF_STDOUT($3)], [m4_indir([AT_DIFF_STDOUT($3)])],
+ [echo >>"$at_stdout"; AS_ECHO([["$3"]]) | \
+ $at_diff - "$at_stdout" || at_failed=:])
+m4_if([$2], [ignore], [at_fn_check_skip],
+ [at_fn_check_status m4_default([$2], [0])]) $at_status "$at_srcdir/AT_LINE"
+m4_ifvaln([$5$6], [AS_IF($at_failed, [$5], [$6])])]dnl
+[$at_failed && at_fn_log_failure AT_capture_files
+$at_traceon; }
+])# _AT_CHECK
+
+# _AT_CHECK_EXIT(COMMANDS, [EXIT-STATUS-IF-PASS])
+# -----------------------------------------------
+# Minimal version of _AT_CHECK for AT_SKIP_IF and AT_FAIL_IF.
+m4_define([_AT_CHECK_EXIT],
+[m4_define([AT_ingroup])]dnl
+[AS_ECHO(_AT_LINE_ESCAPED) >"$at_check_line_file"
+m4_ifval([$1], [($1) \
+ && ])at_fn_check_skip $2 "$at_srcdir/AT_LINE"])# _AT_CHECK_EXIT
diff --git a/lib/autotest/specific.m4 b/lib/autotest/specific.m4
new file mode 100644
index 0000000..155a5da
--- /dev/null
+++ b/lib/autotest/specific.m4
@@ -0,0 +1,74 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# M4 macros used in running tests using third-party testing tools.
+m4_define([_AT_COPYRIGHT_YEARS],
+[Copyright (C) 2009-2012 Free Software Foundation, Inc.])
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+
+## ------------------------ ##
+## Erlang EUnit unit tests. ##
+## ------------------------ ##
+
+# AT_CHECK_EUNIT(MODULE, SPEC, [ERLFLAGS], [RUN-IF-FAIL], [RUN-IF-PASS])
+# ----------------------------------------------------------------------
+# Check that the EUnit test specification SPEC passes. The ERLFLAGS
+# optional flags are passed to the Erlang interpreter command line to
+# execute the test. The test is executed from an automatically
+# generated Erlang module named MODULE. Each call to this macro should
+# have a distinct MODULE name within each test group, to ease
+# debugging.
+# An Erlang/OTP version which contains the eunit library must be
+# installed, in order to execute this macro in a test suite. The ERL,
+# ERLC, and ERLCFLAGS variables must be defined in atconfig,
+# typically by using the AC_ERLANG_PATH_ERL and AC_ERLANG_PATH_ERLC
+# Autoconf macros.
+_AT_DEFINE_SETUP([AT_CHECK_EUNIT],
+[AT_SKIP_IF([test ! -f "$ERL" || test ! -f "$ERLC"])
+## A wrapper to EUnit, to exit the Erlang VM with the right exit code:
+AT_DATA([$1.erl],
+[[-module($1).
+-export([test/0, test/1]).
+test() -> test([]).
+test(Options) ->
+ TestSpec = $2,
+ ReturnValue = case code:load_file(eunit) of
+ {module, _} -> case eunit:test(TestSpec, Options) of
+ ok -> "0\n"; %% test passes
+ _ -> "1\n" %% test fails
+ end;
+ _ -> "77\n" %% EUnit not found, test skipped
+ end,
+ file:write_file("$1.result", ReturnValue),
+ init:stop().
+]])
+AT_CHECK(["$ERLC" $ERLCFLAGS -b beam $1.erl])
+## Make EUnit verbose when testsuite is verbose:
+if test -z "$at_verbose"; then
+ at_eunit_options="verbose"
+else
+ at_eunit_options=""
+fi
+AT_CHECK(["$ERL" $3 -s $1 test $at_eunit_options -noshell], [0], [ignore], [],
+ [$4], [$5])
+AT_CAPTURE_FILE([$1.result])
+AT_CHECK([test -f "$1.result" && (exit `cat "$1.result"`)])
+])
diff --git a/lib/emacs/Makefile.am b/lib/emacs/Makefile.am
new file mode 100644
index 0000000..aa62207
--- /dev/null
+++ b/lib/emacs/Makefile.am
@@ -0,0 +1,3 @@
+# Make Autoconf Emacs library.
+
+dist_lisp_LISP = autoconf-mode.el autotest-mode.el
diff --git a/lib/emacs/Makefile.in b/lib/emacs/Makefile.in
new file mode 100644
index 0000000..13490a3
--- /dev/null
+++ b/lib/emacs/Makefile.in
@@ -0,0 +1,420 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf Emacs library.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = lib/emacs
+DIST_COMMON = $(dist_lisp_LISP) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(lispdir)"
+dist_lispLISP_INSTALL = $(INSTALL_DATA)
+LISP = $(dist_lisp_LISP)
+am__ELFILES = autoconf-mode.el autotest-mode.el
+am__ELCFILES = $(am__ELFILES:.el=.elc)
+ELCFILES = $(LISP:.el=.elc)
+elisp_comp = $(top_srcdir)/build-aux/elisp-comp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_lisp_LISP = autoconf-mode.el autotest-mode.el
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/emacs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/emacs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+elc-stamp: $(LISP)
+ @echo 'WARNING: Warnings can be ignored. :-)'
+ @rm -f elc-temp && touch elc-temp
+ if test "$(EMACS)" != no; then \
+ set x; \
+ list='$(LISP)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ set x "$$@" "$$d$$p"; shift; \
+ done; \
+ shift; \
+ EMACS="$(EMACS)" $(SHELL) $(elisp_comp) "$$@" || exit 1; \
+ else : ; fi
+ @mv -f elc-temp $@
+$(am__ELCFILES): elc-stamp
+ @if test "$(EMACS)" != no && test ! -f $@; then \
+ trap 'rm -rf elc-lock elc-stamp' 1 2 13 15; \
+ if mkdir elc-lock 2>/dev/null; then \
+ rm -f elc-stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) elc-stamp; \
+ rmdir elc-lock; \
+ else \
+ while test -d elc-lock; do sleep 1; done; \
+ test -f elc-stamp; exit $$?; \
+ fi; \
+ else : ; fi
+install-dist_lispLISP: $(dist_lisp_LISP) $(ELCFILES)
+ @$(NORMAL_INSTALL)
+ @if test "$(EMACS)" != no && test -n "$(lispdir)"; then \
+ $(MKDIR_P) "$(DESTDIR)$(lispdir)"; \
+ list='$(dist_lisp_LISP)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ echo " $(dist_lispLISP_INSTALL) '$$d$$p' '$(DESTDIR)$(lispdir)/$$f'"; \
+ $(dist_lispLISP_INSTALL) "$$d$$p" "$(DESTDIR)$(lispdir)/$$f" || exit $$?; \
+ if test -f $${p}c; then \
+ echo " $(dist_lispLISP_INSTALL) '$${p}c' '$(DESTDIR)$(lispdir)/$${f}c'"; \
+ $(dist_lispLISP_INSTALL) "$${p}c" "$(DESTDIR)$(lispdir)/$${f}c" || exit $$?; \
+ else : ; fi; \
+ done; \
+ else : ; fi
+
+uninstall-dist_lispLISP:
+ @$(NORMAL_UNINSTALL)
+ @test "$(EMACS)" != no && test -n "$(lispdir)" || exit 0; \
+ list='$(dist_lisp_LISP)'; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ filesc=`echo "$$files" | sed 's|$$|c|'`; \
+ echo " ( cd '$(DESTDIR)$(lispdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(lispdir)" && rm -f $$files || exit $$?; \
+ echo " ( cd '$(DESTDIR)$(lispdir)' && rm -f" $$filesc ")"; \
+ cd "$(DESTDIR)$(lispdir)" && rm -f $$filesc
+
+clean-lisp:
+ -rm -f elc-stamp $(ELCFILES)
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LISP) $(ELCFILES)
+installdirs:
+ for dir in "$(DESTDIR)$(lispdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-lisp mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_lispLISP
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_lispLISP
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-lisp \
+ distclean distclean-generic distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-dist_lispLISP install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-dist_lispLISP
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/emacs/autoconf-mode.el b/lib/emacs/autoconf-mode.el
new file mode 100644
index 0000000..161ea82
--- /dev/null
+++ b/lib/emacs/autoconf-mode.el
@@ -0,0 +1,100 @@
+;;; autoconf-mode.el --- autoconf code editing commands for Emacs
+
+;; Author: Martin Buchholz (martin@xemacs.org)
+;; Maintainer: Martin Buchholz
+;; Keywords: languages, faces, m4, configure
+
+;; This file is part of Autoconf
+
+;; Copyright (C) 2001, 2006, 2009-2012 Free Software Foundation, Inc.
+;;
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;; A major mode for editing autoconf input (like configure.in).
+;; Derived from m4-mode.el by Andrew Csillag (drew@staff.prodigy.com)
+
+;;; Your should add the following to your Emacs configuration file:
+
+;; (autoload 'autoconf-mode "autoconf-mode"
+;; "Major mode for editing autoconf files." t)
+;; (setq auto-mode-alist
+;; (cons '("\\.ac\\'\\|configure\\.in\\'" . autoconf-mode)
+;; auto-mode-alist))
+
+;;; Code:
+
+;;thank god for make-regexp.el!
+(defvar autoconf-font-lock-keywords
+ `(("\\bdnl \\(.*\\)" 1 font-lock-comment-face t)
+ ("\\$[0-9*#@]" . font-lock-variable-name-face)
+ ("\\b\\(m4_\\)?\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(exit\\|wrap\\)\\|aketemp\\|kstemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|ivert\\)\\|ix\\)\\)\\b" . font-lock-keyword-face)
+ ("^\\(\\(m4_\\)?define\\(_default\\)?\\|A._DEFUN\\|m4_defun\\(_once\\|_init\\)?\\)(\\[?\\([A-Za-z0-9_]+\\)" 5 font-lock-function-name-face)
+ "default font-lock-keywords")
+)
+
+(defvar autoconf-mode-syntax-table nil
+ "syntax table used in autoconf mode")
+(setq autoconf-mode-syntax-table (make-syntax-table))
+(modify-syntax-entry ?\" "\"" autoconf-mode-syntax-table)
+;;(modify-syntax-entry ?\' "\"" autoconf-mode-syntax-table)
+(modify-syntax-entry ?# "<\n" autoconf-mode-syntax-table)
+(modify-syntax-entry ?\n ">#" autoconf-mode-syntax-table)
+(modify-syntax-entry ?\( "()" autoconf-mode-syntax-table)
+(modify-syntax-entry ?\) ")(" autoconf-mode-syntax-table)
+(modify-syntax-entry ?\[ "(]" autoconf-mode-syntax-table)
+(modify-syntax-entry ?\] ")[" autoconf-mode-syntax-table)
+(modify-syntax-entry ?* "." autoconf-mode-syntax-table)
+(modify-syntax-entry ?_ "_" autoconf-mode-syntax-table)
+
+(defvar autoconf-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map '[(control c) (\;)] 'comment-region)
+ map))
+
+(defun autoconf-current-defun ()
+ "Autoconf value for `add-log-current-defun-function'.
+This tells add-log.el how to find the current macro."
+ (save-excursion
+ (if (re-search-backward "^\\(m4_define\\(_default\\)?\\|m4_defun\\(_once\\|_init\\)?\\|A._DEFUN\\)(\\[*\\([A-Za-z0-9_]+\\)" nil t)
+ (buffer-substring (match-beginning 4)
+ (match-end 4))
+ nil)))
+
+;;;###autoload
+(defun autoconf-mode ()
+ "A major-mode to edit Autoconf files like configure.ac.
+\\{autoconf-mode-map}
+"
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map autoconf-mode-map)
+
+ (make-local-variable 'add-log-current-defun-function)
+ (setq add-log-current-defun-function 'autoconf-current-defun)
+
+ (make-local-variable 'comment-start)
+ (setq comment-start "# ")
+ (make-local-variable 'parse-sexp-ignore-comments)
+ (setq parse-sexp-ignore-comments t)
+
+ (make-local-variable 'font-lock-defaults)
+ (setq major-mode 'autoconf-mode)
+ (setq mode-name "Autoconf")
+ (setq font-lock-defaults `(autoconf-font-lock-keywords nil))
+ (set-syntax-table autoconf-mode-syntax-table)
+ (run-hooks 'autoconf-mode-hook))
+
+(provide 'autoconf-mode)
+
+;;; autoconf-mode.el ends here
diff --git a/lib/emacs/autotest-mode.el b/lib/emacs/autotest-mode.el
new file mode 100644
index 0000000..6cb304e
--- /dev/null
+++ b/lib/emacs/autotest-mode.el
@@ -0,0 +1,101 @@
+;;; autotest-mode.el --- autotest code editing commands for Emacs
+
+;; Author: Akim Demaille (akim@freefriends.org)
+;; Keywords: languages, faces, m4, Autotest
+
+;; This file is part of Autoconf
+
+;; Copyright (C) 2001, 2009-2012 Free Software Foundation, Inc.
+;;
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; A major mode for editing autotest input (like testsuite.at).
+;; Derived from autoconf-mode.el, by Martin Buchholz (martin@xemacs.org).
+
+;;; Your should add the following to your Emacs configuration file:
+
+;; (autoload 'autotest-mode "autotest-mode"
+;; "Major mode for editing autotest files." t)
+;; (setq auto-mode-alist
+;; (cons '("\\.at\\'" . autotest-mode) auto-mode-alist))
+
+;;; Code:
+
+(defvar autotest-font-lock-keywords
+ `(("\\bdnl\\b\\(.*\\)" 1 font-lock-comment-face t)
+ ("\\$[0-9*#@]" . font-lock-variable-name-face)
+ ("^\\(m4_define\\|m4_defun\\)(\\[*\\([A-Za-z0-9_]+\\)" 2 font-lock-function-name-face)
+ ("^AT_SETUP(\\[+\\([^]]+\\)" 1 font-lock-function-name-face)
+ ("^AT_DATA(\\[+\\([^]]+\\)" 1 font-lock-variable-name-face)
+ ("\\b\\(_?m4_[_a-z0-9]*\\|_?A[ST]_[_A-Z0-9]+\\)\\b" . font-lock-keyword-face)
+ "default font-lock-keywords")
+)
+
+(defvar autotest-mode-syntax-table nil
+ "syntax table used in autotest mode")
+(setq autotest-mode-syntax-table (make-syntax-table))
+(modify-syntax-entry ?\" "\"" autotest-mode-syntax-table)
+;;(modify-syntax-entry ?\' "\"" autotest-mode-syntax-table)
+(modify-syntax-entry ?# "<\n" autotest-mode-syntax-table)
+(modify-syntax-entry ?\n ">#" autotest-mode-syntax-table)
+(modify-syntax-entry ?\( "()" autotest-mode-syntax-table)
+(modify-syntax-entry ?\) ")(" autotest-mode-syntax-table)
+(modify-syntax-entry ?\[ "(]" autotest-mode-syntax-table)
+(modify-syntax-entry ?\] ")[" autotest-mode-syntax-table)
+(modify-syntax-entry ?* "." autotest-mode-syntax-table)
+(modify-syntax-entry ?_ "_" autotest-mode-syntax-table)
+
+(defvar autotest-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map '[(control c) (\;)] 'comment-region)
+ map))
+
+(defun autotest-current-defun ()
+ "Autotest value for `add-log-current-defun-function'.
+This tells add-log.el how to find the current test group/macro."
+ (save-excursion
+ (if (re-search-backward "^\\(m4_define\\|m4_defun\\|AT_SETUP\\)(\\[+\\([^]]+\\)" nil t)
+ (buffer-substring (match-beginning 2)
+ (match-end 2))
+ nil)))
+
+;;;###autoload
+(defun autotest-mode ()
+ "A major-mode to edit Autotest files like testsuite.at.
+\\{autotest-mode-map}
+"
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map autotest-mode-map)
+
+ (make-local-variable 'add-log-current-defun-function)
+ (setq add-log-current-defun-function 'autotest-current-defun)
+
+ (make-local-variable 'comment-start)
+ (setq comment-start "# ")
+ (make-local-variable 'parse-sexp-ignore-comments)
+ (setq parse-sexp-ignore-comments t)
+
+ (make-local-variable 'font-lock-defaults)
+ (setq major-mode 'autotest-mode)
+ (setq mode-name "Autotest")
+ (setq font-lock-defaults `(autotest-font-lock-keywords nil))
+ (set-syntax-table autotest-mode-syntax-table)
+ (run-hooks 'autotest-mode-hook))
+
+(provide 'autotest-mode)
+
+;;; autotest-mode.el ends here
diff --git a/lib/freeze.mk b/lib/freeze.mk
new file mode 100644
index 0000000..492342c
--- /dev/null
+++ b/lib/freeze.mk
@@ -0,0 +1,132 @@
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+## ----------------- ##
+## Freeze M4 files. ##
+## ----------------- ##
+
+SUFFIXES = .m4 .m4f
+
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+
+## --------------------------- ##
+## Run ETAGS on some M4 code. ##
+## --------------------------- ##
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+
+## -------------------------------- ##
+## Looking for forbidden patterns. ##
+## -------------------------------- ##
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
diff --git a/lib/m4sugar/Makefile.am b/lib/m4sugar/Makefile.am
new file mode 100644
index 0000000..23824a3
--- /dev/null
+++ b/lib/m4sugar/Makefile.am
@@ -0,0 +1,75 @@
+# Make Autoconf library for M4sugar.
+
+# Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+m4sugarlibdir = $(pkgdatadir)/m4sugar
+dist_m4sugarlib_DATA = m4sugar.m4 foreach.m4 m4sh.m4
+nodist_m4sugarlib_DATA = version.m4 m4sugar.m4f m4sh.m4f
+CLEANFILES = $(nodist_m4sugarlib_DATA)
+
+# Get the release year from ../ChangeLog.
+RELEASE_YEAR = \
+ `sed 's/^\([0-9][0-9][0-9][0-9]\).*/\1/;q' $(top_srcdir)/ChangeLog`
+
+## ------------ ##
+## version.m4. ##
+## ------------ ##
+
+# The `:;' works around a redirected compound command bash exit status bug.
+version.m4: Makefile
+ :;{ \
+ echo '# This file is part of -*- Autoconf -*-.' && \
+ echo '# Version of Autoconf.' && \
+ echo '# Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007, 2009' && \
+ echo '# Free Software Foundation, Inc.' && \
+ echo &&\
+ echo 'm4_define([m4_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([m4_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([m4_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([m4_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([m4_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([m4_PACKAGE_URL], [$(PACKAGE_URL)])' && \
+ echo 'm4_define([m4_PACKAGE_YEAR], ['$(RELEASE_YEAR)'])'; \
+ } > $@-t
+ mv $@-t $@
+
+
+## --------------- ##
+## Building TAGS. ##
+## --------------- ##
+
+TAGS_FILES = $(dist_m4sugarlib_DATA)
+
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+
+
+## -------- ##
+## Checks. ##
+## -------- ##
+
+check-local: check-forbidden-patterns
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_m4sugarlib_DATA)
+
+
+
+## ------------------ ##
+## The frozen files. ##
+## ------------------ ##
+
+m4sugar.m4f: $(m4sugar_m4f_dependencies)
+m4sh.m4f: $(m4sh_m4f_dependencies)
+include ../freeze.mk
diff --git a/lib/m4sugar/Makefile.in b/lib/m4sugar/Makefile.in
new file mode 100644
index 0000000..c026628
--- /dev/null
+++ b/lib/m4sugar/Makefile.in
@@ -0,0 +1,622 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf library for M4sugar.
+
+# Copyright (C) 2001-2002, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(dist_m4sugarlib_DATA) $(srcdir)/../freeze.mk \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = lib/m4sugar
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(m4sugarlibdir)" \
+ "$(DESTDIR)$(m4sugarlibdir)"
+DATA = $(dist_m4sugarlib_DATA) $(nodist_m4sugarlib_DATA)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+m4sugarlibdir = $(pkgdatadir)/m4sugar
+dist_m4sugarlib_DATA = m4sugar.m4 foreach.m4 m4sh.m4
+nodist_m4sugarlib_DATA = version.m4 m4sugar.m4f m4sh.m4f
+CLEANFILES = $(nodist_m4sugarlib_DATA)
+
+# Get the release year from ../ChangeLog.
+RELEASE_YEAR = \
+ `sed 's/^\([0-9][0-9][0-9][0-9]\).*/\1/;q' $(top_srcdir)/ChangeLog`
+
+TAGS_FILES = $(dist_m4sugarlib_DATA)
+ETAGS_ARGS = $(ETAGS_FOR_AUTOCONF)
+forbidden_patterns = -e '^_*EOF' -e ' cmp '
+forbidden_patterns_files = $(dist_m4sugarlib_DATA)
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/m4sugar/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/m4sugar/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-dist_m4sugarlibDATA: $(dist_m4sugarlib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(m4sugarlibdir)" || $(MKDIR_P) "$(DESTDIR)$(m4sugarlibdir)"
+ @list='$(dist_m4sugarlib_DATA)'; test -n "$(m4sugarlibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4sugarlibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4sugarlibdir)" || exit $$?; \
+ done
+
+uninstall-dist_m4sugarlibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_m4sugarlib_DATA)'; test -n "$(m4sugarlibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(m4sugarlibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(m4sugarlibdir)" && rm -f $$files
+install-nodist_m4sugarlibDATA: $(nodist_m4sugarlib_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(m4sugarlibdir)" || $(MKDIR_P) "$(DESTDIR)$(m4sugarlibdir)"
+ @list='$(nodist_m4sugarlib_DATA)'; test -n "$(m4sugarlibdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4sugarlibdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(m4sugarlibdir)" || exit $$?; \
+ done
+
+uninstall-nodist_m4sugarlibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(nodist_m4sugarlib_DATA)'; test -n "$(m4sugarlibdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(m4sugarlibdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(m4sugarlibdir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(m4sugarlibdir)" "$(DESTDIR)$(m4sugarlibdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_m4sugarlibDATA \
+ install-nodist_m4sugarlibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_m4sugarlibDATA \
+ uninstall-nodist_m4sugarlibDATA
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am check-local clean \
+ clean-generic ctags distclean distclean-generic distclean-tags \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am \
+ install-dist_m4sugarlibDATA install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man \
+ install-nodist_m4sugarlibDATA install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+ pdf-am ps ps-am tags uninstall uninstall-am \
+ uninstall-dist_m4sugarlibDATA uninstall-nodist_m4sugarlibDATA
+
+
+# The `:;' works around a redirected compound command bash exit status bug.
+version.m4: Makefile
+ :;{ \
+ echo '# This file is part of -*- Autoconf -*-.' && \
+ echo '# Version of Autoconf.' && \
+ echo '# Copyright (C) 1999, 2000, 2001, 2002, 2006, 2007, 2009' && \
+ echo '# Free Software Foundation, Inc.' && \
+ echo &&\
+ echo 'm4_define([m4_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([m4_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([m4_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([m4_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([m4_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([m4_PACKAGE_URL], [$(PACKAGE_URL)])' && \
+ echo 'm4_define([m4_PACKAGE_YEAR], ['$(RELEASE_YEAR)'])'; \
+ } > $@-t
+ mv $@-t $@
+
+check-local: check-forbidden-patterns
+
+m4sugar.m4f: $(m4sugar_m4f_dependencies)
+m4sh.m4f: $(m4sh_m4f_dependencies)
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/m4sugar/foreach.m4 b/lib/m4sugar/foreach.m4
new file mode 100644
index 0000000..3fc1913
--- /dev/null
+++ b/lib/m4sugar/foreach.m4
@@ -0,0 +1,362 @@
+# -*- Autoconf -*-
+# This file is part of Autoconf.
+# foreach-based replacements for recursive functions.
+# Speeds up GNU M4 1.4.x by avoiding quadratic $@ recursion, but penalizes
+# GNU M4 1.6 by requiring more memory and macro expansions.
+#
+# Copyright (C) 2008-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Eric Blake.
+
+# In M4 1.4.x, every byte of $@ is rescanned. This means that an
+# algorithm on n arguments that recurses with one less argument each
+# iteration will scan n * (n + 1) / 2 arguments, for O(n^2) time. In
+# M4 1.6, this was fixed so that $@ is only scanned once, then
+# back-references are made to information stored about the scan.
+# Thus, n iterations need only scan n arguments, for O(n) time.
+# Additionally, in M4 1.4.x, recursive algorithms did not clean up
+# memory very well, requiring O(n^2) memory rather than O(n) for n
+# iterations.
+#
+# This file is designed to overcome the quadratic nature of $@
+# recursion by writing a variant of m4_foreach that uses m4_for rather
+# than $@ recursion to operate on the list. This involves more macro
+# expansions, but avoids the need to rescan a quadratic number of
+# arguments, making these replacements very attractive for M4 1.4.x.
+# On the other hand, in any version of M4, expanding additional macros
+# costs additional time; therefore, in M4 1.6, where $@ recursion uses
+# fewer macros, these replacements actually pessimize performance.
+# Additionally, the use of $10 to mean the tenth argument violates
+# POSIX; although all versions of m4 1.4.x support this meaning, a
+# future m4 version may switch to take it as the first argument
+# concatenated with a literal 0, so the implementations in this file
+# are not future-proof. Thus, this file is conditionally included as
+# part of m4_init(), only when it is detected that M4 probably has
+# quadratic behavior (ie. it lacks the macro __m4_version__).
+#
+# Please keep this file in sync with m4sugar.m4.
+
+# _m4_foreach(PRE, POST, IGNORED, ARG...)
+# ---------------------------------------
+# Form the common basis of the m4_foreach and m4_map macros. For each
+# ARG, expand PRE[ARG]POST[]. The IGNORED argument makes recursion
+# easier, and must be supplied rather than implicit.
+#
+# This version minimizes the number of times that $@ is evaluated by
+# using m4_for to generate a boilerplate into _m4_f then passing $@ to
+# that temporary macro. Thus, the recursion is done in m4_for without
+# reparsing any user input, and is not quadratic. For an idea of how
+# this works, note that m4_foreach(i,[1,2],[i]) calls
+# _m4_foreach([m4_define([i],],[)i],[],[1],[2])
+# which defines _m4_f:
+# $1[$4]$2[]$1[$5]$2[]_m4_popdef([_m4_f])
+# then calls _m4_f([m4_define([i],],[)i],[],[1],[2]) for a net result:
+# m4_define([i],[1])i[]m4_define([i],[2])i[]_m4_popdef([_m4_f]).
+m4_define([_m4_foreach],
+[m4_if([$#], [3], [],
+ [m4_pushdef([_m4_f], _m4_for([4], [$#], [1],
+ [$0_([1], [2],], [)])[_m4_popdef([_m4_f])])_m4_f($@)])])
+
+m4_define([_m4_foreach_],
+[[$$1[$$3]$$2[]]])
+
+# m4_case(SWITCH, VAL1, IF-VAL1, VAL2, IF-VAL2, ..., DEFAULT)
+# -----------------------------------------------------------
+# Find the first VAL that SWITCH matches, and expand the corresponding
+# IF-VAL. If there are no matches, expand DEFAULT.
+#
+# Use m4_for to create a temporary macro in terms of a boilerplate
+# m4_if with final cleanup. If $# is even, we have DEFAULT; if it is
+# odd, then rounding the last $# up in the temporary macro is
+# harmless. For example, both m4_case(1,2,3,4,5) and
+# m4_case(1,2,3,4,5,6) result in the intermediate _m4_case being
+# m4_if([$1],[$2],[$3],[$1],[$4],[$5],_m4_popdef([_m4_case])[$6])
+m4_define([m4_case],
+[m4_if(m4_eval([$# <= 2]), [1], [$2],
+[m4_pushdef([_$0], [m4_if(]_m4_for([2], m4_eval([($# - 1) / 2 * 2]), [2],
+ [_$0_(], [)])[_m4_popdef(
+ [_$0])]m4_dquote($m4_eval([($# + 1) & ~1]))[)])_$0($@)])])
+
+m4_define([_m4_case_],
+[$0_([1], [$1], m4_incr([$1]))])
+
+m4_define([_m4_case__],
+[[[$$1],[$$2],[$$3],]])
+
+# m4_bmatch(SWITCH, RE1, VAL1, RE2, VAL2, ..., DEFAULT)
+# -----------------------------------------------------
+# m4 equivalent of
+#
+# if (SWITCH =~ RE1)
+# VAL1;
+# elif (SWITCH =~ RE2)
+# VAL2;
+# elif ...
+# ...
+# else
+# DEFAULT
+#
+# We build the temporary macro _m4_b:
+# m4_define([_m4_b], _m4_defn([_m4_bmatch]))_m4_b([$1], [$2], [$3])...
+# _m4_b([$1], [$m-1], [$m])_m4_b([], [], [$m+1]_m4_popdef([_m4_b]))
+# then invoke m4_unquote(_m4_b($@)), for concatenation with later text.
+m4_define([m4_bmatch],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+ [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
+ [$#], 2, [$2],
+ [m4_pushdef([_m4_b], [m4_define([_m4_b],
+ _m4_defn([_$0]))]_m4_for([3], m4_eval([($# + 1) / 2 * 2 - 1]),
+ [2], [_$0_(], [)])[_m4_b([], [],]m4_dquote([$]m4_eval(
+ [($# + 1) / 2 * 2]))[_m4_popdef([_m4_b]))])m4_unquote(_m4_b($@))])])
+
+m4_define([_m4_bmatch],
+[m4_if(m4_bregexp([$1], [$2]), [-1], [], [[$3]m4_define([$0])])])
+
+m4_define([_m4_bmatch_],
+[$0_([1], m4_decr([$1]), [$1])])
+
+m4_define([_m4_bmatch__],
+[[_m4_b([$$1], [$$2], [$$3])]])
+
+
+# m4_cond(TEST1, VAL1, IF-VAL1, TEST2, VAL2, IF-VAL2, ..., [DEFAULT])
+# -------------------------------------------------------------------
+# Similar to m4_if, except that each TEST is expanded when encountered.
+# If the expansion of TESTn matches the string VALn, the result is IF-VALn.
+# The result is DEFAULT if no tests passed. This macro allows
+# short-circuiting of expensive tests, where it pays to arrange quick
+# filter tests to run first.
+#
+# m4_cond already guarantees either 3*n or 3*n + 1 arguments, 1 <= n.
+# We only have to speed up _m4_cond, by building the temporary _m4_c:
+# m4_define([_m4_c], _m4_defn([m4_unquote]))_m4_c([m4_if(($1), [($2)],
+# [[$3]m4_define([_m4_c])])])_m4_c([m4_if(($4), [($5)],
+# [[$6]m4_define([_m4_c])])])..._m4_c([m4_if(($m-2), [($m-1)],
+# [[$m]m4_define([_m4_c])])])_m4_c([[$m+1]]_m4_popdef([_m4_c]))
+# We invoke m4_unquote(_m4_c($@)), for concatenation with later text.
+m4_define([_m4_cond],
+[m4_pushdef([_m4_c], [m4_define([_m4_c],
+ _m4_defn([m4_unquote]))]_m4_for([2], m4_eval([$# / 3 * 3 - 1]), [3],
+ [$0_(], [)])[_m4_c(]m4_dquote(m4_dquote(
+ [$]m4_eval([$# / 3 * 3 + 1])))[_m4_popdef([_m4_c]))])m4_unquote(_m4_c($@))])
+
+m4_define([_m4_cond_],
+[$0_(m4_decr([$1]), [$1], m4_incr([$1]))])
+
+m4_define([_m4_cond__],
+[[_m4_c([m4_if(($$1), [($$2)], [[$$3]m4_define([_m4_c])])])]])
+
+# m4_bpatsubsts(STRING, RE1, SUBST1, RE2, SUBST2, ...)
+# ----------------------------------------------------
+# m4 equivalent of
+#
+# $_ = STRING;
+# s/RE1/SUBST1/g;
+# s/RE2/SUBST2/g;
+# ...
+#
+# m4_bpatsubsts already validated an odd number of arguments; we only
+# need to speed up _m4_bpatsubsts. To avoid nesting, we build the
+# temporary _m4_p:
+# m4_define([_m4_p], [$1])m4_define([_m4_p],
+# m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$2], [$3]))m4_define([_m4_p],
+# m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$4], [$5]))m4_define([_m4_p],...
+# m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$m-1], [$m]))m4_unquote(
+# _m4_defn([_m4_p])_m4_popdef([_m4_p]))
+m4_define([_m4_bpatsubsts],
+[m4_pushdef([_m4_p], [m4_define([_m4_p],
+ ]m4_dquote([$]1)[)]_m4_for([3], [$#], [2], [$0_(],
+ [)])[m4_unquote(_m4_defn([_m4_p])_m4_popdef([_m4_p]))])_m4_p($@)])
+
+m4_define([_m4_bpatsubsts_],
+[$0_(m4_decr([$1]), [$1])])
+
+m4_define([_m4_bpatsubsts__],
+[[m4_define([_m4_p],
+m4_bpatsubst(m4_dquote(_m4_defn([_m4_p])), [$$1], [$$2]))]])
+
+# m4_shiftn(N, ...)
+# -----------------
+# Returns ... shifted N times. Useful for recursive "varargs" constructs.
+#
+# m4_shiftn already validated arguments; we only need to speed up
+# _m4_shiftn. If N is 3, then we build the temporary _m4_s, defined as
+# ,[$5],[$6],...,[$m]_m4_popdef([_m4_s])
+# before calling m4_shift(_m4_s($@)).
+m4_define([_m4_shiftn],
+[m4_if(m4_incr([$1]), [$#], [], [m4_pushdef([_m4_s],
+ _m4_for(m4_eval([$1 + 2]), [$#], [1],
+ [[,]m4_dquote($], [)])[_m4_popdef([_m4_s])])m4_shift(_m4_s($@))])])
+
+# m4_do(STRING, ...)
+# ------------------
+# This macro invokes all its arguments (in sequence, of course). It is
+# useful for making your macros more structured and readable by dropping
+# unnecessary dnl's and have the macros indented properly.
+#
+# Here, we use the temporary macro _m4_do, defined as
+# $1[]$2[]...[]$n[]_m4_popdef([_m4_do])
+m4_define([m4_do],
+[m4_if([$#], [0], [],
+ [m4_pushdef([_$0], _m4_for([1], [$#], [1],
+ [$], [[[]]])[_m4_popdef([_$0])])_$0($@)])])
+
+# m4_dquote_elt(ARGS)
+# -------------------
+# Return ARGS as an unquoted list of double-quoted arguments.
+#
+# _m4_foreach to the rescue.
+m4_define([m4_dquote_elt],
+[m4_if([$#], [0], [], [[[$1]]_m4_foreach([,m4_dquote(], [)], $@)])])
+
+# m4_reverse(ARGS)
+# ----------------
+# Output ARGS in reverse order.
+#
+# Invoke _m4_r($@) with the temporary _m4_r built as
+# [$m], [$m-1], ..., [$2], [$1]_m4_popdef([_m4_r])
+m4_define([m4_reverse],
+[m4_if([$#], [0], [], [$#], [1], [[$1]],
+[m4_pushdef([_m4_r], [[$$#]]_m4_for(m4_decr([$#]), [1], [-1],
+ [[, ]m4_dquote($], [)])[_m4_popdef([_m4_r])])_m4_r($@)])])
+
+
+# m4_map_args_pair(EXPRESSION, [END-EXPR = EXPRESSION], ARG...)
+# -------------------------------------------------------------
+# Perform a pairwise grouping of consecutive ARGs, by expanding
+# EXPRESSION([ARG1], [ARG2]). If there are an odd number of ARGs, the
+# final argument is expanded with END-EXPR([ARGn]).
+#
+# Build the temporary macro _m4_map_args_pair, with the $2([$m+1])
+# only output if $# is odd:
+# $1([$3], [$4])[]$1([$5], [$6])[]...$1([$m-1],
+# [$m])[]m4_default([$2], [$1])([$m+1])[]_m4_popdef([_m4_map_args_pair])
+m4_define([m4_map_args_pair],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+ [$#], [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [$#], [2], [],
+ [$#], [3], [m4_default([$2], [$1])([$3])[]],
+ [m4_pushdef([_$0], _m4_for([3],
+ m4_eval([$# / 2 * 2 - 1]), [2], [_$0_(], [)])_$0_end(
+ [1], [2], [$#])[_m4_popdef([_$0])])_$0($@)])])
+
+m4_define([_m4_map_args_pair_],
+[$0_([1], [$1], m4_incr([$1]))])
+
+m4_define([_m4_map_args_pair__],
+[[$$1([$$2], [$$3])[]]])
+
+m4_define([_m4_map_args_pair_end],
+[m4_if(m4_eval([$3 & 1]), [1], [[m4_default([$$2], [$$1])([$$3])[]]])])
+
+# m4_join(SEP, ARG1, ARG2...)
+# ---------------------------
+# Produce ARG1SEPARG2...SEPARGn. Avoid back-to-back SEP when a given ARG
+# is the empty string. No expansion is performed on SEP or ARGs.
+#
+# Use a self-modifying separator, since we don't know how many
+# arguments might be skipped before a separator is first printed, but
+# be careful if the separator contains $. _m4_foreach to the rescue.
+m4_define([m4_join],
+[m4_pushdef([_m4_sep], [m4_define([_m4_sep], _m4_defn([m4_echo]))])]dnl
+[_m4_foreach([_$0([$1],], [)], $@)_m4_popdef([_m4_sep])])
+
+m4_define([_m4_join],
+[m4_if([$2], [], [], [_m4_sep([$1])[$2]])])
+
+# m4_joinall(SEP, ARG1, ARG2...)
+# ------------------------------
+# Produce ARG1SEPARG2...SEPARGn. An empty ARG results in back-to-back SEP.
+# No expansion is performed on SEP or ARGs.
+#
+# A bit easier than m4_join. _m4_foreach to the rescue.
+m4_define([m4_joinall],
+[[$2]m4_if(m4_eval([$# <= 2]), [1], [],
+ [_m4_foreach([$1], [], m4_shift($@))])])
+
+# m4_list_cmp(A, B)
+# -----------------
+# Compare the two lists of integer expressions A and B.
+#
+# m4_list_cmp takes care of any side effects; we only override
+# _m4_list_cmp_raw, where we can safely expand lists multiple times.
+# First, insert padding so that both lists are the same length; the
+# trailing +0 is necessary to handle a missing list. Next, create a
+# temporary macro to perform pairwise comparisons until an inequality
+# is found. For example, m4_list_cmp([1], [1,2]) creates _m4_cmp as
+# m4_if(m4_eval([($1) != ($3)]), [1], [m4_cmp([$1], [$3])],
+# m4_eval([($2) != ($4)]), [1], [m4_cmp([$2], [$4])],
+# [0]_m4_popdef([_m4_cmp]))
+# then calls _m4_cmp([1+0], [0*2], [1], [2+0])
+m4_define([_m4_list_cmp_raw],
+[m4_if([$1], [$2], 0,
+ [_m4_list_cmp($1+0_m4_list_pad(m4_count($1), m4_count($2)),
+ $2+0_m4_list_pad(m4_count($2), m4_count($1)))])])
+
+m4_define([_m4_list_pad],
+[m4_if(m4_eval($1 < $2), [1],
+ [_m4_for(m4_incr([$1]), [$2], [1], [,0*])])])
+
+m4_define([_m4_list_cmp],
+[m4_pushdef([_m4_cmp], [m4_if(]_m4_for(
+ [1], m4_eval([$# >> 1]), [1], [$0_(], [,]m4_eval([$# >> 1])[)])[
+ [0]_m4_popdef([_m4_cmp]))])_m4_cmp($@)])
+
+m4_define([_m4_list_cmp_],
+[$0_([$1], m4_eval([$1 + $2]))])
+
+m4_define([_m4_list_cmp__],
+[[m4_eval([($$1) != ($$2)]), [1], [m4_cmp([$$1], [$$2])],
+]])
+
+# m4_max(EXPR, ...)
+# m4_min(EXPR, ...)
+# -----------------
+# Return the decimal value of the maximum (or minimum) in a series of
+# integer expressions.
+#
+# _m4_foreach to the rescue; we only need to replace _m4_minmax. Here,
+# we need a temporary macro to track the best answer so far, so that
+# the foreach expression is tractable.
+m4_define([_m4_minmax],
+[m4_pushdef([_m4_best], m4_eval([$2]))_m4_foreach(
+ [m4_define([_m4_best], $1(_m4_best,], [))], m4_shift($@))]dnl
+[_m4_best[]_m4_popdef([_m4_best])])
+
+# m4_set_add_all(SET, VALUE...)
+# -----------------------------
+# Add each VALUE into SET. This is O(n) in the number of VALUEs, and
+# can be faster than calling m4_set_add for each VALUE.
+#
+# _m4_foreach to the rescue. If no deletions have occurred, then
+# avoid the speed penalty of m4_set_add.
+m4_define([m4_set_add_all],
+[m4_if([$#], [0], [], [$#], [1], [],
+ [m4_define([_m4_set_size($1)], m4_eval(m4_set_size([$1])
+ + m4_len(_m4_foreach(m4_ifdef([_m4_set_cleanup($1)],
+ [[m4_set_add]], [[_$0]])[([$1],], [)], $@))))])])
+
+m4_define([_m4_set_add_all],
+[m4_ifdef([_m4_set([$1],$2)], [],
+ [m4_define([_m4_set([$1],$2)],
+ [1])m4_pushdef([_m4_set([$1])], [$2])-])])
diff --git a/lib/m4sugar/m4sh.m4 b/lib/m4sugar/m4sh.m4
new file mode 100644
index 0000000..f05346b
--- /dev/null
+++ b/lib/m4sugar/m4sh.m4
@@ -0,0 +1,2168 @@
+# This file is part of Autoconf. -*- Autoconf -*-
+# M4 sugar for common shell constructs.
+# Requires GNU M4 and M4sugar.
+#
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Akim Demaille, Pavel Roskin, Alexandre Oliva, Lars J. Aas
+# and many other people.
+
+
+# We heavily use m4's diversions both for the initializations and for
+# required macros, because in both cases we have to issue soon in
+# output something which is discovered late.
+#
+#
+# KILL is only used to suppress output.
+#
+# - BINSH
+# AC_REQUIRE'd #! /bin/sh line
+# - HEADER-REVISION
+# RCS keywords etc.
+# - HEADER-COMMENT
+# Purpose of the script etc.
+# - HEADER-COPYRIGHT
+# Copyright notice(s)
+# - M4SH-SANITIZE
+# M4sh's shell setup
+# - M4SH-INIT-FN
+# M4sh initialization (shell functions)
+# - M4SH-INIT
+# M4sh initialization (detection code)
+# - BODY
+# The body of the script.
+
+
+# _m4_divert(DIVERSION-NAME)
+# --------------------------
+# Convert a diversion name into its number. Otherwise, return
+# DIVERSION-NAME which is supposed to be an actual diversion number.
+# Of course it would be nicer to use m4_case here, instead of zillions
+# of little macros, but it then takes twice longer to run `autoconf'!
+m4_define([_m4_divert(BINSH)], 0)
+m4_define([_m4_divert(HEADER-REVISION)], 1)
+m4_define([_m4_divert(HEADER-COMMENT)], 2)
+m4_define([_m4_divert(HEADER-COPYRIGHT)], 3)
+m4_define([_m4_divert(M4SH-SANITIZE)], 4)
+m4_define([_m4_divert(M4SH-INIT-FN)], 5)
+m4_define([_m4_divert(M4SH-INIT)], 6)
+m4_define([_m4_divert(BODY)], 1000)
+
+# Aaarg. Yet it starts with compatibility issues... Libtool wants to
+# use NOTICE to insert its own LIBTOOL-INIT stuff. People should ask
+# before diving into our internals :(
+m4_copy([_m4_divert(M4SH-INIT)], [_m4_divert(NOTICE)])
+
+
+
+## ------------------------- ##
+## 1. Sanitizing the shell. ##
+## ------------------------- ##
+# Please maintain lexicographic sorting of this section, ignoring leading _.
+
+# AS_BOURNE_COMPATIBLE
+# --------------------
+# Try to be as Bourne and/or POSIX as possible.
+#
+# This does not set BIN_SH, due to the problems described in
+# <http://lists.gnu.org/archive/html/autoconf-patches/2006-03/msg00081.html>.
+# People who need BIN_SH should set it in their environment before invoking
+# configure; apparently this would include UnixWare, as described in
+# <http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00025.html>.
+m4_define([AS_BOURNE_COMPATIBLE],
+[# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+_$0
+])
+
+# _AS_BOURNE_COMPATIBLE
+# ---------------------
+# This is the part of AS_BOURNE_COMPATIBLE which has to be repeated inside
+# each instance.
+m4_define([_AS_BOURNE_COMPATIBLE],
+[AS_IF([test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1],
+ [emulate sh
+ NULLCMD=:
+ [#] Pre-4.2 versions of Zsh do word splitting on ${1+"$[@]"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$[@]"}'='"$[@]"'
+ setopt NO_GLOB_SUBST],
+ [AS_CASE([`(set -o) 2>/dev/null`], [*posix*], [set -o posix])])
+])
+
+
+# _AS_CLEANUP
+# -----------
+# Expanded as the last thing before m4sugar cleanup begins. Macros
+# may append m4sh cleanup hooks to this as appropriate.
+m4_define([_AS_CLEANUP],
+[m4_divert_text([M4SH-SANITIZE], [_AS_DETECT_BETTER_SHELL])])
+
+
+# AS_COPYRIGHT(TEXT)
+# ------------------
+# Emit TEXT, a copyright notice, as a shell comment near the top of the
+# script. TEXT is evaluated once; to accomplish that, we do not prepend
+# `# ' but `@%:@ '.
+m4_define([AS_COPYRIGHT],
+[m4_divert_text([HEADER-COPYRIGHT],
+[m4_bpatsubst([
+$1], [^], [@%:@ ])])])
+
+
+# _AS_DETECT_EXPAND(VAR, SET)
+# ---------------------------
+# Assign the contents of VAR from the contents of SET, expanded in such
+# a manner that VAR can be passed to _AS_RUN. In order to make
+# _AS_LINENO_WORKS operate correctly, we must specially handle the
+# first instance of $LINENO within any line being expanded (the first
+# instance is important to tests using the current shell, leaving
+# remaining instances for tests using a candidate shell). Bash loses
+# track of line numbers if a double quote contains a newline, hence,
+# we must piece-meal the assignment of VAR such that $LINENO expansion
+# occurs in a single line.
+m4_define([_AS_DETECT_EXPAND],
+[$1="m4_bpatsubst(m4_dquote(AS_ESCAPE(_m4_expand(m4_set_contents([$2], [
+])))), [\\\$LINENO\(.*\)$], [";$1=$$1$LINENO;$1=$$1"\1])"])
+
+
+# _AS_DETECT_REQUIRED(TEST)
+# -------------------------
+# Refuse to execute under a shell that does not pass the given TEST.
+# Does not do AS_REQUIRE for the better-shell detection code.
+#
+# M4sh should never require something not required by POSIX, although
+# other clients are free to do so.
+m4_defun([_AS_DETECT_REQUIRED],
+[m4_set_add([_AS_DETECT_REQUIRED_BODY], [$1 || AS_EXIT])])
+
+
+# _AS_DETECT_SUGGESTED(TEST)
+# --------------------------
+# Prefer to execute under a shell that passes the given TEST.
+# Does not do AS_REQUIRE for the better-shell detection code.
+#
+# M4sh should never suggest something not required by POSIX, although
+# other clients are free to do so.
+m4_defun([_AS_DETECT_SUGGESTED],
+[m4_set_add([_AS_DETECT_SUGGESTED_BODY], [$1 || AS_EXIT])])
+
+
+# _AS_DETECT_SUGGESTED_PRUNE(TEST)
+# --------------------------------
+# If TEST is also a required test, remove it from the set of suggested tests.
+m4_define([_AS_DETECT_SUGGESTED_PRUNE],
+[m4_set_contains([_AS_DETECT_REQUIRED_BODY], [$1],
+ [m4_set_remove([_AS_DETECT_SUGGESTED_BODY], [$1])])])
+
+
+# _AS_DETECT_BETTER_SHELL
+# -----------------------
+# The real workhorse for detecting a shell with the correct
+# features.
+#
+# In previous versions, we prepended /usr/posix/bin to the path, but that
+# caused a regression on OpenServer 6.0.0
+# <http://lists.gnu.org/archive/html/bug-autoconf/2006-06/msg00017.html>
+# and on HP-UX 11.11, see the failure of test 120 in
+# <http://lists.gnu.org/archive/html/bug-autoconf/2006-10/msg00003.html>
+#
+# FIXME: The code should test for the OSF bug described in
+# <http://lists.gnu.org/archive/html/autoconf-patches/2006-03/msg00081.html>.
+#
+# This code is run outside any trap 0 context, hence we can simplify AS_EXIT.
+m4_defun([_AS_DETECT_BETTER_SHELL],
+dnl
+dnl By default, do not force re-execution of the script just because
+dnl the user has pre-set $CONFIG_SHELL; do so only if the m4sh client has
+dnl defined the internal variable `_AS_FORCE_REEXEC_WITH_CONFIG_SHELL' to
+dnl "yes".
+dnl FIXME: This interface is acceptable for the moment, as a private,
+dnl FIXME: internal one; but if we want to make the "always re-execute"
+dnl FIXME: feature public, we should find a better interface!
+[m4_if(_AS_FORCE_REEXEC_WITH_CONFIG_SHELL, [yes],
+ [# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ _AS_REEXEC_WITH_SHELL([$CONFIG_SHELL])
+ fi
+ # We don't want this to propagate to other subprocesses.
+ dnl This might be especially important in case an m4sh-generated script
+ dnl is used to later execute other m4sh-generated scripts. This happens
+ dnl for example in autoconf's own testsuite (and happens *a lot* there,
+ dnl in fact).
+ AS_UNSET([_as_can_reexec])
+])]dnl
+dnl Remove any tests from suggested that are also required
+[m4_set_map([_AS_DETECT_SUGGESTED_BODY], [_AS_DETECT_SUGGESTED_PRUNE])]dnl
+[m4_pushdef([AS_EXIT], [exit m4_default(]m4_dquote([$][1])[, 1)])]dnl
+[if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="AS_ESCAPE(_m4_expand([_AS_BOURNE_COMPATIBLE]))"
+ _AS_DETECT_EXPAND([as_required], [_AS_DETECT_REQUIRED_BODY])
+ _AS_DETECT_EXPAND([as_suggested], [_AS_DETECT_SUGGESTED_BODY])
+ AS_IF([_AS_RUN(["$as_required"])],
+ [as_have_required=yes],
+ [as_have_required=no])
+ AS_IF([test x$as_have_required = xyes && _AS_RUN(["$as_suggested"])],
+ [],
+ [_AS_PATH_WALK([/bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH],
+ [case $as_dir in @%:@(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ AS_IF([{ test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ _AS_RUN(["$as_required"], ["$as_shell"])],
+ [CONFIG_SHELL=$as_shell as_have_required=yes
+ m4_set_empty([_AS_DETECT_SUGGESTED_BODY], [break 2],
+ [AS_IF([_AS_RUN(["$as_suggested"], ["$as_shell"])],
+ [break 2])])])
+ done;;
+ esac],
+ [AS_IF([{ test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ _AS_RUN(["$as_required"], ["$SHELL"])],
+ [CONFIG_SHELL=$SHELL as_have_required=yes])])
+
+ AS_IF([test "x$CONFIG_SHELL" != x],
+ [export CONFIG_SHELL
+ _AS_REEXEC_WITH_SHELL([$CONFIG_SHELL])])
+
+dnl Unfortunately, $as_me isn't available here.
+ AS_IF([test x$as_have_required = xno],
+ [AS_ECHO(["$[]0: This script requires a shell more modern than all"])
+ AS_ECHO(["$[]0: the shells that I found on your system."])
+ if test x${ZSH_VERSION+set} = xset ; then
+ AS_ECHO(["$[]0: In particular, zsh $ZSH_VERSION has bugs and should"])
+ AS_ECHO(["$[]0: be upgraded to zsh 4.3.4 or later."])
+ else
+ AS_ECHO("m4_text_wrap([Please tell ]_m4_defn([m4_PACKAGE_BUGREPORT])
+m4_ifset([AC_PACKAGE_BUGREPORT], [m4_if(_m4_defn([m4_PACKAGE_BUGREPORT]),
+_m4_defn([AC_PACKAGE_BUGREPORT]), [], [and _m4_defn([AC_PACKAGE_BUGREPORT])])])
+[about your system, including any error possibly output before this message.
+Then install a modern shell, or manually run the script under such a
+shell if you do have one.], [$[]0: ], [], [62])")
+ fi
+ AS_EXIT])])
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+_m4_popdef([AS_EXIT])])# _AS_DETECT_BETTER_SHELL
+
+# _AS_REEXEC_WITH_SHELL(SHELL)
+# ----------------------------
+# Re-execute the current script with the given shell, trying to preserve
+# portable settings (e.g., the `xtrace' and `verbose' shell flag).
+m4_defun([_AS_REEXEC_WITH_SHELL], [dnl
+# We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in @%:@ ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $1 $as_opts "$as_myself" ${1+"$[@]"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+AS_ECHO(["$[]0: could not re-execute with $1"]) >&2
+AS_EXIT([255])])# _AS_REEXEC_WITH_SHELL
+
+
+# _AS_PREPARE
+# -----------
+# This macro has a very special status. Normal use of M4sh relies
+# heavily on AS_REQUIRE, so that needed initializations (such as
+# _AS_TEST_PREPARE) are performed on need, not on demand. But
+# Autoconf is the first client of M4sh, and for two reasons: configure
+# and config.status. Relying on AS_REQUIRE is of course fine for
+# configure, but fails for config.status (which is created by
+# configure). So we need a means to force the inclusion of the
+# various _AS_*_PREPARE on top of config.status. That's basically why
+# there are so many _AS_*_PREPARE below, and that's also why it is
+# important not to forget some: config.status needs them.
+# List any preparations that create shell functions first, then
+# topologically sort the others by their dependencies.
+#
+# Special case: we do not need _AS_LINENO_PREPARE, because the
+# parent will have substituted $LINENO for us when processing its
+# own invocation of _AS_LINENO_PREPARE.
+#
+# Special case: the full definition of _AS_ERROR_PREPARE is not output
+# unless AS_MESSAGE_LOG_FD is non-empty, although the value of
+# AS_MESSAGE_LOG_FD is not relevant.
+m4_defun([_AS_PREPARE],
+[m4_pushdef([AS_REQUIRE])]dnl
+[m4_pushdef([AS_REQUIRE_SHELL_FN], _m4_defn([_AS_REQUIRE_SHELL_FN])
+)]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD], [-1])]dnl
+[_AS_ERROR_PREPARE
+_m4_popdef([AS_MESSAGE_LOG_FD])]dnl
+[_AS_EXIT_PREPARE
+_AS_UNSET_PREPARE
+_AS_VAR_APPEND_PREPARE
+_AS_VAR_ARITH_PREPARE
+
+_AS_EXPR_PREPARE
+_AS_BASENAME_PREPARE
+_AS_DIRNAME_PREPARE
+_AS_ME_PREPARE
+_AS_CR_PREPARE
+_AS_ECHO_N_PREPARE
+_AS_LN_S_PREPARE
+_AS_MKDIR_P_PREPARE
+_AS_TEST_PREPARE
+_AS_TR_CPP_PREPARE
+_AS_TR_SH_PREPARE
+_m4_popdef([AS_REQUIRE], [AS_REQUIRE_SHELL_FN])])
+
+# AS_PREPARE
+# ----------
+# Output all the M4sh possible initialization into the initialization
+# diversion. We do not use _AS_PREPARE so that the m4_provide symbols for
+# AS_REQUIRE and AS_REQUIRE_SHELL_FN are defined properly, and so that
+# shell functions are placed in M4SH-INIT-FN.
+m4_defun([AS_PREPARE],
+[m4_divert_push([KILL])
+m4_append_uniq([_AS_CLEANUP],
+ [m4_divert_text([M4SH-INIT-FN], [_AS_ERROR_PREPARE[]])])
+AS_REQUIRE([_AS_EXPR_PREPARE])
+AS_REQUIRE([_AS_BASENAME_PREPARE])
+AS_REQUIRE([_AS_DIRNAME_PREPARE])
+AS_REQUIRE([_AS_ME_PREPARE])
+AS_REQUIRE([_AS_CR_PREPARE])
+AS_REQUIRE([_AS_LINENO_PREPARE])
+AS_REQUIRE([_AS_ECHO_N_PREPARE])
+AS_REQUIRE([_AS_EXIT_PREPARE])
+AS_REQUIRE([_AS_LN_S_PREPARE])
+AS_REQUIRE([_AS_MKDIR_P_PREPARE])
+AS_REQUIRE([_AS_TEST_PREPARE])
+AS_REQUIRE([_AS_TR_CPP_PREPARE])
+AS_REQUIRE([_AS_TR_SH_PREPARE])
+AS_REQUIRE([_AS_UNSET_PREPARE])
+AS_REQUIRE([_AS_VAR_APPEND_PREPARE], [], [M4SH-INIT-FN])
+AS_REQUIRE([_AS_VAR_ARITH_PREPARE], [], [M4SH-INIT-FN])
+m4_divert_pop[]])
+
+
+# AS_REQUIRE(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK],
+# [DIVERSION = M4SH-INIT])
+# -----------------------------------------------------------
+# BODY-TO-EXPAND is some initialization which must be expanded in the
+# given diversion when expanded (required or not). The expansion
+# goes in the named diversion or an earlier one.
+#
+# Since $2 can be quite large, this is factored for faster execution, giving
+# either m4_require([$1], [$2]) or m4_divert_require(desired, [$1], [$2]).
+m4_defun([AS_REQUIRE],
+[m4_define([_m4_divert_desired], [m4_default_quoted([$3], [M4SH-INIT])])]dnl
+[m4_if(m4_eval(_m4_divert_dump - 0 <= _m4_divert(_m4_divert_desired, [-])),
+ 1, [m4_require(],
+ [m4_divert_require(_m4_divert_desired,]) [$1], [$2])])
+
+# _AS_REQUIRE_SHELL_FN(NAME-TO-CHECK, COMMENT, BODY-TO-EXPAND)
+# ------------------------------------------------------------
+# Core of AS_REQUIRE_SHELL_FN, but without diversion support.
+m4_define([_AS_REQUIRE_SHELL_FN], [
+m4_n([$2])$1 ()
+{
+$3
+} @%:@ $1[]])
+
+# AS_REQUIRE_SHELL_FN(NAME-TO-CHECK, COMMENT, BODY-TO-EXPAND,
+# [DIVERSION = M4SH-INIT-FN])
+# -----------------------------------------------------------
+# BODY-TO-EXPAND is the body of a shell function to be emitted in the
+# given diversion when expanded (required or not). Unlike other
+# xx_REQUIRE macros, BODY-TO-EXPAND is mandatory. If COMMENT is
+# provided (often via AS_FUNCTION_DESCRIBE), it is listed with a
+# newline before the function name.
+m4_define([AS_REQUIRE_SHELL_FN],
+[m4_provide_if([AS_SHELL_FN_$1], [],
+[AS_REQUIRE([AS_SHELL_FN_$1],
+[m4_provide([AS_SHELL_FN_$1])_$0($@)],
+m4_default_quoted([$4], [M4SH-INIT-FN]))])])
+
+
+# _AS_RUN(TEST, [SHELL])
+# ----------------------
+# Run TEST under the current shell (if one parameter is used)
+# or under the given SHELL, protecting it from syntax errors.
+# Set as_run in order to assist _AS_LINENO_WORKS.
+m4_define([_AS_RUN],
+[m4_ifval([$2], [{ $as_echo "$as_bourne_compatible"$1 | as_run=a $2; }],
+ [(eval $1)]) 2>/dev/null])
+
+
+# _AS_SHELL_FN_WORK
+# -----------------
+# This is a spy to detect "in the wild" shells that do not support shell
+# functions correctly. It is based on the m4sh.at Autotest testcases.
+m4_define([_AS_SHELL_FN_WORK],
+[as_fn_return () { (exit [$]1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+AS_IF([( set x; as_fn_ret_success y && test x = "[$]1" )], [],
+ [exitcode=1; echo positional parameters were not saved.])
+test x$exitcode = x0[]])# _AS_SHELL_FN_WORK
+
+
+# _AS_SHELL_SANITIZE
+# ------------------
+# This is the prolog that is emitted by AS_INIT and AS_INIT_GENERATED;
+# it is executed prior to shell function definitions, hence the
+# temporary redefinition of AS_EXIT.
+m4_defun([_AS_SHELL_SANITIZE],
+[m4_pushdef([AS_EXIT], [exit m4_default(]m4_dquote([$][1])[, 1)])]dnl
+[m4_text_box([M4sh Initialization.])
+
+AS_BOURNE_COMPATIBLE
+_AS_ECHO_PREPARE
+_AS_PATH_SEPARATOR_PREPARE
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $[0] in @%:@((
+ *[[\\/]]* ) as_myself=$[0] ;;
+ *) _AS_PATH_WALK([],
+ [test -r "$as_dir/$[0]" && as_myself=$as_dir/$[0] && break])
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$[0]
+fi
+if test ! -f "$as_myself"; then
+ AS_ECHO(["$as_myself: error: cannot find myself; rerun with an absolute file name"]) >&2
+ AS_EXIT
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+_m4_popdef([AS_EXIT])])# _AS_SHELL_SANITIZE
+
+
+# AS_SHELL_SANITIZE
+# -----------------
+# This is only needed for the sake of Libtool, which screws up royally
+# in its usage of M4sh internals.
+m4_define([AS_SHELL_SANITIZE],
+[_AS_SHELL_SANITIZE
+m4_provide_if([AS_INIT], [],
+[m4_provide([AS_INIT])
+_AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK])
+_AS_DETECT_REQUIRED([_AS_TEST_X_WORKS])
+_AS_DETECT_BETTER_SHELL
+_AS_UNSET_PREPARE
+])])
+
+
+## ----------------------------- ##
+## 2. Wrappers around builtins. ##
+## ----------------------------- ##
+
+# This section is lexicographically sorted.
+
+
+# AS_CASE(WORD, [PATTERN1], [IF-MATCHED1]...[DEFAULT])
+# ----------------------------------------------------
+# Expand into
+# | case WORD in #(
+# | PATTERN1) IF-MATCHED1 ;; #(
+# | ...
+# | *) DEFAULT ;;
+# | esac
+# The shell comments are intentional, to work around people who don't
+# realize the impacts of using insufficient m4 quoting. This macro
+# always uses : and provides a default case, to work around Solaris
+# /bin/sh bugs regarding the exit status.
+m4_define([_AS_CASE],
+[ [@%:@(]
+ $1[)] :
+ $2 ;;])
+m4_define([_AS_CASE_DEFAULT],
+[ [@%:@(]
+ *[)] :
+ $1 ;;])
+
+m4_defun([AS_CASE],
+[case $1 in[]m4_map_args_pair([_$0], [_$0_DEFAULT],
+ m4_shift($@m4_if(m4_eval([$# & 1]), [1], [,])))
+esac])# AS_CASE
+
+
+# _AS_EXIT_PREPARE
+# ----------------
+# Ensure AS_EXIT and AS_SET_STATUS will work.
+#
+# We cannot simply use "exit N" because some shells (zsh and Solaris sh)
+# will not set $? to N while running the code set by "trap 0"
+# Some shells fork even for (exit N), so we use a helper function
+# to set $? prior to the exit.
+# Then there are shells that don't inherit $? correctly into the start of
+# a shell function, so we must always be given an argument.
+# Other shells don't use `$?' as default for `exit', hence just repeating
+# the exit value can only help improving portability.
+m4_defun([_AS_EXIT_PREPARE],
+[AS_REQUIRE_SHELL_FN([as_fn_set_status],
+ [AS_FUNCTION_DESCRIBE([as_fn_set_status], [STATUS],
+ [Set $? to STATUS, without forking.])], [ return $[]1])]dnl
+[AS_REQUIRE_SHELL_FN([as_fn_exit],
+ [AS_FUNCTION_DESCRIBE([as_fn_exit], [STATUS],
+ [Exit the shell with STATUS, even in a "trap 0" or "set -e" context.])],
+[ set +e
+ as_fn_set_status $[1]
+ exit $[1]])])#_AS_EXIT_PREPARE
+
+
+# AS_EXIT([EXIT-CODE = $?])
+# -------------------------
+# Exit, with status set to EXIT-CODE in the way that it's seen
+# within "trap 0", and without interference from "set -e". If
+# EXIT-CODE is omitted, then use $?.
+m4_defun([AS_EXIT],
+[AS_REQUIRE([_AS_EXIT_PREPARE])[]as_fn_exit m4_ifval([$1], [$1], [$][?])])
+
+
+# AS_FOR(MACRO, SHELL-VAR, [LIST = "$@"], [BODY = :])
+# ---------------------------------------------------
+# Expand to a shell loop that assigns SHELL-VAR to each of the
+# whitespace-separated entries in LIST (or "$@" if LIST is empty),
+# then executes BODY. BODY may call break to abort the loop, or
+# continue to proceed with the next element of LIST. Requires that
+# IFS be set to the normal space-tab-newline. As an optimization,
+# BODY should access MACRO rather than $SHELL-VAR. Normally, MACRO
+# expands to $SHELL-VAR, but if LIST contains only a single element
+# that needs no additional shell quoting, then MACRO will expand to
+# that element, thus providing a direct value rather than a shell
+# variable indirection.
+#
+# Only use the optimization if LIST can be used without additional
+# shell quoting in either a literal or double-quoted context (that is,
+# we give up on default IFS chars, parameter expansion, command
+# substitution, shell quoting, globs, or quadrigraphs). Inline the
+# m4_defn for speed.
+m4_defun([AS_FOR],
+[m4_pushdef([$1], m4_if([$3], [], [[$$2]], m4_translit([$3], ]dnl
+m4_dquote(_m4_defn([m4_cr_symbols2]))[[%+=:,./-]), [], [[$3]], [[$$2]]))]dnl
+[for $2[]m4_ifval([$3], [ in $3])
+do :
+ $4
+done[]_m4_popdef([$1])])
+
+
+# AS_IF(TEST1, [IF-TRUE1 = :]...[IF-FALSE = :])
+# ---------------------------------------------
+# Expand into
+# | if TEST1; then
+# | IF-TRUE1
+# | elif TEST2; then
+# | IF-TRUE2
+# [...]
+# | else
+# | IF-FALSE
+# | fi
+# with simplifications when IF-TRUE1 and/or IF-FALSE are empty.
+#
+m4_define([_AS_IF],
+[elif $1; then :
+ $2
+])
+m4_define([_AS_IF_ELSE],
+[m4_ifnblank([$1],
+[else
+ $1
+])])
+
+m4_defun([AS_IF],
+[if $1; then :
+ $2
+m4_map_args_pair([_$0], [_$0_ELSE], m4_shift2($@))]dnl
+[fi[]])# AS_IF
+
+
+# AS_SET_STATUS(STATUS)
+# ---------------------
+# Set the shell status ($?) to STATUS, without forking.
+m4_defun([AS_SET_STATUS],
+[AS_REQUIRE([_AS_EXIT_PREPARE])[]as_fn_set_status $1])
+
+
+# _AS_UNSET_PREPARE
+# -----------------
+# Define $as_unset to execute AS_UNSET, for backwards compatibility
+# with older versions of M4sh.
+m4_defun([_AS_UNSET_PREPARE],
+[AS_FUNCTION_DESCRIBE([as_fn_unset], [VAR], [Portably unset VAR.])
+as_fn_unset ()
+{
+ AS_UNSET([$[1]])
+}
+as_unset=as_fn_unset])
+
+
+# AS_UNSET(VAR)
+# -------------
+# Unset the env VAR, working around shells that do not allow unsetting
+# a variable that is not already set. You should not unset MAIL and
+# MAILCHECK, as that triggers a bug in Bash 2.01.
+m4_defun([AS_UNSET],
+[{ AS_LITERAL_WORD_IF([$1], [], [eval ])$1=; unset $1;}])
+
+
+
+
+
+
+## ------------------------------------------ ##
+## 3. Error and warnings at the shell level. ##
+## ------------------------------------------ ##
+
+
+# AS_MESSAGE_FD
+# -------------
+# Must expand to the fd where messages will be sent. Defaults to 1,
+# although a script may reassign this value and use exec to either
+# copy stdout to the new fd, or open the new fd on /dev/null.
+m4_define([AS_MESSAGE_FD], [1])
+
+# AS_MESSAGE_LOG_FD
+# -----------------
+# Must expand to either the empty string (when no logging is
+# performed), or to the fd of a log file. Defaults to empty, although
+# a script may reassign this value and use exec to open a log. When
+# not empty, messages to AS_MESSAGE_FD are duplicated to the log,
+# along with a LINENO reference.
+m4_define([AS_MESSAGE_LOG_FD])
+
+
+# AS_ORIGINAL_STDIN_FD
+# --------------------
+# Must expand to the fd of the script's original stdin. Defaults to
+# 0, although the script may reassign this value and use exec to
+# shuffle fd's.
+m4_define([AS_ORIGINAL_STDIN_FD], [0])
+
+
+# AS_ESCAPE(STRING, [CHARS = `\"$])
+# ---------------------------------
+# Add backslash escaping to the CHARS in STRING. In an effort to
+# optimize use of this macro inside double-quoted shell constructs,
+# the behavior is intentionally undefined if CHARS is longer than 4
+# bytes, or contains bytes outside of the set [`\"$]. However,
+# repeated bytes within the set are permissible (AS_ESCAPE([$1], [""])
+# being a common way to be nice to syntax highlighting).
+#
+# Avoid the m4_bpatsubst if there are no interesting characters to escape.
+# _AS_ESCAPE bypasses argument defaulting.
+m4_define([AS_ESCAPE],
+[_$0([$1], m4_if([$2], [], [[`], [\"$]], [m4_substr([$2], [0], [1]), [$2]]))])
+
+# _AS_ESCAPE(STRING, KEY, SET)
+# ----------------------------
+# Backslash-escape all instances of the single byte KEY or up to four
+# bytes in SET occurring in STRING. Although a character can occur
+# multiple times, optimum efficiency occurs when KEY and SET are
+# distinct, and when SET does not exceed two bytes. These particular
+# semantics allow for the fewest number of parses of STRING, as well
+# as taking advantage of the optimizations in m4 1.4.13+ when
+# m4_translit is passed SET of size 2 or smaller.
+m4_define([_AS_ESCAPE],
+[m4_if(m4_index(m4_translit([[$1]], [$3], [$2$2$2$2]), [$2]), [-1],
+ [$0_], [m4_bpatsubst])([$1], [[$2$3]], [\\\&])])
+m4_define([_AS_ESCAPE_], [$1])
+
+
+# _AS_QUOTE(STRING)
+# -----------------
+# If there are quoted (via backslash) backquotes, output STRING
+# literally and warn; otherwise, output STRING with ` and " quoted.
+#
+# Compatibility glue between the old AS_MSG suite which did not
+# quote anything, and the modern suite which quotes the quotes.
+# If STRING contains `\\' or `\$', it's modern.
+# If STRING contains `\"' or `\`', it's old.
+# Otherwise it's modern.
+#
+# Profiling shows that m4_index is 5 to 8x faster than m4_bregexp. The
+# slower implementation used:
+# m4_bmatch([$1],
+# [\\[\\$]], [$2],
+# [\\[`"]], [$3],
+# [$2])
+# The current implementation caters to the common case of no backslashes,
+# to minimize m4_index expansions (hence the nested if).
+m4_define([_AS_QUOTE],
+[m4_cond([m4_index([$1], [\])], [-1], [_AS_QUOTE_MODERN],
+ [m4_eval(m4_index(m4_translit([[$1]], [$], [\]), [\\]) >= 0)],
+[1], [_AS_QUOTE_MODERN],
+ [m4_eval(m4_index(m4_translit([[$1]], ["], [`]), [\`]) >= 0)],dnl"
+[1], [_AS_QUOTE_OLD],
+ [_AS_QUOTE_MODERN])([$1])])
+
+m4_define([_AS_QUOTE_MODERN],
+[_AS_ESCAPE([$1], [`], [""])])
+
+m4_define([_AS_QUOTE_OLD],
+[m4_warn([obsolete],
+ [back quotes and double quotes must not be escaped in: $1])$1])
+
+
+# _AS_ECHO_UNQUOTED(STRING, [FD = AS_MESSAGE_FD])
+# -----------------------------------------------
+# Perform shell expansions on STRING and echo the string to FD.
+m4_define([_AS_ECHO_UNQUOTED],
+[AS_ECHO(["$1"]) >&m4_default([$2], [AS_MESSAGE_FD])])
+
+
+# _AS_ECHO(STRING, [FD = AS_MESSAGE_FD])
+# --------------------------------------
+# Protect STRING from backquote expansion, echo the result to FD.
+m4_define([_AS_ECHO],
+[_AS_ECHO_UNQUOTED([_AS_QUOTE([$1])], [$2])])
+
+
+# _AS_ECHO_LOG(STRING)
+# --------------------
+# Log the string to AS_MESSAGE_LOG_FD.
+m4_defun_init([_AS_ECHO_LOG],
+[AS_REQUIRE([_AS_LINENO_PREPARE])],
+[_AS_ECHO([$as_me:${as_lineno-$LINENO}: $1], AS_MESSAGE_LOG_FD)])
+
+
+# _AS_ECHO_N_PREPARE
+# ------------------
+# Check whether to use -n, \c, or newline-tab to separate
+# checking messages from result messages.
+# Don't try to cache, since the results of this macro are needed to
+# display the checking message. In addition, caching something used once
+# has little interest.
+# Idea borrowed from dist 3.0. Use `*c*,', not `*c,' because if `\c'
+# failed there is also a newline to match. Use `xy' because `\c' echoed
+# in a command substitution prints only the first character of the output
+# with ksh version M-11/16/88f on AIX 6.1; it needs to be reset by another
+# backquoted echo.
+m4_defun([_AS_ECHO_N_PREPARE],
+[ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in @%:@(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+])# _AS_ECHO_N_PREPARE
+
+
+# _AS_ECHO_N(STRING, [FD = AS_MESSAGE_FD])
+# ----------------------------------------
+# Same as _AS_ECHO, but echo doesn't return to a new line.
+m4_define([_AS_ECHO_N],
+[AS_ECHO_N(["_AS_QUOTE([$1])"]) >&m4_default([$2], [AS_MESSAGE_FD])])
+
+
+# AS_MESSAGE(STRING, [FD = AS_MESSAGE_FD])
+# ----------------------------------------
+# Output "`basename $0`: STRING" to the open file FD, and if logging
+# is enabled, copy it to the log with a reference to LINENO.
+m4_defun_init([AS_MESSAGE],
+[AS_REQUIRE([_AS_ME_PREPARE])],
+[m4_ifval(AS_MESSAGE_LOG_FD,
+ [{ _AS_ECHO_LOG([$1])
+_AS_ECHO([$as_me: $1], [$2]);}],
+ [_AS_ECHO([$as_me: $1], [$2])])[]])
+
+
+# AS_WARN(PROBLEM)
+# ----------------
+# Output "`basename $0`: WARNING: PROBLEM" to stderr.
+m4_define([AS_WARN],
+[AS_MESSAGE([WARNING: $1], [2])])# AS_WARN
+
+
+# _AS_ERROR_PREPARE
+# -----------------
+# Output the shell function used by AS_ERROR. This is designed to be
+# expanded during the m4_wrap cleanup.
+#
+# If AS_MESSAGE_LOG_FD is non-empty at the end of the script, then
+# make this function take optional parameters that use LINENO at the
+# points where AS_ERROR was expanded with non-empty AS_MESSAGE_LOG_FD;
+# otherwise, assume the entire script does not do logging.
+m4_define([_AS_ERROR_PREPARE],
+[AS_REQUIRE_SHELL_FN([as_fn_error],
+ [AS_FUNCTION_DESCRIBE([as_fn_error], [STATUS ERROR]m4_ifval(AS_MESSAGE_LOG_FD,
+ [[ [[LINENO LOG_FD]]]]),
+ [Output "`basename @S|@0`: error: ERROR" to stderr.]
+m4_ifval(AS_MESSAGE_LOG_FD,
+ [[If LINENO and LOG_FD are provided, also output the error to LOG_FD,
+ referencing LINENO.]])
+ [Then exit the script with STATUS, using 1 if that was 0.])],
+[ as_status=$[1]; test $as_status -eq 0 && as_status=1
+m4_ifval(AS_MESSAGE_LOG_FD,
+[m4_pushdef([AS_MESSAGE_LOG_FD], [$[4]])dnl
+ if test "$[4]"; then
+ AS_LINENO_PUSH([$[3]])
+ _AS_ECHO_LOG([error: $[2]])
+ fi
+m4_define([AS_MESSAGE_LOG_FD])], [m4_pushdef([AS_MESSAGE_LOG_FD])])dnl
+ AS_MESSAGE([error: $[2]], [2])
+_m4_popdef([AS_MESSAGE_LOG_FD])dnl
+ AS_EXIT([$as_status])])])
+
+# AS_ERROR(ERROR, [EXIT-STATUS = max($?/1)])
+# ------------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr, then exit the
+# script with EXIT-STATUS.
+m4_defun_init([AS_ERROR],
+[m4_append_uniq([_AS_CLEANUP],
+ [m4_divert_text([M4SH-INIT-FN], [_AS_ERROR_PREPARE[]])])],
+[as_fn_error m4_default([$2], [$?]) "_AS_QUOTE([$1])"m4_ifval(AS_MESSAGE_LOG_FD,
+ [ "$LINENO" AS_MESSAGE_LOG_FD])])
+
+
+# AS_LINENO_PUSH([LINENO])
+# ------------------------
+# If this is the outermost call to AS_LINENO_PUSH, make sure that
+# AS_MESSAGE will print LINENO as the line number.
+m4_defun([AS_LINENO_PUSH],
+[as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack])
+
+
+# AS_LINENO_POP([LINENO])
+# -----------------------
+# If this is call balances the outermost call to AS_LINENO_PUSH,
+# AS_MESSAGE will restart printing $LINENO as the line number.
+#
+# No need to use AS_UNSET, since as_lineno is necessarily set.
+m4_defun([AS_LINENO_POP],
+[eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno])
+
+
+
+## -------------------------------------- ##
+## 4. Portable versions of common tools. ##
+## -------------------------------------- ##
+
+# This section is lexicographically sorted.
+
+
+# AS_BASENAME(FILE-NAME)
+# ----------------------
+# Simulate the command 'basename FILE-NAME'. Not all systems have basename.
+# Also see the comments for AS_DIRNAME.
+
+m4_defun([_AS_BASENAME_EXPR],
+[$as_expr X/[]$1 : '.*/\([[^/][^/]*]\)/*$' \| \
+ X[]$1 : 'X\(//\)$' \| \
+ X[]$1 : 'X\(/\)' \| .])
+
+m4_defun([_AS_BASENAME_SED],
+[AS_ECHO([X/[]$1]) |
+ sed ['/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q']])
+
+m4_defun_init([AS_BASENAME],
+[AS_REQUIRE([_$0_PREPARE])],
+[$as_basename -- $1 ||
+_AS_BASENAME_EXPR([$1]) 2>/dev/null ||
+_AS_BASENAME_SED([$1])])
+
+
+# _AS_BASENAME_PREPARE
+# --------------------
+# Avoid Solaris 9 /usr/ucb/basename, as `basename /' outputs an empty line.
+# Also, traditional basename mishandles --. Require here _AS_EXPR_PREPARE,
+# to avoid problems when _AS_BASENAME is called from the M4SH-INIT diversion.
+m4_defun([_AS_BASENAME_PREPARE],
+[AS_REQUIRE([_AS_EXPR_PREPARE])]dnl
+[if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+])# _AS_BASENAME_PREPARE
+
+
+# AS_DIRNAME(FILE-NAME)
+# ---------------------
+# Simulate the command 'dirname FILE-NAME'. Not all systems have dirname.
+# This macro must be usable from inside ` `.
+#
+# Prefer expr to echo|sed, since expr is usually faster and it handles
+# backslashes and newlines correctly. However, older expr
+# implementations (e.g. SunOS 4 expr and Solaris 8 /usr/ucb/expr) have
+# a silly length limit that causes expr to fail if the matched
+# substring is longer than 120 bytes. So fall back on echo|sed if
+# expr fails.
+m4_defun_init([_AS_DIRNAME_EXPR],
+[AS_REQUIRE([_AS_EXPR_PREPARE])],
+[$as_expr X[]$1 : 'X\(.*[[^/]]\)//*[[^/][^/]]*/*$' \| \
+ X[]$1 : 'X\(//\)[[^/]]' \| \
+ X[]$1 : 'X\(//\)$' \| \
+ X[]$1 : 'X\(/\)' \| .])
+
+m4_defun([_AS_DIRNAME_SED],
+[AS_ECHO([X[]$1]) |
+ sed ['/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q']])
+
+m4_defun_init([AS_DIRNAME],
+[AS_REQUIRE([_$0_PREPARE])],
+[$as_dirname -- $1 ||
+_AS_DIRNAME_EXPR([$1]) 2>/dev/null ||
+_AS_DIRNAME_SED([$1])])
+
+
+# _AS_DIRNAME_PREPARE
+# -------------------
+m4_defun([_AS_DIRNAME_PREPARE],
+[AS_REQUIRE([_AS_EXPR_PREPARE])]dnl
+[if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+])# _AS_DIRNAME_PREPARE
+
+
+# AS_ECHO(WORD)
+# -------------
+# Output WORD followed by a newline. WORD must be a single shell word
+# (typically a quoted string). The bytes of WORD are output as-is, even
+# if it starts with "-" or contains "\".
+m4_defun_init([AS_ECHO],
+[AS_REQUIRE([_$0_PREPARE])],
+[$as_echo $1])
+
+
+# AS_ECHO_N(WORD)
+# ---------------
+# Like AS_ECHO(WORD), except do not output the trailing newline.
+m4_defun_init([AS_ECHO_N],
+[AS_REQUIRE([_AS_ECHO_PREPARE])],
+[$as_echo_n $1])
+
+
+# _AS_ECHO_PREPARE
+# ----------------
+# Arrange for $as_echo 'FOO' to echo FOO without escape-interpretation;
+# and similarly for $as_echo_n, which omits the trailing newline.
+# 'FOO' is an optional single argument; a missing FOO is treated as empty.
+m4_defun([_AS_ECHO_PREPARE],
+[[as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$][1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$][1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$][1;
+ case $arg in @%:@(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+]])# _AS_ECHO_PREPARE
+
+
+# AS_TEST_X
+# ---------
+# Check whether a file has executable or search permissions.
+# FIXME: This macro is no longer useful; consider deleting it in 2014
+# after we ensure m4sh scripts can always find a shell with test -x.
+m4_defun_init([AS_TEST_X],
+[AS_REQUIRE([_AS_TEST_PREPARE])],
+[test -x $1[]])# AS_TEST_X
+
+
+# AS_EXECUTABLE_P
+# ---------------
+# Check whether a file is a regular file that has executable permissions.
+m4_defun_init([AS_EXECUTABLE_P],
+[AS_REQUIRE([_AS_TEST_PREPARE])],
+[as_fn_executable_p $1])# AS_EXECUTABLE_P
+
+
+# _AS_EXPR_PREPARE
+# ----------------
+# QNX 4.25 expr computes and issue the right result but exits with failure.
+# Tru64 expr mishandles leading zeros in numeric strings.
+# Detect these flaws.
+m4_defun([_AS_EXPR_PREPARE],
+[if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+])# _AS_EXPR_PREPARE
+
+
+# _AS_ME_PREPARE
+# --------------
+# Define $as_me to the basename of the executable file's name.
+m4_defun([AS_ME_PREPARE], [AS_REQUIRE([_$0])])
+m4_defun([_AS_ME_PREPARE],
+[AS_REQUIRE([_AS_BASENAME_PREPARE])]dnl
+[as_me=`AS_BASENAME("$[0]")`
+])
+
+# _AS_LINENO_WORKS
+# ----------------
+# Succeed if the currently executing shell supports LINENO.
+# This macro does not expand to a single shell command, so be careful
+# when using it. Surrounding the body of this macro with {} would
+# cause "bash -c '_ASLINENO_WORKS'" to fail (with Bash 2.05, anyway),
+# but that bug is irrelevant to our use of LINENO. We can't use
+# AS_VAR_ARITH, as this is expanded prior to shell functions.
+#
+# Testing for LINENO support is hard; we use _AS_LINENO_WORKS inside
+# _AS_RUN, which sometimes eval's its argument (pdksh gives false
+# negatives if $LINENO is expanded by eval), and sometimes passes the
+# argument to another shell (if the current shell supports LINENO,
+# then expanding $LINENO prior to the string leads to false
+# positives). Hence, we perform two tests, and coordinate with
+# _AS_DETECT_EXPAND (which ensures that only the first of two LINENO
+# is expanded in advance) and _AS_RUN (which sets $as_run to 'a' when
+# handing the test to another shell), so that we know which test to
+# trust.
+m4_define([_AS_LINENO_WORKS],
+[ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"'])
+
+
+# _AS_LINENO_PREPARE
+# ------------------
+# If LINENO is not supported by the shell, produce a version of this
+# script where LINENO is hard coded.
+# Comparing LINENO against _oline_ is not a good solution, since in
+# the case of embedded executables (such as config.status within
+# configure) you'd compare LINENO wrt config.status vs. _oline_ wrt
+# configure.
+#
+# AS_ERROR normally uses LINENO if logging, but AS_LINENO_PREPARE uses
+# AS_ERROR. Besides, if the logging fd is open, we don't want to use
+# $LINENO in the log complaining about broken LINENO. We break the
+# circular require by changing AS_ERROR and AS_MESSAGE_LOG_FD.
+m4_defun([AS_LINENO_PREPARE], [AS_REQUIRE([_$0])])
+m4_defun([_AS_LINENO_PREPARE],
+[AS_REQUIRE([_AS_CR_PREPARE])]dnl
+[AS_REQUIRE([_AS_ME_PREPARE])]dnl
+[_AS_DETECT_SUGGESTED([_AS_LINENO_WORKS])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[m4_pushdef([AS_ERROR],
+ [{ AS_MESSAGE(]m4_dquote([error: $][1])[, [2]); AS_EXIT([1]); }])]dnl
+dnl Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+dnl uniformly replaced by the line number. The first 'sed' inserts a
+dnl line-number line after each line using $LINENO; the second 'sed'
+dnl does the real work. The second script uses 'N' to pair each
+dnl line-number line with the line containing $LINENO, and appends
+dnl trailing '-' during substitution so that $LINENO is not a special
+dnl case at line end. (Raja R Harinath suggested sed '=', and Paul
+dnl Eggert wrote the scripts with optimization help from Paolo Bonzini).
+[_AS_LINENO_WORKS || {
+[ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno"] ||
+ AS_ERROR([cannot create $as_me.lineno; rerun with a POSIX shell])
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+_m4_popdef([AS_MESSAGE_LOG_FD], [AS_ERROR])])# _AS_LINENO_PREPARE
+
+
+# _AS_LN_S_PREPARE
+# ----------------
+# Don't use conftest.sym to avoid file name issues on DJGPP, where this
+# would yield conftest.sym.exe for DJGPP < 2.04. And don't use `conftest'
+# as base name to avoid prohibiting concurrency (e.g., concurrent
+# config.statuses). On read-only media, assume 'cp -pR' and hope we
+# are just running --help anyway.
+m4_defun([_AS_LN_S_PREPARE],
+[rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+])# _AS_LN_S_PREPARE
+
+
+# AS_LN_S(FILE, LINK)
+# -------------------
+# FIXME: Should we add the glue code to handle properly relative symlinks
+# simulated with `ln' or `cp'?
+m4_defun_init([AS_LN_S],
+[AS_REQUIRE([_AS_LN_S_PREPARE])],
+[$as_ln_s $1 $2])
+
+
+# _AS_MKDIR_P
+# -----------
+# Emit code that can be used to emulate `mkdir -p` with plain `mkdir';
+# the code assumes that "$as_dir" contains the directory to create.
+# $as_dir is normalized, so there is no need to worry about using --.
+m4_define([_AS_MKDIR_P],
+[case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`AS_ECHO(["$as_dir"]) | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`AS_DIRNAME("$as_dir")`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || AS_ERROR([cannot create directory $as_dir])
+])
+
+# AS_MKDIR_P(DIR)
+# ---------------
+# Emulate `mkdir -p' with plain `mkdir' if needed.
+m4_defun_init([AS_MKDIR_P],
+[AS_REQUIRE([_$0_PREPARE])],
+[as_dir=$1; as_fn_mkdir_p])# AS_MKDIR_P
+
+
+# _AS_MKDIR_P_PREPARE
+# -------------------
+m4_defun([_AS_MKDIR_P_PREPARE],
+[AS_REQUIRE_SHELL_FN([as_fn_mkdir_p],
+ [AS_FUNCTION_DESCRIBE([as_fn_mkdir_p], [],
+ [Create "$as_dir" as a directory, including parents if necessary.])],
+[
+ _AS_MKDIR_P
+])]dnl
+[if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+])# _AS_MKDIR_P_PREPARE
+
+
+# _AS_PATH_SEPARATOR_PREPARE
+# --------------------------
+# Compute the path separator.
+m4_defun([_AS_PATH_SEPARATOR_PREPARE],
+[# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+])# _AS_PATH_SEPARATOR_PREPARE
+
+
+# _AS_PATH_WALK([PATH = $PATH], BODY, [IF-NOT-FOUND])
+# ---------------------------------------------------
+# Walk through PATH running BODY for each `as_dir'. If BODY never does a
+# `break', evaluate IF-NOT-FOUND.
+#
+# Still very private as its interface looks quite bad.
+#
+# `$as_dummy' forces splitting on constant user-supplied paths.
+# POSIX.2 field splitting is done only on the result of word
+# expansions, not on literal text. This closes a longstanding sh security
+# hole. Optimize it away when not needed, i.e., if there are no literal
+# path separators.
+m4_defun_init([_AS_PATH_WALK],
+[AS_REQUIRE([_AS_PATH_SEPARATOR_PREPARE])],
+[as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+m4_ifvaln([$3], [as_found=false])dnl
+m4_bmatch([$1], [[:;]],
+[as_dummy="$1"
+for as_dir in $as_dummy],
+[for as_dir in m4_default([$1], [$PATH])])
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ m4_ifvaln([$3], [as_found=:])dnl
+ $2
+ m4_ifvaln([$3], [as_found=false])dnl
+done
+m4_ifvaln([$3], [$as_found || { $3; }])dnl
+IFS=$as_save_IFS
+])
+
+
+# AS_SET_CATFILE(VAR, DIR-NAME, FILE-NAME)
+# ----------------------------------------
+# Set VAR to DIR-NAME/FILE-NAME.
+# Optimize the common case where $2 or $3 is '.'.
+m4_define([AS_SET_CATFILE],
+[case $2 in @%:@((
+.) AS_VAR_SET([$1], [$3]);;
+*)
+ case $3 in @%:@(((
+ .) AS_VAR_SET([$1], [$2]);;
+ [[\\/]]* | ?:[[\\/]]* ) AS_VAR_SET([$1], [$3]);;
+ *) AS_VAR_SET([$1], [$2/$3]);;
+ esac;;
+esac[]])# AS_SET_CATFILE
+
+
+# _AS_TEST_X_WORKS
+# ----------------
+# These days, we require that `test -x' works.
+m4_define([_AS_TEST_X_WORKS], [test -x /])
+
+# _AS_TEST_PREPARE
+# ----------------
+# Provide back-compat to people that hooked into our undocumented
+# internals (here's looking at you, libtool).
+m4_defun([_AS_TEST_PREPARE],
+[AS_REQUIRE_SHELL_FN([as_fn_executable_p],
+ [AS_FUNCTION_DESCRIBE([as_fn_executable_p], [FILE],
+ [Test if FILE is an executable regular file.])],
+ [ test -f "$[]1" && test -x "$[]1"])]dnl
+[as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+])# _AS_TEST_PREPARE
+
+
+
+
+## ------------------ ##
+## 5. Common idioms. ##
+## ------------------ ##
+
+# This section is lexicographically sorted.
+
+
+# AS_BOX(MESSAGE, [FRAME-CHARACTER = `-'])
+# ----------------------------------------
+# Output MESSAGE, a single line text, framed with FRAME-CHARACTER (which
+# must not be `/').
+m4_define([AS_BOX],
+[_$0(m4_expand([$1]), [$2])])
+
+m4_define([_AS_BOX],
+[m4_if(m4_index(m4_translit([[$1]], [`\"], [$$$]), [$]),
+ [-1], [$0_LITERAL], [$0_INDIR])($@)])
+
+
+# _AS_BOX_LITERAL(MESSAGE, [FRAME-CHARACTER = `-'])
+# -------------------------------------------------
+m4_define([_AS_BOX_LITERAL],
+[AS_ECHO(["_AS_ESCAPE(m4_dquote(m4_expand([m4_text_box($@)])), [`], [\"$])"])])
+
+
+# _AS_BOX_INDIR(MESSAGE, [FRAME-CHARACTER = `-'])
+# -----------------------------------------------
+m4_define([_AS_BOX_INDIR],
+[sed 'h;s/./m4_default([$2], [-])/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
+@%:@@%:@ $1 @%:@@%:@
+_ASBOX])
+
+
+# _AS_CLEAN_DIR(DIR)
+# ------------------
+# Remove all contents from within DIR, including any unwritable
+# subdirectories, but leave DIR itself untouched.
+m4_define([_AS_CLEAN_DIR],
+[if test -d $1; then
+ find $1 -type d ! -perm -700 -exec chmod u+rwx {} \;
+ rm -fr $1/* $1/.[[!.]] $1/.??*
+fi])
+
+
+# AS_FUNCTION_DESCRIBE(NAME, [ARGS], DESCRIPTION, [WRAP-COLUMN = 79])
+# -------------------------------------------------------------------
+# Output a shell comment describing NAME and its arguments ARGS, then
+# a separator line, then the DESCRIPTION wrapped at a decimal
+# WRAP-COLUMN. The output resembles:
+# # NAME ARGS
+# # ---------
+# # Wrapped DESCRIPTION text
+# NAME and ARGS are expanded, while DESCRIPTION is treated as a
+# whitespace-separated list of strings that are not expanded.
+m4_define([AS_FUNCTION_DESCRIBE],
+[@%:@ $1[]m4_ifval([$2], [ $2])
+@%:@ m4_translit(m4_format([%*s],
+ m4_decr(m4_qlen(_m4_expand([$1[]m4_ifval([$2], [ $2])
+]))), []), [ ], [-])
+m4_text_wrap([$3], [@%:@ ], [], [$4])])
+
+
+# AS_HELP_STRING(LHS, RHS, [INDENT-COLUMN = 26], [WRAP-COLUMN = 79])
+# ------------------------------------------------------------------
+#
+# Format a help string so that it looks pretty when the user executes
+# "script --help". This macro takes up to four arguments, a
+# "left hand side" (LHS), a "right hand side" (RHS), a decimal
+# INDENT-COLUMN which is the column where wrapped lines should begin
+# (the default of 26 is recommended), and a decimal WRAP-COLUMN which is
+# the column where lines should wrap (the default of 79 is recommended).
+# LHS is expanded, RHS is not.
+#
+# For backwards compatibility not documented in the manual, INDENT-COLUMN
+# can also be specified as a string of white spaces, whose width
+# determines the indentation column. Using TABs in INDENT-COLUMN is not
+# recommended, since screen width of TAB is not computed.
+#
+# The resulting string is suitable for use in other macros that require
+# a help string (e.g. AC_ARG_WITH).
+#
+# Here is the sample string from the Autoconf manual (Node: External
+# Software) which shows the proper spacing for help strings.
+#
+# --with-readline support fancy command line editing
+# ^ ^ ^
+# | | |
+# | column 2 column 26
+# |
+# column 0
+#
+# A help string is made up of a "left hand side" (LHS) and a "right
+# hand side" (RHS). In the example above, the LHS is
+# "--with-readline", while the RHS is "support fancy command line
+# editing".
+#
+# If the LHS contains more than (INDENT-COLUMN - 3) characters, then the
+# LHS is terminated with a newline so that the RHS starts on a line of its
+# own beginning at INDENT-COLUMN. In the default case, this corresponds to an
+# LHS with more than 23 characters.
+#
+# Therefore, in the example, if the LHS were instead
+# "--with-readline-blah-blah-blah", then the AS_HELP_STRING macro would
+# expand into:
+#
+#
+# --with-readline-blah-blah-blah
+# ^ ^ support fancy command line editing
+# | | ^
+# | column 2 |
+# column 0 column 26
+#
+#
+# m4_text_wrap hacks^Wworks around the fact that m4_format does not
+# know quadrigraphs.
+#
+m4_define([AS_HELP_STRING],
+[m4_text_wrap([$2], m4_cond([[$3]], [], [ ],
+ [m4_eval([$3]+0)], [0], [[$3]],
+ [m4_format([[%*s]], [$3], [])]),
+ m4_expand([ $1 ]), [$4])])# AS_HELP_STRING
+
+
+# AS_IDENTIFIER_IF(EXPRESSION, IF-IDENT, IF-NOT-IDENT)
+# ----------------------------------------------------
+# If EXPRESSION serves as an identifier (ie, after removal of @&t@, it
+# matches the regex `^[a-zA-Z_][a-zA-Z_0-9]*$'), execute IF-IDENT,
+# otherwise IF-NOT-IDENT.
+#
+# This is generally faster than the alternative:
+# m4_bmatch(m4_bpatsubst([[$1]], [@&t@]), ^m4_defn([m4_re_word])$,
+# [$2], [$3])
+#
+# Rather than expand m4_defn every time AS_IDENTIFIER_IF is expanded, we
+# inline its expansion up front. Only use a regular expression if we
+# detect a potential quadrigraph.
+#
+# First, check if the entire string matches m4_cr_symbol2. Only then do
+# we worry if the first character also matches m4_cr_symbol1 (ie. does not
+# match m4_cr_digit).
+m4_define([AS_IDENTIFIER_IF],
+[m4_if(_$0(m4_if(m4_index([$1], [@]), [-1],
+ [[$1]], [m4_bpatsubst([[$1]], [@&t@])])), [-], [$2], [$3])])
+
+m4_define([_AS_IDENTIFIER_IF],
+[m4_cond([[$1]], [], [],
+ [m4_eval(m4_len(m4_translit([[$1]], ]]dnl
+m4_dquote(m4_dquote(m4_defn([m4_cr_symbols2])))[[)) > 0)], [1], [],
+ [m4_len(m4_translit(m4_format([[%.1s]], [$1]), ]]dnl
+m4_dquote(m4_dquote(m4_defn([m4_cr_symbols1])))[[))], [0], [-])])
+
+
+# AS_LITERAL_IF(EXPRESSION, IF-LITERAL, IF-NOT-LITERAL,
+# [IF-SIMPLE-REF = IF-NOT-LITERAL])
+# -----------------------------------------------------
+# If EXPRESSION has no shell indirections ($var or `expr`), expand
+# IF-LITERAL, else IF-NOT-LITERAL. In some cases, IF-NOT-LITERAL
+# must be complex to safely deal with ``, while a simpler
+# expression IF-SIMPLE-REF can be used if the indirection
+# involves only shell variable expansion (as in ${varname}).
+#
+# EXPRESSION is treated as a literal if it results in the same
+# interpretation whether it is unquoted or contained within double
+# quotes, with the exception that whitespace is ignored (on the
+# assumption that it will be flattened to _). Therefore, neither `\$'
+# nor `a''b' is a literal, since both backslash and single quotes have
+# different quoting behavior in the two contexts; and `a*' is not a
+# literal, because it has different globbing. Note, however, that
+# while `${a+b}' is neither a literal nor a simple ref, `a+b' is a
+# literal. This macro is an *approximation*: it is possible that
+# there are some EXPRESSIONs which the shell would treat as literals,
+# but which this macro does not recognize.
+#
+# Why do we reject EXPRESSION expanding with `[' or `]' as a literal?
+# Because AS_TR_SH is MUCH faster if it can use m4_translit on literals
+# instead of m4_bpatsubst; but m4_translit is much tougher to do safely
+# if `[' is translated. That, and file globbing matters.
+#
+# Note that the quadrigraph @S|@ can result in non-literals, but outright
+# rejecting all @ would make AC_INIT complain on its bug report address.
+#
+# We used to use m4_bmatch(m4_quote($1), [[`$]], [$3], [$2]), but
+# profiling shows that it is faster to use m4_translit.
+#
+# Because the translit is stripping quotes, it must also neutralize
+# anything that might be in a macro name, as well as comments, commas,
+# or unbalanced parentheses. Valid shell variable characters and
+# unambiguous literal characters are deleted (`a.b'), and remaining
+# characters are normalized into `$' if they can form simple refs
+# (${a}), `+' if they can potentially form literals (a+b), ``' if they
+# can interfere with m4 parsing, or left alone otherwise. If both `$'
+# and `+' are left, it is treated as a complex reference (${a+b}),
+# even though it could technically be a simple reference (${a}+b).
+# _AS_LITERAL_IF_ only has to check for an empty string after removing
+# one of the two normalized characters.
+#
+# Rather than expand m4_defn every time AS_LITERAL_IF is expanded, we
+# inline its expansion up front. _AS_LITERAL_IF expands to the name
+# of a macro that takes three arguments: IF-SIMPLE-REF,
+# IF-NOT-LITERAL, IF-LITERAL. It also takes an optional argument of
+# any additional characters to allow as literals (useful for AS_TR_SH
+# and AS_TR_CPP to perform inline conversion of whitespace to _). The
+# order of the arguments allows reuse of m4_default.
+m4_define([AS_LITERAL_IF],
+[_$0(m4_expand([$1]), [ ][
+])([$4], [$3], [$2])])
+
+m4_define([_AS_LITERAL_IF],
+[m4_if(m4_index([$1], [@S|@]), [-1], [$0_(m4_translit([$1],
+ [-:=%/@{}[]#(),.$2]]]m4_dquote(m4_dquote(m4_defn([m4_cr_symbols2])))[[,
+ [++++++$$`````]))], [$0_NO])])
+
+m4_define([_AS_LITERAL_IF_],
+[m4_if(m4_translit([$1], [+]), [], [$0YES],
+ m4_translit([$1], [$]), [], [m4_default], [$0NO])])
+
+m4_define([_AS_LITERAL_IF_YES], [$3])
+m4_define([_AS_LITERAL_IF_NO], [$2])
+
+# AS_LITERAL_WORD_IF(EXPRESSION, IF-LITERAL, IF-NOT-LITERAL,
+# [IF-SIMPLE-REF = IF-NOT-LITERAL])
+# ----------------------------------------------------------
+# Like AS_LITERAL_IF, except that spaces and tabs in EXPRESSION
+# are treated as non-literal.
+m4_define([AS_LITERAL_WORD_IF],
+[_AS_LITERAL_IF(m4_expand([$1]))([$4], [$3], [$2])])
+
+# AS_LITERAL_HEREDOC_IF(EXPRESSION, IF-LITERAL, IF-NOT-LITERAL)
+# -------------------------------------------------------------
+# Like AS_LITERAL_IF, except that a string is considered literal
+# if it results in the same output in both quoted and unquoted
+# here-documents.
+m4_define([AS_LITERAL_HEREDOC_IF],
+[_$0(m4_expand([$1]))([$2], [$3])])
+
+m4_define([_AS_LITERAL_HEREDOC_IF],
+[m4_if(m4_index([$1], [@S|@]), [-1],
+ [m4_if(m4_index(m4_translit([[$1]], [\`], [$]), [$]), [-1],
+ [$0_YES], [$0_NO])],
+ [$0_NO])])
+
+m4_define([_AS_LITERAL_HEREDOC_IF_YES], [$1])
+m4_define([_AS_LITERAL_HEREDOC_IF_NO], [$2])
+
+
+# AS_TMPDIR(PREFIX, [DIRECTORY = $TMPDIR [= /tmp]])
+# -------------------------------------------------
+# Create as safely as possible a temporary directory in DIRECTORY
+# which name is inspired by PREFIX (should be 2-4 chars max).
+#
+# Even though $tmp does not fit our normal naming scheme of $as_*,
+# it is a documented part of the public API and must not be changed.
+m4_define([AS_TMPDIR],
+[# Create a (secure) tmp directory for tmp files.
+m4_if([$2], [], [: "${TMPDIR:=/tmp}"])
+{
+ tmp=`(umask 077 && mktemp -d "m4_default([$2],
+ [$TMPDIR])/$1XXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=m4_default([$2], [$TMPDIR])/$1$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || AS_ERROR([cannot create a temporary directory in m4_default([$2],
+ [$TMPDIR])])])# AS_TMPDIR
+
+
+# AS_UNAME
+# --------
+# Try to describe this machine. Meant for logs.
+m4_define([AS_UNAME],
+[{
+cat <<_ASUNAME
+m4_text_box([Platform.])
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+_AS_PATH_WALK([$PATH], [AS_ECHO(["PATH: $as_dir"])])
+}])
+
+
+# _AS_VERSION_COMPARE_PREPARE
+# ---------------------------
+# Output variables for comparing version numbers.
+m4_defun([_AS_VERSION_COMPARE_PREPARE],
+[[as_awk_strverscmp='
+ # Use only awk features that work with 7th edition Unix awk (1978).
+ # My, what an old awk you have, Mr. Solaris!
+ END {
+ while (length(v1) && length(v2)) {
+ # Set d1 to be the next thing to compare from v1, and likewise for d2.
+ # Normally this is a single character, but if v1 and v2 contain digits,
+ # compare them as integers and fractions as strverscmp does.
+ if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) {
+ # Split v1 and v2 into their leading digit string components d1 and d2,
+ # and advance v1 and v2 past the leading digit strings.
+ for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue
+ for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue
+ d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1)
+ d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1)
+ if (d1 ~ /^0/) {
+ if (d2 ~ /^0/) {
+ # Compare two fractions.
+ while (d1 ~ /^0/ && d2 ~ /^0/) {
+ d1 = substr(d1, 2); len1--
+ d2 = substr(d2, 2); len2--
+ }
+ if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) {
+ # The two components differ in length, and the common prefix
+ # contains only leading zeros. Consider the longer to be less.
+ d1 = -len1
+ d2 = -len2
+ } else {
+ # Otherwise, compare as strings.
+ d1 = "x" d1
+ d2 = "x" d2
+ }
+ } else {
+ # A fraction is less than an integer.
+ exit 1
+ }
+ } else {
+ if (d2 ~ /^0/) {
+ # An integer is greater than a fraction.
+ exit 2
+ } else {
+ # Compare two integers.
+ d1 += 0
+ d2 += 0
+ }
+ }
+ } else {
+ # The normal case, without worrying about digits.
+ d1 = substr(v1, 1, 1); v1 = substr(v1, 2)
+ d2 = substr(v2, 1, 1); v2 = substr(v2, 2)
+ }
+ if (d1 < d2) exit 1
+ if (d1 > d2) exit 2
+ }
+ # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10),
+ # which mishandles some comparisons of empty strings to integers.
+ if (length(v2)) exit 1
+ if (length(v1)) exit 2
+ }
+']])# _AS_VERSION_COMPARE_PREPARE
+
+
+# AS_VERSION_COMPARE(VERSION-1, VERSION-2,
+# [ACTION-IF-LESS], [ACTION-IF-EQUAL], [ACTION-IF-GREATER])
+# ----------------------------------------------------------------------------
+# Compare two strings possibly containing shell variables as version strings.
+#
+# This usage is portable even to ancient awk,
+# so don't worry about finding a "nice" awk version.
+m4_defun_init([AS_VERSION_COMPARE],
+[AS_REQUIRE([_$0_PREPARE])],
+[as_arg_v1=$1
+as_arg_v2=$2
+awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
+AS_CASE([$?],
+ [1], [$3],
+ [0], [$4],
+ [2], [$5])])# AS_VERSION_COMPARE
+
+
+
+## --------------------------------------- ##
+## 6. Common m4/sh character translation. ##
+## --------------------------------------- ##
+
+# The point of this section is to provide high level macros comparable
+# to m4's `translit' primitive, but m4/sh polymorphic.
+# Transliteration of literal strings should be handled by m4, while
+# shell variables' content will be translated at runtime (tr or sed).
+
+
+# _AS_CR_PREPARE
+# --------------
+# Output variables defining common character ranges.
+# See m4_cr_letters etc.
+m4_defun([_AS_CR_PREPARE],
+[# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+])
+
+
+# _AS_TR_SH_PREPARE
+# -----------------
+m4_defun([_AS_TR_SH_PREPARE],
+[AS_REQUIRE([_AS_CR_PREPARE])]dnl
+[# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[[^_$as_cr_alnum]]%_%g'"
+])
+
+
+# AS_TR_SH(EXPRESSION)
+# --------------------
+# Transform EXPRESSION into a valid shell variable name.
+# sh/m4 polymorphic.
+# Be sure to update the definition of `$as_tr_sh' if you change this.
+#
+# AS_LITERAL_IF guarantees that a literal does not have any nested quotes,
+# once $1 is expanded. m4_translit silently uses only the first occurrence
+# of a character that appears multiple times in argument 2, since we know
+# that m4_cr_not_symbols2 also contains [ and ]. m4_translit also silently
+# ignores characters in argument 3 that do not match argument 2; we use this
+# fact to skip worrying about the length of m4_cr_not_symbols2.
+#
+# For speed, we inline the literal definitions that can be computed up front.
+m4_defun_init([AS_TR_SH],
+[AS_REQUIRE([_$0_PREPARE])],
+[_$0(m4_expand([$1]))])
+
+m4_define([_AS_TR_SH],
+[_AS_LITERAL_IF([$1], [*][ ][
+])([], [$0_INDIR], [$0_LITERAL])([$1])])
+
+m4_define([_AS_TR_SH_LITERAL],
+[m4_translit([[$1]],
+ [*+[]]]m4_dquote(m4_defn([m4_cr_not_symbols2]))[,
+ [pp[]]]m4_dquote(m4_for(,1,255,,[[_]]))[)])
+
+m4_define([_AS_TR_SH_INDIR],
+[`AS_ECHO(["_AS_ESCAPE([[$1]], [`], [\])"]) | $as_tr_sh`])
+
+
+# _AS_TR_CPP_PREPARE
+# ------------------
+m4_defun([_AS_TR_CPP_PREPARE],
+[AS_REQUIRE([_AS_CR_PREPARE])]dnl
+[# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[[^_$as_cr_alnum]]%_%g'"
+])
+
+
+# AS_TR_CPP(EXPRESSION)
+# ---------------------
+# Map EXPRESSION to an upper case string which is valid as rhs for a
+# `#define'. sh/m4 polymorphic. Be sure to update the definition
+# of `$as_tr_cpp' if you change this.
+#
+# See implementation comments in AS_TR_SH.
+m4_defun_init([AS_TR_CPP],
+[AS_REQUIRE([_$0_PREPARE])],
+[_$0(m4_expand([$1]))])
+
+m4_define([_AS_TR_CPP],
+[_AS_LITERAL_IF([$1], [*][ ][
+])([], [$0_INDIR], [$0_LITERAL])([$1])])
+
+m4_define([_AS_TR_CPP_LITERAL],
+[m4_translit([[$1]],
+ [*[]]]m4_dquote(m4_defn([m4_cr_letters])m4_defn([m4_cr_not_symbols2]))[,
+ [P[]]]m4_dquote(m4_defn([m4_cr_LETTERS])m4_for(,1,255,,[[_]]))[)])
+
+m4_define([_AS_TR_CPP_INDIR],
+[`AS_ECHO(["_AS_ESCAPE([[$1]], [`], [\])"]) | $as_tr_cpp`])
+
+
+# _AS_TR_PREPARE
+# --------------
+m4_defun([_AS_TR_PREPARE],
+[AS_REQUIRE([_AS_TR_SH_PREPARE])AS_REQUIRE([_AS_TR_CPP_PREPARE])])
+
+
+
+
+## ------------------------------------------------------ ##
+## 7. Common m4/sh handling of variables (indirections). ##
+## ------------------------------------------------------ ##
+
+
+# The purpose of this section is to provide a uniform API for
+# reading/setting sh variables with or without indirection.
+# Typically, one can write
+# AS_VAR_SET(var, val)
+# or
+# AS_VAR_SET(as_$var, val)
+# and expect the right thing to happen. In the descriptions below,
+# a literal name matches the regex [a-zA-Z_][a-zA-Z0-9_]*, an
+# indirect name is a shell expression that produces a literal name
+# when passed through eval, and a polymorphic name is either type.
+
+
+# _AS_VAR_APPEND_PREPARE
+# ----------------------
+# Define as_fn_append to the optimum definition for the current
+# shell (bash and zsh provide the += assignment operator to avoid
+# quadratic append growth over repeated appends).
+m4_defun([_AS_VAR_APPEND_PREPARE],
+[AS_FUNCTION_DESCRIBE([as_fn_append], [VAR VALUE],
+[Append the text in VALUE to the end of the definition contained in
+VAR. Take advantage of any shell optimizations that allow amortized
+linear growth over repeated appends, instead of the typical quadratic
+growth present in naive implementations.])
+AS_IF([_AS_RUN(["AS_ESCAPE(m4_quote(_AS_VAR_APPEND_WORKS))"])],
+[eval 'as_fn_append ()
+ {
+ eval $[]1+=\$[]2
+ }'],
+[as_fn_append ()
+ {
+ eval $[]1=\$$[]1\$[]2
+ }]) # as_fn_append
+])
+
+# _AS_VAR_APPEND_WORKS
+# --------------------
+# Output a shell test to discover whether += works.
+m4_define([_AS_VAR_APPEND_WORKS],
+[as_var=1; as_var+=2; test x$as_var = x12])
+
+# AS_VAR_APPEND(VAR, VALUE)
+# -------------------------
+# Append the shell expansion of VALUE to the end of the existing
+# contents of the polymorphic shell variable VAR, taking advantage of
+# any shell optimizations that allow repeated appends to result in
+# amortized linear scaling rather than quadratic behavior. This macro
+# is not worth the overhead unless the expected final size of the
+# contents of VAR outweigh the typical VALUE size of repeated appends.
+# Note that unlike AS_VAR_SET, VALUE must be properly quoted to avoid
+# field splitting and file name expansion.
+m4_defun_init([AS_VAR_APPEND],
+[AS_REQUIRE([_AS_VAR_APPEND_PREPARE], [], [M4SH-INIT-FN])],
+[as_fn_append $1 $2])
+
+
+# _AS_VAR_ARITH_PREPARE
+# ---------------------
+# Define as_fn_arith to the optimum definition for the current
+# shell (using POSIX $(()) where supported).
+m4_defun([_AS_VAR_ARITH_PREPARE],
+[AS_FUNCTION_DESCRIBE([as_fn_arith], [ARG...],
+[Perform arithmetic evaluation on the ARGs, and store the result in
+the global $as_val. Take advantage of shells that can avoid forks.
+The arguments must be portable across $(()) and expr.])
+AS_IF([_AS_RUN(["AS_ESCAPE(m4_quote(_AS_VAR_ARITH_WORKS))"])],
+[eval 'as_fn_arith ()
+ {
+ as_val=$(( $[]* ))
+ }'],
+[as_fn_arith ()
+ {
+ as_val=`expr "$[]@" || test $? -eq 1`
+ }]) # as_fn_arith
+])
+
+# _AS_VAR_ARITH_WORKS
+# -------------------
+# Output a shell test to discover whether $(()) works.
+m4_define([_AS_VAR_ARITH_WORKS],
+[test $(( 1 + 1 )) = 2])
+
+# AS_VAR_ARITH(VAR, EXPR)
+# -----------------------
+# Perform the arithmetic evaluation of the arguments in EXPR, and set
+# contents of the polymorphic shell variable VAR to the result, taking
+# advantage of any shell optimizations that perform arithmetic without
+# forks. Note that numbers occurring within EXPR must be written in
+# decimal, and without leading zeroes; variables containing numbers
+# must be expanded prior to arithmetic evaluation; the first argument
+# must not be a negative number; there is no portable equality
+# operator; and operators must be given as separate arguments and
+# properly quoted.
+m4_defun_init([AS_VAR_ARITH],
+[_AS_DETECT_SUGGESTED([_AS_VAR_ARITH_WORKS])]dnl
+[AS_REQUIRE([_AS_VAR_ARITH_PREPARE], [], [M4SH-INIT-FN])],
+[as_fn_arith $2 && AS_VAR_SET([$1], [$as_val])])
+
+
+# AS_VAR_COPY(DEST, SOURCE)
+# -------------------------
+# Set the polymorphic shell variable DEST to the contents of the polymorphic
+# shell variable SOURCE.
+m4_define([AS_VAR_COPY],
+[AS_LITERAL_WORD_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
+
+
+# AS_VAR_GET(VARIABLE)
+# --------------------
+# Get the value of the shell VARIABLE.
+# Evaluates to $VARIABLE if there is no indirection in VARIABLE,
+# else to the appropriate `eval' sequence.
+# This macro is deprecated because it sometimes mishandles trailing newlines;
+# use AS_VAR_COPY instead.
+m4_define([AS_VAR_GET],
+[AS_LITERAL_WORD_IF([$1],
+ [$$1],
+ [`eval 'as_val=${'_AS_ESCAPE([[$1]], [`], [\])'};AS_ECHO(["$as_val"])'`])])
+
+
+# AS_VAR_IF(VARIABLE, VALUE, IF-TRUE, IF-FALSE)
+# ---------------------------------------------
+# Implement a shell `if test $VARIABLE = VALUE; then-else'.
+# Polymorphic, and avoids sh expansion error upon interrupt or term signal.
+m4_define([AS_VAR_IF],
+[AS_LITERAL_WORD_IF([$1],
+ [AS_IF(m4_ifval([$2], [[test "x$$1" = x[]$2]], [[${$1:+false} :]])],
+ [AS_VAR_COPY([as_val], [$1])
+ AS_IF(m4_ifval([$2], [[test "x$as_val" = x[]$2]], [[${as_val:+false} :]])],
+ [AS_IF(m4_ifval([$2],
+ [[eval test \"x\$"$1"\" = x"_AS_ESCAPE([$2], [`], [\"$])"]],
+ [[eval \${$1:+false} :]])]),
+[$3], [$4])])
+
+
+# AS_VAR_PUSHDEF and AS_VAR_POPDEF
+# --------------------------------
+#
+
+# Sometimes we may have to handle literals (e.g. `stdlib.h'), while at
+# other moments, the same code may have to get the value from a
+# variable (e.g., `ac_header'). To have a uniform handling of both
+# cases, when a new value is about to be processed, declare a local
+# variable, e.g.:
+#
+# AS_VAR_PUSHDEF([header], [ac_cv_header_$1])
+#
+# and then in the body of the macro, use `header' as is. It is of
+# first importance to use `AS_VAR_*' to access this variable.
+#
+# If the value `$1' was a literal (e.g. `stdlib.h'), then `header' is
+# in fact the value `ac_cv_header_stdlib_h'. If `$1' was indirect,
+# then `header's value in m4 is in fact `$as_header', the shell
+# variable that holds all of the magic to get the expansion right.
+#
+# At the end of the block, free the variable with
+#
+# AS_VAR_POPDEF([header])
+
+
+# AS_VAR_POPDEF(VARNAME)
+# ----------------------
+# Free the shell variable accessor VARNAME. To be dnl'ed.
+m4_define([AS_VAR_POPDEF],
+[m4_popdef([$1])])
+
+
+# AS_VAR_PUSHDEF(VARNAME, VALUE)
+# ------------------------------
+# Define the m4 macro VARNAME to an accessor to the shell variable
+# named VALUE. VALUE does not need to be a valid shell variable name:
+# the transliteration is handled here. To be dnl'ed.
+#
+# AS_TR_SH attempts to play with diversions if _AS_TR_SH_PREPARE has
+# not been expanded. However, users are expected to do subsequent
+# calls that trigger AS_LITERAL_IF([VARNAME]), and that macro performs
+# expansion inside an argument collection context, where diversions
+# don't work. Therefore, we must require the preparation ourselves.
+m4_defun_init([AS_VAR_PUSHDEF],
+[AS_REQUIRE([_AS_TR_SH_PREPARE])],
+[_$0([$1], m4_expand([$2]))])
+
+m4_define([_AS_VAR_PUSHDEF],
+[_AS_LITERAL_IF([$2], [ ][
+])([], [as_$1=_AS_TR_SH_INDIR([$2])
+m4_pushdef([$1], [$as_[$1]])],
+[m4_pushdef([$1], [_AS_TR_SH_LITERAL([$2])])])])
+
+
+# AS_VAR_SET(VARIABLE, VALUE)
+# ---------------------------
+# Set the contents of the polymorphic shell VARIABLE to the shell
+# expansion of VALUE. VALUE is immune to field splitting and file
+# name expansion.
+m4_define([AS_VAR_SET],
+[AS_LITERAL_WORD_IF([$1],
+ [$1=$2],
+ [eval "$1=_AS_ESCAPE([$2], [`], [\"$])"])])
+
+
+# AS_VAR_SET_IF(VARIABLE, IF-TRUE, IF-FALSE)
+# ------------------------------------------
+# Implement a shell `if-then-else' depending whether VARIABLE is set
+# or not. Polymorphic.
+m4_define([AS_VAR_SET_IF],
+[AS_IF([AS_VAR_TEST_SET([$1])], [$2], [$3])])
+
+
+# AS_VAR_TEST_SET(VARIABLE)
+# -------------------------
+# Expands into an expression which is true if VARIABLE
+# is set. Polymorphic.
+m4_define([AS_VAR_TEST_SET],
+[AS_LITERAL_WORD_IF([$1],
+ [${$1+:} false],
+ [{ as_var=$1; eval \${$as_var+:} false; }],
+ [eval \${$1+:} false])])
+
+
+## -------------------- ##
+## 8. Setting M4sh up. ##
+## -------------------- ##
+
+
+# AS_INIT_GENERATED(FILE, [COMMENT])
+# ----------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_defun([AS_INIT_GENERATED],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[as_write_fail=0
+cat >$1 <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || as_write_fail=1
+_AS_SHELL_SANITIZE
+_AS_PREPARE
+m4_if(AS_MESSAGE_FD, [1], [], [exec AS_MESSAGE_FD>&1
+])]dnl
+[m4_text_box([Main body of $1 script.])
+_ASEOF
+test $as_write_fail = 0 && chmod +x $1[]dnl
+_m4_popdef([AS_MESSAGE_LOG_FD])])# AS_INIT_GENERATED
+
+
+# AS_INIT
+# -------
+# Initialize m4sh.
+m4_define([AS_INIT],
+[# Wrap our cleanup prior to m4sugar's cleanup.
+m4_wrap([_AS_CLEANUP])
+m4_init
+m4_provide([AS_INIT])
+
+# Forbidden tokens and exceptions.
+m4_pattern_forbid([^_?AS_])
+
+# Bangshe and minimal initialization.
+m4_divert_text([BINSH], [@%:@! /bin/sh])
+m4_divert_text([HEADER-COMMENT],
+ [@%:@ Generated from __file__ by m4_PACKAGE_STRING.])
+m4_divert_text([M4SH-SANITIZE], [_AS_SHELL_SANITIZE])
+m4_divert_text([M4SH-INIT-FN], [m4_text_box([M4sh Shell Functions.])])
+
+# Let's go!
+m4_divert([BODY])dnl
+m4_text_box([Main body of script.])
+_AS_DETECT_REQUIRED([_AS_SHELL_FN_WORK])dnl
+_AS_DETECT_REQUIRED([_AS_TEST_X_WORKS])dnl
+AS_REQUIRE([_AS_UNSET_PREPARE], [], [M4SH-INIT-FN])dnl
+])
diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4
new file mode 100644
index 0000000..278bc05
--- /dev/null
+++ b/lib/m4sugar/m4sugar.m4
@@ -0,0 +1,3301 @@
+divert(-1)# -*- Autoconf -*-
+# This file is part of Autoconf.
+# Base M4 layer.
+# Requires GNU M4.
+#
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
+
+# This file is part of Autoconf. This program is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# Under Section 7 of GPL version 3, you are granted additional
+# permissions described in the Autoconf Configure Script Exception,
+# version 3.0, as published by the Free Software Foundation.
+#
+# You should have received a copy of the GNU General Public License
+# and a copy of the Autoconf Configure Script Exception along with
+# this program; see the files COPYINGv3 and COPYING.EXCEPTION
+# respectively. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Akim Demaille.
+
+# Set the quotes, whatever the current quoting system.
+changequote()
+changequote([, ])
+
+# Some old m4's don't support m4exit. But they provide
+# equivalent functionality by core dumping because of the
+# long macros we define.
+ifdef([__gnu__], ,
+[errprint(M4sugar requires GNU M4. Install it before installing M4sugar or
+set the M4 environment variable to its absolute file name.)
+m4exit(2)])
+
+
+## ------------------------------- ##
+## 1. Simulate --prefix-builtins. ##
+## ------------------------------- ##
+
+# m4_define
+# m4_defn
+# m4_undefine
+define([m4_define], defn([define]))
+define([m4_defn], defn([defn]))
+define([m4_undefine], defn([undefine]))
+
+m4_undefine([define])
+m4_undefine([defn])
+m4_undefine([undefine])
+
+
+# m4_copy(SRC, DST)
+# -----------------
+# Define DST as the definition of SRC.
+# What's the difference between:
+# 1. m4_copy([from], [to])
+# 2. m4_define([to], [from($@)])
+# Well, obviously 1 is more expensive in space. Maybe 2 is more expensive
+# in time, but because of the space cost of 1, it's not that obvious.
+# Nevertheless, one huge difference is the handling of `$0'. If `from'
+# uses `$0', then with 1, `to''s `$0' is `to', while it is `from' in 2.
+# The user would certainly prefer to see `to'.
+#
+# This definition is in effect during m4sugar initialization, when
+# there are no pushdef stacks; later on, we redefine it to something
+# more powerful for all other clients to use.
+m4_define([m4_copy],
+[m4_define([$2], m4_defn([$1]))])
+
+
+# m4_rename(SRC, DST)
+# -------------------
+# Rename the macro SRC to DST.
+m4_define([m4_rename],
+[m4_copy([$1], [$2])m4_undefine([$1])])
+
+
+# m4_rename_m4(MACRO-NAME)
+# ------------------------
+# Rename MACRO-NAME to m4_MACRO-NAME.
+m4_define([m4_rename_m4],
+[m4_rename([$1], [m4_$1])])
+
+
+# m4_copy_unm4(m4_MACRO-NAME)
+# ---------------------------
+# Copy m4_MACRO-NAME to MACRO-NAME.
+m4_define([m4_copy_unm4],
+[m4_copy([$1], m4_bpatsubst([$1], [^m4_\(.*\)], [[\1]]))])
+
+
+# Some m4 internals have names colliding with tokens we might use.
+# Rename them a` la `m4 --prefix-builtins'. Conditionals first, since
+# some subsequent renames are conditional.
+m4_rename_m4([ifdef])
+m4_rename([ifelse], [m4_if])
+
+m4_rename_m4([builtin])
+m4_rename_m4([changecom])
+m4_rename_m4([changequote])
+m4_ifdef([changeword],dnl conditionally available in 1.4.x
+[m4_undefine([changeword])])
+m4_rename_m4([debugfile])
+m4_rename_m4([debugmode])
+m4_rename_m4([decr])
+m4_rename_m4([divnum])
+m4_rename_m4([dumpdef])
+m4_rename_m4([errprint])
+m4_rename_m4([esyscmd])
+m4_rename_m4([eval])
+m4_rename_m4([format])
+m4_undefine([include])
+m4_rename_m4([incr])
+m4_rename_m4([index])
+m4_rename_m4([indir])
+m4_rename_m4([len])
+m4_rename([m4exit], [m4_exit])
+m4_undefine([m4wrap])
+m4_ifdef([mkstemp],dnl added in M4 1.4.8
+[m4_rename_m4([mkstemp])
+m4_copy([m4_mkstemp], [m4_maketemp])
+m4_undefine([maketemp])],
+[m4_rename_m4([maketemp])
+m4_copy([m4_maketemp], [m4_mkstemp])])
+m4_rename([patsubst], [m4_bpatsubst])
+m4_rename_m4([popdef])
+m4_rename_m4([pushdef])
+m4_rename([regexp], [m4_bregexp])
+m4_rename_m4([shift])
+m4_undefine([sinclude])
+m4_rename_m4([substr])
+m4_ifdef([symbols],dnl present only in alpha-quality 1.4o
+[m4_rename_m4([symbols])])
+m4_rename_m4([syscmd])
+m4_rename_m4([sysval])
+m4_rename_m4([traceoff])
+m4_rename_m4([traceon])
+m4_rename_m4([translit])
+
+# _m4_defn(ARG)
+# -------------
+# _m4_defn is for internal use only - it bypasses the wrapper, so it
+# must only be used on one argument at a time, and only on macros
+# known to be defined. Make sure this still works if the user renames
+# m4_defn but not _m4_defn.
+m4_copy([m4_defn], [_m4_defn])
+
+# _m4_divert_raw(NUM)
+# -------------------
+# _m4_divert_raw is for internal use only. Use this instead of
+# m4_builtin([divert], NUM), so that tracing diversion flow is easier.
+m4_rename([divert], [_m4_divert_raw])
+
+# _m4_popdef(ARG...)
+# ------------------
+# _m4_popdef is for internal use only - it bypasses the wrapper, so it
+# must only be used on macros known to be defined. Make sure this
+# still works if the user renames m4_popdef but not _m4_popdef.
+m4_copy([m4_popdef], [_m4_popdef])
+
+# _m4_undefine(ARG...)
+# --------------------
+# _m4_undefine is for internal use only - it bypasses the wrapper, so
+# it must only be used on macros known to be defined. Make sure this
+# still works if the user renames m4_undefine but not _m4_undefine.
+m4_copy([m4_undefine], [_m4_undefine])
+
+# _m4_undivert(NUM...)
+# --------------------
+# _m4_undivert is for internal use only, and should always be given
+# arguments. Use this instead of m4_builtin([undivert], NUM...), so
+# that tracing diversion flow is easier.
+m4_rename([undivert], [_m4_undivert])
+
+
+## ------------------- ##
+## 2. Error messages. ##
+## ------------------- ##
+
+
+# m4_location
+# -----------
+# Output the current file, colon, and the current line number.
+m4_define([m4_location],
+[__file__:__line__])
+
+
+# m4_errprintn(MSG)
+# -----------------
+# Same as `errprint', but with the missing end of line.
+m4_define([m4_errprintn],
+[m4_errprint([$1
+])])
+
+
+# m4_warning(MSG)
+# ---------------
+# Warn the user.
+m4_define([m4_warning],
+[m4_errprintn(m4_location[: warning: $1])])
+
+
+# m4_fatal(MSG, [EXIT-STATUS])
+# ----------------------------
+# Fatal the user. :)
+m4_define([m4_fatal],
+[m4_errprintn(m4_location[: error: $1]
+m4_expansion_stack)m4_exit(m4_if([$2],, 1, [$2]))])
+
+
+# m4_assert(EXPRESSION, [EXIT-STATUS = 1])
+# ----------------------------------------
+# This macro ensures that EXPRESSION evaluates to true, and exits if
+# EXPRESSION evaluates to false.
+m4_define([m4_assert],
+[m4_if(m4_eval([$1]), 0,
+ [m4_fatal([assert failed: $1], [$2])])])
+
+
+
+## ------------- ##
+## 3. Warnings. ##
+## ------------- ##
+
+
+# _m4_warn(CATEGORY, MESSAGE, [STACK-TRACE])
+# ------------------------------------------
+# Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
+# This is for traces only.
+# If present, STACK-TRACE is a \n-separated list of "LOCATION: MESSAGE",
+# where the last line (and no other) ends with "the top level".
+#
+# Within m4, the macro is a no-op. This macro really matters
+# when autom4te post-processes the trace output.
+m4_define([_m4_warn], [])
+
+
+# m4_warn(CATEGORY, MESSAGE)
+# --------------------------
+# Report a MESSAGE to the user if the CATEGORY of warnings is enabled.
+m4_define([m4_warn],
+[_m4_warn([$1], [$2],
+m4_ifdef([_m4_expansion_stack], [m4_expansion_stack]))])
+
+
+
+## ------------------- ##
+## 4. File inclusion. ##
+## ------------------- ##
+
+
+# We also want to neutralize include (and sinclude for symmetry),
+# but we want to extend them slightly: warn when a file is included
+# several times. This is, in general, a dangerous operation, because
+# too many people forget to quote the first argument of m4_define.
+#
+# For instance in the following case:
+# m4_define(foo, [bar])
+# then a second reading will turn into
+# m4_define(bar, [bar])
+# which is certainly not what was meant.
+
+# m4_include_unique(FILE)
+# -----------------------
+# Declare that the FILE was loading; and warn if it has already
+# been included.
+m4_define([m4_include_unique],
+[m4_ifdef([m4_include($1)],
+ [m4_warn([syntax], [file `$1' included several times])])dnl
+m4_define([m4_include($1)])])
+
+
+# m4_include(FILE)
+# ----------------
+# Like the builtin include, but warns against multiple inclusions.
+m4_define([m4_include],
+[m4_include_unique([$1])dnl
+m4_builtin([include], [$1])])
+
+
+# m4_sinclude(FILE)
+# -----------------
+# Like the builtin sinclude, but warns against multiple inclusions.
+m4_define([m4_sinclude],
+[m4_include_unique([$1])dnl
+m4_builtin([sinclude], [$1])])
+
+
+
+## ------------------------------------ ##
+## 5. Additional branching constructs. ##
+## ------------------------------------ ##
+
+# Both `m4_ifval' and `m4_ifset' tests against the empty string. The
+# difference is that `m4_ifset' is specialized on macros.
+#
+# In case of arguments of macros, eg. $1, it makes little difference.
+# In the case of a macro `FOO', you don't want to check `m4_ifval(FOO,
+# TRUE)', because if `FOO' expands with commas, there is a shifting of
+# the arguments. So you want to run `m4_ifval([FOO])', but then you just
+# compare the *string* `FOO' against `', which, of course fails.
+#
+# So you want the variation `m4_ifset' that expects a macro name as $1.
+# If this macro is both defined and defined to a non empty value, then
+# it runs TRUE, etc.
+
+
+# m4_ifblank(COND, [IF-BLANK], [IF-TEXT])
+# m4_ifnblank(COND, [IF-TEXT], [IF-BLANK])
+# ----------------------------------------
+# If COND is empty, or consists only of blanks (space, tab, newline),
+# then expand IF-BLANK, otherwise expand IF-TEXT. This differs from
+# m4_ifval only if COND has just whitespace, but it helps optimize in
+# spite of users who mistakenly leave trailing space after what they
+# thought was an empty argument:
+# macro(
+# []
+# )
+#
+# Writing one macro in terms of the other causes extra overhead, so
+# we inline both definitions.
+m4_define([m4_ifblank],
+[m4_if(m4_translit([[$1]], [ ][ ][
+]), [], [$2], [$3])])
+
+m4_define([m4_ifnblank],
+[m4_if(m4_translit([[$1]], [ ][ ][
+]), [], [$3], [$2])])
+
+
+# m4_ifval(COND, [IF-TRUE], [IF-FALSE])
+# -------------------------------------
+# If COND is not the empty string, expand IF-TRUE, otherwise IF-FALSE.
+# Comparable to m4_ifdef.
+m4_define([m4_ifval],
+[m4_if([$1], [], [$3], [$2])])
+
+
+# m4_n(TEXT)
+# ----------
+# If TEXT is not empty, return TEXT and a new line, otherwise nothing.
+m4_define([m4_n],
+[m4_if([$1],
+ [], [],
+ [$1
+])])
+
+
+# m4_ifvaln(COND, [IF-TRUE], [IF-FALSE])
+# --------------------------------------
+# Same as `m4_ifval', but add an extra newline to IF-TRUE or IF-FALSE
+# unless that argument is empty.
+m4_define([m4_ifvaln],
+[m4_if([$1],
+ [], [m4_n([$3])],
+ [m4_n([$2])])])
+
+
+# m4_ifset(MACRO, [IF-TRUE], [IF-FALSE])
+# --------------------------------------
+# If MACRO has no definition, or of its definition is the empty string,
+# expand IF-FALSE, otherwise IF-TRUE.
+m4_define([m4_ifset],
+[m4_ifdef([$1],
+ [m4_ifval(_m4_defn([$1]), [$2], [$3])],
+ [$3])])
+
+
+# m4_ifndef(NAME, [IF-NOT-DEFINED], [IF-DEFINED])
+# -----------------------------------------------
+m4_define([m4_ifndef],
+[m4_ifdef([$1], [$3], [$2])])
+
+
+# m4_case(SWITCH, VAL1, IF-VAL1, VAL2, IF-VAL2, ..., DEFAULT)
+# -----------------------------------------------------------
+# m4 equivalent of
+# switch (SWITCH)
+# {
+# case VAL1:
+# IF-VAL1;
+# break;
+# case VAL2:
+# IF-VAL2;
+# break;
+# ...
+# default:
+# DEFAULT;
+# break;
+# }.
+# All the values are optional, and the macro is robust to active
+# symbols properly quoted.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_case],
+[m4_if([$#], 0, [],
+ [$#], 1, [],
+ [$#], 2, [$2],
+ [$1], [$2], [$3],
+ [$0([$1], m4_shift3($@))])])
+
+
+# m4_bmatch(SWITCH, RE1, VAL1, RE2, VAL2, ..., DEFAULT)
+# -----------------------------------------------------
+# m4 equivalent of
+#
+# if (SWITCH =~ RE1)
+# VAL1;
+# elif (SWITCH =~ RE2)
+# VAL2;
+# elif ...
+# ...
+# else
+# DEFAULT
+#
+# All the values are optional, and the macro is robust to active symbols
+# properly quoted.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_bmatch],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+ [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
+ [$#], 2, [$2],
+ [m4_if(m4_bregexp([$1], [$2]), -1, [$0([$1], m4_shift3($@))],
+ [$3])])])
+
+# m4_argn(N, ARGS...)
+# -------------------
+# Extract argument N (greater than 0) from ARGS. Example:
+# m4_define([b], [B])
+# m4_argn([2], [a], [b], [c]) => b
+#
+# Rather than using m4_car(m4_shiftn([$1], $@)), we exploit the fact that
+# GNU m4 can directly reference any argument, through an indirect macro.
+m4_define([m4_argn],
+[m4_assert([0 < $1])]dnl
+[m4_pushdef([_$0], [_m4_popdef([_$0])]m4_dquote([$]m4_incr([$1])))_$0($@)])
+
+
+# m4_car(ARGS...)
+# m4_cdr(ARGS...)
+# ---------------
+# Manipulate m4 lists. m4_car returns the first argument. m4_cdr
+# bundles all but the first argument into a quoted list. These two
+# macros are generally used with list arguments, with quoting removed
+# to break the list into multiple m4 ARGS.
+m4_define([m4_car], [[$1]])
+m4_define([m4_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+
+# _m4_cdr(ARGS...)
+# ----------------
+# Like m4_cdr, except include a leading comma unless only one argument
+# remains. Why? Because comparing a large list against [] is more
+# expensive in expansion time than comparing the number of arguments; so
+# _m4_cdr can be used to reduce the number of arguments when it is time
+# to end recursion.
+m4_define([_m4_cdr],
+[m4_if([$#], 1, [],
+ [, m4_dquote(m4_shift($@))])])
+
+
+
+# m4_cond(TEST1, VAL1, IF-VAL1, TEST2, VAL2, IF-VAL2, ..., [DEFAULT])
+# -------------------------------------------------------------------
+# Similar to m4_if, except that each TEST is expanded when encountered.
+# If the expansion of TESTn matches the string VALn, the result is IF-VALn.
+# The result is DEFAULT if no tests passed. This macro allows
+# short-circuiting of expensive tests, where it pays to arrange quick
+# filter tests to run first.
+#
+# For an example, consider a previous implementation of _AS_QUOTE_IFELSE:
+#
+# m4_if(m4_index([$1], [\]), [-1], [$2],
+# m4_eval(m4_index([$1], [\\]) >= 0), [1], [$2],
+# m4_eval(m4_index([$1], [\$]) >= 0), [1], [$2],
+# m4_eval(m4_index([$1], [\`]) >= 0), [1], [$3],
+# m4_eval(m4_index([$1], [\"]) >= 0), [1], [$3],
+# [$2])
+#
+# Here, m4_index is computed 5 times, and m4_eval 4, even if $1 contains
+# no backslash. It is more efficient to do:
+#
+# m4_cond([m4_index([$1], [\])], [-1], [$2],
+# [m4_eval(m4_index([$1], [\\]) >= 0)], [1], [$2],
+# [m4_eval(m4_index([$1], [\$]) >= 0)], [1], [$2],
+# [m4_eval(m4_index([$1], [\`]) >= 0)], [1], [$3],
+# [m4_eval(m4_index([$1], [\"]) >= 0)], [1], [$3],
+# [$2])
+#
+# In the common case of $1 with no backslash, only one m4_index expansion
+# occurs, and m4_eval is avoided altogether.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_cond],
+[m4_if([$#], [0], [m4_fatal([$0: cannot be called without arguments])],
+ [$#], [1], [$1],
+ m4_eval([$# % 3]), [2], [m4_fatal([$0: missing an argument])],
+ [_$0($@)])])
+
+m4_define([_m4_cond],
+[m4_if(($1), [($2)], [$3],
+ [$#], [3], [],
+ [$#], [4], [$4],
+ [$0(m4_shift3($@))])])
+
+
+## ---------------------------------------- ##
+## 6. Enhanced version of some primitives. ##
+## ---------------------------------------- ##
+
+# m4_bpatsubsts(STRING, RE1, SUBST1, RE2, SUBST2, ...)
+# ----------------------------------------------------
+# m4 equivalent of
+#
+# $_ = STRING;
+# s/RE1/SUBST1/g;
+# s/RE2/SUBST2/g;
+# ...
+#
+# All the values are optional, and the macro is robust to active symbols
+# properly quoted.
+#
+# I would have liked to name this macro `m4_bpatsubst', unfortunately,
+# due to quotation problems, I need to double quote $1 below, therefore
+# the anchors are broken :( I can't let users be trapped by that.
+#
+# Recall that m4_shift3 always results in an argument. Hence, we need
+# to distinguish between a final deletion vs. ending recursion.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_bpatsubsts],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+ [$#], 1, [m4_fatal([$0: too few arguments: $#: $1])],
+ [$#], 2, [m4_unquote(m4_builtin([patsubst], [[$1]], [$2]))],
+ [$#], 3, [m4_unquote(m4_builtin([patsubst], [[$1]], [$2], [$3]))],
+ [_$0($@m4_if(m4_eval($# & 1), 0, [,]))])])
+m4_define([_m4_bpatsubsts],
+[m4_if([$#], 2, [$1],
+ [$0(m4_builtin([patsubst], [[$1]], [$2], [$3]),
+ m4_shift3($@))])])
+
+
+# m4_copy(SRC, DST)
+# -----------------
+# Define the pushdef stack DST as a copy of the pushdef stack SRC;
+# give an error if DST is already defined. This is particularly nice
+# for copying self-modifying pushdef stacks, where the top definition
+# includes one-shot initialization that is later popped to the normal
+# definition. This version intentionally does nothing if SRC is
+# undefined.
+#
+# Some macros simply can't be renamed with this method: namely, anything
+# involved in the implementation of m4_stack_foreach_sep.
+m4_define([m4_copy],
+[m4_ifdef([$2], [m4_fatal([$0: won't overwrite defined macro: $2])],
+ [m4_stack_foreach_sep([$1], [m4_pushdef([$2],], [)])])]dnl
+[m4_ifdef([m4_location($1)], [m4_define([m4_location($2)], m4_location)])])
+
+
+# m4_copy_force(SRC, DST)
+# m4_rename_force(SRC, DST)
+# -------------------------
+# Like m4_copy/m4_rename, except blindly overwrite any existing DST.
+# Note that m4_copy_force tolerates undefined SRC, while m4_rename_force
+# does not.
+m4_define([m4_copy_force],
+[m4_ifdef([$2], [_m4_undefine([$2])])m4_copy($@)])
+
+m4_define([m4_rename_force],
+[m4_ifdef([$2], [_m4_undefine([$2])])m4_rename($@)])
+
+
+# m4_define_default(MACRO, VALUE)
+# -------------------------------
+# If MACRO is undefined, set it to VALUE.
+m4_define([m4_define_default],
+[m4_ifndef([$1], [m4_define($@)])])
+
+
+# m4_default(EXP1, EXP2)
+# m4_default_nblank(EXP1, EXP2)
+# -----------------------------
+# Returns EXP1 if not empty/blank, otherwise EXP2. Expand the result.
+#
+# m4_default is called on hot paths, so inline the contents of m4_ifval,
+# for one less round of expansion.
+m4_define([m4_default],
+[m4_if([$1], [], [$2], [$1])])
+
+m4_define([m4_default_nblank],
+[m4_ifblank([$1], [$2], [$1])])
+
+
+# m4_default_quoted(EXP1, EXP2)
+# m4_default_nblank_quoted(EXP1, EXP2)
+# ------------------------------------
+# Returns EXP1 if non empty/blank, otherwise EXP2. Leave the result quoted.
+#
+# For comparison:
+# m4_define([active], [ACTIVE])
+# m4_default([active], [default]) => ACTIVE
+# m4_default([], [active]) => ACTIVE
+# -m4_default([ ], [active])- => - -
+# -m4_default_nblank([ ], [active])- => -ACTIVE-
+# m4_default_quoted([active], [default]) => active
+# m4_default_quoted([], [active]) => active
+# -m4_default_quoted([ ], [active])- => - -
+# -m4_default_nblank_quoted([ ], [active])- => -active-
+#
+# m4_default macro is called on hot paths, so inline the contents of m4_ifval,
+# for one less round of expansion.
+m4_define([m4_default_quoted],
+[m4_if([$1], [], [[$2]], [[$1]])])
+
+m4_define([m4_default_nblank_quoted],
+[m4_ifblank([$1], [[$2]], [[$1]])])
+
+
+# m4_defn(NAME)
+# -------------
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x). This replacement is not a full-featured
+# replacement: if any of the defined macros contain unbalanced quoting, but
+# when pasted together result in a well-quoted string, then only native m4
+# support is able to get it correct. But that's where quadrigraphs come in
+# handy, if you really need unbalanced quotes inside your macros.
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef. Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
+m4_define([m4_defn],
+[m4_if([$#], [0], [[$0]],
+ [$#], [1], [m4_ifdef([$1], [_m4_defn([$1])],
+ [m4_fatal([$0: undefined macro: $1])])],
+ [m4_map_args([$0], $@)])])
+
+
+# m4_dumpdef(NAME...)
+# -------------------
+# In m4 1.4.x, dumpdef writes to the current debugfile, rather than
+# stderr. This in turn royally confuses autom4te; so we follow the
+# lead of newer m4 and always dump to stderr. Unlike the original,
+# this version requires an argument, since there is no convenient way
+# in m4 1.4.x to grab the names of all defined macros. Newer m4
+# always dumps to stderr, regardless of the current debugfile; it also
+# provides m4symbols as a way to grab all current macro names. But
+# dumpdefs is not frequently called, so we don't need to worry about
+# conditionally using these newer features. Also, this version
+# doesn't sort multiple arguments.
+#
+# If we detect m4 1.6 or newer, then provide an alternate definition,
+# installed during m4_init, that allows builtins through.
+# Unfortunately, there is no nice way in m4 1.4.x to dump builtins.
+m4_define([m4_dumpdef],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+ [$#], [1], [m4_ifdef([$1], [m4_errprintn(
+ [$1: ]m4_dquote(_m4_defn([$1])))], [m4_fatal([$0: undefined macro: $1])])],
+ [m4_map_args([$0], $@)])])
+
+m4_define([_m4_dumpdef],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+ [$#], [1], [m4_builtin([dumpdef], [$1])],
+ [m4_map_args_sep([m4_builtin([dumpdef],], [)], [], $@)])])
+
+
+# m4_dumpdefs(NAME...)
+# --------------------
+# Similar to `m4_dumpdef(NAME)', but if NAME was m4_pushdef'ed, display its
+# value stack (most recent displayed first). Also, this version silently
+# ignores undefined macros, rather than erroring out.
+#
+# This macro cheats, because it relies on the current definition of NAME
+# while the second argument of m4_stack_foreach_lifo is evaluated (which
+# would be undefined according to the API).
+m4_define([m4_dumpdefs],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+ [$#], [1], [m4_stack_foreach_lifo([$1], [m4_dumpdef([$1])m4_ignore])],
+ [m4_map_args([$0], $@)])])
+
+# m4_esyscmd_s(COMMAND)
+# ---------------------
+# Like m4_esyscmd, except strip any trailing newlines, thus behaving
+# more like shell command substitution.
+m4_define([m4_esyscmd_s],
+[m4_chomp_all(m4_esyscmd([$1]))])
+
+
+# m4_popdef(NAME)
+# ---------------
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x).
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef. Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
+m4_define([m4_popdef],
+[m4_if([$#], [0], [[$0]],
+ [$#], [1], [m4_ifdef([$1], [_m4_popdef([$1])],
+ [m4_fatal([$0: undefined macro: $1])])],
+ [m4_map_args([$0], $@)])])
+
+
+# m4_shiftn(N, ...)
+# -----------------
+# Returns ... shifted N times. Useful for recursive "varargs" constructs.
+#
+# Autoconf does not use this macro, because it is inherently slower than
+# calling the common cases of m4_shift2 or m4_shift3 directly. But it
+# might as well be fast for other clients, such as Libtool. One way to
+# do this is to expand $@ only once in _m4_shiftn (otherwise, for long
+# lists, the expansion of m4_if takes twice as much memory as what the
+# list itself occupies, only to throw away the unused branch). The end
+# result is strictly equivalent to
+# m4_if([$1], 1, [m4_shift(,m4_shift(m4_shift($@)))],
+# [_m4_shiftn(m4_decr([$1]), m4_shift(m4_shift($@)))])
+# but with the final `m4_shift(m4_shift($@)))' shared between the two
+# paths. The first leg uses a no-op m4_shift(,$@) to balance out the ().
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_shiftn],
+[m4_assert(0 < $1 && $1 < $#)_$0($@)])
+
+m4_define([_m4_shiftn],
+[m4_if([$1], 1, [m4_shift(],
+ [$0(m4_decr([$1])]), m4_shift(m4_shift($@)))])
+
+# m4_shift2(...)
+# m4_shift3(...)
+# --------------
+# Returns ... shifted twice, and three times. Faster than m4_shiftn.
+m4_define([m4_shift2], [m4_shift(m4_shift($@))])
+m4_define([m4_shift3], [m4_shift(m4_shift(m4_shift($@)))])
+
+# _m4_shift2(...)
+# _m4_shift3(...)
+# ---------------
+# Like m4_shift2 or m4_shift3, except include a leading comma unless shifting
+# consumes all arguments. Why? Because in recursion, it is nice to
+# distinguish between 1 element left and 0 elements left, based on how many
+# arguments this shift expands to.
+m4_define([_m4_shift2],
+[m4_if([$#], [2], [],
+ [, m4_shift(m4_shift($@))])])
+m4_define([_m4_shift3],
+[m4_if([$#], [3], [],
+ [, m4_shift(m4_shift(m4_shift($@)))])])
+
+
+# m4_undefine(NAME)
+# -----------------
+# Like the original, except guarantee a warning when using something which is
+# undefined (unlike M4 1.4.x).
+#
+# This macro is called frequently, so minimize the amount of additional
+# expansions by skipping m4_ifndef. Better yet, if __m4_version__ exists,
+# (added in M4 1.6), then let m4 do the job for us (see m4_init).
+m4_define([m4_undefine],
+[m4_if([$#], [0], [[$0]],
+ [$#], [1], [m4_ifdef([$1], [_m4_undefine([$1])],
+ [m4_fatal([$0: undefined macro: $1])])],
+ [m4_map_args([$0], $@)])])
+
+# _m4_wrap(PRE, POST)
+# -------------------
+# Helper macro for m4_wrap and m4_wrap_lifo. Allows nested calls to
+# m4_wrap within wrapped text. Use _m4_defn and _m4_popdef for speed.
+m4_define([_m4_wrap],
+[m4_ifdef([$0_text],
+ [m4_define([$0_text], [$1]_m4_defn([$0_text])[$2])],
+ [m4_builtin([m4wrap], [m4_unquote(
+ _m4_defn([$0_text])_m4_popdef([$0_text]))])m4_define([$0_text], [$1$2])])])
+
+# m4_wrap(TEXT)
+# -------------
+# Append TEXT to the list of hooks to be executed at the end of input.
+# Whereas the order of the original may be LIFO in the underlying m4,
+# this version is always FIFO.
+m4_define([m4_wrap],
+[_m4_wrap([], [$1[]])])
+
+# m4_wrap_lifo(TEXT)
+# ------------------
+# Prepend TEXT to the list of hooks to be executed at the end of input.
+# Whereas the order of m4_wrap may be FIFO in the underlying m4, this
+# version is always LIFO.
+m4_define([m4_wrap_lifo],
+[_m4_wrap([$1[]])])
+
+## ------------------------- ##
+## 7. Quoting manipulation. ##
+## ------------------------- ##
+
+
+# m4_apply(MACRO, LIST)
+# ---------------------
+# Invoke MACRO, with arguments provided from the quoted list of
+# comma-separated quoted arguments. If LIST is empty, invoke MACRO
+# without arguments. The expansion will not be concatenated with
+# subsequent text.
+m4_define([m4_apply],
+[m4_if([$2], [], [$1], [$1($2)])[]])
+
+# _m4_apply(MACRO, LIST)
+# ----------------------
+# Like m4_apply, except do nothing if LIST is empty.
+m4_define([_m4_apply],
+[m4_if([$2], [], [], [$1($2)[]])])
+
+
+# m4_count(ARGS)
+# --------------
+# Return a count of how many ARGS are present.
+m4_define([m4_count], [$#])
+
+
+# m4_curry(MACRO, ARG...)
+# -----------------------
+# Perform argument currying. The expansion of this macro is another
+# macro that takes exactly one argument, appends it to the end of the
+# original ARG list, then invokes MACRO. For example:
+# m4_curry([m4_curry], [m4_reverse], [1])([2])([3]) => 3, 2, 1
+# Not quite as practical as m4_incr, but you could also do:
+# m4_define([add], [m4_eval(([$1]) + ([$2]))])
+# m4_define([add_one], [m4_curry([add], [1])])
+# add_one()([2]) => 3
+m4_define([m4_curry], [$1(m4_shift($@,)_$0])
+m4_define([_m4_curry], [[$1])])
+
+
+# m4_do(STRING, ...)
+# ------------------
+# This macro invokes all its arguments (in sequence, of course). It is
+# useful for making your macros more structured and readable by dropping
+# unnecessary dnl's and have the macros indented properly. No concatenation
+# occurs after a STRING; use m4_unquote(m4_join(,STRING)) for that.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_do],
+[m4_if([$#], 0, [],
+ [$#], 1, [$1[]],
+ [$1[]$0(m4_shift($@))])])
+
+
+# m4_dquote(ARGS)
+# ---------------
+# Return ARGS as a quoted list of quoted arguments.
+m4_define([m4_dquote], [[$@]])
+
+
+# m4_dquote_elt(ARGS)
+# -------------------
+# Return ARGS as an unquoted list of double-quoted arguments.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_dquote_elt],
+[m4_if([$#], [0], [],
+ [$#], [1], [[[$1]]],
+ [[[$1]],$0(m4_shift($@))])])
+
+
+# m4_echo(ARGS)
+# -------------
+# Return the ARGS, with the same level of quoting. Whitespace after
+# unquoted commas are consumed.
+m4_define([m4_echo], [$@])
+
+
+# m4_expand(ARG)
+# _m4_expand(ARG)
+# ---------------
+# Return the expansion of ARG as a single string. Unlike
+# m4_quote($1), this preserves whitespace following single-quoted
+# commas that appear within ARG. It also deals with shell case
+# statements.
+#
+# m4_define([active], [ACT, IVE])
+# m4_define([active2], [[ACT, IVE]])
+# m4_quote(active, active2)
+# => ACT,IVE,ACT, IVE
+# m4_expand([active, active2])
+# => ACT, IVE, ACT, IVE
+#
+# Unfortunately, due to limitations in m4, ARG must expand to
+# something with balanced quotes (use quadrigraphs to get around
+# this), and should not contain the unlikely delimiters -=<{( or
+# )}>=-. It is possible to have unbalanced quoted `(' or `)', as well
+# as unbalanced unquoted `)'. m4_expand can handle unterminated
+# comments or dnl on the final line, at the expense of speed; it also
+# aids in detecting attempts to incorrectly change the current
+# diversion inside ARG. Meanwhile, _m4_expand is faster but must be
+# given a terminated expansion, and has no safety checks for
+# mis-diverted text.
+#
+# Exploit that extra unquoted () will group unquoted commas and the
+# following whitespace. m4_bpatsubst can't handle newlines inside $1,
+# and m4_substr strips quoting. So we (ab)use m4_changequote, using
+# temporary quotes to remove the delimiters that conveniently included
+# the unquoted () that were added prior to the changequote.
+#
+# Thanks to shell case statements, too many people are prone to pass
+# underquoted `)', so we try to detect that by passing a marker as a
+# fourth argument; if the marker is not present, then we assume that
+# we encountered an early `)', and re-expand the first argument, but
+# this time with one more `(' in the second argument and in the
+# open-quote delimiter. We must also ignore the slop from the
+# previous try. The final macro is thus half line-noise, half art.
+m4_define([m4_expand],
+[m4_pushdef([m4_divert], _m4_defn([_m4_divert_unsafe]))]dnl
+[m4_pushdef([m4_divert_push], _m4_defn([_m4_divert_unsafe]))]dnl
+[m4_chomp(_$0([$1
+]))_m4_popdef([m4_divert], [m4_divert_push])])
+
+m4_define([_m4_expand], [$0_([$1], [(], -=<{($1)}>=-, [}>=-])])
+
+m4_define([_m4_expand_],
+[m4_if([$4], [}>=-],
+ [m4_changequote([-=<{$2], [)}>=-])$3m4_changequote([, ])],
+ [$0([$1], [($2], -=<{($2$1)}>=-, [}>=-])m4_ignore$2])])
+
+
+# m4_ignore(ARGS)
+# ---------------
+# Expands to nothing. Useful for conditionally ignoring an arbitrary
+# number of arguments (see _m4_list_cmp for an example).
+m4_define([m4_ignore])
+
+
+# m4_make_list(ARGS)
+# ------------------
+# Similar to m4_dquote, this creates a quoted list of quoted ARGS. This
+# version is less efficient than m4_dquote, but separates each argument
+# with a comma and newline, rather than just comma, for readability.
+# When developing an m4sugar algorithm, you could temporarily use
+# m4_pushdef([m4_dquote],m4_defn([m4_make_list]))
+# around your code to make debugging easier.
+m4_define([m4_make_list], [m4_join([,
+], m4_dquote_elt($@))])
+
+
+# m4_noquote(STRING)
+# ------------------
+# Return the result of ignoring all quotes in STRING and invoking the
+# macros it contains. Among other things, this is useful for enabling
+# macro invocations inside strings with [] blocks (for instance regexps
+# and help-strings). On the other hand, since all quotes are disabled,
+# any macro expanded during this time that relies on nested [] quoting
+# will likely crash and burn. This macro is seldom useful; consider
+# m4_unquote or m4_expand instead.
+m4_define([m4_noquote],
+[m4_changequote([-=<{(],[)}>=-])$1-=<{()}>=-m4_changequote([,])])
+
+
+# m4_quote(ARGS)
+# --------------
+# Return ARGS as a single argument. Any whitespace after unquoted commas
+# is stripped. There is always output, even when there were no arguments.
+#
+# It is important to realize the difference between `m4_quote(exp)' and
+# `[exp]': in the first case you obtain the quoted *result* of the
+# expansion of EXP, while in the latter you just obtain the string
+# `exp'.
+m4_define([m4_quote], [[$*]])
+
+
+# _m4_quote(ARGS)
+# ---------------
+# Like m4_quote, except that when there are no arguments, there is no
+# output. For conditional scenarios (such as passing _m4_quote as the
+# macro name in m4_mapall), this feature can be used to distinguish between
+# one argument of the empty string vs. no arguments. However, in the
+# normal case with arguments present, this is less efficient than m4_quote.
+m4_define([_m4_quote],
+[m4_if([$#], [0], [], [[$*]])])
+
+
+# m4_reverse(ARGS)
+# ----------------
+# Output ARGS in reverse order.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_reverse],
+[m4_if([$#], [0], [], [$#], [1], [[$1]],
+ [$0(m4_shift($@)), [$1]])])
+
+
+# m4_unquote(ARGS)
+# ----------------
+# Remove one layer of quotes from each ARG, performing one level of
+# expansion. For one argument, m4_unquote([arg]) is more efficient than
+# m4_do([arg]), but for multiple arguments, the difference is that
+# m4_unquote separates arguments with commas while m4_do concatenates.
+# Follow this macro with [] if concatenation with subsequent text is
+# undesired.
+m4_define([m4_unquote], [$*])
+
+
+## -------------------------- ##
+## 8. Implementing m4 loops. ##
+## -------------------------- ##
+
+
+# m4_for(VARIABLE, FIRST, LAST, [STEP = +/-1], EXPRESSION)
+# --------------------------------------------------------
+# Expand EXPRESSION defining VARIABLE to FROM, FROM + 1, ..., TO with
+# increments of STEP. Both limits are included, and bounds are
+# checked for consistency. The algorithm is robust to indirect
+# VARIABLE names. Changing VARIABLE inside EXPRESSION will not impact
+# the number of iterations.
+#
+# Uses _m4_defn for speed, and avoid dnl in the macro body. Factor
+# the _m4_for call so that EXPRESSION is only parsed once.
+m4_define([m4_for],
+[m4_pushdef([$1], m4_eval([$2]))]dnl
+[m4_cond([m4_eval(([$3]) > ([$2]))], 1,
+ [m4_pushdef([_m4_step], m4_eval(m4_default_quoted([$4],
+ 1)))m4_assert(_m4_step > 0)_$0(_m4_defn([$1]),
+ m4_eval((([$3]) - ([$2])) / _m4_step * _m4_step + ([$2])), _m4_step,],
+ [m4_eval(([$3]) < ([$2]))], 1,
+ [m4_pushdef([_m4_step], m4_eval(m4_default_quoted([$4],
+ -1)))m4_assert(_m4_step < 0)_$0(_m4_defn([$1]),
+ m4_eval((([$2]) - ([$3])) / -(_m4_step) * _m4_step + ([$2])), _m4_step,],
+ [m4_pushdef([_m4_step])_$0(_m4_defn([$1]), _m4_defn([$1]), 0,])]dnl
+[[m4_define([$1],], [)$5])m4_popdef([_m4_step], [$1])])
+
+# _m4_for(COUNT, LAST, STEP, PRE, POST)
+# -------------------------------------
+# Core of the loop, no consistency checks, all arguments are plain
+# numbers. Expand PRE[COUNT]POST, then alter COUNT by STEP and
+# iterate if COUNT is not LAST.
+m4_define([_m4_for],
+[$4[$1]$5[]m4_if([$1], [$2], [],
+ [$0(m4_eval([$1 + $3]), [$2], [$3], [$4], [$5])])])
+
+
+# Implementing `foreach' loops in m4 is much more tricky than it may
+# seem. For example, the old M4 1.4.4 manual had an incorrect example,
+# which looked like this (when translated to m4sugar):
+#
+# | # foreach(VAR, (LIST), STMT)
+# | m4_define([foreach],
+# | [m4_pushdef([$1])_foreach([$1], [$2], [$3])m4_popdef([$1])])
+# | m4_define([_arg1], [$1])
+# | m4_define([_foreach],
+# | [m4_if([$2], [()], ,
+# | [m4_define([$1], _arg1$2)$3[]_foreach([$1], (m4_shift$2), [$3])])])
+#
+# But then if you run
+#
+# | m4_define(a, 1)
+# | m4_define(b, 2)
+# | m4_define(c, 3)
+# | foreach([f], [([a], [(b], [c)])], [echo f
+# | ])
+#
+# it gives
+#
+# => echo 1
+# => echo (2,3)
+#
+# which is not what is expected.
+#
+# Of course the problem is that many quotes are missing. So you add
+# plenty of quotes at random places, until you reach the expected
+# result. Alternatively, if you are a quoting wizard, you directly
+# reach the following implementation (but if you really did, then
+# apply to the maintenance of m4sugar!).
+#
+# | # foreach(VAR, (LIST), STMT)
+# | m4_define([foreach], [m4_pushdef([$1])_foreach($@)m4_popdef([$1])])
+# | m4_define([_arg1], [[$1]])
+# | m4_define([_foreach],
+# | [m4_if($2, [()], ,
+# | [m4_define([$1], [_arg1$2])$3[]_foreach([$1], [(m4_shift$2)], [$3])])])
+#
+# which this time answers
+#
+# => echo a
+# => echo (b
+# => echo c)
+#
+# Bingo!
+#
+# Well, not quite.
+#
+# With a better look, you realize that the parens are more a pain than
+# a help: since anyway you need to quote properly the list, you end up
+# with always using an outermost pair of parens and an outermost pair
+# of quotes. Rejecting the parens both eases the implementation, and
+# simplifies the use:
+#
+# | # foreach(VAR, (LIST), STMT)
+# | m4_define([foreach], [m4_pushdef([$1])_foreach($@)m4_popdef([$1])])
+# | m4_define([_arg1], [$1])
+# | m4_define([_foreach],
+# | [m4_if($2, [], ,
+# | [m4_define([$1], [_arg1($2)])$3[]_foreach([$1], [m4_shift($2)], [$3])])])
+#
+#
+# Now, just replace the `$2' with `m4_quote($2)' in the outer `m4_if'
+# to improve robustness, and you come up with a nice implementation
+# that doesn't require extra parentheses in the user's LIST.
+#
+# But wait - now the algorithm is quadratic, because every recursion of
+# the algorithm keeps the entire LIST and merely adds another m4_shift to
+# the quoted text. If the user has a lot of elements in LIST, you can
+# bring the system to its knees with the memory m4 then requires, or trip
+# the m4 --nesting-limit recursion factor. The only way to avoid
+# quadratic growth is ensure m4_shift is expanded prior to the recursion.
+# Hence the design below.
+#
+# The M4 manual now includes a chapter devoted to this issue, with
+# the lessons learned from m4sugar. And still, this design is only
+# optimal for M4 1.6; see foreach.m4 for yet more comments on why
+# M4 1.4.x uses yet another implementation.
+
+
+# m4_foreach(VARIABLE, LIST, EXPRESSION)
+# --------------------------------------
+#
+# Expand EXPRESSION assigning each value of the LIST to VARIABLE.
+# LIST should have the form `item_1, item_2, ..., item_n', i.e. the
+# whole list must *quoted*. Quote members too if you don't want them
+# to be expanded.
+#
+# This macro is robust to active symbols:
+# | m4_define(active, [ACT, IVE])
+# | m4_foreach(Var, [active, active], [-Var-])
+# => -ACT--IVE--ACT--IVE-
+#
+# | m4_foreach(Var, [[active], [active]], [-Var-])
+# => -ACT, IVE--ACT, IVE-
+#
+# | m4_foreach(Var, [[[active]], [[active]]], [-Var-])
+# => -active--active-
+#
+# This macro is called frequently, so avoid extra expansions such as
+# m4_ifval and dnl. Also, since $2 might be quite large, try to use it
+# as little as possible in _m4_foreach; each extra use requires that much
+# more memory for expansion. So, rather than directly compare $2 against
+# [] and use m4_car/m4_cdr for recursion, we instead unbox the list (which
+# requires swapping the argument order in the helper), insert an ignored
+# third argument, and use m4_shift3 to detect when recursion is complete,
+# at which point this looks very much like m4_map_args.
+m4_define([m4_foreach],
+[m4_if([$2], [], [],
+ [m4_pushdef([$1])_$0([m4_define([$1],], [)$3], [],
+ $2)m4_popdef([$1])])])
+
+# _m4_foreach(PRE, POST, IGNORED, ARG...)
+# ---------------------------------------
+# Form the common basis of the m4_foreach and m4_map macros. For each
+# ARG, expand PRE[ARG]POST[]. The IGNORED argument makes recursion
+# easier, and must be supplied rather than implicit.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([_m4_foreach],
+[m4_if([$#], [3], [],
+ [$1[$4]$2[]$0([$1], [$2], m4_shift3($@))])])
+
+
+# m4_foreach_w(VARIABLE, LIST, EXPRESSION)
+# ----------------------------------------
+# Like m4_foreach, but the list is whitespace separated. Depending on
+# EXPRESSION, it may be more efficient to use m4_map_args_w.
+#
+# This macro is robust to active symbols:
+# m4_foreach_w([Var], [ active
+# b act\
+# ive ], [-Var-])end
+# => -active--b--active-end
+#
+# This used to use a slower implementation based on m4_foreach:
+# m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])
+m4_define([m4_foreach_w],
+[m4_pushdef([$1])m4_map_args_w([$2],
+ [m4_define([$1],], [)$3])m4_popdef([$1])])
+
+
+# m4_map(MACRO, LIST)
+# m4_mapall(MACRO, LIST)
+# ----------------------
+# Invoke MACRO($1), MACRO($2) etc. where $1, $2... are the elements of
+# LIST. $1, $2... must in turn be lists, appropriate for m4_apply.
+# If LIST contains an empty sublist, m4_map skips the expansion of
+# MACRO, while m4_mapall expands MACRO with no arguments.
+#
+# Since LIST may be quite large, we want to minimize how often it
+# appears in the expansion. Rather than use m4_car/m4_cdr iteration,
+# we unbox the list, and use _m4_foreach for iteration. For m4_map,
+# an empty list behaves like an empty sublist and gets ignored; for
+# m4_mapall, we must special-case the empty list.
+m4_define([m4_map],
+[_m4_foreach([_m4_apply([$1],], [)], [], $2)])
+
+m4_define([m4_mapall],
+[m4_if([$2], [], [],
+ [_m4_foreach([m4_apply([$1],], [)], [], $2)])])
+
+
+# m4_map_sep(MACRO, [SEPARATOR], LIST)
+# m4_mapall_sep(MACRO, [SEPARATOR], LIST)
+# ---------------------------------------
+# Invoke MACRO($1), SEPARATOR, MACRO($2), ..., MACRO($N) where $1,
+# $2... $N are the elements of LIST, and are in turn lists appropriate
+# for m4_apply. SEPARATOR is expanded, in order to allow the creation
+# of a list of arguments by using a single-quoted comma as the
+# separator. For each empty sublist, m4_map_sep skips the expansion
+# of MACRO and SEPARATOR, while m4_mapall_sep expands MACRO with no
+# arguments.
+#
+# For m4_mapall_sep, merely expand the first iteration without the
+# separator, then include separator as part of subsequent recursion;
+# but avoid extra expansion of LIST's side-effects via a helper macro.
+# For m4_map_sep, things are trickier - we don't know if the first
+# list element is an empty sublist, so we must define a self-modifying
+# helper macro and use that as the separator instead.
+m4_define([m4_map_sep],
+[m4_pushdef([m4_Sep], [m4_define([m4_Sep], _m4_defn([m4_unquote]))])]dnl
+[_m4_foreach([_m4_apply([m4_Sep([$2])[]$1],], [)], [], $3)m4_popdef([m4_Sep])])
+
+m4_define([m4_mapall_sep],
+[m4_if([$3], [], [], [_$0([$1], [$2], $3)])])
+
+m4_define([_m4_mapall_sep],
+[m4_apply([$1], [$3])_m4_foreach([m4_apply([$2[]$1],], [)], m4_shift2($@))])
+
+# m4_map_args(EXPRESSION, ARG...)
+# -------------------------------
+# Expand EXPRESSION([ARG]) for each argument. More efficient than
+# m4_foreach([var], [ARG...], [EXPRESSION(m4_defn([var]))])
+# Shorthand for m4_map_args_sep([EXPRESSION(], [)], [], ARG...).
+m4_define([m4_map_args],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+ [$#], [1], [],
+ [$#], [2], [$1([$2])[]],
+ [_m4_foreach([$1(], [)], $@)])])
+
+
+# m4_map_args_pair(EXPRESSION, [END-EXPR = EXPRESSION], ARG...)
+# -------------------------------------------------------------
+# Perform a pairwise grouping of consecutive ARGs, by expanding
+# EXPRESSION([ARG1], [ARG2]). If there are an odd number of ARGs, the
+# final argument is expanded with END-EXPR([ARGn]).
+#
+# For example:
+# m4_define([show], [($*)m4_newline])dnl
+# m4_map_args_pair([show], [], [a], [b], [c], [d], [e])dnl
+# => (a,b)
+# => (c,d)
+# => (e)
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_map_args_pair],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+ [$#], [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [$#], [2], [],
+ [$#], [3], [m4_default([$2], [$1])([$3])[]],
+ [$#], [4], [$1([$3], [$4])[]],
+ [$1([$3], [$4])[]$0([$1], [$2], m4_shift(m4_shift3($@)))])])
+
+
+# m4_map_args_sep([PRE], [POST], [SEP], ARG...)
+# ---------------------------------------------
+# Expand PRE[ARG]POST for each argument, with SEP between arguments.
+m4_define([m4_map_args_sep],
+[m4_if([$#], [0], [m4_fatal([$0: too few arguments: $#])],
+ [$#], [1], [],
+ [$#], [2], [],
+ [$#], [3], [],
+ [$#], [4], [$1[$4]$2[]],
+ [$1[$4]$2[]_m4_foreach([$3[]$1], [$2], m4_shift3($@))])])
+
+
+# m4_map_args_w(STRING, [PRE], [POST], [SEP])
+# -------------------------------------------
+# Perform the expansion of PRE[word]POST[] for each word in STRING
+# separated by whitespace. More efficient than:
+# m4_foreach_w([var], [STRING], [PRE[]m4_defn([var])POST])
+# Additionally, expand SEP between words.
+#
+# As long as we have to use m4_bpatsubst to split the string, we might
+# as well make it also apply PRE and POST; this avoids iteration
+# altogether. But we must be careful of any \ in PRE or POST.
+# _m4_strip returns a quoted string, but that's okay, since it also
+# supplies an empty leading and trailing argument due to our
+# intentional whitespace around STRING. We use m4_substr to strip the
+# empty elements and remove the extra layer of quoting.
+m4_define([m4_map_args_w],
+[_$0(_m4_split([ ]m4_flatten([$1])[ ], [[ ]+],
+ m4_if(m4_index([$2$3$4], [\]), [-1], [[$3[]$4[]$2]],
+ [m4_bpatsubst([[$3[]$4[]$2]], [\\], [\\\\])])),
+ m4_len([[]$3[]$4]), m4_len([$4[]$2[]]))])
+
+m4_define([_m4_map_args_w],
+[m4_substr([$1], [$2], m4_eval(m4_len([$1]) - [$2] - [$3]))])
+
+
+# m4_stack_foreach(MACRO, FUNC)
+# m4_stack_foreach_lifo(MACRO, FUNC)
+# ----------------------------------
+# Pass each stacked definition of MACRO to the one-argument macro FUNC.
+# m4_stack_foreach proceeds in FIFO order, while m4_stack_foreach_lifo
+# processes the topmost definitions first. In addition, FUNC should
+# not push or pop definitions of MACRO, and should not expect anything about
+# the active definition of MACRO (it will not be the topmost, and may not
+# be the one passed to FUNC either).
+#
+# Some macros simply can't be examined with this method: namely,
+# anything involved in the implementation of _m4_stack_reverse.
+m4_define([m4_stack_foreach],
+[_m4_stack_reverse([$1], [m4_tmp-$1])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1], [$2(_m4_defn([m4_tmp-$1]))])])
+
+m4_define([m4_stack_foreach_lifo],
+[_m4_stack_reverse([$1], [m4_tmp-$1], [$2(_m4_defn([m4_tmp-$1]))])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1])])
+
+# m4_stack_foreach_sep(MACRO, [PRE], [POST], [SEP])
+# m4_stack_foreach_sep_lifo(MACRO, [PRE], [POST], [SEP])
+# ------------------------------------------------------
+# Similar to m4_stack_foreach and m4_stack_foreach_lifo, in that every
+# definition of a pushdef stack will be visited. But rather than
+# passing the definition as a single argument to a macro, this variant
+# expands the concatenation of PRE[]definition[]POST, and expands SEP
+# between consecutive expansions. Note that m4_stack_foreach([a], [b])
+# is equivalent to m4_stack_foreach_sep([a], [b(], [)]).
+m4_define([m4_stack_foreach_sep],
+[_m4_stack_reverse([$1], [m4_tmp-$1])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1], [$2[]_m4_defn([m4_tmp-$1])$3], [$4[]])])
+
+m4_define([m4_stack_foreach_sep_lifo],
+[_m4_stack_reverse([$1], [m4_tmp-$1], [$2[]_m4_defn([m4_tmp-$1])$3], [$4[]])]dnl
+[_m4_stack_reverse([m4_tmp-$1], [$1])])
+
+
+# _m4_stack_reverse(OLD, NEW, [ACTION], [SEP])
+# --------------------------------------------
+# A recursive worker for pushdef stack manipulation. Destructively
+# copy the OLD stack into the NEW, and expanding ACTION for each
+# iteration. After the first iteration, SEP is promoted to the front
+# of ACTION (note that SEP should include a trailing [] if it is to
+# avoid interfering with ACTION). The current definition is examined
+# after the NEW has been pushed but before OLD has been popped; this
+# order is important, as ACTION is permitted to operate on either
+# _m4_defn([OLD]) or _m4_defn([NEW]). Since the operation is
+# destructive, this macro is generally used twice, with a temporary
+# macro name holding the swapped copy.
+m4_define([_m4_stack_reverse],
+[m4_ifdef([$1], [m4_pushdef([$2],
+ _m4_defn([$1]))$3[]_m4_popdef([$1])$0([$1], [$2], [$4$3])])])
+
+
+
+## --------------------------- ##
+## 9. More diversion support. ##
+## --------------------------- ##
+
+
+# m4_cleardivert(DIVERSION-NAME...)
+# ---------------------------------
+# Discard any text in DIVERSION-NAME.
+#
+# This works even inside m4_expand.
+m4_define([m4_cleardivert],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+ [_m4_divert_raw([-1])m4_undivert($@)_m4_divert_raw(
+ _m4_divert(_m4_defn([_m4_divert_diversion]), [-]))])])
+
+
+# _m4_divert(DIVERSION-NAME or NUMBER, [NOWARN])
+# ----------------------------------------------
+# If DIVERSION-NAME is the name of a diversion, return its number,
+# otherwise if it is a NUMBER return it. Issue a warning about
+# the use of a number instead of a name, unless NOWARN is provided.
+m4_define([_m4_divert],
+[m4_ifdef([_m4_divert($1)],
+ [m4_indir([_m4_divert($1)])],
+ [m4_if([$2], [], [m4_warn([syntax],
+ [prefer named diversions])])$1])])
+
+# KILL is only used to suppress output.
+m4_define([_m4_divert(KILL)], -1)
+
+# The empty diversion name is a synonym for 0.
+m4_define([_m4_divert()], 0)
+
+
+# m4_divert_stack
+# ---------------
+# Print the diversion stack, if it's nonempty. The caller is
+# responsible for any leading or trailing newline.
+m4_define([m4_divert_stack],
+[m4_stack_foreach_sep_lifo([_m4_divert_stack], [], [], [
+])])
+
+
+# m4_divert_stack_push(MACRO-NAME, DIVERSION-NAME)
+# ------------------------------------------------
+# Form an entry of the diversion stack from caller MACRO-NAME and
+# entering DIVERSION-NAME and push it.
+m4_define([m4_divert_stack_push],
+[m4_pushdef([_m4_divert_stack], m4_location[: $1: $2])])
+
+
+# m4_divert(DIVERSION-NAME)
+# -------------------------
+# Change the diversion stream to DIVERSION-NAME.
+m4_define([m4_divert],
+[m4_popdef([_m4_divert_stack])]dnl
+[m4_define([_m4_divert_diversion], [$1])]dnl
+[m4_divert_stack_push([$0], [$1])]dnl
+[_m4_divert_raw(_m4_divert([$1]))])
+
+
+# m4_divert_push(DIVERSION-NAME, [NOWARN])
+# ----------------------------------------
+# Change the diversion stream to DIVERSION-NAME, while stacking old values.
+# For internal use only: if NOWARN is not empty, DIVERSION-NAME can be a
+# number instead of a name.
+m4_define([m4_divert_push],
+[m4_divert_stack_push([$0], [$1])]dnl
+[m4_pushdef([_m4_divert_diversion], [$1])]dnl
+[_m4_divert_raw(_m4_divert([$1], [$2]))])
+
+
+# m4_divert_pop([DIVERSION-NAME])
+# -------------------------------
+# Change the diversion stream to its previous value, unstacking it.
+# If specified, verify we left DIVERSION-NAME.
+# When we pop the last value from the stack, we divert to -1.
+m4_define([m4_divert_pop],
+[m4_if([$1], [], [],
+ [$1], _m4_defn([_m4_divert_diversion]), [],
+ [m4_fatal([$0($1): diversion mismatch:
+]m4_divert_stack)])]dnl
+[_m4_popdef([_m4_divert_stack], [_m4_divert_diversion])]dnl
+[m4_ifdef([_m4_divert_diversion], [],
+ [m4_fatal([too many m4_divert_pop])])]dnl
+[_m4_divert_raw(_m4_divert(_m4_defn([_m4_divert_diversion]), [-]))])
+
+
+# m4_divert_text(DIVERSION-NAME, CONTENT)
+# ---------------------------------------
+# Output CONTENT into DIVERSION-NAME (which may be a number actually).
+# An end of line is appended for free to CONTENT.
+m4_define([m4_divert_text],
+[m4_divert_push([$1])$2
+m4_divert_pop([$1])])
+
+
+# m4_divert_once(DIVERSION-NAME, CONTENT)
+# ---------------------------------------
+# Output CONTENT into DIVERSION-NAME once, if not already there.
+# An end of line is appended for free to CONTENT.
+m4_define([m4_divert_once],
+[m4_expand_once([m4_divert_text([$1], [$2])])])
+
+
+# _m4_divert_unsafe(DIVERSION-NAME)
+# ---------------------------------
+# Issue a warning that the attempt to change the current diversion to
+# DIVERSION-NAME is unsafe, because this macro is being expanded
+# during argument collection of m4_expand.
+m4_define([_m4_divert_unsafe],
+[m4_fatal([$0: cannot change diversion to `$1' inside m4_expand])])
+
+
+# m4_undivert(DIVERSION-NAME...)
+# ------------------------------
+# Undivert DIVERSION-NAME. Unlike the M4 version, this requires at
+# least one DIVERSION-NAME; also, due to support for named diversions,
+# this should not be used to undivert files.
+m4_define([m4_undivert],
+[m4_if([$#], [0], [m4_fatal([$0: missing argument])],
+ [$#], [1], [_m4_undivert(_m4_divert([$1]))],
+ [m4_map_args([$0], $@)])])
+
+
+## --------------------------------------------- ##
+## 10. Defining macros with bells and whistles. ##
+## --------------------------------------------- ##
+
+# `m4_defun' is basically `m4_define' but it equips the macro with the
+# needed machinery for `m4_require'. A macro must be m4_defun'd if
+# either it is m4_require'd, or it m4_require's.
+#
+# Two things deserve attention and are detailed below:
+# 1. Implementation of m4_require
+# 2. Keeping track of the expansion stack
+#
+# 1. Implementation of m4_require
+# ===============================
+#
+# Of course m4_defun calls m4_provide, so that a macro which has
+# been expanded is not expanded again when m4_require'd, but the
+# difficult part is the proper expansion of macros when they are
+# m4_require'd.
+#
+# The implementation is based on three ideas, (i) using diversions to
+# prepare the expansion of the macro and its dependencies (by Franc,ois
+# Pinard), (ii) expand the most recently m4_require'd macros _after_
+# the previous macros (by Axel Thimm), and (iii) track instances of
+# provide before require (by Eric Blake).
+#
+#
+# The first idea: why use diversions?
+# -----------------------------------
+#
+# When a macro requires another, the other macro is expanded in new
+# diversion, GROW. When the outer macro is fully expanded, we first
+# undivert the most nested diversions (GROW - 1...), and finally
+# undivert GROW. To understand why we need several diversions,
+# consider the following example:
+#
+# | m4_defun([TEST1], [Test...m4_require([TEST2])1])
+# | m4_defun([TEST2], [Test...m4_require([TEST3])2])
+# | m4_defun([TEST3], [Test...3])
+#
+# Because m4_require is not required to be first in the outer macros, we
+# must keep the expansions of the various levels of m4_require separated.
+# Right before executing the epilogue of TEST1, we have:
+#
+# GROW - 2: Test...3
+# GROW - 1: Test...2
+# GROW: Test...1
+# BODY:
+#
+# Finally the epilogue of TEST1 undiverts GROW - 2, GROW - 1, and
+# GROW into the regular flow, BODY.
+#
+# GROW - 2:
+# GROW - 1:
+# GROW:
+# BODY: Test...3; Test...2; Test...1
+#
+# (The semicolons are here for clarification, but of course are not
+# emitted.) This is what Autoconf 2.0 (I think) to 2.13 (I'm sure)
+# implement.
+#
+#
+# The second idea: first required first out
+# -----------------------------------------
+#
+# The natural implementation of the idea above is buggy and produces
+# very surprising results in some situations. Let's consider the
+# following example to explain the bug:
+#
+# | m4_defun([TEST1], [m4_require([TEST2a])m4_require([TEST2b])])
+# | m4_defun([TEST2a], [])
+# | m4_defun([TEST2b], [m4_require([TEST3])])
+# | m4_defun([TEST3], [m4_require([TEST2a])])
+# |
+# | AC_INIT
+# | TEST1
+#
+# The dependencies between the macros are:
+#
+# 3 --- 2b
+# / \ is m4_require'd by
+# / \ left -------------------- right
+# 2a ------------ 1
+#
+# If you strictly apply the rules given in the previous section you get:
+#
+# GROW - 2: TEST3
+# GROW - 1: TEST2a; TEST2b
+# GROW: TEST1
+# BODY:
+#
+# (TEST2a, although required by TEST3 is not expanded in GROW - 3
+# because is has already been expanded before in GROW - 1, so it has
+# been AC_PROVIDE'd, so it is not expanded again) so when you undivert
+# the stack of diversions, you get:
+#
+# GROW - 2:
+# GROW - 1:
+# GROW:
+# BODY: TEST3; TEST2a; TEST2b; TEST1
+#
+# i.e., TEST2a is expanded after TEST3 although the latter required the
+# former.
+#
+# Starting from 2.50, we use an implementation provided by Axel Thimm.
+# The idea is simple: the order in which macros are emitted must be the
+# same as the one in which macros are expanded. (The bug above can
+# indeed be described as: a macro has been m4_provide'd before its
+# dependent, but it is emitted after: the lack of correlation between
+# emission and expansion order is guilty).
+#
+# How to do that? You keep the stack of diversions to elaborate the
+# macros, but each time a macro is fully expanded, emit it immediately.
+#
+# In the example above, when TEST2a is expanded, but it's epilogue is
+# not run yet, you have:
+#
+# GROW - 2:
+# GROW - 1: TEST2a
+# GROW: Elaboration of TEST1
+# BODY:
+#
+# The epilogue of TEST2a emits it immediately:
+#
+# GROW - 2:
+# GROW - 1:
+# GROW: Elaboration of TEST1
+# BODY: TEST2a
+#
+# TEST2b then requires TEST3, so right before the epilogue of TEST3, you
+# have:
+#
+# GROW - 2: TEST3
+# GROW - 1: Elaboration of TEST2b
+# GROW: Elaboration of TEST1
+# BODY: TEST2a
+#
+# The epilogue of TEST3 emits it:
+#
+# GROW - 2:
+# GROW - 1: Elaboration of TEST2b
+# GROW: Elaboration of TEST1
+# BODY: TEST2a; TEST3
+#
+# TEST2b is now completely expanded, and emitted:
+#
+# GROW - 2:
+# GROW - 1:
+# GROW: Elaboration of TEST1
+# BODY: TEST2a; TEST3; TEST2b
+#
+# and finally, TEST1 is finished and emitted:
+#
+# GROW - 2:
+# GROW - 1:
+# GROW:
+# BODY: TEST2a; TEST3; TEST2b: TEST1
+#
+# The idea is simple, but the implementation is a bit involved. If
+# you are like me, you will want to see the actual functioning of this
+# implementation to be convinced. The next section gives the full
+# details.
+#
+#
+# The Axel Thimm implementation at work
+# -------------------------------------
+#
+# We consider the macros above, and this configure.ac:
+#
+# AC_INIT
+# TEST1
+#
+# You should keep the definitions of _m4_defun_pro, _m4_defun_epi, and
+# m4_require at hand to follow the steps.
+#
+# This implementation tries not to assume that the current diversion is
+# BODY, so as soon as a macro (m4_defun'd) is expanded, we first
+# record the current diversion under the name _m4_divert_dump (denoted
+# DUMP below for short). This introduces an important difference with
+# the previous versions of Autoconf: you cannot use m4_require if you
+# are not inside an m4_defun'd macro, and especially, you cannot
+# m4_require directly from the top level.
+#
+# We have not tried to simulate the old behavior (better yet, we
+# diagnose it), because it is too dangerous: a macro m4_require'd from
+# the top level is expanded before the body of `configure', i.e., before
+# any other test was run. I let you imagine the result of requiring
+# AC_STDC_HEADERS for instance, before AC_PROG_CC was actually run....
+#
+# After AC_INIT was run, the current diversion is BODY.
+# * AC_INIT was run
+# DUMP: undefined
+# diversion stack: BODY |-
+#
+# * TEST1 is expanded
+# The prologue of TEST1 sets _m4_divert_dump, which is the diversion
+# where the current elaboration will be dumped, to the current
+# diversion. It also m4_divert_push to GROW, where the full
+# expansion of TEST1 and its dependencies will be elaborated.
+# DUMP: BODY
+# BODY: empty
+# diversions: GROW, BODY |-
+#
+# * TEST1 requires TEST2a
+# _m4_require_call m4_divert_pushes another temporary diversion,
+# GROW - 1, and expands TEST2a in there.
+# DUMP: BODY
+# BODY: empty
+# GROW - 1: TEST2a
+# diversions: GROW - 1, GROW, BODY |-
+# Then the content of the temporary diversion is moved to DUMP and the
+# temporary diversion is popped.
+# DUMP: BODY
+# BODY: TEST2a
+# diversions: GROW, BODY |-
+#
+# * TEST1 requires TEST2b
+# Again, _m4_require_call pushes GROW - 1 and heads to expand TEST2b.
+# DUMP: BODY
+# BODY: TEST2a
+# diversions: GROW - 1, GROW, BODY |-
+#
+# * TEST2b requires TEST3
+# _m4_require_call pushes GROW - 2 and expands TEST3 here.
+# (TEST3 requires TEST2a, but TEST2a has already been m4_provide'd, so
+# nothing happens.)
+# DUMP: BODY
+# BODY: TEST2a
+# GROW - 2: TEST3
+# diversions: GROW - 2, GROW - 1, GROW, BODY |-
+# Then the diversion is appended to DUMP, and popped.
+# DUMP: BODY
+# BODY: TEST2a; TEST3
+# diversions: GROW - 1, GROW, BODY |-
+#
+# * TEST1 requires TEST2b (contd.)
+# The content of TEST2b is expanded...
+# DUMP: BODY
+# BODY: TEST2a; TEST3
+# GROW - 1: TEST2b,
+# diversions: GROW - 1, GROW, BODY |-
+# ... and moved to DUMP.
+# DUMP: BODY
+# BODY: TEST2a; TEST3; TEST2b
+# diversions: GROW, BODY |-
+#
+# * TEST1 is expanded: epilogue
+# TEST1's own content is in GROW...
+# DUMP: BODY
+# BODY: TEST2a; TEST3; TEST2b
+# GROW: TEST1
+# diversions: BODY |-
+# ... and it's epilogue moves it to DUMP and then undefines DUMP.
+# DUMP: undefined
+# BODY: TEST2a; TEST3; TEST2b; TEST1
+# diversions: BODY |-
+#
+#
+# The third idea: track macros provided before they were required
+# ---------------------------------------------------------------
+#
+# Using just the first two ideas, Autoconf 2.50 through 2.63 still had
+# a subtle bug for more than seven years. Let's consider the
+# following example to explain the bug:
+#
+# | m4_defun([TEST1], [1])
+# | m4_defun([TEST2], [2[]m4_require([TEST1])])
+# | m4_defun([TEST3], [3 TEST1 m4_require([TEST2])])
+# | TEST3
+#
+# After the prologue of TEST3, we are collecting text in GROW with the
+# intent of dumping it in BODY during the epilogue. Next, we
+# encounter the direct invocation of TEST1, which provides the macro
+# in place in GROW. From there, we encounter a requirement for TEST2,
+# which must be collected in a new diversion. While expanding TEST2,
+# we encounter a requirement for TEST1, but since it has already been
+# expanded, the Axel Thimm algorithm states that we can treat it as a
+# no-op. But that would lead to an end result of `2 3 1', meaning
+# that we have once again output a macro (TEST2) prior to its
+# requirements (TEST1).
+#
+# The problem can only occur if a single defun'd macro first provides,
+# then later indirectly requires, the same macro. Note that directly
+# expanding then requiring a macro is okay: because the dependency was
+# met, the require phase can be a no-op. For that matter, the outer
+# macro can even require two helpers, where the first helper expands
+# the macro, and the second helper indirectly requires the macro.
+# Out-of-order expansion is only present if the inner macro is
+# required by something that will be hoisted in front of where the
+# direct expansion occurred. In other words, we must be careful not
+# to warn on:
+#
+# | m4_defun([TEST4], [4])
+# | m4_defun([TEST5], [5 TEST4 m4_require([TEST4])])
+# | TEST5 => 5 4
+#
+# or even the more complex:
+#
+# | m4_defun([TEST6], [6])
+# | m4_defun([TEST7], [7 TEST6])
+# | m4_defun([TEST8], [8 m4_require([TEST6])])
+# | m4_defun([TEST9], [9 m4_require([TEST8])])
+# | m4_defun([TEST10], [10 m4_require([TEST7]) m4_require([TEST9])])
+# | TEST10 => 7 6 8 9 10
+#
+# So, to detect whether a require was direct or indirect, m4_defun and
+# m4_require track the name of the macro that caused a diversion to be
+# created (using the stack _m4_diverting, coupled with an O(1) lookup
+# _m4_diverting([NAME])), and m4_provide stores the name associated
+# with the diversion at which a macro was provided. A require call is
+# direct if it occurs within the same diversion where the macro was
+# provided, or if the diversion associated with the providing context
+# has been collected.
+#
+# The implementation of the warning involves tracking the set of
+# macros which have been provided since the start of the outermost
+# defun'd macro (the set is named _m4_provide). When starting an
+# outermost macro, the set is emptied; when a macro is provided, it is
+# added to the set; when require expands the body of a macro, it is
+# removed from the set; and when a macro is indirectly required, the
+# set is checked. If a macro is in the set, then it has been provided
+# before it was required, and we satisfy dependencies by expanding the
+# macro as if it had never been provided; in the example given above,
+# this means we now output `1 2 3 1'. Meanwhile, a warning is issued
+# to inform the user that her macros trigger the bug in older autoconf
+# versions, and that her output file now contains redundant contents
+# (and possibly new problems, if the repeated macro was not
+# idempotent). Meanwhile, macros defined by m4_defun_once instead of
+# m4_defun are idempotent, avoiding any warning or duplicate output.
+#
+#
+# 2. Keeping track of the expansion stack
+# =======================================
+#
+# When M4 expansion goes wrong it is often extremely hard to find the
+# path amongst macros that drove to the failure. What is needed is
+# the stack of macro `calls'. One could imagine that GNU M4 would
+# maintain a stack of macro expansions, unfortunately it doesn't, so
+# we do it by hand. This is of course extremely costly, but the help
+# this stack provides is worth it. Nevertheless to limit the
+# performance penalty this is implemented only for m4_defun'd macros,
+# not for define'd macros.
+#
+# Each time we enter an m4_defun'd macros, we add a definition in
+# _m4_expansion_stack, and when we exit the macro, we remove it (thanks
+# to pushdef/popdef). m4_stack_foreach is used to print the expansion
+# stack in the rare cases when it's needed.
+#
+# In addition, we want to detect circular m4_require dependencies.
+# Each time we expand a macro FOO we define _m4_expanding(FOO); and
+# m4_require(BAR) simply checks whether _m4_expanding(BAR) is defined.
+
+
+# m4_expansion_stack
+# ------------------
+# Expands to the entire contents of the expansion stack. The caller
+# must supply a trailing newline. This macro always prints a
+# location; check whether _m4_expansion_stack is defined to filter out
+# the case when no defun'd macro is in force.
+m4_define([m4_expansion_stack],
+[m4_stack_foreach_sep_lifo([_$0], [_$0_entry(], [)
+])m4_location[: the top level]])
+
+# _m4_expansion_stack_entry(MACRO)
+# --------------------------------
+# Format an entry for MACRO found on the expansion stack.
+m4_define([_m4_expansion_stack_entry],
+[_m4_defn([m4_location($1)])[: $1 is expanded from...]])
+
+# m4_expansion_stack_push(MACRO)
+# ------------------------------
+# Form an entry of the expansion stack on entry to MACRO and push it.
+m4_define([m4_expansion_stack_push],
+[m4_pushdef([_m4_expansion_stack], [$1])])
+
+
+# _m4_divert(GROW)
+# ----------------
+# This diversion is used by the m4_defun/m4_require machinery. It is
+# important to keep room before GROW because for each nested
+# AC_REQUIRE we use an additional diversion (i.e., two m4_require's
+# will use GROW - 2. More than 3 levels has never seemed to be
+# needed.)
+#
+# ...
+# - GROW - 2
+# m4_require'd code, 2 level deep
+# - GROW - 1
+# m4_require'd code, 1 level deep
+# - GROW
+# m4_defun'd macros are elaborated here.
+
+m4_define([_m4_divert(GROW)], 10000)
+
+
+# _m4_defun_pro(MACRO-NAME)
+# -------------------------
+# The prologue for Autoconf macros.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and m4_defn overhead.
+m4_define([_m4_defun_pro],
+[m4_ifdef([_m4_expansion_stack], [], [_m4_defun_pro_outer([$1])])]dnl
+[m4_expansion_stack_push([$1])m4_pushdef([_m4_expanding($1)])])
+
+m4_define([_m4_defun_pro_outer],
+[m4_set_delete([_m4_provide])]dnl
+[m4_pushdef([_m4_diverting([$1])])m4_pushdef([_m4_diverting], [$1])]dnl
+[m4_pushdef([_m4_divert_dump], m4_divnum)m4_divert_push([GROW])])
+
+# _m4_defun_epi(MACRO-NAME)
+# -------------------------
+# The Epilogue for Autoconf macros. MACRO-NAME only helps tracing
+# the PRO/EPI pairs.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and m4_popdef overhead.
+m4_define([_m4_defun_epi],
+[_m4_popdef([_m4_expanding($1)], [_m4_expansion_stack])]dnl
+[m4_ifdef([_m4_expansion_stack], [], [_m4_defun_epi_outer([$1])])]dnl
+[m4_provide([$1])])
+
+m4_define([_m4_defun_epi_outer],
+[_m4_popdef([_m4_divert_dump], [_m4_diverting([$1])], [_m4_diverting])]dnl
+[m4_divert_pop([GROW])m4_undivert([GROW])])
+
+
+# _m4_divert_dump
+# ---------------
+# If blank, we are outside of any defun'd macro. Otherwise, expands
+# to the diversion number (not name) where require'd macros should be
+# moved once completed.
+m4_define([_m4_divert_dump])
+
+
+# m4_divert_require(DIVERSION, NAME-TO-CHECK, [BODY-TO-EXPAND])
+# -------------------------------------------------------------
+# Same as m4_require, but BODY-TO-EXPAND goes into the named DIVERSION;
+# requirements still go in the current diversion though.
+#
+m4_define([m4_divert_require],
+[m4_ifdef([_m4_expanding($2)],
+ [m4_fatal([$0: circular dependency of $2])])]dnl
+[m4_if(_m4_divert_dump, [],
+ [m4_fatal([$0($2): cannot be used outside of an m4_defun'd macro])])]dnl
+[m4_provide_if([$2], [],
+ [_m4_require_call([$2], [$3], _m4_divert([$1], [-]))])])
+
+
+# m4_defun(NAME, EXPANSION, [MACRO = m4_define])
+# ----------------------------------------------
+# Define a macro NAME which automatically provides itself. Add
+# machinery so the macro automatically switches expansion to the
+# diversion stack if it is not already using it, prior to EXPANSION.
+# In this case, once finished, it will bring back all the code
+# accumulated in the diversion stack. This, combined with m4_require,
+# achieves the topological ordering of macros. We don't use this
+# macro to define some frequently called macros that are not involved
+# in ordering constraints, to save m4 processing.
+#
+# MACRO is an undocumented argument; when set to m4_pushdef, and NAME
+# is already defined, the new definition is added to the pushdef
+# stack, rather than overwriting the current definition. It can thus
+# be used to write self-modifying macros, which pop themselves to a
+# previously m4_define'd definition so that subsequent use of the
+# macro is faster.
+m4_define([m4_defun],
+[m4_define([m4_location($1)], m4_location)]dnl
+[m4_default([$3], [m4_define])([$1],
+ [_m4_defun_pro(]m4_dquote($[0])[)$2[]_m4_defun_epi(]m4_dquote($[0])[)])])
+
+
+# m4_defun_init(NAME, INIT, COMMON)
+# ---------------------------------
+# Like m4_defun, but split EXPANSION into two portions: INIT which is
+# done only the first time NAME is invoked, and COMMON which is
+# expanded every time.
+#
+# For now, the COMMON definition is always m4_define'd, giving an even
+# lighter-weight definition. m4_defun allows self-providing, but once
+# a macro is provided, m4_require no longer cares if it is m4_define'd
+# or m4_defun'd. m4_defun also provides location tracking to identify
+# dependency bugs, but once the INIT has been expanded, we know there
+# are no dependency bugs. However, if a future use needs COMMON to be
+# m4_defun'd, we can add a parameter, similar to the third parameter
+# to m4_defun.
+m4_define([m4_defun_init],
+[m4_define([$1], [$3[]])m4_defun([$1],
+ [$2[]_m4_popdef(]m4_dquote($[0])[)m4_indir(]m4_dquote($[0])dnl
+[m4_if(]m4_dquote($[#])[, [0], [], ]m4_dquote([,$]@)[))], [m4_pushdef])])
+
+
+# m4_defun_once(NAME, EXPANSION)
+# ------------------------------
+# Like m4_defun, but guarantee that EXPANSION only happens once
+# (thereafter, using NAME is a no-op).
+#
+# If _m4_divert_dump is empty, we are called at the top level;
+# otherwise, we must ensure that we are required in front of the
+# current defun'd macro. Use a helper macro so that EXPANSION need
+# only occur once in the definition of NAME, since it might be large.
+m4_define([m4_defun_once],
+[m4_define([m4_location($1)], m4_location)]dnl
+[m4_define([$1], [_m4_defun_once([$1], [$2], m4_if(_m4_divert_dump, [],
+ [[_m4_defun_pro([$1])m4_unquote(], [)_m4_defun_epi([$1])]],
+m4_ifdef([_m4_diverting([$1])], [-]), [-], [[m4_unquote(], [)]],
+ [[_m4_require_call([$1],], [, _m4_divert_dump)]]))])])
+
+m4_define([_m4_defun_once],
+[m4_pushdef([$1])$3[$2[]m4_provide([$1])]$4])
+
+
+# m4_pattern_forbid(ERE, [WHY])
+# -----------------------------
+# Declare that no token matching the forbidden extended regular
+# expression ERE should be seen in the output unless...
+m4_define([m4_pattern_forbid], [])
+
+
+# m4_pattern_allow(ERE)
+# ---------------------
+# ... that token also matches the allowed extended regular expression ERE.
+# Both used via traces.
+m4_define([m4_pattern_allow], [])
+
+
+## --------------------------------- ##
+## 11. Dependencies between macros. ##
+## --------------------------------- ##
+
+
+# m4_before(THIS-MACRO-NAME, CALLED-MACRO-NAME)
+# ---------------------------------------------
+# Issue a warning if CALLED-MACRO-NAME was called before THIS-MACRO-NAME.
+m4_define([m4_before],
+[m4_provide_if([$2],
+ [m4_warn([syntax], [$2 was called before $1])])])
+
+
+# m4_require(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK])
+# -----------------------------------------------------------
+# If NAME-TO-CHECK has never been expanded (actually, if it is not
+# m4_provide'd), expand BODY-TO-EXPAND *before* the current macro
+# expansion; follow the expansion with a newline. Once expanded, emit
+# it in _m4_divert_dump. Keep track of the m4_require chain in
+# _m4_expansion_stack.
+#
+# The normal cases are:
+#
+# - NAME-TO-CHECK == BODY-TO-EXPAND
+# Which you can use for regular macros with or without arguments, e.g.,
+# m4_require([AC_PROG_CC], [AC_PROG_CC])
+# m4_require([AC_CHECK_HEADERS(limits.h)], [AC_CHECK_HEADERS(limits.h)])
+# which is just the same as
+# m4_require([AC_PROG_CC])
+# m4_require([AC_CHECK_HEADERS(limits.h)])
+#
+# - BODY-TO-EXPAND == m4_indir([NAME-TO-CHECK])
+# In the case of macros with irregular names. For instance:
+# m4_require([AC_LANG_COMPILER(C)], [indir([AC_LANG_COMPILER(C)])])
+# which means `if the macro named `AC_LANG_COMPILER(C)' (the parens are
+# part of the name, it is not an argument) has not been run, then
+# call it.'
+# Had you used
+# m4_require([AC_LANG_COMPILER(C)], [AC_LANG_COMPILER(C)])
+# then m4_require would have tried to expand `AC_LANG_COMPILER(C)', i.e.,
+# call the macro `AC_LANG_COMPILER' with `C' as argument.
+#
+# You could argue that `AC_LANG_COMPILER', when it receives an argument
+# such as `C' should dispatch the call to `AC_LANG_COMPILER(C)'. But this
+# `extension' prevents `AC_LANG_COMPILER' from having actual arguments that
+# it passes to `AC_LANG_COMPILER(C)'.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and other overhead on the common path.
+m4_define([m4_require],
+[m4_ifdef([_m4_expanding($1)],
+ [m4_fatal([$0: circular dependency of $1])])]dnl
+[m4_if(_m4_divert_dump, [],
+ [m4_fatal([$0($1): cannot be used outside of an ]dnl
+m4_if([$0], [m4_require], [[m4_defun]], [[AC_DEFUN]])['d macro])])]dnl
+[m4_provide_if([$1], [m4_set_contains([_m4_provide], [$1],
+ [_m4_require_check([$1], _m4_defn([m4_provide($1)]), [$0])], [m4_ignore])],
+ [_m4_require_call])([$1], [$2], _m4_divert_dump)])
+
+
+# _m4_require_call(NAME-TO-CHECK, [BODY-TO-EXPAND = NAME-TO-CHECK],
+# DIVERSION-NUMBER)
+# -----------------------------------------------------------------
+# If m4_require decides to expand the body, it calls this macro. The
+# expansion is placed in DIVERSION-NUMBER.
+#
+# This is called frequently, so minimize the number of macro invocations
+# by avoiding dnl and other overhead on the common path.
+m4_define([_m4_require_call],
+[m4_pushdef([_m4_divert_grow], m4_decr(_m4_divert_grow))]dnl
+[m4_pushdef([_m4_diverting([$1])])m4_pushdef([_m4_diverting], [$1])]dnl
+[m4_divert_push(_m4_divert_grow, [-])]dnl
+[m4_if([$2], [], [$1], [$2])
+m4_provide_if([$1], [m4_set_remove([_m4_provide], [$1])],
+ [m4_warn([syntax], [$1 is m4_require'd but not m4_defun'd])])]dnl
+[_m4_divert_raw($3)_m4_undivert(_m4_divert_grow)]dnl
+[m4_divert_pop(_m4_divert_grow)_m4_popdef([_m4_divert_grow],
+[_m4_diverting([$1])], [_m4_diverting])])
+
+
+# _m4_require_check(NAME-TO-CHECK, OWNER, CALLER)
+# -----------------------------------------------
+# NAME-TO-CHECK has been identified as previously expanded in the
+# diversion owned by OWNER. If this is a problem, warn on behalf of
+# CALLER and return _m4_require_call; otherwise return m4_ignore.
+m4_define([_m4_require_check],
+[m4_if(_m4_defn([_m4_diverting]), [$2], [m4_ignore],
+ m4_ifdef([_m4_diverting([$2])], [-]), [-], [m4_warn([syntax],
+ [$3: `$1' was expanded before it was required
+http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required])_m4_require_call],
+ [m4_ignore])])
+
+
+# _m4_divert_grow
+# ---------------
+# The counter for _m4_require_call.
+m4_define([_m4_divert_grow], _m4_divert([GROW]))
+
+
+# m4_expand_once(TEXT, [WITNESS = TEXT])
+# --------------------------------------
+# If TEXT has never been expanded, expand it *here*. Use WITNESS as
+# as a memory that TEXT has already been expanded.
+m4_define([m4_expand_once],
+[m4_provide_if(m4_default_quoted([$2], [$1]),
+ [],
+ [m4_provide(m4_default_quoted([$2], [$1]))[]$1])])
+
+
+# m4_provide(MACRO-NAME)
+# ----------------------
+m4_define([m4_provide],
+[m4_ifdef([m4_provide($1)], [],
+[m4_set_add([_m4_provide], [$1], [m4_define([m4_provide($1)],
+ m4_ifdef([_m4_diverting], [_m4_defn([_m4_diverting])]))])])])
+
+
+# m4_provide_if(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -------------------------------------------------------
+# If MACRO-NAME is provided do IF-PROVIDED, else IF-NOT-PROVIDED.
+# The purpose of this macro is to provide the user with a means to
+# check macros which are provided without letting her know how the
+# information is coded.
+m4_define([m4_provide_if],
+[m4_ifdef([m4_provide($1)],
+ [$2], [$3])])
+
+
+## --------------------- ##
+## 12. Text processing. ##
+## --------------------- ##
+
+
+# m4_cr_letters
+# m4_cr_LETTERS
+# m4_cr_Letters
+# -------------
+m4_define([m4_cr_letters], [abcdefghijklmnopqrstuvwxyz])
+m4_define([m4_cr_LETTERS], [ABCDEFGHIJKLMNOPQRSTUVWXYZ])
+m4_define([m4_cr_Letters],
+m4_defn([m4_cr_letters])dnl
+m4_defn([m4_cr_LETTERS])dnl
+)
+
+
+# m4_cr_digits
+# ------------
+m4_define([m4_cr_digits], [0123456789])
+
+
+# m4_cr_alnum
+# -----------
+m4_define([m4_cr_alnum],
+m4_defn([m4_cr_Letters])dnl
+m4_defn([m4_cr_digits])dnl
+)
+
+
+# m4_cr_symbols1
+# m4_cr_symbols2
+# --------------
+m4_define([m4_cr_symbols1],
+m4_defn([m4_cr_Letters])dnl
+_)
+
+m4_define([m4_cr_symbols2],
+m4_defn([m4_cr_symbols1])dnl
+m4_defn([m4_cr_digits])dnl
+)
+
+# m4_cr_all
+# ---------
+# The character range representing everything, with `-' as the last
+# character, since it is special to m4_translit. Use with care, because
+# it contains characters special to M4 (fortunately, both ASCII and EBCDIC
+# have [] in order, so m4_defn([m4_cr_all]) remains a valid string). It
+# also contains characters special to terminals, so it should never be
+# displayed in an error message. Also, attempts to map [ and ] to other
+# characters via m4_translit must deal with the fact that m4_translit does
+# not add quotes to the output.
+#
+# In EBCDIC, $ is immediately followed by *, which leads to problems
+# if m4_cr_all is inlined into a macro definition; so swap them.
+#
+# It is mainly useful in generating inverted character range maps, for use
+# in places where m4_translit is faster than an equivalent m4_bpatsubst;
+# the regex `[^a-z]' is equivalent to:
+# m4_translit(m4_dquote(m4_defn([m4_cr_all])), [a-z])
+m4_define([m4_cr_all],
+m4_translit(m4_dquote(m4_format(m4_dquote(m4_for(
+ ,1,255,,[[%c]]))m4_for([i],1,255,,[,i]))), [$*-], [*$])-)
+
+
+# _m4_define_cr_not(CATEGORY)
+# ---------------------------
+# Define m4_cr_not_CATEGORY as the inverse of m4_cr_CATEGORY.
+m4_define([_m4_define_cr_not],
+[m4_define([m4_cr_not_$1],
+ m4_translit(m4_dquote(m4_defn([m4_cr_all])),
+ m4_defn([m4_cr_$1])))])
+
+
+# m4_cr_not_letters
+# m4_cr_not_LETTERS
+# m4_cr_not_Letters
+# m4_cr_not_digits
+# m4_cr_not_alnum
+# m4_cr_not_symbols1
+# m4_cr_not_symbols2
+# ------------------
+# Inverse character sets
+_m4_define_cr_not([letters])
+_m4_define_cr_not([LETTERS])
+_m4_define_cr_not([Letters])
+_m4_define_cr_not([digits])
+_m4_define_cr_not([alnum])
+_m4_define_cr_not([symbols1])
+_m4_define_cr_not([symbols2])
+
+
+# m4_newline([STRING])
+# --------------------
+# Expands to a newline, possibly followed by STRING. Exists mostly for
+# formatting reasons.
+m4_define([m4_newline], [
+$1])
+
+
+# m4_re_escape(STRING)
+# --------------------
+# Escape RE active characters in STRING.
+m4_define([m4_re_escape],
+[m4_bpatsubst([$1],
+ [[][*+.?\^$]], [\\\&])])
+
+
+# m4_re_string
+# ------------
+# Regexp for `[a-zA-Z_0-9]*'
+# m4_dquote provides literal [] for the character class.
+m4_define([m4_re_string],
+m4_dquote(m4_defn([m4_cr_symbols2]))dnl
+[*]dnl
+)
+
+
+# m4_re_word
+# ----------
+# Regexp for `[a-zA-Z_][a-zA-Z_0-9]*'
+m4_define([m4_re_word],
+m4_dquote(m4_defn([m4_cr_symbols1]))dnl
+m4_defn([m4_re_string])dnl
+)
+
+
+# m4_tolower(STRING)
+# m4_toupper(STRING)
+# ------------------
+# These macros convert STRING to lowercase or uppercase.
+#
+# Rather than expand the m4_defn each time, we inline them up front.
+m4_define([m4_tolower],
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_LETTERS]))[,
+ ]m4_dquote(m4_defn([m4_cr_letters]))[)])
+m4_define([m4_toupper],
+[m4_translit([[$1]], ]m4_dquote(m4_defn([m4_cr_letters]))[,
+ ]m4_dquote(m4_defn([m4_cr_LETTERS]))[)])
+
+
+# m4_split(STRING, [REGEXP])
+# --------------------------
+# Split STRING into an m4 list of quoted elements. The elements are
+# quoted with [ and ]. Beginning spaces and end spaces *are kept*.
+# Use m4_strip to remove them.
+#
+# REGEXP specifies where to split. Default is [\t ]+.
+#
+# If STRING is empty, the result is an empty list.
+#
+# Pay attention to the m4_changequotes. When m4 reads the definition of
+# m4_split, it still has quotes set to [ and ]. Luckily, these are matched
+# in the macro body, so the definition is stored correctly. Use the same
+# alternate quotes as m4_noquote; it must be unlikely to appear in $1.
+#
+# Also, notice that $1 is quoted twice, since we want the result to
+# be quoted. Then you should understand that the argument of
+# patsubst is -=<{(STRING)}>=- (i.e., with additional -=<{( and )}>=-).
+#
+# This macro is safe on active symbols, i.e.:
+# m4_define(active, ACTIVE)
+# m4_split([active active ])end
+# => [active], [active], []end
+#
+# Optimize on regex of ` ' (space), since m4_foreach_w already guarantees
+# that the list contains single space separators, and a common case is
+# splitting a single-element list. This macro is called frequently,
+# so avoid unnecessary dnl inside the definition.
+m4_define([m4_split],
+[m4_if([$1], [], [],
+ [$2], [ ], [m4_if(m4_index([$1], [ ]), [-1], [[[$1]]],
+ [_$0([$1], [$2], [, ])])],
+ [$2], [], [_$0([$1], [[ ]+], [, ])],
+ [_$0([$1], [$2], [, ])])])
+
+m4_define([_m4_split],
+[m4_changequote([-=<{(],[)}>=-])]dnl
+[[m4_bpatsubst(-=<{(-=<{($1)}>=-)}>=-, -=<{($2)}>=-,
+ -=<{(]$3[)}>=-)]m4_changequote([, ])])
+
+
+# m4_chomp(STRING)
+# m4_chomp_all(STRING)
+# --------------------
+# Return STRING quoted, but without a trailing newline. m4_chomp
+# removes at most one newline, while m4_chomp_all removes all
+# consecutive trailing newlines. Embedded newlines are not touched,
+# and a trailing backslash-newline leaves just a trailing backslash.
+#
+# m4_bregexp is slower than m4_index, and we don't always want to
+# remove all newlines; hence the two variants. We massage characters
+# to give a nicer pattern to match, particularly since m4_bregexp is
+# line-oriented. Both versions must guarantee a match, to avoid bugs
+# with precision -1 in m4_format in older m4.
+m4_define([m4_chomp],
+[m4_format([[%.*s]], m4_index(m4_translit([[$1]], [
+/.], [/ ])[./.], [/.]), [$1])])
+
+m4_define([m4_chomp_all],
+[m4_format([[%.*s]], m4_bregexp(m4_translit([[$1]], [
+/], [/ ]), [/*$]), [$1])])
+
+
+# m4_flatten(STRING)
+# ------------------
+# If STRING contains end of lines, replace them with spaces. If there
+# are backslashed end of lines, remove them. This macro is safe with
+# active symbols.
+# m4_define(active, ACTIVE)
+# m4_flatten([active
+# act\
+# ive])end
+# => active activeend
+#
+# In m4, m4_bpatsubst is expensive, so first check for a newline.
+m4_define([m4_flatten],
+[m4_if(m4_index([$1], [
+]), [-1], [[$1]],
+ [m4_translit(m4_bpatsubst([[[$1]]], [\\
+]), [
+], [ ])])])
+
+
+# m4_strip(STRING)
+# ----------------
+# Expands into STRING with tabs and spaces singled out into a single
+# space, and removing leading and trailing spaces.
+#
+# This macro is robust to active symbols.
+# m4_define(active, ACTIVE)
+# m4_strip([ active <tab> <tab>active ])end
+# => active activeend
+#
+# First, notice that we guarantee trailing space. Why? Because regular
+# expressions are greedy, and `.* ?' would always group the space into the
+# .* portion. The algorithm is simpler by avoiding `?' at the end. The
+# algorithm correctly strips everything if STRING is just ` '.
+#
+# Then notice the second pattern: it is in charge of removing the
+# leading/trailing spaces. Why not just `[^ ]'? Because they are
+# applied to over-quoted strings, i.e. more or less [STRING], due
+# to the limitations of m4_bpatsubsts. So the leading space in STRING
+# is the *second* character; equally for the trailing space.
+m4_define([m4_strip],
+[m4_bpatsubsts([$1 ],
+ [[ ]+], [ ],
+ [^. ?\(.*\) .$], [[[\1]]])])
+
+
+# m4_normalize(STRING)
+# --------------------
+# Apply m4_flatten and m4_strip to STRING.
+#
+# The argument is quoted, so that the macro is robust to active symbols:
+#
+# m4_define(active, ACTIVE)
+# m4_normalize([ act\
+# ive
+# active ])end
+# => active activeend
+
+m4_define([m4_normalize],
+[m4_strip(m4_flatten([$1]))])
+
+
+
+# m4_join(SEP, ARG1, ARG2...)
+# ---------------------------
+# Produce ARG1SEPARG2...SEPARGn. Avoid back-to-back SEP when a given ARG
+# is the empty string. No expansion is performed on SEP or ARGs.
+#
+# Since the number of arguments to join can be arbitrarily long, we
+# want to avoid having more than one $@ in the macro definition;
+# otherwise, the expansion would require twice the memory of the already
+# long list. Hence, m4_join merely looks for the first non-empty element,
+# and outputs just that element; while _m4_join looks for all non-empty
+# elements, and outputs them following a separator. The final trick to
+# note is that we decide between recursing with $0 or _$0 based on the
+# nested m4_if ending with `_'.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift2($@))])])
+m4_define([_m4_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift2($@))])])
+
+# m4_joinall(SEP, ARG1, ARG2...)
+# ------------------------------
+# Produce ARG1SEPARG2...SEPARGn. An empty ARG results in back-to-back SEP.
+# No expansion is performed on SEP or ARGs.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_joinall], [[$2]_$0([$1], m4_shift($@))])
+m4_define([_m4_joinall],
+[m4_if([$#], [2], [], [[$1$3]$0([$1], m4_shift2($@))])])
+
+# m4_combine([SEPARATOR], PREFIX-LIST, [INFIX], SUFFIX...)
+# --------------------------------------------------------
+# Produce the pairwise combination of every element in the quoted,
+# comma-separated PREFIX-LIST with every element from the SUFFIX arguments.
+# Each pair is joined with INFIX, and pairs are separated by SEPARATOR.
+# No expansion occurs on SEPARATOR, INFIX, or elements of either list.
+#
+# For example:
+# m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
+# => a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
+#
+# This definition is a bit hairy; the thing to realize is that we want
+# to construct m4_map_args_sep([[prefix$3]], [], [[$1]], m4_shift3($@))
+# as the inner loop, using each prefix generated by the outer loop,
+# and without recalculating m4_shift3 every outer iteration.
+m4_define([m4_combine],
+[m4_if([$2], [], [], m4_eval([$# > 3]), [1],
+[m4_map_args_sep([m4_map_args_sep(m4_dquote(], [)[[$3]], [], [[$1]],]]]dnl
+[m4_dquote(m4_dquote(m4_shift3($@)))[[)], [[$1]], $2)])])
+
+
+# m4_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR`'STRING'
+# at the end. It is valid to use this macro with MACRO-NAME undefined,
+# in which case no SEPARATOR is added. Be aware that the criterion is
+# `not being defined', and not `not being empty'.
+#
+# Note that neither STRING nor SEPARATOR are expanded here; rather, when
+# you expand MACRO-NAME, they will be expanded at that point in time.
+#
+# This macro is robust to active symbols. It can be used to grow
+# strings.
+#
+# | m4_define(active, ACTIVE)dnl
+# | m4_append([sentence], [This is an])dnl
+# | m4_append([sentence], [ active ])dnl
+# | m4_append([sentence], [symbol.])dnl
+# | sentence
+# | m4_undefine([active])dnl
+# | sentence
+# => This is an ACTIVE symbol.
+# => This is an active symbol.
+#
+# It can be used to define hooks.
+#
+# | m4_define(active, ACTIVE)dnl
+# | m4_append([hooks], [m4_define([act1], [act2])])dnl
+# | m4_append([hooks], [m4_define([act2], [active])])dnl
+# | m4_undefine([active])dnl
+# | act1
+# | hooks
+# | act1
+# => act1
+# =>
+# => active
+#
+# It can also be used to create lists, although this particular usage was
+# broken prior to autoconf 2.62.
+# | m4_append([list], [one], [, ])dnl
+# | m4_append([list], [two], [, ])dnl
+# | m4_append([list], [three], [, ])dnl
+# | list
+# | m4_dquote(list)
+# => one, two, three
+# => [one],[two],[three]
+#
+# Note that m4_append can benefit from amortized O(n) m4 behavior, if
+# the underlying m4 implementation is smart enough to avoid copying existing
+# contents when enlarging a macro's definition into any pre-allocated storage
+# (m4 1.4.x unfortunately does not implement this optimization). We do
+# not implement m4_prepend, since it is inherently O(n^2) (pre-allocated
+# storage only occurs at the end of a macro, so the existing contents must
+# always be moved).
+#
+# Use _m4_defn for speed.
+m4_define([m4_append],
+[m4_define([$1], m4_ifdef([$1], [_m4_defn([$1])[$3]])[$2])])
+
+
+# m4_append_uniq(MACRO-NAME, STRING, [SEPARATOR], [IF-UNIQ], [IF-DUP])
+# --------------------------------------------------------------------
+# Like `m4_append', but append only if not yet present. Additionally,
+# expand IF-UNIQ if STRING was appended, or IF-DUP if STRING was already
+# present. Also, warn if SEPARATOR is not empty and occurs within STRING,
+# as the algorithm no longer guarantees uniqueness.
+#
+# Note that while m4_append can be O(n) (depending on the quality of the
+# underlying M4 implementation), m4_append_uniq is inherently O(n^2)
+# because each append operation searches the entire string.
+m4_define([m4_append_uniq],
+[m4_ifval([$3], [m4_if(m4_index([$2], [$3]), [-1], [],
+ [m4_warn([syntax],
+ [$0: `$2' contains `$3'])])])_$0($@)])
+m4_define([_m4_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]_m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [m4_append([$1], [$2], [$3])$4], [$5])],
+ [m4_define([$1], [$2])$4])])
+
+# m4_append_uniq_w(MACRO-NAME, STRINGS)
+# -------------------------------------
+# For each of the words in the whitespace separated list STRINGS, append
+# only the unique strings to the definition of MACRO-NAME.
+#
+# Use _m4_defn for speed.
+m4_define([m4_append_uniq_w],
+[m4_map_args_w([$2], [_m4_append_uniq([$1],], [, [ ])])])
+
+
+# m4_escape(STRING)
+# -----------------
+# Output quoted STRING, but with embedded #, $, [ and ] turned into
+# quadrigraphs.
+#
+# It is faster to check if STRING is already good using m4_translit
+# than to blindly perform four m4_bpatsubst.
+#
+# Because the translit is stripping quotes, it must also neutralize
+# anything that might be in a macro name, as well as comments, commas,
+# and parentheses. All the problem characters are unified so that a
+# single m4_index can scan the result.
+#
+# Rather than expand m4_defn every time m4_escape is expanded, we
+# inline its expansion up front.
+m4_define([m4_escape],
+[m4_if(m4_index(m4_translit([$1],
+ [[]#,()]]m4_dquote(m4_defn([m4_cr_symbols2]))[, [$$$]), [$]),
+ [-1], [m4_echo], [_$0])([$1])])
+
+m4_define([_m4_escape],
+[m4_changequote([-=<{(],[)}>=-])]dnl
+[m4_bpatsubst(m4_bpatsubst(m4_bpatsubst(m4_bpatsubst(
+ -=<{(-=<{(-=<{(-=<{(-=<{($1)}>=-)}>=-)}>=-)}>=-)}>=-,
+ -=<{(#)}>=-, -=<{(@%:@)}>=-),
+ -=<{(\[)}>=-, -=<{(@<:@)}>=-),
+ -=<{(\])}>=-, -=<{(@:>@)}>=-),
+ -=<{(\$)}>=-, -=<{(@S|@)}>=-)m4_changequote([,])])
+
+
+# m4_text_wrap(STRING, [PREFIX], [FIRST-PREFIX], [WIDTH])
+# -------------------------------------------------------
+# Expands into STRING wrapped to hold in WIDTH columns (default = 79).
+# If PREFIX is given, each line is prefixed with it. If FIRST-PREFIX is
+# specified, then the first line is prefixed with it. As a special case,
+# if the length of FIRST-PREFIX is greater than that of PREFIX, then
+# FIRST-PREFIX will be left alone on the first line.
+#
+# No expansion occurs on the contents STRING, PREFIX, or FIRST-PREFIX,
+# although quadrigraphs are correctly recognized. More precisely,
+# you may redefine m4_qlen to recognize whatever escape sequences that
+# you will post-process.
+#
+# Typical outputs are:
+#
+# m4_text_wrap([Short string */], [ ], [/* ], 20)
+# => /* Short string */
+#
+# m4_text_wrap([Much longer string */], [ ], [/* ], 20)
+# => /* Much longer
+# => string */
+#
+# m4_text_wrap([Short doc.], [ ], [ --short ], 30)
+# => --short Short doc.
+#
+# m4_text_wrap([Short doc.], [ ], [ --too-wide ], 30)
+# => --too-wide
+# => Short doc.
+#
+# m4_text_wrap([Super long documentation.], [ ], [ --too-wide ], 30)
+# => --too-wide
+# => Super long
+# => documentation.
+#
+# FIXME: there is no checking of a longer PREFIX than WIDTH, but do
+# we really want to bother with people trying each single corner
+# of a software?
+#
+# This macro does not leave a trailing space behind the last word of a line,
+# which complicates it a bit. The algorithm is otherwise stupid and simple:
+# all the words are preceded by m4_Separator which is defined to empty for
+# the first word, and then ` ' (single space) for all the others.
+#
+# The algorithm uses a helper that uses $2 through $4 directly, rather than
+# using local variables, to avoid m4_defn overhead, or expansion swallowing
+# any $. It also bypasses m4_popdef overhead with _m4_popdef since no user
+# macro expansion occurs in the meantime. Also, the definition is written
+# with m4_do, to avoid time wasted on dnl during expansion (since this is
+# already a time-consuming macro).
+m4_define([m4_text_wrap],
+[_$0(m4_escape([$1]), [$2], m4_default_quoted([$3], [$2]),
+ m4_default_quoted([$4], [79]))])
+
+m4_define([_m4_text_wrap],
+m4_do(dnl set up local variables, to avoid repeated calculations
+[[m4_pushdef([m4_Indent], m4_qlen([$2]))]],
+[[m4_pushdef([m4_Cursor], m4_qlen([$3]))]],
+[[m4_pushdef([m4_Separator], [m4_define([m4_Separator], [ ])])]],
+dnl expand the first prefix, then check its length vs. regular prefix
+dnl same length: nothing special
+dnl prefix1 longer: output on line by itself, and reset cursor
+dnl prefix1 shorter: pad to length of prefix, and reset cursor
+[[[$3]m4_cond([m4_Cursor], m4_Indent, [],
+ [m4_eval(m4_Cursor > m4_Indent)], [1], [
+[$2]m4_define([m4_Cursor], m4_Indent)],
+ [m4_format([%*s], m4_max([0],
+ m4_eval(m4_Indent - m4_Cursor)), [])m4_define([m4_Cursor], m4_Indent)])]],
+dnl now, for each word, compute the cursor after the word is output, then
+dnl check if the cursor would exceed the wrap column
+dnl if so, reset cursor, and insert newline and prefix
+dnl if not, insert the separator (usually a space)
+dnl either way, insert the word
+[[m4_map_args_w([$1], [$0_word(], [, [$2], [$4])])]],
+dnl finally, clean up the local variables
+[[_m4_popdef([m4_Separator], [m4_Cursor], [m4_Indent])]]))
+
+m4_define([_m4_text_wrap_word],
+[m4_define([m4_Cursor], m4_eval(m4_Cursor + m4_qlen([$1]) + 1))]dnl
+[m4_if(m4_eval(m4_Cursor > ([$3])),
+ [1], [m4_define([m4_Cursor], m4_eval(m4_Indent + m4_qlen([$1]) + 1))
+[$2]],
+ [m4_Separator[]])[$1]])
+
+# m4_text_box(MESSAGE, [FRAME-CHARACTER = `-'])
+# ---------------------------------------------
+# Turn MESSAGE into:
+# ## ------- ##
+# ## MESSAGE ##
+# ## ------- ##
+# using FRAME-CHARACTER in the border.
+#
+# Quadrigraphs are correctly recognized. More precisely, you may
+# redefine m4_qlen to recognize whatever escape sequences that you
+# will post-process.
+m4_define([m4_text_box],
+[m4_pushdef([m4_Border],
+ m4_translit(m4_format([[[%*s]]], m4_decr(m4_qlen(_m4_expand([$1
+]))), []), [ ], m4_default_quoted([$2], [-])))]dnl
+[[##] _m4_defn([m4_Border]) [##]
+[##] $1 [##]
+[##] _m4_defn([m4_Border]) [##]_m4_popdef([m4_Border])])
+
+
+# m4_qlen(STRING)
+# ---------------
+# Expands to the length of STRING after autom4te converts all quadrigraphs.
+#
+# If you use some other means of post-processing m4 output rather than
+# autom4te, then you may redefine this macro to recognize whatever
+# escape sequences your post-processor will handle. For that matter,
+# m4_define([m4_qlen], m4_defn([m4_len])) is sufficient if you don't
+# do any post-processing.
+#
+# Avoid bpatsubsts for the common case of no quadrigraphs. Cache
+# results, as configure scripts tend to ask about lengths of common
+# strings like `/*' and `*/' rather frequently. Minimize the number
+# of times that $1 occurs in m4_qlen, so there is less text to parse
+# on a cache hit.
+m4_define([m4_qlen],
+[m4_ifdef([$0-$1], [_m4_defn([$0-]], [_$0(])[$1])])
+m4_define([_m4_qlen],
+[m4_define([m4_qlen-$1],
+m4_if(m4_index([$1], [@]), [-1], [m4_len([$1])],
+ [m4_len(m4_bpatsubst([[$1]],
+ [@\(\(<:\|:>\|S|\|%:\|\{:\|:\}\)\(@\)\|&t@\)],
+ [\3]))]))_m4_defn([m4_qlen-$1])])
+
+# m4_copyright_condense(TEXT)
+# ---------------------------
+# Condense the copyright notice in TEXT to only display the final
+# year, wrapping the results to fit in 80 columns.
+m4_define([m4_copyright_condense],
+[m4_text_wrap(m4_bpatsubst(m4_flatten([[$1]]),
+[(C)[- ,0-9]*\([1-9][0-9][0-9][0-9]\)], [(C) \1]))])
+
+## ----------------------- ##
+## 13. Number processing. ##
+## ----------------------- ##
+
+# m4_cmp(A, B)
+# ------------
+# Compare two integer expressions.
+# A < B -> -1
+# A = B -> 0
+# A > B -> 1
+m4_define([m4_cmp],
+[m4_eval((([$1]) > ([$2])) - (([$1]) < ([$2])))])
+
+
+# m4_list_cmp(A, B)
+# -----------------
+#
+# Compare the two lists of integer expressions A and B. For instance:
+# m4_list_cmp([1, 0], [1]) -> 0
+# m4_list_cmp([1, 0], [1, 0]) -> 0
+# m4_list_cmp([1, 2], [1, 0]) -> 1
+# m4_list_cmp([1, 2, 3], [1, 2]) -> 1
+# m4_list_cmp([1, 2, -3], [1, 2]) -> -1
+# m4_list_cmp([1, 0], [1, 2]) -> -1
+# m4_list_cmp([1], [1, 2]) -> -1
+# m4_define([xa], [oops])dnl
+# m4_list_cmp([[0xa]], [5+5]) -> 0
+#
+# Rather than face the overhead of m4_case, we use a helper function whose
+# expansion includes the name of the macro to invoke on the tail, either
+# m4_ignore or m4_unquote. This is particularly useful when comparing
+# long lists, since less text is being expanded for deciding when to end
+# recursion. The recursion is between a pair of macros that alternate
+# which list is trimmed by one element; this is more efficient than
+# calling m4_cdr on both lists from a single macro. Guarantee exactly
+# one expansion of both lists' side effects.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_list_cmp],
+[_$0_raw(m4_dquote($1), m4_dquote($2))])
+
+m4_define([_m4_list_cmp_raw],
+[m4_if([$1], [$2], [0], [_m4_list_cmp_1([$1], $2)])])
+
+m4_define([_m4_list_cmp],
+[m4_if([$1], [], [0m4_ignore], [$2], [0], [m4_unquote], [$2m4_ignore])])
+
+m4_define([_m4_list_cmp_1],
+[_m4_list_cmp_2([$2], [m4_shift2($@)], $1)])
+
+m4_define([_m4_list_cmp_2],
+[_m4_list_cmp([$1$3], m4_cmp([$3+0], [$1+0]))(
+ [_m4_list_cmp_1(m4_dquote(m4_shift3($@)), $2)])])
+
+# m4_max(EXPR, ...)
+# m4_min(EXPR, ...)
+# -----------------
+# Return the decimal value of the maximum (or minimum) in a series of
+# integer expressions.
+#
+# M4 1.4.x doesn't provide ?:. Hence this huge m4_eval. Avoid m4_eval
+# if both arguments are identical, but be aware of m4_max(0xa, 10) (hence
+# the use of <=, not just <, in the second multiply).
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_max],
+[m4_if([$#], [0], [m4_fatal([too few arguments to $0])],
+ [$#], [1], [m4_eval([$1])],
+ [$#$1], [2$2], [m4_eval([$1])],
+ [$#], [2], [_$0($@)],
+ [_m4_minmax([_$0], $@)])])
+
+m4_define([_m4_max],
+[m4_eval((([$1]) > ([$2])) * ([$1]) + (([$1]) <= ([$2])) * ([$2]))])
+
+m4_define([m4_min],
+[m4_if([$#], [0], [m4_fatal([too few arguments to $0])],
+ [$#], [1], [m4_eval([$1])],
+ [$#$1], [2$2], [m4_eval([$1])],
+ [$#], [2], [_$0($@)],
+ [_m4_minmax([_$0], $@)])])
+
+m4_define([_m4_min],
+[m4_eval((([$1]) < ([$2])) * ([$1]) + (([$1]) >= ([$2])) * ([$2]))])
+
+# _m4_minmax(METHOD, ARG1, ARG2...)
+# ---------------------------------
+# Common recursion code for m4_max and m4_min. METHOD must be _m4_max
+# or _m4_min, and there must be at least two arguments to combine.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([_m4_minmax],
+[m4_if([$#], [3], [$1([$2], [$3])],
+ [$0([$1], $1([$2], [$3]), m4_shift3($@))])])
+
+
+# m4_sign(A)
+# ----------
+# The sign of the integer expression A.
+m4_define([m4_sign],
+[m4_eval((([$1]) > 0) - (([$1]) < 0))])
+
+
+
+## ------------------------ ##
+## 14. Version processing. ##
+## ------------------------ ##
+
+
+# m4_version_unletter(VERSION)
+# ----------------------------
+# Normalize beta version numbers with letters to numeric expressions, which
+# can then be handed to m4_eval for the purpose of comparison.
+#
+# Nl -> (N+1).-1.(l#)
+#
+# for example:
+# [2.14a] -> [0,2,14+1,-1,[0r36:a]] -> 2.15.-1.10
+# [2.14b] -> [0,2,15+1,-1,[0r36:b]] -> 2.15.-1.11
+# [2.61aa.b] -> [0,2.61,1,-1,[0r36:aa],+1,-1,[0r36:b]] -> 2.62.-1.370.1.-1.11
+# [08] -> [0,[0r10:0]8] -> 8
+#
+# This macro expects reasonable version numbers, but can handle double
+# letters and does not expand any macros. Original version strings can
+# use both `.' and `-' separators.
+#
+# Inline constant expansions, to avoid m4_defn overhead.
+# _m4_version_unletter is the real workhorse used by m4_version_compare,
+# but since [0r36:a] and commas are less readable than 10 and dots, we
+# provide a wrapper for human use.
+m4_define([m4_version_unletter],
+[m4_substr(m4_map_args([.m4_eval], m4_unquote(_$0([$1]))), [3])])
+m4_define([_m4_version_unletter],
+[m4_bpatsubst(m4_bpatsubst(m4_translit([[[[0,$1]]]], [.-], [,,]),]dnl
+m4_dquote(m4_dquote(m4_defn([m4_cr_Letters])))[[+],
+ [+1,-1,[0r36:\&]]), [,0], [,[0r10:0]])])
+
+
+# m4_version_compare(VERSION-1, VERSION-2)
+# ----------------------------------------
+# Compare the two version numbers and expand into
+# -1 if VERSION-1 < VERSION-2
+# 0 if =
+# 1 if >
+#
+# Since _m4_version_unletter does not output side effects, we can
+# safely bypass the overhead of m4_version_cmp.
+m4_define([m4_version_compare],
+[_m4_list_cmp_raw(_m4_version_unletter([$1]), _m4_version_unletter([$2]))])
+
+
+# m4_PACKAGE_NAME
+# m4_PACKAGE_TARNAME
+# m4_PACKAGE_VERSION
+# m4_PACKAGE_STRING
+# m4_PACKAGE_BUGREPORT
+# --------------------
+# If m4sugar/version.m4 is present, then define version strings. This
+# file is optional, provided by Autoconf but absent in Bison.
+m4_sinclude([m4sugar/version.m4])
+
+
+# m4_version_prereq(VERSION, [IF-OK], [IF-NOT = FAIL])
+# ----------------------------------------------------
+# Check this Autoconf version against VERSION.
+m4_define([m4_version_prereq],
+m4_ifdef([m4_PACKAGE_VERSION],
+[[m4_if(m4_version_compare(]m4_dquote(m4_defn([m4_PACKAGE_VERSION]))[, [$1]),
+ [-1],
+ [m4_default([$3],
+ [m4_fatal([Autoconf version $1 or higher is required],
+ [63])])],
+ [$2])]],
+[[m4_fatal([m4sugar/version.m4 not found])]]))
+
+
+## ------------------ ##
+## 15. Set handling. ##
+## ------------------ ##
+
+# Autoconf likes to create arbitrarily large sets; for example, as of
+# this writing, the configure.ac for coreutils tracks a set of more
+# than 400 AC_SUBST. How do we track all of these set members,
+# without introducing duplicates? We could use m4_append_uniq, with
+# the set NAME residing in the contents of the macro NAME.
+# Unfortunately, m4_append_uniq is quadratic for set creation, because
+# it costs O(n) to search the string for each of O(n) insertions; not
+# to mention that with m4 1.4.x, even using m4_append is slow, costing
+# O(n) rather than O(1) per insertion. Other set operations, not used
+# by Autoconf but still possible by manipulation of the definition
+# tracked in macro NAME, include O(n) deletion of one element and O(n)
+# computation of set size. Because the set is exposed to the user via
+# the definition of a single macro, we cannot cache any data about the
+# set without risking the cache being invalidated by the user
+# redefining NAME.
+#
+# Can we do better? Yes, because m4 gives us an O(1) search function
+# for free: ifdef. Additionally, even m4 1.4.x gives us an O(1)
+# insert operation for free: pushdef. But to use these, we must
+# represent the set via a group of macros; to keep the set consistent,
+# we must hide the set so that the user can only manipulate it through
+# accessor macros. The contents of the set are maintained through two
+# access points; _m4_set([name]) is a pushdef stack of values in the
+# set, useful for O(n) traversal of the set contents; while the
+# existence of _m4_set([name],value) with no particular value is
+# useful for O(1) querying of set membership. And since the user
+# cannot externally manipulate the set, we are free to add additional
+# caching macros for other performance improvements. Deletion can be
+# O(1) per element rather than O(n), by reworking the definition of
+# _m4_set([name],value) to be 0 or 1 based on current membership, and
+# adding _m4_set_cleanup(name) to defer the O(n) cleanup of
+# _m4_set([name]) until we have another reason to do an O(n)
+# traversal. The existence of _m4_set_cleanup(name) can then be used
+# elsewhere to determine if we must dereference _m4_set([name],value),
+# or assume that definition implies set membership. Finally, size can
+# be tracked in an O(1) fashion with _m4_set_size(name).
+#
+# The quoting in _m4_set([name],value) is chosen so that there is no
+# ambiguity with a set whose name contains a comma, and so that we can
+# supply the value via _m4_defn([_m4_set([name])]) without needing any
+# quote manipulation.
+
+# m4_set_add(SET, VALUE, [IF-UNIQ], [IF-DUP])
+# -------------------------------------------
+# Add VALUE as an element of SET. Expand IF-UNIQ on the first
+# addition, and IF-DUP if it is already in the set. Addition of one
+# element is O(1), such that overall set creation is O(n).
+#
+# We do not want to add a duplicate for a previously deleted but
+# unpruned element, but it is just as easy to check existence directly
+# as it is to query _m4_set_cleanup($1).
+m4_define([m4_set_add],
+[m4_ifdef([_m4_set([$1],$2)],
+ [m4_if(m4_indir([_m4_set([$1],$2)]), [0],
+ [m4_define([_m4_set([$1],$2)],
+ [1])_m4_set_size([$1], [m4_incr])$3], [$4])],
+ [m4_define([_m4_set([$1],$2)],
+ [1])m4_pushdef([_m4_set([$1])],
+ [$2])_m4_set_size([$1], [m4_incr])$3])])
+
+# m4_set_add_all(SET, VALUE...)
+# -----------------------------
+# Add each VALUE into SET. This is O(n) in the number of VALUEs, and
+# can be faster than calling m4_set_add for each VALUE.
+#
+# Implement two recursion helpers; the check variant is slower but
+# handles the case where an element has previously been removed but
+# not pruned. The recursion helpers ignore their second argument, so
+# that we can use the faster m4_shift2 and 2 arguments, rather than
+# _m4_shift2 and one argument, as the signal to end recursion.
+#
+# Please keep foreach.m4 in sync with any adjustments made here.
+m4_define([m4_set_add_all],
+[m4_define([_m4_set_size($1)], m4_eval(m4_set_size([$1])
+ + m4_len(m4_ifdef([_m4_set_cleanup($1)], [_$0_check], [_$0])([$1], $@))))])
+
+m4_define([_m4_set_add_all],
+[m4_if([$#], [2], [],
+ [m4_ifdef([_m4_set([$1],$3)], [],
+ [m4_define([_m4_set([$1],$3)], [1])m4_pushdef([_m4_set([$1])],
+ [$3])-])$0([$1], m4_shift2($@))])])
+
+m4_define([_m4_set_add_all_check],
+[m4_if([$#], [2], [],
+ [m4_set_add([$1], [$3])$0([$1], m4_shift2($@))])])
+
+# m4_set_contains(SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+# ------------------------------------------------------
+# Expand IF-PRESENT if SET contains VALUE, otherwise expand IF-ABSENT.
+# This is always O(1).
+m4_define([m4_set_contains],
+[m4_ifdef([_m4_set_cleanup($1)],
+ [m4_if(m4_ifdef([_m4_set([$1],$2)],
+ [m4_indir([_m4_set([$1],$2)])], [0]), [1], [$3], [$4])],
+ [m4_ifdef([_m4_set([$1],$2)], [$3], [$4])])])
+
+# m4_set_contents(SET, [SEP])
+# ---------------------------
+# Expand to a single string containing all the elements in SET,
+# separated by SEP, without modifying SET. No provision is made for
+# disambiguating set elements that contain non-empty SEP as a
+# sub-string, or for recognizing a set that contains only the empty
+# string. Order of the output is not guaranteed. If any elements
+# have been previously removed from the set, this action will prune
+# the unused memory. This is O(n) in the size of the set before
+# pruning.
+#
+# Use _m4_popdef for speed. The existence of _m4_set_cleanup($1)
+# determines which version of _1 helper we use.
+m4_define([m4_set_contents],
+[m4_set_map_sep([$1], [], [], [[$2]])])
+
+# _m4_set_contents_1(SET)
+# _m4_set_contents_1c(SET)
+# _m4_set_contents_2(SET, [PRE], [POST], [SEP])
+# ---------------------------------------------
+# Expand to a list of quoted elements currently in the set, each
+# surrounded by PRE and POST, and moving SEP in front of PRE on
+# recursion. To avoid nesting limit restrictions, the algorithm must
+# be broken into two parts; _1 destructively copies the stack in
+# reverse into _m4_set_($1), producing no output; then _2
+# destructively copies _m4_set_($1) back into the stack in reverse.
+# If no elements were deleted, then this visits the set in the order
+# that elements were inserted. Behavior is undefined if PRE/POST/SEP
+# tries to recursively list or modify SET in any way other than
+# calling m4_set_remove on the current element. Use _1 if all entries
+# in the stack are guaranteed to be in the set, and _1c to prune
+# removed entries. Uses _m4_defn and _m4_popdef for speed.
+m4_define([_m4_set_contents_1],
+[_m4_stack_reverse([_m4_set([$1])], [_m4_set_($1)])])
+
+m4_define([_m4_set_contents_1c],
+[m4_ifdef([_m4_set([$1])],
+ [m4_set_contains([$1], _m4_defn([_m4_set([$1])]),
+ [m4_pushdef([_m4_set_($1)], _m4_defn([_m4_set([$1])]))],
+ [_m4_popdef([_m4_set([$1],]_m4_defn(
+ [_m4_set([$1])])[)])])_m4_popdef([_m4_set([$1])])$0([$1])],
+ [_m4_popdef([_m4_set_cleanup($1)])])])
+
+m4_define([_m4_set_contents_2],
+[_m4_stack_reverse([_m4_set_($1)], [_m4_set([$1])],
+ [$2[]_m4_defn([_m4_set_($1)])$3], [$4[]])])
+
+# m4_set_delete(SET)
+# ------------------
+# Delete all elements in SET, and reclaim any memory occupied by the
+# set. This is O(n) in the set size.
+#
+# Use _m4_defn and _m4_popdef for speed.
+m4_define([m4_set_delete],
+[m4_ifdef([_m4_set([$1])],
+ [_m4_popdef([_m4_set([$1],]_m4_defn([_m4_set([$1])])[)],
+ [_m4_set([$1])])$0([$1])],
+ [m4_ifdef([_m4_set_cleanup($1)],
+ [_m4_popdef([_m4_set_cleanup($1)])])m4_ifdef(
+ [_m4_set_size($1)],
+ [_m4_popdef([_m4_set_size($1)])])])])
+
+# m4_set_difference(SET1, SET2)
+# -----------------------------
+# Produce a LIST of quoted elements that occur in SET1 but not SET2.
+# Output a comma prior to any elements, to distinguish the empty
+# string from no elements. This can be directly used as a series of
+# arguments, such as for m4_join, or wrapped inside quotes for use in
+# m4_foreach. Order of the output is not guaranteed.
+#
+# Short-circuit the idempotence relation.
+m4_define([m4_set_difference],
+[m4_if([$1], [$2], [], [m4_set_map_sep([$1], [_$0([$2],], [)])])])
+
+m4_define([_m4_set_difference],
+[m4_set_contains([$1], [$2], [], [,[$2]])])
+
+# m4_set_dump(SET, [SEP])
+# -----------------------
+# Expand to a single string containing all the elements in SET,
+# separated by SEP, then delete SET. In general, if you only need to
+# list the contents once, this is faster than m4_set_contents. No
+# provision is made for disambiguating set elements that contain
+# non-empty SEP as a sub-string. Order of the output is not
+# guaranteed. This is O(n) in the size of the set before pruning.
+#
+# Use _m4_popdef for speed. Use existence of _m4_set_cleanup($1) to
+# decide if more expensive recursion is needed.
+m4_define([m4_set_dump],
+[m4_ifdef([_m4_set_size($1)],
+ [_m4_popdef([_m4_set_size($1)])])m4_ifdef([_m4_set_cleanup($1)],
+ [_$0_check], [_$0])([$1], [], [$2])])
+
+# _m4_set_dump(SET, [SEP], [PREP])
+# _m4_set_dump_check(SET, [SEP], [PREP])
+# --------------------------------------
+# Print SEP and the current element, then delete the element and
+# recurse with empty SEP changed to PREP. The check variant checks
+# whether the element has been previously removed. Use _m4_defn and
+# _m4_popdef for speed.
+m4_define([_m4_set_dump],
+[m4_ifdef([_m4_set([$1])],
+ [[$2]_m4_defn([_m4_set([$1])])_m4_popdef([_m4_set([$1],]_m4_defn(
+ [_m4_set([$1])])[)], [_m4_set([$1])])$0([$1], [$2$3])])])
+
+m4_define([_m4_set_dump_check],
+[m4_ifdef([_m4_set([$1])],
+ [m4_set_contains([$1], _m4_defn([_m4_set([$1])]),
+ [[$2]_m4_defn([_m4_set([$1])])])_m4_popdef(
+ [_m4_set([$1],]_m4_defn([_m4_set([$1])])[)],
+ [_m4_set([$1])])$0([$1], [$2$3])],
+ [_m4_popdef([_m4_set_cleanup($1)])])])
+
+# m4_set_empty(SET, [IF-EMPTY], [IF-ELEMENTS])
+# --------------------------------------------
+# Expand IF-EMPTY if SET has no elements, otherwise IF-ELEMENTS.
+m4_define([m4_set_empty],
+[m4_ifdef([_m4_set_size($1)],
+ [m4_if(m4_indir([_m4_set_size($1)]), [0], [$2], [$3])], [$2])])
+
+# m4_set_foreach(SET, VAR, ACTION)
+# --------------------------------
+# For each element of SET, define VAR to the element and expand
+# ACTION. ACTION should not recursively list SET's contents, add
+# elements to SET, nor delete any element from SET except the one
+# currently in VAR. The order that the elements are visited in is not
+# guaranteed. This is faster than the corresponding m4_foreach([VAR],
+# m4_indir([m4_dquote]m4_set_listc([SET])), [ACTION])
+m4_define([m4_set_foreach],
+[m4_pushdef([$2])m4_set_map_sep([$1], [m4_define([$2],], [)$3])])
+
+# m4_set_intersection(SET1, SET2)
+# -------------------------------
+# Produce a LIST of quoted elements that occur in both SET1 or SET2.
+# Output a comma prior to any elements, to distinguish the empty
+# string from no elements. This can be directly used as a series of
+# arguments, such as for m4_join, or wrapped inside quotes for use in
+# m4_foreach. Order of the output is not guaranteed.
+#
+# Iterate over the smaller set, and short-circuit the idempotence
+# relation.
+m4_define([m4_set_intersection],
+[m4_if([$1], [$2], [m4_set_listc([$1])],
+ m4_eval(m4_set_size([$2]) < m4_set_size([$1])), [1], [$0([$2], [$1])],
+ [m4_set_map_sep([$1], [_$0([$2],], [)])])])
+
+m4_define([_m4_set_intersection],
+[m4_set_contains([$1], [$2], [,[$2]])])
+
+# m4_set_list(SET)
+# m4_set_listc(SET)
+# -----------------
+# Produce a LIST of quoted elements of SET. This can be directly used
+# as a series of arguments, such as for m4_join or m4_set_add_all, or
+# wrapped inside quotes for use in m4_foreach or m4_map. With
+# m4_set_list, there is no way to distinguish an empty set from a set
+# containing only the empty string; with m4_set_listc, a leading comma
+# is output if there are any elements.
+m4_define([m4_set_list],
+[m4_set_map_sep([$1], [], [], [,])])
+
+m4_define([m4_set_listc],
+[m4_set_map_sep([$1], [,])])
+
+# m4_set_map(SET, ACTION)
+# -----------------------
+# For each element of SET, expand ACTION with a single argument of the
+# current element. ACTION should not recursively list SET's contents,
+# add elements to SET, nor delete any element from SET except the one
+# passed as an argument. The order that the elements are visited in
+# is not guaranteed. This is faster than either of the corresponding
+# m4_map_args([ACTION]m4_set_listc([SET]))
+# m4_set_foreach([SET], [VAR], [ACTION(m4_defn([VAR]))])
+m4_define([m4_set_map],
+[m4_set_map_sep([$1], [$2(], [)])])
+
+# m4_set_map_sep(SET, [PRE], [POST], [SEP])
+# -----------------------------------------
+# For each element of SET, expand PRE[value]POST[], and expand SEP
+# between elements.
+m4_define([m4_set_map_sep],
+[m4_ifdef([_m4_set_cleanup($1)], [_m4_set_contents_1c],
+ [_m4_set_contents_1])([$1])_m4_set_contents_2($@)])
+
+# m4_set_remove(SET, VALUE, [IF-PRESENT], [IF-ABSENT])
+# ----------------------------------------------------
+# If VALUE is an element of SET, delete it and expand IF-PRESENT.
+# Otherwise expand IF-ABSENT. Deleting a single value is O(1),
+# although it leaves memory occupied until the next O(n) traversal of
+# the set which will compact the set.
+#
+# Optimize if the element being removed is the most recently added,
+# since defining _m4_set_cleanup($1) slows down so many other macros.
+# In particular, this plays well with m4_set_foreach and m4_set_map.
+m4_define([m4_set_remove],
+[m4_set_contains([$1], [$2], [_m4_set_size([$1],
+ [m4_decr])m4_if(_m4_defn([_m4_set([$1])]), [$2],
+ [_m4_popdef([_m4_set([$1],$2)], [_m4_set([$1])])],
+ [m4_define([_m4_set_cleanup($1)])m4_define(
+ [_m4_set([$1],$2)], [0])])$3], [$4])])
+
+# m4_set_size(SET)
+# ----------------
+# Expand to the number of elements currently in SET. This operation
+# is O(1), and thus more efficient than m4_count(m4_set_list([SET])).
+m4_define([m4_set_size],
+[m4_ifdef([_m4_set_size($1)], [m4_indir([_m4_set_size($1)])], [0])])
+
+# _m4_set_size(SET, ACTION)
+# -------------------------
+# ACTION must be either m4_incr or m4_decr, and the size of SET is
+# changed accordingly. If the set is empty, ACTION must not be
+# m4_decr.
+m4_define([_m4_set_size],
+[m4_define([_m4_set_size($1)],
+ m4_ifdef([_m4_set_size($1)], [$2(m4_indir([_m4_set_size($1)]))],
+ [1]))])
+
+# m4_set_union(SET1, SET2)
+# ------------------------
+# Produce a LIST of double quoted elements that occur in either SET1
+# or SET2, without duplicates. Output a comma prior to any elements,
+# to distinguish the empty string from no elements. This can be
+# directly used as a series of arguments, such as for m4_join, or
+# wrapped inside quotes for use in m4_foreach. Order of the output is
+# not guaranteed.
+#
+# We can rely on the fact that m4_set_listc prunes SET1, so we don't
+# need to check _m4_set([$1],element) for 0. Short-circuit the
+# idempotence relation.
+m4_define([m4_set_union],
+[m4_set_listc([$1])m4_if([$1], [$2], [],
+ [m4_set_map_sep([$2], [_$0([$1],], [)])])])
+
+m4_define([_m4_set_union],
+[m4_ifdef([_m4_set([$1],$2)], [], [,[$2]])])
+
+
+## ------------------- ##
+## 16. File handling. ##
+## ------------------- ##
+
+
+# It is a real pity that M4 comes with no macros to bind a diversion
+# to a file. So we have to deal without, which makes us a lot more
+# fragile than we should.
+
+
+# m4_file_append(FILE-NAME, CONTENT)
+# ----------------------------------
+m4_define([m4_file_append],
+[m4_syscmd([cat >>$1 <<_m4eof
+$2
+_m4eof
+])
+m4_if(m4_sysval, [0], [],
+ [m4_fatal([$0: cannot write: $1])])])
+
+
+
+## ------------------------ ##
+## 17. Setting M4sugar up. ##
+## ------------------------ ##
+
+# _m4_divert_diversion should be defined.
+m4_divert_push([KILL])
+
+# m4_init
+# -------
+# Initialize the m4sugar language.
+m4_define([m4_init],
+[# All the M4sugar macros start with `m4_', except `dnl' kept as is
+# for sake of simplicity.
+m4_pattern_forbid([^_?m4_])
+m4_pattern_forbid([^dnl$])
+
+# If __m4_version__ is defined, we assume that we are being run by M4
+# 1.6 or newer, thus $@ recursion is linear, and debugmode(+do)
+# is available for faster checks of dereferencing undefined macros
+# and forcing dumpdef to print to stderr regardless of debugfile.
+# But if it is missing, we assume we are being run by M4 1.4.x, that
+# $@ recursion is quadratic, and that we need foreach-based
+# replacement macros. Also, m4 prior to 1.4.8 loses track of location
+# during m4wrap text; __line__ should never be 0.
+#
+# Use the raw builtin to avoid tripping up include tracing.
+# Meanwhile, avoid m4_copy, since it temporarily undefines m4_defn.
+m4_ifdef([__m4_version__],
+[m4_debugmode([+do])
+m4_define([m4_defn], _m4_defn([_m4_defn]))
+m4_define([m4_dumpdef], _m4_defn([_m4_dumpdef]))
+m4_define([m4_popdef], _m4_defn([_m4_popdef]))
+m4_define([m4_undefine], _m4_defn([_m4_undefine]))],
+[m4_builtin([include], [m4sugar/foreach.m4])
+m4_wrap_lifo([m4_if(__line__, [0], [m4_pushdef([m4_location],
+]]m4_dquote(m4_dquote(m4_dquote(__file__:__line__)))[[)])])])
+
+# Rewrite the first entry of the diversion stack.
+m4_divert([KILL])
+
+# Check the divert push/pop perfect balance.
+# Some users are prone to also use m4_wrap to register last-minute
+# m4_divert_text; so after our diversion cleanups, we restore
+# KILL as the bottom of the diversion stack.
+m4_wrap([m4_popdef([_m4_divert_diversion])m4_ifdef(
+ [_m4_divert_diversion], [m4_fatal([$0: unbalanced m4_divert_push:
+]m4_divert_stack)])_m4_popdef([_m4_divert_stack])m4_divert_push([KILL])])
+])
diff --git a/m4/autobuild.m4 b/m4/autobuild.m4
new file mode 100644
index 0000000..284dc60
--- /dev/null
+++ b/m4/autobuild.m4
@@ -0,0 +1,39 @@
+# autobuild.m4 serial 7
+dnl Copyright (C) 2004, 2006-2012 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# Usage: AB_INIT([MODE]).
+AC_DEFUN([AB_INIT],
+[
+ AC_REQUIRE([AC_CANONICAL_BUILD])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ if test -z "$AB_PACKAGE"; then
+ AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE}
+ fi
+ AC_MSG_NOTICE([autobuild project... $AB_PACKAGE])
+
+ if test -z "$AB_VERSION"; then
+ AB_VERSION=${PACKAGE_VERSION:-$VERSION}
+ fi
+ AC_MSG_NOTICE([autobuild revision... $AB_VERSION])
+
+ hostname=`hostname`
+ if test "$hostname"; then
+ AC_MSG_NOTICE([autobuild hostname... $hostname])
+ fi
+
+ ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])])
+
+ date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ`
+ if test "$?" != 0; then
+ date=`date`
+ fi
+ if test "$date"; then
+ AC_MSG_NOTICE([autobuild timestamp... $date])
+ fi
+])
diff --git a/m4/m4.m4 b/m4/m4.m4
new file mode 100644
index 0000000..a19af67
--- /dev/null
+++ b/m4/m4.m4
@@ -0,0 +1,82 @@
+# m4.m4 serial 12
+
+# Copyright (C) 2000, 2006-2012 Free Software Foundation, Inc.
+
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without warranty of any kind.
+
+# AC_PROG_GNU_M4
+# --------------
+# Check for GNU M4, at least 1.4.6 (all earlier versions had bugs in
+# trace support and regexp support):
+# http://lists.gnu.org/archive/html/bug-gnu-utils/2006-11/msg00096.html
+# http://lists.gnu.org/archive/html/bug-autoconf/2009-07/msg00023.html
+# Also, check whether --error-output (through 1.4.x) or --debugfile (2.0)
+# is supported, and AC_SUBST M4_DEBUGFILE accordingly.
+# Also avoid versions of m4 that trigger strstr bugs.
+AC_DEFUN([AC_PROG_GNU_M4],
+ [AC_ARG_VAR([M4], [Location of GNU M4 1.4.6 or later. Defaults to the first
+ program of `m4', `gm4', or `gnum4' on PATH that meets Autoconf needs.])
+ AC_CACHE_CHECK([for GNU M4 that supports accurate traces], [ac_cv_path_M4],
+ [rm -f conftest.m4f
+ac_had_posixly_correct=${POSIXLY_CORRECT:+yes}
+AS_UNSET([POSIXLY_CORRECT])
+AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4 gnum4],
+ [dnl Creative quoting here to avoid raw dnl and ifdef in configure.
+ # Root out GNU M4 1.4.5, as well as non-GNU m4 that ignore -t, -F.
+ # Root out GNU M4 1.4.15 with buggy false negative replacement strstr.
+ # Root out Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 with buggy
+ # false positive strstr.
+ ac_snippet=change'quote(<,>)in''dir(<if''def>,mac,bug)'
+ ac_snippet=${ac_snippet}pat'subst(a,\(b\)\|\(a\),\1)d'nl
+ ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(..wi.d.,.d.),-1,bug)'
+ ac_snippet=${ac_snippet}${as_nl}if'else(in''dex(dnl
+;:11-:12-:12-:12-:12-:12-:12-:12-:12.:12.:12.:12.:12.:12.:12.:12.:12-,dnl
+:12-:12-:12-:12-:12-:12-:12-:12-),-1,,strstr-bug2)'
+ test -z "`$ac_path_M4 -F conftest.m4f </dev/null 2>&1`" \
+ && test -z "`AS_ECHO([$ac_snippet]) | $ac_path_M4 --trace=mac 2>&1`" \
+ && test -f conftest.m4f \
+ && ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:
+ rm -f conftest.m4f],
+ [AC_MSG_ERROR([no acceptable m4 could be found in \$PATH.
+GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
+GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
+Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.])])])
+ M4=$ac_cv_path_M4
+ AC_CACHE_CHECK([whether $ac_cv_path_M4 accepts --gnu],
+ [ac_cv_prog_gnu_m4_gnu],
+ [case `$M4 --help < /dev/null 2>&1` in
+ *--gnu*) ac_cv_prog_gnu_m4_gnu=yes ;;
+ *) ac_cv_prog_gnu_m4_gnu=no ;;
+ esac])
+ if test "$ac_cv_prog_gnu_m4_gnu" = yes; then
+ M4_GNU=--gnu
+ else
+ M4_GNU=
+ fi
+ AC_SUBST([M4_GNU])
+ if test x$ac_had_posixly_correct = xyes; then
+ POSIXLY_CORRECT=:
+ if test $ac_cv_prog_gnu_m4_gnu = no; then
+ AC_MSG_WARN([the version of M4 that was found does not support -g])
+ AC_MSG_WARN([using it with POSIXLY_CORRECT set may cause problems])
+ fi
+ fi
+ AC_CACHE_CHECK([how m4 supports trace files], [ac_cv_prog_gnu_m4_debugfile],
+ [case `$M4 --help < /dev/null 2>&1` in
+ *debugfile*) ac_cv_prog_gnu_m4_debugfile=--debugfile ;;
+ *) ac_cv_prog_gnu_m4_debugfile=--error-output ;;
+ esac])
+ AC_SUBST([M4_DEBUGFILE], [$ac_cv_prog_gnu_m4_debugfile])
+])
+
+# Compatibility for bootstrapping with Autoconf 2.61.
+dnl FIXME - replace this with AC_PREREQ([2.62]) after the release.
+# AC_PATH_PROGS_FEATURE_CHECK was added the same time the slightly broken,
+# undocumented _AC_PATH_PROG_FEATURE_CHECK was deleted.
+m4_ifndef([AC_PATH_PROGS_FEATURE_CHECK],
+ [m4_define([AC_PATH_PROGS_FEATURE_CHECK],
+ [_AC_PATH_PROG_FEATURE_CHECK([$1], [$2], [$3], [$5])
+])])
diff --git a/m4/make-case.m4 b/m4/make-case.m4
new file mode 100644
index 0000000..d784e4d
--- /dev/null
+++ b/m4/make-case.m4
@@ -0,0 +1,29 @@
+# make-case.m4 serial 1
+
+# Copyright (C) 2008-2012 Free Software Foundation, Inc.
+
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the notice and
+# this notice are preserved. This file is offered as-is, without
+# warranty of any kind.
+
+# AC_PROG_MAKE_CASE_SENSITIVE
+# ---------------------------
+# Checks whether make is configured to be case insensitive; if yes,
+# sets AM_CONDITIONAL MAKE_CASE_SENSITIVE.
+#
+AC_DEFUN([AC_PROG_MAKE_CASE_SENSITIVE],
+[AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_CACHE_CHECK([whether ${MAKE-make} is case sensitive],
+[ac_cv_prog_make_${ac_make}_case],
+[echo all: >conftest.make
+if ${MAKE-make} -f conftest.make ALL >/dev/null 2>&1; then
+ ac_res=no
+else
+ ac_res=yes
+fi
+eval ac_cv_prog_make_${ac_make}_case=$ac_res
+rm -f conftest.make])
+AM_CONDITIONAL([MAKE_CASE_SENSITIVE],
+ [eval test \$ac_cv_prog_make_${ac_make}_case = yes])
+])
diff --git a/maint.mk b/maint.mk
new file mode 100644
index 0000000..1c7af03
--- /dev/null
+++ b/maint.mk
@@ -0,0 +1,1541 @@
+# -*-Makefile-*-
+# This Makefile fragment tries to be general-purpose enough to be
+# used by many projects via the gnulib maintainer-makefile module.
+
+## Copyright (C) 2001-2012 Free Software Foundation, Inc.
+##
+## This program is free software: you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This is reported not to work with make-3.79.1
+# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+ME := maint.mk
+
+# Diagnostic for continued use of deprecated variable.
+# Remove in 2013
+ifneq ($(build_aux),)
+ $(error "$(ME): \
+set $$(_build-aux) relative to $$(srcdir) instead of $$(build_aux)")
+endif
+
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+ $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null \
+ && printf %s --rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+GIT = git
+VC = $(GIT)
+
+VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir)
+
+# You can override this variable in cfg.mk to set your own regexp
+# matching files to ignore.
+VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$
+
+# This is to preprocess robustly the output of $(VC_LIST), so that even
+# when $(srcdir) is a pathological name like "....", the leading sed command
+# removes only the intended prefix.
+_dot_escaped_srcdir = $(subst .,\.,$(srcdir))
+
+# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only
+# when $(srcdir) is not ".".
+ifeq ($(srcdir),.)
+_prepend_srcdir_prefix =
+else
+_prepend_srcdir_prefix = | sed 's|^|$(srcdir)/|'
+endif
+
+# In order to be able to consistently filter "."-relative names,
+# (i.e., with no $(srcdir) prefix), this definition is careful to
+# remove any $(srcdir) prefix, and to restore what it removes.
+_sc_excl = \
+ $(if $(exclude_file_name_regexp--$@),$(exclude_file_name_regexp--$@),^$$)
+VC_LIST_EXCEPT = \
+ $(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \
+ | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \
+ else grep -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \
+ | grep -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \
+ $(_prepend_srcdir_prefix)
+
+ifeq ($(origin prev_version_file), undefined)
+ prev_version_file = $(srcdir)/.prev-version
+endif
+
+PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null)
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION))
+
+ifeq ($(VC),$(GIT))
+this-vc-tag = v$(VERSION)
+this-vc-tag-regexp = v$(VERSION_REGEXP)
+else
+tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+tag-this-version = $(subst .,_,$(VERSION))
+this-vc-tag = $(tag-package)-$(tag-this-version)
+this-vc-tag-regexp = $(this-vc-tag)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Old releases are stored here.
+release_archive_dir ?= ../release
+
+# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right.
+# Use alpha.gnu.org for alpha and beta releases.
+# Use ftp.gnu.org for stable releases.
+gnu_ftp_host-alpha = alpha.gnu.org
+gnu_ftp_host-beta = alpha.gnu.org
+gnu_ftp_host-stable = ftp.gnu.org
+gnu_rel_host ?= $(gnu_ftp_host-$(RELEASE_TYPE))
+
+ifeq ($(gnu_rel_host),ftp.gnu.org)
+url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE)
+else
+url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE)
+endif
+
+# Override this in cfg.mk if you are using a different format in your
+# NEWS file.
+today = $(shell date +%Y-%m-%d)
+
+# Select which lines of NEWS are searched for $(news-check-regexp).
+# This is a sed line number spec. The default says that we search
+# lines 1..10 of NEWS for $(news-check-regexp).
+# If you want to search only line 3 or only lines 20-22, use "3" or "20,22".
+news-check-lines-spec ?= 1,10
+news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)'
+
+# Prevent programs like 'sort' from considering distinct strings to be equal.
+# Doing it here saves us from having to set LC_ALL elsewhere in this file.
+export LC_ALL = C
+
+## --------------- ##
+## Sanity checks. ##
+## --------------- ##
+
+_cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(srcdir)/cfg.mk')
+
+# Collect the names of rules starting with 'sc_'.
+syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \
+ $(srcdir)/$(ME) $(_cfg_mk)))
+.PHONY: $(syntax-check-rules)
+
+ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0)
+local-checks-available += $(syntax-check-rules)
+else
+local-checks-available += no-vc-detected
+no-vc-detected:
+ @echo "No version control files detected; skipping syntax check"
+endif
+.PHONY: $(local-checks-available)
+
+# Arrange to print the name of each syntax-checking rule just before running it.
+$(syntax-check-rules): %: %.m
+sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules))
+.PHONY: $(sc_m_rules_)
+$(sc_m_rules_):
+ @echo $(patsubst sc_%.m, %, $@)
+ @date +%s.%N > .sc-start-$(basename $@)
+
+# Compute and print the elapsed time for each syntax-check rule.
+sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules))
+.PHONY: $(sc_z_rules_)
+$(sc_z_rules_): %.z: %
+ @end=$$(date +%s.%N); \
+ start=$$(cat .sc-start-$*); \
+ rm -f .sc-start-$*; \
+ awk -v s=$$start -v e=$$end \
+ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
+
+# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
+# that computes and prints elapsed time.
+local-check := \
+ $(patsubst sc_%, sc_%.z, \
+ $(filter-out $(local-checks-to-skip), $(local-checks-available)))
+
+syntax-check: $(local-check)
+
+# _sc_search_regexp
+#
+# This macro searches for a given construct in the selected files and
+# then takes some action.
+#
+# Parameters (shell variables):
+#
+# prohibit | require
+#
+# Regular expression (ERE) denoting either a forbidden construct
+# or a required construct. Those arguments are exclusive.
+#
+# exclude
+#
+# Regular expression (ERE) denoting lines to ignore that matched
+# a prohibit construct. For example, this can be used to exclude
+# comments that mention why the nearby code uses an alternative
+# construct instead of the simpler prohibited construct.
+#
+# in_vc_files | in_files
+#
+# grep-E-style regexp denoting the files to check. If no files
+# are specified the default are all the files that are under
+# version control.
+#
+# containing | non_containing
+#
+# Select the files (non) containing strings matching this regexp.
+# If both arguments are specified then CONTAINING takes
+# precedence.
+#
+# with_grep_options
+#
+# Extra options for grep.
+#
+# ignore_case
+#
+# Ignore case.
+#
+# halt
+#
+# Message to display before to halting execution.
+#
+# Finally, you may exempt files based on an ERE matching file names.
+# For example, to exempt from the sc_space_tab check all files with the
+# .diff suffix, set this Make variable:
+#
+# exclude_file_name_regexp--sc_space_tab = \.diff$
+#
+# Note that while this functionality is mostly inherited via VC_LIST_EXCEPT,
+# when filtering by name via in_files, we explicitly filter out matching
+# names here as well.
+
+# Initialize each, so that envvar settings cannot interfere.
+export require =
+export prohibit =
+export exclude =
+export in_vc_files =
+export in_files =
+export containing =
+export non_containing =
+export halt =
+export with_grep_options =
+
+# By default, _sc_search_regexp does not ignore case.
+export ignore_case =
+_ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :)
+
+define _sc_say_and_exit
+ dummy=; : so we do not need a semicolon before each use; \
+ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; };
+endef
+
+define _sc_search_regexp
+ dummy=; : so we do not need a semicolon before each use; \
+ \
+ : Check arguments; \
+ test -n "$$prohibit" && test -n "$$require" \
+ && { msg='Cannot specify both prohibit and require' \
+ $(_sc_say_and_exit) } || :; \
+ test -z "$$prohibit" && test -z "$$require" \
+ && { msg='Should specify either prohibit or require' \
+ $(_sc_say_and_exit) } || :; \
+ test -z "$$prohibit" && test -n "$$exclude" \
+ && { msg='Use of exclude requires a prohibit pattern' \
+ $(_sc_say_and_exit) } || :; \
+ test -n "$$in_vc_files" && test -n "$$in_files" \
+ && { msg='Cannot specify both in_vc_files and in_files' \
+ $(_sc_say_and_exit) } || :; \
+ test "x$$halt" != x \
+ || { msg='halt not defined' $(_sc_say_and_exit) }; \
+ \
+ : Filter by file name; \
+ if test -n "$$in_files"; then \
+ files=$$(find $(srcdir) | grep -E "$$in_files" \
+ | grep -Ev '$(exclude_file_name_regexp--$@)'); \
+ else \
+ files=$$($(VC_LIST_EXCEPT)); \
+ if test -n "$$in_vc_files"; then \
+ files=$$(echo "$$files" | grep -E "$$in_vc_files"); \
+ fi; \
+ fi; \
+ \
+ : Filter by content; \
+ test -n "$$files" && test -n "$$containing" \
+ && { files=$$(grep -l "$$containing" $$files); } || :; \
+ test -n "$$files" && test -n "$$non_containing" \
+ && { files=$$(grep -vl "$$non_containing" $$files); } || :; \
+ \
+ : Check for the construct; \
+ if test -n "$$files"; then \
+ if test -n "$$prohibit"; then \
+ grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \
+ | grep -vE "$${exclude:-^$$}" \
+ && { msg="$$halt" $(_sc_say_and_exit) } || :; \
+ else \
+ grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \
+ | grep . \
+ && { msg="$$halt" $(_sc_say_and_exit) } || :; \
+ fi \
+ else :; \
+ fi || :;
+endef
+
+sc_avoid_if_before_free:
+ @$(srcdir)/$(_build-aux)/useless-if-before-free \
+ $(useless_free_options) \
+ $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) && \
+ { echo '$(ME): found useless "if" before "free" above' 1>&2; \
+ exit 1; } || :
+
+sc_cast_of_argument_to_free:
+ @prohibit='\<free *\( *\(' halt="don't cast free argument" \
+ $(_sc_search_regexp)
+
+sc_cast_of_x_alloc_return_value:
+ @prohibit='\*\) *x(m|c|re)alloc\>' \
+ halt="don't cast x*alloc return value" \
+ $(_sc_search_regexp)
+
+sc_cast_of_alloca_return_value:
+ @prohibit='\*\) *alloca\>' \
+ halt="don't cast alloca return value" \
+ $(_sc_search_regexp)
+
+sc_space_tab:
+ @prohibit='[ ] ' \
+ halt='found SPACE-TAB sequence; remove the SPACE' \
+ $(_sc_search_regexp)
+
+# Don't use *scanf or the old ato* functions in "real" code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+ @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\(' \
+ halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \
+ $(_sc_search_regexp)
+
+# Use STREQ rather than comparing strcmp == 0, or != 0.
+sp_ = strcmp *\(.+\)
+sc_prohibit_strcmp:
+ @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \
+ exclude=':# *define STRN?EQ\(' \
+ halt='$(ME): replace strcmp calls above with STREQ/STRNEQ' \
+ $(_sc_search_regexp)
+
+# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
+# Convert all uses automatically, via these two commands:
+# git grep -l '\<exit *(1)' \
+# | grep -vEf .x-sc_prohibit_magic_number_exit \
+# | xargs --no-run-if-empty \
+# perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/'
+# git grep -l '\<exit *(0)' \
+# | grep -vEf .x-sc_prohibit_magic_number_exit \
+# | xargs --no-run-if-empty \
+# perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/'
+sc_prohibit_magic_number_exit:
+ @prohibit='(^|[^.])\<(usage|exit) ?\([0-9]|\<error ?\([1-9][0-9]*,' \
+ halt='use EXIT_* values rather than magic number' \
+ $(_sc_search_regexp)
+
+# Using EXIT_SUCCESS as the first argument to error is misleading,
+# since when that parameter is 0, error does not exit. Use '0' instead.
+sc_error_exit_success:
+ @prohibit='error *\(EXIT_SUCCESS,' \
+ in_vc_files='\.[chly]$$' \
+ halt='found error (EXIT_SUCCESS' \
+ $(_sc_search_regexp)
+
+# "FATAL:" should be fully upper-cased in error messages
+# "WARNING:" should be fully upper-cased, or fully lower-cased
+sc_error_message_warn_fatal:
+ @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \
+ | grep -E '"Warning|"Fatal|"fatal' && \
+ { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \
+ exit 1; } || :
+
+# Error messages should not start with a capital letter
+sc_error_message_uppercase:
+ @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \
+ | grep -E '"[A-Z]' \
+ | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' && \
+ { echo '$(ME): found capitalized error message' 1>&2; \
+ exit 1; } || :
+
+# Error messages should not end with a period
+sc_error_message_period:
+ @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT)) \
+ | grep -E '[^."]\."' && \
+ { echo '$(ME): found error message ending in period' 1>&2; \
+ exit 1; } || :
+
+sc_file_system:
+ @prohibit=file''system \
+ ignore_case=1 \
+ halt='found use of "file''system"; spell it "file system"' \
+ $(_sc_search_regexp)
+
+# Don't use cpp tests of this symbol. All code assumes config.h is included.
+sc_prohibit_have_config_h:
+ @prohibit='^# *if.*HAVE''_CONFIG_H' \
+ halt='found use of HAVE''_CONFIG_H; remove' \
+ $(_sc_search_regexp)
+
+# Nearly all .c files must include <config.h>. However, we also permit this
+# via inclusion of a package-specific header, if cfg.mk specified one.
+# config_h_header must be suitable for grep -E.
+config_h_header ?= <config\.h>
+sc_require_config_h:
+ @require='^# *include $(config_h_header)' \
+ in_vc_files='\.c$$' \
+ halt='the above files do not include <config.h>' \
+ $(_sc_search_regexp)
+
+# You must include <config.h> before including any other header file.
+# This can possibly be via a package-specific header, if given by cfg.mk.
+sc_require_config_h_first:
+ @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then \
+ fail=0; \
+ for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do \
+ grep '^# *include\>' $$i | sed 1q \
+ | grep -E '^# *include $(config_h_header)' > /dev/null \
+ || { echo $$i; fail=1; }; \
+ done; \
+ test $$fail = 1 && \
+ { echo '$(ME): the above files include some other header' \
+ 'before <config.h>' 1>&2; exit 1; } || :; \
+ else :; \
+ fi
+
+sc_prohibit_HAVE_MBRTOWC:
+ @prohibit='\bHAVE_MBRTOWC\b' \
+ halt="do not use $$prohibit; it is always defined" \
+ $(_sc_search_regexp)
+
+# To use this "command" macro, you must first define two shell variables:
+# h: the header name, with no enclosing <> or ""
+# re: a regular expression that matches IFF something provided by $h is used.
+define _sc_header_without_use
+ dummy=; : so we do not need a semicolon before each use; \
+ h_esc=`echo '[<"]'"$$h"'[">]'|sed 's/\./\\\\./g'`; \
+ if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then \
+ files=$$(grep -l '^# *include '"$$h_esc" \
+ $$($(VC_LIST_EXCEPT) | grep '\.c$$')) && \
+ grep -LE "$$re" $$files | grep . && \
+ { echo "$(ME): the above files include $$h but don't use it" \
+ 1>&2; exit 1; } || :; \
+ else :; \
+ fi
+endef
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+ @h='assert.h' re='\<assert *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of close-stream.h without an actual use.
+sc_prohibit_close_stream_without_use:
+ @h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of getopt.h without an actual use.
+sc_prohibit_getopt_without_use:
+ @h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use)
+
+# Don't include quotearg.h unless you use one of its functions.
+sc_prohibit_quotearg_without_use:
+ @h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use)
+
+# Don't include quote.h unless you use one of its functions.
+sc_prohibit_quote_without_use:
+ @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_long_options_without_use:
+ @h='long-options.h' re='\<parse_long_options *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_inttostr_without_use:
+ @h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_ignore_value_without_use:
+ @h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_error_without_use:
+ @h='error.h' \
+ re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\
+ $(_sc_header_without_use)
+
+# Don't include xalloc.h unless you use one of its functions.
+# Consider these symbols:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__';
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h
+# Divide into two sets on case, and filter each through this:
+# | sort | perl -MRegexp::Assemble -le \
+# 'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g'
+# Note this was produced by the above:
+# _xa1 = \
+#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup)
+# But we can do better, in at least two ways:
+# 1) take advantage of two "dup"-suffixed strings:
+# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup)
+# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable
+# "char|[cmz]"
+# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa2 = X([CZ]|N?M)ALLOC
+sc_prohibit_xalloc_without_use:
+ @h='xalloc.h' \
+ re='\<($(_xa1)|$(_xa2)) *\('\
+ $(_sc_header_without_use)
+
+# Extract function names:
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h
+_hash_re = \
+clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning
+_hash_fn = \<($(_hash_re)) *\(
+_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\>
+sc_prohibit_hash_without_use:
+ @h='hash.h' \
+ re='$(_hash_fn)|$(_hash_struct)'\
+ $(_sc_header_without_use)
+
+sc_prohibit_cloexec_without_use:
+ @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \
+ $(_sc_header_without_use)
+
+sc_prohibit_posixver_without_use:
+ @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use)
+
+sc_prohibit_same_without_use:
+ @h='same.h' re='\<same_name *\(' $(_sc_header_without_use)
+
+sc_prohibit_hash_pjw_without_use:
+ @h='hash-pjw.h' \
+ re='\<hash_pjw\>' \
+ $(_sc_header_without_use)
+
+sc_prohibit_safe_read_without_use:
+ @h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_argmatch_without_use:
+ @h='argmatch.h' \
+ re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_canonicalize_without_use:
+ @h='canonicalize.h' \
+ re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \
+ $(_sc_header_without_use)
+
+sc_prohibit_root_dev_ino_without_use:
+ @h='root-dev-ino.h' \
+ re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_openat_without_use:
+ @h='openat.h' \
+ re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat)\>' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of c-ctype.h without an actual use.
+ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
+|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
+sc_prohibit_c_ctype_without_use:
+ @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \
+ $(_sc_header_without_use)
+
+_empty =
+_sp = $(_empty) $(_empty)
+# The following list was generated by running:
+# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
+# | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
+_sig_functions = \
+ bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \
+ sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \
+ siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \
+ sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo
+_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions)))
+# The following were extracted from "man signal.h" manually.
+_sig_types_and_consts = \
+ MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK \
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL \
+ SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE \
+ SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \
+ sigstack sigval stack_t ucontext_t
+# generated via this:
+# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70
+_sig_names = \
+ SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT \
+ SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL \
+ SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \
+ SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR \
+ SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS \
+ SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 \
+ SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW \
+ SIGXCPU SIGXFSZ
+_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts)))
+
+# Prohibit the inclusion of signal.h without an actual use.
+sc_prohibit_signal_without_use:
+ @h='signal.h' \
+ re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>' \
+ $(_sc_header_without_use)
+
+# Don't include stdio--.h unless you use one of its functions.
+sc_prohibit_stdio--_without_use:
+ @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include stdio-safer.h unless you use one of its functions.
+sc_prohibit_stdio-safer_without_use:
+ @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of strings.h without a sensible use.
+# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible.
+sc_prohibit_strings_without_use:
+ @h='strings.h' \
+ re='\<(strn?casecmp|ffs(ll)?)\>' \
+ $(_sc_header_without_use)
+
+# Get the list of symbol names with this:
+# perl -lne '/^# *define ([A-Z]\w+)\(/ and print $1' lib/intprops.h|fmt
+_intprops_names = \
+ TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT \
+ TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM \
+ INT_BITS_STRLEN_BOUND INT_STRLEN_BOUND INT_BUFSIZE_BOUND \
+ INT_ADD_RANGE_OVERFLOW INT_SUBTRACT_RANGE_OVERFLOW \
+ INT_NEGATE_RANGE_OVERFLOW INT_MULTIPLY_RANGE_OVERFLOW \
+ INT_DIVIDE_RANGE_OVERFLOW INT_REMAINDER_RANGE_OVERFLOW \
+ INT_LEFT_SHIFT_RANGE_OVERFLOW INT_ADD_OVERFLOW INT_SUBTRACT_OVERFLOW \
+ INT_NEGATE_OVERFLOW INT_MULTIPLY_OVERFLOW INT_DIVIDE_OVERFLOW \
+ INT_REMAINDER_OVERFLOW INT_LEFT_SHIFT_OVERFLOW
+_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names)))
+# Prohibit the inclusion of intprops.h without an actual use.
+sc_prohibit_intprops_without_use:
+ @h='intprops.h' \
+ re='\<($(_intprops_syms_re)) *\(' \
+ $(_sc_header_without_use)
+
+_stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t
+# Prohibit the inclusion of stddef.h without an actual use.
+sc_prohibit_stddef_without_use:
+ @h='stddef.h' \
+ re='\<($(_stddef_syms_re))\>' \
+ $(_sc_header_without_use)
+
+_de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)?
+_de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)?
+_de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen
+_dirent_syms_re = $(_de1)|$(_de2)|$(_de3)
+# Prohibit the inclusion of dirent.h without an actual use.
+sc_prohibit_dirent_without_use:
+ @h='dirent.h' \
+ re='\<($(_dirent_syms_re))\>' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of verify.h without an actual use.
+sc_prohibit_verify_without_use:
+ @h='verify.h' \
+ re='\<(verify(true|expr)?|static_assert) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include xfreopen.h unless you use one of its functions.
+sc_prohibit_xfreopen_without_use:
+ @h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use)
+
+sc_obsolete_symbols:
+ @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \
+ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \
+ $(_sc_search_regexp)
+
+# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
+
+# Each nonempty ChangeLog line must start with a year number, or a TAB.
+sc_changelog:
+ @prohibit='^[^12 ]' \
+ in_vc_files='^ChangeLog$$' \
+ halt='found unexpected prefix in a ChangeLog' \
+ $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls set_program_name.
+sc_program_name:
+ @require='set_program_name *\(m?argv\[0\]\);' \
+ in_vc_files='\.c$$' \
+ containing='\<main *(' \
+ halt='the above files do not call set_program_name' \
+ $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls bindtextdomain.
+sc_bindtextdomain:
+ @require='bindtextdomain *\(' \
+ in_vc_files='\.c$$' \
+ containing='\<main *(' \
+ halt='the above files do not call bindtextdomain' \
+ $(_sc_search_regexp)
+
+# Require that the final line of each test-lib.sh-using test be this one:
+# Exit $fail
+# Note: this test requires GNU grep's --label= option.
+Exit_witness_file ?= tests/test-lib.sh
+Exit_base := $(notdir $(Exit_witness_file))
+sc_require_test_exit_idiom:
+ @if test -f $(srcdir)/$(Exit_witness_file); then \
+ die=0; \
+ for i in $$(grep -l -F 'srcdir/$(Exit_base)' \
+ $$($(VC_LIST) tests)); do \
+ tail -n1 $$i | grep '^Exit .' > /dev/null \
+ && : || { die=1; echo $$i; } \
+ done; \
+ test $$die = 1 && \
+ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \
+ echo 1>&2 'Exit something'; \
+ exit 1; } || :; \
+ fi
+
+sc_trailing_blank:
+ @prohibit='[ ]$$' \
+ halt='found trailing blank(s)' \
+ $(_sc_search_regexp)
+
+# Match lines like the following, but where there is only one space
+# between the options and the description:
+# -D, --all-repeated[=delimit-method] print all duplicate lines\n
+longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)?
+sc_two_space_separator_in_usage:
+ @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \
+ halt='help2man requires at least two spaces between an option and its description'\
+ $(_sc_search_regexp)
+
+# A regexp matching function names like "error" that may be used
+# to emit translatable messages.
+_gl_translatable_diag_func_re ?= error
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+ @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \
+ exclude='(_|ngettext ?)\(' \
+ halt='$(ME): found unmarked diagnostic(s)' \
+ $(_sc_search_regexp)
+
+# Avoid useless parentheses like those in this example:
+# #if defined (SYMBOL) || defined (SYM2)
+sc_useless_cpp_parens:
+ @prohibit='^# *if .*defined *\(' \
+ halt='found useless parentheses in cpp directive' \
+ $(_sc_search_regexp)
+
+# List headers for which HAVE_HEADER_H is always true, assuming you are
+# using the appropriate gnulib module. CAUTION: for each "unnecessary"
+# #if HAVE_HEADER_H that you remove, be sure that your project explicitly
+# requires the gnulib module that guarantees the usability of that header.
+gl_assured_headers_ = \
+ cd $(gnulib_dir)/lib && echo *.in.h|sed 's/\.in\.h//g'
+
+# Convert the list of names to upper case, and replace each space with "|".
+az_ = abcdefghijklmnopqrstuvwxyz
+AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+gl_header_upper_case_or_ = \
+ $$($(gl_assured_headers_) \
+ | tr $(az_)/.- $(AZ_)___ \
+ | tr -s ' ' '|' \
+ )
+sc_prohibit_always_true_header_tests:
+ @or=$(gl_header_upper_case_or_); \
+ re="HAVE_($$or)_H"; \
+ prohibit='\<'"$$re"'\>' \
+ halt=$$(printf '%s\n' \
+ 'do not test the above HAVE_<header>_H symbol(s);' \
+ ' with the corresponding gnulib module, they are always true') \
+ $(_sc_search_regexp)
+
+# ==================================================================
+gl_other_headers_ ?= \
+ intprops.h \
+ openat.h \
+ stat-macros.h
+
+# Perl -lne code to extract "significant" cpp-defined symbols from a
+# gnulib header file, eliminating a few common false-positives.
+# The exempted names below are defined only conditionally in gnulib,
+# and hence sometimes must/may be defined in application code.
+gl_extract_significant_defines_ = \
+ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\
+ && $$2 !~ /(?:rpl_|_used_without_)/\
+ && $$1 !~ /^(?:NSIG|ENODATA)$$/\
+ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\
+ and print $$1
+
+# Create a list of regular expressions matching the names
+# of macros that are guaranteed to be defined by parts of gnulib.
+define def_sym_regex
+ gen_h=$(gl_generated_headers_); \
+ (cd $(gnulib_dir)/lib; \
+ for f in *.in.h $(gl_other_headers_); do \
+ test -f $$f \
+ && perl -lne '$(gl_extract_significant_defines_)' $$f; \
+ done; \
+ ) | sort -u \
+ | sed 's/^/^ *# *(define|undef) */;s/$$/\\>/'
+endef
+
+# Don't define macros that we already get from gnulib header files.
+sc_prohibit_always-defined_macros:
+ @if test -d $(gnulib_dir); then \
+ case $$(echo all: | grep -l -f - Makefile) in Makefile);; *) \
+ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \
+ esac; \
+ $(def_sym_regex) | grep -E -f - $$($(VC_LIST_EXCEPT)) \
+ && { echo '$(ME): define the above via some gnulib .h file' \
+ 1>&2; exit 1; } || :; \
+ fi
+# ==================================================================
+
+# Prohibit checked in backup files.
+sc_prohibit_backup_files:
+ @$(VC_LIST) | grep '~$$' && \
+ { echo '$(ME): found version controlled backup file' 1>&2; \
+ exit 1; } || :
+
+# Require the latest GPL.
+sc_GPL_version:
+ @prohibit='either ''version [^3]' \
+ halt='GPL vN, N!=3' \
+ $(_sc_search_regexp)
+
+# Require the latest GFDL. Two regexp, since some .texi files end up
+# line wrapping between 'Free Documentation License,' and 'Version'.
+_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any)
+sc_GFDL_version:
+ @prohibit='$(_GFDL_regexp)' \
+ halt='GFDL vN, N!=3' \
+ $(_sc_search_regexp)
+
+# Don't use Texinfo's @acronym{}.
+# http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html
+texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$
+sc_texinfo_acronym:
+ @prohibit='@acronym\{' \
+ in_vc_files='$(texinfo_suffix_re_)' \
+ halt='found use of Texinfo @acronym{}' \
+ $(_sc_search_regexp)
+
+cvs_keywords = \
+ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
+
+sc_prohibit_cvs_keyword:
+ @prohibit='\$$($(cvs_keywords))\$$' \
+ halt='do not use CVS keyword expansion' \
+ $(_sc_search_regexp)
+
+# This Perl code is slightly obfuscated. Not only is each "$" doubled
+# because it's in a Makefile, but the $$c's are comments; we cannot
+# use "#" due to the way the script ends up concatenated onto one line.
+# It would be much more concise, and would produce better output (including
+# counts) if written as:
+# perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ...
+# but that would be far less efficient, reading the entire contents
+# of each file, rather than just the last two bytes of each.
+# In addition, while the code below detects both blank lines and a missing
+# newline at EOF, the above detects only the former.
+#
+# This is a perl script that is expected to be the single-quoted argument
+# to a command-line "-le". The remaining arguments are file names.
+# Print the name of each file that does not end in exactly one newline byte.
+# I.e., warn if there are blank lines (2 or more newlines), or if the
+# last byte is not a newline. However, currently we don't complain
+# about any file that contains exactly one byte.
+# Exit nonzero if at least one such file is found, otherwise, exit 0.
+# Warn about, but otherwise ignore open failure. Ignore seek/read failure.
+#
+# Use this if you want to remove trailing empty lines from selected files:
+# perl -pi -0777 -e 's/\n\n+$/\n/' files...
+#
+require_exactly_one_NL_at_EOF_ = \
+ foreach my $$f (@ARGV) \
+ { \
+ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \
+ my $$p = sysseek (F, -2, 2); \
+ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \
+ my $$last_two_bytes; \
+ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \
+ close F; \
+ $$c = "ignore read failure"; \
+ $$p && ($$last_two_bytes eq "\n\n" \
+ || substr ($$last_two_bytes,1) ne "\n") \
+ and (print $$f), $$fail=1; \
+ } \
+ END { exit defined $$fail }
+sc_prohibit_empty_lines_at_EOF:
+ @perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \
+ || { echo '$(ME): empty line(s) or no newline at EOF' \
+ 1>&2; exit 1; } || :
+
+# Make sure we don't use st_blocks. Use ST_NBLOCKS instead.
+# This is a bit of a kludge, since it prevents use of the string
+# even in comments, but for now it does the job with no false positives.
+sc_prohibit_stat_st_blocks:
+ @prohibit='[.>]st_blocks' \
+ halt='do not use st_blocks; use ST_NBLOCKS' \
+ $(_sc_search_regexp)
+
+# Make sure we don't define any S_IS* macros in src/*.c files.
+# They're already defined via gnulib's sys/stat.h replacement.
+sc_prohibit_S_IS_definition:
+ @prohibit='^ *# *define *S_IS' \
+ halt='do not define S_IS* macros; include <sys/stat.h>' \
+ $(_sc_search_regexp)
+
+# Perl block to convert a match to FILE_NAME:LINENO:TEST,
+# that is shared by two definitions below.
+perl_filename_lineno_text_ = \
+ -e ' {' \
+ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \
+ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \
+ -e ' print "$$ARGV:$$n:$$v\n";' \
+ -e ' }'
+
+prohibit_doubled_word_RE_ ?= \
+ /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims
+prohibit_doubled_word_ = \
+ -e 'while ($(prohibit_doubled_word_RE_))' \
+ $(perl_filename_lineno_text_)
+
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_doubled_word_match_RE_ ?= ^$$
+
+sc_prohibit_doubled_word:
+ @perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT)) \
+ | grep -vE '$(ignore_doubled_word_match_RE_)' \
+ | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || :
+
+# A regular expression matching undesirable combinations of words like
+# "can not"; this matches them even when the two words appear on different
+# lines, but not when there is an intervening delimiter like "#" or "*".
+# Similarly undesirable, "See @xref{...}", since an @xref should start
+# a sentence. Explicitly prohibit any prefix of "see" or "also".
+# Also prohibit a prefix matching "\w+ +".
+# @pxref gets the same see/also treatment and should be parenthesized;
+# presume it must *not* start a sentence.
+bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{
+bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{
+prohibit_undesirable_word_seq_RE_ ?= \
+ /(?:\bcan\s+not\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims
+prohibit_undesirable_word_seq_ = \
+ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \
+ $(perl_filename_lineno_text_)
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_undesirable_word_sequence_RE_ ?= ^$$
+
+sc_prohibit_undesirable_word_seq:
+ @perl -n -0777 $(prohibit_undesirable_word_seq_) \
+ $$($(VC_LIST_EXCEPT)) \
+ | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep . \
+ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || :
+
+_ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
+_ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
+# Using test's -a and -o operators is not portable.
+# We prefer test over [, since the latter is spelled [[ in configure.ac.
+sc_prohibit_test_minus_ao:
+ @prohibit='(\<test| \[+) .+ -[ao] ' \
+ halt='$(_ptm1); $(_ptm2)' \
+ $(_sc_search_regexp)
+
+# Avoid a test bashism.
+sc_prohibit_test_double_equal:
+ @prohibit='(\<test| \[+) .+ == ' \
+ containing='#! */bin/[a-z]*sh' \
+ halt='use "test x = x", not "test x =''= x"' \
+ $(_sc_search_regexp)
+
+# Each program that uses proper_name_utf8 must link with one of the
+# ICONV libraries. Otherwise, some ICONV library must appear in LDADD.
+# The perl -0777 invocation below extracts the possibly-multi-line
+# definition of LDADD from the appropriate Makefile.am and exits 0
+# when it contains "ICONV".
+sc_proper_name_utf8_requires_ICONV:
+ @progs=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\
+ if test "x$$progs" != x; then \
+ fail=0; \
+ for p in $$progs; do \
+ dir=$$(dirname "$$p"); \
+ perl -0777 \
+ -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)' \
+ $$dir/Makefile.am && continue; \
+ base=$$(basename "$$p" .c); \
+ grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \
+ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
+ done; \
+ test $$fail = 1 && \
+ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
+ exit 1; } || :; \
+ fi
+
+# Warn about "c0nst struct Foo const foo[]",
+# but not about "char const *const foo" or "#define const const".
+sc_redundant_const:
+ @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \
+ halt='redundant "const" in declarations' \
+ $(_sc_search_regexp)
+
+sc_const_long_option:
+ @prohibit='^ *static.*struct option ' \
+ exclude='const struct option|struct option const' \
+ halt='$(ME): add "const" to the above declarations' \
+ $(_sc_search_regexp)
+
+NEWS_hash = \
+ $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \
+ $(srcdir)/NEWS \
+ | perl -0777 -pe \
+ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \
+ | md5sum - \
+ | sed 's/ .*//')
+
+# Ensure that we don't accidentally insert an entry into an old NEWS block.
+sc_immutable_NEWS:
+ @if test -f $(srcdir)/NEWS; then \
+ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \
+ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \
+ fi
+
+# Update the hash stored above. Do this after each release and
+# for any corrections to old entries.
+update-NEWS-hash: NEWS
+ perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \
+ $(srcdir)/cfg.mk
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+# However, there is still one case in which @VAR@ use is not just
+# legitimate, but actually required: when augmenting an automake-defined
+# variable with a prefix. For example, gettext uses this:
+# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@
+# otherwise, makeinfo would put German or French (current locale)
+# navigation hints in the otherwise-English documentation.
+#
+# Allow the package to add exceptions via a hook in cfg.mk;
+# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by
+# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'.
+_makefile_at_at_check_exceptions ?=
+sc_makefile_at_at_check:
+ @perl -ne '/\@\w+\@/' \
+ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \
+ -e ''$(_makefile_at_at_check_exceptions) \
+ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \
+ $$($(VC_LIST_EXCEPT) | grep -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \
+ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-check: NEWS
+ if sed -n $(news-check-lines-spec)p $(srcdir)/NEWS \
+ | grep -E $(news-check-regexp) >/dev/null; then \
+ :; \
+ else \
+ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \
+ exit 1; \
+ fi
+
+sc_makefile_TAB_only_indentation:
+ @prohibit='^ [ ]{8}' \
+ in_vc_files='akefile|\.mk$$' \
+ halt='found TAB-8-space indentation' \
+ $(_sc_search_regexp)
+
+sc_m4_quote_check:
+ @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \
+ in_vc_files='(^configure\.ac|\.m4)$$' \
+ halt='quote the first arg to AC_DEF*' \
+ $(_sc_search_regexp)
+
+fix_po_file_diag = \
+'you have changed the set of files with translatable diagnostics;\n\
+apply the above patch\n'
+
+# Verify that all source files using _() are listed in po/POTFILES.in.
+po_file ?= $(srcdir)/po/POTFILES.in
+generated_files ?= $(srcdir)/lib/*.[ch]
+sc_po_check:
+ @if test -f $(po_file); then \
+ grep -E -v '^(#|$$)' $(po_file) \
+ | grep -v '^src/false\.c$$' | sort > $@-1; \
+ files=; \
+ for file in $$($(VC_LIST_EXCEPT)) $(generated_files); do \
+ test -r $$file || continue; \
+ case $$file in \
+ *.m4|*.mk) continue ;; \
+ *.?|*.??) ;; \
+ *) continue;; \
+ esac; \
+ case $$file in \
+ *.[ch]) \
+ base=`expr " $$file" : ' \(.*\)\..'`; \
+ { test -f $$base.l || test -f $$base.y; } && continue;; \
+ esac; \
+ files="$$files $$file"; \
+ done; \
+ grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files \
+ | sed 's|^$(_dot_escaped_srcdir)/||' | sort -u > $@-2; \
+ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \
+ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \
+ rm -f $@-1 $@-2; \
+ fi
+
+# Sometimes it is useful to change the PATH environment variable
+# in Makefiles. When doing so, it's better not to use the Unix-centric
+# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'.
+msg = '$(ME): Do not use ":" above; use $$(PATH_SEPARATOR) instead'
+sc_makefile_path_separator_check:
+ @prohibit='PATH[=].*:' \
+ in_vc_files='akefile|\.mk$$' \
+ halt=$(msg) \
+ $(_sc_search_regexp)
+
+# Check that 'make alpha' will not fail at the end of the process,
+# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release)
+# and is read-only.
+writable-files:
+ if test -d $(release_archive_dir); then \
+ for file in $(DIST_ARCHIVES); do \
+ for p in ./ $(release_archive_dir)/; do \
+ test -e $$p$$file || continue; \
+ test -w $$p$$file \
+ || { echo ERROR: $$p$$file is not writable; fail=1; }; \
+ done; \
+ done; \
+ test "$$fail" && exit 1 || : ; \
+ else :; \
+ fi
+
+v_etc_file = $(gnulib_dir)/lib/version-etc.c
+sample-test = tests/sample-test
+texi = doc/$(PACKAGE).texi
+# Make sure that the copyright date in $(v_etc_file) is up to date.
+# Do the same for the $(sample-test) and the main doc/.texi file.
+sc_copyright_check:
+ @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \
+ in_files=$(v_etc_file) \
+ halt='out of date copyright in $(v_etc_file); update it' \
+ $(_sc_search_regexp)
+ @require='# Copyright \(C\) '$$(date +%Y)' Free' \
+ in_vc_files=$(sample-test) \
+ halt='out of date copyright in $(sample-test); update it' \
+ $(_sc_search_regexp)
+ @require='Copyright @copyright\{\} .*'$$(date +%Y)' Free' \
+ in_vc_files=$(texi) \
+ halt='out of date copyright in $(texi); update it' \
+ $(_sc_search_regexp)
+
+# If tests/help-version exists and seems to be new enough, assume that its
+# use of init.sh and path_prepend_ is correct, and ensure that every other
+# use of init.sh is identical.
+# This is useful because help-version cross-checks prog --version
+# with $(VERSION), which verifies that its path_prepend_ invocation
+# sets PATH correctly. This is an inexpensive way to ensure that
+# the other init.sh-using tests also get it right.
+_hv_file ?= $(srcdir)/tests/help-version
+_hv_regex_weak ?= ^ *\. .*/init\.sh"
+# Fix syntax-highlighters "
+_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh"
+sc_cross_check_PATH_usage_in_tests:
+ @if test -f $(_hv_file); then \
+ grep -l 'VERSION mismatch' $(_hv_file) >/dev/null \
+ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \
+ exit 0; }; \
+ grep -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \
+ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \
+ exit 1; }; \
+ good=$$(grep -E '$(_hv_regex_strong)' $(_hv_file)); \
+ grep -LFx "$$good" \
+ $$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT))) \
+ | grep . && \
+ { echo "$(ME): the above files use path_prepend_ inconsistently" \
+ 1>&2; exit 1; } || :; \
+ fi
+
+# BRE regex of file contents to identify a test script.
+_test_script_regex ?= \<init\.sh\>
+
+# In tests, use "compare expected actual", not the reverse.
+sc_prohibit_reversed_compare_failure:
+ @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \
+ containing='$(_test_script_regex)' \
+ halt='reversed compare arguments' \
+ $(_sc_search_regexp)
+
+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+ @prohibit='^#define.*(yes|no|true|false)$$' \
+ in_files='$(CONFIG_INCLUDE)' \
+ halt='Use 0 or 1 for macro values' \
+ $(_sc_search_regexp)
+
+# Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might
+# not be constant, or might overflow a stack. In general, use PATH_MAX as
+# a limit, not an array or alloca size.
+sc_prohibit_path_max_allocation:
+ @prohibit='(\balloca *\([^)]*|\[[^]]*)PATH_MAX' \
+ halt='Avoid stack allocations of size PATH_MAX' \
+ $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2009-4029:
+ @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \
+ in_files=$$(find $(srcdir) -name Makefile.in) \
+ halt=$$(printf '%s\n' \
+ 'the above files are vulnerable; beware of running' \
+ ' "make dist*" rules, and upgrade to fixed automake' \
+ ' see http://bugzilla.redhat.com/542609 for details') \
+ $(_sc_search_regexp)
+
+vc-diff-check:
+ (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
+ if test -s vc-diffs; then \
+ cat vc-diffs; \
+ echo "Some files are locally modified:" 1>&2; \
+ exit 1; \
+ else \
+ rm vc-diffs; \
+ fi
+
+rel-files = $(DIST_ARCHIVES)
+
+gnulib_dir ?= $(srcdir)/gnulib
+gnulib-version = $$(cd $(gnulib_dir) && git describe)
+bootstrap-tools ?= autoconf,automake,gnulib
+
+# If it's not already specified, derive the GPG key ID from
+# the signed tag we've just applied to mark this release.
+gpg_key_ID ?= \
+ $$(git cat-file tag v$(VERSION) \
+ | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \
+ | sed -n '/^\[GNUPG:\] ERRSIG /{s///;s/ .*//p;q}')
+
+translation_project_ ?= coordinator@translationproject.org
+
+# Make info-gnu the default only for a stable release.
+ifeq ($(RELEASE_TYPE),stable)
+ announcement_Cc_ ?= $(translation_project_), $(PACKAGE_BUGREPORT)
+ announcement_mail_headers_ ?= \
+ To: info-gnu@gnu.org \
+ Cc: $(announcement_Cc_) \
+ Mail-Followup-To: $(PACKAGE_BUGREPORT)
+else
+ announcement_Cc_ ?= $(translation_project_)
+ announcement_mail_headers_ ?= \
+ To: $(PACKAGE_BUGREPORT) \
+ Cc: $(announcement_Cc_)
+endif
+
+announcement: NEWS ChangeLog $(rel-files)
+ @$(srcdir)/$(_build-aux)/announce-gen \
+ --mail-headers='$(announcement_mail_headers_)' \
+ --release-type=$(RELEASE_TYPE) \
+ --package=$(PACKAGE) \
+ --prev=$(PREV_VERSION) \
+ --curr=$(VERSION) \
+ --gpg-key-id=$(gpg_key_ID) \
+ --news=$(srcdir)/NEWS \
+ --bootstrap-tools=$(bootstrap-tools) \
+ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \
+ echo --gnulib-version=$(gnulib-version);; esac) \
+ --no-print-checksums \
+ $(addprefix --url-dir=, $(url_dir_list))
+
+## ---------------- ##
+## Updating files. ##
+## ---------------- ##
+
+ftp-gnu = ftp://ftp.gnu.org/gnu
+www-gnu = http://www.gnu.org
+
+upload_dest_dir_ ?= $(PACKAGE)
+emit_upload_commands:
+ @echo =====================================
+ @echo =====================================
+ @echo "$(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \\"
+ @echo " --to $(gnu_rel_host):$(upload_dest_dir_) \\"
+ @echo " $(rel-files)"
+ @echo '# send the ~/announce-$(my_distdir) e-mail'
+ @echo =====================================
+ @echo =====================================
+
+define emit-commit-log
+ printf '%s\n' 'maint: post-release administrivia' '' \
+ '* NEWS: Add header line for next release.' \
+ '* .prev-version: Record previous version.' \
+ '* cfg.mk (old_NEWS_hash): Auto-update.'
+endef
+
+.PHONY: no-submodule-changes
+no-submodule-changes:
+ if test -d $(srcdir)/.git; then \
+ diff=$$(cd $(srcdir) && git submodule -q foreach \
+ git diff-index --name-only HEAD) \
+ || exit 1; \
+ case $$diff in '') ;; \
+ *) echo '$(ME): submodule files are locally modified:'; \
+ echo "$$diff"; exit 1;; esac; \
+ else \
+ : ; \
+ fi
+
+submodule-checks ?= no-submodule-changes public-submodule-commit
+
+# Ensure that each sub-module commit we're using is public.
+# Without this, it is too easy to tag and release code that
+# cannot be built from a fresh clone.
+.PHONY: public-submodule-commit
+public-submodule-commit:
+ $(AM_V_GEN)if test -d $(srcdir)/.git; then \
+ cd $(srcdir) && \
+ git submodule --quiet foreach test '$$(git rev-parse $$sha1)' \
+ = '$$(git merge-base origin $$sha1)' \
+ || { echo '$(ME): found non-public submodule commit' >&2; \
+ exit 1; }; \
+ else \
+ : ; \
+ fi
+# This rule has a high enough utility/cost ratio that it should be a
+# dependent of "check" by default. However, some of us do occasionally
+# commit a temporary change that deliberately points to a non-public
+# submodule commit, and want to be able to use rules like "make check".
+# In that case, run e.g., "make check gl_public_submodule_commit="
+# to disable this test.
+gl_public_submodule_commit ?= public-submodule-commit
+check: $(gl_public_submodule_commit)
+
+.PHONY: alpha beta stable
+ALL_RECURSIVE_TARGETS += alpha beta stable
+alpha beta stable: $(local-check) writable-files $(submodule-checks)
+ test $@ = stable \
+ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \
+ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+ || :
+ $(MAKE) vc-diff-check
+ $(MAKE) news-check
+ $(MAKE) distcheck
+ $(MAKE) dist
+ $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@
+ $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
+
+# Override this in cfg.mk if you follow different procedures.
+release-prep-hook ?= release-prep
+
+gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?]
+.PHONY: release-prep
+release-prep:
+ case $$RELEASE_TYPE in alpha|beta|stable) ;; \
+ *) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac
+ $(MAKE) --no-print-directory -s announcement > ~/announce-$(my_distdir)
+ if test -d $(release_archive_dir); then \
+ ln $(rel-files) $(release_archive_dir); \
+ chmod a-w $(rel-files); \
+ fi
+ echo $(VERSION) > $(prev_version_file)
+ $(MAKE) update-NEWS-hash
+ perl -pi -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' NEWS
+ $(emit-commit-log) > .ci-msg
+ $(VC) commit -F .ci-msg -a
+ rm .ci-msg
+
+# Override this with e.g., -s $(srcdir)/some_other_name.texi
+# if the default $(PACKAGE)-derived name doesn't apply.
+gendocs_options_ ?=
+
+.PHONY: web-manual
+web-manual:
+ @test -z "$(manual_title)" \
+ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+ @cd '$(srcdir)/doc'; \
+ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \
+ -o '$(abs_builddir)/doc/manual' \
+ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+ "$(PACKAGE_NAME) - $(manual_title)"
+ @echo " *** Upload the doc/manual directory to web-cvs."
+
+# Code Coverage
+
+init-coverage:
+ $(MAKE) $(AM_MAKEFLAGS) clean
+ lcov --directory . --zerocounters
+
+COVERAGE_CCOPTS ?= "-g --coverage"
+COVERAGE_OUT ?= doc/coverage
+
+build-coverage:
+ $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS)
+ $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check
+ mkdir -p $(COVERAGE_OUT)
+ lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \
+ --capture
+
+gen-coverage:
+ genhtml --output-directory $(COVERAGE_OUT) \
+ $(COVERAGE_OUT)/$(PACKAGE).info \
+ --highlight --frames --legend \
+ --title "$(PACKAGE_NAME)"
+
+coverage: init-coverage build-coverage gen-coverage
+
+# Update gettext files.
+PACKAGE ?= $(shell basename $(PWD))
+PO_DOMAIN ?= $(PACKAGE)
+POURL = http://translationproject.org/latest/$(PO_DOMAIN)/
+PODIR ?= po
+refresh-po:
+ rm -f $(PODIR)/*.po && \
+ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \
+ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \
+ echo 'en@boldquot' > $(PODIR)/LINGUAS && \
+ echo 'en@quot' >> $(PODIR)/LINGUAS && \
+ ls $(PODIR)/*.po | sed 's/\.po//' | sed 's,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS
+
+ # Running indent once is not idempotent, but running it twice is.
+INDENT_SOURCES ?= $(C_SOURCES)
+.PHONY: indent
+indent:
+ indent $(INDENT_SOURCES)
+ indent $(INDENT_SOURCES)
+
+# If you want to set UPDATE_COPYRIGHT_* environment variables,
+# put the assignments in this variable.
+update-copyright-env ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+# If you have an additional project-specific rule,
+# add it in cfg.mk along with a line 'update-copyright: prereq'.
+# By default, exclude all variants of COPYING; you can also
+# add exemptions (such as ChangeLog..* for rotated change logs)
+# in the file .x-update-copyright.
+.PHONY: update-copyright
+update-copyright:
+ grep -l -w Copyright \
+ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
+ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@
+
+# This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not
+# overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS.
+
+# NOTE: to override any _gl_TS_* default value, you must
+# define the variable(s) using "export" in cfg.mk.
+_gl_TS_dir ?= src
+
+ALL_RECURSIVE_TARGETS += sc_tight_scope
+sc_tight_scope: tight-scope.mk
+ @fail=0; \
+ if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \
+ > /dev/null \
+ && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \
+ > /dev/null 2>&1; then \
+ echo '$(ME): skipping $@'; \
+ else \
+ $(MAKE) -s -C $(_gl_TS_dir) \
+ -f Makefile \
+ -f $(abs_top_srcdir)/cfg.mk \
+ -f $(abs_top_builddir)/$< \
+ _gl_tight_scope \
+ || fail=1; \
+ fi; \
+ rm -f $<; \
+ exit $$fail
+
+tight-scope.mk: $(ME)
+ @rm -f $@ $@-t
+ @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t
+ @chmod a=r $@-t && mv $@-t $@
+
+ifeq (a,b)
+# TS-start
+
+# Most functions should have static scope.
+# Any that don't must be marked with 'extern', but 'main'
+# and 'usage' are exceptions: they're always extern, but
+# do not need to be marked. Symbols matching '__.*' are
+# reserved by the compiler, so are automatically excluded below.
+_gl_TS_unmarked_extern_functions ?= main usage
+_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\S+) *\(/
+
+# If your project uses a macro like "XTERN", then put
+# the following in cfg.mk to override this default:
+# export _gl_TS_extern = extern|XTERN
+_gl_TS_extern ?= extern
+
+# The second nm|grep checks for file-scope variables with 'extern' scope.
+# Without gnulib's progname module, you might put program_name here.
+# Symbols matching '__.*' are reserved by the compiler,
+# so are automatically excluded below.
+_gl_TS_unmarked_extern_vars ?=
+
+# NOTE: the _match variables are perl expressions -- not mere regular
+# expressions -- so that you can extend them to match other patterns
+# and easily extract matched variable names.
+# For example, if your project declares some global variables via
+# a macro like this: GLOBAL(type, var_name, initializer), then you
+# can override this definition to automatically extract those names:
+# export _gl_TS_var_match = \
+# /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/
+_gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/
+
+# The names of object files in (or relative to) $(_gl_TS_dir).
+_gl_TS_obj_files ?= *.$(OBJEXT)
+
+# Files in which to search for the one-line style extern declarations.
+# $(_gl_TS_dir)-relative.
+_gl_TS_headers ?= $(noinst_HEADERS)
+
+.PHONY: _gl_tight_scope
+_gl_tight_scope: $(bin_PROGRAMS)
+ t=exceptions-$$$$; \
+ trap 's=$$?; rm -f $$t; exit $$s' 0; \
+ for sig in 1 2 3 13 15; do \
+ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \
+ done; \
+ src=`for f in $(SOURCES); do \
+ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \
+ hdr=`for f in $(_gl_TS_headers); do \
+ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \
+ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_functions); \
+ grep -h -A1 '^extern .*[^;]$$' $$src \
+ | grep -vE '^(extern |--)' | sed 's/ .*//'; \
+ perl -lne \
+ '$(_gl_TS_function_match) and print "^$$1\$$"' $$hdr; \
+ ) | sort -u > $$t; \
+ nm -e $(_gl_TS_obj_files) | sed -n 's/.* T //p'|grep -Ev -f $$t \
+ && { echo the above functions should have static scope >&2; \
+ exit 1; } || : ; \
+ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars); \
+ perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' $$hdr *.h \
+ ) | sort -u > $$t; \
+ nm -e $(_gl_TS_obj_files) | sed -n 's/.* [BCDGRS] //p' \
+ | sort -u | grep -Ev -f $$t \
+ && { echo the above variables should have static scope >&2; \
+ exit 1; } || :
+# TS-end
+endif
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644
index 0000000..61f78c6
--- /dev/null
+++ b/man/Makefile.am
@@ -0,0 +1,68 @@
+# Make Autoconf man pages.
+
+# Copyright (C) 2001, 2004-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+dist_man_MANS = \
+ $(srcdir)/autoconf.1 \
+ $(srcdir)/autoheader.1 \
+ $(srcdir)/autom4te.1 \
+ $(srcdir)/autoreconf.1 \
+ $(srcdir)/autoscan.1 \
+ $(srcdir)/autoupdate.1 \
+ $(srcdir)/ifnames.1 \
+ $(srcdir)/config.guess.1 \
+ $(srcdir)/config.sub.1
+
+EXTRA_DIST = $(dist_man_MANS:.1=.x) common.x
+MAINTAINERCLEANFILES = $(dist_man_MANS)
+
+# Depend on .version to get version number changes.
+common_dep = $(top_srcdir)/.version $(srcdir)/common.x
+binsrcdir = $(top_srcdir)/bin
+$(srcdir)/autoconf.1: $(common_dep) $(binsrcdir)/autoconf.as
+$(srcdir)/autoheader.1: $(common_dep) $(binsrcdir)/autoheader.in
+$(srcdir)/autom4te.1: $(common_dep) $(binsrcdir)/autom4te.in
+$(srcdir)/autoreconf.1: $(common_dep) $(binsrcdir)/autoreconf.in
+$(srcdir)/autoscan.1: $(common_dep) $(binsrcdir)/autoscan.in
+$(srcdir)/autoupdate.1: $(common_dep) $(binsrcdir)/autoupdate.in
+$(srcdir)/ifnames.1: $(common_dep) $(binsrcdir)/ifnames.in
+
+# Independent from this package.
+$(srcdir)/config.guess.1: $(top_srcdir)/build-aux/config.guess
+$(srcdir)/config.sub.1: $(top_srcdir)/build-aux/config.sub
+
+remove_time_stamp = 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+
+MOSTLYCLEANFILES = $(srcdir)/*.t
+
+SUFFIXES = .x .1
+
+.x.1:
+ @echo "Updating man page $@"
+ PATH="$(top_builddir)/tests$(PATH_SEPARATOR)$(top_srcdir)/build-aux$(PATH_SEPARATOR)$$PATH"; \
+ export PATH; \
+ $(HELP2MAN) \
+ --include=$*.x \
+ --include=$(srcdir)/common.x \
+ --source='$(PACKAGE_STRING)' \
+ --output=$@.t `echo '$*' | sed 's,.*/,,'`
+ if sed $(remove_time_stamp) $@ >$@a.t 2>/dev/null && \
+ sed $(remove_time_stamp) $@.t | cmp $@a.t - >/dev/null 2>&1; then \
+ touch $@; \
+ else \
+ mv $@.t $@; \
+ fi
+ rm -f $@*.t
diff --git a/man/Makefile.in b/man/Makefile.in
new file mode 100644
index 0000000..e0499ad
--- /dev/null
+++ b/man/Makefile.in
@@ -0,0 +1,478 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Make Autoconf man pages.
+
+# Copyright (C) 2001, 2004-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = man
+DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(dist_man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_man_MANS = \
+ $(srcdir)/autoconf.1 \
+ $(srcdir)/autoheader.1 \
+ $(srcdir)/autom4te.1 \
+ $(srcdir)/autoreconf.1 \
+ $(srcdir)/autoscan.1 \
+ $(srcdir)/autoupdate.1 \
+ $(srcdir)/ifnames.1 \
+ $(srcdir)/config.guess.1 \
+ $(srcdir)/config.sub.1
+
+EXTRA_DIST = $(dist_man_MANS:.1=.x) common.x
+MAINTAINERCLEANFILES = $(dist_man_MANS)
+
+# Depend on .version to get version number changes.
+common_dep = $(top_srcdir)/.version $(srcdir)/common.x
+binsrcdir = $(top_srcdir)/bin
+remove_time_stamp = 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
+MOSTLYCLEANFILES = $(srcdir)/*.t
+SUFFIXES = .x .1
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .x .1
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ { for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ test -z "$$files" || { \
+ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @list='$(MANS)'; if test -n "$$list"; then \
+ list=`for p in $$list; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+ if test -n "$$list" && \
+ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
+ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+ echo " typically \`make maintainer-clean' will remove them" >&2; \
+ exit 1; \
+ else :; fi; \
+ else :; fi
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am uninstall-man uninstall-man1
+
+$(srcdir)/autoconf.1: $(common_dep) $(binsrcdir)/autoconf.as
+$(srcdir)/autoheader.1: $(common_dep) $(binsrcdir)/autoheader.in
+$(srcdir)/autom4te.1: $(common_dep) $(binsrcdir)/autom4te.in
+$(srcdir)/autoreconf.1: $(common_dep) $(binsrcdir)/autoreconf.in
+$(srcdir)/autoscan.1: $(common_dep) $(binsrcdir)/autoscan.in
+$(srcdir)/autoupdate.1: $(common_dep) $(binsrcdir)/autoupdate.in
+$(srcdir)/ifnames.1: $(common_dep) $(binsrcdir)/ifnames.in
+
+# Independent from this package.
+$(srcdir)/config.guess.1: $(top_srcdir)/build-aux/config.guess
+$(srcdir)/config.sub.1: $(top_srcdir)/build-aux/config.sub
+
+.x.1:
+ @echo "Updating man page $@"
+ PATH="$(top_builddir)/tests$(PATH_SEPARATOR)$(top_srcdir)/build-aux$(PATH_SEPARATOR)$$PATH"; \
+ export PATH; \
+ $(HELP2MAN) \
+ --include=$*.x \
+ --include=$(srcdir)/common.x \
+ --source='$(PACKAGE_STRING)' \
+ --output=$@.t `echo '$*' | sed 's,.*/,,'`
+ if sed $(remove_time_stamp) $@ >$@a.t 2>/dev/null && \
+ sed $(remove_time_stamp) $@.t | cmp $@a.t - >/dev/null 2>&1; then \
+ touch $@; \
+ else \
+ mv $@.t $@; \
+ fi
+ rm -f $@*.t
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/autoconf.1 b/man/autoconf.1
new file mode 100644
index 0000000..62eb2b0
--- /dev/null
+++ b/man/autoconf.1
@@ -0,0 +1,113 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.6.
+.TH AUTOCONF "1" "March 2012" "GNU Autoconf 2.68b" "User Commands"
+.SH NAME
+autoconf \- Generate configuration scripts
+.SH SYNOPSIS
+.B autoconf
+[\fIOPTION\fR]... [\fITEMPLATE-FILE\fR]
+.SH DESCRIPTION
+Generate a configuration script from a TEMPLATE\-FILE if given, or
+`configure.ac' if present, or else `configure.in'. Output is sent
+to the standard output if TEMPLATE\-FILE is given, else into
+`configure'.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+consider all files obsolete
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
+save output in FILE (stdout is the default)
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR=\fICATEGORY\fR
+report the warnings falling in CATEGORY [syntax]
+.SS "Warning categories include:"
+.TP
+`cross'
+cross compilation issues
+.TP
+`obsolete'
+obsolete constructs
+.TP
+`syntax'
+dubious syntactic constructs
+.TP
+`all'
+all the warnings
+.TP
+`no\-CATEGORY'
+turn off the warnings on CATEGORY
+.TP
+`none'
+turn off all the warnings
+.TP
+`error'
+warnings are error
+.PP
+The environment variables `M4' and `WARNINGS' are honored.
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.SS "Tracing:"
+.TP
+\fB\-t\fR, \fB\-\-trace\fR=\fIMACRO[\fR:FORMAT]
+report the list of calls to MACRO
+.TP
+\fB\-i\fR, \fB\-\-initialization\fR
+also trace Autoconf's initialization process
+.PP
+In tracing mode, no configuration script is created. FORMAT defaults
+to `$f:$l:$n:$%'; see `autom4te \fB\-\-help\fR' for information about FORMAT.
+.SH AUTHOR
+Written by David J. MacKenzie and Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autoconf
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autoconf
+programs are properly installed at your site, the command
+.IP
+.B info autoconf
+.PP
+should give you access to the complete manual.
diff --git a/man/autoconf.x b/man/autoconf.x
new file mode 100644
index 0000000..333284f
--- /dev/null
+++ b/man/autoconf.x
@@ -0,0 +1,2 @@
+[name]
+autoconf \- Generate configuration scripts
diff --git a/man/autoheader.1 b/man/autoheader.1
new file mode 100644
index 0000000..d96da1a
--- /dev/null
+++ b/man/autoheader.1
@@ -0,0 +1,108 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH AUTOHEADER "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+autoheader \- Create a template header for configure
+.SH SYNOPSIS
+.B autoheader
+[\fIOPTION\fR]... [\fITEMPLATE-FILE\fR]
+.SH DESCRIPTION
+Create a template file of C `#define' statements for `configure' to
+use. To this end, scan TEMPLATE\-FILE, or `configure.ac' if present,
+or else `configure.in'.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+consider all files obsolete
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR=\fICATEGORY\fR
+report the warnings falling in CATEGORY
+.SS "Warning categories include:"
+.TP
+`cross'
+cross compilation issues
+.TP
+`gnu'
+GNU coding standards (default in gnu and gnits modes)
+.TP
+`obsolete'
+obsolete features or constructions
+.TP
+`override'
+user redefinitions of Automake rules or variables
+.TP
+`portability'
+portability issues (default in gnu and gnits modes)
+.TP
+`syntax'
+dubious syntactic constructs (default)
+.TP
+`unsupported'
+unsupported or incomplete features (default)
+.TP
+`all'
+all the warnings
+.TP
+`no\-CATEGORY'
+turn off warnings in CATEGORY
+.TP
+`none'
+turn off all the warnings
+.TP
+`error'
+treat warnings as errors
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.SH AUTHOR
+Written by Roland McGrath and Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autoheader
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autoheader
+programs are properly installed at your site, the command
+.IP
+.B info autoheader
+.PP
+should give you access to the complete manual.
diff --git a/man/autoheader.x b/man/autoheader.x
new file mode 100644
index 0000000..a5217a7
--- /dev/null
+++ b/man/autoheader.x
@@ -0,0 +1,2 @@
+[name]
+autoheader \- Create a template header for configure
diff --git a/man/autom4te.1 b/man/autom4te.1
new file mode 100644
index 0000000..674aea6
--- /dev/null
+++ b/man/autom4te.1
@@ -0,0 +1,192 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH AUTOM4TE "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+autom4te \- Generate files and scripts thanks to M4
+.SH SYNOPSIS
+.B autom4te
+[\fIOPTION\fR]... [\fIFILES\fR]
+.SH DESCRIPTION
+Run GNU M4 on the FILES, avoiding useless runs. Output the traces if tracing,
+the frozen file if freezing, otherwise the expansion of the FILES.
+.PP
+If some of the FILES are named `FILE.m4f' they are considered to be M4
+frozen files of all the previous files (which are therefore not loaded).
+If `FILE.m4f' is not found, then `FILE.m4' will be used, together with
+all the previous files.
+.PP
+Some files may be optional, i.e., will only be processed if found in the
+include path, but then must end in `.m4?'; the question mark is not part of
+the actual file name.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.TP
+\fB\-o\fR, \fB\-\-output\fR=\fIFILE\fR
+save output in FILE (defaults to `\-', stdout)
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+don't rely on cached values
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR=\fICATEGORY\fR
+report the warnings falling in CATEGORY
+.TP
+\fB\-l\fR, \fB\-\-language\fR=\fILANG\fR
+specify the set of M4 macros to use
+.TP
+\fB\-C\fR, \fB\-\-cache\fR=\fIDIRECTORY\fR
+preserve results for future runs in DIRECTORY
+.TP
+\fB\-\-no\-cache\fR
+disable the cache
+.TP
+\fB\-m\fR, \fB\-\-mode\fR=\fIOCTAL\fR
+change the non trace output file mode (0666)
+.TP
+\fB\-M\fR, \fB\-\-melt\fR
+don't use M4 frozen files
+.SS "Languages include:"
+.TP
+`Autoconf'
+create Autoconf configure scripts
+.TP
+`Autotest'
+create Autotest test suites
+.TP
+`M4sh'
+create M4sh shell scripts
+.TP
+`M4sugar'
+create M4sugar output
+.SS "Warning categories include:"
+.TP
+`cross'
+cross compilation issues
+.TP
+`gnu'
+GNU coding standards (default in gnu and gnits modes)
+.TP
+`obsolete'
+obsolete features or constructions
+.TP
+`override'
+user redefinitions of Automake rules or variables
+.TP
+`portability'
+portability issues (default in gnu and gnits modes)
+.TP
+`syntax'
+dubious syntactic constructs (default)
+.TP
+`unsupported'
+unsupported or incomplete features (default)
+.TP
+`all'
+all the warnings
+.TP
+`no\-CATEGORY'
+turn off warnings in CATEGORY
+.TP
+`none'
+turn off all the warnings
+.TP
+`error'
+treat warnings as errors
+.PP
+The environment variables `M4' and `WARNINGS' are honored.
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.SS "Tracing:"
+.TP
+\fB\-t\fR, \fB\-\-trace\fR=\fIMACRO[\fR:FORMAT]
+report the MACRO invocations
+.TP
+\fB\-p\fR, \fB\-\-preselect\fR=\fIMACRO\fR
+prepare to trace MACRO in a future run
+.SS "Freezing:"
+.TP
+\fB\-F\fR, \fB\-\-freeze\fR
+produce an M4 frozen state file for FILES
+.SS "FORMAT defaults to `$f:$l:$n:$%', and can use the following escapes:"
+.TP
+$$
+literal $
+.TP
+$f
+file where macro was called
+.TP
+$l
+line where macro was called
+.TP
+$d
+nesting depth of macro call
+.TP
+$n
+name of the macro
+.TP
+$NUM
+argument NUM, unquoted and with newlines
+.TP
+$SEP@
+all arguments, with newlines, quoted, and separated by SEP
+.TP
+$SEP*
+all arguments, with newlines, unquoted, and separated by SEP
+.TP
+$SEP%
+all arguments, without newlines, unquoted, and separated by SEP
+.PP
+SEP can be empty for the default (comma for @ and *, colon for %),
+a single character for that character, or {STRING} to use a string.
+.SH AUTHOR
+Written by Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autom4te
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autom4te
+programs are properly installed at your site, the command
+.IP
+.B info autom4te
+.PP
+should give you access to the complete manual.
diff --git a/man/autom4te.x b/man/autom4te.x
new file mode 100644
index 0000000..564e1b7
--- /dev/null
+++ b/man/autom4te.x
@@ -0,0 +1,2 @@
+[name]
+autom4te \- Generate files and scripts thanks to M4
diff --git a/man/autoreconf.1 b/man/autoreconf.1
new file mode 100644
index 0000000..4015c44
--- /dev/null
+++ b/man/autoreconf.1
@@ -0,0 +1,133 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH AUTORECONF "1" "April 2012" "GNU Autoconf 2.68b.22-280f-dirty" "User Commands"
+.SH NAME
+autoreconf \- Update generated configuration files
+.SH SYNOPSIS
+.B autoreconf
+[\fIOPTION\fR]... [\fIDIRECTORY\fR]...
+.SH DESCRIPTION
+Run `autoconf' (and `autoheader', `aclocal', `automake', `autopoint'
+(formerly `gettextize'), and `libtoolize' where appropriate)
+repeatedly to remake the GNU Build System files in specified
+DIRECTORIES and their subdirectories (defaulting to `.').
+.PP
+By default, it only remakes those files that are older than their
+sources. If you install new versions of the GNU Build System,
+you can make `autoreconf' remake all of the files by giving it the
+`\-\-force' option.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+consider all files obsolete
+.TP
+\fB\-i\fR, \fB\-\-install\fR
+copy missing auxiliary files
+.TP
+\fB\-\-no\-recursive\fR
+don't rebuild sub\-packages
+.TP
+\fB\-s\fR, \fB\-\-symlink\fR
+with \fB\-i\fR, install symbolic links instead of copies
+.TP
+\fB\-m\fR, \fB\-\-make\fR
+when applicable, re\-run ./configure && make
+.TP
+\fB\-W\fR, \fB\-\-warnings\fR=\fICATEGORY\fR
+report the warnings falling in CATEGORY [syntax]
+.SS "Warning categories include:"
+.TP
+`cross'
+cross compilation issues
+.TP
+`gnu'
+GNU coding standards (default in gnu and gnits modes)
+.TP
+`obsolete'
+obsolete features or constructions
+.TP
+`override'
+user redefinitions of Automake rules or variables
+.TP
+`portability'
+portability issues (default in gnu and gnits modes)
+.TP
+`syntax'
+dubious syntactic constructs (default)
+.TP
+`unsupported'
+unsupported or incomplete features (default)
+.TP
+`all'
+all the warnings
+.TP
+`no\-CATEGORY'
+turn off warnings in CATEGORY
+.TP
+`none'
+turn off all the warnings
+.TP
+`error'
+treat warnings as errors
+.PP
+The environment variable `WARNINGS' is honored. Some subtools might
+support other warning types, using `all' is encouraged.
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.PP
+The environment variables AUTOM4TE, AUTOCONF, AUTOHEADER, AUTOMAKE,
+ACLOCAL, AUTOPOINT, LIBTOOLIZE, M4, and MAKE are honored.
+.SH AUTHOR
+Written by David J. MacKenzie and Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autoreconf
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autoreconf
+programs are properly installed at your site, the command
+.IP
+.B info autoreconf
+.PP
+should give you access to the complete manual.
diff --git a/man/autoreconf.x b/man/autoreconf.x
new file mode 100644
index 0000000..89d4261
--- /dev/null
+++ b/man/autoreconf.x
@@ -0,0 +1,2 @@
+[name]
+autoreconf \- Update generated configuration files
diff --git a/man/autoscan.1 b/man/autoscan.1
new file mode 100644
index 0000000..0001cdd
--- /dev/null
+++ b/man/autoscan.1
@@ -0,0 +1,70 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH AUTOSCAN "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+autoscan \- Generate a preliminary configure.in
+.SH SYNOPSIS
+.B autoscan
+[\fIOPTION\fR]... [\fISRCDIR\fR]
+.SH DESCRIPTION
+Examine source files in the directory tree rooted at SRCDIR, or the
+current directory if none is given. Search the source files for
+common portability problems, check for incompleteness of
+`configure.ac', and create a file `configure.scan' which is a
+preliminary `configure.ac' for that package.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.SH AUTHOR
+Written by David J. MacKenzie and Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autoscan
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autoscan
+programs are properly installed at your site, the command
+.IP
+.B info autoscan
+.PP
+should give you access to the complete manual.
diff --git a/man/autoscan.x b/man/autoscan.x
new file mode 100644
index 0000000..a3b67d9
--- /dev/null
+++ b/man/autoscan.x
@@ -0,0 +1,2 @@
+[name]
+autoscan \- Generate a preliminary configure.in
diff --git a/man/autoupdate.1 b/man/autoupdate.1
new file mode 100644
index 0000000..421c27a
--- /dev/null
+++ b/man/autoupdate.1
@@ -0,0 +1,72 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH AUTOUPDATE "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+autoupdate \- Update a configure.in to a newer Autoconf
+.SH SYNOPSIS
+.B autoupdate
+[\fIOPTION\fR]... [\fITEMPLATE-FILE\fR]...
+.SH DESCRIPTION
+Update each TEMPLATE\-FILE if given, or `configure.ac' if present,
+or else `configure.in', to the syntax of the current version of
+Autoconf. The original files are backed up.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+verbosely report processing
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+don't remove temporary files
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+consider all files obsolete
+.SS "Library directories:"
+.TP
+\fB\-B\fR, \fB\-\-prepend\-include\fR=\fIDIR\fR
+prepend directory DIR to search path
+.TP
+\fB\-I\fR, \fB\-\-include\fR=\fIDIR\fR
+append directory DIR to search path
+.SH AUTHOR
+Written by David J. MacKenzie and Akim Demaille.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B autoupdate
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B autoupdate
+programs are properly installed at your site, the command
+.IP
+.B info autoupdate
+.PP
+should give you access to the complete manual.
diff --git a/man/autoupdate.x b/man/autoupdate.x
new file mode 100644
index 0000000..40d24e2
--- /dev/null
+++ b/man/autoupdate.x
@@ -0,0 +1,2 @@
+[name]
+autoupdate \- Update a configure.in to a newer Autoconf
diff --git a/man/common.x b/man/common.x
new file mode 100644
index 0000000..ea3b237
--- /dev/null
+++ b/man/common.x
@@ -0,0 +1,11 @@
+[see also]
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
diff --git a/man/config.guess.1 b/man/config.guess.1
new file mode 100644
index 0000000..bf54f2d
--- /dev/null
+++ b/man/config.guess.1
@@ -0,0 +1,62 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH CONFIG.GUESS "1" "April 2012" "GNU Autoconf 2.68b.24-84e2" "User Commands"
+.SH NAME
+config.guess \- guess the build system triplet
+.SH SYNOPSIS
+.B config.guess
+[\fIOPTION\fR]
+.SH DESCRIPTION
+The GNU build system distinguishes three types of machines, the
+`build' machine on which the compilers are run, the `host' machine
+on which the package being built will run, and, exclusively when you
+build a compiler, assembler etc., the `target' machine, for which the
+compiler being built will produce code.
+
+This script will guess the type of the `build' machine.
+.PP
+Output the configuration name of the system `config.guess' is run on.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-t\fR, \fB\-\-time\-stamp\fR
+print date of last modification, then exit
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+print version number, then exit
+.SH "ENVIRONMENT VARIABLES"
+config.guess might need to compile and run C code, hence it needs a
+compiler for the `build' machine: use the environment variable
+`CC_FOR_BUILD' to specify the compiler for the build machine. If
+`CC_FOR_BUILD' is not specified, `CC' will be used. Be sure to
+specify `CC_FOR_BUILD' is `CC' is a cross-compiler to the `host'
+machine.
+
+ CC_FOR_BUILD a native C compiler, defaults to `cc'
+ CC a native C compiler, the previous variable is preferred
+.SH "REPORTING BUGS"
+Report bugs and patches to <config\-patches@gnu.org>.
+.PP
+.br
+Originally written by Per Bothner.
+.br
+Copyright \(co 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+.br
+Free Software Foundation, Inc.
+.PP
+.br
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
diff --git a/man/config.guess.x b/man/config.guess.x
new file mode 100644
index 0000000..ce23430
--- /dev/null
+++ b/man/config.guess.x
@@ -0,0 +1,24 @@
+--no-info
+
+[name]
+config.guess \- guess the build system triplet
+
+[Environment variables]
+config.guess might need to compile and run C code, hence it needs a
+compiler for the `build' machine: use the environment variable
+`CC_FOR_BUILD' to specify the compiler for the build machine. If
+`CC_FOR_BUILD' is not specified, `CC' will be used. Be sure to
+specify `CC_FOR_BUILD' is `CC' is a cross-compiler to the `host'
+machine.
+
+ CC_FOR_BUILD a native C compiler, defaults to `cc'
+ CC a native C compiler, the previous variable is preferred
+
+[description]
+The GNU build system distinguishes three types of machines, the
+`build' machine on which the compilers are run, the `host' machine
+on which the package being built will run, and, exclusively when you
+build a compiler, assembler etc., the `target' machine, for which the
+compiler being built will produce code.
+
+This script will guess the type of the `build' machine.
diff --git a/man/config.sub.1 b/man/config.sub.1
new file mode 100644
index 0000000..7d99583
--- /dev/null
+++ b/man/config.sub.1
@@ -0,0 +1,43 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH CONFIG.SUB "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+config.sub \- validate and canonicalize a configuration triplet
+.SH SYNOPSIS
+.B config.sub
+[\fIOPTION\fR] \fICPU-MFR-OPSYS\fR
+.SH DESCRIPTION
+.IP
+\&../build\-aux/config.sub [OPTION] ALIAS
+.PP
+Canonicalize a configuration name.
+.SS "Operation modes:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-t\fR, \fB\-\-time\-stamp\fR
+print date of last modification, then exit
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+print version number, then exit
+.SH "REPORTING BUGS"
+Report bugs and patches to <config\-patches@gnu.org>.
+.SH COPYRIGHT
+Copyright \(co 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
+.PP
+.br
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
diff --git a/man/config.sub.x b/man/config.sub.x
new file mode 100644
index 0000000..294cfbe
--- /dev/null
+++ b/man/config.sub.x
@@ -0,0 +1,4 @@
+--no-info
+
+[name]
+config.sub \- validate and canonicalize a configuration triplet
diff --git a/man/ifnames.1 b/man/ifnames.1
new file mode 100644
index 0000000..8a7df5d
--- /dev/null
+++ b/man/ifnames.1
@@ -0,0 +1,57 @@
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.8.
+.TH IFNAMES "1" "April 2012" "GNU Autoconf 2.68b.25-19513" "User Commands"
+.SH NAME
+ifnames \- Extract CPP conditionals from a set of files
+.SH SYNOPSIS
+.B ifnames
+[\fIOPTION\fR]... [\fIFILE\fR]...
+.SH DESCRIPTION
+Scan all of the C source FILES (or the standard input, if none are
+given) and write to the standard output a sorted list of all the
+identifiers that appear in those files in `#if', `#elif', `#ifdef', or
+`#ifndef' directives. Print each identifier on a line, followed by a
+space\-separated list of the files in which that identifier occurs.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+print this help, then exit
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+print version number, then exit
+.SH AUTHOR
+Written by David J. MacKenzie and Paul Eggert.
+.SH "REPORTING BUGS"
+Report bugs to <bug\-autoconf@gnu.org>.
+.br
+GNU Autoconf home page: <http://www.gnu.org/software/autoconf/>.
+.br
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+.SH COPYRIGHT
+Copyright \(co 2012 Free Software Foundation, Inc.
+License GPLv3+/Autoconf: GNU GPL version 3 or later
+<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
+.br
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.SH "SEE ALSO"
+.BR autoconf (1),
+.BR automake (1),
+.BR autoreconf (1),
+.BR autoupdate (1),
+.BR autoheader (1),
+.BR autoscan (1),
+.BR config.guess (1),
+.BR config.sub (1),
+.BR ifnames (1),
+.BR libtool (1).
+.PP
+The full documentation for
+.B ifnames
+is maintained as a Texinfo manual. If the
+.B info
+and
+.B ifnames
+programs are properly installed at your site, the command
+.IP
+.B info ifnames
+.PP
+should give you access to the complete manual.
diff --git a/man/ifnames.x b/man/ifnames.x
new file mode 100644
index 0000000..a5af55b
--- /dev/null
+++ b/man/ifnames.x
@@ -0,0 +1,2 @@
+[name]
+ifnames \- Extract CPP conditionals from a set of files
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..c946773
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,227 @@
+## Make Autoconf tests.
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# We don't actually distribute the built testsuite or package.m4, since one
+# only needs m4 to build them, and m4 is required to install Autoconf.
+# But if you are borrowing from this file for setting up autotest in your
+# project, remember to distribute both testsuite and package.m4.
+EXTRA_DIST = $(TESTSUITE_AT) local.at mktests.sh \
+ atlocal.in wrapper.as statesave.m4
+
+# Running the uninstalled scripts. Build them upon `all', for the manpages.
+noinst_SCRIPTS = $(wrappers)
+DISTCLEANFILES = atconfig atlocal $(TESTSUITE)
+MAINTAINERCLEANFILES = Makefile.in
+
+# Import the dependencies on Autotest and M4sh.
+include ../lib/freeze.mk
+
+
+## ------------ ##
+## package.m4. ##
+## ------------ ##
+
+# The `:;' works around a redirected compound command bash exit status bug.
+package.m4: Makefile
+ :;{ \
+ echo '# Signature of the current package.' && \
+ echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([AT_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \
+ } > $@-t
+ mv $@-t $@
+
+
+
+## ---------- ##
+## Wrappers. ##
+## ---------- ##
+
+wrappers = autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames
+CLEANFILES = wrapper.in $(wrappers) package.m4
+
+wrapper.in: $(srcdir)/wrapper.as $(m4sh_m4f_dependencies)
+ $(MY_AUTOM4TE) --language=M4sh $(srcdir)/wrapper.as -o $@
+
+edit = sed \
+ -e 's|@wrap_program[@]|$@|g' \
+ -e 's|@abs_top_srcdir[@]|@abs_top_srcdir@|g' \
+ -e 's|@abs_top_builddir[@]|@abs_top_builddir@|g' \
+ -e "s|@configure_input[@]|Generated from $$input.|g"
+
+$(wrappers): wrapper.in
+ rm -f $@ $@.tmp
+ input=wrapper.in; \
+ $(edit) wrapper.in >$@.tmp
+ chmod +x $@.tmp
+ chmod a-w $@.tmp
+ mv -f $@.tmp $@
+
+
+
+## ------------ ##
+## Test suite. ##
+## ------------ ##
+
+TESTSUITE_GENERATED_AT = \
+ $(srcdir)/aclang.at \
+ $(srcdir)/acc.at \
+ $(srcdir)/acfortran.at \
+ $(srcdir)/acgo.at \
+ $(srcdir)/acgeneral.at \
+ $(srcdir)/acstatus.at \
+ $(srcdir)/acautoheader.at \
+ $(srcdir)/acautoupdate.at \
+ $(srcdir)/acspecific.at \
+ $(srcdir)/acfunctions.at \
+ $(srcdir)/acheaders.at \
+ $(srcdir)/actypes.at \
+ $(srcdir)/aclibs.at \
+ $(srcdir)/acprograms.at
+
+TESTSUITE_HAND_AT = \
+ suite.at \
+ m4sugar.at m4sh.at autotest.at \
+ base.at tools.at torture.at \
+ compile.at c.at erlang.at fortran.at go.at \
+ semantics.at \
+ autoscan.at \
+ foreign.at
+
+TESTSUITE_AT = $(TESTSUITE_GENERATED_AT) $(TESTSUITE_HAND_AT)
+TESTSUITE = ./testsuite
+
+# Run the non installed autom4te.
+# Don't use AUTOM4TE since `make alpha' makes it unavailable although
+# we are allowed to use it (since we ship it).
+AUTOTEST = $(MY_AUTOM4TE) --language=autotest
+$(TESTSUITE): package.m4 \
+ local.at \
+ $(TESTSUITE_AT) \
+ $(autotest_m4f_dependencies)
+ cd $(top_builddir)/lib/autotest && $(MAKE) $(AM_MAKEFLAGS) autotest.m4f
+ $(AUTOTEST) -I . -I $(srcdir) suite.at -o $@.tmp
+ mv $@.tmp $@
+
+atconfig: $(top_builddir)/config.status
+ cd $(top_builddir) && ./config.status tests/$@
+
+# Avoid a race condition that would make parallel "distclean" fail.
+# The rule in clean-local tests for existence of $(TESTSUITE), and
+# if found, attempts to run it. But the distclean-generic rule may
+# be running in parallel, and it removes $(DISTCLEANFILES) which
+# includes $(TESTSUITE). This is the Automake rule, plus our
+# dependency, and we silence the warning from 'automake -Wall' by
+# hiding the dependency behind a variable.
+# TODO - fix this if newer automake accommodates the dependency.
+distclean_generic = distclean-generic
+$(distclean_generic): clean-local
+
+clean-local:
+ test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
+ rm -f *.tmp
+ rm -f -r autom4te.cache
+
+check-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
+
+# Run the test suite on the *installed* tree.
+installcheck-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
+
+
+
+## ------------------ ##
+## Maintainer rules. ##
+## ------------------ ##
+
+MAINTAINERCLEANFILES += $(TESTSUITE_GENERATED_AT)
+
+## Producing the test files.
+
+# The files which contain macros we check for syntax. Use $(top_srcdir)
+# for the benefit of non-GNU make. Fix the names in the rule below
+# where we `cd' to $srcdir.
+autoconfdir = $(top_srcdir)/lib/autoconf
+AUTOCONF_FILES = $(autoconfdir)/general.m4 \
+ $(autoconfdir)/status.m4 \
+ $(autoconfdir)/autoheader.m4 \
+ $(autoconfdir)/autoupdate.m4 \
+ $(autoconfdir)/specific.m4 \
+ $(autoconfdir)/functions.m4 \
+ $(autoconfdir)/lang.m4 \
+ $(autoconfdir)/c.m4 \
+ $(autoconfdir)/erlang.m4 \
+ $(autoconfdir)/fortran.m4 \
+ $(autoconfdir)/go.m4 \
+ $(autoconfdir)/headers.m4 \
+ $(autoconfdir)/libs.m4 \
+ $(autoconfdir)/types.m4 \
+ $(autoconfdir)/programs.m4
+
+$(TESTSUITE_GENERATED_AT): mktests.stamp
+## Recover from the removal of $@
+ @if test -f $@; then :; else \
+ rm -f mktests.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) mktests.stamp; \
+ fi
+
+mktests.stamp : mktests.sh $(AUTOCONF_FILES)
+ @rm -f mktests.tmp
+ @touch mktests.tmp
+ cd $(srcdir) && ./mktests.sh \
+ `echo " "$(AUTOCONF_FILES) | sed 's, [^ ]*/, ../lib/autoconf/,g'`
+ @mv -f mktests.tmp $@
+
+## Distribute the stamp file, since we distribute the generated files.
+EXTRA_DIST += mktests.stamp
+CLEANFILES += mktests.tmp
+MAINTAINERCLEANFILES += mktests.stamp
+
+## maintainer-check ##
+
+# These cannot be run in parallel.
+maintainer-check:
+ $(MAKE) $(AM_MAKEFLAGS) maintainer-check-posix
+ $(MAKE) $(AM_MAKEFLAGS) maintainer-check-c++
+
+# The hairy heredoc is more robust than using echo.
+CLEANFILES += expr
+expr:
+ :;{ \
+ echo '#! $(SHELL)'; \
+ echo 'result=`$(EXPR) "$$@"`'; \
+ echo 'estatus=$$?'; \
+ echo 'cat <<EOF'; \
+ echo '$${result:-0}'; \
+ echo 'EOF'; \
+ echo 'exit $$estatus'; \
+ } > $@-t
+ chmod +x $@-t
+ mv $@-t $@
+
+# Try the test suite with more severe environments.
+maintainer-check-posix: expr
+ POSIXLY_CORRECT=yes $(MAKE) $(AM_MAKEFLAGS) check
+ rm expr
+
+# Try using G++ as a C compiler.
+maintainer-check-c++:
+ CC=g++ $(MAKE) $(AM_MAKEFLAGS) check
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..3460771
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,643 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Freeze M4 files.
+
+# Copyright (C) 2002, 2004, 2006-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/../lib/freeze.mk $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/atlocal.in
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \
+ $(top_srcdir)/m4/m4.m4 $(top_srcdir)/m4/make-case.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_CLEAN_FILES = atlocal
+CONFIG_CLEAN_VPATH_FILES =
+SCRIPTS = $(noinst_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMACS = @EMACS@
+EMACSLOADPATH = @EMACSLOADPATH@
+EXPR = @EXPR@
+GREP = @GREP@
+HELP2MAN = @HELP2MAN@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+M4 = @M4@
+M4_DEBUGFILE = @M4_DEBUGFILE@
+M4_GNU = @M4_GNU@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PERL_FLOCK = @PERL_FLOCK@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEST_EMACS = @TEST_EMACS@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_cv_dir_trailing_space = @ac_cv_dir_trailing_space@
+ac_cv_sh_n_works = @ac_cv_sh_n_works@
+ac_cv_unsupported_fs_chars = @ac_cv_unsupported_fs_chars@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# We don't actually distribute the built testsuite or package.m4, since one
+# only needs m4 to build them, and m4 is required to install Autoconf.
+# But if you are borrowing from this file for setting up autotest in your
+# project, remember to distribute both testsuite and package.m4.
+EXTRA_DIST = $(TESTSUITE_AT) local.at mktests.sh atlocal.in wrapper.as \
+ statesave.m4 mktests.stamp
+
+# Running the uninstalled scripts. Build them upon `all', for the manpages.
+noinst_SCRIPTS = $(wrappers)
+DISTCLEANFILES = atconfig atlocal $(TESTSUITE)
+MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE_GENERATED_AT) \
+ mktests.stamp
+SUFFIXES = .m4 .m4f
+AUTOM4TE_CFG = $(top_builddir)/lib/autom4te.cfg
+
+# Do not use AUTOM4TE here, since maint.mk (my-distcheck)
+# checks if we are independent of Autoconf by defining AUTOM4TE (and
+# others) to `false'. Autoconf provides autom4te, so that doesn't
+# apply to us.
+MY_AUTOM4TE = \
+ autom4te_perllibdir='$(top_srcdir)'/lib \
+ AUTOM4TE_CFG='$(AUTOM4TE_CFG)' $(top_builddir)/bin/autom4te \
+ -B '$(top_builddir)'/lib -B '$(top_srcdir)'/lib # keep ` '
+
+
+# Factor the dependencies between all the frozen files.
+# Some day we should explain to Automake how to use autom4te to compute
+# the dependencies...
+src_libdir = $(top_srcdir)/lib
+build_libdir = $(top_builddir)/lib
+m4f_dependencies = $(top_builddir)/bin/autom4te $(AUTOM4TE_CFG)
+m4sugar_m4f_dependencies = \
+ $(m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sugar.m4 \
+ $(build_libdir)/m4sugar/version.m4
+
+m4sh_m4f_dependencies = \
+ $(m4sugar_m4f_dependencies) \
+ $(src_libdir)/m4sugar/m4sh.m4
+
+autotest_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autotest/autotest.m4 \
+ $(src_libdir)/autotest/general.m4 \
+ $(src_libdir)/autotest/specific.m4
+
+autoconf_m4f_dependencies = \
+ $(m4sh_m4f_dependencies) \
+ $(src_libdir)/autoconf/autoscan.m4 \
+ $(src_libdir)/autoconf/general.m4 \
+ $(src_libdir)/autoconf/autoheader.m4 \
+ $(src_libdir)/autoconf/autoupdate.m4 \
+ $(src_libdir)/autoconf/autotest.m4 \
+ $(src_libdir)/autoconf/status.m4 \
+ $(src_libdir)/autoconf/oldnames.m4 \
+ $(src_libdir)/autoconf/specific.m4 \
+ $(src_libdir)/autoconf/lang.m4 \
+ $(src_libdir)/autoconf/c.m4 \
+ $(src_libdir)/autoconf/fortran.m4 \
+ $(src_libdir)/autoconf/erlang.m4 \
+ $(src_libdir)/autoconf/go.m4 \
+ $(src_libdir)/autoconf/functions.m4 \
+ $(src_libdir)/autoconf/headers.m4 \
+ $(src_libdir)/autoconf/types.m4 \
+ $(src_libdir)/autoconf/libs.m4 \
+ $(src_libdir)/autoconf/programs.m4 \
+ $(src_libdir)/autoconf/autoconf.m4
+
+ETAGS_FOR_M4 = \
+ --lang=none \
+ --regex='/\(m4_define\|define\)(\[\([^]]*\)\]/\2/'
+
+ETAGS_FOR_M4SUGAR = \
+ $(ETAGS_FOR_M4) \
+ --regex='/m4_defun(\[\([^]]*\)\]/\1/'
+
+ETAGS_FOR_AUTOCONF = \
+ $(ETAGS_FOR_M4SUGAR) \
+ --regex='/\(A[CU]_DEFUN\|AU_ALIAS\)(\[\([^]]*\)\]/\2/' \
+ --regex='/AN_\(FUNCTION\|HEADER\|IDENTIFIER\|LIBRARY\|MAKEVAR\|PROGRAM\)(\[\([^]]*\)\]/\2/'
+
+wrappers = autoconf autoheader autom4te autoreconf autoscan autoupdate ifnames
+
+# The hairy heredoc is more robust than using echo.
+CLEANFILES = wrapper.in $(wrappers) package.m4 mktests.tmp expr
+edit = sed \
+ -e 's|@wrap_program[@]|$@|g' \
+ -e 's|@abs_top_srcdir[@]|@abs_top_srcdir@|g' \
+ -e 's|@abs_top_builddir[@]|@abs_top_builddir@|g' \
+ -e "s|@configure_input[@]|Generated from $$input.|g"
+
+TESTSUITE_GENERATED_AT = \
+ $(srcdir)/aclang.at \
+ $(srcdir)/acc.at \
+ $(srcdir)/acfortran.at \
+ $(srcdir)/acgo.at \
+ $(srcdir)/acgeneral.at \
+ $(srcdir)/acstatus.at \
+ $(srcdir)/acautoheader.at \
+ $(srcdir)/acautoupdate.at \
+ $(srcdir)/acspecific.at \
+ $(srcdir)/acfunctions.at \
+ $(srcdir)/acheaders.at \
+ $(srcdir)/actypes.at \
+ $(srcdir)/aclibs.at \
+ $(srcdir)/acprograms.at
+
+TESTSUITE_HAND_AT = \
+ suite.at \
+ m4sugar.at m4sh.at autotest.at \
+ base.at tools.at torture.at \
+ compile.at c.at erlang.at fortran.at go.at \
+ semantics.at \
+ autoscan.at \
+ foreign.at
+
+TESTSUITE_AT = $(TESTSUITE_GENERATED_AT) $(TESTSUITE_HAND_AT)
+TESTSUITE = ./testsuite
+
+# Run the non installed autom4te.
+# Don't use AUTOM4TE since `make alpha' makes it unavailable although
+# we are allowed to use it (since we ship it).
+AUTOTEST = $(MY_AUTOM4TE) --language=autotest
+
+# Avoid a race condition that would make parallel "distclean" fail.
+# The rule in clean-local tests for existence of $(TESTSUITE), and
+# if found, attempts to run it. But the distclean-generic rule may
+# be running in parallel, and it removes $(DISTCLEANFILES) which
+# includes $(TESTSUITE). This is the Automake rule, plus our
+# dependency, and we silence the warning from 'automake -Wall' by
+# hiding the dependency behind a variable.
+# TODO - fix this if newer automake accommodates the dependency.
+distclean_generic = distclean-generic
+
+# The files which contain macros we check for syntax. Use $(top_srcdir)
+# for the benefit of non-GNU make. Fix the names in the rule below
+# where we `cd' to $srcdir.
+autoconfdir = $(top_srcdir)/lib/autoconf
+AUTOCONF_FILES = $(autoconfdir)/general.m4 \
+ $(autoconfdir)/status.m4 \
+ $(autoconfdir)/autoheader.m4 \
+ $(autoconfdir)/autoupdate.m4 \
+ $(autoconfdir)/specific.m4 \
+ $(autoconfdir)/functions.m4 \
+ $(autoconfdir)/lang.m4 \
+ $(autoconfdir)/c.m4 \
+ $(autoconfdir)/erlang.m4 \
+ $(autoconfdir)/fortran.m4 \
+ $(autoconfdir)/go.m4 \
+ $(autoconfdir)/headers.m4 \
+ $(autoconfdir)/libs.m4 \
+ $(autoconfdir)/types.m4 \
+ $(autoconfdir)/programs.m4
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .m4 .m4f
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../lib/freeze.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-local
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-local
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: all all-am check check-am check-local clean clean-generic \
+ clean-local distclean distclean-generic distdir dvi dvi-am \
+ html html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installcheck-local installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+$(AUTOM4TE_CFG): $(top_srcdir)/lib/autom4te.in
+ cd $(top_builddir)/lib && $(MAKE) $(AM_MAKEFLAGS) autom4te.cfg
+
+# When processing the file with diversion disabled, there must be no
+# output but comments and empty lines.
+# If freezing produces output, something went wrong: a bad `divert',
+# or an improper paren etc.
+# It may happen that the output does not end with an end of line, hence
+# force an end of line when reporting errors.
+.m4.m4f:
+ $(MY_AUTOM4TE) \
+ --language=$* \
+ --freeze \
+ --output=$@
+
+# For parallel builds.
+$(build_libdir)/m4sugar/version.m4:
+ cd $(build_libdir)/m4sugar && $(MAKE) $(AM_MAKEFLAGS) version.m4
+
+check-forbidden-patterns:
+ @if (cd $(srcdir) && \
+ $(GREP) $(forbidden_patterns) $(forbidden_patterns_files)) \
+ >forbidden.log; then \
+ echo "ERROR: forbidden patterns were found:" >&2; \
+ sed "s|^|$*.m4: |" <forbidden.log >&2; \
+ echo >&2; \
+ exit 1; \
+ else \
+ rm -f forbidden.log; \
+ fi
+
+# Import the dependencies on Autotest and M4sh.
+
+# The `:;' works around a redirected compound command bash exit status bug.
+package.m4: Makefile
+ :;{ \
+ echo '# Signature of the current package.' && \
+ echo 'm4_define([AT_PACKAGE_NAME], [$(PACKAGE_NAME)])' && \
+ echo 'm4_define([AT_PACKAGE_TARNAME], [$(PACKAGE_TARNAME)])' && \
+ echo 'm4_define([AT_PACKAGE_VERSION], [$(PACKAGE_VERSION)])' && \
+ echo 'm4_define([AT_PACKAGE_STRING], [$(PACKAGE_STRING)])' && \
+ echo 'm4_define([AT_PACKAGE_BUGREPORT], [$(PACKAGE_BUGREPORT)])' && \
+ echo 'm4_define([AT_PACKAGE_URL], [$(PACKAGE_URL)])'; \
+ } > $@-t
+ mv $@-t $@
+
+wrapper.in: $(srcdir)/wrapper.as $(m4sh_m4f_dependencies)
+ $(MY_AUTOM4TE) --language=M4sh $(srcdir)/wrapper.as -o $@
+
+$(wrappers): wrapper.in
+ rm -f $@ $@.tmp
+ input=wrapper.in; \
+ $(edit) wrapper.in >$@.tmp
+ chmod +x $@.tmp
+ chmod a-w $@.tmp
+ mv -f $@.tmp $@
+$(TESTSUITE): package.m4 \
+ local.at \
+ $(TESTSUITE_AT) \
+ $(autotest_m4f_dependencies)
+ cd $(top_builddir)/lib/autotest && $(MAKE) $(AM_MAKEFLAGS) autotest.m4f
+ $(AUTOTEST) -I . -I $(srcdir) suite.at -o $@.tmp
+ mv $@.tmp $@
+
+atconfig: $(top_builddir)/config.status
+ cd $(top_builddir) && ./config.status tests/$@
+$(distclean_generic): clean-local
+
+clean-local:
+ test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
+ rm -f *.tmp
+ rm -f -r autom4te.cache
+
+check-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) $(TESTSUITE) $(TESTSUITEFLAGS)
+
+# Run the test suite on the *installed* tree.
+installcheck-local: atconfig atlocal $(TESTSUITE)
+ $(SHELL) $(TESTSUITE) AUTOTEST_PATH="$(bindir)" $(TESTSUITEFLAGS)
+
+$(TESTSUITE_GENERATED_AT): mktests.stamp
+ @if test -f $@; then :; else \
+ rm -f mktests.stamp; \
+ $(MAKE) $(AM_MAKEFLAGS) mktests.stamp; \
+ fi
+
+mktests.stamp : mktests.sh $(AUTOCONF_FILES)
+ @rm -f mktests.tmp
+ @touch mktests.tmp
+ cd $(srcdir) && ./mktests.sh \
+ `echo " "$(AUTOCONF_FILES) | sed 's, [^ ]*/, ../lib/autoconf/,g'`
+ @mv -f mktests.tmp $@
+
+# These cannot be run in parallel.
+maintainer-check:
+ $(MAKE) $(AM_MAKEFLAGS) maintainer-check-posix
+ $(MAKE) $(AM_MAKEFLAGS) maintainer-check-c++
+expr:
+ :;{ \
+ echo '#! $(SHELL)'; \
+ echo 'result=`$(EXPR) "$$@"`'; \
+ echo 'estatus=$$?'; \
+ echo 'cat <<EOF'; \
+ echo '$${result:-0}'; \
+ echo 'EOF'; \
+ echo 'exit $$estatus'; \
+ } > $@-t
+ chmod +x $@-t
+ mv $@-t $@
+
+# Try the test suite with more severe environments.
+maintainer-check-posix: expr
+ POSIXLY_CORRECT=yes $(MAKE) $(AM_MAKEFLAGS) check
+ rm expr
+
+# Try using G++ as a C compiler.
+maintainer-check-c++:
+ CC=g++ $(MAKE) $(AM_MAKEFLAGS) check
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/acautoheader.at b/tests/acautoheader.at
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/acautoheader.at
diff --git a/tests/acautoupdate.at b/tests/acautoupdate.at
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/acautoupdate.at
diff --git a/tests/acc.at b/tests/acc.at
new file mode 100644
index 0000000..a4a6cff
--- /dev/null
+++ b/tests/acc.at
@@ -0,0 +1,34 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/c macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_C_BACKSLASH_A])
+AT_CHECK_MACRO([AC_C_BIGENDIAN])
+AT_CHECK_MACRO([AC_C_CHAR_UNSIGNED])
+AT_CHECK_MACRO([AC_C_FLEXIBLE_ARRAY_MEMBER])
+AT_CHECK_MACRO([AC_C_INLINE])
+AT_CHECK_MACRO([AC_C_PROTOTYPES])
+AT_CHECK_MACRO([AC_C_RESTRICT])
+AT_CHECK_MACRO([AC_C_STRINGIZE])
+AT_CHECK_MACRO([AC_C_TYPEOF])
+AT_CHECK_MACRO([AC_C_VARARRAYS])
+AT_CHECK_MACRO([AC_OPENMP])
+AT_CHECK_MACRO([AC_PROG_CC_C89])
+AT_CHECK_MACRO([AC_PROG_CC_C99])
+AT_CHECK_MACRO([AC_PROG_CC_C_O])
+AT_CHECK_MACRO([AC_PROG_CC_STDC])
+AT_CHECK_MACRO([AC_PROG_CPP_WERROR])
+AT_CHECK_MACRO([AC_PROG_GCC_TRADITIONAL])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_LANG_C])
+AT_CHECK_AU_MACRO([AC_LANG_CPLUSPLUS])
+AT_CHECK_AU_MACRO([AC_LANG_OBJC])
diff --git a/tests/acfortran.at b/tests/acfortran.at
new file mode 100644
index 0000000..e6eaedf
--- /dev/null
+++ b/tests/acfortran.at
@@ -0,0 +1,32 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/fortran macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_F77_IMPLICIT_NONE])
+AT_CHECK_MACRO([AC_F77_MAIN])
+AT_CHECK_MACRO([AC_F77_WRAPPERS])
+AT_CHECK_MACRO([AC_FC_CHECK_BOUNDS])
+AT_CHECK_MACRO([AC_FC_FIXEDFORM])
+AT_CHECK_MACRO([AC_FC_FREEFORM])
+AT_CHECK_MACRO([AC_FC_IMPLICIT_NONE])
+AT_CHECK_MACRO([AC_FC_LINE_LENGTH])
+AT_CHECK_MACRO([AC_FC_MAIN])
+AT_CHECK_MACRO([AC_FC_MODULE_EXTENSION])
+AT_CHECK_MACRO([AC_FC_MODULE_FLAG])
+AT_CHECK_MACRO([AC_FC_MODULE_OUTPUT_FLAG])
+AT_CHECK_MACRO([AC_FC_PP_DEFINE])
+AT_CHECK_MACRO([AC_FC_WRAPPERS])
+AT_CHECK_MACRO([AC_PROG_F77_C_O])
+AT_CHECK_MACRO([AC_PROG_FC_C_O])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_F77_NAME_MANGLING])
+AT_CHECK_AU_MACRO([AC_LANG_FORTRAN77])
diff --git a/tests/acfunctions.at b/tests/acfunctions.at
new file mode 100644
index 0000000..a78c234
--- /dev/null
+++ b/tests/acfunctions.at
@@ -0,0 +1,43 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/functions macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_CHECK_FUNCS_ONCE])
+AT_CHECK_MACRO([AC_FUNC_CHOWN])
+AT_CHECK_MACRO([AC_FUNC_CLOSEDIR_VOID])
+AT_CHECK_MACRO([AC_FUNC_ERROR_AT_LINE])
+AT_CHECK_MACRO([AC_FUNC_FNMATCH])
+AT_CHECK_MACRO([AC_FUNC_FORK])
+AT_CHECK_MACRO([AC_FUNC_FSEEKO])
+AT_CHECK_MACRO([AC_FUNC_GETGROUPS])
+AT_CHECK_MACRO([AC_FUNC_GETMNTENT])
+AT_CHECK_MACRO([AC_FUNC_GETPGRP])
+AT_CHECK_MACRO([AC_FUNC_LSTAT])
+AT_CHECK_MACRO([AC_FUNC_MALLOC])
+AT_CHECK_MACRO([AC_FUNC_MBRTOWC])
+AT_CHECK_MACRO([AC_FUNC_MEMCMP])
+AT_CHECK_MACRO([AC_FUNC_MKTIME])
+AT_CHECK_MACRO([AC_FUNC_MMAP])
+AT_CHECK_MACRO([AC_FUNC_OBSTACK])
+AT_CHECK_MACRO([AC_FUNC_REALLOC])
+AT_CHECK_MACRO([AC_FUNC_SELECT_ARGTYPES])
+AT_CHECK_MACRO([AC_FUNC_SETPGRP])
+AT_CHECK_MACRO([AC_FUNC_STAT])
+AT_CHECK_MACRO([AC_FUNC_STRCOLL])
+AT_CHECK_MACRO([AC_FUNC_STRERROR_R])
+AT_CHECK_MACRO([AC_FUNC_STRFTIME])
+AT_CHECK_MACRO([AC_FUNC_STRNLEN])
+AT_CHECK_MACRO([AC_FUNC_STRTOD])
+AT_CHECK_MACRO([AC_FUNC_STRTOLD])
+AT_CHECK_MACRO([AC_FUNC_UTIME_NULL])
+AT_CHECK_MACRO([AC_FUNC_VPRINTF])
+
+# Obsolete macros.
diff --git a/tests/acgeneral.at b/tests/acgeneral.at
new file mode 100644
index 0000000..64ec531
--- /dev/null
+++ b/tests/acgeneral.at
@@ -0,0 +1,34 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/general macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_ARG_ENABLE])
+AT_CHECK_MACRO([AC_ARG_PROGRAM])
+AT_CHECK_MACRO([AC_ARG_WITH])
+AT_CHECK_MACRO([AC_CHECK_DECLS_ONCE])
+AT_CHECK_MACRO([AC_EGREP_CPP])
+AT_CHECK_MACRO([AC_EGREP_HEADER])
+AT_CHECK_MACRO([AC_LIBOBJ])
+AT_CHECK_MACRO([AC_LIBSOURCES])
+AT_CHECK_MACRO([AC_PREFIX_DEFAULT])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_CHECKING])
+AT_CHECK_AU_MACRO([AC_COMPILE_CHECK])
+AT_CHECK_AU_MACRO([AC_ENABLE])
+AT_CHECK_AU_MACRO([AC_FOREACH])
+AT_CHECK_AU_MACRO([AC_MSG_RESULT_UNQUOTED])
+AT_CHECK_AU_MACRO([AC_TRY_COMPILE])
+AT_CHECK_AU_MACRO([AC_TRY_CPP])
+AT_CHECK_AU_MACRO([AC_TRY_LINK])
+AT_CHECK_AU_MACRO([AC_TRY_RUN])
+AT_CHECK_AU_MACRO([AC_VALIDATE_CACHED_SYSTEM_TUPLE])
+AT_CHECK_AU_MACRO([AC_WITH])
diff --git a/tests/acgo.at b/tests/acgo.at
new file mode 100644
index 0000000..a1380c2
--- /dev/null
+++ b/tests/acgo.at
@@ -0,0 +1,15 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/go macros.])
+
+# Modern macros.
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_LANG_GO])
diff --git a/tests/acheaders.at b/tests/acheaders.at
new file mode 100644
index 0000000..0bc71ab
--- /dev/null
+++ b/tests/acheaders.at
@@ -0,0 +1,26 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/headers macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_CHECK_HEADERS_ONCE])
+AT_CHECK_MACRO([AC_CHECK_HEADER_STDBOOL])
+AT_CHECK_MACRO([AC_HEADER_ASSERT])
+AT_CHECK_MACRO([AC_HEADER_MAJOR])
+AT_CHECK_MACRO([AC_HEADER_RESOLV])
+AT_CHECK_MACRO([AC_HEADER_STAT])
+AT_CHECK_MACRO([AC_HEADER_STDBOOL])
+AT_CHECK_MACRO([AC_HEADER_TIOCGWINSZ])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_DIR_HEADER])
+AT_CHECK_AU_MACRO([AC_MEMORY_H])
+AT_CHECK_AU_MACRO([AC_UNISTD_H])
+AT_CHECK_AU_MACRO([AC_USG])
diff --git a/tests/aclang.at b/tests/aclang.at
new file mode 100644
index 0000000..978b5eb
--- /dev/null
+++ b/tests/aclang.at
@@ -0,0 +1,16 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/lang macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_NO_EXECUTABLES])
+AT_CHECK_MACRO([AC_REQUIRE_CPP])
+
+# Obsolete macros.
diff --git a/tests/aclibs.at b/tests/aclibs.at
new file mode 100644
index 0000000..b4a9274
--- /dev/null
+++ b/tests/aclibs.at
@@ -0,0 +1,15 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/libs macros.])
+
+# Modern macros.
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_HAVE_LIBRARY])
diff --git a/tests/acprograms.at b/tests/acprograms.at
new file mode 100644
index 0000000..6fd2463
--- /dev/null
+++ b/tests/acprograms.at
@@ -0,0 +1,27 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/programs macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_PROG_AWK])
+AT_CHECK_MACRO([AC_PROG_FGREP])
+AT_CHECK_MACRO([AC_PROG_INSTALL])
+AT_CHECK_MACRO([AC_PROG_LEX])
+AT_CHECK_MACRO([AC_PROG_LN_S])
+AT_CHECK_MACRO([AC_PROG_MAKE_SET])
+AT_CHECK_MACRO([AC_PROG_MKDIR_P])
+AT_CHECK_MACRO([AC_PROG_RANLIB])
+AT_CHECK_MACRO([AC_PROG_SED])
+AT_CHECK_MACRO([AC_PROG_YACC])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_CHECK_TOOL_PREFIX])
+AT_CHECK_AU_MACRO([AC_DECL_YYTEXT])
+AT_CHECK_AU_MACRO([AC_RSH])
diff --git a/tests/acspecific.at b/tests/acspecific.at
new file mode 100644
index 0000000..fbf533a
--- /dev/null
+++ b/tests/acspecific.at
@@ -0,0 +1,28 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/specific macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_SYS_INTERPRETER])
+AT_CHECK_MACRO([AC_SYS_LARGEFILE])
+AT_CHECK_MACRO([AC_SYS_LONG_FILE_NAMES])
+AT_CHECK_MACRO([AC_SYS_POSIX_TERMIOS])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_AIX])
+AT_CHECK_AU_MACRO([AC_ARG_ARRAY])
+AT_CHECK_AU_MACRO([AC_DECL_SYS_SIGLIST])
+AT_CHECK_AU_MACRO([AC_DYNIX_SEQ])
+AT_CHECK_AU_MACRO([AC_HAVE_POUNDBANG])
+AT_CHECK_AU_MACRO([AC_IRIX_SUN])
+AT_CHECK_AU_MACRO([AC_ISC_POSIX])
+AT_CHECK_AU_MACRO([AC_MINIX])
+AT_CHECK_AU_MACRO([AC_SCO_INTL])
+AT_CHECK_AU_MACRO([AC_XENIX_DIR])
diff --git a/tests/acstatus.at b/tests/acstatus.at
new file mode 100644
index 0000000..37c96cf
--- /dev/null
+++ b/tests/acstatus.at
@@ -0,0 +1,15 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/status macros.])
+
+# Modern macros.
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_OUTPUT_COMMANDS])
diff --git a/tests/actypes.at b/tests/actypes.at
new file mode 100644
index 0000000..babec18
--- /dev/null
+++ b/tests/actypes.at
@@ -0,0 +1,42 @@
+# Generated by mktests.sh. -*- Autotest -*-
+
+## --------------------- ##
+## Do not edit by hand. ##
+## --------------------- ##
+
+# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+# 2010 Free Software Foundation, Inc.
+
+AT_BANNER([Testing autoconf/types macros.])
+
+# Modern macros.
+AT_CHECK_MACRO([AC_STRUCT_DIRENT_D_INO])
+AT_CHECK_MACRO([AC_STRUCT_DIRENT_D_TYPE])
+AT_CHECK_MACRO([AC_STRUCT_ST_BLOCKS])
+AT_CHECK_MACRO([AC_STRUCT_TIMEZONE])
+AT_CHECK_MACRO([AC_TYPE_INT16_T])
+AT_CHECK_MACRO([AC_TYPE_INT32_T])
+AT_CHECK_MACRO([AC_TYPE_INT64_T])
+AT_CHECK_MACRO([AC_TYPE_INT8_T])
+AT_CHECK_MACRO([AC_TYPE_INTMAX_T])
+AT_CHECK_MACRO([AC_TYPE_INTPTR_T])
+AT_CHECK_MACRO([AC_TYPE_LONG_DOUBLE])
+AT_CHECK_MACRO([AC_TYPE_LONG_DOUBLE_WIDER])
+AT_CHECK_MACRO([AC_TYPE_MODE_T])
+AT_CHECK_MACRO([AC_TYPE_OFF_T])
+AT_CHECK_MACRO([AC_TYPE_SSIZE_T])
+AT_CHECK_MACRO([AC_TYPE_UINT16_T])
+AT_CHECK_MACRO([AC_TYPE_UINT32_T])
+AT_CHECK_MACRO([AC_TYPE_UINT64_T])
+AT_CHECK_MACRO([AC_TYPE_UINT8_T])
+AT_CHECK_MACRO([AC_TYPE_UINTMAX_T])
+AT_CHECK_MACRO([AC_TYPE_UINTPTR_T])
+
+# Obsolete macros.
+AT_CHECK_AU_MACRO([AC_C_LONG_DOUBLE])
+AT_CHECK_AU_MACRO([AC_INT_16_BITS])
+AT_CHECK_AU_MACRO([AC_LONG_64_BITS])
+AT_CHECK_AU_MACRO([AC_STRUCT_ST_BLKSIZE])
+AT_CHECK_AU_MACRO([AC_STRUCT_ST_RDEV])
+AT_CHECK_AU_MACRO([AC_TYPE_SIGNAL])
+AT_CHECK_AU_MACRO([AM_TYPE_PTRDIFF_T])
diff --git a/tests/atlocal.in b/tests/atlocal.in
new file mode 100644
index 0000000..bf29d1c
--- /dev/null
+++ b/tests/atlocal.in
@@ -0,0 +1,48 @@
+# -*- shell-script -*-
+# @configure_input@
+# Configurable variable values for Autoconf test suite.
+
+# Copyright (C) 2000-2001, 2005, 2008-2012 Free Software Foundation,
+# Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+PERL='@PERL@'
+GREP='@GREP@'
+EGREP='@EGREP@'
+SED='@SED@'
+
+# We need to know if sh -n is ok.
+ac_cv_sh_n_works='@ac_cv_sh_n_works@'
+
+# Check whether the underlying system can manage some unusual
+# symbols in file names.
+if test -z '@ac_cv_unsupported_fs_chars@'; then
+ func_sanitize_file_name () { echo "$@"; }
+else
+ func_sanitize_file_name () { echo "$@" | tr -d '@ac_cv_unsupported_fs_chars@'; }
+fi
+
+# Can we create directories with trailing whitespace in their names?
+ac_cv_dir_trailing_space='@ac_cv_dir_trailing_space@'
+if test "$ac_cv_dir_trailing_space" = yes; then
+ func_sanitize_dir_name () { echo "$@"; }
+else
+ func_sanitize_dir_name () { echo "$@" | sed 's/ *$//'; }
+fi
+
+# AUTOM4TE might be set in the environment. Override it here so that
+# direct aclocal invocations also use it.
+AUTOM4TE=autom4te
+export AUTOM4TE
diff --git a/tests/autoscan.at b/tests/autoscan.at
new file mode 100644
index 0000000..0130997
--- /dev/null
+++ b/tests/autoscan.at
@@ -0,0 +1,47 @@
+# -*- Autotest -*-
+
+AT_BANNER([Autoscan.])
+
+# Copyright (C) 2005, 2009-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+AT_SETUP([autoscan])
+
+AT_DATA([Makefile.am],
+[[SUBDIRS = subpkg
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PREREQ(2.59)
+AM_INIT_AUTOMAKE(foreign)
+AC_CONFIG_SUBDIRS(subpkg)
+AC_CONFIG_FILES(Makefile)
+AC_OUTPUT
+]])
+
+mkdir subpkg
+
+AT_DATA([subpkg/Makefile.am], [])
+AT_DATA([subpkg/configure.ac],
+[[AC_INIT
+AM_INIT_AUTOMAKE(foreign)
+AC_CONFIG_FILES(Makefile)
+AC_OUTPUT
+]])
+AT_CHECK([autoscan])
+AT_CHECK([grep subpkg/Makefile configure.scan], [1], [], [ignore])
+
+AT_CLEANUP
diff --git a/tests/autotest.at b/tests/autotest.at
new file mode 100644
index 0000000..b56d3f8
--- /dev/null
+++ b/tests/autotest.at
@@ -0,0 +1,1955 @@
+# -*- Autotest -*-
+
+AT_BANNER([Autotest.])
+
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# AT_DATA_AUTOTEST(FILE-NAME, CONTENTS)
+# -------------------------------------
+# Escape the invalid tokens with @&t@.
+m4_define([AT_DATA_AUTOTEST],
+[AT_DATA([$1],
+[m4_bpatsubst([$2], [\(@.\)\(.@\)\|\(m4\|AS\|AT\)\(_\)\|\(d\)\(nl\)],
+ [\1\3\5@&t@\2\4\6])])])
+
+
+# AT_CHECK_AT_PREP(NAME, SUITE-CODE, [STATUS = 0], [STDOUT], [STDERR],
+# [DIR = .])
+# --------------------------------------------------------------------
+# Create a new testsuite named NAME that runs a minimal Autotest test suite,
+# SUITE-CODE. Do not use `testsuite' for NAME, or the log file it generates
+# will overwrite the log that the Autoconf test produces when managing
+# this test case. STATUS, STDOUT, and STDERR pass directly to the AT_CHECK
+# that compiles the testsuite. DIR can specify a particular subdirectory
+# where the testsuite should live.
+m4_define([AT_CHECK_AT_PREP],
+[AT_KEYWORDS([autotest])dnl
+dnl overquote AT_dir, to make it easier to use
+m4_pushdef([AT_dir], m4_ifval([$6], [[[$6]]], [.]))dnl
+dnl
+AT_CAPTURE_FILE(AT_dir[/$1.log])dnl
+dnl
+AT_DATA_AUTOTEST(AT_dir[/package.m4],
+[[m4_define([AT_PACKAGE_NAME], [GNU Nonsense])
+m4_define([AT_PACKAGE_TARNAME], [nonsense])
+m4_define([AT_PACKAGE_VERSION], [1.0])
+m4_define([AT_PACKAGE_STRING], [GNU Nonsense 1.0])
+m4_define([AT_PACKAGE_BUGREPORT], [bug-autoconf@gnu.org])
+]])
+dnl
+AT_DATA_AUTOTEST(AT_dir[/$1.at], [$2])
+AT_CHECK([cat >m4_default([$6], [.])/atconfig <<EOF
+at_testdir=m4_default([$6], [.])
+abs_builddir='`pwd`'
+at_srcdir=.
+abs_srcdir='`pwd`'
+at_top_srcdir=.
+abs_top_srcdir='`pwd`'
+at_top_build_prefix=
+abs_top_builddir='`pwd`'
+EOF])
+m4_ifval([$6], [(cd AT_dir])
+AT_CHECK_AUTOM4TE([--language=autotest -o $1 $1.at], [$3], [$4], [$5])
+m4_ifval([$6], [)])
+m4_popdef([AT_dir])dnl
+]) # AT_CHECK_AT_PREP
+
+# AT_CHECK_AT(TITLE, SUITE-CODE, [XFAIL-CONDITION], [STATUS = 0],
+# [STDOUT = ignore], STDERR, [PRE-TEST-CODE],
+# [POST-TEST-CODE], [SUITE-ARGS])
+# ---------------------------------------------------------------
+# Create a new test named TITLE that runs a minimal Autotest test suite,
+# SUITE-CODE with additional SUITE-ARGS, once without and once with
+# '-v -x' added. Call AT_XFAIL_IF with XFAIL-CONDITION. Pass STDERR
+# directly to the AT_CHECK that calls the minimal test suite, STDOUT to
+# the AT_CHECK without '-v -x'; ignore stdout for the latter.
+# Run PRE-TEST-CODE at the top level after the micro-suite is created, but
+# before it is run, and POST-TEST-CODE after the micro-suite has been run.
+m4_define([AT_CHECK_AT],
+[AT_SETUP([$1])
+AT_XFAIL_IF([$3])
+AT_CHECK_AT_PREP([micro-suite], [$2])
+$7
+AT_CHECK([$CONFIG_SHELL ./micro-suite $9], m4_default([$4], 0),
+ m4_default([$5], [ignore]), [$6])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -v -x $9], m4_default([$4], 0),
+ [ignore], [$6])
+$8
+AT_CLEANUP
+])# AT_CHECK_AT
+
+# AT_CHECK_AT_TEST(TITLE, SUITE-SNIPPET, ...)
+# -------------------------------------------
+# Wrapper for AT_CHECK_AT that surrounds SUITE-SNIPPET with a boilerplate
+# AT_INIT, AT_SETUP, and AT_CLEANUP and passes other arguments verbatim.
+m4_define([AT_CHECK_AT_TEST],
+[AT_CHECK_AT([$1],
+[[
+AT_INIT([artificial test suite])
+AT_SETUP([my only test])
+$2
+AT_CLEANUP
+]], m4_shift2($@))]) # AT_CHECK_AT_TEST
+
+# AT_CHECK_AT_SYNTAX(TITLE, SUITE, MESSAGE)
+# -----------------------------------------
+# Create a test named TITLE that tries compiling SUITE with syntax
+# errors with autotest. Expect a failed compilation, and grep for
+# MESSAGE occurring within the error output.
+m4_define([AT_CHECK_AT_SYNTAX],
+[AT_SETUP([$1])
+AT_CHECK_AT_PREP([micro-suite], [$2], [1], [], [stderr])
+AT_CHECK([grep '$3' stderr], [0], [ignore])
+AT_CLEANUP
+])# AT_CHECK_AT_SYNTAX
+
+
+# AT_NO_CMDSUBST
+# --------------
+m4_define([AT_NO_CMDSUBST],
+[if (eval 'foo=$(echo bar) && test "$foo" = bar') >/dev/null 2>&1; then ]dnl
+[false; else :; fi])
+
+# AT_CHECK_EGREP(PATTERN, STATUS, COUNT)
+# --------------------------------------
+# Run grep -E, counting how many times PATTERN occurs in the file 'stdout',
+# and expecting exit STATUS and output COUNT.
+m4_define([AT_CHECK_EGREP],
+[AT_CHECK([$EGREP -c '$1' stdout], [$2], [$3
+], [ignore])
+])
+
+
+## -------------- ##
+## AT_COPYRIGHT. ##
+## -------------- ##
+
+# Ensure the FSF notice as well as the user-provided one are present
+# in the head of the testsuite as well as the --version output.
+
+AT_CHECK_AT([AT@&t@_COPYRIGHT],
+[[AT_INIT([Testing AT@&t@_COPYRIGHT])
+AT_COPYRIGHT([[This is just a test notice, not a real one, so let's avoid
+words that may be matched by scanners for legal things,
+causing extra work for distributors.
+Multi-line values should be supported.
+]])
+]], [], [], [stdout], [], [], [
+AT_CHECK([grep 'Copyright.*Free Software Foundation' stdout], [], [ignore])
+AT_CHECK([grep 'This is just a test notice' stdout], [], [ignore])
+AT_CHECK([sed 50q micro-suite | grep 'Copyright.*Free Software Foundation'],
+ [], [ignore])
+AT_CHECK([sed 50q micro-suite | grep 'This is just a test notice'],
+ [], [ignore])],
+[--version])
+
+
+## --------- ##
+## AT_DATA. ##
+## --------- ##
+
+AT_CHECK_AT_TEST([AT@&t@_DATA], [
+AT_CHECK([test -f file1], [1])
+AT_DATA([file1])
+AT_CHECK([test -f file1 && test ! -s file1])
+AT_CHECK([echo hi > file1])
+AT_DATA([file1], [[]])
+AT_CHECK([test -f file1 && test ! -s file1])
+file=file2
+AT_DATA([$file], [[$file
+]])
+AT_CHECK([echo '$file' > file3])
+AT_CHECK([cmp file2 file3])
+])
+
+
+## ------------------ ##
+## Empty test suite. ##
+## ------------------ ##
+
+# This is not a sensible thing to do, but the user should not get an unhelpful
+# error message.
+AT_CHECK_AT([Empty test suite],
+[[AT_INIT([empty test suite])
+]])
+
+AT_CHECK_AT([Banner-only test suite],
+[[AT_INIT([empty test suite])
+AT_BANNER([banner])
+]])
+
+# Next level of emptiness.
+AT_CHECK_AT_TEST([Empty test], [])
+
+# And finally, an empty check should not cause a syntax error.
+AT_CHECK_AT_TEST([Empty check], [AT_CHECK])
+
+# Check for sensible error messages for common bugs.
+AT_CHECK_AT_SYNTAX([AT@&t@_SETUP without AT@&t@_INIT],
+[[AT_SETUP([only test])
+AT_CHECK([:])
+AT_CLEANUP
+]], [AT@&t@_SETUP: missing AT@&t@_INIT detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_BANNER without AT@&t@_INIT],
+[[AT_BANNER([just a banner])
+]], [AT@&t@_BANNER: missing AT@&t@_INIT detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_CLEANUP without AT@&t@_INIT],
+[[AT_CLEANUP
+]], [AT@&t@_CLEANUP: missing AT@&t@_INIT detected])
+
+AT_CHECK_AT_SYNTAX([Missing AT@&t@_CLEANUP],
+[[AT_INIT([incomplete test suite])
+AT_SETUP([only test])
+AT_CHECK([:])
+]], [missing AT@&t@_CLEANUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_FAIL_IF without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_FAIL_IF([:])
+]], [AT@&t@_FAIL_IF: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_SKIP_IF without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_SKIP_IF([:])
+]], [AT@&t@_SKIP_IF: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_CHECK without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_CHECK([:])
+]], [AT@&t@_CHECK: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_DATA without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_DATA([file])
+]], [AT@&t@_DATA: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_XFAIL_IF without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_XFAIL_IF([:])
+]], [AT@&t@_XFAIL_IF: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_KEYWORDS without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_KEYWORDS([keyword])
+]], [AT@&t@_KEYWORDS: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_CLEANUP without AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_CLEANUP
+]], [AT@&t@_CLEANUP: missing AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_BANNER inside AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_SETUP([only test])
+AT_BANNER([banner])
+AT_CHECK([:])
+AT_CLEANUP
+]], [AT@&t@_BANNER: nested AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([AT@&t@_SETUP inside AT@&t@_SETUP],
+[[AT_INIT([incomplete test suite])
+AT_SETUP([only test])
+ AT_SETUP([nested test])
+ AT_CHECK([:])
+ AT_CLEANUP
+AT_CHECK([:])
+AT_CLEANUP
+]], [AT@&t@_SETUP: nested AT@&t@_SETUP detected])
+
+AT_CHECK_AT_SYNTAX([Multiple AT@&t@_INIT],
+[[AT_INIT([[suite, take one]])
+AT_INIT([repeat])
+]], [AT@&t@_INIT: invoked multiple times])
+
+# Check for tested programs. autoconf should only appear once.
+AT_CHECK_AT([Tested programs],
+[[AT_INIT([programs test suite])
+AT_TESTED([autoconf autom4te])
+AT_TESTED([autoconf])
+]], [], [], [], [], [],
+[AT_CHECK([[sed -n 's|.*/\([^ /]* --version\)|\1|p' micro-suite.log]], [],
+[[autoconf --version
+autom4te --version
+]])])
+
+AT_CHECK_AT([Startup error messages],
+[[AT_INIT([[suite]])
+AT_SETUP([only test])
+AT_CHECK([:])
+AT_CLEANUP
+]], [], [], [], [], [],
+[AT_CHECK([sed -n '/exec AS_MESSAGE_LOG_FD/q; />&AS_MESSAGE_LOG_FD/p' < micro-suite])])
+
+## ----------------- ##
+## Status handling. ##
+## ----------------- ##
+
+AT_CHECK_AT_TEST([Truth],
+ [AT_CHECK([:], 0, [], [])])
+
+AT_CHECK_AT_TEST([Fallacy],
+ [AT_CHECK([false], [], [], [])],
+ [], [1], [], [ignore], [],
+ [AT_CHECK([grep failed micro-suite.log], [], [ignore])])
+
+AT_CHECK_AT_TEST([Skip],
+ [AT_CHECK([echo output; echo irrelevant >&2; exit 77], 0, [mismatch], [])],
+ [], [], [], [], [],
+ [AT_CHECK([grep skipped micro-suite.log], [], [ignore])])
+
+AT_CHECK_AT_TEST([Hard fail],
+ [AT_CHECK([exit 99])
+ AT_CLEANUP
+ AT_SETUP([another test])
+ AT_XFAIL_IF([:])
+ AT_CHECK([exit 99])],
+ [], [1], [], [ignore], [],
+ [AT_CHECK([grep '2 failed unexpectedly' micro-suite.log], [], [ignore])
+ AT_CHECK([grep '^[[12]].*ok' micro-suite.log], [1])])
+
+AT_CHECK_AT_TEST([AT@&t@_FAIL_IF],
+ [AT_FAIL_IF([:])
+ AT_CLEANUP
+ AT_SETUP
+ AT_FAIL_IF([false])
+ AT_CLEANUP
+ AT_SETUP
+ AT_FAIL_IF([test x = y])
+ AT_CLEANUP
+ AT_SETUP
+ AT_FAIL_IF([bah])
+ AT_CLEANUP
+ AT_SETUP
+ AT_FAIL_IF([test x = x])
+ AT_CLEANUP
+ AT_SETUP
+ AT_FAIL_IF([test $foo = x])],
+ [], [1], [stdout], [ignore], [],
+ [AT_CHECK([grep '1 5 failed' stdout], [], [ignore], [ignore])])
+
+AT_CHECK_AT_TEST([AT@&t@_SKIP_IF],
+ [AT_SKIP_IF([:])
+ AT_CLEANUP
+ AT_SETUP
+ AT_SKIP_IF([false])
+ AT_CLEANUP
+ AT_SETUP
+ AT_SKIP_IF([test x = y])
+ AT_CLEANUP
+ AT_SETUP
+ AT_SKIP_IF([bah])
+ AT_CLEANUP
+ AT_SETUP
+ AT_SKIP_IF([test x = x])
+ AT_CLEANUP
+ AT_SETUP
+ AT_SKIP_IF([test $foo = x])],
+ [], [], [], [], [],
+ [AT_CHECK([grep '2.*skipped' micro-suite.log], [], [ignore], [ignore])])
+
+AT_CHECK_AT_TEST([Syntax error],
+ [AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([syntax])
+ AT_CHECK([if])
+ AT_CLEANUP
+ AT_SETUP([another test])
+ AT_CHECK([:])],
+ [], [0], [], [], [],
+ [dnl Until we can find a way to avoid catastrophic failure (ash) or
+ dnl lack of failure (zsh), skip the rest of this test on such shells.
+ echo 'if' > syntax
+ AT_CHECK([${CONFIG_SHELL-$SHELL} -c 'case `. ./syntax; echo $?` in
+ 0|"") exit 77;;
+ esac'], [0], [ignore], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite], [1], [ignore], [stderr])
+ AT_CHECK([grep "unable to parse test group: 2" stderr], [0], [ignore])],
+ [1 3])
+
+AT_CHECK_AT_TEST([errexit],
+ [AT_CHECK([false])
+ AT_CLEANUP
+ AT_SETUP([test that should not be run])
+ AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([xpassing test])
+ AT_XFAIL_IF([:])
+ AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([another test that should not be run])
+ AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([skipping test])
+ AT_CHECK([exit 77])
+ AT_CLEANUP
+ AT_SETUP([xfailing test])
+ AT_XFAIL_IF([:])
+ AT_CHECK([false])
+ AT_CLEANUP
+ AT_SETUP([a test that should be run])
+ AT_CLEANUP
+ AT_SETUP([hard failure])
+ AT_XFAIL_IF([:])
+ AT_CHECK([exit 99])
+ AT_CLEANUP
+ AT_SETUP([yet another test that should not be run])],
+ [], [1], [stdout], [stderr], [],
+ [AT_CHECK([test -f micro-suite.log], [1])
+ touch micro-suite.log # shut up AT_CAPTURE_FILE.
+ AT_CHECK([grep "should not be run" stdout], [1])
+ AT_CHECK([grep "1 .* inhibited subsequent" stderr], [], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite --errexit 3-], [1], [stdout], [stderr])
+ AT_CHECK([grep "should not be run" stdout], [1])
+ AT_CHECK([grep "1 .* inhibited subsequent" stderr], [], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite --errexit 5-], [1], [stdout], [stderr])
+ AT_CHECK([grep "should be run" stdout], [0], [ignore])
+ AT_CHECK([grep "should not be run" stdout], [1])
+ AT_CHECK([grep "inhibited subsequent" stderr], [], [ignore])],
+ [--errexit])
+
+
+AT_CHECK_AT_TEST([at_status],
+ [AT_CHECK([exit $mystatus], [$expected], [], [],
+ [AT_CHECK([echo run-if-fail: $at_status], [], [ignore])],
+ [AT_CHECK([echo run-if-pass: $at_status], [], [ignore])])
+ AT_CLEANUP
+ AT_SETUP([test with nested checks])
+ AT_CHECK([exit $mystatus], [$expected], [], [],
+ [AT_CHECK([exit $mystatus], [$expected], [], [],
+ [AT_CHECK([echo inner run-if-fail: $at_status], [],
+ [ignore])])])],
+ [], [], [stdout], [],
+[], [
+AT_CHECK([grep 'inner run-if-fail: 42' stdout], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x -v 1 mystatus=0 expected=0], [], [stdout])
+AT_CHECK([grep 'run-if-pass: 0' stdout], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x -v 1 mystatus=42 expected=0], [], [stdout])
+AT_CHECK([grep 'run-if-fail: 42' stdout], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x -v 1 mystatus=0 expected=42], [], [stdout])
+AT_CHECK([grep 'run-if-fail: 0' stdout], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x -v 1 mystatus=42 expected=42], [], [stdout])
+AT_CHECK([grep 'run-if-pass: 42' stdout], [], [ignore])
+],
+[-v mystatus=42 expected=1
+])
+
+
+AT_CHECK_AT_TEST([AT@&t@_CHECK execution environment],
+ [dnl The first test should fail, so we enter RUN-IF-FAIL.
+ AT_CHECK([test "$state" != before], [], [], [],
+ [state=run-if-fail
+ AT_CHECK([:]) dnl need this so we do not bail out at this point.
+ ])
+ dnl This should pass, so we enter RUN-IF-PASS.
+ AT_CHECK([test "$state" = run-if-fail], [], [], [], [],
+ [state=run-if-pass])
+ AT_CHECK([test "$state" = run-if-pass])
+ dnl However, COMMANDS are run inside a subshell, so do not change state.
+ AT_CHECK([state=broken; false], [], [], [],
+ [AT_CHECK([test "$state" = run-if-pass])])
+ AT_CHECK([state=broken], [], [], [], [],
+ [AT_CHECK([test "$state" = run-if-pass])])
+ ],
+ [], [], [], [], [], [], [state=before])
+
+
+AT_CHECK_AT_TEST([unquoted output],
+ [m4_define([backtick], [`])
+ a=a
+ AT_CHECK_UNQUOTED([echo 'a"b backtick`'], [],
+ [${a}"`echo 'b '`\`\backtick]m4_newline)],
+ [], [], [], [], [AT_KEYWORDS([AT@&t@_CHECK_UNQUOTED])])
+
+AT_CHECK_AT_TEST([Trace output],
+ [AT_CHECK([echo some longer longer longer command piped | ]dnl
+ [sed 's,into some other longer longer longer command,,'],
+ [], [some longer longer longer command piped
+])])
+
+AT_CHECK_AT([Logging],
+ [[AT_INIT([artificial test suite])
+ dnl intentionally write failing tests, to see what gets logged
+ AT_SETUP([one])
+ AT_CHECK([echo magicstring01], [1], [ignore])
+ AT_CLEANUP
+ AT_SETUP([two])
+ AT_CHECK([echo magicstring02 >&2], [1], [], [ignore])
+ AT_CLEANUP
+ AT_SETUP([three])
+ AT_CHECK([echo magicstring03], [1], [ignore-nolog])
+ AT_CLEANUP
+ AT_SETUP([four])
+ AT_CHECK([echo magicstring04 >&2], [1], [], [ignore-nolog])
+ AT_CLEANUP
+ AT_SETUP([five])
+ AT_CHECK([echo magicstring05], [1], [stdout])
+ AT_CLEANUP
+ AT_SETUP([six])
+ AT_CHECK([echo magicstring06 >&2], [1], [], [stderr])
+ AT_CLEANUP
+ AT_SETUP([seven])
+ AT_CHECK([echo magicstring07], [1], [stdout-nolog])
+ AT_CLEANUP
+ AT_SETUP([eight])
+ AT_CHECK([echo magicstring08 >&2], [1], [], [stderr-nolog])
+ AT_CLEANUP
+ AT_SETUP([nine])
+ echo magicstring09 > expout
+ AT_CHECK([echo magicstring09], [1], [expout])
+ AT_CLEANUP
+ AT_SETUP([ten])
+ echo magicstring10 > experr
+ AT_CHECK([echo magicstring10 >&2], [1], [], [experr])
+ AT_CLEANUP
+]], [], [1], [], [ignore], [],
+ [AT_CHECK([$CONFIG_SHELL ./micro-suite], [1], [ignore-nolog], [ignore-nolog])
+ AT_CHECK([grep '^magicstring' micro-suite.log], [],
+[[magicstring01
+magicstring02
+magicstring05
+magicstring06
+]])])
+
+
+AT_CHECK_AT([Binary output],
+ [[AT_INIT([artificial test suite])
+ AT_SETUP([pass: no trailing newline])
+ AT_CHECK([printf short], [0], [stdout-nolog])
+ AT_CHECK([cat stdout], [0], [[short]])
+ AT_CLEANUP
+ AT_SETUP([pass: non-printing characters])
+ AT_CHECK([printf '\1\n' >&2], [0], [], [stderr-nolog])
+ printf '\1\n' > expout
+ AT_CHECK([cat stderr], [0], [expout])
+ AT_CLEANUP
+ AT_SETUP([pass: long lines])
+ # 5000 bytes in str
+ str=..........
+ str=$str$str$str$str$str$str$str$str$str$str
+ str=$str$str$str$str$str$str$str$str$str$str
+ str=$str$str$str$str$str
+ AT_CHECK_UNQUOTED([echo $str], [0], [[$str]m4_newline])
+ AT_CLEANUP
+ AT_SETUP([fail: no trailing newline])
+ AT_CHECK([printf short], [0], [stdout-nolog])
+ AT_CHECK([cat stdout], [0], [[long]])
+ AT_CLEANUP
+ AT_SETUP([fail: non-printing characters])
+ AT_CHECK([printf '\1\n' >&2], [0], [], [stderr-nolog])
+ printf '\2\n' > expout
+ AT_CHECK([cat stderr], [0], [expout])
+ AT_CLEANUP
+ AT_SETUP([fail: long lines])
+ # 5000 bytes in str
+ str=..........
+ str=$str$str$str$str$str$str$str$str$str$str
+ str=$str$str$str$str$str$str$str$str$str$str
+ str=$str$str$str$str$str
+ AT_CHECK_UNQUOTED([echo x$str], [0], [[${str}x]m4_newline])
+ AT_CLEANUP
+]], [], [0], [], [], [],
+ [AT_CHECK([$CONFIG_SHELL ./micro-suite 4], [1], [ignore], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite 5], [1], [ignore], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite 6], [1], [ignore], [ignore])], [1-3])
+
+
+AT_CHECK_AT_TEST([Cleanup],
+ [AT_CHECK([test ! -f cleanup.success && test ! -f cleanup.failure])
+ AT_XFAIL_IF([$xfail])
+ AT_CHECK_UNQUOTED([exit $value], [ignore], [$output],
+ [], [touch cleanup.failure], [touch cleanup.success])],
+ [], [], [], [],
+ [AT_KEYWORDS([AT@&t@_CHECK_UNQUOTED])
+ output=; export output],
+ [AT_CHECK([test -d micro-suite.dir/1])
+ AT_CHECK([test -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.failure])
+
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -d xfail=false value=1], [], [ignore])
+ AT_CHECK([test -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.failure])
+
+ AT_CHECK([$CONFIG_SHELL ./micro-suite xfail=: value=0],
+ [1], [ignore], [ignore])
+ AT_CHECK([test -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.failure])
+
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -d xfail=false value=1 output=mismatch],
+ [1], [ignore], [ignore])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test -f micro-suite.dir/1/cleanup.failure])
+
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -d xfail=false value=77], [], [ignore])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.failure])
+
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -d xfail=false value=99],
+ [1], [ignore], [ignore])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.success])
+ AT_CHECK([test ! -f micro-suite.dir/1/cleanup.failure])
+ ], [-d xfail=false value=0])
+
+## ----------------------------------------------------- ##
+## Newlines and command substitutions in test commands. ##
+## ----------------------------------------------------- ##
+
+AT_CHECK_AT_TEST([Literal multiline command],
+ [AT_CHECK([echo Auto'
+'conf], 0, [Auto
+conf
+], [])])
+
+AT_CHECK_AT_TEST([Multiline parameter expansion],
+ [FOO='one
+two'
+ AT_CHECK([echo "$FOO"], 0, [one
+two
+], [])])
+
+AT_CHECK_AT_TEST([Backquote command substitution],
+ [AT_CHECK([echo `echo hi`], 0, [hi
+], [])])
+
+
+AT_CHECK_AT_TEST([Multiline backquote command substitution],
+ [AT_DATA([myfile],[foo
+bar
+])
+ AT_CHECK([echo "`cat myfile`"], 0, [foo
+bar
+], [])])
+
+AT_CHECK_AT_TEST([Parenthetical command substitution],
+ [AT_CHECK([echo $(echo hi)], 0, [hi
+], [])],
+ [AT_NO_CMDSUBST])
+
+AT_CHECK_AT_TEST([Multiline parenthetical command substitution],
+ [AT_DATA([myfile],[foo
+bar
+])
+ AT_CHECK([echo "$(cat myfile)"], 0, [foo
+bar
+], [])],
+ [AT_NO_CMDSUBST])
+
+
+AT_CHECK_AT_TEST([Shell comment in command],
+ [my_echo=echo
+ AT_CHECK([$my_echo one [#] two], [], [one
+])])
+
+
+## ------------------------- ##
+## ${...} in test commands. ##
+## ------------------------- ##
+
+# If this invalid parameter expansion capsizes the test suite, the entire
+# AT_SETUP ... AT_CLEANUP subshell will exit, and the commands it runs will
+# appear to have succeeded. Therefore, we verify a failing test case.
+
+AT_CHECK_AT_TEST([Invalid brace-enclosed parameter expansion],
+ [AT_CHECK([echo '${=invalid}'], 0, [wrong])], [false], 1, ignore, ignore)
+
+
+## ---------------------------- ##
+## M4 macros in test commands. ##
+## ---------------------------- ##
+
+AT_CHECK_AT_TEST([Multiline command from M4 expansion],
+ [m4_define([GNU], ['foo
+bar'])
+ AT_CHECK([echo GNU], 0, [foo
+bar
+], [])])
+
+AT_CHECK_AT_TEST([Double-M4-quoted command],
+ [m4_define([GNU], ['foo
+bar'])
+ AT_CHECK([[echo GNU]], 0, [[GNU
+]], [])])
+
+
+AT_CHECK_AT_TEST([Metacharacters in command from M4 expansion],
+ [m4_define([GNU], [\"`])
+ AT_CHECK([echo '\"`' [GNU] 'GNU'], 0, [GNU [G][NU] [\"`
+]], [])])
+
+
+## -------------------------------------- ##
+## Backslash-<newline> in test commands. ##
+## -------------------------------------- ##
+
+AT_CHECK_AT_TEST([BS-newline in command],
+ [AT_CHECK([echo Auto"\
+"conf], 0, [Autoconf
+], [])])
+
+AT_CHECK_AT_TEST([^BS-newline in command],
+ [AT_CHECK([\
+echo GNU], 0, [GNU
+], [])])
+
+AT_CHECK_AT_TEST([BSx641-newline in command],
+ [AT_CHECK([printf '%s\n' Auto"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+"conf], 0, [Auto\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\conf
+], [])])
+
+AT_CHECK_AT_TEST([BS-BS-newline in command],
+ [AT_CHECK([printf '%s\n' Auto"\\
+"conf], 0, [Auto\
+conf
+], [])])
+
+# A `^BS-BS-newline in command' test will run a command named `\'. No, thanks.
+
+AT_CHECK_AT_TEST([BSx640-newline in command],
+ [AT_CHECK([printf '%s\n' Auto"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+"conf], 0, [Auto\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
+conf
+], [])])
+
+# This command has both escaped and unescaped newlines.
+AT_CHECK_AT_TEST([Newline-CODE-BS-newline in command],
+ [AT_CHECK([printf '%s\n' Auto'
+'co\
+nf], 0, [Auto
+conf
+], [])])
+
+AT_CHECK_AT_TEST([Single-quote-BS-newline in command],
+ [AT_CHECK([printf '%s\n' Auto'\
+'conf], 0, [Auto\
+conf
+], [])])
+
+AT_CHECK_AT_TEST([Single-quote-newline-BS-newline in command],
+ [AT_CHECK([printf '%s\n' Auto'
+\
+'conf], 0, [Auto
+\
+conf
+], [])])
+
+
+## ----------------- ##
+## Input from stdin. ##
+## ----------------- ##
+
+AT_SETUP([Input from stdin])
+
+AT_CHECK_AT_PREP([micro-suite],
+[[AT_INIT
+AT_SETUP([please enter hello<RETURN><EOF>])
+AT_CHECK([cat], [], [hello
+])
+AT_CLEANUP
+]])
+
+AT_CHECK([echo hello | $CONFIG_SHELL ./micro-suite], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite </dev/null], [1], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Funny characters in test names. ##
+## ------------------------------- ##
+
+# AT_CHECK_AT_TITLE(TITLE, TITLE-TO-TEST, EXPANDED-TITLE-TO-TEST,
+# [XFAIL-CONDITION], [COLUMN = 53])
+# ---------------------------------------------------------------
+# Create a new test named TITLE that runs an Autotest test suite
+# comprised of a trivial test named TITLE-TO-TEST, which expands
+# to EXPANDED-TITLE-TO-TEST. XFAIL-CONDITION passes verbatim to
+# AT_CHECK_AT. Verify that `ok' prints at COLUMN.
+m4_define([AT_CHECK_AT_TITLE],
+[AT_CHECK_AT([$1],
+[[
+m4_define([macro_name], [[macro_expanded]])
+m4_define([macro_expanded], [[macro_overexpanded]])
+m4_define([macro_backquote], [`])
+m4_define([macro_single_quote], ['])
+m4_define([macro_double_quote], ["])
+]]dnl restore font-lock: "
+[[m4_define([macro_backslash], [\])
+m4_define([macro_echo], [$][1])
+AT_INIT([artificial test suite])
+AT_SETUP([$2])
+AT_CHECK([:])
+AT_CLEANUP
+]], [$4], [], [], [], [],
+dnl This sed script checks for two things - that the output is properly
+dnl expanded, and that the 'ok' starts on the right column.
+[AT_KEYWORDS([m4@&t@_expand])
+AT_CHECK([[$CONFIG_SHELL ./micro-suite |
+ sed -n '/^ 1:/{
+h
+s/[^:]*: \(.*[^ ]\)[ ]*ok.*/\1/p
+x
+s/^.\{]]]m4_default($5, 53)[[[\}ok.*/ok/p
+}']],,
+[[$3
+ok
+]])
+dnl This sed script checks for two things - that -v output doesn't have
+dnl an empty $at_srcdir expansion, and that the 'testing ...' line
+dnl contains the test group title.
+AT_CHECK([[$CONFIG_SHELL ./micro-suite -v |
+ sed -n 's/.*testing \(.*\) \.\.\./\1/p; /^\/micro-suite\.at:/p']],,
+[[$3
+]])
+AT_CHECK([[$CONFIG_SHELL ./micro-suite -l |
+ sed -n 's/.*[0-9]: [^ ][^ ]*[ ][ ]*\(.*[^ ]\)[ ]*/\1/p']],,
+[[$3
+]])
+AT_CHECK([[sed -n 's/[^.]*\. \(.*\) ([^)]*): ok.*/\1/p' micro-suite.log]],,
+[[$3
+]])
+])])
+
+m4_define([AT_CHECK_AT_TITLE_CHAR],
+[AT_CHECK_AT_TITLE([$1 in a test title], [A $2 in my name],
+ [A ]m4_ifval([$3], [[$3]], [[$2]])[ in my name], $4, $5)])
+
+AT_CHECK_AT_TITLE_CHAR([Backquote], [`])
+AT_CHECK_AT_TITLE_CHAR([Single-quote], ['])
+AT_CHECK_AT_TITLE_CHAR([Double-quote], ["])
+dnl restore font-lock: "
+AT_CHECK_AT_TITLE_CHAR([Backslash], [\])
+AT_CHECK_AT_TITLE_CHAR([Brackets], [[[]]], [[]])
+AT_CHECK_AT_TITLE_CHAR([Left bracket], [@<:@], [@<:@])
+AT_CHECK_AT_TITLE_CHAR([Right bracket], [@:>@], [@:>@])
+AT_CHECK_AT_TITLE_CHAR([Quoted pound], [[#]], [#])
+AT_CHECK_AT_TITLE_CHAR([Pound], [#])
+AT_CHECK_AT_TITLE_CHAR([Quoted comma], [[,]], [,])
+AT_CHECK_AT_TITLE_CHAR([Comma], [,])
+dnl this test also hits quadrigraphs for ()
+AT_CHECK_AT_TITLE_CHAR([Parentheses], [(@{:@)@:}@], [(())])
+AT_CHECK_AT_TITLE_CHAR([Left paren], [[(]], [(])
+AT_CHECK_AT_TITLE_CHAR([Right paren], [[)]], [)])
+
+AT_CHECK_AT_TITLE_CHAR([Quoted Macro], [[macro_name]], [macro_name])
+AT_CHECK_AT_TITLE_CHAR([Macro], [macro_name], [macro_expanded])
+AT_CHECK_AT_TITLE_CHAR([Macro with backquote], [macro_backquote], [`])
+AT_CHECK_AT_TITLE_CHAR([Macro with single-quote], [macro_single_quote], ['])
+AT_CHECK_AT_TITLE_CHAR([Macro with double-quote], [macro_double_quote], ["])
+dnl restore font-lock: "
+AT_CHECK_AT_TITLE_CHAR([Macro with backslash], [macro_backslash], [\])
+AT_CHECK_AT_TITLE_CHAR([Macro echoing macro], [macro_echo([macro_name])],
+ [macro_expanded])
+AT_CHECK_AT_TITLE_CHAR([Macro echoing single-quote], [macro_echo(['])], ['])
+AT_CHECK_AT_TITLE_CHAR([Long test title], [0123456789012345678901234567890123])
+AT_CHECK_AT_TITLE_CHAR([Longer test title],
+ [01234567890123456789012345678901234], [], [], [54])
+
+
+## ----------------------- ##
+## Long test source lines. ##
+## ----------------------- ##
+
+# Create a test file that has more than 99 words in a line, for Solaris awk.
+# While at that, try out the limit of 2000 bytes in a text file line.
+
+AT_CHECK_AT_TEST([Long test source lines],
+[m4_for([nnn], [1], [999], [], [: ])
+AT_CHECK([:])
+], [], [], [], [ignore], [],
+[AT_CHECK([$CONFIG_SHELL ./micro-suite -k skipalltests], [], [ignore], [ignore])
+])
+
+
+## ---------------- ##
+## Huge testsuite. ##
+## ---------------- ##
+
+# Ensure we don't hit line length limits with large test suites.
+
+AT_CHECK_AT_TEST([Huge testsuite],
+[m4_for([nnn], [1], [1999], [],
+[AT_CLEANUP
+AT_SETUP([test ]nnn)
+])
+], [], [], [], [ignore], [], [], [1999])
+
+
+## ----------------- ##
+## Debugging a test. ##
+## ----------------- ##
+
+AT_CHECK_AT_TEST([Debugging a successful test],
+ [AT_CHECK([:])], [], [], [], [ignore], [],
+[# Without options, when all tests pass, no test directory should exist.
+AT_CHECK([test -d micro-suite.dir/1 && exit 42
+ $CONFIG_SHELL ./micro-suite -d 1], [], [ignore], [ignore])
+# Running with -d should leave a reproducible test group.
+# Also, running the test script from the test group locks the
+# directory from removal on some platforms; the script should still be
+# able to run even if rmdir fails.
+AT_CHECK([(cd micro-suite.dir/1 && ./run)], [], [ignore], [ignore])
+# Running a debugging script implies -d.
+AT_CHECK([(cd micro-suite.dir/1 && ./run)], [], [ignore], [ignore])
+])
+
+AT_CHECK_AT_TEST([Debugging script and environment],
+ [AT_CHECK([test "$MY_VAR" = pass || exit 42])],
+ [], [1], [], [ignore], [], [
+# Changing environment outside of debugging script is not preserved.
+AT_CHECK([(cd micro-suite.dir/1 && MY_VAR=pass ./run)],
+ [0], [ignore], [ignore])
+AT_CHECK([(cd micro-suite.dir/1 && ./run)],
+ [1], [ignore], [ignore])
+# Changing environment as argument to debugging script is preserved.
+AT_CHECK([(cd micro-suite.dir/1; ./run MY_VAR=pass)],
+ [0], [ignore], [ignore])
+AT_CHECK([(cd micro-suite.dir/1; ./run)],
+ [0], [ignore], [ignore])
+])
+
+# The run script must still be valid when shell metacharacters are passed
+# in via an environment option.
+AT_CHECK_AT_TEST([Debugging a failed test],
+ [AT_CHECK([test "$MY_VAR" = "one space" || exit 42])],
+ [], [1], [], [ignore], [], [
+AT_CHECK([(cd micro-suite.dir/1 && ./run MY_VAR='two spaces')],
+ [1], [ignore], [ignore])
+AT_CHECK([(cd micro-suite.dir/1 && ./run MY_VAR='one space')],
+ [0], [ignore], [ignore])
+])
+
+
+# Setting default variable values via atlocal.
+AT_CHECK_AT_TEST([Using atlocal],
+ [AT_CHECK([test "x$MY_VAR" = "xodd; 'string" || exit 42])],
+ [], [1], [ignore], [ignore], [], [
+dnl check that command line can set variable
+AT_CHECK([$CONFIG_SHELL ./micro-suite MY_VAR="odd; 'string"], [0], [ignore])
+dnl check that command line overrides environment
+AT_CHECK([MY_VAR="odd; 'string" $CONFIG_SHELL ./micro-suite MY_VAR=unset],
+ [1], [ignore], [ignore])
+dnl check that atlocal can give it a default
+AT_CHECK([cat <<EOF >atlocal
+MY_VAR="odd; 'string"
+export MY_VAR
+dnl Also populate enough of atlocal to do what atconfig normally does.
+at_testdir=.
+abs_builddir='`pwd`'
+at_srcdir=.
+abs_srcdir='`pwd`'
+at_top_srcdir=.
+abs_top_srcdir='`pwd`'
+at_top_build_prefix=
+abs_top_builddir='`pwd`'
+EOF
+])
+AT_CHECK([$CONFIG_SHELL ./micro-suite], [0], [ignore])
+dnl check that atlocal overrides environment
+AT_CHECK([MY_VAR=unset $CONFIG_SHELL ./micro-suite], [0], [ignore])
+dnl check that command line overrides atlocal
+AT_CHECK([$CONFIG_SHELL ./micro-suite MY_VAR=], [1], [ignore], [ignore])
+dnl check that syntax error is detected
+AT_CHECK([$CONFIG_SHELL ./micro-suite =], [1], [], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite 1=2], [1], [], [ignore], [ignore])
+])
+
+
+# Controlling where the testsuite is run.
+AT_CHECK_AT_TEST([Choosing where testsuite is run],
+ [AT_CHECK([:])], [], [], [], [], [], [
+dnl AT_CHECK_AT_TEST tests the default of running in `.'.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --clean])
+AT_CHECK([test -f micro-suite.log], [1])
+AT_CHECK([test -d micro-suite.dir], [1])
+AT_CHECK([mkdir sub1 sub2])
+dnl check specifying a different relative path to run in.
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C sub1], [0], [ignore], [])
+AT_CHECK([test -f micro-suite.log], [1])
+AT_CHECK([test -f sub1/micro-suite.log], [0])
+AT_CHECK([test -d micro-suite.dir], [1])
+AT_CHECK([test -d sub1/micro-suite.dir], [0])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C sub1 --clean])
+AT_CHECK([test -f sub1/micro-suite.log], [1])
+AT_CHECK([test -d sub1/micro-suite.dir], [1])
+dnl check specifying an absolute path to run in.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --directory="`pwd`/sub2"],
+ [0], [ignore], [])
+AT_CHECK([test -f micro-suite.log], [1])
+AT_CHECK([test -f sub2/micro-suite.log], [0])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --clean --directory="`pwd`/sub2"])
+AT_CHECK([test -f sub2/micro-suite.log], [1])
+AT_CHECK([test -f sub2/micro-suite.dir], [1])
+dnl check for failure detection with bad, missing, or empty directory.
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C nonesuch || exit 1], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C ''], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C - || exit 1], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C], [1], [ignore], [ignore])
+dnl check that --help overrides bad directory selection.
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C nonesuch --help], [0], [ignore], [])
+])
+
+
+# --recheck.
+AT_CHECK_AT_TEST([recheck],
+ [AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([failing test])
+ AT_CHECK([exit 1])
+ AT_CLEANUP
+ AT_SETUP([xpassing test])
+ AT_XFAIL_IF([:])
+ AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([xfailing test])
+ AT_XFAIL_IF([:])
+ AT_CHECK([exit 1])
+], [], [], [], [], [], [
+AT_CHECK([$CONFIG_SHELL ./micro-suite --recheck], [0], [stdout])
+AT_CHECK([grep "0 tests were successful" stdout], [0], [ignore])
+
+AT_CHECK([$CONFIG_SHELL ./micro-suite], [1], [ignore], [ignore])
+AT_CHECK([grep 'only test' micro-suite.log], [0], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --recheck], [1], [ignore], [ignore])
+AT_CHECK([grep 'only test' micro-suite.log], [1])
+AT_CHECK([grep 'xfailing' micro-suite.log], [1])
+AT_CHECK([grep 'failing test' micro-suite.log], [0], [ignore])
+AT_CHECK([grep 'xpassing test' micro-suite.log], [0], [ignore])
+
+AT_CHECK([$CONFIG_SHELL ./micro-suite --clean], [0])
+AT_CHECK([test -f micro-suite.log], [1])
+
+dnl check specifying a different relative path to run in.
+AT_CHECK([mkdir sub1])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C sub1], [1], [ignore], [ignore])
+AT_CHECK([test -f micro-suite.log], [1])
+AT_CHECK([test -f sub1/micro-suite.log], [0])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C sub1 --recheck --list], [0], [stdout])
+AT_CHECK([grep 'only test' stdout], [1])
+AT_CHECK([grep 'xfailing test' stdout], [1])
+AT_CHECK([grep 'failing test' stdout], [0], [ignore])
+AT_CHECK([grep 'xpassing test' stdout], [0], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -C sub1 --recheck], [1], [ignore],
+ [ignore])
+AT_CHECK([grep 'failing test' sub1/micro-suite.log], [0], [ignore])
+AT_CHECK([grep 'xpassing test' sub1/micro-suite.log], [0], [ignore])
+], [1 4])
+
+
+## -------- ##
+## Banners. ##
+## -------- ##
+AT_SETUP([Banners])
+
+AT_CHECK_AT_PREP([b],
+[[AT_INIT
+AT_SETUP(zero)# 1
+AT_CHECK(:)
+AT_CLEANUP
+
+AT_BANNER([first])
+AT_SETUP(one a)# 2
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(one b)# 3
+AT_CHECK(:)
+AT_CLEANUP
+
+AT_BANNER()
+AT_SETUP(two a)# 4
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(two b)# 5
+AT_CHECK(:)
+AT_CLEANUP
+
+AT_BANNER([second])
+AT_SETUP(three a)# 6
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(three b)# 7
+AT_CHECK(:)
+AT_CLEANUP
+]])
+
+# AT_CHECK_BANNERS(TESTSUITE-OPTIONS, PATTERN1, COUNT1, PATTERN2, COUNT2)
+m4_define([AT_CHECK_BANNERS],
+[AT_CHECK([$CONFIG_SHELL ./b $1], [], [stdout])
+AT_CHECK_EGREP([$2], m4_if([$3], [0], [1], [0]), [$3])
+AT_CHECK_EGREP([$4], m4_if([$5], [0], [1], [0]), [$5])
+])
+
+AT_CHECK_BANNERS([], [first], [1], [second], [1])
+AT_CHECK_BANNERS([-k zero], [first], [0], [second], [0])
+AT_CHECK_BANNERS([1], [first], [0], [second], [0])
+AT_CHECK_BANNERS([-2], [first], [1], [second], [0])
+AT_CHECK_BANNERS([-3], [first], [1], [second], [0])
+AT_CHECK_BANNERS([-k one], [first], [1], [second], [0])
+AT_CHECK_BANNERS([3-4], [first], [1], [second], [0])
+dnl There should be an empty line separating the first category from the
+dnl unnamed one.
+AT_CHECK([sed -n '/one b/,/two a/p' stdout | grep '^$'], [0], [ignore])
+AT_CHECK_BANNERS([3-6], [first], [1], [second], [1])
+AT_CHECK_BANNERS([4-6], [first], [0], [second], [1])
+AT_CHECK_BANNERS([3-], [first], [1], [second], [1])
+AT_CHECK_BANNERS([-k a], [first], [1], [second], [1])
+AT_CHECK_BANNERS([4], [first], [0], [second], [0])
+AT_CHECK_BANNERS([4-], [first], [0], [second], [1])
+AT_CHECK_BANNERS([-k two], [first], [0], [second], [0])
+AT_CHECK_BANNERS([1 4], [first], [0], [second], [0])
+AT_CHECK_BANNERS([-k three], [first], [0], [second], [1])
+AT_CHECK_BANNERS([5], [first], [0], [second], [0])
+AT_CHECK_BANNERS([5-], [first], [0], [second], [1])
+AT_CLEANUP
+
+
+## --------- ##
+## Keywords. ##
+## --------- ##
+AT_SETUP([Keywords and ranges])
+
+AT_CHECK_AT_PREP([k],
+[[AT_INIT
+AT_SETUP(none) # 01
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(first) # 02
+AT_KEYWORDS(key1)
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(second) # 03
+AT_KEYWORDS(key2)
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(both) # 04
+AT_KEYWORDS([key1 key2])
+AT_KEYWORDS([m4_echo([Key1])])
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test5) # 05
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test6) # 06
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test7) # 07
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test8) # 08
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test9) # 09
+AT_CHECK(:)
+AT_CLEANUP
+AT_SETUP(test10) # 10
+AT_CHECK(:)
+AT_CLEANUP
+]])
+dnl check that AT_KEYWORDS does not duplicate words
+AT_CHECK([grep -i 'key1.*key1' k], [1])
+dnl check that -k requires an argument
+AT_CHECK([$CONFIG_SHELL ./k -k], [1], [], [ignore])
+
+# AT_CHECK_KEYS(TESTSUITE-OPTIONS, PATTERN1, COUNT1, PATTERN2, COUNT2)
+m4_define([AT_CHECK_KEYS],
+[AT_CHECK([$CONFIG_SHELL ./k $1], 0, [stdout])
+AT_CHECK_EGREP([$2], 0, [$3])
+AT_CHECK_EGREP([$4], 1, [$5])
+])
+
+AT_CHECK_KEYS([-k key1], [first|both], [2], [none|second], [0])
+AT_CHECK_KEYS([-k key2], [second|both], [2], [none|first], [0])
+AT_CHECK_KEYS([-k key1,key2], [both], [1], [none|first|second], [0])
+AT_CHECK_KEYS([-k key1 -k key2], [first|second|both], [3], [none], [0])
+AT_CHECK_KEYS([-k '!key1'], [none|second], [2], [first|both], [0])
+AT_CHECK_KEYS([-k '!key2'], [none|first], [2], [second|both], [0])
+AT_CHECK_KEYS([-k '!key1,key2'], [second], [1], [none|first|both], [0])
+AT_CHECK_KEYS([-k 'key1,!key2'], [first], [1], [none|second|both], [0])
+AT_CHECK_KEYS([-k '!key1,!key2'], [none], [1], [first|second|both], [0])
+AT_CHECK_KEYS([-k '!key1' -k KEY2], [none|second|both], [3], [first], [0])
+AT_CHECK_KEYS([-k key1 -k '!key2'], [none|first|both], [3], [second], [0])
+AT_CHECK_KEYS([-k '!KEY1' -k '!key2'], [none|first|second], [3], [both], [0])
+
+AT_CHECK_KEYS([-k none], [none], [1], [first|second|both], [0])
+AT_CHECK_KEYS([-k key1,both], [both], [1], [none|first|second], [0])
+AT_CHECK_KEYS([-k key1 -k both], [first|both], [2], [none|second], [0])
+AT_CHECK_KEYS([-k none,first], [successful], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k none,first,second,both], [successful], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k !none,first], [first], [1], [none|second|both], [0])
+
+AT_CHECK_KEYS([-k '.*eco.*'], [second], [1], [none|first|both], [0])
+AT_CHECK_KEYS([-k 'ECO'], [successful], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k '.*eco'], [successful], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k 'eco.*'], [successful], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k 'fir.*'], [first], [1], [none|second|both], [0])
+
+AT_CHECK_KEYS([1-2], [none|first], [2], [second|both], [0])
+AT_CHECK_KEYS([01-002 08], [none|first], [2], [second|both], [0])
+AT_CHECK_KEYS([1-3 2-1], [none|first|second], [3], [both], [0])
+AT_CHECK_KEYS([-3], [none|first|second], [3], [both], [0])
+AT_CHECK_KEYS([4-], [both], [1], [none|first|second], [0])
+AT_CHECK_KEYS([010], [test10], [1], [none|first|second|both], [0])
+AT_CHECK_KEYS([-k second 4-], [second|both], [2], [none|first], [0])
+
+AT_CHECK([$CONFIG_SHELL ./k 0], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k 0-], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k -0], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k 11], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k 11-], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k 1-011], [1], [ignore], [ignore])
+AT_CHECK([$CONFIG_SHELL ./k -k nonexistent], [0], [ignore])
+
+AT_CHECK_KEYS([--list -k nonexistent], [KEYWORDS], [1], [first|second|both], [0])
+AT_CHECK_KEYS([--list 1], [none], [1], [first|second|both], [0])
+AT_CHECK_KEYS([--list 01], [none], [1], [first|second|both], [0])
+AT_CHECK_KEYS([--list -k none -k first], [none|first], [2], [second|both], [0])
+AT_CLEANUP
+
+
+## ----------------- ##
+## Keyword wrapping. ##
+## ----------------- ##
+AT_SETUP([Keyword wrapping])
+
+AT_CHECK_AT_PREP([k],
+[[AT_INIT
+AT_SETUP([test])
+AT_KEYWORDS([a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 k1 l1 m1 n1 o1 p1 q1 r1 s1 t1])
+AT_KEYWORDS([u1 v1 w1 x1 y1 z1])
+AT_KEYWORDS([a b c d e f g h i j k l m n o p q r s t u v w x y z])
+AT_CLEANUP
+AT_SETUP([test with long keywords])
+AT_KEYWORDS(
+[this-is-a-long-keyword-that-cannot-be-wrapped-so-we-exceed-the-length-limit-here])
+# surrounded by short ones
+AT_KEYWORDS([s])
+AT_KEYWORDS(
+[another-very-long-keyword-that-hits-the-line-length-limit-bla-bla-bla-bla])
+AT_KEYWORDS([t])
+AT_CLEANUP
+]])
+
+AT_CHECK_KEYS([-l], [.{80}], [1], [.{87}], [0])
+
+AT_CLEANUP
+
+
+## ------------- ##
+## AT_ARG_OPTION ##
+## ------------- ##
+
+AT_CHECK_AT([AT@&t@_ARG_OPTION],
+[[
+AT_INIT([artificial test suite])
+AT_ARG_OPTION([frob fro fr f],
+ [AS_HELP_STRING([-f, --frob], [frobnicate the test run])],
+ [frob=$at_optarg], [frob=default])
+AT_ARG_OPTION([opt-with-hyphen],
+ [AS_HELP_STRING([--opt-with-hyphen], [option name with hypen])])
+AT_ARG_OPTION([ping],
+ [AS_HELP_STRING([--ping], [ping on every encounter])],
+ [echo ping])
+AT_SETUP([test argument handling])
+AT_CHECK([test "$frob" = "$FROB"])
+AT_CHECK([test "$at_arg_frob" = "$FROB_ARG"])
+AT_CLEANUP
+AT_SETUP([test hyphen normalization])
+AT_CHECK([test "$at_arg_opt_with_hyphen" = "$expected"])
+AT_CLEANUP
+]],
+[], [], [stdout], [], [],
+[# We already invoked --help.
+AT_CHECK([grep ' -f, --frob.*frobnicate' stdout], [], [ignore])
+for args in \
+ '1 FROB=default FROB_ARG=false' \
+ '1 -f FROB=: FROB_ARG=:' \
+ '1 --fr FROB=: FROB_ARG=:' \
+ '1 --fro FROB=: FROB_ARG=:' \
+ '1 --frob FROB=: FROB_ARG=:' \
+ '1 --no-f FROB=false FROB_ARG=false' \
+ '1 --no-fr FROB=false FROB_ARG=false' \
+ '1 --no-fro FROB=false FROB_ARG=false' \
+ '1 --no-frob FROB=false FROB_ARG=false' \
+ '2 expected=false' \
+ '2 --opt-with-hyphen expected=:' \
+ '2 --no-opt-with-hyphen expected=false'
+do
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -x $args], [], [ignore])
+done
+AT_CHECK([$CONFIG_SHELL ./micro-suite 2 --ping --no-ping --ping expected=false],
+ [], [stdout])
+AT_CHECK([grep -c ping stdout], [], [[3
+]])
+], [--help])
+
+
+## ----------------- ##
+## AT_ARG_OPTION_ARG ##
+## ----------------- ##
+
+AT_CHECK_AT([AT@&t@_ARG_OPTION_ARG],
+[[
+AT_INIT([artificial test suite])
+AT_ARG_OPTION_ARG([frob fro fr f],
+ [AS_HELP_STRING([-f, --frob=FOO], [frobnicate FOO])],
+ [frob=$at_optarg], [frob=default])
+AT_ARG_OPTION_ARG([opt-with-hyphen],
+ [AS_HELP_STRING([--opt-with-hyphen=ARG],
+ [option name with hypen])])
+AT_ARG_OPTION_ARG([ping],
+ [AS_HELP_STRING([--ping], [ping on every encounter])],
+ [echo ping])
+AT_SETUP([test argument handling])
+AT_CHECK([test "$frob" = "$FROB"])
+AT_CHECK([test "$at_arg_frob" = "$FROB_ARG"])
+AT_CLEANUP
+AT_SETUP([test hyphen normalization])
+AT_CHECK([test "$at_arg_opt_with_hyphen" = "$expected"])
+AT_CLEANUP
+]],
+[], [], [stdout], [], [],
+[# We already invoked --help.
+AT_CHECK([grep ' -f, --frob.*frobnicate' stdout], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x --frob], [1], [ignore], [stderr])
+AT_CHECK([grep 'requires an argument' stderr], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -x --no-frob], [1], [ignore], [stderr])
+AT_CHECK([grep 'invalid option' stderr], [], [ignore])
+for args in \
+ '1 FROB=default FROB_ARG=' \
+ '1 -f bar FROB=bar FROB_ARG=bar' \
+ '1 --fr bar FROB=bar FROB_ARG=bar' \
+ '1 --fro bar FROB=bar FROB_ARG=bar' \
+ '1 --frob bar FROB=bar FROB_ARG=bar' \
+ '1 -f=bar FROB=bar FROB_ARG=bar' \
+ '1 --fr=bar FROB=bar FROB_ARG=bar' \
+ '1 --fro=bar FROB=bar FROB_ARG=bar' \
+ '1 --frob=bar FROB=bar FROB_ARG=bar' \
+ '2 expected=' \
+ '2 --opt-with-hyphen=baz expected=baz'
+do
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -x $args], [], [ignore])
+done
+AT_CHECK([$CONFIG_SHELL ./micro-suite 2 --ping=1 --ping=2 expected=],
+ [], [stdout])
+AT_CHECK([grep -c ping stdout], [], [[2
+]])
+], [--help])
+
+
+m4_define([AT_SKIP_PARALLEL_TESTS],
+[# Per BUGS, we have not yet figured out how to run parallel tests cleanly
+# under dash and some ksh variants. For now, only run this test under
+# limited conditions; help is appreciated in widening this test base.
+AT_SKIP_IF([${CONFIG_SHELL-$SHELL} -c 'test -z "${BASH_VERSION+set}]]dnl
+[[${ZSH_VERSION+set}${TEST_PARALLEL_AUTOTEST+set}"'])
+# The parallel scheduler requires mkfifo and job control to work.
+AT_CHECK([mkfifo fifo || exit 77])
+AT_CHECK([${CONFIG_SHELL-$SHELL} -c '(set -m && set +m) || exit 77'],
+ [], [], [ignore])
+])
+
+
+## ----------------------- ##
+## parallel test execution ##
+## ----------------------- ##
+
+AT_SETUP([parallel test execution])
+
+# This test tries to ensure that -j runs tests in parallel.
+# Such a test is inherently racy, because there are no real-time
+# guarantees about scheduling delays. So we try to minimize
+# the chance to lose the race.
+
+# The time needed for a micro-suite consisting of NTESTS tests each
+# sleeping for a second is estimated by
+# startup + ntests * (serial_overhead + 1 / njobs)
+#
+# in absence of major scheduling delays. This leads to side conditions:
+# - NTESTS should be high, so the STARTUP time is small compared to the
+# test run time, and scheduling delays can even out; it should not be
+# too high, to not slow down the testsuite unnecessarily,
+# - the number of concurrent jobs NJOBS should not be too low, so the
+# race is not lost so easily; it should not be too high, to avoid fork
+# failures on tightly limited systems. 4 seems a good compromise
+# here, considering that Autotest spawns several other processes.
+# - STARTUP is assumed to be the same for parallel and serial runs, so
+# the latter can estimate the former.
+# - To avoid unportable output from time measurement commands, spawn
+# both a parallel and a serial testsuite run; check that the former
+# completes before the latter has completed a fraction SERIAL_NTESTS
+# of the tests (the serial run is executed in a subdirectory), plus
+# some additional time to allow for compensation of SERIAL_OVERHEAD.
+# - when adding this time to the serial test execution, an initial delay
+# SERIAL_DELAY of the serial test helps to avoid unreliable scheduling
+# due to the startup burst of the suites.
+
+dnl total number of tests.
+m4_define([AT_PARALLEL_NTESTS], [16])
+dnl number of jobs to run in parallel.
+m4_define([AT_PARALLEL_NJOBS], [4])
+dnl number of tests to run serially, as comparison.
+m4_define([AT_PARALLEL_SERIAL_NTESTS],
+ m4_eval(AT_PARALLEL_NTESTS / AT_PARALLEL_NJOBS))
+dnl initial delay of serial run, to compensate for SERIAL_OVERHEAD.
+dnl This corresponds to 0.67 s of overhead per test.
+m4_define([AT_PARALLEL_SERIAL_DELAY],
+ m4_eval((AT_PARALLEL_NTESTS - AT_PARALLEL_SERIAL_NTESTS + 1) * 2 / 3))
+
+
+AT_CHECK_AT_PREP([micro-suite],
+[[AT_INIT([suite to test parallel execution])
+m4_for([count], [1], ]]AT_PARALLEL_NTESTS[[, [],
+ [AT_SETUP([test number count])
+ AT_CHECK([sleep 1])
+ AT_CLEANUP
+])
+]])
+
+# Even if parallel jobs are not supported, the command line must work.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --help | grep " --jobs"], [0], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j2foo], [1], [], [stderr])
+AT_CHECK([grep 'non-numeric argument' stderr], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --jobs=foo], [1], [], [stderr])
+AT_CHECK([grep 'non-numeric argument' stderr], [], [ignore])
+
+AT_SKIP_PARALLEL_TESTS
+
+# Ensure that all tests run, and lines are not split.
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j[]AT_PARALLEL_NJOBS], [], [stdout])
+AT_CHECK([grep -c '^.\{53\}ok' stdout], [], [AT_PARALLEL_NTESTS
+])
+# Running one test with -j should produce correctly formatted output:
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j 3], [], [stdout])
+AT_CHECK([grep -c '^.\{53\}ok' stdout], [], [1
+])
+# Specifying more jobs than tests should not hang:
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j3 3], [], [stdout])
+AT_CHECK([grep -c '^.\{53\}ok' stdout], [], [1
+])
+# Not even with zero tests:
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j -k nomatch], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite -j3 -k nomatch], [], [ignore])
+
+mkdir serial
+
+# Unfortunately, the return value of wait is unreliable,
+# so we check that kill fails.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --jobs=[]AT_PARALLEL_NJOBS & ]dnl
+ [sleep AT_PARALLEL_SERIAL_DELAY && ]dnl
+ [cd serial && $CONFIG_SHELL ../micro-suite -AT_PARALLEL_SERIAL_NTESTS >/dev/null && ]dnl
+ [{ kill $! && exit 1; :; }], [], [stdout], [ignore])
+AT_CHECK([grep -c '^.\{53\}ok' stdout], [], [AT_PARALLEL_NTESTS
+])
+AT_CHECK([grep 'AT_PARALLEL_NTESTS tests' stdout], [], [ignore])
+
+AT_CLEANUP
+
+AT_CHECK_AT_TEST([parallel truth],
+ [AT_CHECK([:], 0, [], [])],
+ [], [], [], [], [AT_SKIP_PARALLEL_TESTS],
+ [], [-j])
+
+AT_CHECK_AT_TEST([parallel fallacy],
+ [AT_CHECK([false], [], [], [])],
+ [], [1], [], [ignore], [AT_SKIP_PARALLEL_TESTS],
+ [AT_CHECK([grep failed micro-suite.log], [], [ignore])], [-j])
+
+AT_CHECK_AT_TEST([parallel skip],
+ [AT_CHECK([echo output; echo irrelevant >&2; exit 77], 0, [mismatch], [])],
+ [], [], [], [], [AT_SKIP_PARALLEL_TESTS],
+ [AT_CHECK([grep skipped micro-suite.log], [], [ignore])], [-j])
+
+AT_CHECK_AT_TEST([parallel syntax error],
+ [AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([syntax])
+ AT_CHECK([if])
+ AT_CLEANUP
+ AT_SETUP([another test])
+ AT_CHECK([:])],
+ [], [0], [], [], [AT_SKIP_PARALLEL_TESTS],
+ [dnl Until we can find a way to avoid catastrophic failure (ash) or
+ dnl lack of failure (zsh), skip the rest of this test on such shells.
+ echo 'if' > syntax
+ AT_CHECK([${CONFIG_SHELL-$SHELL} -c 'case `. ./syntax; echo $?` in
+ 0|"") exit 77;;
+ esac'], [0], [ignore], [ignore])
+ AT_CHECK([$CONFIG_SHELL ./micro-suite -j], [1], [ignore], [stderr])
+ AT_CHECK([grep "unable to parse test group: 2" stderr], [0], [ignore])],
+ [-j2 1 3])
+
+AT_CHECK_AT_TEST([parallel errexit],
+ [AT_CHECK([false])
+ AT_CLEANUP
+ AT_SETUP([barrier test])
+ AT_CHECK([sleep 4])
+ AT_CLEANUP
+ AT_SETUP([test that should not be run])
+ AT_CHECK([:])],
+ [], [1], [stdout], [stderr], [AT_SKIP_PARALLEL_TESTS],
+ [AT_CHECK([test -f micro-suite.log], [1])
+ touch micro-suite.log # shut up AT_CAPTURE_FILE.
+ AT_CHECK([grep "should not be run" stdout], [1])
+ AT_CHECK([grep "[[12]] .* inhibited subsequent" stderr], [], [ignore])],
+ [-j2 --errexit])
+
+
+AT_SETUP([parallel autotest and signal handling])
+
+AT_SKIP_PARALLEL_TESTS
+
+# Goals:
+# (1) interrupt `./testsuite -jN'
+# (2) interrupt `make check TESTSUITEFLAGS=-jN'
+# (3) no trailing verbose/trace output
+# (4) exit status should be 128+signal
+
+AT_DATA([atlocal],
+[[suite_pid=$$
+export suite_pid
+]])
+
+AT_CHECK_AT_PREP([micro-suite],
+[[AT_INIT([suite to test parallel execution])
+AT_SETUP([test number 1])
+AT_CHECK([sleep 2])
+AT_CLEANUP
+AT_SETUP([test number 2])
+AT_CHECK([sleep 1])
+AT_CLEANUP
+AT_SETUP([test number 3])
+AT_CHECK([sleep 1])
+AT_CLEANUP
+AT_SETUP([killer test])
+AT_CHECK([kill -$signal $suite_pid])
+AT_CLEANUP
+m4_for([count], [5], [7], [],
+ [AT_SETUP([test number count])
+ AT_CHECK([sleep 1])
+ AT_CLEANUP
+])
+]])
+
+AT_DATA([Makefile.in],
+[[@SET_MAKE@
+SHELL = @SHELL@
+TESTSUITE = ./micro-suite
+check:
+ $(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
+.PHONY: check
+]])
+
+AT_CHECK([$CONFIG_SHELL $abs_top_builddir/config.status --file=Makefile:Makefile.in],
+ [], [ignore])
+
+# Test INT and TERM.
+for signal in 2 15; do
+ export signal
+ AS_VAR_ARITH([expected_status], [128 + $signal])
+
+ # Sequential case.
+ AT_CHECK([$CONFIG_SHELL ./micro-suite], [$expected_status],
+ [ignore], [stderr])
+ # Both stderr and the log should contain the notification about the signal.
+ AT_CHECK([grep 'bailing out' stderr], [], [ignore])
+ AT_CHECK([grep 'bailing out' micro-suite.log], [], [ignore])
+ # There should be no junk job status output.
+ AT_CHECK([[grep '[iI]nterrupt[ ]' stderr]], [1])
+
+ # Parallel case.
+ AT_CHECK([$CONFIG_SHELL ./micro-suite --jobs=3], [$expected_status],
+ [ignore], [stderr])
+ AT_CHECK([grep 'bailing out' stderr], [], [ignore])
+ AT_CHECK([grep 'bailing out' micro-suite.log], [], [ignore])
+ # We'd like to check this here, too, but some shells do not allow to
+ # turn off job control.
+ # AT_CHECK([[grep '[iI]nterrupt[ ]' stderr]], [1])
+
+ # Ditto with `make' in the loop.
+ : "${MAKE=make}"
+ unset MAKEFLAGS
+ # Need to eliminate outer TESTSUITEFLAGS here.
+ # Need to normalize exit status here: some make implementations
+ # exit 1 (BSD make), some exit 2 (GNU make).
+ AT_CHECK([$MAKE check TESTSUITEFLAGS=; ]dnl
+ [case $? in 1|2) exit 1;; *) exit $?;; esac],
+ [1], [ignore], [stderr])
+ AT_CHECK([grep 'bailing out' stderr], [], [ignore])
+ AT_CHECK([grep 'bailing out' micro-suite.log], [], [ignore])
+ # Ditto, parallel case.
+ AT_CHECK([$MAKE check TESTSUITEFLAGS=--jobs=3; ]dnl
+ [case $? in 1|2) exit 1;; *) exit $?;; esac],
+ [1], [ignore], [stderr])
+ AT_CHECK([grep 'bailing out' stderr], [], [ignore])
+ AT_CHECK([grep 'bailing out' micro-suite.log], [], [ignore])
+done
+
+
+# Test PIPE.
+# The most important part here is that things should not hang, nor
+# get out of hand. OTOH, if the shell sets the default handler to
+# ignore PIPE (pdksh, dash), there is little we can do about having the
+# test run; it's only the output that won't be there. So all we check
+# for is that, if test 7 didn't run serially, then it shouldn't be
+# run in the parallel case either; the intermediate tests serve as
+# parallel barrier.
+# Note that stderr may contain "Broken pipe" errors.
+AT_CHECK([($CONFIG_SHELL ./micro-suite -d -3 5-; echo $? >status) | sed 5q],
+ [], [stdout], [stderr])
+AT_CHECK([grep '5.*ok' stdout], [1])
+# Apparently some shells don't get around to creating 'status' any more.
+# And ksh93 on FreeBSD uses 256 + 13 instead of 128 + 13
+AT_CHECK([test ! -s status || grep 141 status || grep 269 status],
+ [], [ignore])
+AT_CHECK([if test -f micro-suite.dir/7/micro-suite.log; then ]dnl
+ [ echo "shell ignores SIGPIPE" > sigpipe-stamp ]dnl
+ [else :; fi])
+
+AT_CHECK([$CONFIG_SHELL ./micro-suite -d -3 5- --jobs=2 | sed 5q], [], [stdout], [ignore])
+AT_CHECK([grep '5.*ok' stdout], [1])
+AT_CHECK([test -s sigpipe-stamp || test ! -f micro-suite.dir/7/micro-suite.log], [0])
+
+AT_CLEANUP
+
+
+# Avoid running into a regression when mkfifo does not work.
+AT_CHECK_AT_TEST([parallel args but non-working mkfifo],
+[AT_CHECK([:])
+AT_CLEANUP
+AT_SETUP([second test])
+AT_CHECK([:])
+],
+[], [], [stdout], [stderr],
+[AT_SKIP_PARALLEL_TESTS
+mkdir bin
+cat >bin/mkfifo <<\EOF
+#! /bin/sh
+exit 1
+EOF
+chmod +x bin/mkfifo
+PATH=`pwd`/bin:$PATH
+export PATH
+],
+[AT_CHECK([grep 'second test' stdout], [], [ignore])
+], [--jobs])
+
+
+# --color
+AT_CHECK_AT_TEST([colored test results],
+ [AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([fail])
+ AT_CHECK([exit 1])
+ AT_CLEANUP
+ AT_SETUP([xpass])
+ AT_XFAIL_IF([:])
+ AT_CHECK([:])
+ AT_CLEANUP
+ AT_SETUP([xfail])
+ AT_XFAIL_IF([:])
+ AT_CHECK([exit 1])
+ AT_CLEANUP
+ AT_SETUP([skip])
+ AT_CHECK([exit 77])
+ AT_CLEANUP
+ AT_SETUP([hardfail])
+ AT_XFAIL_IF([:])
+ AT_CHECK([exit 99])
+], [], [], [], [], [], [
+
+TERM=ansi
+export TERM
+
+red=`printf '\033@<:@0;31m'`
+grn=`printf '\033@<:@0;32m'`
+lgn=`printf '\033@<:@1;32m'`
+blu=`printf '\033@<:@1;34m'`
+std=`printf '\033@<:@m'`
+
+# Check that grep can parse nonprinting characters.
+# BSD 'grep' works from a pipe, but not a seekable file.
+# GNU or BSD 'grep -a' works on files, but is not portable.
+AT_CHECK([case `echo "$std" | grep .` in #'' restore font-lock
+ $std) :;;
+ *) exit 77;;
+ esac], [], [ignore], [],
+ [echo "grep can't parse nonprinting characters" >&2])
+
+if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then
+ FGREP="grep -F"
+else
+ FGREP=fgrep
+fi
+
+# No color.
+AT_CHECK([$CONFIG_SHELL ./micro-suite], [1], [stdout], [stderr])
+for color in "$red" "$grn" "$lgn" "$blu"; do
+ AT_CHECK([cat stdout stderr | $FGREP "$color"], [1])
+done
+
+# Color of test group results.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always], [1], [stdout], [stderr])
+AT_CHECK([cat stdout | grep " only " | $FGREP "$grn"], [], [ignore])
+AT_CHECK([cat stdout | grep " fail " | $FGREP "$red"], [], [ignore])
+AT_CHECK([cat stdout | grep " xfail " | $FGREP "$lgn"], [], [ignore])
+AT_CHECK([cat stdout | grep " xpass " | $FGREP "$red"], [], [ignore])
+AT_CHECK([cat stdout | grep " skip " | $FGREP "$blu"], [], [ignore])
+AT_CHECK([cat stdout | grep " hardfail " | $FGREP "$red"], [], [ignore])
+AT_CHECK([cat stderr | grep ERROR | $FGREP "$red"], [], [ignore])
+
+# The summary is green if all tests were successful, light green if all
+# behaved as expected, and red otherwise.
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always 1 -k skip],
+ [0], [stdout])
+AT_CHECK([cat stdout | grep 'test.*successful' | $FGREP "$grn"],
+ [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always 1 -k xfail -k skip],
+ [0], [stdout])
+AT_CHECK([cat stdout | grep 'as expected' | $FGREP "$lgn"], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always -k fail],
+ [1], [ignore], [stderr])
+AT_CHECK([cat stderr | grep ERROR | $FGREP "$red"], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always -k xpass],
+ [1], [ignore], [stderr])
+AT_CHECK([cat stderr | grep ERROR | $FGREP "$red"], [], [ignore])
+AT_CHECK([$CONFIG_SHELL ./micro-suite --color=always -k hardfail],
+ [1], [ignore], [stderr])
+AT_CHECK([cat stderr | grep ERROR | $FGREP "$red"], [], [ignore])
+# Reset color on verbose output.
+printf %s\\n "$std"
+], [1])
+
+
+## ------------------- ##
+## srcdir propagation. ##
+## ------------------- ##
+
+AT_SETUP([srcdir propagation])
+
+mkdir pkg vpath-outside vpath-abs
+mkdir pkg/t pkg/vpath-inside
+AT_DATA([pkg/a])
+AT_DATA([pkg/t/b])
+
+AT_DATA([pkg/configure.ac], [[AC_INIT
+AC_CONFIG_TESTDIR([t])
+AC_OUTPUT
+]])
+cp "$abs_top_srcdir/build-aux/install-sh" pkg
+
+cd pkg
+AT_CHECK_AUTOCONF
+cd ..
+
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check srcdir])
+AT_SETUP([my only test])
+AT_CHECK([test -f "$top_srcdir"/a && test -f "$srcdir"/b])
+AT_CLEANUP
+]], [], [], [], [pkg/t])
+
+rm -f pkg/t/atconfig
+
+# Build directory totally outside source directory.
+cd vpath-outside
+AT_CHECK([../pkg/configure $configure_options], [0], [ignore])
+cd t
+AT_CHECK([../../pkg/t/suite], [0], [ignore])
+AT_CHECK([../../pkg/t/suite -v], [0], [stdout])
+AT_CHECK([grep '^\.\./\.\./pkg/t/suite.at' stdout], [0], [ignore])
+cd ../..
+
+# Build directory totally outside source directory (absolute).
+my_srcdir=`pwd`/pkg
+cd vpath-abs
+AT_CHECK(["$my_srcdir"/configure $configure_options], [0], [ignore])
+cd t
+AT_CHECK(["$my_srcdir"/t/suite], [0], [ignore])
+AT_CHECK(["$my_srcdir"/t/suite -v], [0], [stdout])
+AT_CHECK([grep '..*/t/suite.at' stdout], [0], [ignore])
+cd ../..
+
+# Build directory as subdirectory of source directory.
+cd pkg/vpath-inside
+AT_CHECK([../configure $configure_options], [0], [ignore])
+cd t
+AT_CHECK([../../t/suite], [0], [ignore])
+AT_CHECK([../../t/suite -v], [0], [stdout])
+AT_CHECK([grep '^\.\./\.\./t/suite.at' stdout], [0], [ignore])
+cd ../../..
+
+# Build directory as parent of source directory.
+AT_CHECK([pkg/configure $configure_options], [0], [ignore])
+cd t
+AT_CHECK([../pkg/t/suite], [0], [ignore])
+AT_CHECK([../pkg/t/suite -v], [0], [stdout])
+AT_CHECK([grep '^\.\./pkg/t/suite.at' stdout], [0], [ignore])
+cd ..
+
+# Build directory as source directory.
+cd pkg
+AT_CHECK_CONFIGURE
+cd t
+AT_CHECK([./suite], [0], [ignore])
+AT_CHECK([./suite -v], [0], [stdout])
+AT_CHECK([grep '^\./suite.at' stdout], [0], [ignore])
+cd ../..
+
+AT_CLEANUP
+
+
+## ------------------------------ ##
+## whitespace in absolute testdir ##
+## ------------------------------ ##
+
+AT_SETUP([whitespace in absolute testdir])
+
+dir='dir with whitespace'
+mkdir "$dir"
+cd "$dir"
+wd=`pwd`
+
+AT_DATA([a])
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check srcdir])
+AT_SETUP([my only test])
+AT_CHECK([test -f "$top_srcdir"/a])
+AT_CLEANUP
+]])
+AT_CHECK([top_srcdir=$wd ./suite], [0], [ignore])
+AT_CHECK([top_srcdir=$wd ./suite -d], [0], [ignore])
+AT_CHECK([cd suite.dir/1 && ./run top_srcdir="$wd"], [0], [ignore], [ignore])
+AT_CLEANUP
+
+
+## ------------------ ##
+## unusual file names ##
+## ------------------ ##
+
+AT_SETUP([unusual file names])
+
+AT_DATA_AUTOTEST([d@&t@nl.at],
+[[AT_SETUP([test one])
+m4_pattern_allow([^dnl$])
+AT_CHECK([test "]m4_dquote(AT_LINE)[" = dn[]l.at:3])
+AT_CLEANUP
+]])
+
+mkdir sub
+AT_DATA_AUTOTEST([sub/"two spaces".at],
+[[AT_SETUP([test two])
+AT_CHECK([test "]m4_dquote(AT_LINE)[" = "two spaces.at:2"])
+AT_CLEANUP
+]])
+
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check included file names])
+m4_include([d][nl.at])
+m4_include([sub/two spaces.at])
+]])
+AT_CHECK([$CONFIG_SHELL ./suite], [0], [stdout])
+AT_CHECK([grep 'two spaces' suite.log], [1])
+AT_CLEANUP
+
+
+## ------------------------- ##
+## Erlang EUnit unit tests. ##
+## ------------------------- ##
+
+AT_SETUP([Erlang Eunit unit tests])
+AT_KEYWORDS([Erlang])
+
+mkdir s t
+AT_DATA([configure.ac], [[AC_INIT
+AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then
+ HAVE_ERLANG=no
+ HAVE_EUNIT=no
+else
+ HAVE_ERLANG=yes
+ AC_ERLANG_CHECK_LIB([eunit], [HAVE_EUNIT=yes], [HAVE_EUNIT=no])
+fi
+AC_SUBST([HAVE_ERLANG])
+AC_SUBST([HAVE_EUNIT])
+
+AC_CONFIG_TESTDIR([t])
+AC_CONFIG_FILES([s/compile], [chmod +x s/compile])
+AC_CONFIG_FILES([erlang.conf])
+AC_OUTPUT
+]])
+
+# File to pass info back to us
+AT_DATA([erlang.conf.in],
+[[HAVE_ERLANG=@HAVE_ERLANG@
+HAVE_EUNIT=@HAVE_EUNIT@
+]])
+
+# Erlang module to test:
+AT_DATA([s/testme.erl],
+[[-module(testme).
+-export([foo/1]).
+foo(1) -> one;
+foo(2) -> two;
+foo(_) -> other.
+]])
+
+# Corresponding Eunit unit test module:
+AT_DATA([s/testme_tests.erl],
+[[-module(testme_tests).
+-include_lib("eunit/include/eunit.hrl").
+foo_one_test() -> ?assertEqual(one, testme:foo(1)).
+foo_two_test() -> ?assertEqual(two, testme:foo(2)).
+foo_other_test() -> ?assertEqual(other, testme:foo(42)).
+]])
+
+# Compilation script:
+AT_DATA([s/compile.in],
+[["@ERLC@" -b beam testme.erl testme_tests.erl
+]])
+
+AT_CHECK_AT_PREP([suite],
+[[AT_INIT([suite to check EUnit integration])
+AT_SETUP([my only test])
+AT_CHECK_EUNIT([my_testsuite], [{module, testme}],
+ [-pa "${abs_top_builddir}/s"])
+AT_CLEANUP
+]], [], [], [], [t])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+. ./erlang.conf
+
+AT_CHECK([grep '^ERL='\''.*'\' t/atconfig], [], [ignore])
+AT_CHECK([grep '^ERLC='\''.*'\' t/atconfig], [], [ignore])
+AT_CHECK([grep '^ERLCFLAGS='\''.*'\' t/atconfig], [], [ignore])
+
+if test "$HAVE_ERLANG" = yes && test "$HAVE_EUNIT" = yes; then
+ AT_CHECK([cd s && $CONFIG_SHELL ./compile])
+fi
+
+AT_CHECK([cd t && $CONFIG_SHELL ./suite], [], [ignore])
+
+if test "$HAVE_EUNIT" = yes; then
+ AT_CHECK([grep 1.*successful t/suite.log], [], [ignore])
+ AT_CHECK([grep skipped t/suite.log], [1], [ignore])
+else
+ AT_CHECK([grep 1.*skipped t/suite.log], [], [ignore])
+ AT_CHECK([grep 0.*successful t/suite.log], [], [ignore])
+fi
+
+AT_CLEANUP
diff --git a/tests/base.at b/tests/base.at
new file mode 100644
index 0000000..7979413
--- /dev/null
+++ b/tests/base.at
@@ -0,0 +1,710 @@
+# -*- Autotest -*-
+
+AT_BANNER([Autoconf base layer.])
+
+# Copyright (C) 2000-2001, 2003, 2005-2012 Free Software Foundation,
+# Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+## ------------------------------- ##
+## AC_REQUIRE: topological sort.. ##
+## ------------------------------- ##
+
+# Check that dependencies are always properly honored.
+
+AT_SETUP([AC_REQUIRE: topological sort])
+AT_KEYWORDS([m4@&t@_require])
+
+AT_DATA([configure.ac],
+[[define([REQUIRE_AND_CHECK],
+[AC_REQUIRE([$1])
+test -z "$m4@&t@_translit([$1], [A-Z], [a-z])" && AS_EXIT(1)])
+
+AC_DEFUN([TEST1],
+[REQUIRE_AND_CHECK([TEST2a])
+REQUIRE_AND_CHECK([TEST2b])
+test1=set])
+
+AC_DEFUN([TEST2a],
+[test2a=set])
+
+AC_DEFUN([TEST2b],
+[REQUIRE_AND_CHECK([TEST3])
+test2b=set])
+
+AC_DEFUN([TEST3],
+[REQUIRE_AND_CHECK([TEST2a])
+test3=set])
+
+AS@&t@_INIT
+
+TEST1
+test -z "$test1" &&
+ AC_MSG_ERROR([\$test1 is empty])
+AS_EXIT(0)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## --------------------------- ##
+## AC_REQUIRE: error message. ##
+## --------------------------- ##
+
+# Check that the message mentions AC_DEFUN, not m4_defun.
+
+AT_SETUP([AC_REQUIRE: error message])
+AT_KEYWORDS([m4@&t@_require])
+AT_DATA([configure.ac],
+[[AC_REQUIRE([AC_PROG_CC])
+]])
+
+AT_CHECK_AUTOCONF([], [1], [],
+[[configure.ac:1: error: AC_REQUIRE(AC_PROG_CC): cannot be used outside of an AC_DEFUN'd macro
+configure.ac:1: the top level
+autom4te: m4 failed with exit status: 1
+]])
+AT_CLEANUP
+
+
+## ----------------------------------------------- ##
+## AC_REQUIRE and AC_DEFUN_ONCE: Require, expand. ##
+## ----------------------------------------------- ##
+
+AT_SETUP([AC_REQUIRE & AC_DEFUN_ONCE: [Require, expand]])
+AT_KEYWORDS([m4@&t@_require m4@&t@_require_once])
+
+AT_DATA([configure.ac],
+[[AC_DEFUN([TEST],
+[AC_REQUIRE([MULTI_TEST])
+AC_REQUIRE([SINGLE_TEST])])
+
+AC_DEFUN([MULTI_TEST],
+[multi_test=".$multi_test"])
+
+AC_DEFUN_ONCE([SINGLE_TEST],
+[single_test=".$single_test"])
+
+AS@&t@_INIT
+
+TEST
+TEST
+MULTI_TEST
+MULTI_TEST
+SINGLE_TEST
+SINGLE_TEST
+
+case $multi_test:$single_test in
+ ...:. ) AS_EXIT(0);;
+ ...:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
+ *:. ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
+esac
+]])
+
+AT_CHECK_AUTOCONF([], 0, [])
+
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+## ----------------------------------------------- ##
+## AC_REQUIRE and AC_DEFUN_ONCE: Expand, require. ##
+## ----------------------------------------------- ##
+
+AT_SETUP([AC_REQUIRE & AC_DEFUN_ONCE: [Expand, require]])
+AT_KEYWORDS([m4@&t@_require m4@&t@_require_once])
+
+AT_DATA([configure.ac],
+[[AC_DEFUN([TEST],
+[AC_REQUIRE([MULTI_TEST])
+AC_REQUIRE([SINGLE_TEST])])
+
+AC_DEFUN([MULTI_TEST],
+[multi_test=".$multi_test"])
+
+AC_DEFUN_ONCE([SINGLE_TEST],
+[single_test=".$single_test"])
+
+AS@&t@_INIT
+
+MULTI_TEST
+MULTI_TEST
+SINGLE_TEST
+SINGLE_TEST
+TEST
+TEST
+
+case $multi_test:$single_test in
+ ..:. ) AS_EXIT(0);;
+ ..:* ) AC_MSG_ERROR([DEFUN_ONCE is broken]);;
+ *:. ) AC_MSG_ERROR([DEFUN is broken (Wow, congrats!)]);;
+ * ) AC_MSG_ERROR([received `$multi_test:$single_test']);;
+esac
+]])
+
+AT_CHECK_AUTOCONF([], 0, [])
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+## ------------------------- ##
+## AC_REQUIRE & AC_PROVIDE. ##
+## ------------------------- ##
+
+AT_SETUP([AC_REQUIRE & AC_PROVIDE])
+AT_KEYWORDS([m4@&t@_require])
+
+AT_DATA([configure.ac],
+[[AC_DEFUN([TEST],
+[AC_REQUIRE([INNER_TEST])])
+
+AC_DEFUN([INNER_TEST],
+[inner_test=".$inner_test"])
+
+AS@&t@_INIT
+
+AC_PROVIDE([INNER_TEST])
+TEST
+
+case $inner_test in
+ "" ) AS_EXIT(0);;
+ * ) AC_MSG_ERROR([received `$inner_test']);;
+esac
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## -------- ##
+## AC_INIT. ##
+## -------- ##
+
+# Make sure AC_INIT sets PACKAGE_TARNAME properly.
+
+AT_SETUP([AC_INIT])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU fu], [1.0], [bug-fu@gnu.org])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+# Ensure we get the expected definition:
+AT_CHECK([grep "^PACKAGE_TARNAME='fu'\$" configure], [], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------------------------- ##
+## AC_INIT with unusual version strings. ##
+## ------------------------------------- ##
+
+AT_SETUP([AC_INIT with unusual version strings])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU String++ with spaces (foo)],
+ [2.48++ (2010-07-03)], [[http://example.com/?a=b&c=d#e]], [clisp])
+AC_OUTPUT
+]])
+
+if echo 'ab*c' | grep -F 'ab*c' >/dev/null 2>&1; then
+ FGREP="grep -F"
+else
+ FGREP=fgrep
+fi
+
+AT_CHECK_AUTOCONF([-Werror])
+AT_CHECK_CONFIGURE([-q])
+AT_CHECK_CONFIGURE([--help], [], [stdout])
+AT_CHECK([[$FGREP 'com/?a=b&c=d#e' stdout]], [], [ignore])
+AT_CHECK_CONFIGURE([--version], [], [stdout])
+AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
+AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])
+
+AT_CHECK([./config.status --help], [], [stdout])
+AT_CHECK([[$FGREP 'com/?a=b&c=d#e' stdout]], [], [ignore])
+AT_CHECK([./config.status --version], [], [stdout])
+AT_CHECK([$FGREP 'GNU String++ with spaces (foo)' stdout], [], [ignore])
+AT_CHECK([$FGREP '2.48++ (2010-07-03)' stdout], [], [ignore])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU "String++"],
+ [2.48], [http://example.com/], [clisp])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU String++],
+ ['codename' 2.48], [http://example.com/], [clisp])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU
+String++], [2.48], [http://example.com/], [clisp])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF([-Werror], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_INIT: not a literal: ' stderr], [], [ignore])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## AC_COPYRIGHT. ##
+## -------------- ##
+
+# Ensure the FSF notice as well as the user-provided one are present
+# in the head of the testsuite as well as the --version output.
+
+AT_SETUP([AC@&t@_COPYRIGHT])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU fu], [1.0])
+AC_COPYRIGHT([[This is just a test notice, not a real one, so let's avoid
+words that may be matched by scanners for legal things,
+causing extra work for distributors.
+Multi-line values should be supported.
+]])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([--version], [], [stdout])
+AT_CHECK([grep 'Copyright.*Free Software Foundation' stdout], [], [ignore])
+AT_CHECK([grep 'This is just a test notice' stdout], [], [ignore])
+AT_CHECK([sed -ne 50q -e '/Copyright/{' -e N -e N -e N -e N -e 's/#//g' ]dnl
+ [ -e 's/\n//g' -e p -e '}' configure ]dnl
+ [ | grep 'Copyright.*Free Software Foundation'],
+ [], [ignore])
+AT_CHECK([sed 50q configure | grep 'This is just a test notice'], [], [ignore])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_CACHE_CHECK. ##
+## ---------------- ##
+
+# Make sure AC_CACHE_CHECK is silent with -q.
+# Also make sure we warn about cache id's not named with `_cv_'.
+
+AT_SETUP([AC_CACHE_CHECK])
+AT_KEYWORDS([CONFIG_SITE])
+
+# Don't let a config.site file affect this test.
+AS_UNSET([CONFIG_SITE])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+# m4_define([ac_nothing], [ac_cv_absolutely_nothing])
+AC_CACHE_CHECK([for nothing],
+ [ac_nothing],
+ [ac_nothing=found])
+
+AC_MSG_CHECKING([for some other variable])
+commands_to_set_it_was_run=false
+AC_CACHE_VAL([my_cv_variable], [
+# FOO
+commands_to_set_it_was_run=true
+my_cv_variable=true
+])
+AC_MSG_RESULT([$my_cv_variable])
+
+# Ensure that the result is available at this point.
+if test ${my_cv_variable+set} != set; then
+ AC_MSG_ERROR([AC@&@&t@t@_CACHE_VAL did not ensure that the cache variable was set])
+fi
+
+# AC_CACHE_SAVE should be enough here, no need for AC_OUTPUT.
+AC_CACHE_SAVE
+]])
+
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+AT_CHECK([grep 'must contain _cv_ to be cached' stderr], [], [ignore])
+
+# Do not warn about defines:
+sed 's/^# m4_define/m4_define/' configure.ac > t
+mv -f t configure.ac
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+sed '/m4_define/d; s/ac_nothing/ac_cv_nothing/' configure.ac > t
+mv -f t configure.ac
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+# Print a message saying that the result was cached, iff it was cached.
+AT_CHECK_CONFIGURE([], [], [stdout])
+AT_CHECK([grep 'cached' stdout], [1])
+AT_CHECK_CONFIGURE([my_cv_variable='yes it is set'], [], [stdout])
+AT_CHECK([grep 'cached.*yes it is set' stdout], [], [ignore])
+
+# --cache-file is honored and has caching semantics.
+AT_CHECK_CONFIGURE([--cache-file=foobar.cache], [], [stdout])
+AT_CHECK([grep 'cached' stdout], [1])
+AT_CHECK([test ! -f config.cache])
+AT_CHECK([grep 'my_cv_variable.*true' foobar.cache], [], [ignore])
+AT_CHECK_CONFIGURE([--cache-file=foobar.cache], [], [stdout])
+AT_CHECK([grep 'some other variable.*cached.*true' stdout], [], [ignore])
+
+# A setting on the command line overrides the cache.
+AT_CHECK_CONFIGURE([--cache-file=foobar.cache my_cv_variable='override'], [], [stdout])
+AT_CHECK([grep 'cached.*override' stdout], [], [ignore])
+AT_CHECK([grep 'my_cv_variable.*override' foobar.cache], [], [ignore])
+
+# Values containing braces need special internal treatment.
+AT_CHECK_CONFIGURE([-C ac_cv_nothing='{' my_cv_variable='contains } brace'],
+ [], [stdout])
+AT_CHECK([grep 'ac_cv_nothing.*{' config.cache], [], [ignore])
+AT_CHECK([grep 'my_cv_variable.*contains } brace' config.cache], [], [ignore])
+AT_CHECK_CONFIGURE([-C], [], [stdout])
+AT_CHECK([grep 'nothing.*{' stdout], [], [ignore])
+AT_CHECK([grep 'some other variable.*contains } brace' stdout], [], [ignore])
+rm -f config.cache
+
+# Diagnose common side-effects that are errors in COMMANDS-TO-SET-IT:
+sed 's/^# FOO/AC_DEFINE([some-define], [1], [oooh.])/' configure.ac > t
+mv -f t configure.ac
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+AT_CHECK([grep 'suspicious.*AC_DEFINE' stderr], [], [ignore])
+
+sed 's/^AC_DEFINE.*/AC_SUBST([some_substitution], [oooh.])/' configure.ac > t
+mv -f t configure.ac
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+AT_CHECK([grep 'suspicious.*AC_SUBST' stderr], [], [ignore])
+
+# Ensure the examples from the manual work as intended.
+# Taken from autoconf.texi:Caching Results
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_DEFUN([AC_SHELL_TRUE],
+[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi])
+])
+AC_SHELL_TRUE
+]])
+AT_CHECK_AUTOCONF([-Werror], [1], [], [stderr])
+AT_CHECK([grep 'suspicious.*AC_DEFINE' stderr], [], [ignore])
+
+# Taken from autoconf.texi:Caching Results
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_DEFUN([AC_SHELL_TRUE],
+[AC_CACHE_CHECK([whether true(1) works], [my_cv_shell_true_works],
+ [my_cv_shell_true_works=no
+ (true) 2>/dev/null && my_cv_shell_true_works=yes])
+ if test "x$my_cv_shell_true_works" = xyes; then
+ AC_DEFINE([TRUE_WORKS], [1],
+ [Define if `true(1)' works properly.])
+ fi
+])
+AC_SHELL_TRUE
+AC_OUTPUT
+]])
+AT_CHECK_AUTOCONF([-Werror])
+AT_CHECK_CONFIGURE([-C], [], [stdout])
+AT_CHECK([grep my_cv_shell_true_works config.cache], [], [ignore])
+AT_CHECK([grep 'true.*works.*yes' stdout], [], [ignore])
+
+AT_CHECK_CONFIGURE([--config-cache], [], [stdout])
+AT_CHECK([grep 'true.*works.*cached.*yes' stdout], [], [ignore])
+
+# config.status only pays attention to the cache file with --recheck.
+AT_CHECK([./config.status], [], [stdout])
+AT_CHECK([grep cache stdout], [1])
+AT_CHECK([./config.status --recheck], [], [stdout])
+AT_CHECK([grep cache stdout], [0], [ignore])
+
+# By default, configure uses no cache file, neither loading nor updating it.
+: > a-stamp-file
+AT_CHECK_CONFIGURE([], [], [stdout])
+AT_CHECK([grep cache stdout], [1])
+AT_CHECK([LC_ALL=C ls -t config.cache a-stamp-file | sed 1q | grep config.cache], [1])
+
+# Using a symlinked cache file works.
+: > cache
+rm -f config.cache
+AS_LN_S([cache], [config.cache])
+AT_CHECK_CONFIGURE([-C])
+# Either the system does not support symlinks, or the symlinked-to file
+# should be updated.
+AT_CHECK([test -s cache || test ! -h config.cache])
+
+# config.site can specify a site-wide cache, accumulating information.
+# Also test that we don't run afoul of sourcing a file with leading -.
+AT_DATA([-config.site],
+[[cache_file=sitecache
+]])
+AT_DATA([sitecache],
+[[my_cv_some_preset_cache_var=yes
+]])
+CONFIG_SITE=-config.site
+export CONFIG_SITE
+AT_CHECK_CONFIGURE
+AT_CHECK([grep my_cv_some_preset_cache_var sitecache], [], [ignore])
+AT_CHECK([grep my_cv_shell_true_works sitecache], [], [ignore])
+AT_CHECK_CONFIGURE([], [], [stdout])
+AT_CHECK([grep 'whether true.*works.*cached' stdout], [], [ignore])
+
+dnl Until we can find a way to avoid catastrophic failure,
+dnl skip the rest of this test on such shells.
+echo 'if' > syntax
+AT_CHECK([${CONFIG_SHELL-$SHELL} -c 'case `. ./syntax; echo $?` in
+ 0|"") exit 77;; esac'], [0], [ignore], [ignore])
+
+# Check that config cache scripts must be well-formed.
+AT_DATA([bad.site],
+[[fi
+]])
+CONFIG_SITE=$PWD/bad.site
+AT_CHECK_CONFIGURE([ || exit 1], [1], [stdout], [stderr])
+AT_CHECK([grep 'failed to load site script' stderr], [], [ignore], [ignore],
+ [AT_CHECK([grep 'whether true' stdout], [1])])
+
+# However, a missing file is ignored.
+CONFIG_SITE=./no-such-file
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## --------------- ##
+## AC_CACHE_LOAD. ##
+## --------------- ##
+
+# Test AC_CACHE_LOAD.
+
+AT_SETUP([AC_CACHE_LOAD])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+$some_test_code
+AC_CACHE_LOAD
+AC_MSG_NOTICE([some_cv_variable is $some_cv_variable])
+AC_OUTPUT
+]])
+AT_CHECK_AUTOCONF
+AS_UNSET([some_test_code])
+AT_DATA([new-cache],
+[[some_cv_variable=value-from-new-cache
+]])
+AT_CHECK_CONFIGURE([some_test_code='eval cache_file=new-cache'], [], [stdout])
+AT_CHECK([grep 'some_cv_variable.*value-from-new-cache' stdout], [], [ignore])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_COMPUTE_INT. ##
+## ---------------- ##
+
+# Make sure AC_COMPUTE_INT fails properly.
+
+AT_SETUP([AC_COMPUTE_INT])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_COMPUTE_INT([invalid_expression],
+ [**0**],
+ [],
+ [invalid_expression=failed])
+test "$invalid_expression" = failed ||
+ AC_MSG_ERROR([**0** evaluated to $invalid_expression instead of failing])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_TRY_COMMAND. ##
+## ---------------- ##
+
+AT_SETUP([AC_TRY_COMMAND])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+
+if AC_TRY_COMMAND([(echo "The Cat in the Hat";
+ echo "The Hat in the Cat" >&2) |
+ grep \^The\ Cat\ in\ the\ Hat\$ >/dev/null]); then
+ :
+else
+ AC_MSG_ERROR([didn't see the Cat in the Hat])
+fi
+
+if AC_TRY_COMMAND([(echo "The Cat in the Hat";
+ echo "The Hat in the Cat" >&2) |
+ grep \^The\ Hat\ in\ the\ Cat\$ >/dev/null]); then
+ AC_MSG_ERROR([saw the Hat in the Cat])
+fi
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_CLEANUP
+
+
+## ------------ ##
+## Input/Output ##
+## ------------ ##
+
+AT_SETUP([Input/Output])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+cat <&AS@&t@_ORIGINAL_STDIN_FD >&AS@&t@_MESSAGE_FD
+]])
+AT_CHECK_AUTOCONF
+AT_CHECK([echo Hello | CONFIG_SITE=/dev/null ./configure $configure_options | grep -v 'configure: loading site script '],, [Hello
+])
+AT_CHECK([echo Hello | CONFIG_SITE=/dev/null ./configure $configure_options --silent])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## configure arguments ##
+## ------------------- ##
+
+AT_SETUP([configure arguments])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+echo "$@"
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([FOO=bar --enable-baz --without-zork --silent], [0], [stdout], [ignore])
+AT_CHECK([grep 'FOO=bar --enable-baz --without-zork --silent' stdout], [0], [ignore], [ignore])
+
+dnl check that syntax error is detected
+AT_CHECK_CONFIGURE([=], [1], [], [ignore], [ignore])
+AT_CHECK_CONFIGURE([1=2], [1], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------------------ ##
+## AC_ARG_ENABLE and AC_ARG_WITH. ##
+## ------------------------------ ##
+
+AT_SETUP([AC_ARG_ENABLE and AC_ARG_WITH])
+
+AT_DATA_M4SH([configure.ac],
+[[AC_INIT
+# Taken from autoconf.texi:Pretty Help Strings.
+AC_ARG_WITH([foo],
+ [AS_HELP_STRING([--with-foo],
+ [use foo (default is no)])],
+ [use_foo=$withval],
+ [use_foo=no])
+AC_ARG_WITH([c++],
+ [AS_HELP_STRING([--with-c++],
+ [with c++])],
+ [choice_with=$withval])
+AC_ARG_ENABLE([c++],
+ [AS_HELP_STRING([--enable-c++],
+ [enable c++])],
+ [choice_enable=$enableval])
+echo "use_foo: $use_foo"
+echo "with_c++: $with_c__, $choice_with"
+echo "enable_c++: $enable_c__, $choice_enable"
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([--help | grep foo], [0],
+[[ --with-foo use foo (default is no)
+]], [ignore])
+AT_CHECK_CONFIGURE([--with-foo=yes --with-c++ --disable-c++],
+ [], [stdout], [ignore])
+AT_CHECK([grep 'use_foo: yes' stdout], [], [ignore])
+AT_CHECK([grep 'with_c++: yes, yes' stdout], [], [ignore])
+AT_CHECK([grep 'enable_c++: no, no' stdout], [], [ignore])
+AT_CHECK([grep 'unrecognized option' stdout], [1])
+AT_CHECK_CONFIGURE([--without-foo --with-c++=no --enable-c++=maybe],
+ [], [stdout], [ignore])
+AT_CHECK([grep 'use_foo: no' stdout], [], [ignore])
+AT_CHECK([grep 'with_c++: no, no' stdout], [], [ignore])
+AT_CHECK([grep 'enable_c++: maybe, maybe' stdout], [], [ignore])
+AT_CHECK([grep 'unrecognized option' stdout], [1])
+AT_CHECK_CONFIGURE([], [], [stdout], [ignore])
+AT_CHECK([grep 'use_foo: no' stdout], [], [ignore])
+AT_CHECK([grep 'with_c++: , $' stdout], [], [ignore])
+AT_CHECK([grep 'enable_c++: , $' stdout], [], [ignore])
+AT_CHECK([grep 'unrecognized option' stdout], [1])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## configure directories ##
+## --------------------- ##
+
+AT_SETUP([configure directories])
+
+AT_DATA([foo.in],
+[[prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_FILES([foo])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+dnl check that relative paths are rejected
+AT_CHECK_CONFIGURE([--libdir=.], [1], [ignore], [stderr])
+AT_CHECK([grep 'expected an absolute directory name for --libdir: \.' stderr],
+ [0], [ignore])
+
+dnl check that extra slashes are stripped, and that defaults are not expanded
+AT_CHECK_CONFIGURE([--prefix=/usr//])
+AT_CHECK([cat foo], [0], [[prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+]])
+
+AT_CLEANUP
diff --git a/tests/c.at b/tests/c.at
new file mode 100644
index 0000000..90d60e5
--- /dev/null
+++ b/tests/c.at
@@ -0,0 +1,418 @@
+# -*- Autotest -*-
+
+AT_BANNER([C low level compiling/preprocessing macros.])
+
+# Copyright (C) 2000-2006, 2008-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## ------------ ##
+## Extensions. ##
+## ------------ ##
+
+# As far as we know only `foo', `foo.exe' are possible executable,
+# and `foo.o', `foo.obj' are possible object files. Autoconf must not
+# know that, but it is OK for the test suite to take this into account.
+AT_CHECK_MACRO([Extensions],
+[[AC_PROG_CC
+case $ac_exeext in
+ '' | '.exe' ) ;;
+ * ) AC_MSG_ERROR([suspicious executable suffix: $ac_exeext]);;
+esac
+
+case $ac_objext in
+ 'o' | 'obj' ) ;;
+ * ) AC_MSG_ERROR([suspicious object suffix: $ac_objext]);;
+esac
+]])
+
+
+
+## -------------------------- ##
+## Broken/missing compilers. ##
+## -------------------------- ##
+
+
+# Check that Autoconf correctly diagnoses broken compilers, and in
+# particular, if it does not exit 77, the test suite is in trouble...
+# FIXME: Once a precise message decided, check stderr of configure.
+AT_SETUP([Broken/missing compilers])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+CC=no-such-compiler
+AC_PROG_CC
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], 77, ignore, ignore)
+
+AT_CLEANUP
+
+
+## ------------ ##
+## C keywords. ##
+## ------------ ##
+
+# GCC supports `const', `typeof', and `volatile'.
+AT_CHECK_MACRO([C keywords],
+[[AC_PROG_CC
+AC_C_CONST
+AC_C_TYPEOF
+AC_C_VOLATILE
+case $GCC,$ac_cv_c_const,$ac_cv_c_typeof,$ac_cv_c_volatile in
+ yes,*no*)
+ AC_MSG_ERROR([failed to detect `const', `typeof', or `volatile' support]);;
+esac
+]])
+
+
+
+## --------------------------------- ##
+## AC_PROG_CPP requires AC_PROG_CC. ##
+## --------------------------------- ##
+
+# Must invoke AC_PROG_CC.
+AT_CHECK_MACRO([AC_PROG_CPP requires AC_PROG_CC],
+[[AC_PROG_CPP
+test -z "$CC" &&
+ AC_MSG_ERROR([looked for a C preprocessor without looking for a compiler])
+]])
+
+
+
+## --------------------------- ##
+## AC_PROG_CPP with warnings. ##
+## --------------------------- ##
+
+
+# It's Ok for strict preprocessors to produce warnings.
+
+AT_SETUP([AC_PROG_CPP with warnings])
+
+AT_DATA([mycpp],
+[[#! /bin/sh
+echo noise >&2
+exec "$@"
+]])
+
+chmod +x mycpp
+
+_AT_CHECK_AC_MACRO(
+[[AC_PROG_CPP
+# If the preprocessor is not strict, just ignore
+test "x$ac_c_preproc_warn_flag" = xyes &&
+ AC_MSG_ERROR([preprocessor has no warning option], 77)
+CPP="./mycpp $CPP"
+
+# Exercise CPP.
+AC_CHECK_HEADERS(stdio.h autoconf_io.h, [], [], [-])]])
+
+AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_IO_H */
+#define HAVE_STDIO_H 1
+])
+
+AT_CLEANUP
+
+
+## ------------------------------ ##
+## AC_PROG_CPP without warnings. ##
+## ------------------------------ ##
+
+AT_SETUP([AC_PROG_CPP without warnings])
+
+# Ignore if /lib/cpp doesn't work
+AT_CHECK([[echo '#include <stdio.h>' | /lib/cpp || exit 77]],
+ [], [ignore], [ignore])
+
+# A cpp which exit status is meaningless.
+AT_DATA([mycpp],
+[[#! /bin/sh
+/lib/cpp "$@"
+exit 0
+]])
+
+chmod +x mycpp
+
+_AT_CHECK_AC_MACRO(
+[[CPP=./mycpp
+AC_PROG_CPP
+test "x$ac_c_preproc_warn_flag" != xyes &&
+ AC_MSG_ERROR([failed to detect preprocessor warning option])
+
+# Exercise CPP.
+AC_CHECK_HEADERS(stdio.h autoconf_io.h, [], [], [-])]])
+
+AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_IO_H */
+#define HAVE_STDIO_H 1
+])
+
+AT_CLEANUP
+
+
+
+## -------------------- ##
+## AC_PROG_CPP via CC. ##
+## -------------------- ##
+
+
+# It's Ok for strict preprocessors to produce warnings.
+
+AT_SETUP([AC_PROG_CPP via CC])
+
+# Ignore if /lib/cpp doesn't work
+AT_CHECK([[echo '#include <stdio.h>' | /lib/cpp || exit 77]],
+ [], [ignore], [ignore])
+
+AT_DATA([mycc],
+[[#! /bin/sh
+echo "Annoying copyright message" >&2
+exec "$@"
+]])
+
+chmod +x mycc
+
+# We go through the following contortions, in order to have the
+# configure script go down the same codepaths as it would during a
+# normal CPP selection check. If we explicitly set CPP, it goes down
+# a different codepath.
+_AT_CHECK_AC_MACRO(
+[[AC_PROG_CC
+CC="./mycc $CC"
+AC_PROG_CPP
+# The test $CC compiler should have been selected.
+test "$CPP" != "$CC -E" &&
+ AC_MSG_ERROR([error messages on stderr cause the preprocessor selection to fail])
+
+# Exercise CPP.
+AC_CHECK_HEADERS(stdio.h autoconf_io.h, [], [], [-])]])
+
+AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_IO_H */
+#define HAVE_STDIO_H 1
+])
+
+AT_CLEANUP
+
+
+## ------------------------------------ ##
+## AC_NO_EXECUTABLES (working linker). ##
+## ------------------------------------ ##
+
+AT_CHECK_MACRO([AC_NO_EXECUTABLES (working linker)],
+[AC_NO_EXECUTABLES
+AC_PROG_CC
+])
+
+
+## ----------------------------------- ##
+## AC_NO_EXECUTABLES (broken linker). ##
+## ----------------------------------- ##
+
+AT_CHECK_MACRO([AC_NO_EXECUTABLES (broken linker)],
+[LDFLAGS=-lnosuchlibrary
+AC_NO_EXECUTABLES
+AC_PROG_CC
+])
+
+
+## -------------------------- ##
+## AC_USE_SYSTEM_EXTENSIONS. ##
+## -------------------------- ##
+
+AT_SETUP([AC_USE_SYSTEM_EXTENSIONS])
+
+# Some existing configure.ac mixed AC_AIX (now an alias for
+# AC_USE_SYSTEM_EXTENSIONS) and AC_DEFINE([__EXTENSIONS__]), which
+# broke autoheader in 2.62. Test that this is supported.
+
+_AT_CHECK_AC_MACRO(
+[[AC_AIX
+AC_DEFINE([__EXTENSIONS__], [1], [Manually defined for Solaris])
+]])
+
+_AT_CHECK_AC_MACRO(
+[[AC_USE_SYSTEM_EXTENSIONS
+AC_DEFINE([__EXTENSIONS__], [1], [Manually defined for Solaris])
+]])
+
+AT_CLEANUP
+
+
+## ----------------------- ##
+## AC_C_RESTRICT and C++. ##
+## ----------------------- ##
+
+AT_SETUP([AC_C_RESTRICT and C++])
+
+# In some compiler suites, the left hand doesn't know about everything
+# the right hand does; or the user mixes the C compiler from one suite
+# with the C++ compiler from another. In this case, Sun WorkShop CC
+# not like the _Restrict accepted by cc.
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CC
+AC_PROG_CXX
+AC_C_RESTRICT
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[CC = @CC@
+CXX = @CXX@
+CFLAGS = @CFLAGS@
+CXXFLAGS = @CXXFLAGS@
+CPPFLAGS = -I. @CPPFLAGS@
+OBJEXT = @OBJEXT@
+all: foo.$(OBJEXT) bar.$(OBJEXT)
+cpp-works:
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c cpp-works.cpp
+foo.$(OBJEXT): foo.c
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c foo.c
+bar.$(OBJEXT): bar.cpp
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c bar.cpp
+]])
+
+AT_DATA([foo.c],
+[[#include <config.h>
+
+int foo (int * restrict i1, int * restrict i2)
+{
+ return i1[0] + i2[0];
+}
+]])
+
+cp foo.c bar.cpp
+
+AT_DATA([cpp-works.cpp],
+[[// This file is just to test whether we have a working C++ compiler at all
+class foo { int x; };
+class foo foobar;
+]])
+
+AT_CHECK([autoconf])
+AT_CHECK([autoheader])
+AT_CHECK([./configure $configure_options], [], [ignore], [ignore])
+AT_CHECK([${MAKE-make} cpp-works || exit 77], [], [ignore], [ignore])
+AT_CHECK([${MAKE-make}], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_OPENMP and C. ##
+## ---------------- ##
+
+AT_SETUP([AC_OPENMP and C])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CC
+AC_OPENMP
+if test "X$ac_cv_prog_c_openmp" = Xunsupported; then
+ AS_EXIT([77])
+fi
+CFLAGS="$CFLAGS $OPENMP_CFLAGS"
+CPPFLAGS="$CPPFLAGS $OPENMP_CFLAGS"
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[foo@EXEEXT@: foo.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
+
+foo.@OBJEXT@: foo.c
+ @CC@ @CPPFLAGS@ @CFLAGS@ -c foo.c
+]])
+
+AT_DATA([foo.c],
+[[#ifdef _OPENMP
+#include <omp.h>
+#endif
+#include <stdio.h>
+
+int main ()
+{
+#ifdef _OPENMP
+#pragma omp parallel
+ {
+ int id = omp_get_thread_num ();
+ printf ("hello omp world from %d\n", id);
+ }
+#endif
+ return 0;
+}
+]])
+
+: "${MAKE=make}"
+AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
+AT_CHECK([./configure $configure_options], [], [ignore], [ignore])
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_OPENMP anc C++. ##
+## ------------------ ##
+
+AT_SETUP([AC_OPENMP and C++])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CXX
+AC_LANG([C++])
+AC_OPENMP
+if test "X$ac_cv_prog_cxx_openmp" = Xunsupported; then
+ AS_EXIT([77])
+fi
+CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
+CPPFLAGS="$CPPFLAGS $OPENMP_CXXFLAGS"
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[foo@EXEEXT@: foo.@OBJEXT@
+ @CXX@ @CXXFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
+
+foo.@OBJEXT@: foo.cpp
+ @CXX@ @CPPFLAGS@ @CXXFLAGS@ -c foo.cpp
+]])
+
+AT_DATA([foo.cpp],
+[[int main ()
+{
+ return 0;
+}
+]])
+
+: "${MAKE=make}"
+AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
+AT_CHECK([./configure $configure_options], [], [ignore], [ignore])
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
diff --git a/tests/compile.at b/tests/compile.at
new file mode 100644
index 0000000..a4ad6e2
--- /dev/null
+++ b/tests/compile.at
@@ -0,0 +1,465 @@
+# -*- Autotest -*-
+
+AT_BANNER([Low level compiling/preprocessing macros.])
+
+# Copyright (C) 2000-2001, 2003, 2005-2012 Free Software Foundation,
+# Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## ------------------------------------- ##
+## AC_LANG, AC_LANG_PUSH & AC_LANG_POP. ##
+## ------------------------------------- ##
+
+AT_SETUP([[AC_LANG, AC_LANG_PUSH & AC_LANG_POP]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+# C
+AC_LANG([C])
+# C
+AC_LANG_PUSH([C])
+# C C
+AC_LANG_PUSH([C++])
+# C++ C C
+AC_LANG([C++])
+# C++ C C
+AC_LANG_PUSH([Erlang])
+# Erlang C++ C C
+AC_LANG_PUSH([Fortran 77])
+# F77 Erlang C++ C C
+AC_LANG_POP([Fortran 77])
+# Erlang C++ C C
+AC_LANG_POP([Erlang])
+# C++ C C
+AC_LANG([C++])
+# C++ C C
+AC_LANG_POP([C++])
+# C C
+AC_LANG_POP([C])
+# C
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK([sed -n 's/^ac_ext=//p' configure], 0,
+[c
+c
+c
+cpp
+cpp
+erl
+f
+erl
+cpp
+cpp
+c
+c
+])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## AC_REQUIRE & AC_LANG. ##
+## ---------------------- ##
+
+AT_SETUP([AC_REQUIRE & AC_LANG])
+
+AT_DATA([configure.ac],
+[[AC_DEFUN([AC_F77_1],
+[AC_LANG_PUSH([Fortran 77])
+if test $ac_ext != f; then
+ AC_MSG_ERROR([F77_1: current shell language is $ac_ext, expected Fortran])
+fi
+AC_LANG_POP
+])
+
+
+AC_DEFUN([AC_F77_2],
+[AC_LANG_PUSH([Fortran 77])
+AC_REQUIRE([AC_F77_1])
+if test $ac_ext != f; then
+ AC_MSG_ERROR([F77_2: current shell language is $ac_ext, expected Fortran])
+fi
+AC_LANG_POP
+])
+
+AC_INIT
+AC_F77_2
+AS_EXIT(0)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_LANG_SOURCE. ##
+## ---------------- ##
+
+AT_SETUP([AC_LANG_SOURCE])
+
+AT_DATA([configure.ac],
+[[AC_INIT([pkg], [1.0])
+AC_PROG_CC
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef PACKAGE_NAME
+choke me
+#endif
+int main ()
+{
+ return 0;
+}
+]], [], [AC_MSG_FAILURE([confdefs not included])])])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## AC_LANG_SOURCE(C++). ##
+## --------------------- ##
+
+AT_SETUP([AC_LANG_SOURCE(C++)])
+
+AT_DATA([configure.ac],
+[[AC_INIT([pkg], [1.0])
+AC_PROG_CXX
+AC_LANG([C++])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef PACKAGE_NAME
+choke me
+#endif
+int main ()
+{
+ return 0;
+}
+]], [], [AC_MSG_FAILURE([confdefs not included])])])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## ------------------------ ##
+## AC_LANG_SOURCE example. ##
+## ------------------------ ##
+
+AT_SETUP([AC_LANG_SOURCE example])
+
+# Set CONFIG_SITE to a nonexistent file, so that there are
+# no worries about configure output caused by sourcing a config.site.
+CONFIG_SITE=no-such-file
+export CONFIG_SITE
+
+AT_DATA([configure.ac],
+[[# Taken from autoconf.texi:Generating Sources.
+# The only change is to not fail if gcc doesn't work.
+AC_INIT([Hello], [1.0], [bug-hello@example.org], [],
+ [http://www.example.org/])
+AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+AC_LANG([C])
+AC_LANG_CONFTEST(
+ [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
+gcc -E -dD conftest.c || AS_EXIT([77])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [stdout])
+# Taken from autoconf.texi:Generating Sources.
+# Note that the output may contain more defines and lines matching
+# # 1 "conftest.c"
+# so delete everything before the interesting output.
+AT_CHECK([sed -n 's/ *$//; /#define PACKAGE/,$p' stdout], [],
+[[#define PACKAGE_NAME "Hello"
+#define PACKAGE_TARNAME "hello"
+#define PACKAGE_VERSION "1.0"
+#define PACKAGE_STRING "Hello 1.0"
+#define PACKAGE_BUGREPORT "bug-hello@example.org"
+#define PACKAGE_URL "http://www.example.org/"
+#define HELLO_WORLD "Hello, World\n"
+
+const char hw[] = "Hello, World\n";
+]])
+
+AT_CLEANUP
+
+
+## ------------------------- ##
+## AC_LANG_PROGRAM example. ##
+## ------------------------- ##
+
+AT_SETUP([AC_LANG_PROGRAM example])
+
+# Set CONFIG_SITE to a nonexistent file, so that there are
+# no worries about configure output caused by sourcing a config.site.
+CONFIG_SITE=no-such-file
+export CONFIG_SITE
+
+AT_DATA([configure.ac],
+[[# Taken from autoconf.texi:Generating Sources.
+# The only change is to not fail if gcc doesn't work.
+AC_INIT([Hello], [1.0], [bug-hello@example.org], [],
+ [http://www.example.org/])
+AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],
+ [Greetings string.])
+AC_LANG_CONFTEST(
+[AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
+ [[fputs (hw, stdout);]])])
+gcc -E -dD conftest.c || AS_EXIT([77])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [stdout])
+# Taken from autoconf.texi:Generating Sources.
+# Note that the output may contain more defines and lines matching
+# # 1 "conftest.c"
+# so delete everything before the interesting output.
+AT_CHECK([sed -n 's/ *$//; /#define PACKAGE/,$p' stdout], [],
+[[#define PACKAGE_NAME "Hello"
+#define PACKAGE_TARNAME "hello"
+#define PACKAGE_VERSION "1.0"
+#define PACKAGE_STRING "Hello 1.0"
+#define PACKAGE_BUGREPORT "bug-hello@example.org"
+#define PACKAGE_URL "http://www.example.org/"
+#define HELLO_WORLD "Hello, World\n"
+
+const char hw[] = "Hello, World\n";
+int
+main ()
+{
+fputs (hw, stdout);
+ ;
+ return 0;
+}
+]])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## AC_COMPILE_IFELSE. ##
+## ------------------- ##
+
+AT_SETUP([AC_COMPILE_IFELSE])
+AT_KEYWORDS([AC_LANG_DEFINES_PROVIDED])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_COMPILE_IFELSE([int main () { return 0; }], [],
+ [AC_MSG_ERROR([compiling trivial program failed])])
+]])
+
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+AT_CHECK([grep 'no AC_LANG_SOURCE call detected in body' stderr], [], [ignore])
+AT_CHECK_AUTOCONF([-W no-syntax])
+AT_CHECK_CONFIGURE([-q])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED()int main () { return 0; }], [],
+ [AC_MSG_ERROR([compiling trivial program failed])])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0])],
+ [],
+ [AC_MSG_ERROR([compiling `return 0' failed])])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 2])],
+ [],
+ [AC_MSG_ERROR([compiling `return 2' failed])])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_CLEANUP
+
+## --------------- ##
+## AC_RUN_IFELSE. ##
+## --------------- ##
+
+AT_SETUP([AC_RUN_IFELSE])
+AT_KEYWORDS([AC_TRY_RUN])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+
+AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 0])],
+ [],
+ [AC_MSG_ERROR([saw `return 0' as a failure])])
+
+AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 2])],
+ [AC_MSG_ERROR([saw `return 2' as a success])],
+ [estatus=$?
+test $estatus != 2 &&
+ AC_MSG_ERROR([did not get as 2 exit status: $estatus])])
+
+# The old stinky one.
+AC_TRY_RUN([int main () { return 3; }],
+ [AC_MSG_ERROR([saw `return 3' as a success])],
+ [estatus=$?
+test $estatus != 3 &&
+ AC_MSG_ERROR([did not get 3 as exit status: $estatus])])
+
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_CLEANUP
+
+## -------------------------- ##
+## Order of `rm' and actions. ##
+## -------------------------- ##
+
+AT_SETUP([Order of user actions and cleanup])
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CC
+
+AC_PREPROC_IFELSE([AC_LANG_PROGRAM([int grepme;], [])],
+ [{ test -f conftest.err && grep grepme conftest.i; } || AS_EXIT([1])],
+ [AS_EXIT([1])])
+AC_PREPROC_IFELSE([AC_LANG_PROGRAM([#define 12 34 /*], [])],
+ [AS_EXIT([1])],
+ [test -f conftest.err || AS_EXIT([1])])
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
+ [test -f conftest.$ac_objext || AS_EXIT([1])],
+ [AS_EXIT([1])])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
+ [AS_EXIT([1])],
+ [test -f conftest.err || AS_EXIT([1])])
+
+AC_LINK_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
+ [test -f conftest$ac_exeext || AS_EXIT([1])],
+ [AS_EXIT([1])])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
+ [AS_EXIT([1])],
+ [test -f conftest.err || AS_EXIT([1])])
+
+AC_RUN_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
+ [./conftest$ac_exeext || AS_EXIT([1])],
+ [AS_EXIT([1])])
+
+d@&t@nl conftest.err not generated by AC_RUN_IFELSE?
+AC_RUN_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
+ [AS_EXIT([1])],
+ [])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_TRY_LINK_FUNC. ##
+## ------------------ ##
+
+AT_CHECK_MACRO([AC_TRY_LINK_FUNC],
+[AC_TRY_LINK_FUNC(printf,,
+ [AC_MSG_ERROR([cannot find `printf'])])
+AC_TRY_LINK_FUNC(Be_doomed_if_your_libc_has_a_function_named_like_this,
+ [AC_MSG_ERROR([found a nonexistent function])])])
+
+## -------------------- ##
+## Multiple languages. ##
+## -------------------- ##
+
+AT_SETUP([Multiple languages])
+
+# This test should be skipped if the C compiler is a C++ compiler.
+AT_DATA([configure.ac],
+[[AC_INIT
+
+AC_PROG_CC
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ #ifdef __cplusplus
+ choke me
+ #endif
+ ]])], [], AS_EXIT([77]))
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+# This test should be skipped on systems without a C++ compiler.
+AT_DATA([configure.ac],
+[[AC_INIT
+
+AC_PROG_CXX
+AC_LANG_PUSH([C++])
+AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ #ifndef __cplusplus
+ choke me
+ #endif
+ ]])], [], AS_EXIT([77]))
+AC_LANG_POP([C++])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_DATA([configure.ac],
+[[AC_INIT
+
+AC_PROG_CC
+AC_PROG_CXX
+
+AC_LANG_PUSH([C])
+AC_MSG_CHECKING([a simple C program that is not valid C++])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([enum a { A, B, C };
+ enum a f(enum a in) { return in++; }], [])],
+ [AC_MSG_RESULT([ok])],
+ [AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([could not compile test program])])
+AC_LANG_POP([C])
+
+AC_LANG_PUSH([C++])
+AC_MSG_CHECKING([a simple C++ program that is not valid C])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([class A {};], [])],
+ [AC_MSG_RESULT([ok])],
+ [AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([could not compile test program])])
+
+AC_CHECK_HEADER([cstring])
+AC_LANG_POP([C++])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([-q])
+
+AT_CLEANUP
diff --git a/tests/erlang.at b/tests/erlang.at
new file mode 100644
index 0000000..58789b6
--- /dev/null
+++ b/tests/erlang.at
@@ -0,0 +1,134 @@
+# -*- Autotest -*-
+
+AT_BANNER([Erlang low level compiling and utility macros.])
+
+# Copyright (C) 2009-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## ----------------- ##
+## Erlang Compiler. ##
+## ----------------- ##
+
+AT_CHECK_MACRO([Erlang],
+[[AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then AS_EXIT([77]); fi
+AC_LANG([Erlang])
+## Can't compile, but can run an Erlang module:
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [halt(0)])],
+ [AC_MSG_RESULT([ok])
+ AC_MSG_ERROR([compiling Erlang program should fail])],
+ [AC_MSG_RESULT([failed])])
+AC_RUN_IFELSE([AC_LANG_PROGRAM([], [halt(0)])],
+ [AC_MSG_RESULT([ok])],
+ [AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([could not run test program])])
+]],
+[AT_KEYWORDS([Erlang])])
+
+
+## ---------------------- ##
+## Erlang lib detection. ##
+## ---------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_CHECK_LIB],
+[[AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then AS_EXIT([77]); fi
+AC_ERLANG_CHECK_LIB([stdlib],
+ [AC_MSG_RESULT([ok])],
+ [AC_MSG_RESULT([failed])])
+## Test that the lib path detection really detected a directory:
+if test "$ERLANG_LIB_DIR_stdlib" != "not found" \
+ && test ! -d "$ERLANG_LIB_DIR_stdlib"; then
+ AC_MSG_ERROR([incorrect ERLANG_LIB_DIR_stdlib variable])
+fi
+]],
+[AT_KEYWORDS([Erlang])])
+
+
+## --------------------------- ##
+## Erlang root dir detection. ##
+## --------------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_SUBST_ROOT_DIR],
+[[AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then AS_EXIT([77]); fi
+AC_ERLANG_SUBST_ROOT_DIR
+## Test that the root path detection really detected a directory:
+if test ! -d "$ERLANG_ROOT_DIR"; then
+ AC_MSG_ERROR([incorrect ERLANG_ROOT_DIR variable])
+fi
+]],
+[AT_KEYWORDS([Erlang])])
+
+
+## -------------------------- ##
+## Erlang lib dir detection. ##
+## -------------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_SUBST_LIB_DIR],
+[[AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then AS_EXIT([77]); fi
+AC_ERLANG_SUBST_LIB_DIR
+## Test that the lib path detection really detected a directory:
+if test ! -d "$ERLANG_LIB_DIR"; then
+ AC_MSG_ERROR([incorrect ERLANG_LIB_DIR variable])
+fi
+]],
+[AT_KEYWORDS([Erlang])])
+
+
+## ----------------------------------- ##
+## Erlang install base dir detection. ##
+## ----------------------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_SUBST_INSTALL_LIB_DIR],
+ [AT_KEYWORDS([Erlang])])
+
+
+## ---------------------------------- ##
+## Erlang install lib dir detection. ##
+## ---------------------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR],
+[[AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR([test_blah], [1.24-b])
+## Test that the generated directory name is well-formed:
+if test `echo "$ERLANG_INSTALL_LIB_DIR_test_blah" | sed -e 's/^.*\///'` != "test_blah-1.24-b"; then
+ AC_MSG_ERROR([incorrect ERLANG_INSTALL_LIB_DIR_test_blah variable])
+fi
+]],
+[AT_KEYWORDS([Erlang])])
+
+
+## -------------------------- ##
+## Erlang version detection. ##
+## -------------------------- ##
+
+AT_CHECK_MACRO([AC_ERLANG_SUBST_ERTS_VER],
+[[AC_ERLANG_PATH_ERL([no])
+AC_ERLANG_PATH_ERLC([no])
+if test "$ERL" = "no" || test "$ERLC" = "no"; then AS_EXIT([77]); fi
+AC_ERLANG_SUBST_ERTS_VER
+]],
+[AT_KEYWORDS([Erlang])])
diff --git a/tests/foreign.at b/tests/foreign.at
new file mode 100644
index 0000000..7823007
--- /dev/null
+++ b/tests/foreign.at
@@ -0,0 +1,140 @@
+# -*- Autotest -*-
+
+AT_BANNER([Compatibility with other tools.])
+
+# Copyright (C) 2000-2007, 2009-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+## --------- ##
+## Libtool. ##
+## --------- ##
+
+AT_SETUP([Libtool])
+
+# Skip this test if there is no libtoolize.
+AT_CHECK([libtoolize --version || exit 77],
+ [ignore], [ignore], [ignore])
+# Modern Libtool has further tests for compatibility with older autoconf;
+# from the Autoconf side, we will merely assume newer libtool.
+AT_CHECK([[
+case `libtoolize --version |
+ sed -n '/^.* \([0-9][0-9.a-z]*\)$/{
+ s//\1/
+ p
+ q
+ }'` in
+ 0.* ) exit 77;;
+ 1.* ) exit 77;;
+esac]],
+ [ignore], [ignore], [ignore])
+
+# Using a configure.ac, have libtoolize confess where libtool.m4 is.
+AT_DATA([configure.ac],
+[[AC_INIT
+# State that we explicitly want auxiliary files here, so libtoolize
+# won't pollute files outside the test directory.
+AC_CONFIG_AUX_DIR([.])
+AC_PROG_LIBTOOL
+]])
+AT_CHECK([libtoolize -i], [0], [stdout], [ignore])
+
+# Some broken libtoolize fail to install a functional config.guess.
+AT_CHECK([./config.guess || exit 77], [], [ignore], [ignore])
+
+# Make sure at-path contains something valid, and let the test suite
+# display it when verbose. And fail, skipping would too easily hide
+# problems.
+AT_CHECK([sed -n ["s,^.*\`\\(/[^']*\\)'.*,\\1,p"] stdout], [0], [stdout])
+AT_CHECK([test -f "`sed -n 1p stdout`"])
+
+# Older libtoolize installed everything but install-sh...
+AT_CHECK([test -f install-sh || touch install-sh])
+
+# Build the concatenation of libtool.m4 and configure.ac.
+AT_CHECK([[sed 's/.*/m4''_include([&])/' stdout]], [0], [stdout])
+AT_CHECK([mv stdout aclocal.m4])
+cat >configure.ac <<_EOF
+AC_INIT
+AC_CONFIG_AUX_DIR([.])
+AC_CANONICAL_SYSTEM
+AC_PROG_LIBTOOL
+_EOF
+
+# FIXME: Once Libtool really fixed, stop ignoring stderr.
+AT_CHECK_AUTOCONF([], [], [], [ignore])
+
+# Ignore stderr, because ltconfig always loads the cache, which is
+# /dev/null, and some shells choke on this. For instance with Bash
+# 2.05, you get:
+#
+# loading cache /dev/null within ltconfig
+# ./ltconfig: .: /dev/null: not a regular file
+#
+# But the script executes properly.
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([shtool])
+
+AT_DATA([configure.ac],
+[[AC_INIT([shtool test], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_PATH_PROG([SHTOOL], [shtool], [false])
+AC_PROG_INSTALL
+AC_SUBST([ac_install_sh])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[SHTOOL = @SHTOOL@
+# fake these, so that we use shtool wherever possible.
+INSTALL_PROGRAM = $(ac_install_sh)
+INSTALL_DATA = $(ac_install_sh) -m 644
+prefix = @prefix@
+ac_install_sh = @ac_install_sh@
+
+install:
+ $(INSTALL_PROGRAM) file1 $(prefix)/file1
+ $(INSTALL_DATA) file2 $(prefix)/file2
+
+copy-shtool:
+ test '$(SHTOOL)' != false
+ cp '$(SHTOOL)' build-aux
+]])
+
+: >file1
+: >file2
+chmod +x file1
+: "${MAKE=make}"
+mkdir build-aux inst
+instdir=`pwd`/inst
+AT_CHECK_AUTOCONF
+cp "$abs_top_srcdir/build-aux/install-sh" build-aux
+AT_CHECK_CONFIGURE
+AT_CHECK([$MAKE copy-shtool], [], [ignore], [ignore],
+ [AT_CHECK([: >build-aux/shtool])])
+rm -f build-aux/install-sh
+AT_CHECK_CONFIGURE([--prefix="$instdir" ac_cv_path_SHTOOL=false])
+AT_CHECK([grep '^ac_install_sh = .*shtool install -c' Makefile], [], [ignore])
+if test -s build-aux/shtool; then
+ AT_CHECK([$MAKE install], [], [ignore], [ignore])
+ AT_CHECK([test -f inst/file1 && test -f inst/file2 && test -x inst/file1])
+fi
+
+AT_CLEANUP
diff --git a/tests/fortran.at b/tests/fortran.at
new file mode 100644
index 0000000..af23eb9
--- /dev/null
+++ b/tests/fortran.at
@@ -0,0 +1,1164 @@
+# -*- Autotest -*-
+
+AT_BANNER([Fortran low level compiling/preprocessing macros.])
+
+# Copyright (C) 2000-2001, 2003, 2008-2012 Free Software Foundation,
+# Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## --------------------- ##
+## Fortran 77 Compiler. ##
+## --------------------- ##
+
+
+AT_CHECK_MACRO([GNU Fortran 77],
+[[AC_LANG(Fortran 77)
+AC_LANG_COMPILER
+
+: > conftest.f
+if AC_TRY_COMMAND([$F77 --version | grep GNU >&2]) \
+ || AC_TRY_COMMAND([$F77 -v -c conftest.f 2>&1 | grep "f2c " >&2]); then
+ # Be sure to remove files which might be created by compilers that
+ # don't support --version, or by the second compile.
+ rm -f a.exe a.out conftest.f conftest.$ac_objext
+ # Has GNU in --version.
+ test "$G77" != yes &&
+ AC_MSG_ERROR([failed to recognize GNU Fortran 77 compiler])
+else
+ # Be sure to remove files which might be created by compilers that
+ # don't support --version, or by the second compile.
+ rm -f a.exe a.out conftest.f conftest.$ac_objext
+ # Has not.
+ test "$G77" = yes &&
+ AC_MSG_ERROR([incorrectly recognized a GNU Fortran 77 compiler])
+fi
+]])
+
+
+
+## ------------------ ##
+## Fortran Compiler. ##
+## ------------------ ##
+
+
+AT_CHECK_MACRO([GNU Fortran],
+[[AC_LANG(Fortran)
+AC_LANG_COMPILER
+
+# No Fortran compiler is known not to support "*.f".
+AC_FC_SRCEXT([f])
+
+# GNU Fortran is known to support freeform.
+AC_FC_FREEFORM([],
+ [AC_MSG_WARN([Fortran does not accept free-form source])])
+if test "$ac_compiler_gnu" = yes; then
+ case $FCFLAGS in
+ *-ffree-form*) ;;
+ *) AC_MSG_ERROR([failed to recognize GNU Fortran's -ffree-form option]);;
+ esac
+fi
+]])
+
+
+## ------------------------- ##
+## AC_OPENMP and Fortran 77. ##
+## ------------------------- ##
+
+AT_SETUP([AC_OPENMP and Fortran 77])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_F77
+AC_LANG([Fortran 77])
+AC_OPENMP
+if test "X$ac_cv_prog_f77_openmp" = Xunsupported; then
+ AS_EXIT([77])
+fi
+FFLAGS="$FFLAGS $OPENMP_FFLAGS"
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[foo@EXEEXT@: foo.@OBJEXT@
+ @F77@ @FFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
+
+foo.@OBJEXT@: foo.f
+ @F77@ @FFLAGS@ -c foo.f
+]])
+
+AT_DATA([foo.f],
+[[ program main
+ end
+]])
+
+: "${MAKE=make}"
+AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
+AT_CHECK_CONFIGURE
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## AC_OPENMP and Fortran. ##
+## ---------------------- ##
+
+AT_SETUP([AC_OPENMP and Fortran])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+AC_LANG([Fortran])
+AC_OPENMP
+if test "X$ac_cv_prog_fc_openmp" = Xunsupported; then
+ AS_EXIT([77])
+fi
+FCFLAGS="$FCFLAGS $OPENMP_FCFLAGS"
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[foo@EXEEXT@: foo.@OBJEXT@
+ @FC@ @FCFLAGS@ @LDFLAGS@ -o $@ foo.@OBJEXT@
+
+foo.@OBJEXT@: foo.f
+ @FC@ @FCFLAGS@ -c foo.f
+]])
+
+AT_DATA([foo.f],
+[[ program main
+ end
+]])
+
+: "${MAKE=make}"
+AT_CHECK([env ACLOCAL=true autoreconf -vi], [], [ignore], [ignore])
+AT_CHECK_CONFIGURE
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+# We don't test the AC_F77_LIBRARY_LDFLAGS macro on its own because of
+# (autoconf.info)Fortran Compiler:
+# The macros `AC_F77_DUMMY_MAIN' and `AC_FC_DUMMY_MAIN' or
+# `AC_F77_MAIN' and `AC_FC_MAIN' are probably also necessary to link
+# C/C++ with Fortran; see below.
+#
+# and we would need libtool to create shared libraries.
+
+# Further, for any sensible test of the AC_F{77,C}(_DUMMY)?_MAIN macros
+# we also need to use AC_F{77,C}_WRAPPERS, in order to be able to actually
+# call the functions.
+
+## ------------------------ ##
+## AC_F77_DUMMY_MAIN usage. ##
+## ------------------------ ##
+
+AT_SETUP([AC_F77_DUMMY_MAIN usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_F77
+AC_F77_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine F77 dummy main], [77])])
+AC_F77_WRAPPERS
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[
+all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @F77@ @FFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[C This is just a purely numeric routine, no I/O needed.
+C Taken from autoconf.texi:Fortran Compiler.
+ subroutine foobar (x, y)
+ double precision x, y
+ y = 3.14159 * x
+ return
+ end
+]])
+
+AT_DATA([cprogram.c],
+[[#include <config.h>
+#include <math.h>
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void FOOBAR_F77 (double *x, double *y);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN () { return 1; }
+#endif
+
+int main(int argc, char *argv[])
+{
+ double x = 2.7183, y;
+ FOOBAR_F77 (&x, &y);
+ if (fabs (8.539784097 - y) > 1.e-6)
+ return 1;
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram])
+
+AT_CLEANUP
+
+
+## ----------------------- ##
+## AC_FC_DUMMY_MAIN usage. ##
+## ----------------------- ##
+
+AT_SETUP([AC_FC_DUMMY_MAIN usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_FC
+AC_FC_FIXEDFORM
+AC_FC_DUMMY_MAIN([], [AC_MSG_FAILURE([failed to determine FC dummy main], [77])])
+AC_FC_WRAPPERS
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[
+all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[C This is just a purely numeric routine, no I/O needed.
+C Taken from autoconf.texi:Fortran Compiler.
+ subroutine foobar (x, y)
+ double precision x, y
+ y = 3.14159 * x
+ return
+ end
+]])
+
+AT_DATA([cprogram.c],
+[[#include <config.h>
+#include <math.h>
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void FOOBAR_FC(double *x, double *y);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef FC_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN () { return 1; }
+#endif
+
+int main (int argc, char *argv[])
+{
+ double x = 2.7183, y;
+ FOOBAR_FC (&x, &y);
+ if (fabs (8.539784097 - y) > 1.e-6)
+ return 1;
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_F77_MAIN usage. ##
+## ------------------ ##
+
+AT_SETUP([AC_F77_MAIN usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_F77
+AC_F77_MAIN
+AC_F77_WRAPPERS
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[
+all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @F77@ @FFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[C This uses Fortran I/O, so is likely to require Fortran startup.
+ subroutine foobar (x)
+ integer x
+ if (x == 42) then
+ write(*,*) 'some output from Fortran sources'
+ end if
+ end
+]])
+
+AT_DATA([cprogram.c],
+[[#include <config.h>
+#include <stdio.h>
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#define FOOBAR_F77 F77_FUNC (foobar, FOOBAR)
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void FOOBAR_F77 (int *x);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef __cplusplus
+ extern "C"
+#endif
+int F77_MAIN (int argc, char *argv[]);
+
+int F77_MAIN (int argc, char *argv[])
+{
+ int x = 42;
+ puts ("output from C main");
+ fflush (stdout);
+ FOOBAR_F77 (&x);
+ puts ("more output from C main");
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram], [], [output from C main
+dnl some output from Fortran sources
+dnl more output from C main
+dnl ])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## AC_FC_MAIN usage. ##
+## ----------------- ##
+
+AT_SETUP([AC_FC_MAIN usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_FC
+AC_FC_FIXEDFORM
+AC_FC_MAIN
+AC_FC_WRAPPERS
+AC_PROG_CC
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[C This uses Fortran I/O, so is likely to require Fortran startup.
+ subroutine foobar (x)
+ integer x
+ if (x == 42) then
+ write (*,*) 'some output from Fortran sources'
+ end if
+ end
+]])
+
+AT_DATA([cprogram.c],
+[[#include <config.h>
+#include <stdio.h>
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#define FOOBAR_FC FC_FUNC (foobar, FOOBAR)
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void FOOBAR_FC (int *x);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef __cplusplus
+ extern "C"
+#endif
+int FC_MAIN (int argc, char *argv[]);
+
+int FC_MAIN (int argc, char *argv[])
+{
+ int x = 42;
+ puts ("output from C main");
+ fflush (stdout);
+ FOOBAR_FC (&x);
+ puts ("more output from C main");
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram], [], [output from C main
+dnl some output from Fortran sources
+dnl more output from C main
+dnl ])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_F77_FUNC usage. ##
+## ------------------ ##
+
+AT_SETUP([AC_F77_FUNC usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_F77
+AC_F77_FUNC([foobar])
+AC_SUBST([foobar])
+AC_PROG_CC
+AC_CONFIG_FILES([cprogram.c:cprogram.in])
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[
+all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @F77@ @FFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[ subroutine foobar (x)
+ integer x
+ x = 42
+ return
+ end
+]])
+
+AT_DATA([cprogram.in],
+[[#include <config.h>
+#include <math.h>
+
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void @foobar@ (int *x);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef F77_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int F77_DUMMY_MAIN () { return 1; }
+#endif
+
+int main(int argc, char *argv[])
+{
+ int x;
+ @foobar@ (&x);
+ if (x != 42)
+ return 1;
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## AC_FC_FUNC usage. ##
+## ----------------- ##
+
+AT_SETUP([AC_FC_FUNC usage])
+
+AT_CONFIGURE_AC([[
+AC_PROG_FC
+AC_FC_FUNC([foobar])
+AC_SUBST([foobar])
+AC_PROG_CC
+AC_CONFIG_FILES([cprogram.c:cprogram.in])
+AC_CONFIG_FILES([Makefile])
+]])
+
+AT_DATA([Makefile.in],
+[[
+all: cprogram@EXEEXT@
+
+cprogram@EXEEXT@: cprogram.@OBJEXT@ foobar.@OBJEXT@
+ @CC@ @CFLAGS@ @LDFLAGS@ -o $@ cprogram.@OBJEXT@ foobar.@OBJEXT@ @LIBS@ @FCLIBS@
+
+.SUFFIXES: .c .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c $<
+.c.@OBJEXT@:
+ @CC@ @DEFS@ -I. @CPPFLAGS@ @CFLAGS@ -c $<
+]])
+
+AT_DATA([foobar.f],
+[[ subroutine foobar (x)
+ integer x
+ x = 42
+ return
+ end
+]])
+
+AT_DATA([cprogram.in],
+[[#include <config.h>
+#include <math.h>
+
+#ifdef __cplusplus
+extern "C" /* prevent C++ name mangling */
+#endif
+void @foobar@ (int *x);
+
+/* Taken from autoconf.texi:Fortran Compiler. */
+#ifdef FC_DUMMY_MAIN
+# ifdef __cplusplus
+ extern "C"
+# endif
+ int FC_DUMMY_MAIN () { return 1; }
+#endif
+
+int main(int argc, char *argv[])
+{
+ int x;
+ @foobar@ (&x);
+ if (x != 42)
+ return 1;
+ return 0;
+}
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./cprogram])
+AT_CLEANUP
+
+
+## ------------------- ##
+## AC_FC_SRCEXT usage. ##
+## ------------------- ##
+
+AT_SETUP([AC_FC_SRCEXT usage])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+FCFLAGS_NOFREE=$FCFLAGS
+AC_SUBST([FCFLAGS_NOFREE])
+AC_FC_FREEFORM
+# Unconditionally require .f to work.
+AC_FC_SRCEXT([f])
+# For each other extension, fail gracefully if it does not work:
+# Not all compilers support all extensions/language versions.
+m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
+ [AC_FC_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
+ AC_SUBST(ext[_object])])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[OBJEXT = @OBJEXT@
+
+all: prog@EXEEXT@
+prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
+ @f95_object@ @f03_object@ @f08_object@
+ @FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
+ @f95_object@ @f03_object@ @f08_object@
+
+.SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f@ $<
+.f77.@OBJEXT@:
+ @FC@ -c @FCFLAGS_NOFREE@ @FCFLAGS_f77@ $<
+.f90.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
+.f95.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
+.f03.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
+.f08.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
+]])
+
+AT_DATA([foof.f],
+[[ program main
+ end
+]])
+
+AT_DATA([foof77.f77],
+[[ subroutine foof77
+ end
+]])
+
+AT_DATA([foof90.f90],
+[[subroutine foof90
+end
+]])
+
+AT_DATA([foof95.f95],
+[[subroutine foof95
+end
+]])
+
+AT_DATA([foof03.f03],
+[[subroutine foof03
+end
+]])
+
+AT_DATA([foof08.f08],
+[[subroutine foof08
+end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## AC_FC_PP_SRCEXT usage. ##
+## ---------------------- ##
+
+AT_SETUP([AC_FC_PP_SRCEXT usage])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+# Unconditionally require .f and .F to work.
+AC_FC_PP_SRCEXT([f])
+AC_FC_PP_SRCEXT([F])
+# For each other extension, fail gracefully if it does not work:
+# Not all compilers support all extensions/language versions.
+m4@&t@_foreach([ext], [f77, f90, f95, f03, f08],
+ [AC_FC_PP_SRCEXT(ext, ext[_object='foo]ext[.$(OBJEXT)'], ext[_object=])
+ AC_SUBST(ext[_object])])
+m4@&t@_foreach([ext], [F77, F90, F95, F03, F08],
+ [AC_FC_PP_SRCEXT(ext, ext[_object='bar]ext[.$(OBJEXT)'], ext[_object=])
+ AC_SUBST(ext[_object])])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[OBJEXT = @OBJEXT@
+
+all: prog@EXEEXT@
+prog@EXEEXT@: foof.@OBJEXT@ @f77_object@ @f90_object@ \
+ @f95_object@ @f03_object@ @f08_object@ \
+ barF.@OBJEXT@ @F77_object@ @F90_object@ \
+ @F95_object@ @F03_object@ @F08_object@
+ @FC@ @FCFLAGS@ -o $@ foof.@OBJEXT@ @f77_object@ @f90_object@ \
+ @f95_object@ @f03_object@ @f08_object@ \
+ barF.@OBJEXT@ @F77_object@ @F90_object@ \
+ @F95_object@ @F03_object@ @F08_object@
+
+.SUFFIXES: .f .f77 .f90 .f95 .f03 .f08 .F .F77 .F90 .F95 .F03 .F08 .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f@ $<
+.f77.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f77@ $<
+.f90.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f90@ $<
+.f95.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f95@ $<
+.f03.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f03@ $<
+.f08.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_f08@ $<
+.F.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F@ $<
+.F77.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F77@ $<
+.F90.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F90@ $<
+.F95.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F95@ $<
+.F03.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F03@ $<
+.F08.@OBJEXT@:
+ @FC@ -c @FCFLAGS@ @FCFLAGS_F08@ $<
+]])
+
+for ext in f77 f90 f95 f03 f08; do
+ cat > foo$ext.$ext <<EOF
+ subroutine foo$ext
+#if 0
+this is not correct fortran
+#endif
+ end
+EOF
+done
+
+for ext in F F77 F90 F95 F03 F08; do
+ cat > bar$ext.$ext <<EOF
+ subroutine bar$ext
+#if 0
+this is not correct fortran
+#endif
+ end
+EOF
+done
+
+AT_DATA([foof.f],
+[[ program main
+#if 0
+this is not correct fortran
+#endif
+ end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## --------------- ##
+## AC_FC_FREEFORM. ##
+## --------------- ##
+
+AT_SETUP([AC_FC_FREEFORM])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+AC_FC_FREEFORM
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[prog: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c $<
+]])
+
+AT_DATA([prog.f],
+[[program main
+end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./prog])
+
+AT_CLEANUP
+
+
+## --------------------------------- ##
+## AC_FC_FREEFORM with AC_FC_SRCEXT. ##
+## --------------------------------- ##
+
+AT_SETUP([AC_FC_FREEFORM with AC_FC_SRCEXT])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
+AC_PROG_FC
+AC_FC_FREEFORM
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[prog: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f90 .@OBJEXT@
+.f90.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
+]])
+
+AT_DATA([prog.f90],
+[[program main
+end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./prog])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AC_FC_FIXEDFORM. ##
+## ---------------- ##
+
+AT_SETUP([AC_FC_FIXEDFORM])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+AC_FC_FIXEDFORM
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[prog: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c $<
+]])
+
+AT_DATA([prog.f],
+[[ program main
+C fixed-form style comment
+ end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./prog])
+
+AT_CLEANUP
+
+
+## ---------------------------------- ##
+## AC_FC_FIXEDFORM with AC_FC_SRCEXT. ##
+## ---------------------------------- ##
+
+AT_SETUP([AC_FC_FIXEDFORM with AC_FC_SRCEXT])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+AC_FC_SRCEXT([f90], [], [AS_EXIT([77])])
+AC_FC_FIXEDFORM
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.in],
+[[prog: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f90 .@OBJEXT@
+.f90.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c @FCFLAGS_f90@ $<
+]])
+
+AT_DATA([prog.f90],
+[[ program main
+C fixed-form style comment
+ end
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+dnl AT_CHECK([./prog])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_FC_LINE_LENGTH. ##
+## ------------------ ##
+
+AT_SETUP([AC_FC_LINE_LENGTH])
+
+AT_DATA([Makefile.in],
+[[prog@EXEEXT@: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
+
+clean:
+ rm -f *.@OBJEXT@ prog@EEXEXT@
+]])
+
+line_80=\
+'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11)'
+line_132=\
+'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
+'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19)'
+line_254=\
+'subroutine foo(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,'\
+'arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21,arg22,arg23,'\
+'arg24,arg25,arg26,arg27,arg28,arg29,arg30,arg31,arg32,arg33,arg34,arg35,'\
+'arg36,arg37,arg38,arg39,arg40)'
+
+for len in 80 132 254
+do
+ if test $len -eq 254; then arg=unlimited; else arg=$len; fi
+ eval long_line=\$line_$len
+
+ # Try free-form first, it has a bigger chance of succeeding.
+ for fixed_or_free in FREEFORM FIXEDFORM
+ do
+
+ cat >configure.ac <<EOF
+AC_INIT
+AC_PROG_FC
+AC_FC_SRCEXT([f])
+AC_FC_$fixed_or_free
+AC_FC_LINE_LENGTH([$arg])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+EOF
+
+ cat >prog.f <<EOF
+ $long_line
+ end subroutine
+ program main
+ end program
+EOF
+
+ AT_CHECK_AUTOCONF
+ AT_CHECK_CONFIGURE
+ : "${MAKE=make}"
+ AT_CHECK([$MAKE], [], [ignore], [ignore])
+ dnl AT_CHECK([./prog])
+ AT_CHECK([$MAKE clean], [], [ignore], [ignore])
+
+ done
+done
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## AC_FC_CHECK_BOUNDS. ##
+## ------------------- ##
+
+AT_SETUP([AC_FC_CHECK_BOUNDS])
+
+AT_DATA([Makefile.in],
+[[prog@EXEEXT@: prog.@OBJEXT@
+ @FC@ @FCFLAGS@ -o $@ prog.@OBJEXT@ @LIBS@
+
+.SUFFIXES: .f .@OBJEXT@
+.f.@OBJEXT@:
+ @FC@ @FCFLAGS@ -c @FCFLAGS_f@ $<
+
+clean:
+ rm -f *.@OBJEXT@ prog@EEXEXT@
+]])
+
+cat >configure.ac <<EOF
+AC_INIT
+AC_PROG_FC
+AC_FC_SRCEXT([f])
+AC_FC_CHECK_BOUNDS
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+EOF
+
+AT_DATA([prog.f],
+[[
+ subroutine copy(a,b,n)
+ integer a(:), b(:), n, i
+ do i = 1, n
+ a(i) = b(i)
+ end do
+ end subroutine
+
+ program main
+ integer, parameter :: n = 20
+ integer a(1:n), b(1:n-1), i
+ interface
+ subroutine copy(a,b,n)
+ integer a(:), b(:), i
+ end subroutine
+ end interface
+
+ call copy(a,b,n)
+ end program
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [ignore], [ignore])
+AT_CHECK([./prog || exit 1], [1], [ignore], [ignore])
+AT_CHECK([$MAKE clean], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## AC_FC_MODULE_FLAG. ##
+## ------------------ ##
+
+AT_SETUP([AC_FC_MODULE_FLAG])
+
+AT_DATA([Makefile.in],
+[[OBJEXT = @OBJEXT@
+EXEEXT = @EXEEXT@
+LIBS = @LIBS@
+ac_empty = @ac_empty@
+FC = @FC@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_f = @FCFLAGS_f@
+
+prog$(EXEEXT): sub/mod.$(OBJEXT) prog.$(OBJEXT)
+ $(FC) $(FCFLAGS) -o $@ prog.$(OBJEXT) sub/mod.$(OBJEXT) $(LIBS)
+
+sub/mod.$(OBJEXT): sub/mod.f
+ cd sub && $(FC) $(FCFLAGS) -c $(FCFLAGS_f) mod.f
+
+# Depend on the object, for the module dependency.
+prog.$(OBJEXT): prog.f sub/mod.$(OBJEXT)
+ $(FC) $(FCFLAGS) $(FC_MODINC). $(FC_MODINC)sub -c $(FCFLAGS_f) $<
+
+clean:
+ -test -z "$(FC_MODEXT)" || rm -f *.$(FC_MODEXT) sub/*.$(FC_MODEXT)
+ -rm -f *.$(OBJEXT) sub/*.$(OBJEXT) prog$(EXEEXT)
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FC
+AC_FC_SRCEXT([f])
+AC_FC_MODULE_FLAG
+if test -n "$FC_MODINC"; then
+ FCFLAGS="$FCFLAGS $FC_MODINC. ${FC_MODINC}sub"
+fi
+AC_FC_MODULE_EXTENSION
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+mkdir sub
+
+AT_DATA([sub/mod.f],
+[[ module foobar
+ end module foobar
+]])
+
+AT_DATA([prog.f],
+[[ program main
+ use foobar
+ end program
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+: "${MAKE=make}"
+AT_CHECK([$MAKE], [], [stdout], [stderr])
+# Both the FCFLAGS setting from configure.ac, and the Makefile rule
+# should add to the module search path.
+AT_CHECK([grep 'sub .*sub ' stdout stderr], [], [ignore])
+AT_CHECK([./prog], [], [ignore], [ignore])
+AT_CHECK([$MAKE clean], [], [ignore], [ignore])
+
+AT_CLEANUP
diff --git a/tests/go.at b/tests/go.at
new file mode 100644
index 0000000..8733aee
--- /dev/null
+++ b/tests/go.at
@@ -0,0 +1,33 @@
+# -*- Autotest -*-
+
+AT_BANNER([Go low level compiling and utility macros.])
+
+# Copyright (C) 2011-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# Since the macros which compile are required by most tests, check
+# them first. But remember that looking for a compiler is even more
+# primitive, so check those first.
+
+
+## ------------- ##
+## Go Compiler. ##
+## ------------- ##
+
+AT_CHECK_MACRO([Go],
+[[AC_LANG(Go)
+AC_LANG_COMPILER
+]])
diff --git a/tests/local.at b/tests/local.at
new file mode 100644
index 0000000..40b7318
--- /dev/null
+++ b/tests/local.at
@@ -0,0 +1,527 @@
+# M4 macros used in building Autoconf test suites. -*- Autotest -*-
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+m4_version_prereq([2.57])
+
+# Used in many tests.
+m4_pattern_allow([^AS_EXIT$])
+m4_pattern_allow([^m4_(define|shift)$])
+
+# Programs this package provides
+AT_TESTED([autom4te autoconf autoheader autoupdate autoreconf ifnames])
+
+# Enable colored test output.
+AT_COLOR_TESTS
+
+## ---------------- ##
+## Utility macros. ##
+## ---------------- ##
+
+# AT_CMP(FILE-1, FILE-2)
+# ----------------------
+# Check FILE-1 and FILE-2 for equality, like `cmp FILE-1 FILE-2'.
+m4_define([AT_CMP],
+[m4_ifval([$2],, [m4_fatal([AT_CMP takes two arguments.])])[]dnl
+AT_CHECK([$at_diff "$1" "$2"])
+])# AT_CMP
+
+
+## ---------------- ##
+## Testing syntax. ##
+## ---------------- ##
+
+# AT_CHECK_SHELL_SYNTAX(PROGRAM)
+# ------------------------------
+# If the shell handles `-n' well, use it to check the syntax of PROGRAM;
+# otherwise, do nothing. ksh93 -n also spits outs loads of warnings
+# about older constructs, but we don't care about the warnings.
+m4_define([AT_CHECK_SHELL_SYNTAX],
+[AT_SKIP_IF([test "$ac_cv_sh_n_works" != yes])
+AT_CHECK([/bin/sh -n $1], [], [], [ignore])])
+
+m4_define([AT_CHECK_PERL_SYNTAX],
+[AT_CHECK([autom4te_perllibdir=$abs_top_srcdir/lib $PERL -c "$abs_top_builddir"/bin/$1],
+ 0, [], [ignore])])
+
+## ------------------ ##
+## Testing autom4te. ##
+## ------------------ ##
+
+
+# AT_CHECK_M4(COMMAND, [EXIT-STATUS = 0], STDOUT, STDERR)
+# -------------------------------------------------------
+# If stderr is specified, normalize the observed stderr.
+# This (using GNU M4 1.4.6)
+#
+# /usr/local/bin/m4:script.4s:1: cannot open `foo': No such file or directory
+# autom4te: /usr/local/bin/m4 failed with exit status: 1
+#
+# or this (GNU M4 1.4.11)
+#
+# /usr/local/bin/m4:script.4s:1: include: cannot open `foo': No such file or directory
+# autom4te: /usr/local/bin/m4 failed with exit status: 1
+#
+# or this (GNU M4 1.4 installed as gm4)
+#
+# script.4s:1: /usr/local/bin/gm4: Cannot open foo: No such file or directory
+# autom4te: /usr/local/bin/gm4 failed with exit status: 1
+#
+# or this (GNU M4 1.4.13 installed as m4-1.4.13):
+#
+# /usr/bin/m4-1.4.13:script.4s:1: include: cannot open `foo': No such file or directory
+# autom4te: /usr/bin/m4-1.4.13 failed with exit status: 1
+#
+# becomes
+#
+# m4:script.4s:1: cannot open `foo': No such file or directory
+# autom4te: m4 failed with exit status: 1
+#
+# We use the following sed patterns:
+#
+# (m4): ?(file): ?(line):
+# or (file): ?(line): ?(m4):
+# to m4:(file):(line):
+#
+# and
+# m4:(file):(line): Cannot open foo:
+# or m4:(file):(line): include: cannot open `foo':
+# to m4:(file):(line): cannot open `foo':
+#
+# and
+# autom4te: [^ ]m4
+# or autom4te: [^ ]m4.exe
+# to autom4te: m4
+#
+# Moreover, DJGPP error messages include the error code in brackets;
+# remove the error code during normalization.
+#
+m4_define([AT_CHECK_M4],
+[AT_CHECK([$1], [$2], [$3],
+ m4_case([$4], [], [], [ignore], [ignore], [stderr]))
+m4_case([$4], [], [], [ignore], [],
+[AT_CHECK([[sed 's/^[^:]*m4[-.ex0-9]*: *\([^:]*:\) *\([0-9][0-9]*: \)/m4:\1\2/
+ s/^\([^:]*:\) *\([0-9][0-9]*:\)[^:]*m4[-.ex0-9]*: /m4:\1\2 /
+ s/: C\(annot open \)\([^`:]*\):/: c\1`\2'\'':/
+ s/: include:\( cannot open\)/:\1/
+ s/^autom4te: [^ ]*m4[.ex]* /autom4te: m4 /
+ s/ (E[A-Z]*)$//
+ ' stderr >&2]], [0], [], [$4])])
+])
+
+# AT_CHECK_AUTOM4TE(FLAGS, [EXIT-STATUS = 0], STDOUT, STDERR)
+# -----------------------------------------------------------
+m4_define([AT_CHECK_AUTOM4TE],
+[AT_CHECK_M4([autom4te $1], [$2], [$3], [$4])])
+
+
+
+## ----------------- ##
+## Testing M4sugar. ##
+## ----------------- ##
+
+
+# AT_DATA_M4SUGAR(FILE-NAME, CONTENTS)
+# ------------------------------------
+# Escape the invalid tokens with @&t@.
+m4_define([AT_DATA_M4SUGAR],
+[AT_DATA([$1],
+[m4_bpatsubst([$2], [\(@.\)\(.@\)\|\(m4\)\(_\)\|\(d\)\(nl\)],
+ [\1\3\5@&t@\2\4\6])])])
+
+
+# AT_CHECK_M4SUGAR(FLAGS, [EXIT-STATUS = 0], STDOUT, STDERR)
+# ----------------------------------------------------------
+m4_define([AT_CHECK_M4SUGAR],
+[AT_KEYWORDS([m4sugar])
+AT_CHECK_AUTOM4TE([--language=m4sugar script.4s -o script $1],
+ [$2], [$3], [$4])])
+
+
+
+## -------------- ##
+## Testing M4sh. ##
+## -------------- ##
+
+
+# AT_DATA_M4SH(FILE-NAME, CONTENTS)
+# ---------------------------------
+# Escape the invalid tokens with @&t@.
+m4_define([AT_DATA_M4SH],
+[AT_DATA([$1],
+[m4_bpatsubst([$2], [\(@.\)\(.@\)\|\(m4\|AS\)\(_\)\|\(d\)\(nl\)],
+ [\1\3\5@&t@\2\4\6])])])
+
+
+# AT_CHECK_M4SH(FLAGS, [EXIT-STATUS = 0], STDOUT, STDERR)
+# -------------------------------------------------------
+m4_define([AT_CHECK_M4SH],
+[AT_CHECK_AUTOM4TE([--language=m4sh script.as -o script $1],
+ [$2], [$3], [$4])])
+
+
+
+## ------------------ ##
+## Testing Autoconf. ##
+## ------------------ ##
+
+
+# AT_DATA_AUTOCONF(FILE-NAME, CONTENTS)
+# -------------------------------------
+# Escape the invalid tokens with @&t@.
+m4_define([AT_DATA_AUTOCONF],
+[AT_DATA([$1],
+[m4_bpatsubst([$2], [\(@.\)\(.@\)\|\(m4\|AS\|AC\)\(_\)\|\(d\)\(nl\)],
+ [\1\3\5@&t@\2\4\6])])])
+
+
+
+# AT_CONFIGURE_AC(BODY)
+# ---------------------
+# Create a full configure.ac running BODY, with a config header set up,
+# AC_OUTPUT, and environment checking hooks.
+m4_define([AT_CONFIGURE_AC],
+[AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_STATE_SAVE(before)]
+$1
+[AC_OUTPUT
+AC_STATE_SAVE(after)
+]])
+cp "$abs_top_srcdir/build-aux/install-sh" \
+ "$abs_top_srcdir/build-aux/config.guess" \
+ "$abs_top_srcdir/build-aux/config.sub" .
+cp "$abs_top_srcdir/tests/statesave.m4" aclocal.m4
+])# AT_CONFIGURE_AC
+
+
+# AT_CHECK_AUTOCONF(ARGS, [EXIT-STATUS = 0], STDOUT, STDERR)
+# ----------------------------------------------------------
+# We always use "--force", to prevent problems with timestamps if the testsuite
+# were running too fast.
+m4_define([AT_CHECK_AUTOCONF],
+[AT_CHECK_M4([autoconf --force $1], [$2], [$3], [$4])
+if test -s configure && test "$ac_cv_sh_n_works" = yes; then
+ AT_CHECK_SHELL_SYNTAX([configure])
+fi
+])
+
+
+# AT_CHECK_AUTOHEADER(ARGS, [EXIT-STATUS = 0], STDOUT, STDERR)
+# ------------------------------------------------------------
+m4_define([AT_CHECK_AUTOHEADER],
+[AT_CHECK([autoheader $1], [$2], [$3], [$4])
+])
+
+
+# AT_CHECK_CONFIGURE(END-COMMAND,
+# [EXIT-STATUS = 0],
+# [STDOUT = IGNORE], STDERR)
+# ---------------------------------------------
+# `abs_top_srcdir' is needed so that `./configure' finds install-sh.
+# Using --srcdir is more expensive.
+m4_define([AT_CHECK_CONFIGURE],
+[AT_CAPTURE_FILE([config.log])[]dnl
+ AT_CHECK([./configure $configure_options $1],
+ [$2],
+ m4_default([$3], [ignore]), [$4])])
+
+
+# AT_CHECK_ENV
+# ------------
+# Check that the full configure run remained in its variable name space,
+# and cleaned up tmp files.
+#
+# Perhaps grep -E is not supported, or perhaps it chokes on such a big regex.
+# In this case just don't pay attention to the env. It would be great
+# to keep the error message but we can't: that would break AT_CHECK.
+#
+# FreeBSD sh may intermingle the trace output from the egrep and grep
+# commands in the pipe, so turn off tracing for these.
+#
+# Some tests might exit prematurely when they find a problem, in
+# which case `env-after' is probably missing. Don't check it then.
+#
+# Here are the variables `configure' may modify during execution:
+# - ^as_
+# M4sh's shell name space.
+# - ^ac_
+# Autoconf's shell name space.
+# - prefix and exec_prefix
+# are kept undefined (NONE) until AC_OUTPUT which then sets them to
+# `/usr/local' and `${prefix}' for make.
+# - (host|build|target)(_(alias|cpu|vendor|os))?
+# Set by AC_CANONICAL_(HOST|BUILD|TARGET).
+# - cross_compiling
+# Set by AC_INIT.
+# - interpval
+# Set by AC_SYS_INTERPRETER.
+# - CONFIG_STATUS and DEFS
+# Set by AC_OUTPUT.
+# - AC_SUBST'ed variables
+# (FIXME: Generate a list of these automatically.)
+# - _|@|.[*#?$].|argv|ARGC|LINENO|OLDPWD|PIPESTATUS|RANDOM|SECONDS
+# Some variables some shells use and change.
+# `.[*#?$].' catches `$#' etc. which are displayed like this:
+# | '!'=18186
+# | '#'=0
+# | '$'=6908
+#
+m4_define([AT_CHECK_ENV],
+[m4_divert_once([PREPARE_TESTS], [_AT_CHECK_ENV])dnl
+AT_CHECK([at_check_env])])
+m4_define([_AT_CHECK_ENV],
+[AS_FUNCTION_DESCRIBE([at_check_env], [],
+[Compare the directory and environment state both before and after a run,
+and return non-zero status if they differ inappropriately.])
+at_check_env ()
+{
+# Compare directory listings.
+test -f state-ls.before ||
+ AS_ERROR([state-ls.before not present])
+test -f state-ls.after \
+ && { $at_diff state-ls.before state-ls.after || return 1; }
+# Compare variable space dumps.
+if test -f state-env.before && test -f state-env.after; then
+ set +x
+ grep_failed=false
+ for act_file in state-env.before state-env.after
+ do
+ ($EGREP -v '^(m4_join([|],
+ [a[cs]_.*],
+ [(exec_)?prefix|DEFS|CONFIG_STATUS],
+ [CC|CFLAGS|CPP|GCC|CXX|CXXFLAGS|CXXCPP|GXX|F77|FFLAGS|FLIBS|G77],
+ [ERL|ERLC|ERLCFLAGS|ERLANG_PATH_ERL|ERLANG_ROOT_DIR|ERLANG_LIB_DIR],
+ [ERLANG_LIB_DIR_.*|ERLANG_LIB_VER_.*|ERLANG_INSTALL_LIB_DIR],
+ [ERLANG_INSTALL_LIB_DIR_.*|ERLANG_ERTS_VER|OBJC|OBJCPP|OBJCFLAGS],
+ [OBJCXX|OBJCXXCPP|OBJCXXFLAGS],
+ [GOC|GOFLAGS],
+ [OPENMP_CFLAGS],
+ [LIBS|LIB@&t@OBJS|LTLIBOBJS|LDFLAGS],
+ [INSTALL(_(DATA|PROGRAM|SCRIPT))?],
+ [CYGWIN|ISC|MINGW32|MINIX|EMXOS2|XENIX|EXEEXT|OBJEXT],
+ [X_(CFLAGS|(EXTRA_|PRE_)?LIBS)|x_(includes|libraries)|(have|no)_x],
+ [(host|build|target)(_(alias|cpu|vendor|os))?],
+ [cross_compiling|U],
+ [interpval|PATH_SEPARATOR],
+ [GFC|F77_DUMMY_MAIN|f77_(case|underscore)],
+ [FC(_DUMMY_MAIN|FLAGS|LIBS|FLAGS_[fF]|_MODEXT|_MODINC|_MODOUT|_DEFINE)?],
+ [ALLOCA|GETLOADAVG_LIBS|KMEM_GROUP|NEED_SETGID|POW_LIB],
+ [AWK|LEX|LEXLIB|LEX_OUTPUT_ROOT|LN_S|M4|MKDIR_P|RANLIB|SET_MAKE|YACC],
+ [GREP|[EF]GREP|SED],
+ [[_@]|.[*#?$].],
+ [argv|ARGC|LINENO|OLDPWD|PIPESTATUS|RANDOM|SECONDS]))=' \
+ $act_file ||
+ test $? -eq 1 || echo failed >&2
+ ) 2>stderr-$act_file |
+ # There may be variables spread on several lines; remove latter lines.
+ $GREP '^m4_defn([m4_re_word])=' >clean-$act_file ||
+ test $? -eq 1 || grep_failed=:
+ test -s stderr-$act_file && grep_failed=:
+ done
+ $at_traceon
+ $grep_failed || $at_diff clean-state-env.before clean-state-env.after
+fi
+} [#]at_check_env])
+
+
+# AT_CONFIG_CMP(VAR-FILE-A, VAR-FILE-B)
+# -------------------------------------
+# Check the outcomes of two configure runs for equality by comparing dumps of
+# their shell variables. VAR-FILE-A and VAR-FILE-B are two `set'-style shell
+# variable space dumps.
+#
+# We permit variance between runs in the following shell variables:
+# - ^as_
+# M4sh's shell name space.
+# - ^ac_, excluding ^ac_cv_
+# Autoconf's private shell name space.
+# - PPID [bash, zsh]
+# - RANDOM [zsh]
+# - SECONDS [zsh]
+# - '$' [zsh]
+# - argv [zsh]
+# - ARGC [zsh]
+#
+# Furthermore, it is okay for a non-cache variable initialized to empty in one
+# run to be unset in another run. This happens when, for example, cache update
+# code tries a number of values in LIBS and eventually restores LIBS to its
+# original value. If LIBS was previously unset, it will have become set and
+# empty. (OTOH, cache variables indicate the result of the test even if they
+# are empty, so we have to be strict about them.)
+#
+# Lines that do not look like `foo=bar' are probably latter lines of
+# multiline values; trim them.
+#
+m4_define([AT_CONFIG_CMP],
+[for act_file in $1 $2
+do
+ $SED '/^ac_cv_/ b
+ /^m4_defn([m4_re_word])=./ !d
+ /^[[^=]]*='\'''\''$/ d
+ /^a[[cs]]_/ d
+ /^OLDPWD=/ d
+ /^PPID=/ d
+ /^RANDOM=/ d
+ /^SECONDS=/ d
+ /'\'\\\$\''=/ d
+ /^argv=/ d
+ /^ARGC=/ d
+ ' $act_file >at_config_vars-$act_file
+done
+AT_CMP([at_config_vars-$1], [at_config_vars-$2])[]dnl
+])# AT_CONFIG_CMP
+
+
+# AT_CHECK_DEFINES(CONTENT)
+# -------------------------
+# Verify that config.h, once stripped, is CONTENT.
+# Stripping consists of keeping CPP lines (i.e. containing a hash),
+# but those of automatically checked features (STDC_HEADERS etc.)
+# and symbols (PACKAGE_...).
+# AT_CHECK_HEADER is a better name, but too close from AC_CHECK_HEADER.
+m4_define([AT_CHECK_DEFINES],
+[AT_CHECK([[sed '/#/!d
+/INTTYPES/d
+/MEMORY/d
+/PACKAGE_/d
+/STDC_HEADERS/d
+/STDINT/d
+/STDLIB/d
+/STRING/d
+/SYS_STAT/d
+/SYS_TYPES/d
+/UNISTD/d' config.h]],,
+ [$1])])
+
+
+# AT_CHECK_AUTOUPDATE
+# -------------------
+m4_define([AT_CHECK_AUTOUPDATE],
+[AT_CHECK([autoupdate $1], [$2], [$3], [$4])
+])
+
+
+# _AT_CHECK_AC_MACRO(AC-BODY, PRE-TESTS)
+# --------------------------------------
+# Create a minimalist configure.ac running the macro named
+# NAME-OF-THE-MACRO, check that autoconf runs on that script,
+# and that the shell runs correctly the configure.
+m4_define([_AT_CHECK_AC_MACRO],
+[AT_CONFIGURE_AC([$1])
+$2
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+AT_CHECK_ENV
+])# _AT_CHECK_AC_MACRO
+
+
+# AT_CHECK_MACRO(MACRO, [MACRO-USE], [ADDITIONAL-CMDS],
+# [AUTOCONF-FLAGS = -W obsolete])
+# -----------------------------------------------------
+# Create a minimalist configure.ac running the macro named
+# NAME-OF-THE-MACRO, check that autoconf runs on that script,
+# and that the shell runs correctly the configure.
+#
+# We run `configure' twice, both times with a cache, and compare
+# the environment after each run to detect inconsistencies.
+#
+# New macros are not expected to depend upon obsolete macros.
+m4_define([AT_CHECK_MACRO],
+[AT_SETUP([$1])
+
+AT_CONFIGURE_AC([m4_default([$2], [$1])])
+
+AT_CHECK_AUTOCONF([m4_default([$4], [-W obsolete])])
+AT_CHECK_AUTOHEADER
+
+for at_run in r1 r2
+do
+ AT_CHECK_CONFIGURE([-C])
+ cp -f state-env.after state-env.$at_run
+ cp -f config.h config-h.$at_run
+ AT_CHECK_ENV
+done
+
+AT_CMP([config-h.r1], [config-h.r2])
+AT_CONFIG_CMP([state-env.r1], [state-env.r2])
+
+$3
+
+AT_CLEANUP[]dnl
+])# AT_CHECK_MACRO
+
+
+# AT_CHECK_MACRO_CROSS(MACRO, [MACRO-USE], [ADDITIONAL-CMDS],
+# [AUTOCONF-FLAGS = -W obsolete])
+# -----------------------------------------------------------
+# Like the previous one, but creates two checks: for native
+# compile and for cross-compile.
+m4_define([AT_CHECK_MACRO_CROSS],
+[AT_CHECK_MACRO($@)
+AT_CHECK_MACRO([$1 (cross compile)],
+ [AT_KEYWORDS([cross])
+ # Exercise the code used when cross-compiling.
+ cross_compiling=yes
+ ac_tool_warned=yes
+ m4_default([$2], [$1])],
+ [$3], [$4])
+])
+
+
+# AT_CHECK_AU_MACRO(MACRO)
+# ------------------------
+# Create a minimalist configure.ac running the macro named
+# NAME-OF-THE-MACRO, autoupdate this script, check that autoconf runs
+# on that script, and that the shell runs correctly the configure.
+#
+# Updated configure.ac shall not depend upon obsolete macros, which votes
+# in favor of `-W obsolete', but since many of these macros leave a message
+# to be removed by the user once her code is adjusted, let's not check.
+#
+# Remove config.hin to avoid `autoheader: config.hin is unchanged'.
+m4_define([AT_CHECK_AU_MACRO],
+[AT_SETUP([$1])
+AT_KEYWORDS([autoupdate])
+
+AT_CONFIGURE_AC([$1])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+AT_CHECK_ENV
+
+rm config.hin
+AT_CHECK_AUTOUPDATE([], 0, [], ignore)
+AT_CHECK([grep '^$1$' configure.ac], 1)
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+AT_CHECK_ENV
+
+AT_CLEANUP[]dnl
+])# AT_CHECK_AU_MACRO
+
+
+
+## ----------------------- ##
+## Launch the test suite. ##
+## ----------------------- ##
+
+AT_INIT
diff --git a/tests/m4sh.at b/tests/m4sh.at
new file mode 100644
index 0000000..4e4da5d
--- /dev/null
+++ b/tests/m4sh.at
@@ -0,0 +1,1957 @@
+# -*- Autotest -*-
+
+AT_BANNER([M4sh.])
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+## --------------------------- ##
+## Re-exec with CONFIG_SHELL. ##
+## --------------------------- ##
+
+AT_SETUP([No extra re-exec with CONFIG_SHELL])
+AT_KEYWORDS([CONFIG_SHELL])
+AT_DATA_M4SH([script.as],
+[[
+dnl We have to muck with internal details to goad the script into
+dnl thinking that the default shell is always good enough.
+m4_define([_AS_DETECT_REQUIRED_BODY], [])dnl
+m4_define([_AS_DETECT_SUGGESTED_BODY], [])dnl
+AS_INIT
+echo foo > ok
+]])
+AT_CHECK_M4SH
+AT_CHECK([CONFIG_SHELL=/bin/false ./script], [0], [], [])
+AT_CHECK([test -f ok], [0])
+rm -f ok
+
+AT_CLEANUP
+
+AT_SETUP([Forced re-exec with CONFIG_SHELL])
+AT_KEYWORDS([CONFIG_SHELL])
+
+AT_DATA_M4SH([script.as],
+[[m4_define([_AS_FORCE_REEXEC_WITH_CONFIG_SHELL], [yes])
+AS_INIT
+echo foo > sentinel
+]])
+AT_CHECK_M4SH
+
+# Calling the script simply 'script' could cause problems with
+# Solaris /usr/xpg4/bin/sh in the invocation 'sh script' below.
+mv -f script script2
+
+AT_DATA([fake-shell],
+[[#!/bin/sh
+echo 'Fake shell executed.'
+shift # fake shell
+echo "nargs = @S|@#"
+for i
+do
+ printf ' :%s:\n' "$i"
+done
+]])
+chmod a+x fake-shell
+
+AT_CHECK([CONFIG_SHELL=./fake-shell ./script2 1 2 4 8], [0],
+[Fake shell executed.
+nargs = 4
+ :1:
+ :2:
+ :4:
+ :8:
+], [])
+AT_CHECK([test ! -f sentinel], [0])
+test ! -f sentinel || rm -f sentinel # Cleanup for next test.
+
+AT_CHECK(
+[CONFIG_SHELL=`pwd`/fake-shell sh script2 a 'b c' ' d e '],
+[0],
+[Fake shell executed.
+nargs = 3
+ :a:
+ :b c:
+ : d e :
+], [])
+AT_CHECK([test ! -f sentinel], [0])
+test ! -f sentinel || rm -f sentinel # Cleanup for next test.
+
+AT_CHECK([(PATH=`pwd`:$PATH; export PATH;
+CONFIG_SHELL=fake-shell script2 '' '&' '!;*' '<($[]@%:@)>,' 'x
+y z
+1 2 3')], [0],
+[Fake shell executed.
+nargs = 5
+ ::
+ :&:
+ :!;*:
+ :<($[]@%:@)>,:
+ :x
+y z
+1 2 3:
+], [])
+AT_CHECK([test ! -f sentinel], [0])
+test ! -f sentinel || rm -f sentinel # Cleanup for next test.
+
+AT_CLEANUP
+
+AT_SETUP([Configure re-execs self with CONFIG_SHELL])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+echo foobar >> quux
+]])
+
+AT_CHECK_AUTOCONF
+
+AT_DATA([cfg-sh],
+[[#!/bin/sh
+: > cfg-sh-has-run
+exec sh "@S|@@"
+]])
+chmod a+x cfg-sh
+
+AT_CAPTURE_FILE([config.log])
+# Export CONFIG_SITE to /dev/null to avoid spurious diffs in expected
+# stdout/stderr.
+AT_CHECK([env CONFIG_SITE=/dev/null CONFIG_SHELL=./cfg-sh ./configure],
+ [0], [], [])
+# ./configure re-executed itself.
+AT_CHECK([test -f cfg-sh-has-run], [0])
+# And did that not to cause extra execution of later commands.
+AT_CHECK([cat quux], [0], [foobar
+], [])
+
+rm -f quux cfg-sh*
+AT_CLEANUP
+
+
+## ------------------- ##
+## AS_WARN, AS_ERROR. ##
+## ------------------- ##
+
+AT_SETUP([AS@&t@_WARN and AS@&t@_ERROR])
+AT_KEYWORDS([m4sh])
+
+dnl without logging
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+AS_WARN([*watch out*])dnl
+
+if test x"$die" != x; then
+ AS_ERROR([you're dead])dnl
+
+ AS_ERROR([really])dnl
+
+fi
+echo got here
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[got here
+]], [[script: WARNING: *watch out*
+]])
+AT_CHECK([die=: $CONFIG_SHELL ./script], [1],
+[], [[script: WARNING: *watch out*
+script: error: you're dead
+]])
+
+dnl with logging
+rm script
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+m4_define([gone], [AS_ERROR([really])])
+m4_define([AS_MESSAGE_LOG_FD], [5])
+exec AS_MESSAGE_LOG_FD>log.txt
+AS_WARN([*watch out*])dnl
+
+if test x"$die" != x; then
+ AS_ERROR([you're dead])dnl
+
+ AS_ERROR([really])dnl
+
+fi
+echo got here
+exec AS_MESSAGE_LOG_FD>&-
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[got here
+]], [[script: WARNING: *watch out*
+]])
+AT_CHECK([[grep 'script:[0-9]*: WARNING: \*watch out\*' log.txt]], [], [ignore])
+AT_CHECK([die=: $CONFIG_SHELL ./script], [1],
+[], [[script: WARNING: *watch out*
+script: error: you're dead
+]])
+AT_CHECK([[grep 'script:[0-9]*: WARNING: \*watch out\*' log.txt]], [], [ignore])
+AT_CHECK([[grep 'script:[0-9]*: error: you'\''re dead' log.txt]], [], [ignore])
+
+AT_CLEANUP
+
+## ---------------- ##
+## LINENO support. ##
+## ---------------- ##
+
+AT_SETUP([LINENO])
+AT_KEYWORDS([m4sh])
+
+# We cannot unset LINENO with Zsh, yet this test case relies on
+# unsetting LINENO to compare its result when (i) LINENO is supported
+# and when (ii) it is not.
+# So just skip if the shell is ZSH.
+AT_CHECK([test -n "${ZSH_VERSION+set}" && exit 77], ignore)
+
+# AT_DATA_LINENO(FILE-NAME,
+# UNSET-LINENO = true | false, COUNTER, COUNTER-RE)
+# ----------------------------------------------------------------
+# Produce the FILE-NAME M4sh script which uses the COUNTER LINENO or
+# _oline_, which we can recognized via COUNTER-RE. Unset LINENO is
+# UNSET-LINENO.
+#
+# Use COUNTER, COUNTER-RE = [__LINENO__], [LINENO]
+# or = [__OLINE__], [_oline__]
+#
+# instead of the obvious $LINENO and __oline__, because they would
+# be replaced in the test suite itself, even before creating these
+# scripts. For the same reason, grep for LINENO and _oline__ (sic).
+#
+# UNSET-LINENO is a shell condition to make sure the scripts have the
+# same number of lines in the output, so that their outputs be identical.
+m4_define([AT_DATA_LINENO],
+[AT_DATA([$1.tas],
+[[AS@&t@_INIT
+m4@&t@_divert_text([], [
+if $2; then
+ AS@&t@_UNSET([LINENO])
+fi
+])
+AS@&t@_LINENO_PREPARE
+echo "Line: $3"
+grep 'Line: .*$4' "$[0]" >/dev/null ||
+ AS@&t@_ERROR([cannot find original script])
+exit 0
+]])
+# If occurrences of $LINENO or __@&t@oline__ were wanted, create them.
+sed 's/__LINENO__/$''LINENO/g;s/__OLINE__/__''oline__/g' $1.tas >$1.as
+AT_CHECK([autom4te -l m4sh $1.as -o $1])
+])# AT_DATA_LINENO
+
+# `_oline_', once processed and ran, produces our reference.
+# We check that we find ourselves by looking at a string which is
+# available only in the original script: `_oline_'.
+AT_DATA_LINENO([reference], [false], [__OLINE__], [_oline__])
+AT_CHECK([./reference], 0, [stdout])
+
+# The reference:
+mv stdout expout
+
+# Now using a maybe-functioning LINENO, with different call conventions.
+# Be sure to be out of the PATH.
+AT_CHECK([mkdir test || exit 77])
+
+AT_DATA_LINENO([test/test-1], [false], [__LINENO__], [LINENO])
+AT_CHECK([./test/test-1], 0, [expout])
+AT_CHECK([(PATH=test$PATH_SEPARATOR$PATH; export PATH; exec test-1)],
+ 0, [expout])
+AT_CHECK([sh ./test/test-1], 0, [expout])
+
+# Now using a disabled LINENO, with different call conventions.
+AT_DATA_LINENO([test/test-2], [true], [__LINENO__], [LINENO])
+AT_CHECK([./test/test-2], 0, [expout])
+AT_CHECK([(PATH=test$PATH_SEPARATOR$PATH; export PATH; exec test-2)],
+ 0, [expout])
+AT_CHECK([sh ./test/test-2], 0, [expout])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## LINENO stack support. ##
+## ---------------------- ##
+
+AT_SETUP([LINENO stack])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+AS_LINENO_PUSH([9999])
+test $as_lineno = 9999 || AS_ERROR([bad as_lineno at depth 1])
+AS_LINENO_PUSH([8888])
+test $as_lineno = 9999 || AS_ERROR([bad as_lineno at depth 2])
+AS_LINENO_POP
+test $as_lineno = 9999 || AS_ERROR([bad as_lineno at depth 1])
+AS_LINENO_POP
+test x${as_lineno+set} = xset && AS_ERROR([as_lineno set at depth 0])
+
+AS_EXIT([0])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## -------- ##
+## AS_BOX. ##
+## -------- ##
+
+# Output a framed one-line message.
+AT_SETUP([AS@&t@_BOX])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+echo
+AS_BOX([Send a simple message, to foobar@example.com])
+AS_BOX([Send a simple message, to foobar@example.com], [$])
+m4_define([msg], [$complex])
+complex='Not quite as simple |$[1]'
+AS_BOX([msg])
+AS_BOX([msg], [,])
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([sed -n '/ -\{44\} /,/ -\{44\} /p' script ]dnl
+[| sed '1 s/.*## -/## -/; 3 s/- ##.*/- ##/'], [],
+[[## -------------------------------------------- ##
+## Send a simple message, to foobar@example.com ##
+## -------------------------------------------- ##
+]])
+
+AT_CHECK([$CONFIG_SHELL ./script], [], [[
+## -------------------------------------------- ##
+## Send a simple message, to foobar@example.com ##
+## -------------------------------------------- ##
+## $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##
+## Send a simple message, to foobar@example.com ##
+## $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ##
+## ----------------------- ##
+## Not quite as simple |$1 ##
+## ----------------------- ##
+## ,,,,,,,,,,,,,,,,,,,,,,, ##
+## Not quite as simple |$1 ##
+## ,,,,,,,,,,,,,,,,,,,,,,, ##
+]])
+
+AT_CLEANUP
+
+
+# Strip path from file.
+AT_SETUP([AS@&t@_BASENAME])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+m4_define([BASENAME_TEST],
+[base=`AS_BASENAME([$1])`
+test "$base" = "$2" ||
+ echo "basename($1) = $base instead of $2" >&2
+
+base=`_AS_BASENAME_SED([$1])`
+test "$base" = "$2" ||
+ echo "basename_sed($1) = $base instead of $2" >&2])
+
+BASENAME_TEST([//1], [1])
+BASENAME_TEST([/1], [1])
+BASENAME_TEST([./1], [1])
+BASENAME_TEST([../../2], [2])
+BASENAME_TEST([//1/], [1])
+BASENAME_TEST([/1/], [1])
+BASENAME_TEST([./1/], [1])
+BASENAME_TEST([../../2], [2])
+BASENAME_TEST([//1/3], [3])
+BASENAME_TEST([/1/3], [3])
+BASENAME_TEST([./1/3], [3])
+BASENAME_TEST([../../2/3], [3])
+BASENAME_TEST([//1/3///], [3])
+BASENAME_TEST([/1/3///], [3])
+BASENAME_TEST([./1/3///], [3])
+BASENAME_TEST([../../2/3///], [3])
+BASENAME_TEST([//1//3/], [3])
+BASENAME_TEST([/1//3/], [3])
+BASENAME_TEST([./1//3/], [3])
+BASENAME_TEST([a.c], [a.c])
+BASENAME_TEST([a.c/], [a.c])
+BASENAME_TEST([/a.c/], [a.c])
+BASENAME_TEST([/1/a.c], [a.c])
+BASENAME_TEST([/1/a.c/], [a.c])
+BASENAME_TEST([/1/../a.c], [a.c])
+BASENAME_TEST([/1/../a.c/], [a.c])
+BASENAME_TEST([./1/a.c], [a.c])
+BASENAME_TEST([./1/a.c/], [a.c])
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## ------------ ##
+## AS_DIRNAME. ##
+## ------------ ##
+
+# Strip filename component.
+AT_SETUP([AS@&t@_DIRNAME])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+# The EXPR variant is allowed to fail if `expr' was considered as too
+# weak for us, in which case `as_expr=false'.
+m4_define([DIRNAME_TEST],
+[dir=`AS_DIRNAME([$1])`
+test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") ||
+ echo "dirname($1) = $dir instead of $2" >&2
+
+if test "$as_expr" != false; then
+ dir=`_AS_DIRNAME_EXPR([$1])`
+ test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") ||
+ echo "dirname_expr($1) = $dir instead of $2" >&2
+fi
+
+dir=`_AS_DIRNAME_SED([$1])`
+test "$dir" = "$2" || (test -n "$3" && test "$dir" = "$3") ||
+ echo "dirname_sed($1) = $dir instead of $2" >&2])
+
+DIRNAME_TEST([/], [/])
+DIRNAME_TEST([//], [//], [/])
+DIRNAME_TEST([///], [/])
+DIRNAME_TEST([//1], [//], [/])
+DIRNAME_TEST([/1], [/])
+DIRNAME_TEST([./1], [.])
+DIRNAME_TEST([../../2], [../..])
+DIRNAME_TEST([//1/], [//], [/])
+DIRNAME_TEST([/1/], [/])
+DIRNAME_TEST([./1/], [.])
+DIRNAME_TEST([../../2], [../..])
+DIRNAME_TEST([//1/3], [//1])
+DIRNAME_TEST([/1/3], [/1])
+DIRNAME_TEST([./1/3], [./1])
+DIRNAME_TEST([../../2/3], [../../2])
+DIRNAME_TEST([//1/3///], [//1])
+DIRNAME_TEST([/1/3///], [/1])
+DIRNAME_TEST([./1/3///], [./1])
+DIRNAME_TEST([../../2/3///], [../../2])
+DIRNAME_TEST([//1//3/], [//1])
+DIRNAME_TEST([/1//3/], [/1])
+DIRNAME_TEST([./1//3/], [./1])
+DIRNAME_TEST([../../2//3/], [../../2])
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## ---------------- ##
+## AS_SET_CATFILE. ##
+## ---------------- ##
+
+AT_SETUP([AS@&t@_SET_CATFILE])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+# CATFILE_TEST(DIR, FILE, EXPECTED)
+m4_define([CATFILE_TEST],
+[# AS_SET_CATFILE works and can be used in a compound list.
+if AS_SET_CATFILE([var], [$1], [$2]) \
+ && test "$var" = $3; then :; else
+ echo "catfile($1, $2) = $var != $3" >&2
+fi
+# AS_SET_CATFILE can use non-literals in its arguments.
+varname=var2
+dirpart=$1
+filepart=$2
+if AS_SET_CATFILE([$varname], [$dirpart], [$filepart]) \
+ && test "$var2" = $3; then :; else
+ echo "catfile($dirpart, $filepart) = $var2 != $3" >&2
+fi
+])
+
+CATFILE_TEST([dir], [file], [dir/file])
+CATFILE_TEST([.], [file], [file])
+CATFILE_TEST([dir], [.], [dir])
+CATFILE_TEST([dir], [/abs/file], [/abs/file])
+CATFILE_TEST([dir], [C:/abs/file], [C:/abs/file])
+CATFILE_TEST(["dir name"], ['file name'], ['dir name/file name'])
+
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## --------- ##
+## AS_ECHO. ##
+## --------- ##
+
+# Print literal strings, with/without newline.
+AT_SETUP([AS@&t@_ECHO and AS@&t@_ECHO_N])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+m4_define([ECHO_TEST],
+[echo=`AS_ECHO(['$1'])`
+test "X$echo" = 'X$1' ||
+ echo "AS@&t@_ECHO('"'$1'"') outputs '$echo'" >&2
+
+echo=`AS_ECHO_N(['$1'])`
+test "X$echo" = 'X$1' ||
+ echo "AS@&t@_ECHO_N('"'$1'"') outputs '$echo'" >&2])
+
+ECHO_TEST([-])
+ECHO_TEST([--])
+ECHO_TEST([---...---])
+ECHO_TEST([ ])
+ECHO_TEST([-e])
+ECHO_TEST([-E])
+ECHO_TEST([-n])
+ECHO_TEST([-n -n])
+ECHO_TEST([-e -n])
+ECHO_TEST([ab\ncd])
+ECHO_TEST([abcd\c])
+ECHO_TEST([\a\b\c\f\n\r\t\v\"\])
+ECHO_TEST([ab
+cd
+e])
+ECHO_TEST([
+ ])
+ECHO_TEST([
+\c])
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+
+## ----------------- ##
+## AS_EXECUTABLE_P. ##
+## ----------------- ##
+
+# Check for executable regular files.
+AT_SETUP([AS@&t@_EXECUTABLE_P])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+if AS_EXECUTABLE_P([/]); then
+ echo fail
+else
+ echo 1
+fi
+cat > foo.sh <<\EOF || AS_EXIT([1])
+#!/bin/sh
+exit 0
+EOF
+# File systems like FAT tend to fake executable permissions on all files.
+# At this point, foo.sh should be executable iff permissions are faked.
+AS_EXECUTABLE_P([foo.sh])
+st1=$?
+(./foo.sh) >/dev/null 2>&1
+st2=$?
+case $st1:$st2 in
+ *[[1-9]]*:*[[1-9]]* | 0:0 ) echo 2 ;;
+ *) echo "fail ($st1:$st2)" ;;
+esac
+# Now things better be executable
+chmod a+x foo.sh || AS_EXIT([2])
+mkdir 'two spaces' || AS_EXIT([3])
+'two spaces'/../foo.sh || AS_EXIT([4])
+if AS_EXECUTABLE_P(["two spaces/../foo.sh"]); then
+ echo 3
+else
+ echo fail
+fi
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[1
+2
+3
+]])
+
+AT_CLEANUP
+
+
+
+## --------- ##
+## AS_EXIT. ##
+## --------- ##
+
+# Exit scripts with given status.
+AT_SETUP([AS@&t@_EXIT])
+AT_KEYWORDS([m4sh AS@&t@_SET_STATUS])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+test x${1} = xa && AS_EXIT
+test x${1} = xb && AS_EXIT([${2}])
+test x${1} = xc && { AS_SET_STATUS([${2}]); AS_EXIT; }
+test x${1} = xd && trap 's=$?; echo $s; AS_EXIT([$s])' 0
+test x${2} = xe && set -e
+test $[#] -gt 0 || AS_EXIT
+AS_SET_STATUS([3])
+dnl Solaris /bin/sh 'set -e' doesn't react to failed function calls
+test x${2} = xe \
+ && { echo 'skipping rest of test: set -e support is lousy'; exit 77; }
+AS_SET_STATUS([4])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [1])
+AT_CHECK([$CONFIG_SHELL ./script ''], [4])
+AT_CHECK([$CONFIG_SHELL ./script a], [0])
+AT_CHECK([$CONFIG_SHELL ./script b], [0])
+AT_CHECK([$CONFIG_SHELL ./script b 0], [0])
+AT_CHECK([$CONFIG_SHELL ./script b 2], [2])
+AT_CHECK([$CONFIG_SHELL ./script c 0], [0])
+AT_CHECK([$CONFIG_SHELL ./script c 2], [2])
+AT_CHECK([$CONFIG_SHELL ./script d], [4], [[4
+]])
+dnl If we got to this point without a FAIL, then AS_EXIT at least works.
+dnl The rest of this test relies on semi-decent 'set -e' support, even
+dnl though m4sh in general should not try to rely on it because of
+dnl portability nightmares on what constructs are considered errors across
+dnl various shells; therefore, an overall SKIP result is desirable on
+dnl broken shells like Solaris /bin/sh.
+AT_CHECK([$CONFIG_SHELL ./script '' e], [3])
+AT_CHECK([$CONFIG_SHELL ./script d e], [3], [stdout])
+dnl NetBSD sh fails to output on stderr here.
+AT_CHECK([grep 3 stdout || exit 77], [], [ignore])
+
+AT_CLEANUP
+
+
+
+## ------------ ##
+## AS_MKDIR_P. ##
+## ------------ ##
+
+# Build nested dirs.
+AT_SETUP([AS@&t@_MKDIR_P])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+pwd=`pwd`
+set -e
+# Absolute
+AS_MKDIR_P(["$pwd/1/2/3/4/5/6"])
+test -d "$pwd/1/2/3/4/5/6" ||
+ AS_ERROR([$pwd/1/2/3/4/5/6 has not been properly created])
+# Relative
+AS_MKDIR_P(["a/b/c/d/e/f"])
+test -d a/b/c/d/e/f ||
+ AS_ERROR([a/b/c/d/e/f has not been properly created])
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+
+
+## -------------------- ##
+## AS_VERSION_COMPARE. ##
+## -------------------- ##
+
+# Three-way version comparison.
+AT_SETUP([AS@&t@_VERSION_COMPARE])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+m4_define([VERSION_COMPARE_TEST],
+[AS_VERSION_COMPARE([$1], [$3], [result='<'], [result='='], [result='>'])
+test "X$result" = "X$2" ||
+ AS_ERROR([version $1 $result $3; should be $1 $2 $3])
+m4_if([$1], <,
+[AS_VERSION_COMPARE([$3], [$1], [result='<'], [result='='], [result='>'])
+test "X$result" = "X>" ||
+ AS_ERROR([version $3 $result $1; should be $3 > $1])])])
+
+VERSION_COMPARE_TEST([], =, [])
+VERSION_COMPARE_TEST([1.0], =, [1.0])
+VERSION_COMPARE_TEST([alpha-1.0], =, [alpha-1.0])
+
+# These tests are taken from libc/string/tst-svc.expect.
+tst_svc_expect='
+ 000 001 00 00a 01 01a 0 0a 2.8 2.8-0.4 20 21 22 212 CP037 CP345 CP1257
+ foo foo-0.4 foo-0.4a foo-0.4b foo-0.5 foo-0.10.5 foo-3.01 foo-3.0
+ foo-3.0.0 foo-3.0.1 foo-3.2 foo-3.10 foo00 foo0
+'
+test1=''
+for test2 in $tst_svc_expect; do
+ VERSION_COMPARE_TEST([$test1], <, [$test2])
+ test1=$test2
+done
+
+AS_EXIT(0)
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+
+
+## ------- ##
+## as_me. ##
+## ------- ##
+
+AT_SETUP([as_me])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+AS_ME_PREPARE
+test "$as_me" = script || AS_ECHO([["incorrect value of \$as_me: $as_me"]])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+
+
+## ----------------------------- ##
+## Negated classes in globbing. ##
+## ----------------------------- ##
+
+# According to http://www.in-ulm.de/~mascheck/bourne/, all shells with
+# functions also support `[!...]'. But `[^...]' is not universally supported.
+
+AT_SETUP([Negated classes in globbing])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+case 'with!two!bangs' in
+ *[[!a-z]]*) ;;
+ *) AS_ERROR([[`*[!a-z]*' didn't match `with!two!bangs']]);;
+esac
+
+case without in
+ *[[!a-z]]*) AS_ERROR([[`*[!a-z]*' matched `without']]);;
+esac
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+## ---------------------------- ##
+## Null variable substitution. ##
+## ---------------------------- ##
+
+# According to http://www.in-ulm.de/~mascheck/bourne/, all shells with
+# functions also support `${a:-b}'.
+
+AT_SETUP([Null variable substitution])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+AS_UNSET([a])
+b=
+c=.
+case ${a:-x}${b:-y}${c:-z} in
+ xy.) ;;
+ *) exit 1 ;;
+esac
+case ${a-x}${b-y}${c-z} in
+ x.) ;;
+ *) exit 2 ;;
+esac
+
+case ${a+x}${b+y}${c+z} in
+ yz) ;;
+ *) exit 3 ;;
+esac
+case ${a:+x}${b:+y}${c:+z} in
+ z) ;;
+ *) exit 4 ;;
+esac
+
+case ${a=x}${b=y}${c=z} in
+ x.) ;;
+ *) exit 5 ;;
+esac
+AS_UNSET([a])
+case ${a:=x}${b:=y}${c:=z} in
+ xy.) ;;
+ *) exit 6 ;;
+esac
+case $a$b$c in
+ xy.) ;;
+ *) exit 7 ;;
+esac
+AS_UNSET([a])
+b=
+
+(: ${a?oops}; echo fail) 2>err && exit 8
+grep oops err >/dev/null || exit 9
+test "${b?oops}" = '' || exit 10
+test "${c?oops}" = . || exit 11
+(: ${a:?oops}; echo fail) 2>err && exit 12
+grep oops err >/dev/null || exit 13
+(: ${b:?oops}; echo fail) 2>err && exit 14
+grep oops err >/dev/null || exit 15
+test "${c:?oops}" = . || exit 16
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## Functions Support. ##
+## ------------------- ##
+
+# All m4sh scripts require function support.
+
+AT_SETUP([Functions Support])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+AS_LINENO_PREPARE
+
+func_return () {
+ (exit $1)
+}
+
+func_success () {
+ func_return 0
+}
+
+func_failure () {
+ func_return 1
+}
+
+if func_success; then
+ if func_failure; then
+ AS_ERROR([func_failure passed])
+ fi
+else
+ AS_ERROR([func_success failed])
+fi
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+
+
+## ------------------------------ ##
+## Functions and return Support. ##
+## ------------------------------ ##
+
+# All m4sh scripts require working return within functions.
+
+AT_SETUP([Functions and return Support])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+AS_LINENO_PREPARE
+
+func_success () {
+ return 0
+}
+
+func_failure () {
+ return 1
+}
+
+if func_success; then
+ if func_failure; then
+ AS_ERROR([func_failure passed])
+ fi
+else
+ AS_ERROR([func_success failed])
+fi
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## --------------------------- ##
+## Nested AS_REQUIRE_SHELL_FN. ##
+## --------------------------- ##
+
+# Hypothesis: M4sh expands nested AS_REQUIRE_SHELL_FN
+# separately.
+
+AT_SETUP([Nested AS@&t@_REQUIRE_SHELL_FN])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as], [[dnl
+m4_define([INIT], [oops])dnl
+AS_INIT
+
+m4_defun([TEST_FUNC2_BODY], [
+:
+])
+
+m4_defun([TEST_FUNC1_BODY], [
+AS_REQUIRE_SHELL_FN([test_func2], [], [TEST_FUNC2_BODY])
+:
+])
+
+AS_REQUIRE_SHELL_FN([test_func1], [], [TEST_FUNC1_BODY])
+test_func2
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## Nested AS_REQUIRE. ##
+## ------------------- ##
+
+# Hypothesis: M4sh expands the requirements of AS_REQUIRE in the
+# requested diversion, even if other AS_REQUIREs are interleaved.
+
+AT_SETUP([Nested AS@&t@_REQUIRE])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+
+m4_defun([in_fn_diversion], still_in_m4sh_init_fn=yes)
+m4_defun([not_in_fn_diversion], still_in_m4sh_init_fn=no)
+
+m4_defun([NESTED], [nested_require_in_fn_diversion=$still_in_m4sh_init_fn])
+
+m4_defun([OUTER], [AS_REQUIRE([NESTED])dnl
+outer_require_in_fn_diversion=$still_in_m4sh_init_fn])
+
+m4_defun([test_init], [
+AS_REQUIRE([in_fn_diversion], , [M4SH-INIT-FN])
+AS_REQUIRE([OUTER], , [M4SH-INIT-FN])
+AS_REQUIRE([not_in_fn_diversion], , [M4SH-INIT-FN])
+])
+
+test_init
+if test $outer_require_in_fn_diversion != yes; then AS_EXIT([1]); fi
+if test $nested_require_in_fn_diversion != no; then AS_EXIT([1]); fi
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## ------------------------------------ ##
+## AS_REQUIRE_SHELL_FN and m4_require. ##
+## ------------------------------------ ##
+
+# Hypothesis: M4sh expands the requirements of AS_REQUIRE_SHELL_FN
+# in M4SH-INIT-FN. This changed after Autoconf 2.63.
+
+AT_SETUP([AS@&t@_REQUIRE_SHELL_FN and m4@&t@_require])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+
+m4_defun([in_m4_sh_init], still_in_m4sh_init=yes)
+m4_defun([not_in_m4_sh_init], still_in_m4sh_init=no)
+
+m4_defun([error_if_emitted_in_m4sh_init], [
+ if test x$still_in_m4sh_init = xyes; then
+ AS_ERROR([requirement emitted in M4SH-INIT])
+ fi
+])
+
+m4_defun([TEST_FUNC_BODY], [
+m4_require([error_if_emitted_in_m4sh_init])
+: echo in shell function, with parameter = [$]1
+])
+
+
+m4_defun([test_init], [
+AS_REQUIRE([in_m4_sh_init], , [M4SH-INIT-FN])
+AS_REQUIRE_SHELL_FN([test_func], [], [TEST_FUNC_BODY])
+AS_REQUIRE([not_in_m4_sh_init])
+])
+
+test_init
+test_func parameter1
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## AS_HELP_STRING ##
+## -------------- ##
+
+AT_SETUP([AS@&t@_HELP_STRING])
+AT_KEYWORDS([m4sh m4@&t@_text_wrap m4@&t@_expand])
+
+AT_DATA_M4SH([script.as],
+[[AS_INIT
+
+echo "AS_HELP_STRING([--an-option],[some text])"
+echo "AS_HELP_STRING([--another-much-longer-option],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--fooT=barT], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@12345678901], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789012], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890123], [foo bar])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@12345678901],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789012],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890123],
+[some other text which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@12345678901],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@123456789012],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([--foo@<][:@=bar@:][>@1234567890123],
+[some other @<][:@ex@:][>@ which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]123456789]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]1234567890]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]12345678901]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]123456789012]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+echo "AS_HELP_STRING([[--foo[=bar]1234567890123]],
+[some other t[]t which should wrap at our default of 80 characters.])"
+m4_define([mac], [MACRO])dnl
+echo "AS_HELP_STRING([--mac], [mac])"
+echo "AS_HELP_STRING([--o1, --o2], [two
+options, one description])"
+echo "AS_HELP_STRING([[[--o3, --o4]]], [comma inside literal quoting])"
+echo "AS_HELP_STRING([--tune1], [check out the tuned formatting],
+[ ])"
+echo "AS_HELP_STRING([--tune2], [check out the tuned formatting],
+[12])"
+echo "AS_HELP_STRING([--tune3], [check out the tuned formatting],
+[], [40])"
+echo "AS_HELP_STRING([--tune4], [check out the tuned formatting],
+[12], [40])"
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [0],
+[[ --an-option some text
+ --another-much-longer-option
+ some other text which should wrap at our default of
+ 80 characters.
+ --fooT=barT foo bar
+ --foo[=bar] foo bar
+ --foo[=bar]123456789 foo bar
+ --foo[=bar]1234567890 foo bar
+ --foo[=bar]12345678901 foo bar
+ --foo[=bar]123456789012 foo bar
+ --foo[=bar]1234567890123
+ foo bar
+ --foo[=bar] some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789 some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890 some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar]12345678901 some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789012 some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890123
+ some other text which should wrap at our default of
+ 80 characters.
+ --foo[=bar] some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789 some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890 some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar]12345678901 some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789012 some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890123
+ some other [ex] which should wrap at our default of
+ 80 characters.
+ --foo[=bar] some other t[]t which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789 some other t[]t which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890 some other t[]t which should wrap at our default of
+ 80 characters.
+ --foo[=bar]12345678901 some other t[]t which should wrap at our default of
+ 80 characters.
+ --foo[=bar]123456789012 some other t[]t which should wrap at our default of
+ 80 characters.
+ --foo[=bar]1234567890123
+ some other t[]t which should wrap at our default of
+ 80 characters.
+ --MACRO mac
+ --o1, --o2 two options, one description
+ [--o3, --o4] comma inside literal quoting
+ --tune1 check out the tuned formatting
+ --tune2 check out the tuned formatting
+ --tune3 check out the
+ tuned
+ formatting
+ --tune4 check out the tuned
+ formatting
+]])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## AS_IF and AS_CASE. ##
+## ------------------- ##
+
+AT_SETUP([AS@&t@_IF and AS@&t@_CASE])
+AT_KEYWORDS([m4sh m4@&t@_map_args_pair])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+# Syntax checks: cope with empty arguments.
+AS_IF([:], [], [echo wrong])
+AS_IF([:], [echo one], [echo wrong])
+AS_IF([false], [echo wrong], [echo two])
+AS_IF([false], [echo wrong])
+# n-ary version
+AS_IF([false], [echo wrong],
+ [:], [echo three])
+AS_IF([false], [echo wrong],
+ [:], [echo four],
+ [echo wrong])
+AS_IF([false], [echo wrong],
+ [false], [echo wrong])
+AS_IF([false], [echo wrong],
+ [false], [echo wrong],
+ [echo five])
+AS_IF([false], [echo wrong],
+ [false], [echo wrong],
+ [:], [echo six],
+ [echo wrong])
+AS_CASE([foo])
+AS_CASE([foo], [echo seven])
+AS_CASE([foo],
+ [foo], [echo eight],
+ [echo wrong])
+AS_CASE([foo],
+ [foo], [echo nine],
+ [*], [echo wrong])
+AS_CASE([foo],
+ [bar], [echo wrong],
+ [foo], [echo ten],
+ [*], [echo wrong])
+
+# check for nesting, lists, and side effects, and quoting robustness
+empty=
+AS_IF([AS_IF([$empty], [echo eleven])]) && AS_CASE([foo]) && echo twelve
+rm -f file
+AS_IF([touch file; false]) && echo thirteen
+test -f file && echo fourteen
+rm -f file
+AS_CASE([`touch file; false`]) && test -f file && echo fifteen
+dnl The next line is badly underquoted; don't intentionally copy this style.
+AS_CASE([foo], [foo], m4_do(AS_CASE([bar], [bar], [echo sixteen])))
+dnl Handle blank arguments.
+AS_IF([false], [:], [ ]) && AS_CASE([foo], [foo], []
+) && echo seventeen
+m4_define([empty])AS_IF([:], [empty]
+) && AS_CASE([foo], [foo], [empty]) && echo eighteen
+dnl We can't handle AS_IF([false], [:], [empty]) unless m4_expand is
+dnl taught how to handle m4_require. The user is responsible for
+dnl avoiding the syntax error in that case.
+
+# check that require works correctly
+m4_for([n], 1, 9, [],
+[m4_defun([FOO]n, [foo]n[=]n)dnl
+m4_defun([BAR]n,
+ [m4_require([FOO]]n[)dnl
+bar]n[=]n)[]dnl
+])
+
+AS_IF([:], [BAR1])
+echo "foo1=$foo1 bar1=$bar1"
+AS_IF([:], [], [BAR2])
+echo "foo2=$foo2 bar2=$bar2"
+AS_IF([false], [BAR3])
+echo "foo3=$foo3 bar3=$bar3"
+AS_IF([false], [], [BAR4])
+echo "foo4=$foo4 bar4=$bar4"
+AS_CASE([x], [x], [BAR5])
+echo "foo5=$foo5 bar5=$bar5"
+AS_CASE([x], [y], [BAR6])
+echo "foo6=$foo6 bar6=$bar6"
+AS_CASE([x],
+ [x], [:],
+ [BAR7])
+echo "foo7=$foo7 bar7=$bar7"
+AS_CASE([x],
+ [y], [:],
+ [BAR8])
+echo "foo8=$foo8 bar8=$bar8"
+AS_CASE([x],
+ [y], [:],
+ [x], [BAR9])
+echo "foo9=$foo9 bar9=$bar9"
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [0], [[one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+ten
+eleven
+twelve
+thirteen
+fourteen
+fifteen
+sixteen
+seventeen
+eighteen
+foo1=1 bar1=1
+foo2=2 bar2=
+foo3=3 bar3=
+foo4=4 bar4=4
+foo5=5 bar5=5
+foo6=6 bar6=
+foo7=7 bar7=
+foo8=8 bar8=8
+foo9=9 bar9=9
+]])
+
+dnl stress test for large number of conditionals
+dnl too large, and we start tickling shell bugs
+m4_pushdef([limit], [1000])dnl
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+AS_IF(m4_shift(m4_for([i], [1], ]limit[, [], [, test $[1] = i, echo i])))
+AS_IF(m4_shift(m4_for([i], [1], ]limit[, [], [, test $[1] = i, echo i])),
+ [echo default])
+AS_CASE([$[1]]m4_for([i], [1], ]limit[, [], [, i, echo i]))
+AS_CASE([$[1]]m4_for([i], [1], ]limit[, [], [, i, echo i]), [echo default])
+]])
+
+dnl Add --force so autom4te doesn't think `script' is still up to date.
+AT_CHECK_M4SH([--force])
+AT_CHECK([$CONFIG_SHELL ./script 1], [0], [[1
+1
+1
+1
+]])
+AT_CHECK([$CONFIG_SHELL ./script limit], [0], [limit
+limit
+limit
+limit
+])
+AT_CHECK([$CONFIG_SHELL ./script default], [0], [[default
+default
+]])
+m4_popdef([limit])
+
+AT_CLEANUP
+
+
+## -------- ##
+## AS_FOR. ##
+## -------- ##
+
+AT_SETUP([AS@&t@_FOR])
+AT_KEYWORDS([m4sh])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+
+# Simple checks.
+AS_FOR([m4var], [shvar], [a],
+[echo "m4var $shvar"])
+AS_FOR([m4var], [shvar], [b c],
+[echo "m4var $shvar"])
+list='d e'
+AS_FOR([m4var], [shvar], [$list],
+[echo "m4var $shvar"])
+AS_FOR([m4var], [shvar], ["$list"],
+[echo "m4var $shvar"])
+AS_FOR([m4var], [shvar], ['$list'],
+[echo "m4var $shvar"])
+AS_FOR([m4var], [shvar], [\'],
+[echo "m4var $shvar"])
+
+# Syntax checks: cope with empty/blank arguments.
+set f g
+AS_FOR([], [shvar], [],
+[echo "m4_defn([]) $shvar"])
+rm -f file
+AS_FOR([], [shvar], [`touch file`])
+test -f file || exit 1
+AS_FOR([], [shvar], [], [ ])
+m4_define([empty])AS_FOR([], [shvar], [], [empty])
+
+# Check that break works.
+while :
+do
+ AS_FOR([m4var], [shvar], [h i],
+ [echo "m4var"; break 2])
+ exit 1
+done
+while :
+do
+ AS_FOR([m4var], [shvar], [j],
+ [echo "m4var"; break 2])
+ exit 1
+done
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [0], [[a a
+b b
+c c
+d d
+e e
+d e d e
+$list $list
+' '
+f f
+g g
+h
+j
+]])
+
+AT_CLEANUP
+
+
+## --------------- ##
+## AS_LITERAL_IF. ##
+## --------------- ##
+
+AT_SETUP([AS@&t@_LITERAL_IF])
+AT_KEYWORDS([m4sh AS@&t@_LITERAL_WORD_IF AS@&t@_LITERAL_HEREDOC_IF])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+echo AS_LITERAL_IF([lit], [ok], [ERR]) 1
+echo AS_LITERAL_IF([l-/.it], [ok], [ERR]) 2
+echo AS_LITERAL_IF([l''it], [ERR], [ok]) 3
+echo AS_LITERAL_IF([l$it], [ERR], [ok]) 4
+echo AS_LITERAL_IF([l$it], [ERR1], [ERR2], [ok]) 5
+echo AS_LITERAL_IF([l${it}], [ERR1], [ERR2], [ok]) 6
+echo AS_LITERAL_IF([l`case a in b) ;; esac`it], [ERR], [ok]) 7
+echo AS_LITERAL_IF([l`case a in b) ;; esac`it], [ERR1], [ok], [ERR2]) 8
+m4_define([mac], [l-/.it])
+echo AS_LITERAL_IF([mac], [ok], [ERR]) 9
+echo AS_LITERAL_IF([mac($, ``)], [ok], [ERR]) 10
+m4_define([mac], [l$it])
+echo AS_LITERAL_IF([mac], [ERR], [ok]) 11
+echo AS_LITERAL_IF([mac], [ERR1], [ERR2], [ok]) 12
+m4_define([mac], [l``it])
+echo AS_LITERAL_IF([mac], [ERR], [ok]) 13
+echo AS_LITERAL_IF([mac], [ERR1], [ok], [ERR2]) 14
+echo AS_LITERAL_IF([ a ][
+b], [ok], [ERR]) 15
+echo AS_LITERAL_WORD_IF([ a ][
+b], [ERR], [ok]) 16
+echo AS_LITERAL_HEREDOC_IF([ a ][
+b], [ok], [ERR]) 17
+echo AS_LITERAL_IF([(a)], [ERR], [ok]) 18
+echo AS_LITERAL_WORD_IF([(a)], [ERR], [ok]) 19
+echo AS_LITERAL_HEREDOC_IF([(a)], [ok], [ERR]) 20
+echo AS_LITERAL_IF([@S|@a], [ERR], [ok]) 21
+echo AS_LITERAL_WORD_IF([@S|@a], [ERR], [ok]) 22
+echo AS_LITERAL_HEREDOC_IF([@S|@a], [ERR], [ok]) 23
+echo AS_LITERAL_IF([${a+b}], [ERR1], [ok], [ERR2]) 24
+echo AS_LITERAL_IF([${a=b}], [ERR1], [ok], [ERR2]) 25
+echo AS_LITERAL_IF([a+b], [ok], [ERR1], [ERR2]) 26
+echo AS_LITERAL_IF([a=b], [ok], [ERR1], [ERR2]) 27
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+ok 15
+ok 16
+ok 17
+ok 18
+ok 19
+ok 20
+ok 21
+ok 22
+ok 23
+ok 24
+ok 25
+ok 26
+ok 27
+]])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## AS_TR_SH, AS_TR_CPP. ##
+## --------------------- ##
+
+AT_SETUP([AS@&t@_TR_SH and AS@&t@_TR_CPP])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+m4_define([abc], [hI])m4_define([ABC], [Hi])
+m4_define([hi], [oops])m4_define([HI], [OOPS])
+echo AS_TR_SH(abc) AS_TR_SH(aBc) AS_TR_SH(ABC)
+echo AS_TR_SH([abc]) AS_TR_SH([aBc]) AS_TR_SH([ABC])
+echo AS_TR_SH([[abc]]) AS_TR_SH([[aBc]]) AS_TR_SH([[ABC]])
+echo AS_TR_CPP(abc) AS_TR_CPP(aBc) AS_TR_CPP(ABC)
+echo AS_TR_CPP([abc]) AS_TR_CPP([aBc]) AS_TR_CPP([ABC])
+echo AS_TR_CPP([[abc]]) AS_TR_CPP([[aBc]]) AS_TR_CPP([[ABC]])
+echo ===
+[var=abc vAr=aBc VAR=ABC]
+echo AS_TR_SH($var) AS_TR_SH($vAr) AS_TR_SH($VAR)
+echo AS_TR_SH([$var]) AS_TR_SH([$vAr]) AS_TR_SH([$VAR])
+echo AS_TR_SH([[$var]]) AS_TR_SH([[$vAr]]) AS_TR_SH([[$VAR]])
+echo AS_TR_CPP($var) AS_TR_CPP($vAr) AS_TR_CPP($VAR)
+echo AS_TR_CPP([$var]) AS_TR_CPP([$vAr]) AS_TR_CPP([$VAR])
+echo AS_TR_CPP([[$var]]) AS_TR_CPP([[$vAr]]) AS_TR_CPP([[$VAR]])
+echo ===
+echo AS_TR_SH(`echo abc`) AS_TR_SH(`echo aBc`) AS_TR_SH(`echo ABC`)
+echo AS_TR_SH([`echo abc`]) AS_TR_SH([`echo aBc`]) AS_TR_SH([`echo ABC`])
+echo AS_TR_SH([[`echo abc`]]) AS_TR_SH([[`echo aBc`]]) AS_TR_SH([[`echo ABC`]])
+echo AS_TR_CPP(`echo abc`) AS_TR_CPP(`echo aBc`) AS_TR_CPP(`echo ABC`)
+echo AS_TR_CPP([`echo abc`]) AS_TR_CPP([`echo aBc`]) AS_TR_CPP([`echo ABC`])
+echo AS_TR_CPP([[`echo abc`]]) AS_TR_CPP([[`echo aBc`]]) AS_TR_CPP([[`echo ABC`]])
+echo ===
+# start here
+echo AS_TR_SH([a.b/c+*-=])
+echo AS_TR_CPP([a.b/c+*-=])
+var=a.b/c+*-=
+echo AS_TR_SH([$var])
+echo AS_TR_CPP([$var])
+m4_define([macro], [a.b/c+*-=])
+echo AS_TR_SH([macro])
+echo AS_TR_CPP([macro])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[hI aBc Hi
+hI aBc Hi
+abc aBc ABC
+HI ABC HI
+HI ABC HI
+ABC ABC ABC
+===
+abc aBc ABC
+abc aBc ABC
+abc aBc ABC
+ABC ABC ABC
+ABC ABC ABC
+ABC ABC ABC
+===
+hI aBc Hi
+hI aBc Hi
+abc aBc ABC
+HI ABC HI
+HI ABC HI
+ABC ABC ABC
+===
+a_b_cpp__
+A_B_C_P__
+a_b_cpp__
+A_B_C_P__
+a_b_cpp__
+A_B_C_P__
+]])
+
+dnl Check that of the last 6 macros, only 2 needed command substitution.
+dnl This test abuses our knowledge of m4sh internals a bit; oh well.
+AT_CHECK([tab=' ' # a single ASCII tab character
+sed -n '/start here/,$ {
+/`.*`/p
+}' script | wc -l | sed "s/[[ $tab]]//g" ], [], [[2
+]])
+
+AT_CLEANUP
+
+
+## ---------- ##
+## AS_VAR_*. ##
+## ---------- ##
+
+AT_SETUP([AS@&t@_VAR basics])
+AT_KEYWORDS([m4sh AS@&t@_VAR_COPY AS@&t@_VAR_SET AS@&t@_VAR_GET])
+AT_KEYWORDS([AS@&t@_VAR_TEST_SET AS@&t@_VAR_SET_IF AS@&t@_VAR_IF])
+AT_KEYWORDS([AS@&t@_VAR_PUSHDEF AS@&t@_VAR_POPDEF])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+ m4_define([with], [WITH])
+# Literals.
+dnl AS_VAR_SET_IF also covers AS_VAR_TEST_SET
+AS_VAR_SET_IF([foo], [echo oops]) && echo ok
+AS_VAR_IF([foo], [], [echo ok], [echo oops])
+foo=
+AS_VAR_SET_IF([foo], [echo ok])
+AS_VAR_SET([foo], ['\a "weird" `value` with; $fun '\''characters
+']) # 'font-lock
+AS_VAR_COPY([bar], [foo])
+AS_ECHO(["$bar-"])
+AS_ECHO(["AS_VAR_GET([foo])-"])
+AS_VAR_SET_IF([foo], [echo ok], [echo oops])
+AS_VAR_IF([foo], [string], [echo oops]) && echo ok
+AS_VAR_PUSHDEF([tmp], [foo])
+AS_VAR_IF([tmp], ['\a "weird" `value` with; $fun '\''characters
+'], [echo ok], [echo oops]) # 'font-lock
+AS_VAR_POPDEF([tmp])
+m4_ifdef([tmp], [echo oops])
+
+# Indirects via shell vars.
+echo '===='
+num=1
+AS_VAR_SET_IF([foo$num], [echo oops]) && echo ok
+AS_VAR_IF([foo$num], [], [echo ok], [echo oops])
+foo1=
+AS_VAR_SET_IF([foo$num], [echo ok])
+AS_VAR_SET([foo$num], ['\a "weird" `value` with; $fun '\''characters
+']) # 'font-lock
+AS_VAR_COPY([bar], [foo$num])
+num=2
+AS_VAR_COPY([foo$num], [bar])
+AS_ECHO(["$foo2-"])
+AS_ECHO(["AS_VAR_GET([foo$num])-"])
+AS_VAR_SET_IF([foo$num], [echo ok], [echo oops])
+AS_VAR_IF([foo$num], [string], [echo oops]) && echo ok
+AS_VAR_PUSHDEF([tmp], [foo$num])
+AS_VAR_IF([tmp], ['\a "weird" `value` with; $fun '\''characters
+'], [echo ok], [echo oops]) # 'font-lock
+AS_VAR_POPDEF([tmp])
+m4_ifdef([tmp], [echo oops])
+
+# Indirects via command substitution.
+echo '===='
+AS_VAR_SET_IF([`echo foo3`], [echo oops]) && echo ok
+AS_VAR_IF([`echo foo3`], [], [echo ok], [echo oops])
+foo3=
+AS_VAR_SET_IF([`echo foo3`], [echo ok])
+AS_VAR_SET([`echo foo3`], ['\a "weird" `value` with; $fun '\''characters
+']) # 'font-lock
+AS_VAR_COPY([bar], [`echo foo3`])
+num=2
+AS_VAR_COPY([`echo foo4`], [bar])
+AS_ECHO(["$foo4-"])
+AS_ECHO(["AS_VAR_GET([`echo foo4`])-"])
+AS_VAR_SET_IF([`echo foo4`], [echo ok], [echo oops])
+AS_VAR_IF([`echo foo4`], [string], [echo oops]) && echo ok
+AS_VAR_PUSHDEF([tmp], [`echo foo4`])
+AS_VAR_IF([tmp], ['\a "weird" `value` with; $fun '\''characters
+'], [echo ok], [echo oops]) # 'font-lock
+AS_VAR_POPDEF([tmp])
+m4_ifdef([tmp], [echo oops])
+:
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [], [[ok
+ok
+ok
+\a "weird" `value` WITH; $fun 'characters
+-
+\a "weird" `value` WITH; $fun 'characters
+-
+ok
+ok
+ok
+====
+ok
+ok
+ok
+\a "weird" `value` WITH; $fun 'characters
+-
+\a "weird" `value` WITH; $fun 'characters-
+ok
+ok
+ok
+====
+ok
+ok
+ok
+\a "weird" `value` WITH; $fun 'characters
+-
+\a "weird" `value` WITH; $fun 'characters-
+ok
+ok
+ok
+]])
+
+AT_CLEANUP
+
+
+## --------------- ##
+## AS_VAR_APPEND. ##
+## --------------- ##
+
+AT_SETUP([AS@&t@_VAR_APPEND])
+AT_KEYWORDS([m4sh AS@&t@_VAR])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+# Literals.
+AS_VAR_APPEND([foo], ["hello, "])
+AS_VAR_APPEND([foo], [world])
+echo "$foo"
+# Indirects via shell vars.
+num=1
+AS_VAR_APPEND([foo$num], ['hello, '])
+AS_VAR_APPEND([foo$num], [`echo "world"`])
+echo "$foo1"
+# Indirects via command substitution.
+h=hello w=', world'
+AS_VAR_APPEND([`echo foo2`], [${h}])
+AS_VAR_APPEND([`echo foo2`], ["$w"])
+echo "$foo2"
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[hello, world
+hello, world
+hello, world
+]])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## AS_VAR_ARITH. ##
+## -------------- ##
+
+AT_SETUP([AS@&t@_VAR_ARITH])
+AT_KEYWORDS([m4sh AS@&t@_VAR])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+# Literals.
+AS_VAR_ARITH([foo], [1 + 1])
+echo "$foo"
+# Indirects via shell vars.
+num=1
+AS_VAR_ARITH([foo$num], [\( 2 + 3 \) \* 4])
+echo "$foo1"
+# Indirects via command substitution.
+AS_VAR_ARITH([`echo foo2`], [0 + -2 + $foo1 / 2])
+echo "$foo2"
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [],
+[[2
+20
+8
+]])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## AS_INIT cleanup. ##
+## ----------------- ##
+
+AT_SETUP([AS@&t@_INIT cleanup])
+AT_KEYWORDS([m4sh m4@&t@_wrap m4@&t@_wrap_lifo])
+
+AT_DATA_M4SH([script.as], [[dnl
+dnl Registered before AS_INIT's cleanups
+m4_wrap([echo cleanup 1
+])
+m4_pushdef([_AS_SHELL_FN_SPY])dnl neutralize the spy, we don't care about it
+AS_INIT
+dnl Registered after AS_INIT's cleanups, thus goes to KILL diversion
+m4_wrap([echo cleanup 2
+dnl However, nested wraps and diversions can still be used
+dnl Also, test wrapping text that looks like parameter reference
+m4_wrap([echo cleanup 3
+m4_divert_text([M4SH-INIT], [m4_define([foo], [$1])dnl
+echo prep foo([4])
+])])])
+dnl Registered before AS_INIT's cleanups
+m4_wrap_lifo([echo cleanup 5
+])
+echo body
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [], [[prep 4
+body
+cleanup 5
+cleanup 1
+]])
+
+AT_CLEANUP
+
+
+## ------------------- ##
+## AS_INIT_GENERATED. ##
+## ------------------- ##
+
+AT_SETUP([AS@&t@_INIT_GENERATED])
+AT_KEYWORDS([AS@&t@_MESSAGE AS@&t@_MESSAGE_LOG_FD])
+
+dnl First run, no logging, tests shell selection
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+AS_INIT_GENERATED([child], [echo hello from child])
+cat >>child <<\EOF
+AS_ECHO(["SHELL=$SHELL"])
+EOF
+echo hello from parent
+AS_ECHO(["SHELL=$SHELL"])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [0], [stdout])
+AT_CHECK([grep 'SHELL=.' stdout], [0], [ignore])
+sed s/parent/child/ <stdout >expout
+AT_CHECK([./child], [0], [expout])
+SHELL=/bogus
+export SHELL
+cp stdout expout
+mv child child.bak
+AT_CHECK([$CONFIG_SHELL ./script], [0], [expout])
+AT_CHECK([cmp child child.bak])
+AT_CHECK([grep 'SHELL=.' stdout], [0], [ignore])
+sed s/parent/child/ <stdout >expout
+AT_CHECK([./child], [0], [expout])
+
+
+dnl Second run, with logging from parent and child, tests fd handling
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+child=${1-child}
+m4_define([AS_MESSAGE_LOG_FD], [5])
+exec AS_MESSAGE_LOG_FD>log
+AS_INIT_GENERATED([$child], [echo hello1 from $child]) || AS_EXIT([1])
+cat >>$child <<\EOF
+m4_pushdef([AS_MESSAGE_LOG_FD])
+AS_MESSAGE([hello2 from ${child}child])
+m4_popdef([AS_MESSAGE_LOG_FD])
+exec AS_MESSAGE_LOG_FD>>log
+AS_MESSAGE([hello3 from child])
+EOF
+AS_MESSAGE([hello from parent])
+dnl close log in parent before spawning child, for mingw
+exec AS_MESSAGE_LOG_FD>&-
+./$child
+]])
+
+rm -f script
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [0], [[script: hello from parent
+hello1 from child
+child: hello2 from child
+child: hello3 from child
+]])
+AT_CHECK([[sed 's,:[0-9][0-9]*:,:0:,' log]], [0],
+[[script:0: hello from parent
+child:0: hello3 from child
+]])
+
+# Force write error creating a file on stdout
+if test -w /dev/full && test -c /dev/full; then
+ AT_CHECK([$CONFIG_SHELL ./script /dev/full], [1], [ignore], [ignore])
+fi
+
+AT_CLEANUP
+
+
+## --------------- ##
+## AS_MESSAGE_FD. ##
+## --------------- ##
+
+AT_SETUP([AS@&t@_MESSAGE_FD])
+AT_KEYWORDS([AS@&t@_MESSAGE AS@&t@_MESSAGE_LOG_FD AS@&t_ORIGINAL_STDIN_FD])
+AT_KEYWORDS([AS@&t@_LINENO_PUSH])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+m4_define([AS_ORIGINAL_STDIN_FD], [5])
+m4_define([AS_MESSAGE_LOG_FD], [6])
+m4_define([AS_MESSAGE_FD], [7])
+exec AS_ORIGINAL_STDIN_FD<&0 </dev/null AS_MESSAGE_LOG_FD>log
+if test $[#] -gt 0; then
+ exec AS_MESSAGE_FD>/dev/null
+else
+ exec AS_MESSAGE_FD>&1
+fi
+AS_LINENO_PUSH([100])
+cat # tests that stdin is neutralized
+AS_MESSAGE([hello world])
+cat <&AS_ORIGINAL_STDIN_FD
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([echo goodbye | $CONFIG_SHELL ./script], [0],
+[[script: hello world
+goodbye
+]])
+AT_CHECK([cat log], [0],
+[[script:100: hello world
+]])
+rm log
+AT_CHECK([echo goodbye | $CONFIG_SHELL ./script silent], [0],
+[[goodbye
+]])
+AT_CHECK([cat log], [0],
+[[script:100: hello world
+]])
+
+AT_CLEANUP
+
+
+## --------------- ##
+## _AS_CLEAN_DIR. ##
+## --------------- ##
+
+AT_SETUP([_AS@&t@_CLEAN_DIR])
+
+dnl ensure that we can erase all files in a directory. Note that
+dnl _AS_CLEAN_DIR needs three globs to catch all these files.
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+# Unwritable subdirectories are common during 'make distcheck'.
+mkdir sub sub/unwritable || AS_ERROR([failed to mkdir])
+touch sub/unwritable/file || AS_ERROR([failed to touch])
+chmod a-wx sub/unwritable || AS_ERROR([failed to chmod])
+# Cygwin 1.5 can't touch 'sub/...', so make that file optional.
+touch sub/a sub/aa sub/aaa sub/.a sub/..a sub/.aa \
+ || AS_ERROR([failed to touch])
+touch sub/... 2>/dev/null
+_AS_CLEAN_DIR([sub]) || AS_ERROR([failed to clean])
+# rmdir instead of 'rm -fr' here proves that we emptied sub.
+rmdir sub || AS_ERROR([failed to rmdir])
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script])
+
+AT_CLEANUP
+
+
+## -------- ##
+## ECHO_C. ##
+## -------- ##
+
+AT_SETUP([ECHO_C])
+
+AT_DATA_M4SH([script.as], [[dnl
+AS_INIT
+_AS_PREPARE
+foo=`echo foobar`
+echo "$foo"
+]])
+
+AT_CHECK_M4SH
+AT_CHECK([$CONFIG_SHELL ./script], [], [foobar
+])
+
+AT_CLEANUP
diff --git a/tests/m4sugar.at b/tests/m4sugar.at
new file mode 100644
index 0000000..997e2dd
--- /dev/null
+++ b/tests/m4sugar.at
@@ -0,0 +1,2140 @@
+# -*- Autotest -*-
+
+AT_BANNER([M4sugar.])
+
+# Copyright (C) 2000-2002, 2005-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# AT_CHECK_M4SUGAR_TEXT(CODE, STDOUT, STDERR)
+# -------------------------------------------
+# Check that m4sugar CODE expands to STDOUT and emits STDERR.
+m4_define([AT_CHECK_M4SUGAR_TEXT],
+[
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert_push([])[]dnl
+]$1[[]dnl
+m4_divert_pop([])
+]])
+
+AT_CHECK_M4SUGAR([-o-],, [$2], [$3])
+])# AT_CHECK_M4SUGAR_TEXT
+
+
+## ------------------ ##
+## m4_stack_foreach. ##
+## ------------------ ##
+
+AT_SETUP([m4@&t@_stack])
+
+AT_KEYWORDS([m4@&t@_stack_foreach m4@&t@_stack_foreach_lifo])
+AT_KEYWORDS([m4@&t@_stack_foreach_sep m4@&t@_stack_foreach_sep_lifo])
+AT_KEYWORDS([m4@&t@_copy m4@&t@_n])
+
+# Test the semantics of macros to walk stacked macro definitions.
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_pushdef([abc], [def])dnl
+m4_pushdef([abc], [ghi])dnl
+m4_pushdef([abc], [jkl])dnl
+m4_stack_foreach([abc], [m4_n])
+abc
+m4_stack_foreach_lifo([abc], [m4_n])
+m4_stack_foreach([abc], [m4_n])
+m4_copy([abc], [foo])dnl
+m4_stack_foreach([foo], [m4_n])
+m4_stack_foreach_lifo([foo], [m4_n])
+m4_stack_foreach_sep([abc], [ m4_index([abcdefghijkl],], [)])
+m4_define([colon], [:])m4_define([lt], [<])m4_define([gt], [>])dnl
+m4_stack_foreach_sep_lifo([abc], [lt], [gt], [colon])
+m4_pushdef([xyz], [123])dnl
+m4_pushdef([xyz], [456])dnl
+m4_define([doit], [[$1](m4_stack_foreach_sep([xyz], [m4_dquote(], [)], [,]))
+])dnl
+m4_stack_foreach([abc], [doit])]],
+[[def
+ghi
+jkl
+
+jkl
+jkl
+ghi
+def
+
+def
+ghi
+jkl
+
+def
+ghi
+jkl
+
+jkl
+ghi
+def
+
+ 3 6 9
+<jkl>:<ghi>:<def>
+def([123],[456])
+ghi([123],[456])
+jkl([123],[456])
+]])
+
+AT_CLEANUP
+
+
+## --------- ##
+## m4_defn. ##
+## --------- ##
+
+AT_SETUP([m4@&t@_defn])
+
+AT_KEYWORDS([m4@&t@_popdef m4@&t@_undefine m4@&t@_copy m4@&t@_rename
+m4@&t@_copy_force m4@&t@_rename_force])
+
+# Ensure that m4sugar dies when dereferencing undefined macros, whether
+# this is provided by m4 natively or faked by wrappers in m4sugar.
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_define([good])
+m4_defn([good], [oops])
+]])
+
+AT_CHECK_M4SUGAR([-o-], 1, [], [stderr])
+AT_CHECK([grep good stderr], [1])
+AT_CHECK([grep 'm4@&t@_defn: undefined.*oops' stderr], [0], [ignore])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_define([good])
+m4_popdef([good], [oops])
+]])
+
+AT_CHECK_M4SUGAR([-o-], 1, [], [stderr])
+AT_CHECK([grep good stderr], [1])
+AT_CHECK([grep 'm4@&t@_popdef: undefined.*oops' stderr], [0], [ignore])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_define([good])
+m4_undefine([good], [oops])
+]])
+
+AT_CHECK_M4SUGAR([-o-], 1, [], [stderr])
+AT_CHECK([grep good stderr], [1])
+AT_CHECK([grep 'm4@&t@_undefine: undefined.*oops' stderr], [0], [ignore])
+
+# Cannot rename an undefined macro.
+AT_DATA_M4SUGAR([script.4s],
+[[m4_rename([oops], [good])
+]])
+
+AT_CHECK_M4SUGAR([-o-], 1, [], [stderr])
+AT_CHECK([grep 'm4@&t@_undefine: undefined.*oops' stderr], [0], [ignore])
+
+# Check that pushdef stacks can be renamed.
+AT_CHECK_M4SUGAR_TEXT([[m4_pushdef([a], [1])dnl
+m4_pushdef([a], [2])dnl
+m4_pushdef([a], m4_defn([m4_divnum]))dnl
+a b c
+m4_rename([a], [b])dnl
+a b c
+m4_copy([b], [c])dnl
+a b c
+m4_popdef([b], [c])dnl
+a b c
+m4_popdef([b], [c])dnl
+a b c
+m4_popdef([b], [c])dnl
+a b c
+dnl m4_copy is intentionally a no-op on undefined source
+m4_copy([oops], [dummy])m4_ifdef([dummy], [[oops]])dnl
+dnl allow forceful overwrites
+m4_define([d], [4])m4_define([e], [5])m4_define([f], [6])dnl
+m4_copy_force([d], [e])dnl
+m4_rename_force([d], [f])dnl
+d e f
+m4_popdef([e], [f])dnl
+d e f
+]], [[0 b c
+a 0 c
+a 0 0
+a 2 2
+a 1 1
+a b c
+d 4 4
+d e f
+]])
+
+AT_CLEANUP
+
+
+## ------------ ##
+## m4_dumpdef. ##
+## ------------ ##
+
+AT_SETUP([m4@&t@_dumpdef])
+
+AT_KEYWORDS([m4@&t@_dumpdefs])
+
+# Ensure that m4sugar dies when dereferencing undefined macros.
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_define([good], [yep])
+m4_dumpdef([good], [oops])
+]])
+
+AT_CHECK_M4SUGAR([-o-], 1, [], [stderr])
+AT_CHECK([grep '^good: \[[yep\]]$' stderr], [0], [ignore])
+AT_CHECK([grep 'm4@&t@_dumpdef: undefined.*oops' stderr], [0], [ignore])
+
+# Check that pushdef stacks can be dumped.
+AT_CHECK_M4SUGAR_TEXT([[m4_divert_push([KILL])
+m4_pushdef([a], [1])
+m4_pushdef([a], [2])
+m4_dumpdef([a])
+m4_dumpdefs([oops], [a])
+m4_divert_pop([KILL])dnl
+]], [],
+[[a: [2]
+a: [2]
+a: [1]
+]])
+
+# Check behavior when dumping builtins. Unfortunately, when using M4 1.4.x
+# (or more precisely, when __m4_version__ is undefined), builtins get
+# flattened to an empty string. It takes M4 1.6 to work around this.
+AT_DATA_M4SUGAR([script.4s],
+[[m4_ifdef([__m4_version__], [_m4_undefine([__m4_version__])])
+m4_init
+m4_dumpdef([m4_define])
+]])
+
+AT_CHECK_M4SUGAR([-o-], [0], [],
+[[m4_define: []
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_ifdef([__m4_version__],
+[m4_dumpdef([m4_define])],
+[m4_errprintn([m4_define: <define>])])
+]])
+
+AT_CHECK_M4SUGAR([-o-], [0], [],
+[[m4_define: <define>
+]])
+
+AT_CLEANUP
+
+
+## --------- ##
+## m4_warn. ##
+## --------- ##
+
+AT_SETUP([m4@&t@_warn])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_defun([cross_warning], [m4_warn([cross], [cross])])
+
+m4_divert([0])dnl
+m4_warn([obsolete], [obsolete])dnl
+cross_warning[]dnl
+m4_warn([syntax], [syntax])dnl
+cross_warning[]dnl
+m4_warn([syntax], [syntax])dnl
+]])
+
+AT_CHECK_M4SUGAR([-o-], 0, [],
+[script.4s:4: warning: prefer named diversions
+script.4s:7: warning: syntax
+script.4s:9: warning: syntax
+])
+
+AT_CHECK_M4SUGAR([-o- -Wall], 0, [],
+[script.4s:4: warning: prefer named diversions
+script.4s:5: warning: obsolete
+script.4s:6: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:6: the top level
+script.4s:7: warning: syntax
+script.4s:8: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:8: the top level
+script.4s:9: warning: syntax
+])
+
+AT_CHECK_M4SUGAR([-o- -Wnone,cross], 0, [],
+[script.4s:6: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:6: the top level
+script.4s:8: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:8: the top level
+])
+
+AT_CHECK_M4SUGAR([-o- -Wnone,cross,error], 1, [],
+[[script.4s:6: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:6: the top level
+script.4s:8: warning: cross
+script.4s:2: cross_warning is expanded from...
+script.4s:8: the top level
+]])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## m4_divert_stack. ##
+## ----------------- ##
+
+AT_SETUP([m4@&t@_divert_stack])
+AT_KEYWORDS([m4@&t@_divert m4@&t@_divert_push m4@&t@_divert_pop
+m4@&t@_undivert m4@&t@_cleardivert m4@&t@_divert_text])
+
+dnl This test names some diversions to avoid a warning.
+AT_CHECK_M4SUGAR_TEXT([[m4_define([_m4_divert(ten)], [10])dnl
+m4_define([_m4_divert(twenty)], [20])dnl
+m4_define([_m4_divert(thirty)], [30])dnl
+1.m4_divert_stack
+m4_divert_push([ten])2.m4_divert_stack
+m4_divert_text([twenty], [3.m4_divert_stack])dnl
+m4_divert([thirty])4.m4_divert_stack
+m4_divert_pop([thirty])dnl
+5.m4_undivert([twenty], [thirty])
+m4_pattern_allow([^m4_divert])dnl
+]], [[1.script.4s:2: m4@&t@_divert_push:
+script.4s:1: m4@&t@_divert: KILL
+5.3.script.4s:8: m4@&t@_divert_push: twenty
+script.4s:7: m4@&t@_divert_push: ten
+script.4s:2: m4@&t@_divert_push:
+script.4s:1: m4@&t@_divert: KILL
+4.script.4s:9: m4@&t@_divert: thirty
+script.4s:2: m4@&t@_divert_push:
+script.4s:1: m4@&t@_divert: KILL
+
+2.script.4s:7: m4@&t@_divert_push: ten
+script.4s:2: m4@&t@_divert_push:
+script.4s:1: m4@&t@_divert: KILL
+]])
+
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_divert_text([3], [three])dnl
+m4_divert_text([4], [four])dnl
+m4_divert_text([1], [one])dnl
+m4_divert_text([2], [two])dnl
+m4_cleardivert([2], [3])dnl
+]],
+[[one
+four
+]],
+[[script.4s:4: warning: prefer named diversions
+script.4s:5: warning: prefer named diversions
+script.4s:6: warning: prefer named diversions
+script.4s:7: warning: prefer named diversions
+script.4s:8: warning: prefer named diversions
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_divert_pop
+]])
+AT_CHECK_M4SUGAR([-o-], [1], [],
+[[script.4s:1: error: too many m4@&t@_divert_pop
+script.4s:1: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert_push([1])
+m4_divert_pop([2])
+]])
+AT_CHECK_M4SUGAR([-o-], [1], [],
+[[script.4s:3: error: m4@&t@_divert_pop(2): diversion mismatch:
+script.4s:2: m4@&t@_divert_push: 1
+script.4s:1: m4@&t@_divert: KILL
+script.4s:3: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_divert([1])
+m4_init
+m4_divert_push([2])
+]])
+AT_CHECK_M4SUGAR([-o-], [1], [],
+[[script.4s:2: error: m4@&t@_init: unbalanced m4@&t@_divert_push:
+script.4s:3: m4@&t@_divert_push: 2
+script.4s:2: m4@&t@_divert: KILL
+script.4s:2: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_CLEANUP
+
+
+## -------------------- ##
+## m4_expansion_stack. ##
+## -------------------- ##
+
+AT_SETUP([m4@&t@_expansion_stack])
+
+AT_CHECK_M4SUGAR_TEXT([[1.m4_expansion_stack
+m4_defun([a], [b])dnl
+m4_define([c], [d])dnl
+m4_defun([d], [2.m4_expansion_stack])dnl
+m4_defun([b], [c])dnl
+a
+3.m4_ifdef([_m4_expansion_stack], [m4_expansion_stack])
+]], [[1.script.4s:3: the top level
+2.script.4s:6: d is expanded from...
+script.4s:7: b is expanded from...
+script.4s:4: a is expanded from...
+script.4s:8: the top level
+3.
+]])
+
+AT_CLEANUP
+
+
+## --------------------------- ##
+## m4_require: error message. ##
+## --------------------------- ##
+
+AT_SETUP([m4@&t@_require: error message])
+AT_KEYWORDS([m4@&t@_require])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_defun([foo], [FOO])
+m4_require([foo])
+]])
+
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:2: error: m4@&t@_require(foo): cannot be used outside of an m4_defun'd macro
+script.4s:2: the top level
+autom4te: m4 failed with exit status: 1
+]])
+AT_CLEANUP
+
+
+## ----------------------------------- ##
+## m4_require: circular dependencies. ##
+## ----------------------------------- ##
+
+AT_SETUP([m4@&t@_require: circular dependencies])
+AT_KEYWORDS([m4@&t@_require])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_defun([foo], [m4_require([bar])])
+
+m4_defun([bar], [m4_require([foo])])
+
+m4_defun([baz], [m4_require([foo])])
+
+m4_init
+m4_divert([0])dnl
+baz
+]])
+
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:9: error: m4@&t@_require: circular dependency of foo
+script.4s:3: bar is expanded from...
+script.4s:1: foo is expanded from...
+script.4s:5: baz is expanded from...
+script.4s:9: the top level
+autom4te: m4 failed with exit status: 1
+]])
+AT_CLEANUP
+
+
+## ---------------------- ##
+## m4_require: one-shot. ##
+## ---------------------- ##
+
+AT_SETUP([m4@&t@_require: one-shot initialization])
+AT_KEYWORDS([m4@&t@_require])
+AT_KEYWORDS([m4@&t@_defun_init m4@&t@_copy m4@&t@_defun_once])
+
+dnl check out m4_defun_init, m4_copy, and odd macro names
+AT_CHECK_M4SUGAR_TEXT([[
+m4_define([t], [text])dnl
+m4_defun_init([a], [[init a
+]], [[common a] t])dnl
+m4_defun([b], [[b]m4_require([a])])dnl
+m4_defun([c], [[c]m4_require([a])])dnl
+b
+c
+a()dnl
+
+m4_defun_init([-], [hello, ], [m4_if([$#], [0], [world], [[$1]])])dnl
+m4_copy([-], [.])dnl
+m4_indir([.])
+m4_indir([.], [goodbye])
+m4_indir([-], [again])
+]], [[
+init a
+common a text
+b
+c
+common a text
+hello, world
+goodbye
+hello, again
+]])
+
+dnl Check m4_defun_once behavior
+AT_CHECK_M4SUGAR_TEXT([[
+m4_defun_once([a], [[a]])dnl
+m4_defun([b], [[b]m4_require([a])])dnl
+m4_defun([c], [[c]a[]m4_require([b])])dnl
+c
+a
+m4_defun_once([d], [[d]m4_require([a])])dnl
+d
+m4_defun_once([e], [[e]])dnl
+m4_defun([f], [[f]m4_require([e])e])dnl
+f
+]], [[
+a
+b
+c
+
+d
+e
+f
+]])
+
+
+AT_CLEANUP
+
+
+## -------------------- ##
+## m4_require: nested. ##
+## -------------------- ##
+
+AT_SETUP([m4@&t@_require: nested])
+AT_KEYWORDS([m4@&t@_require m4@&t@_defun])
+
+dnl From the m4sugar.m4 discourse: Require chains, top level
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_defun([a], [[a]])dnl aka TEST2a
+m4_defun([b], [[b]m4_require([a])])dnl aka TEST3
+m4_defun([c], [[c]m4_require([b])])dnl aka TEST2b
+m4_defun([d], [[d]m4_require([a])m4_require([c])])dnl aka TEST1
+pre
+d
+d
+post
+]],
+[[pre
+a
+b
+c
+d
+d
+post
+]])
+
+dnl From the m4sugar.m4 discourse: Require chains, nested
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_defun([a], [[a]])dnl aka TEST2a
+m4_defun([b], [[b]m4_require([a])])dnl aka TEST3
+m4_defun([c], [[c]m4_require([b])])dnl aka TEST2b
+m4_defun([d], [[d]m4_require([a])m4_require([c])])dnl aka TEST1
+m4_defun([wrap],
+[pre
+d
+d
+post])dnl
+wrap
+]],
+[[a
+b
+c
+pre
+d
+d
+post
+]])
+
+dnl Direct invocation, nested requires, top level
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_defun([a], [[a]])dnl
+m4_defun([b], [[b]m4_require([a])])dnl
+m4_defun([c], [[c]m4_require([b])])dnl
+pre
+a
+c
+a
+c
+post
+]],
+[[pre
+a
+b
+c
+a
+c
+post
+]])
+
+dnl Direct invocation, nested requires, nested defun. This is an example
+dnl of expansion before requirement, such that b occurs before its
+dnl prerequisite a. This indicates a bug in the macros (but not in
+dnl autoconf), so we should be emitting a warning.
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_defun([a], [[a]])dnl
+m4_defun([b], [[b]m4_require([a])])dnl
+m4_defun([c], [[c]m4_require([b])])dnl
+dnl the extra macro layer works around line number differences in older m4
+m4_define([foo], [m4_defun([outer],
+[pre
+a
+c
+a
+c
+post])])foo[]dnl
+outer
+]],
+[[a
+b
+pre
+a
+c
+a
+c
+post
+]],
+[[script.4s:15: warning: m4@&t@_require: `a' was expanded before it was required
+script.4s:15: http://www.gnu.org/software/autoconf/manual/autoconf.html#Expanded-Before-Required
+script.4s:5: b is expanded from...
+script.4s:6: c is expanded from...
+script.4s:14: outer is expanded from...
+script.4s:15: the top level
+]])
+
+dnl Direct invocation, expand-before-require but no nested require. As this
+dnl is common in real life, but does not result in out-of-order expansion,
+dnl we silently permit this.
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_defun([a], [[a]])dnl
+m4_defun([b], [[b]m4_require([a])])dnl
+m4_defun([c], [[c]])dnl
+m4_defun([d], [[d]m4_require([c])])dnl
+pre1
+a
+b
+a
+b
+post1
+m4_defun([outer],
+[pre2
+c
+d
+c
+d
+post2])dnl
+outer
+m4_defun([e], [[e]])dnl
+m4_defun([f], [[f]m4_require([e])])dnl
+m4_defun([g], [[g]
+e
+f])dnl
+m4_defun([h], [[h]m4_require([g])])dnl
+h
+m4_defun([i], [[i]])dnl
+m4_defun([j], [[j]
+i])dnl
+m4_defun([k], [[k]m4_require([i])])dnl
+m4_defun([l], [[l]m4_require([k])])dnl
+m4_defun([m], [[m]m4_require([j])m4_require([l])])dnl
+m
+]],
+[[pre1
+a
+b
+a
+b
+post1
+pre2
+c
+d
+c
+d
+post2
+g
+e
+f
+h
+j
+i
+k
+l
+m
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------------------- ##
+## m4_ifval, m4_ifblank, m4_ifset, m4_default, etc. ##
+## ------------------------------------------------- ##
+
+AT_SETUP([m4sugar shorthand conditionals])
+AT_KEYWORDS([m4@&t@_ifval m4@&t@_ifblank m4@&t@_ifnblank m4@&t@_ifset
+m4@&t@_default m4@&t@_default_quoted m4@&t@_default_nblank
+m4@&t@_default_nblank_quoted])
+
+AT_CHECK_M4SUGAR_TEXT([[m4_define([active], [ACTIVE])m4_define([empty])
+m4_ifval([active], [yes], [no])
+m4_ifval([empty], [yes], [no])
+m4_ifval([ ], [yes], [no])
+m4_ifval([], [yes], [no])
+m4_ifblank([active], [yes], [no])
+m4_ifblank([empty], [yes], [no])
+m4_ifblank([ ], [yes], [no])
+m4_ifblank([], [yes], [no])
+m4_ifnblank([active], [yes], [no])
+m4_ifnblank([empty], [yes], [no])
+m4_ifnblank([ ], [yes], [no])
+m4_ifnblank([], [yes], [no])
+m4_ifset([active], [yes], [no])
+m4_ifset([empty], [yes], [no])
+m4_ifset([ ], [yes], [no])
+m4_ifset([], [yes], [no])
+---
+m4_define([demo1], [m4_default([$1], [$2])])dnl
+m4_define([demo2], [m4_default_quoted([$1], [$2])])dnl
+m4_define([demo3], [m4_default_nblank([$1], [$2])])dnl
+m4_define([demo4], [m4_default_nblank_quoted([$1], [$2])])dnl
+demo1([active], [default])
+demo1([], [active])
+demo1([empty], [text])
+-demo1([ ], [active])-
+demo2([active], [default])
+demo2([], [active])
+demo2([empty], [text])
+-demo2([ ], [active])-
+demo3([active], [default])
+demo3([], [active])
+demo3([empty], [text])
+-demo3([ ], [active])-
+demo4([active], [default])
+demo4([], [active])
+demo4([empty], [text])
+-demo4([ ], [active])-
+]], [[
+yes
+yes
+yes
+no
+no
+no
+yes
+yes
+yes
+yes
+no
+no
+yes
+no
+no
+no
+---
+ACTIVE
+ACTIVE
+
+- -
+active
+active
+empty
+- -
+ACTIVE
+ACTIVE
+
+-ACTIVE-
+active
+active
+empty
+-active-
+]])
+
+AT_CLEANUP
+
+## --------- ##
+## m4_cond. ##
+## --------- ##
+
+AT_SETUP([m4@&t@_cond])
+
+AT_CHECK_M4SUGAR_TEXT([[m4_define([side], [m4_errprintn([$1])$1])
+m4_cond([side(1)], [1], [a],
+ [side(1)], [1], [b],
+ [side(1)], [2], [c])
+m4_cond([side(2)], [1], [a],
+ [side(2)], [1], [b],
+ [side(2)], [2], [c],
+ [side(2)])
+m4_cond([side(3)], [1], [a],
+ [side(3)], [1], [b],
+ [side(3)], [2], [c],
+ [side(3)])
+m4_cond([a,a], [a,a], [yes], [no])
+m4_cond([[a,a]], [a,a], [yes])
+m4_cond([a,a], [a,b], [yes], [no])
+m4_cond([a,a], [a,b], [yes])
+m4_cond([m4_eval([0xa])])
+m4_define([ab], [AB])dnl
+m4_cond([a])b
+m4_cond([1], [1], [a])b
+m4_cond([1], [2], [3], [a])b
+]], [[
+a
+c
+3
+yes
+yes
+no
+
+10
+AB
+AB
+AB
+]], [[1
+2
+2
+2
+3
+3
+3
+3
+]])
+
+AT_CLEANUP
+
+
+## ---------- ##
+## m4 lists. ##
+## ---------- ##
+
+AT_SETUP([m4 lists])
+
+AT_KEYWORDS([m4@&t@_car m4@&t@_cdr m4@&t@_argn _m4@&t_cdr])
+
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])
+m4_argn([1], [a], [b], [c])
+m4_argn([2], [a], [b], [c])
+m4_argn([3], [a], [b], [c])
+m4_argn([4], [a], [b], [c])
+m4_car([a], [b], [c])
+m4_cdr([a], [b], [c])
+m4_cdr([a], [b])
+m4_cdr([a])
+_m4_cdr([a], [b], [c])
+_m4_cdr([a], [b])
+_m4_cdr([a])
+m4_if(m4_cdr([], []), [[]], [good], [bad])
+m4_if(m4_cdr([]), [], [good], [bad])
+]], [[
+a
+b
+c
+
+a
+[b],[c]
+[b]
+
+, [b],[c]
+, [b]
+
+good
+good
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_argn([0], [a], [b], [c])
+]])
+AT_CHECK_M4SUGAR([-o-], [1], [],
+[[script.4s:2: error: assert failed: 0 < 0
+script.4s:2: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_CLEANUP
+
+
+## ---------- ##
+## m4_split. ##
+## ---------- ##
+
+AT_SETUP([m4@&t@_split])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([active], [ACT, IVE])m4_define([bd], [oops])
+m4_split
+m4_split([[]])
+m4_split([ ])
+m4_split([active])
+m4_split([ active active ])end
+m4_split([ ], [ ])
+m4_split([active], [ ])
+m4_split([ active active ], [ ])end
+m4_split([abcde], [bd])
+m4_split([abcde], [[bd]])
+m4_split([foo=`` bar=''])
+m4_split([foo='' bar=``])
+dnl these next two are from the manual; keep this in sync if the internal
+dnl quoting strings in m4_split are changed
+m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
+m4_split([a )}>=- b -=<{( c])
+m4_split([a )}@&t@>=- b -=<@&t@{( c])
+]],
+[[
+
+[[]]
+[], []
+[active]
+[], [active], [active], []end
+[], []
+[active]
+[], [active active], []end
+[abcde]
+[a], [c], [e]
+[foo=``], [bar='']
+[foo=''], [bar=``]
+[a], [], [B], [], [c]
+[a], [)}>=@&t@-], [b], [-@&t@=<{(], [c]
+]])
+
+AT_CLEANUP
+
+
+## ------- ##
+## m4_do. ##
+## ------- ##
+
+AT_SETUP([m4@&t@_do])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([ab], [1])m4_define([bc], [2])m4_define([abc], [3])dnl
+m4_define([AB], [4])m4_define([BC], [5])m4_define([ABC], [6])dnl
+m4_do
+m4_do([a])
+m4_do([a], [b])c
+m4_unquote(m4_join([], [a], [b]))c
+m4_define([a], [A])m4_define([b], [B])m4_define([c], [C])dnl
+m4_do([a], [b])c
+m4_unquote(m4_join([], [a], [b]))c
+]],
+[[
+a
+abc
+3
+ABC
+3
+]])
+
+AT_CLEANUP
+
+
+## ----------- ##
+## m4_append. ##
+## ----------- ##
+
+AT_SETUP([m4@&t@_append])
+AT_KEYWORDS([m4@&t@_append_uniq m4@&t@_append_uniq_w])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([active], [ACTIVE])dnl
+m4_append([sentence], [This is an])dnl
+m4_append([sentence], [ active ])dnl
+m4_append([sentence], [symbol.])dnl
+sentence
+m4_undefine([active])dnl
+sentence
+m4_define([active], [ACTIVE])dnl
+m4_append([hooks], [m4_define([act1], [act2])])dnl
+m4_append([hooks], [m4_define([act2], [active])])dnl
+m4_undefine([active])dnl
+act1
+hooks
+act1
+dnl Test for bug fixed in 2.62 when separator is active.
+m4_define([a], [A])dnl
+m4_append_uniq([foo], [-], [a])dnl
+m4_append_uniq([foo], [-], [a])dnl
+m4_append_uniq([bar], [-], [a])dnl
+m4_append_uniq([bar], [~], [a])dnl
+m4_append_uniq([bar], [-], [a])dnl
+m4_defn([foo])
+m4_defn([bar])
+foo
+bar
+m4_append_uniq([blah], [one], [, ], [new], [existing])
+m4_append_uniq([blah], [two], [, ], [new], [existing])
+m4_append_uniq([blah], [two], [, ], [new], [existing])
+m4_append_uniq([blah], [three], [, ], [new], [existing])
+m4_append([blah], [two], [, ])dnl
+blah
+m4_dquote(blah)
+m4_append([list], [one], [[, ]])dnl
+m4_append([list], [two], [[, ]])dnl
+m4_append([list], [three], [[, ]])dnl
+list
+m4_dquote(list)
+m4_append_uniq_w([numbers], [1 1 2])dnl
+m4_append_uniq_w([numbers], [ 2 3 ])dnl
+numbers
+]],
+[[This is an ACTIVE symbol.
+This is an active symbol.
+act1
+
+active
+-
+-a~
+-
+-A~
+new
+new
+existing
+new
+one, two, three, two
+[one],[two],[three],[two]
+one, two, three
+[one, two, three]
+1 2 3
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init[]dnl
+m4_append_uniq([str], [a], [ ])
+m4_append_uniq([str], [a b], [ ])
+m4_divert([])dnl
+str
+]])
+
+AT_CHECK_M4SUGAR([-o-], 0, [[a a b
+]], [[script.4s:3: warning: m4@&t@_append_uniq: `a b' contains ` '
+]])
+
+AT_CLEANUP
+
+
+## --------- ##
+## m4_join. ##
+## --------- ##
+
+AT_SETUP([m4@&t@_join])
+
+AT_KEYWORDS([m4@&t@_joinall])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([active], [ACTIVE])
+m4_join
+m4_join([|])
+m4_join([, ], [one], [two])
+m4_dquote(m4_join([, ], [one], [two]))
+m4_join([|], [active], [active])
+m4_join([|], ,,,[one])
+m4_join([|], [one],,,)
+m4_join([], ,,,[two])
+m4_join([], [two],,,)
+m4_join([ active ], [one], , [two])
+m4_join([], [one], [two])
+m4_joinall([-], [one], [], [two])
+m4_joinall([-], [], [], [three], [], [])
+m4_joinall([], [one], [], [two])
+m4_joinall
+m4_joinall([-])
+m4_joinall([-], [one])
+]],
+[[
+
+
+one, two
+[one, two]
+active|active
+one
+one
+two
+two
+one active two
+onetwo
+one--two
+--three--
+onetwo
+
+
+one
+]])
+
+AT_CLEANUP
+
+
+## ----------- ##
+## m4_expand. ##
+## ----------- ##
+
+AT_SETUP([m4@&t@_expand])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([active], [ACTIVE])dnl
+m4_expand([#active
+active])
+m4_expand([[active]])
+dnl properly quoted case statements
+m4_expand([case a in @%:@(
+ *) echo active, ;;
+esac
+case b in
+ *[)] echo active, ;;
+esac])
+dnl unbalanced underquoted `)', but we manage anyway (gasp!)
+m4_expand([case c in #(
+ *) echo active, ;;
+esac
+case d in
+ *) echo active, ;;
+esac])
+dnl unterminated comment/dnl
+m4_expand([active # active])
+m4_expand([a
+dnl])
+m4_expand([a
+-dnl])
+]],
+[[#active
+ACTIVE
+active
+case a in #(
+ *) echo ACTIVE, ;;
+esac
+case b in
+ *) echo ACTIVE, ;;
+esac
+case c in #(
+ *) echo ACTIVE, ;;
+esac
+case d in
+ *) echo ACTIVE, ;;
+esac
+ACTIVE # active
+a
+a
+-
+]])
+
+AT_CLEANUP
+
+
+## ------------- ##
+## m4_text_box. ##
+## ------------- ##
+
+AT_SETUP([m4@&t@_text_box])
+
+AT_CHECK_M4SUGAR_TEXT([[
+m4_text_box([a $1 @&t@b])
+m4_text_box([a $1 @&t@b], [$])
+m4_text_box([a $1 @&t@b], [,])
+]], [[
+## ------ ##
+## a $1 b ##
+## ------ ##
+## $$$$$$ ##
+## a $1 b ##
+## $$$$$$ ##
+## ,,,,,, ##
+## a $1 b ##
+## ,,,,,, ##
+]])
+
+AT_CLEANUP
+
+## -------------- ##
+## m4_text_wrap. ##
+## -------------- ##
+
+AT_SETUP([m4@&t@_text_wrap])
+AT_KEYWORDS([m4@&t@_escape])
+
+# m4_text_wrap is used to display the help strings. Also, check that
+# commas and $ are not swallowed. This can easily happen because of
+# m4-listification.
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init[]m4_divert([])dnl
+m4_define([a], [OOPS])dnl
+m4_escape([a[b $c#]d])
+m4_if(m4_escape([a[b $c#]d]), [a[b $c#]d], [oops],
+ m4_escape([a[b $c#]d]), [a@<:@b @S|@c@%:@@:>@d], [pass], [oops])
+
+m4_text_wrap([Short string */], [ ], [/* ], 20)
+
+m4_text_wrap([Much longer string */], [ ], [/* ], 20)
+
+m4_text_wrap([Short doc.], [ ], [ --short ], 30)
+
+m4_text_wrap([Short doc.], [ ], [ --too-wide], 30)
+
+m4_text_wrap([Super long documentation.], [ ], [ --too-wide], 30)
+
+m4_text_wrap([First, second , third, [,quoted space]])
+m4_define([xfff], [oops])
+m4_text_wrap([Some $1 $2 $3 $4 embedded dollars.], [ $* ], [ $@ ], [0xfff & 20])
+]])
+
+AT_DATA([expout],
+[[a[b $c#]d
+pass
+
+/* Short string */
+
+/* Much longer
+ string */
+
+ --short Short doc.
+
+ --too-wide
+ Short doc.
+
+ --too-wide
+ Super long
+ documentation.
+
+First, second , third, [,quoted space]
+
+ $@ Some $1 $2 $3
+ $* $4 embedded
+ $* dollars.
+]])
+
+AT_CHECK_M4SUGAR([-o-], 0, [expout])
+
+AT_CLEANUP
+
+## -------------------- ##
+## m4_version_compare. ##
+## -------------------- ##
+
+AT_SETUP([m4@&t@_version_compare])
+
+AT_KEYWORDS([m4@&t@_list_cmp])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_version_compare([1.1], [2.0])
+m4_version_compare([2.0b], [2.0a])
+m4_version_compare([2.0z], [2.0y])
+m4_version_compare([1.1.1], [1.1.1a])
+m4_version_compare([1.2], [1.1.1a])
+m4_version_compare([1.0], [1])
+m4_version_compare([1.0a], [1.0a])
+m4_version_compare([1.1a], [1.1a.1])
+m4_version_compare([1.10], [1.1a])
+m4_version_compare([1-1a], [1,1A])
+m4_define([a], [oops])dnl
+m4_version_compare([1.1a], [1.1A])
+m4_version_compare([1z], [1aa])
+m4_version_compare([2.61a], [2.61a-248-dc51])
+m4_version_compare([2.61b], [2.61a-248-dc51])
+m4_version_compare([08], [09])
+m4_version_compare([010], [8])
+dnl Test that side effects to m4_list_cmp occur exactly once
+m4_list_cmp([[0], [0], [0]m4_errprintn([hi])],
+ [[0], [0], [0]m4_errprintn([hi])])
+m4_list_cmp([[0], [0], [0]m4_errprintn([hi])],
+ [[0], [0], [0]m4_errprintn([bye])])
+]],
+[[-1
+1
+1
+-1
+1
+0
+0
+-1
+1
+0
+0
+-1
+-1
+1
+-1
+1
+0
+0
+]], [[hi
+hi
+hi
+bye
+]])
+
+AT_CLEANUP
+
+## ------------------------------ ##
+## Standard regular expressions. ##
+## ------------------------------ ##
+
+AT_SETUP([Standard regular expressions])
+
+# AT_CHECK_M4RE(RE-NAME, TEXT, INTENT = `ok' | `')
+# ------------------------------------------------
+# Check whether RE-NAME (a macro whose definition is a regular expression)
+# matches TEXT. INTENT = `ok' if the match should succeed or else empty.
+m4_define([AT_CHECK_M4RE],
+[AT_CHECK_M4SUGAR_TEXT(
+[[m4_bregexp([$2], ^m4_defn([$1])$, [ok])
+]], [$3
+])])
+
+AT_CHECK_M4RE([m4_re_word], [ab9_c], [ok])
+AT_CHECK_M4RE([m4_re_word], [_9abc], [ok])
+AT_CHECK_M4RE([m4_re_word], [9ab_c])
+
+AT_CHECK_M4RE([m4_re_string], [ab9_c], [ok])
+AT_CHECK_M4RE([m4_re_string], [_9abc], [ok])
+AT_CHECK_M4RE([m4_re_string], [9ab_c], [ok])
+AT_CHECK_M4RE([m4_re_string], [9a@_c])
+
+AT_CLEANUP
+
+## ----------- ##
+## m4_bmatch. ##
+## ----------- ##
+
+AT_SETUP([m4@&t@_bmatch])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_bmatch([abc], [default\])
+m4_bmatch([abc], [^a], [yes])
+m4_bmatch([abc], [^a], [yes], [no])
+m4_bmatch([abc], [^.a], [yes])
+m4_bmatch([abc], [^.a], [yes], [no\])
+m4_bmatch([abc], [a], [1], [b], [2])
+m4_bmatch([abc], [A], [1], [b], [2])
+m4_define([ab], [AB])dnl
+m4_bmatch([$*], [a])b
+m4_bmatch([$*], [\*], [a])b
+m4_bmatch([$*], [1], [2], [a])b
+]], [[default\
+yes
+yes
+
+no\
+1
+2
+AB
+AB
+AB
+]])
+
+AT_CLEANUP
+
+## ------------------------ ##
+## m4_toupper, m4_tolower. ##
+## ------------------------ ##
+
+AT_SETUP([m4@&t@_toupper and m4@&t@_tolower])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([abc], [hI])m4_define([ABC], [Hi])
+m4_toupper(abc aBc ABC)
+m4_tolower(abc aBc ABC)
+m4_toupper([abc aBc ABC])
+m4_tolower([abc aBc ABC])
+m4_echo(m4_toupper(abc aBc ABC))
+m4_echo(m4_tolower(abc aBc ABC))
+m4_echo(m4_toupper([abc aBc ABC]))
+m4_echo(m4_tolower([abc aBc ABC]))
+m4_do(m4_toupper(abc aBc ABC))
+m4_do(m4_tolower(abc aBc ABC))
+m4_do(m4_toupper([abc aBc ABC]))
+m4_do(m4_tolower([abc aBc ABC]))
+]], [[
+HI ABC HI
+hi abc hi
+ABC ABC ABC
+abc abc abc
+HI ABC HI
+hi abc hi
+ABC ABC ABC
+abc abc abc
+HI Hi HI
+hi hI hi
+Hi Hi Hi
+hI hI hI
+]])
+
+AT_CLEANUP
+
+## --------------- ##
+## m4_bpatsubsts. ##
+## --------------- ##
+
+AT_SETUP([m4@&t@_bpatsubsts])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_bpatsubsts([11], [^..$])
+m4_bpatsubsts([11], [\(.\)1], [\12])
+m4_bpatsubsts([11], [^..$], [], [1], [2])
+m4_bpatsubsts([11], [\(.\)1], [\12], [1], [3])
+m4_define([a], [oops])m4_define([c], [oops])dnl
+m4_define([AB], [good])m4_define([bc], [good])dnl
+m4_bpatsubsts([abc], [a], [A], [b], [B], [c])
+m4_bpatsubsts([ab], [a])c
+m4_bpatsubsts([ab], [c], [C], [a])c
+m4_bpatsubsts([$1$*$@], [\$\*], [$#])
+]], [[11
+21
+22
+23
+good
+good
+good
+$1$#$@
+]])
+
+AT_CLEANUP
+
+## -------------- ##
+## m4_esyscmd_s. ##
+## -------------- ##
+
+AT_SETUP([m4@&t@_esyscmd_s])
+AT_KEYWORDS([m4@&t@_chomp m4@&t@_chomp_all])
+
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([world], [WORLD])dnl
+m4_chomp([abc])
+m4_chomp([world
+
+])
+m4_esyscmd_s([echo hello world])
+m4_esyscmd_s([echo '[goodbye,
+cruel world
+
+]'])
+]], [[abc
+world
+
+hello WORLD
+goodbye,
+cruel world
+]])
+
+AT_CLEANUP
+
+## ---------- ##
+## M4 Loops. ##
+## ---------- ##
+
+AT_SETUP([M4 loops])
+
+AT_KEYWORDS([m4@&t@_for m4@&t@_foreach m4@&t@_foreach_w m4@&t@_map_args_w])
+
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_define([myvar], [outer value])dnl
+m4_for([myvar], 1, 3, 1, [ myvar])
+m4_for([myvar], 1, 3, , [ myvar])
+m4_for([myvar], 3, 1,-1, [ myvar])
+m4_for([myvar], 3, 1, , [ myvar])
+m4_for([myvar], 1, 3, 2, [ myvar])
+m4_for([myvar], 3, 1,-2, [ myvar])
+m4_for([myvar],-1,-3,-2, [ myvar])
+m4_for([myvar],-3,-1, 2, [ myvar])
+dnl Make sure we recalculate the bounds correctly:
+m4_for([myvar], 1, 3, 3, [ myvar])
+m4_for([myvar], 1, 6, 3, [ myvar])
+m4_for([myvar],22,-7,-5, [ myvar])
+m4_for([myvar],-2,-7,-4, [ myvar])
+m4_for([myvar],-7,-2, 4, [ myvar])
+dnl Make sure we are not exposed to division truncation:
+m4_for([myvar], 2, 5, 2, [ myvar])
+m4_for([myvar],-5,-2, 2, [ myvar])
+m4_for([myvar], 5, 2,-2, [ myvar])
+m4_for([myvar],-2,-5,-2, [ myvar])
+dnl Make sure we do not divide by zero:
+m4_for([myvar], 1, 1, , [ myvar])
+m4_for([myvar], 1, 1,+2, [ myvar])
+m4_for([myvar], 1, 1,-2, [ myvar])
+dnl Make sure we do not loop endlessly
+m4_for([myval], 1, 1, 0, [ myval])
+dnl Make sure to properly parenthesize
+m4_for([myvar], 3-5, -2+8, , [ myvar])
+m4_for([myvar], -2+8, 3-5, , [ myvar])
+m4_for([myvar], 8, 16, 3 * 2, [ myvar])
+m4_for([myvar], 8, 16, -3 * -2, [ myvar])
+m4_for([myvar], [2<<2], [2<<3], [-3 * (-2)], [ myvar])
+dnl Modifying var does not affect the number of iterations
+m4_for([myvar], 1, 5, , [ myvar[]m4_define([myvar], 5)])
+dnl Make sure we can do nameless iteration
+m4_for(, 1, 10, , -)
+dnl foreach tests
+m4_foreach([myvar], [[a], [b, c], [d], [e
+],[f]], [ myvar|])
+m4_foreach_w([myvar], [a b c, d,e f
+g], [ myvar|])
+myvar
+m4_map_args_w([a b c, d,e f
+g], [ ], [|])
+m4_map_args_w([a b], [\1], [/])
+m4_define([dashes], [--])dnl
+m4_map_args_w([a b c], [/], [\1], [dashes])
+dnl only one side effect expansion, prior to visiting list elements
+m4_foreach([i], [[1], [2], [3]m4_errprintn([hi])], [m4_errprintn(i)])dnl
+dnl shifting forms an important part of loops
+m4_shift3:m4_shift3(1,2,3):m4_shift3(1,2,3,4)
+m4_shiftn(3,1,2,3):m4_shiftn(3,1,2,3,4)
+]],
+[[ 1 2 3
+ 1 2 3
+ 3 2 1
+ 3 2 1
+ 1 3
+ 3 1
+ -1 -3
+ -3 -1
+ 1
+ 1 4
+ 22 17 12 7 2 -3
+ -2 -6
+ -7 -3
+ 2 4
+ -5 -3
+ 5 3
+ -2 -4
+ 1
+ 1
+ 1
+ 1
+ -2 -1 0 1 2 3 4 5 6
+ 6 5 4 3 2 1 0 -1 -2
+ 8 14
+ 8 14
+ 8 14
+ 1 2 3 4 5
+----------
+ a| b, c| d| e
+| f|
+ a| b| c,| d,e| f| g|
+outer value
+ a| b| c,| d,e| f| g|
+\1a/\1b/
+/a\1--/b\1--/c\1
+::4
+:4
+]], [[hi
+1
+2
+3
+]])
+
+dnl bounds checking in m4_for
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert([0])dnl
+m4_for([myvar], 1, 3,-1, [ myvar])
+]])
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:3: error: assert failed: -1 > 0
+script.4s:3: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert([0])dnl
+m4_for([myvar], 1, 2, 0, [ myvar])
+]])
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:3: error: assert failed: 0 > 0
+script.4s:3: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert([0])dnl
+m4_for([myvar], 2, 1, 0, [ myvar])
+]])
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:3: error: assert failed: 0 < 0
+script.4s:3: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+dnl m4_shiftn also does bounds checking
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert([0])dnl
+m4_shiftn(3,1,2)
+]])
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:3: error: assert failed: 0 < 3 && 3 < 3
+script.4s:3: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_CLEANUP
+
+
+## --------------------- ##
+## m4_map{,all}{,_sep}. ##
+## --------------------- ##
+
+AT_SETUP([m4@&t@_map])
+AT_KEYWORDS([m4@&t@_apply m4@&t@_map_sep m4@&t@_mapall m4@&t@_mapall_sep])
+AT_KEYWORDS([m4@&t@_count])
+
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_map([m4_count], [])
+m4_map([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+m4_mapall([ m4_count], [[],
+ [[1]],
+ [[1], [2]]])
+m4_map_sep([m4_eval], [,], [[[1+2]],
+ [[10], [16]]])
+m4_count(m4_map_sep([m4_echo], [,], [[], [[1]], [[2]]]))
+m4_count(m4_mapall_sep([m4_echo], [,], [[], [[1]], [[2]]]))
+m4_map_sep([m4_eval], [[,]], [[[1+2]],
+ [[10], [16]]])
+m4_count(m4_map_sep([m4_echo], [[,]], [[], [[1]], [[2]]]))
+m4_count(m4_mapall_sep([m4_echo], [[,]], [[], [[1]], [[2]]]))
+m4_map([-], [[]])
+m4_mapall([-], [[]])
+m4_map_sep([-], [:], [[]])
+m4_mapall_sep([-], [:], [[]])
+m4_define([a], [m4_if([$#], [0], [oops], [$1], [a], [pass], [oops])])dnl
+m4_define([a1], [oops])dnl
+m4_define([pass1], [oops])dnl
+m4_map([a], [[[a]]])1
+m4_map([m4_unquote([a])], [m4_dquote([a])])
+dnl only one side effect expansion, prior to visiting list elements
+m4_map([m4_errprintn], [[[1]], [[2]], [[3]]m4_errprintn([hi])])dnl
+m4_map_sep([m4_errprintn], [], [[[1]], [[2]], [[3]]m4_errprintn([hi])])dnl
+m4_mapall([m4_errprintn], [[[1]], [[2]], [[3]]m4_errprintn([hi])])dnl
+m4_mapall_sep([m4_errprintn], [], [[[1]], [[2]], [[3]]m4_errprintn([hi])])dnl
+]],
+[[
+ 1 2
+ 0 1 2
+3,a
+2
+3
+3,a
+1
+1
+
+-
+
+-
+pass1
+pass
+]], [[hi
+1
+2
+3
+hi
+1
+2
+3
+hi
+1
+2
+3
+hi
+1
+2
+3
+]])
+
+AT_CLEANUP
+
+
+## --------------------------------------- ##
+## m4_map_args{,_sep,_pair} and m4_curry. ##
+## --------------------------------------- ##
+
+AT_SETUP([m4@&t@_map_args and m4@&t@_curry])
+AT_KEYWORDS([m4@&t@_map_args_sep m4@&t@_map_args_pair m4@&t@_reverse
+m4@&t@_map])
+
+dnl First, make sure we can curry in isolation.
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_curry([m4_echo])([1])
+m4_curry([m4_curry], [m4_reverse], [1])([2])([3])
+m4_define([add], [m4_eval(([$1]) + ([$2]))])dnl
+m4_define([add_one], [m4_curry([add], [1])])dnl
+add_one()([4])
+]],
+[[1
+3, 2, 1
+5
+]])
+
+dnl Now, check that we can map a list of arguments.
+AT_CHECK_M4SUGAR_TEXT([[m4_define([active], [ACTIVE])dnl
+m4_map_args([ m4_echo])
+m4_map_args([ m4_echo], [plain], [active])
+m4_map_args([m4_unquote], [plain], [active])
+m4_map_args_pair([, m4_reverse], [])
+m4_map_args_pair([, m4_reverse], [], [1])
+m4_map_args_pair([, m4_reverse], [], [1], [2])
+m4_map_args_pair([, m4_reverse], [], [1], [2], [3])
+m4_map_args_pair([, m4_reverse], [], [1], [2], [3], [4])
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1])
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2])
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3])
+m4_map_args_pair([, m4_reverse], [, m4_dquote], [1], [2], [3], [4])
+m4_map_args_sep([<], [>], [:], [1], [2], [3])
+m4_map_args_sep([m4_echo(], [)], [ ], [plain], [active])
+]],
+[[
+ plain active
+plainACTIVE
+
+, 1
+, 2, 1
+, 2, 1, 3
+, 2, 1, 4, 3
+, [1]
+, 2, 1
+, 2, 1, [3]
+, 2, 1, 4, 3
+<1>:<2>:<3>
+plain active
+]])
+
+dnl Finally, put the two concepts together, to show the real power of the API.
+AT_CHECK_M4SUGAR_TEXT(
+[[m4_define([add], [m4_eval(([$1]) + ([$2]))])dnl
+m4_define([list], [[-1], [0], [1]])dnl
+dnl list_add_n(value, arg...)
+dnl add VALUE to each ARG and output the resulting list
+m4_define([list_add_n],
+ [m4_shift(m4_map_args([,m4_curry([add], [$1])], m4_shift($@)))])
+list_add_n([1], list)
+list_add_n([2], list)
+]], [[
+0,1,2
+1,2,3
+]])
+
+AT_CLEANUP
+
+
+## ------------ ##
+## m4_combine. ##
+## ------------ ##
+
+AT_SETUP([m4@&t@_combine])
+
+AT_CHECK_M4SUGAR_TEXT([[m4_define([a], [oops])dnl
+m4_combine([, ], [[a], [b], [c]], [-], [1], [2], [3])
+m4_combine([, ], [[a], [b]], [-])
+m4_combine([, ], [[a], [b]], [-], [])
+m4_combine([, ], [], [-], [a], [b])
+m4_combine([, ], [[]], [-], [a], [b])
+m4_combine([ a ], [[-], [+]], [a], [-], [+])
+m4_combine([$* ], [[$1], [$2]], [$#], [$@])
+]],
+[[a-1, a-2, a-3, b-1, b-2, b-3, c-1, c-2, c-3
+
+a-, b-
+
+-a, -b
+-a- a -a+ a +a- a +a+
+$1$#$@$* $2$#$@
+]], [])
+
+AT_CLEANUP
+
+
+## -------------- ##
+## m4_{max,min}. ##
+## -------------- ##
+
+AT_SETUP([m4@&t@_max and m4@&t@_min])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_max
+]])
+
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:1: error: too few arguments to m4@&t@_max
+script.4s:1: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_min
+]])
+
+AT_CHECK_M4SUGAR([], 1, [],
+[[script.4s:1: error: too few arguments to m4@&t@_min
+script.4s:1: the top level
+autom4te: m4 failed with exit status: 1
+]])
+
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_min(0)
+m4_min(0xa)
+m4_min(0, 0)
+m4_min(0, 1)
+m4_min(1, 0)
+m4_min(0+1, 1+1)
+m4_min(0+1, 1+0)
+m4_min(0, 1, 2)
+m4_min(2, 1, 0)
+m4_min(1m4_for([i], 2, 100, , [,i]))
+m4_min(m4_for([i], 100, 2, , [i,])1)
+----
+m4_max(0)
+m4_max(0xa)
+m4_max(0, 0)
+m4_max(0, 1)
+m4_max(1, 0)
+m4_max(1+0, 1+1)
+m4_max(1+0, 1+0)
+m4_max(0, 1, 2)
+m4_max(2, 1, 0)
+m4_max(1m4_for([i], 2, 100, , [,i]))
+m4_max(m4_for([i], 100, 2, , [i,])1)
+]],
+[[0
+10
+0
+0
+0
+1
+1
+0
+0
+1
+1
+----
+0
+10
+0
+1
+1
+2
+1
+2
+2
+100
+100
+]], [])
+
+AT_CLEANUP
+
+
+## ----------- ##
+## Recursion. ##
+## ----------- ##
+
+AT_SETUP([recursion])
+
+AT_KEYWORDS([m4@&t@_foreach m4@&t@_foreach_w m4@&t@_case m4@&t@_cond
+m4@&t@_bpatsubsts m4@&t@_shiftn m4@&t@_do m4@&t@_dquote_elt m4@&t@_reverse
+m4@&t@_map m4@&t@_join m4@&t@_joinall m4@&t@_list_cmp m4@&t@_max m4@&t@_min
+m4@&t@_bmatch m4@&t@_map_args m4@&t@_map_args_pair])
+
+dnl This test completes in a reasonable time if m4_foreach is linear,
+dnl but thrashes if it is quadratic. If we are testing with m4 1.4.x,
+dnl only the slower foreach.m4 implementation will work. But if we
+dnl are testing with m4 1.6, we can rerun the test with __m4_version__
+dnl undefined to exercise the alternate code path.
+AT_DATA_M4SUGAR([script.4s],
+[[m4_init
+m4_divert_push([])[]dnl
+m4_len(m4_foreach_w([j], m4_do(m4_for([i], [1], [10000], [], [,i ])), [j ]))
+m4_shiftn(9998m4_for([i], [1], [10000], [], [,i]))
+m4_len(m4_join([--],, m4_dquote_elt(m4_for([i], [1], [10000], [], [,i])),))
+m4_len(m4_joinall([--], m4_map([, m4_echo],
+ m4_dquote([1]m4_for([i], [2], [10000], [], [,i])))))
+m4_max(m4_min([1]m4_for([i], [2], [10000], [],
+ [,i]))m4_for([i], [2], [10000], [], [,i]))
+m4_case([10000]m4_for([i], [1], [10000], [], [,i]),[end])
+m4_list_cmp(m4_dquote(1m4_for([i], [2], [10000], [], [,i])),
+ m4_dquote(m4_reverse(10000m4_for([i], [9999], [1], [], [,i])), [0]))
+m4_list_cmp([0], [0m4_for([i], [1], [10000], [], [,0])])
+m4_list_cmp([0m4_for([i], [1], [10000], [], [,0])], [0])
+m4_for([i], [1], [10000], [], [m4_define(i)])dnl
+m4_undefine(1m4_for([i], [2], [10000], [], [,i]))dnl
+m4_bpatsubsts([a1]m4_for([i], [1], [10000], [], [,i]), [a2], [A])
+m4_bmatch([9997]m4_for([i], [1], [10000], [], [,^i$]))
+m4_define([up], [m4_define([$1], m4_incr($1))$1])m4_define([j], 0)dnl
+m4_cond(m4_for([i], [1], [10000], [], [[up([j])], [9990], i,]) [oops]) j
+m4_count(m4_map_args_pair([,m4_quote], []m4_map_args([,m4_echo]m4_for([i],
+ [1], [10000], [], [,i]))))
+m4_divert_pop([])
+]])
+
+AT_CHECK_M4SUGAR([-o-], [0], [[48894
+9999,10000
+78896
+58894
+10000
+end
+0
+0
+0
+A
+^9998$
+9990 9990
+5001
+]])
+
+AT_DATA_M4SUGAR([script.4s],
+[[m4_ifdef([__m4_version__],
+[m4_undefine([__m4_version__])],
+[m4_divert_push([])48894
+9999,10000
+78896
+58894
+10000
+end
+0
+0
+0
+A
+^9998$
+9990 9990
+5001
+m4_exit([0])])
+m4_init
+m4_divert_push([])[]dnl
+m4_len(m4_foreach_w([j], m4_do(m4_for([i], [1], [10000], [], [,i ])), [j ]))
+m4_shiftn(9998m4_for([i], [1], [10000], [], [,i]))
+m4_len(m4_join([--],, m4_dquote_elt(m4_for([i], [1], [10000], [], [,i])),))
+m4_len(m4_joinall([--], m4_map([, m4_echo],
+ m4_dquote([1]m4_for([i], [2], [10000], [], [,i])))))
+m4_max(m4_min([1]m4_for([i], [2], [10000], [],
+ [,i]))m4_for([i], [2], [10000], [], [,i]))
+m4_case([10000]m4_for([i], [1], [10000], [], [,i]),[end])
+m4_list_cmp(m4_dquote(1m4_for([i], [2], [10000], [], [,i])),
+ m4_dquote(m4_reverse(10000m4_for([i], [9999], [1], [], [,i])), [0]))
+m4_list_cmp([0], [0m4_for([i], [1], [10000], [], [,0])])
+m4_list_cmp([0m4_for([i], [1], [10000], [], [,0])], [0])
+m4_for([i], [1], [10000], [], [m4_define(i)])dnl
+m4_undefine(1m4_for([i], [2], [10000], [], [,i]))dnl
+m4_bpatsubsts([a1]m4_for([i], [1], [10000], [], [,i]), [a2], [A])
+m4_bmatch([9997]m4_for([i], [1], [10000], [], [,^i$]))
+m4_define([up], [m4_define([$1], m4_incr($1))$1])m4_define([j], 0)dnl
+m4_cond(m4_for([i], [1], [10000], [], [[up([j])], [9990], i,]) [oops]) j
+m4_count(m4_map_args_pair([,m4_quote], []m4_map_args([,m4_echo]m4_for([i],
+ [1], [10000], [], [,i]))))
+m4_divert_pop([])
+]])
+
+AT_CHECK_M4SUGAR([-o-], [0], [[48894
+9999,10000
+78896
+58894
+10000
+end
+0
+0
+0
+A
+^9998$
+9990 9990
+5001
+]])
+
+AT_CLEANUP
+
+
+## ---------- ##
+## m4_set_*. ##
+## ---------- ##
+
+AT_SETUP([m4@&t@_set])
+
+AT_KEYWORDS([m4@&t@_set_add m4@&t@_set_add_all m4@&t@_set_contains
+m4@&t@_set_contents m4@&t@_set_delete m4@&t@_set_difference m4@&t@_set_dump
+m4@&t@_set_empty m4@&t@_set_foreach m4@&t@_set_intersection m4@&t@_set_list
+m4@&t@_set_listc m4@&t@_set_map m4@&t@_set_remove m4@&t@_set_size
+m4@&t@_set_union])
+
+# Simple tests
+AT_CHECK_M4SUGAR_TEXT([[m4_set_contains([a], [1], [yes], [no])
+m4_set_add([a], [1], [added], [dup])
+m4_set_contains([a], [1], [yes], [no])
+m4_set_add([a], [1], [added], [dup])
+m4_set_contents([a])
+m4_set_remove([a], [1], [removed], [missing])
+m4_set_contains([a], [1], [yes], [no])
+m4_set_remove([a], [1], [removed], [missing])
+m4_set_add([a], [2], [added], [dup])
+m4_set_empty([a], [yes], [no])
+m4_set_delete([a])
+m4_set_empty([a], [yes], [no])
+m4_set_add_all([c], [1], [2], [3])
+m4_set_add_all([a]m4_set_listc([c]))
+m4_set_contents([c], [-])
+m4_set_dump([a], [-])
+m4_set_contents([a])
+m4_set_add_all([a], [1], [2], [3])m4_set_add_all([b], [3], [], [4])
+m4_set_difference([a], [b])
+m4_set_difference([b], [a])
+m4_set_intersection([a], [b])
+m4_set_union([a], [b])
+m4_define([printodd], [m4_if(m4_eval([$1 & 1]), [1], [:$1])])dnl
+m4_set_map([a], [printodd])
+m4_set_foreach([a], [i], [m4_if(m4_eval(i & 1), [1], [m4_set_remove([a], i)])])
+m4_set_list([a])
+m4_set_add([a], [])
+m4_set_list([a])
+m4_set_remove([a], [2])
+m4_dquote(m4_set_list([a]))
+m4_set_listc([a])
+m4_set_size([a])
+m4_set_delete([a])
+m4_dquote(m4_set_list([a]))
+m4_indir([m4_dquote]m4_set_listc([a]))
+m4_set_listc([a])
+m4_set_size([a])
+]], [[no
+added
+yes
+dup
+1
+removed
+no
+missing
+added
+no
+
+yes
+
+
+1-2-3
+3-2-1
+
+
+,1,2
+,,4
+,3
+,1,2,3,,4
+:1:3
+
+2
+
+2,
+
+[]
+,
+1
+
+[]
+
+
+0
+]])
+
+# Stress tests - check for unusual names/values
+AT_CHECK_M4SUGAR_TEXT([[m4_define([a], [oops])dnl
+m4_set_add([a], [a])dnl
+m4_set_remove([a], [oops], [yes], [no])
+m4_set_add([a,b], [c])dnl
+m4_set_add([a,b], [$*[]])dnl
+m4_set_add_all([a], [b,c])dnl
+m4_set_size([a])
+m4_count(m4_set_contents([a], [,]))
+m4_count(m4_set_list([a], [,]))
+m4_set_dump([a], [,])
+m4_set_contents([a,b], [,])
+m4_set_list([a,b])
+m4_set_foreach([$*[]], [$*[]], [oops])
+m4_set_add([$*[]], [])dnl
+m4_set_remove([$*[]], [a], [yes], [no])
+m4_set_add([$*[]], [a])dnl
+m4_set_foreach([$*[]], [$*[]], [-m4_defn([$*[]])m4_indir([$*[]])-])
+m4_set_remove([$*[]], [], [yes], [no])
+m4_set_add([c], [,])dnl
+m4_set_foreach([a,b], [set], [:m4_set_listc(_m4_defn([set])):])
+]],[[no
+2
+1
+2
+b,c,a
+c,$*[]
+c,$*[]
+
+no
+---aoops-
+yes
+:,,::,a:
+]])
+
+# Stress tests - check for linear scaling (won't necessarily fail if
+# quadratic, but hopefully users will complain if it appears to hang)
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_for([i], [1], [10000], [], [m4_set_add([a], i)])dnl
+m4_set_add_all([b]m4_for([i], [1], [10000], [], [,i]))dnl
+m4_set_remove([a], [1])dnl
+m4_set_remove([b], [10000])dnl
+m4_set_add_all([a]m4_for([i], [1], [10000], [], [,i]))dnl
+m4_for([i], [1], [10000], [], [m4_set_add([b], i)])dnl
+m4_len(m4_set_contents([a]))
+m4_len(m4_set_foreach([b], [b], [m4_if(m4_eval(b & 1), [1],
+ [m4_set_remove([b], b, [-])])]))
+m4_set_size([b])
+m4_define([prune3x], [m4_if(m4_eval([$1 % 3]), [0],
+ [m4_set_remove([a], [$1], [-])])])dnl
+m4_len(m4_set_map([a], [prune3x]))
+m4_count(m4_shift(m4_set_intersection([a], [b])))
+]], [[38894
+5000
+5000
+3333
+3334
+]])
+
+AT_CLEANUP
+
+
+## ---------------------- ##
+## __file__ and __line__. ##
+## ---------------------- ##
+
+AT_SETUP([[__file__ and __line__]])
+
+# Check that __file__ and __line__ work.
+# Check that m4__file__ and m4__line__ are not defined
+# (and get them to pass by the undefined-macro check).
+# Try to not assume too much about AT_CHECK_M4SUGAR_TEXT.
+AT_CHECK_M4SUGAR_TEXT([[dnl
+m4_pattern_allow([m4__file__])dnl
+m4_pattern_allow([m4__line__])dnl
+m4__file__
+m4__line__
+__file__
+m4_define([first], __line__)dnl
+m4_define([second], __line__)dnl
+m4_assert(first + 1 == second)dnl
+]], [[m4@&t@__@&t@file__
+m4@&t@__@&t@line__
+script.4s
+]])
+
+AT_CLEANUP
diff --git a/tests/mktests.sh b/tests/mktests.sh
new file mode 100755
index 0000000..41058e2
--- /dev/null
+++ b/tests/mktests.sh
@@ -0,0 +1,236 @@
+#! /bin/sh
+
+# Build some of the Autoconf test files.
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# If we fail, clean up, but touch the output files. We probably failed
+# because we used some non-portable tool.
+
+as_me=`echo "$0" | sed 's|.*[\\/]||'`
+
+trap 'echo "'"$as_me"': failed." >&2
+ rm -f acdefuns audefuns requires *.tat
+ trap "" 0
+ exit 1' \
+ 0 1 2 15
+
+# If ever something goes wrong, fail, so that the trap is launched.
+set -e
+
+# We need arguments.
+test $# != 0
+
+# We need these arguments.
+src="$@"
+
+# Set locale to C so that `sort' behaves in a uniform way.
+LANGUAGE=C; export LANGUAGE
+LANG=C; export LANG
+LC_ALL=C export LC_ALL
+
+
+# requires
+# --------
+# Get the list of macros that are required: there is little interest
+# in testing them since they will be run by the guy who requires them.
+sed -n 's/dnl.*//;s/.*AC_REQUIRE(\[*\([a-zA-Z0-9_]*\).*$/\1/p' $src |
+ sort -u >requires
+
+
+# exclude_list
+# ------------
+# Macros which must not be checked at all (not with AT_CHECK_MACRO nor
+# AT_CHECK_AU_MACRO).
+exclude_list='
+ # Not a macro name at all.
+ /^$/ {next}
+
+ # Not macros, just mapping from old variable name to a new one.
+ /^ac_cv_prog_(gcc|gxx|g77)$/ {next}
+'
+
+
+# ac_exclude_list
+# ---------------
+# We try to test all the Autoconf macros with AT_CHECK_MACRO to check
+# for syntax problems, etc. Not every macros can be run without
+# arguments, and some are already tested elsewhere. AC_EXCLUDE_LIST
+# filters out the macros we don't want to test.
+ac_exclude_list='
+ # Internal macros are used elsewhere.
+ /^_?_AC_/ {next}
+
+ # Used in many places.
+ /^AC_.*_IFELSE$/ {next}
+ /^AC_LANG/ {next}
+ /^AC_RUN_LOG$/ {next}
+ /^AC_TRY/ {next}
+
+ # Need an argument.
+ /^AC_(CANONICALIZE|PREFIX_PROGRAM|PREREQ)$/ {next}
+ /^AC_(SEARCH_LIBS|REPLACE_FUNCS)$/ {next}
+ /^AC_(CACHE_CHECK|COMPUTE)_INT$/ {next}
+ /^AC_ARG_VAR$/ {next}
+ /^AC_REQUIRE_SHELL_FN$/ {next}
+
+ # Performed in the semantics tests.
+ /^AC_CHECK_(ALIGNOF|DECL|FILE|FUNC|HEADER|LIB|MEMBER|PROG|SIZEOF|(TARGET_)?TOOL|TYPE)S?$/ {next}
+ /^AC_PATH_PROGS_FEATURE_CHECK$/ {next}
+
+ # Fail when the source does not exist.
+ /^AC_CONFIG/ {next}
+
+ # AU defined to nothing.
+ /^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$/ {next}
+
+ # Produce "= val" because $1, the variable used to store the result,
+ # is empty.
+ /^AC_(F77|FC)_FUNC$/ {next}
+ /^AC_FC_(PP_)?SRCEXT$/ {next}
+ /^AC_PATH_((TARGET_)?TOOL|PROG)S?$/ {next}
+
+ # Is a number.
+ /^AC_FD_CC$/ {next}
+
+ # Obsolete, but needs to be AC_DEFUNed.
+ /^AC_FOREACH$/ {next}
+
+ # Require a file that is not shipped with Autoconf. But it should.
+ /^AC_FUNC_(GETLOADAVG|FNMATCH_GNU)$/ {next}
+ /^AC_REPLACE_FNMATCH$/ {next}
+
+ # Obsolete, checked in semantics.
+ /^AC_FUNC_WAIT3$/ {next}
+ /^AC_FUNC_SETVBUF_REVERSED$/ {next}
+ /^AC_SYS_RESTARTABLE_SYSCALLS$/ {next}
+
+ # Not intended to be invoked at the top level.
+ /^AC_INCLUDES_DEFAULT$/ {next}
+
+ # AC_INIT includes all the AC_INIT macros.
+ # There is an infinite m4 recursion if AC_INIT is used twice.
+ /^AC_INIT/ {next}
+
+ # Checked in semantics.
+ /^AC_(PROG_CC|C_CONST|C_VOLATILE)$/ {next}
+ /^AC_PATH_XTRA$/ {next}
+
+ # Requires a working C++ compiler, which is not a given.
+ /^AC_PROG_CXX_C_O$/ {next}
+
+ # Already tested by AT_CHECK_MACRO.
+ /^AC_OUTPUT$/ {next}
+
+ # Tested alongside m4_divert_text.
+ /^AC_PRESERVE_HELP_ORDER$/ {next}
+'
+
+
+# ac_exclude_script
+# -----------------
+# Build a single awk script out of the above.
+ac_exclude_script="$exclude_list $ac_exclude_list {print}"
+
+
+# au_exclude_list
+# ---------------
+# Check all AU_DEFUN'ed macros with AT_CHECK_AU_MACRO, except these.
+au_exclude_list='
+ # Empty.
+ /^AC_(C_CROSS|PROG_CC_STDC)$/ {next}
+
+ # Use AC_REQUIRE.
+ /^AC_(CYGWIN|MINGW32|EMXOS2)$/ {next}
+
+ # Already in configure.ac.
+ /^AC_(INIT|OUTPUT)$/ {next}
+
+ # AC_LANG_SAVE needs user interaction to be removed.
+ # AC_LANG_RESTORE cannot be used alone.
+ /^AC_LANG_(SAVE|RESTORE)$/ {next}
+
+ # Need arguments and are tested elsewhere.
+ /^AC_(LINK_FILES|PREREQ)$/ {next}
+'
+
+# au_exclude_script
+# -----------------
+# Build a single awk script out of the above.
+au_exclude_script="$exclude_list $au_exclude_list {print}"
+
+
+## ------------------------- ##
+## Creating the test files. ##
+## ------------------------- ##
+
+for file in $src
+do
+ base=`echo "$file" | sed 's|.*[\\/]||;s|\..*||'`
+ # Get the list of macros which are defined in Autoconf level.
+ # Get rid of the macros we are not interested in.
+ sed -n -e 's/^AC_DEFUN(\[*\([a-zA-Z0-9_]*\).*$/\1/p' \
+ -e 's/^AC_DEFUN_ONCE(\[*\([a-zA-Z0-9_]*\).*$/\1/p' $file |
+ awk "$ac_exclude_script" |
+ sort -u >acdefuns
+
+ # Get the list of macros which are defined in Autoupdate level.
+ sed -n 's/^AU_DEFUN(\[*\([a-zA-Z][a-zA-Z0-9_]*\).*$/\1/p' $file |
+ awk "$au_exclude_script" |
+ sort -u >audefuns
+
+ # Filter out required macros.
+ {
+ sed 's/^ *//' <<MK_EOF
+ # Generated by $as_me. -*- Autotest -*-
+
+ ## --------------------- ##
+ ## Do not edit by hand. ##
+ ## --------------------- ##
+
+ # Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+ # 2010 Free Software Foundation, Inc.
+
+ AT_BANNER([Testing autoconf/$base macros.])
+
+MK_EOF
+
+ echo "# Modern macros."
+ comm -23 acdefuns requires | sed 's/.*/AT_CHECK_MACRO([&])/'
+ echo
+ echo "# Obsolete macros."
+ comm -23 audefuns requires | sed 's/.*/AT_CHECK_AU_MACRO([&])/'
+ } >ac$base.tat
+
+ # In one atomic step so that if something above fails, the trap
+ # preserves the old version of the file. If there is nothing to
+ # check, output /rien du tout/[1].
+ if grep AT_CHECK ac$base.tat >/dev/null 2>&1; then
+ mv -f ac$base.tat ac$base.at
+ else
+ rm -f ac$base.tat ac$base.at
+ touch ac$base.at
+ fi
+ # Help people not to update these files by hand.
+ chmod a-w ac$base.at
+done
+
+rm -f acdefuns audefuns requires
+
+trap '' 0
+exit 0
+
+# [1] En franc,ais dans le texte.
diff --git a/tests/mktests.stamp b/tests/mktests.stamp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/mktests.stamp
diff --git a/tests/semantics.at b/tests/semantics.at
new file mode 100644
index 0000000..de54cf8
--- /dev/null
+++ b/tests/semantics.at
@@ -0,0 +1,746 @@
+# -*- Autotest -*-
+
+AT_BANNER([Semantics.])
+
+# Copyright (C) 2000-2002, 2004-2007, 2009-2012 Free Software
+# Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+## -------------------------------- ##
+## Members of the AC_CHECK family. ##
+## -------------------------------- ##
+
+
+# AC_CHECK_LIB
+# ------------
+# Well, I can't imagine a system where `cos' is neither in libc, nor
+# in libm. Nor can I imagine a lib more likely to exists than libm.
+# But there are systems without libm, on which we don't want to have
+# this test fail, so exit successfully if `cos' is in libc.
+AT_CHECK_MACRO([AC_CHECK_LIB],
+[AC_TRY_LINK_FUNC(cos,
+ [AC_MSG_ERROR([`cos' is in `libc'], 77)])
+
+AC_CHECK_LIB(m, cos,,
+ [AC_MSG_ERROR([cannot find `cos' in `libm'])])
+
+# No kidding, using variables was broken in 2.50 :(
+ac_sin=sin
+AC_CHECK_LIB(m, $ac_sin,,
+ [AC_MSG_ERROR([cannot find `\$ac_sin' (= `$ac_sin') in `libm'])])
+
+ac_m=m
+AC_CHECK_LIB($ac_m, acos,,
+ [AC_MSG_ERROR([cannot find `acos' in `\$ac_m' (= `$ac_m')])])
+
+ac_asin=asin
+AC_CHECK_LIB($ac_m, $ac_asin,,
+ [AC_MSG_ERROR([cannot find `\$ac_asin' (= `$ac_asin') in `\$ac_m' (= `$ac_m')])])
+
+# But if the bug is in the caching mechanism, then be sure we
+# correctly detect failures.
+
+AC_CHECK_LIB(m, cossack,
+ [AC_MSG_ERROR([found `cossack' in `libm'])])
+
+# No kidding, using variables was broken in 2.50 :(
+ac_sinner=sinner
+AC_CHECK_LIB(m, $ac_sinner,
+ [AC_MSG_ERROR([found `\$ac_sinner' (= `$ac_sinner') in `libm'])])
+
+ac_m=m
+AC_CHECK_LIB($ac_m, acossack,
+ [AC_MSG_ERROR([found `acossack' in `\$ac_m' (= `$ac_m')])])
+
+ac_asinner=asinner
+AC_CHECK_LIB($ac_m, $ac_asinner,
+ [AC_MSG_ERROR([found `\$ac_asinner' (= `$ac_asinner') in `\$ac_m' (= `$ac_m')])])
+
+])
+
+
+# AC_SEARCH_LIBS
+# --------------
+AT_CHECK_MACRO([AC_SEARCH_LIBS],
+[
+AC_SEARCH_LIBS(cos, oser m ust,,
+ [AC_MSG_ERROR([cannot find `cos'])])
+
+case "$ac_cv_search_cos" in
+ -loser|-lust) AC_MSG_ERROR([jeez, $ac_cv_search_cos must be a cool library!]) ;;
+esac
+])
+
+
+# AC_SEARCH_LIBS (none needed)
+# ----------------------------
+AT_CHECK_MACRO([AC_SEARCH_LIBS (none needed)],
+[
+AC_SEARCH_LIBS(printf, oser c ust,,
+ [AC_MSG_ERROR([cannot find `printf'])])
+
+case "$ac_cv_search_printf" in
+ -loser|-lust) AC_MSG_ERROR([jeez, $ac_cv_search_printf must be a cool library!]) ;;
+ -lc) AC_MSG_ERROR([huh, you need to give -lc?])
+esac
+])
+
+
+# AC_CHECK_DECLS
+# --------------
+# Check that it performs the correct actions:
+AT_CHECK_MACRO([AC_CHECK_DECLS],
+[[AC_CHECK_DECLS([yes, no, myenum, mystruct, myfunc, mymacro1, mymacro2],,,
+ [[int yes = 1;
+ enum { myenum };
+ struct { int x[20]; } mystruct;
+ extern int myfunc();
+ #define mymacro1(arg) arg
+ #define mymacro2]])
+ # The difference in space-before-open-paren is intentional.
+ AC_CHECK_DECLS([basenam (char *), dirnam(char *),
+ [moreargs (char, short, int, long, void *, char [], float, double)]],,,
+ [[#ifdef __cplusplus
+ extern "C++" char *basenam (char *);
+ extern "C++" const char *basenam (const char *);
+ #else
+ extern char *basenam (const char *);
+ #endif
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ extern int moreargs (char, short, int, long, void *,
+ char [], float, double);
+ #ifdef __cplusplus
+ }
+ #endif
+ ]])
+ AC_CHECK_DECL([declared (char *)],, [AS_EXIT([1])],
+ [[#ifdef __cplusplus
+ extern "C++" char *declared (char *);
+ extern "C++" const char *declared (const char *);
+ #else
+ extern char *declared (const char *);
+ #endif
+ ]])
+ AC_CHECK_DECL([undeclared (char *)], [AS_EXIT([1])],, [[]])
+]],
+[AT_CHECK_DEFINES(
+[#define HAVE_DECL_BASENAM 1
+#define HAVE_DECL_DIRNAM 0
+#define HAVE_DECL_MOREARGS 1
+#define HAVE_DECL_MYENUM 1
+#define HAVE_DECL_MYFUNC 1
+#define HAVE_DECL_MYMACRO1 1
+#define HAVE_DECL_MYMACRO2 1
+#define HAVE_DECL_MYSTRUCT 1
+#define HAVE_DECL_NO 0
+#define HAVE_DECL_YES 1
+])])
+
+
+# AC_CHECK_FUNCS
+# --------------
+# Check that it performs the correct actions:
+# Must define HAVE_PRINTF, but not HAVE_AUTOCONF_FTNIRP
+AT_CHECK_MACRO([AC_CHECK_FUNCS],
+[AC_CHECK_FUNCS(printf autoconf_ftnirp)],
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_FTNIRP */
+#define HAVE_PRINTF 1
+])])
+
+
+# AC_REPLACE_FUNCS
+# ----------------
+# Check that it performs the correct actions: autoconf_ftnirp.c must
+# be compiled, and must define HAVE_PRINTF, but not HAVE_AUTOCONF_FTNIRP
+# FIXME: Maybe check the traces?
+AT_SETUP([AC_REPLACE_FUNCS])
+
+AT_DATA([config.in],
+[@LIBOBJS@
+])
+
+AT_CONFIGURE_AC(
+[AC_CONFIG_FILES([config.libobjs:config.in])
+AC_REPLACE_FUNCS([printf \
+autoconf_ftnirp])
+funcs='fprintf fopen autoconf_ftnirpf'
+AH_TEMPLATE([HAVE_FOPEN], [])
+AH_TEMPLATE([HAVE_FPRINTF], [])
+AH_TEMPLATE([HAVE_AUTOCONF_FTNIRPF], [])
+AC_REPLACE_FUNCS([\
+$funcs])
+AS_UNSET([funcs])])
+
+AT_CHECK_AUTOCONF([-W obsolete])
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+AT_CHECK_ENV
+AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_FTNIRP */
+/* #undef HAVE_AUTOCONF_FTNIRPF */
+#define HAVE_FOPEN 1
+#define HAVE_FPRINTF 1
+#define HAVE_PRINTF 1
+])
+
+AT_CHECK([sed 's/ */ /g;s/^ //;s/ $//' config.libobjs], [],
+ [${LIBOBJDIR}autoconf_ftnirp$U.o ${LIBOBJDIR}autoconf_ftnirpf$U.o
+])
+
+AT_CLEANUP
+
+
+# AC_CHECK_HEADERS
+# ----------------
+# Check that it performs the correct actions:
+# Must define HAVE_STDIO_H, but not HAVE_AUTOCONF_IO_H.
+AT_SETUP([AC_CHECK_HEADERS])
+
+AT_DATA([autoconf_io.h],
+[blah blah
+])
+
+AT_CONFIGURE_AC([AC_CHECK_HEADERS(stdio.h autoconf_io.h)])
+AT_CHECK_AUTOCONF([-W obsolete])
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE([CPPFLAGS=-I.], [0], [ignore],
+[configure: WARNING: autoconf_io.h: present but cannot be compiled
+configure: WARNING: autoconf_io.h: check for missing prerequisite headers?
+configure: WARNING: autoconf_io.h: see the Autoconf documentation
+configure: WARNING: autoconf_io.h: section "Present But Cannot Be Compiled"
+configure: WARNING: autoconf_io.h: proceeding with the compiler's result
+])
+AT_CHECK_ENV
+AT_CHECK_DEFINES(
+[/* #undef HAVE_AUTOCONF_IO_H */
+#define HAVE_STDIO_H 1
+])
+
+AT_CLEANUP
+
+
+# AC_CHECK_HEADERS_OLD
+# --------------------
+# Check that it performs the correct actions:
+# Must not check prerequisites, hence define header2.h
+AT_SETUP([AC_CHECK_HEADERS (preprocessor test)])
+
+AT_DATA([header1.h],
+[typedef int foo;
+])
+
+AT_DATA([header2.h],
+[typedef foo bar;
+])
+
+AT_CONFIGURE_AC([AC_CHECK_HEADERS(header2.h, [], [], -)])
+
+AT_CHECK_AUTOCONF([-W obsolete])
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE([CPPFLAGS=-I.])
+AT_CHECK_ENV
+AT_CHECK_DEFINES(
+[#define HAVE_HEADER2_H 1
+])
+
+AT_CLEANUP
+
+
+# AC_CHECK_HEADERS_NEW
+# --------------------
+# Check that it performs the correct actions:
+# Must check prerequisites, hence define header2.h but not header3.h
+AT_SETUP([AC_CHECK_HEADERS (compiler test)])
+
+AT_DATA([header1.h],
+[typedef int foo;
+])
+
+AT_DATA([header2.h],
+[typedef foo bar;
+])
+
+AT_DATA([header3.h],
+[typedef bar wow;
+])
+
+AT_CONFIGURE_AC(
+[AC_CHECK_HEADERS(header2.h header3.h, [], [], [[@%:@include "header1.h"]])])
+
+AT_CHECK_AUTOCONF([-W obsolete])
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE([CPPFLAGS=-I.])
+AT_CHECK_ENV
+AT_CHECK_DEFINES(
+[#define HAVE_HEADER2_H 1
+/* #undef HAVE_HEADER3_H */
+])
+
+AT_CLEANUP
+
+
+# AC_CHECK_MEMBER
+# ---------------
+# Check that it performs the correct actions.
+# Must define HAVE_STRUCT_YES_S_YES, but not HAVE_STRUCT_YES_S_NO.
+AT_CHECK_MACRO([AC_CHECK_MEMBER],
+[[AC_CHECK_MEMBER([struct yes_s.yes],
+ [AC_DEFINE([HAVE_STRUCT_YES_S_YES], [1],
+ [Define to 1 if `yes' is a member of `struct yes_s'.])],,
+ [struct sub { int x; };
+ struct yes_s { int yes; struct sub substruct; };])
+ AC_CHECK_MEMBER([struct yes_s.no],
+ [AC_DEFINE([HAVE_STRUCT_YES_S_NO], [1],
+ [Define to 1 if `no' is a member of `struct yes_s'.])],,
+ [struct sub { int x; };
+ struct yes_s { int yes; struct sub substruct; };])
+ AC_CHECK_MEMBER([struct yes_s.substruct],
+ [AC_DEFINE([HAVE_STRUCT_YES_S_SUBSTRUCT], [1],
+ [Define to 1 if `substruct' is a member of `struct yes_s'.])],,
+ [struct sub { int x; };
+ struct yes_s { int yes; struct sub substruct; };])]],
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_STRUCT_YES_S_NO */
+#define HAVE_STRUCT_YES_S_SUBSTRUCT 1
+#define HAVE_STRUCT_YES_S_YES 1
+])])
+
+# AC_CHECK_MEMBERS
+# ----------------
+# Check that it performs the correct actions.
+# Must define HAVE_STRUCT_YES_S_YES, but not HAVE_STRUCT_YES_S_NO.
+AT_CHECK_MACRO([AC_CHECK_MEMBERS],
+[[AC_CHECK_MEMBERS([struct yes_s.yes, struct yes_s.no, struct yes_s.substruct],,,
+ [struct sub { int x; };
+ struct yes_s { int yes; struct sub substruct; };])]],
+[AT_CHECK_DEFINES(
+[/* #undef HAVE_STRUCT_YES_S_NO */
+#define HAVE_STRUCT_YES_S_SUBSTRUCT 1
+#define HAVE_STRUCT_YES_S_YES 1
+])
+AT_CHECK([grep 'yes.*member of.*yes_s' config.h], [], [ignore])
+])
+
+
+# AC_CHECK_ALIGNOF
+# ----------------
+AT_CHECK_MACRO_CROSS([AC_CHECK_ALIGNOF],
+[[AC_CHECK_ALIGNOF(char)
+AC_CHECK_ALIGNOF(charchar,
+[[#include <stddef.h>
+#include <stdio.h>
+typedef char charchar[2];]])
+AC_CHECK_ALIGNOF(charcharchar)
+]],
+[AT_CHECK_DEFINES(
+[#define ALIGNOF_CHAR 1
+#define ALIGNOF_CHARCHAR 1
+#define ALIGNOF_CHARCHARCHAR 0
+])])
+
+
+# AC_CHECK_ALIGNOF struct
+# -----------------------
+AT_CHECK_MACRO_CROSS([AC_CHECK_ALIGNOF struct],
+[[AC_CHECK_ALIGNOF([struct { char c; }])
+AC_CHECK_ALIGNOF([struct nosuchstruct])
+]],
+[AT_CHECK([[grep "#define ALIGNOF_STRUCT___CHAR_C___ [1-9]" config.h]],
+ 0, ignore)
+AT_CHECK([[grep "#define ALIGNOF_STRUCT_NOSUCHSTRUCT 0" config.h]],
+ 0, ignore)
+])
+
+# AC_CHECK_SIZEOF
+# ---------------
+AT_CHECK_MACRO_CROSS([AC_CHECK_SIZEOF],
+[[AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(charchar,,
+[[#include <stdio.h>
+typedef char charchar[2];]])
+AC_CHECK_SIZEOF(charcharchar)
+]],
+[AT_CHECK_DEFINES(
+[#define SIZEOF_CHAR 1
+#define SIZEOF_CHARCHAR 2
+#define SIZEOF_CHARCHARCHAR 0
+])])
+
+
+# AC_CHECK_SIZEOF struct
+# ----------------------
+AT_CHECK_MACRO_CROSS([AC_CHECK_SIZEOF struct],
+[[AC_C_CONST
+AC_CHECK_SIZEOF([struct x], [], [struct x { char c; int x; };])
+AC_CHECK_SIZEOF([const struct x], [], [struct x { const char *p; int x; };])
+AC_CHECK_SIZEOF([struct nosuchstruct])
+# Taken from autoconf.texi:Generic Compiler Characteristics.
+AC_CHECK_SIZEOF([int *])
+]],
+[AT_CHECK([[grep "#define SIZEOF_STRUCT_X [1-9]" config.h]],
+ 0, ignore)
+AT_CHECK([[grep "#define SIZEOF_CONST_STRUCT_X [1-9]" config.h]],
+ 0, ignore)
+AT_CHECK([[grep "#define SIZEOF_STRUCT_NOSUCHSTRUCT 0" config.h]],
+ 0, ignore)
+AT_CHECK([[grep "#define SIZEOF_INT_P [1-9]" config.h]],
+ 0, ignore)
+])
+
+
+# AC_CHECK_TYPES
+# --------------
+# Check that it performs the correct actions.
+# Must define HAVE_STRUCT_YES_S, HAVE_INT, but not HAVE_STRUCT_NO_S.
+# `int' and `struct yes_s' are both checked to test both the compiler
+# builtin types, and defined types.
+AT_CHECK_MACRO([AC_CHECK_TYPES],
+[[AC_CHECK_TYPES([int, struct yes_s, struct no_s],,,
+ [struct yes_s { int yes ;} ;])]],
+[AT_CHECK_DEFINES(
+[#define HAVE_INT 1
+/* #undef HAVE_STRUCT_NO_S */
+#define HAVE_STRUCT_YES_S 1
+])])
+
+
+# AC_CHECK_TYPES
+# --------------
+# Check that we properly dispatch properly to the old implementation
+# or to the new one.
+AT_SETUP([AC_CHECK_TYPES: backward compatibility])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+define([_AC_CHECK_TYPE_NEW], [NEW])
+define([_AC_CHECK_TYPE_OLD], [OLD])
+#(cut-from-here
+AC_CHECK_TYPE(ptrdiff_t)
+AC_CHECK_TYPE(ptrdiff_t, int)
+AC_CHECK_TYPE(quad, long long int)
+AC_CHECK_TYPE(table_42, [int[42]])
+# Nice machine!
+AC_CHECK_TYPE(uint8_t, uint65536_t)
+AC_CHECK_TYPE(a,b,c,d)
+#to-here)
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK([[sed -e '/^#(cut-from-here/,/^#to-here)/!d' -e '/^#/d' configure]],
+ 0,
+ [NEW
+OLD
+OLD
+OLD
+OLD
+NEW
+])
+
+AT_CLEANUP
+
+
+# AC_CHECK_FILES
+# --------------
+# FIXME: To really test HAVE_AC_EXISTS2 and HAVE_AC_MISSING2 we need to
+# open AH_TEMPLATE to `configure.ac', which is not yet the case.
+AT_CHECK_MACRO([AC_CHECK_FILES],
+[touch at-exists1 at-exists2
+ac_exists2=at-exists2
+ac_missing2=at-missing2
+AC_CHECK_FILES(at-exists1 at-missing1 $ac_exists2 $ac_missing2)
+rm at-exists1 at-exists2],
+[AT_CHECK_DEFINES(
+[#define HAVE_AT_EXISTS1 1
+/* #undef HAVE_AT_MISSING1 */
+])])
+
+
+
+## ------------------------------ ##
+## AC_CHECK_PROG & AC_PATH_PROG. ##
+## ------------------------------ ##
+
+
+# AT_CHECK_PROGS_PREPARE
+# ----------------------
+# Create a sub directory `path' with 6 subdirs which all 7 contain
+# an executable `tool'. `6' contains a `better' tool.
+m4_define([AT_CHECK_PROGS_PREPARE],
+[mkdir path
+
+cat >path/tool <<\EOF
+#! /bin/sh
+exit 0
+EOF
+chmod +x path/tool
+
+for i in 1 2 3 4 5 6
+do
+ mkdir path/$i
+ cp path/tool path/$i
+done
+cp path/tool path/6/better])
+
+
+# -------------------------------- #
+# AC_CHECK_PROG & AC_CHECK_PROGS. #
+# -------------------------------- #
+
+AT_SETUP([AC_CHECK_PROG & AC_CHECK_PROGS])
+
+AT_CHECK_PROGS_PREPARE
+
+AT_DATA([configure.ac],
+[[AC_INIT
+pwd=`pwd`
+p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
+path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
+fail=false
+
+AC_CHECK_PROG(TOOL1, tool, found, not-found, $path)
+test "$TOOL1" = found || fail=:
+
+# Yes, the semantics of this macro is weird.
+AC_CHECK_PROG(TOOL2, tool,, not-found, $path)
+test "$TOOL2" = not-found || fail=:
+
+AC_CHECK_PROG(TOOL3, tool, tool, not-found, $path, $pwd/path/1/tool)
+test "$TOOL3" = "$pwd/path/2/tool" || fail=:
+
+AC_CHECK_PROG(TOOL4, better, better, not-found, $path, $pwd/path/1/tool)
+test "$TOOL4" = better || fail=:
+
+# When a tool is not found, and no value is given for not-found,
+# the variable is left empty.
+AC_CHECK_PROGS(TOOL5, missing,, $path)
+test -z "$TOOL5" || fail=:
+
+AC_CHECK_PROGS(TOOL6, missing tool better,, $path)
+test "$TOOL6" = tool || fail=:
+
+# No AC-OUTPUT, we don't need config.status.
+$fail &&
+ AC_MSG_ERROR([[CHECK_PROG failed]])
+AS_EXIT(0)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+## ---------------- ##
+## AC_C_BIGENDIAN. ##
+## ---------------- ##
+
+AT_SETUP([AC_C_BIGENDIAN])
+AT_KEYWORDS([cross])
+
+# Make sure that AC_C_BIGENDIAN behave the same whether we are
+# cross-compiling or not.
+
+_AT_CHECK_AC_MACRO(
+ [[AC_C_BIGENDIAN(
+ [ac_endian=big],
+ [ac_endian=little],
+ [ac_endian=unknown],
+ [ac_endian=universal])
+ echo $ac_endian > at-endian
+]])
+
+rm -f config.hin # So that next run of autoheader is quiet.
+_AT_CHECK_AC_MACRO(
+ [[# Force cross compiling.
+ cross_compiling=yes
+ ac_tool_warned=yes
+ AC_C_BIGENDIAN(
+ [ac_endian=big],
+ [ac_endian=little],
+ [ac_endian=unknown],
+ [ac_endian=universal])
+ ac_prevendian=`cat at-endian`
+ # Check that we have found the same result as in the previous run
+ # or unknown (because the cross-compiling check is allowed to fail;
+ # although it might be interesting to suppress this comparison, just
+ # to know on which system it fails if it ever does).
+ if test $ac_endian != $ac_prevendian && test $ac_endian != unknown; then
+ AC_MSG_ERROR([unexpected endianness: first run found '$ac_prevendian' but second run found '$ac_endian'])
+ fi
+]])
+
+# Make sure AC_C_BIGENDIAN with no argument will create a config.h template
+# containing "WORDS_BIGENDIAN".
+AT_CONFIGURE_AC([[AC_C_BIGENDIAN]])
+# --force is necessary, the computer might be too fast.
+AT_CHECK_AUTOHEADER([--force])
+AT_CHECK([grep WORDS_BIGENDIAN config.hin], [], [ignore])
+
+AT_CLEANUP
+
+
+# ------------------------------ #
+# AC_PATH_PROG & AC_PATH_PROGS. #
+# ------------------------------ #
+
+AT_SETUP([AC_PATH_PROG & AC_PATH_PROGS])
+
+AT_CHECK_PROGS_PREPARE
+
+AT_DATA([configure.ac],
+[[AC_INIT
+pwd=`pwd`
+p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
+path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
+fail=false
+
+AC_PATH_PROG(TOOL1, tool, not-found, $path)
+test "$TOOL1" = "$pwd/path/1/tool" || fail=:
+
+AC_PATH_PROG(TOOL2, better, not-found, $path)
+test "$TOOL2" = "$pwd/path/6/better" || fail=:
+
+# When a tool is not found, and no value is given for not-found,
+# the variable is left empty.
+AC_PATH_PROGS(TOOL3, missing,, $path)
+test -z "$TOOL3" || fail=:
+
+AC_PATH_PROGS(TOOL4, missing tool better,, $path)
+test "$TOOL4" = "$pwd/path/1/tool" || fail=:
+
+# No AC-OUTPUT, we don't need config.status.
+$fail &&
+ AC_MSG_ERROR([[PATH_PROG failed]])
+AS_EXIT(0)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+# ----------------------------- #
+# AC_PATH_PROGS_FEATURE_CHECK. #
+# ----------------------------- #
+
+AT_SETUP([AC_PATH_PROGS_FEATURE_CHECK])
+
+# This test doesn't work if `pwd` contains white space
+case `pwd` in
+ *\ * | *\ *) AT_CHECK([exit 77]) ;;
+esac
+
+AT_CHECK_PROGS_PREPARE
+
+AT_DATA([configure.ac],
+[[AC_INIT
+pwd=`pwd`
+p="1${PATH_SEPARATOR}2${PATH_SEPARATOR}3${PATH_SEPARATOR}4${PATH_SEPARATOR}5${PATH_SEPARATOR}6"
+path=`echo $p | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'`
+fail=false
+
+# Find first candidate and stop search
+AC_PATH_PROGS_FEATURE_CHECK(TOOL1, [tool better],
+ [$ac_path_TOOL1 && ac_cv_path_TOOL1=$ac_path_TOOL1 ac_path_TOOL1_found=:],
+ fail=:, $path)
+test -z "$TOOL1" || fail=:
+test "$ac_cv_path_TOOL1" = "$pwd/path/1/tool" || fail=:
+
+# Keep searching each candidate
+AC_PATH_PROGS_FEATURE_CHECK(TOOL2, [tool better],
+ [$ac_path_TOOL2 && ac_cv_path_TOOL2=$ac_path_TOOL2],
+ fail=:, $path)
+test "$ac_cv_path_TOOL2" = "$pwd/path/6/better" || fail=:
+
+# Only accept better candidate
+AC_PATH_PROGS_FEATURE_CHECK(TOOL3, [tool better],
+ [case "$ac_path_TOOL3" in #(
+ *better) ac_cv_path_TOOL3=$ac_path_TOOL3;;
+ esac],
+ fail=:, $path)
+test "$ac_cv_path_TOOL3" = "$pwd/path/6/better" || fail=:
+
+# When a tool is not found, and no action is given for not-found,
+# the variable is left empty.
+AC_PATH_PROGS_FEATURE_CHECK(TOOL4, missing,
+ [ac_cv_path_TOOL4=$ac_path_TOOL4], [], $path)
+test -z "$ac_cv_path_TOOL4" || fail=:
+
+# Test action when tool is not found
+AC_PATH_PROGS_FEATURE_CHECK(TOOL5, missing, [],
+ [ac_cv_path_TOOL5='not found'], $path)
+test "$ac_cv_path_TOOL5" = "not found" || fail=:
+
+# Test that pre-set tool bypasses feature test
+TOOL6=$pwd/path/6/better
+AC_PATH_PROGS_FEATURE_CHECK(TOOL6, tool, fail=:, fail=:, $path)
+test "$ac_cv_path_TOOL6" = "$pwd/path/6/better" || fail=:
+
+# A blank pre-set does not bypass feature test
+TOOL7=
+AC_PATH_PROGS_FEATURE_CHECK(TOOL7, [tool better],
+ [$ac_path_TOOL7 && ac_cv_path_TOOL7=$ac_path_TOOL7 ac_path_TOOL7_found=:],
+ fail=:, $path)
+test -z "$TOOL7" || fail=:
+test "$ac_cv_path_TOOL7" = "$pwd/path/1/tool" || fail=:
+
+# No AC-OUTPUT, we don't need config.status.
+$fail &&
+ AC_MSG_ERROR([[PATH_PROG failed]])
+AS_EXIT(0)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+
+## -------------- ##
+## AC_PATH_XTRA. ##
+## -------------- ##
+
+
+AT_SETUP([AC_PATH_XTRA])
+
+_AT_CHECK_AC_MACRO([AC_PATH_XTRA])
+
+# Check X_DISPLAY_MISSING.
+AT_CHECK_CONFIGURE([--without-x])
+AT_CHECK_DEFINES(
+[#define X_DISPLAY_MISSING 1
+])
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Obsolete non-updatable macros. ##
+## ------------------------------- ##
+
+
+AT_CHECK_MACRO([AC_SYS_RESTARTABLE_SYSCALLS], , ,[-W no-obsolete])
+AT_CHECK_MACRO([AC_FUNC_SETVBUF_REVERSED], , ,[-W no-obsolete])
+AT_CHECK_MACRO([AC_FUNC_WAIT3], , ,[-W no-obsolete])
diff --git a/tests/statesave.m4 b/tests/statesave.m4
new file mode 100644
index 0000000..2f63ae5
--- /dev/null
+++ b/tests/statesave.m4
@@ -0,0 +1,43 @@
+# statesave.m4 serial 2
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# AC_STATE_SAVE(FILE)
+# -------------------
+# Save the shell variables and directory listing. AT_CHECK_ENV uses these to
+# confirm that no test modifies variables outside the Autoconf namespace or
+# leaves temporary files. AT_CONFIG_CMP uses the variable dumps to confirm
+# that tests have the same side effects regardless of caching.
+#
+# The sed script duplicates uniq functionality (thanks to 'info sed
+# uniq' for the recipe), in order to avoid a MacOS 10.5 bug where
+# readdir can list a file multiple times in a rapidly changing
+# directory, while avoiding yet another fork.
+m4_defun([AC_STATE_SAVE],
+[(set) 2>&1 | sort >state-env.$1
+ls | sed '/^at-/d;/^state-/d;/^config\./d
+ h
+ :b
+ $b
+ N
+ /^\(.*\)\n\1$/ {
+ g
+ bb
+ }
+ $b
+ P
+ D' >state-ls.$1
+])# AC_STATE_SAVE
diff --git a/tests/suite.at b/tests/suite.at
new file mode 100644
index 0000000..10c8c4f
--- /dev/null
+++ b/tests/suite.at
@@ -0,0 +1,79 @@
+# Validation suite for Autoconf -*- Autotest -*-
+
+# Copyright (C) 2000-2001, 2003-2005, 2009-2012 Free Software
+# Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Run the tests from the lowest level to the highest level, and from
+# the most selective to the easiest.
+
+# The executables.
+# Even the tests on M4sugar and M4sh use `autoconf', so check it first.
+m4_include([tools.at])
+
+# M4sugar.
+m4_include([m4sugar.at])
+
+# M4sh.m4.
+m4_include([m4sh.at])
+
+# Autotest.
+m4_include([autotest.at])
+
+# Autoconf base macros.
+m4_include([base.at])
+
+# Testing config.status
+# ---------------------
+# Actually should be named config.status.at but I fear problems with
+# the name. Does no `checking ...' at all, but exercises only code
+# which following section use too. Hence, run it first.
+m4_include([torture.at])
+
+# Checking AC_PROG_CC, AC_COMPILE_IFELSE etc.
+m4_include([compile.at])
+
+# Language support.
+m4_include([aclang.at])
+m4_include([c.at])
+m4_include([acc.at])
+m4_include([fortran.at])
+m4_include([acfortran.at])
+m4_include([erlang.at])
+m4_include([go.at])
+m4_include([acgo.at])
+
+# Checking that AC_CHECK_FOO macros work properly.
+m4_include([semantics.at])
+
+# Blind testing the macros.
+# Include them as is suggested for a `configure.ac', as looking for
+# for types requires looking for headers etc.
+m4_include([acgeneral.at])
+m4_include([acstatus.at])
+m4_include([acautoheader.at])
+m4_include([acautoupdate.at])
+m4_include([acspecific.at])
+m4_include([acprograms.at])
+m4_include([acheaders.at])
+m4_include([actypes.at])
+m4_include([acfunctions.at])
+m4_include([aclibs.at])
+
+# Compatibility with foreign tools.
+m4_include([foreign.at])
+
+# Autoscan test
+m4_include([autoscan.at])
diff --git a/tests/tools.at b/tests/tools.at
new file mode 100644
index 0000000..31d4aad
--- /dev/null
+++ b/tests/tools.at
@@ -0,0 +1,1337 @@
+# -*- Autotest -*-
+
+AT_BANNER([Executables (autoheader, autoupdate...).])
+
+# Copyright (C) 2000-2001, 2003-2004, 2006-2012 Free Software
+# Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+## ----------------------------- ##
+## Syntax of the shell scripts. ##
+## ----------------------------- ##
+
+# We use `/bin/sh -n script' to check that there are no syntax errors
+# in the scripts. Although incredible, there are /bin/sh that go into
+# endless loops with `-n', e.g., SunOS's:
+#
+# $ uname -a
+# SunOS ondine 4.1.3 2 sun4m unknown
+# $ cat endless.sh
+# while false
+# do
+# :
+# done
+# exit 0
+# $ time sh endless.sh
+# sh endless.sh 0,02s user 0,03s system 78% cpu 0,064 total
+# $ time sh -nx endless.sh
+# ^Csh -nx endless.sh 3,67s user 0,03s system 63% cpu 5,868 total
+#
+# So before using `/bin/sh -n' to check our scripts, we first check
+# that `/bin/sh -n' is not broken to death.
+
+AT_SETUP([Syntax of the shell scripts])
+
+AT_CHECK([test "$ac_cv_sh_n_works" = yes || exit 77])
+
+# Specify the absolute name of the tool, as some shells don't honor PATH when
+# running `sh PROG'.
+
+AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/bin/autoconf"])
+AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"])
+AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"])
+
+# These are not built, they are in the src tree.
+AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/install-sh"])
+AT_CHECK_SHELL_SYNTAX(["$abs_top_srcdir/build-aux/missing"])
+
+AT_CLEANUP
+
+
+
+
+## ---------------------------- ##
+## Syntax of the Perl scripts. ##
+## ---------------------------- ##
+
+AT_SETUP([Syntax of the Perl scripts])
+
+AT_CHECK_PERL_SYNTAX([autoheader])
+AT_CHECK_PERL_SYNTAX([autom4te])
+AT_CHECK_PERL_SYNTAX([autoreconf])
+AT_CHECK_PERL_SYNTAX([autoscan])
+AT_CHECK_PERL_SYNTAX([autoupdate])
+AT_CHECK_PERL_SYNTAX([ifnames])
+
+AT_CLEANUP
+
+
+
+
+## ------------------ ##
+## autom4te's cache. ##
+## ------------------ ##
+
+AT_SETUP([autom4te cache])
+
+AT_DATA_M4SUGAR([[script.4s]],
+[[m4_include([foo])
+]])
+
+# Everything is OK.
+touch foo
+AT_CHECK_M4SUGAR
+
+# We moved a file: it should fail
+mkdir sub
+mv foo sub
+AT_CHECK_M4SUGAR([], [1], [],
+[m4:script.4s:1: cannot open `foo': No such file or directory
+autom4te: m4 failed with exit status: 1
+])
+
+# But if we change the main file, then we should no longer complain of
+# missing files.
+AT_DATA_M4SUGAR([[script.4s]],
+[[m4_include([sub/foo])
+]])
+AT_CHECK_M4SUGAR
+
+AT_CLEANUP
+
+
+# autom4te --force
+# ----------------
+
+AT_SETUP([autom4te --force])
+
+AT_DATA([file.m4],
+[[right
+]])
+AT_CHECK_AUTOM4TE([-o file file.m4])
+
+# Create a file whose time stamp is in the future.
+# (next year)-01-01 00:01 UTC should always be in the future,
+# even on slow machines.
+echo BAD >file
+this_year=`TZ=UTC0 date +%Y`
+AS_VAR_ARITH([next_year], [$this_year + 1])
+TZ=UTC0 touch -t ${next_year}01010001 file
+
+AT_CHECK_AUTOM4TE([--force -o file file.m4])
+AT_CHECK([cat file], 0,
+[[right
+]])
+
+AT_CLEANUP
+
+
+# autom4te and file names containing whitespace
+# ---------------------------------------------
+
+AT_SETUP([autom4te and whitespace in file names])
+
+x=
+export x
+rm -f a b
+for funny in \
+ 'with funny '\'' $x & #! name' \
+ 'with funny \ '\'' \'\'' " <a >b * ? name ' # "restore font-lock
+do
+ funny=`func_sanitize_file_name "$funny"`
+ file=" file $funny"
+ outfile="$file out "
+ dir=`func_sanitize_dir_name " dir $funny"`
+ cachedir=" cache$dir"
+ TMPDIR=" tmp$dir"
+ export TMPDIR
+
+ # skip if we cannot create such a file or directory
+ AT_CHECK([mkdir "$dir" "$cachedir" "$TMPDIR" && touch "$file" || exit 77])
+
+ cat >"$file" <<'END'
+[m4@&t@_init[]m4@&t@_include(foo.m4)
+m4@&t@_divert([])d@&t@nl
+FOO]
+END
+ cat >"$dir"/foo.m4 <<'END'
+[m4@&t@_define([FOO], [bar])]
+END
+
+ AT_CHECK_AUTOM4TE([-C "$cachedir" -B "$dir" --language=m4sugar -o "$outfile" "$file"])
+ AT_CHECK([cat "$outfile"], [],
+ [[bar
+]])
+ rm -rf "$outfile" "$cachedir"
+ AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"])
+ AT_CHECK([cat "$outfile"], [],
+ [[bar
+]])
+
+ # This exercises a slightly different code path and will catch an open with
+ # trailing whitespace:
+ cat >"$file" <<'END'
+[m4@&t@_init[]m4@&t@_include(foo.m4)
+m4@&t@_pattern_forbid([^bar$])
+m4@&t@_divert([])d@&t@nl
+FOO]
+END
+ rm -rf "$outfile" "$cachedir"
+ AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar -o "$outfile" "$file"],
+ [1], [], [stderr])
+ AT_CHECK([grep 'possibly undefined macro' stderr], [], [ignore])
+
+ cat >"$file" <<'END'
+[m4@&t@_init[]m4@&t@_include(foo.m4)
+m4@&t@_divert([])d@&t@nl]
+END
+ rm -rf "$file.m4f"
+ AT_CHECK_AUTOM4TE([-C "$cachedir" -I "$dir" --language=m4sugar --freeze -o "$file.m4f" "$file"])
+ AT_CHECK([test -s "$file.m4f"])
+
+ # Check --reload-state
+ AT_CHECK_AUTOM4TE([-C "$cachedir" --language=m4sugar -o "$outfile" "$file.m4f" /dev/null])
+
+ test ! -f b
+done
+
+AT_CLEANUP
+
+
+# autom4te --trace and unusual macro names
+# ----------------------------------------
+
+AT_SETUP([autom4te --trace and unusual macro names])
+
+AT_DATA([file.m4],
+[[
+]])
+AT_CHECK_AUTOM4TE([-t 'TR A CE' -t 'TR(A)CE' file.m4])
+
+AT_CLEANUP
+
+
+AT_SETUP([autom4te --trace and whitespace])
+
+dnl line numbering differs between m4 1.4.6 and 1.4.13 if we don't
+dnl go through a single line wrapper
+AT_DATA_M4SUGAR([file.m4],
+[[m4_define([foo], [m4_echo([ a
+b c ], [\
+d\
+])])
+foo
+]])
+AT_CHECK_AUTOM4TE([--language=m4sugar -t 'm4@&t@_echo' file.m4], [0],
+[[file.m4:5:m4@&t@_echo: a b c :d
+]])
+
+AT_CLEANUP
+
+
+## ------------------ ##
+## autoconf --trace. ##
+## ------------------ ##
+
+
+# autoconf --trace: user macros
+# -----------------------------
+AT_SETUP([autoconf --trace: user macros])
+
+AT_DATA([configure.ac],
+[[m4_define([active], [ACTIVE])
+m4_define([TRACE1], [TRACE2(m4_shift($@))])
+m4_define([TRACE2], [[$2], $1])
+
+# No arguments.
+TRACE1
+TRACE2
+
+# With arguments, single line.
+TRACE1(foo, @bar, @baz)
+TRACE1(foo, TRACE1(bar, baz))
+TRACE1(foo, active, baz)
+TRACE1(foo, [active], TRACE1(active, [active]))
+]])
+
+# Several --traces.
+AT_CHECK_AUTOCONF([-t TRACE1 -t TRACE2], 0,
+[[configure.ac:6:TRACE1:
+configure.ac:6:TRACE2:
+configure.ac:7:TRACE2:
+configure.ac:10:TRACE1:foo:@bar:@baz
+configure.ac:10:TRACE2:@bar:@baz
+configure.ac:11:TRACE1:bar:baz
+configure.ac:11:TRACE2:baz
+configure.ac:11:TRACE1:foo::baz
+configure.ac:11:TRACE2::baz
+configure.ac:12:TRACE1:foo:ACTIVE:baz
+configure.ac:12:TRACE2:ACTIVE:baz
+configure.ac:13:TRACE1:ACTIVE:active
+configure.ac:13:TRACE2:active
+configure.ac:13:TRACE1:foo:active::ACTIVE
+configure.ac:13:TRACE2:active::ACTIVE
+]])
+
+# Several line requests.
+AT_CHECK_AUTOCONF([[-t TRACE1:'
+[$1], [$2], [$3].']], 0,
+[[
+[], [], [].
+
+[foo], [@bar], [@baz].
+
+[bar], [baz], [].
+
+[foo], [], [baz].
+
+[foo], [ACTIVE], [baz].
+
+[ACTIVE], [active], [].
+
+[foo], [active], [].
+]])
+
+# ${sep}@.
+AT_CHECK_AUTOCONF([-t TRACE2:'${)===(}@'], 0,
+[[[]
+[]
+[@bar])===([@baz]
+[baz]
+[])===([baz]
+[ACTIVE])===([baz]
+[active]
+[active])===([])===([ACTIVE]
+]])
+
+# Arguments spanning multiple lines.
+AT_DATA([configure.ac],
+[[m4_define([TRACE], [])
+TRACE(foo
+bar,
+bar
+foo)
+]])
+
+AT_CHECK_AUTOCONF([-t TRACE:'$%'], 0,
+[[foo bar:bar foo
+]])
+
+AT_CLEANUP
+
+
+# autoconf --trace: builtins
+# --------------------------
+AT_SETUP([autoconf --trace: builtins])
+
+AT_DATA([configure.ac],
+[[define([active], [ACTIVE])
+]])
+
+AT_CHECK_AUTOCONF([[-t define | sed -n '$p']],
+ 0,
+[[configure.ac:1:define:active:ACTIVE
+]])
+
+# FIXME: Without `$1' the following test dies. Groumphf, once again to
+# dive into obscure feature interaction...
+# Note that using `-i' means we need the *.m4 files, not the *.m4f files,
+# hence we need srcdir, not builddir.
+AT_CHECK_AUTOCONF([[-t define:'$1' -i| sed -n '$p']],
+ 0,
+[[active
+]])
+
+AT_CLEANUP
+
+
+
+## ---------------------------- ##
+## autoconf: forbidden tokens. ##
+## ---------------------------- ##
+
+
+# autoconf: forbidden tokens, basic
+# ---------------------------------
+AT_SETUP([autoconf: forbidden tokens,[] basic])
+
+AT_DATA_M4SH([configure.ac],
+[[AS_INIT
+m4_foo
+_m4_bar
+AS_FOO
+_AS_BAR
+[dnl]
+]])
+
+dnl This test needs autom4te's cache, in spite of any ~/.autom4te.cfg.
+AT_DATA([.autom4te.cfg], [[
+begin-language: "Autoconf"
+args: --cache=autom4te.cache
+end-language: "Autoconf"
+begin-language: "Autoconf-without-aclocal-m4"
+args: --cache=autom4te.cache
+end-language: "Autoconf-without-aclocal-m4"
+]])
+
+AT_CHECK_AUTOCONF([], 1, [],
+[[configure.ac:2: error: possibly undefined macro: m4@&t@_foo
+ If this token and others are legitimate, please use m4@&t@_pattern_allow.
+ See the Autoconf documentation.
+configure.ac:3: error: possibly undefined macro: _m4@&t@_bar
+configure.ac:4: error: possibly undefined macro: AS@&t@_FOO
+configure.ac:5: error: possibly undefined macro: _AS@&t@_BAR
+configure.ac:6: error: possibly undefined macro: d@&t@nl
+]])
+# Second run should succeed and yield no output.
+AT_CHECK([autoconf])
+
+AT_CLEANUP
+
+
+# autoconf: forbidden tokens, exceptions
+# --------------------------------------
+AT_SETUP([autoconf: forbidden tokens,[] exceptions])
+
+AT_DATA_M4SH([configure.ac],
+[[AS_INIT
+
+# This is allowed in spite of the name.
+# It is on purpose that we check the case where there are several
+# tokens on the same line.
+m4_pattern_allow([^AS_ALLOWED$])
+NOT_AS_ALLOWED AS_ALLOWED AS_ALLOWED_NOT
+
+# Test forbidding.
+m4_pattern_forbid([^FORBIDDEN$])
+NOT_FORBIDDEN FORBIDDEN FORBIDDEN_NOT
+
+# Test Autoconf's patterns.
+AS_THIS_IS_INVALID and _AS_THIS_IS_INVALID_TOO
+BUT_AZ_THIS_IS_NOT ALTHOUGH_AS_THIS_IS
+# This is legal, although there is `AS_DEFINE' in there.
+BAS_DEFINE
+# AS_THIS_IS_A_COMMENT so just shut up.
+It would be very bad if Autoconf forgot to expand [AS_]INIT!
+]])
+
+AT_CHECK_AUTOCONF([], 1, [],
+[[configure.ac:1: error: possibly undefined macro: AS@&t@_INIT
+ If this token and others are legitimate, please use m4@&t@_pattern_allow.
+ See the Autoconf documentation.
+configure.ac:7: error: possibly undefined macro: AS@&t@_ALLOWED_NOT
+configure.ac:10: error: possibly undefined macro: FORBIDDEN
+configure.ac:14: error: possibly undefined macro: AS@&t@_THIS_IS_INVALID
+configure.ac:14: error: possibly undefined macro: _AS@&t@_THIS_IS_INVALID_TOO
+]])
+
+AT_CLEANUP
+
+
+# autoconf: automatically allowed tokens
+# --------------------------------------
+AT_SETUP([autoconf: automatically allowed tokens])
+
+AT_DATA_M4SH([configure.ac],
+[[AC_INIT
+m4_pattern_forbid([^FB_])
+AC_DEFINE([FB_ONE])
+AC_SUBST([FB_TWO])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+
+AT_CLEANUP
+
+
+# autoconf: do not forbid the empty token
+# ---------------------------------------
+AT_SETUP([autoconf: the empty token])
+
+AT_DATA_M4SH([configure.ac],
+[[m4_init[]m4_pattern_allow([^foo$])
+m4_divert([])dnl
+ line that begins with a space
+]])
+
+AT_CHECK_AUTOCONF
+
+AT_CLEANUP
+
+
+# autoconf: subdirectories
+# ------------------------
+AT_SETUP([autoconf: subdirectories])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_MKDIR_P
+AC_CONFIG_FILES(sub/foo)
+AC_OUTPUT
+]])
+
+mkdir sub
+
+AT_DATA([sub/foo.in],
+[[@MKDIR_P@
+]])
+
+AT_DATA([install-sh])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+AT_CHECK([[grep '^[^/].*/mkdir -p' sub/foo]], 1)
+
+AT_CLEANUP
+
+
+# autoconf: input from stdin
+# --------------------------
+AT_SETUP([autoconf: input from stdin])
+
+# Past Autoconf versions failed to read from stdin when other, non-frozen input
+# files were present.
+AT_DATA([aclocal.m4])
+
+AT_CHECK([echo 'AC_INIT(X, 1.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
+ 0, [stdin:1:AC_INIT:X:1.0:bug-autoconf@gnu.org
+])
+AT_CHECK([echo 'AC_INIT(X, 2.0, bug-autoconf@gnu.org)' | autoconf -t AC_INIT -],
+ 0, [stdin:1:AC_INIT:X:2.0:bug-autoconf@gnu.org
+])
+
+AT_CLEANUP
+
+
+# autoconf: AC_AUTOCONF_VERSION
+# -----------------------------
+AT_SETUP([autoconf: AC_AUTOCONF_VERSION])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+version m4@&t@_defn([AC_AUTOCONF_VERSION]) version
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK([[grep 'version ]]AT_PACKAGE_VERSION[[ version' configure]],
+0, [ignore])
+
+AT_CLEANUP
+
+
+
+# autoconf: AC_PRESERVE_HELP_ORDER
+# --------------------------------
+AT_SETUP([autoconf: AC_PRESERVE_HELP_ORDER])
+AT_KEYWORDS([m4@&t@_divert_text])
+
+AT_DATA_AUTOCONF([configure.ac],
+[[AC_INIT
+AC_PRESERVE_HELP_ORDER
+AC_ARG_WITH([one], [ --with-one])
+AC_ARG_ENABLE([two], [ --enable-two])
+m4_divert_text([HELP_ENABLE], [arbitrary $text])
+AC_ARG_WITH([three], [ --with-three])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([--help], [], [stdout])
+AT_CHECK([sed -n '/^Optional/,/^$/p' stdout], [],
+[[Optional Features and Packages:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-one
+ --enable-two
+arbitrary $text
+ --with-three
+
+]])
+
+AT_CLEANUP
+
+
+
+## --------- ##
+## ifnames. ##
+## --------- ##
+
+AT_SETUP([ifnames])
+
+AT_DATA([iftest1.c],
+[[#ifdef DEF1
+#ifndef DEF2
+#if ! defined DEF3 && defined DEF4 /* but not defined DEF5 */
+ # if SPACES
+ # if TABS
+/* #if C_COMMENTS */
+// #if CXX_COMMENTS
+#if LINE1 = \
+LINE2
+#if (VAL1*VAL2)==VAL3+VAL4 /* Not VAL5 !!! */
+]])
+
+AT_DATA([iftest2.c],
+[[#ifdef IFTEST2
+#if VAL1
+]])
+
+AT_CHECK([ifnames iftest1.c iftest2.c], 0,
+[DEF1 iftest1.c
+DEF2 iftest1.c
+DEF3 iftest1.c
+DEF4 iftest1.c
+IFTEST2 iftest2.c
+LINE1 iftest1.c
+LINE2 iftest1.c
+SPACES iftest1.c
+TABS iftest1.c
+VAL1 iftest1.c iftest2.c
+VAL2 iftest1.c
+VAL3 iftest1.c
+VAL4 iftest1.c
+], [])
+
+AT_CLEANUP
+
+
+
+## ------------ ##
+## autoheader. ##
+## ------------ ##
+
+# autoheader is intensively used in its modern form throughout this
+# test suite. But we also have to check that acconfig.h still works.
+# autoheader uses autoconf --trace, so traces first.
+
+AT_SETUP([autoheader])
+
+AT_DATA([acconfig.h],
+[[/* Define this to whatever you want. */
+#undef this
+]])
+
+
+# 1. Check that `acconfig.h' is still honored.
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_DEFINE(this, "whatever you want.")
+]])
+
+AT_CHECK_AUTOHEADER([], [], [], [ignore])
+AT_CHECK([cat config.hin], 0,
+[[/* config.hin. Generated from configure.ac by autoheader. */
+/* Define this to whatever you want. */
+#undef this
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+]])
+
+
+# 2. Check that missing templates are a fatal error.
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_DEFINE(that, "whatever you want.")
+]])
+
+# The test suite goes too fast for the cache time stamps...
+# Pass --force.
+AT_CHECK_AUTOHEADER([--force], [1], [], [ignore])
+
+
+# 3. Check TOP and BOTTOM.
+AT_DATA([acconfig.h],
+[[/* Top from acconfig.h. */
+@TOP@
+/* Middle from acconfig.h. */
+@BOTTOM@
+/* Bottom from acconfig.h. */
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+AH_TOP([Top1 from configure.ac.])
+AH_TOP([Top2 from configure.ac.])
+AH_TOP([The Cat in a h@t.])
+AH_VERBATIM([Middle], [Middle from configure.ac.])
+AH_VERBATIM([Mouse], [The Mouse in a h@t.])
+AH_BOTTOM([Bottom1 from configure.ac.])
+AH_BOTTOM([Bottom2 from configure.ac.])
+AH_BOTTOM([The Dog in a h@t.])
+
+AC_DEFINE([ANT], [@], [The Ant in a h@t.])
+]])
+
+
+# Yes, that's right: the `middle' part of `acconfig.h' is still before
+# the AH_TOP part. But so what, you're not supposed to use the two
+# together.
+# Ignore STDERR which is the longish complaint against autoheader junk
+# files.
+AT_CHECK_AUTOHEADER([--force], [], [], [ignore])
+AT_CHECK([cat config.hin], 0,
+[[/* config.hin. Generated from configure.ac by autoheader. */
+/* Top from acconfig.h. */
+/* Middle from acconfig.h. */
+
+Top1 from configure.ac.
+
+Top2 from configure.ac.
+
+The Cat in a h@t.
+
+/* The Ant in a h@t. */
+#undef ANT
+
+Middle from configure.ac.
+
+The Mouse in a h@t.
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+Bottom1 from configure.ac.
+
+Bottom2 from configure.ac.
+
+The Dog in a h@t.
+/* Bottom from acconfig.h. */
+]])
+
+AT_CLEANUP
+
+
+# autoheader should see through m4 macros, just like autoconf
+# http://lists.gnu.org/archive/html/bug-autoconf/2009-06/msg00000.html
+AT_SETUP([autoheader and macros])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADER([config.h])
+m4_define([PETER], [SIMSALABIM])
+m4_define([PAUL], [OPENSESAME])
+AC_DEFINE([PETER], [10], [Peter's public info])
+AC_DEFINE_UNQUOTED([PAUL], [`expr 4 + 6`], [Paul's public info])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK([grep -c SIMSALABIM configure config.h.in], [0],
+[[configure:1
+config.h.in:1
+]])
+AT_CHECK([grep -c OPENSESAME configure config.h.in], [0],
+[[configure:1
+config.h.in:1
+]])
+AT_CHECK([grep -c PETER configure config.h.in], [1],
+[[configure:0
+config.h.in:0
+]])
+AT_CHECK([grep -c PAUL configure config.h.in], [1],
+[[configure:0
+config.h.in:0
+]])
+
+AT_CLEANUP
+
+
+
+
+## ------------ ##
+## autoupdate. ##
+## ------------ ##
+
+# Check that AC_CANONICAL_SYSTEM and AC_OUTPUT are properly updated.
+AT_SETUP([autoupdate])
+
+AT_DATA([configure.ac],
+[[AC_INIT(Test, 1.0)
+AC_CANONICAL_SYSTEM
+# The doc says 27 is a valid fubar.
+fubar=27
+AC_OUTPUT(Makefile, echo $fubar, fubar=$fubar)
+]])
+
+AT_DATA([expout],
+[[AC_INIT([Test],[1.0])
+AC_CANONICAL_TARGET
+# The doc says 27 is a valid fubar.
+fubar=27
+AC_CONFIG_FILES([Makefile])
+AC_CONFIG_COMMANDS([default],[echo $fubar],[fubar=$fubar])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([cat configure.ac], 0, [expout])
+# Checking that `autoupdate' is idempotent
+AT_CHECK_AUTOUPDATE
+AT_CHECK([cat configure.ac], 0, [expout])
+
+AT_CLEANUP
+
+
+# autoupdating AC_LINK_FILES
+# --------------------------
+AT_SETUP([autoupdating AC_LINK_FILES])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_LINK_FILES(dst1 dst2, src1 src2)
+AC_OUTPUT
+]])
+
+AT_DATA([dst1], dst1
+)
+AT_DATA([dst2], dst2
+)
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], 0, [], ignore)
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+AT_CHECK([cat src1], 0, [dst1
+])
+AT_CHECK([cat src2], 0, [dst2
+])
+
+AT_CLEANUP
+
+
+# autoupdating AC_PREREQ
+# ----------------------
+AT_SETUP([autoupdating AC_PREREQ])
+
+# Produce `AC_PREREQ(<AUTOUPDATE VERSION>)'.
+AT_CHECK([autoupdate --version | sed 's/.*) //;q'], 0, [stdout])
+autoupdate_version=`cat stdout`
+[echo "AC_PREREQ([$autoupdate_version])" >expout]
+
+AT_CHECK([echo "AC_PREREQ(1.0)" | autoupdate -],
+ 0, [expout], [])
+
+AT_CHECK([echo "AC_PREREQ($autoupdate_version)" | autoupdate -],
+ 0, [expout], [])
+
+AT_CHECK([echo "AC_PREREQ(999.99)" | autoupdate -],
+ 63, [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating AU_ALIAS
+# ---------------------
+AT_SETUP([autoupdating AU_ALIAS])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_DEFUN([FOO], [$#])
+AU_ALIAS([BAZ],[FOO])
+test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
+AC_PROG_CC
+AC_STDC_HEADERS
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+AT_CHECK([grep 'AC_HEADER_STDC[(]' configure.ac], 1, [ignore], [ignore])
+AT_CHECK([grep 'AC_HEADER_STDC' configure.ac], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating OLD to NEW
+# -----------------------
+
+# The example taken from the code comments.
+AT_SETUP([autoupdating OLD to NEW])
+
+AT_DATA([aclocal.m4],
+[[AU_DEFUN([OLD], [NEW([$1, $2], m4@&t@_eval([$1 + $2]))])
+AC_DEFUN([NEW], [echo "sum($1) = $2"])
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+OLD(1, 2)
+NEW([0, 0], [0])
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+AT_CHECK([[grep 'NEW(\[1, 2], *\[3])' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK([[grep 'NEW(\[0, 0], *\[0])' configure.ac]], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating macros recursively
+# -------------------------------
+
+AT_SETUP([autoupdating macros recursively])
+
+AT_XFAIL_IF([:])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CC
+AC_TRY_COMPILE([], [choke me], [echo bogus1],
+ [AC_TRY_COMPILE([], [return 0;], [echo good], [echo bogus2])])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([grep changequote configure.ac], [1])
+AT_CHECK([grep TRY_COMPILE configure.ac], [1])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+# autoupdating AC_HELP_STRING
+# ---------------------------
+AT_SETUP([autoupdating AC_HELP_STRING])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_ARG_ENABLE([foo], [AC_HELP_STRING([--enable-foo], [foo bar])], [:], [:])
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+AT_CHECK([[grep '\[--enable-foo], *\[foo bar]' configure.ac]], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating with m4sugar
+# -------------------------
+AT_SETUP([autoupdating with m4sugar])
+
+AT_DATA([aclocal.m4],
+[[AU_DEFUN([OLD],
+[m4@&t@_pushdef([foo], [bar])dn@&t@l
+echo "foo $1 foo"
+m4@&t@_popdef([foo])dn@&t@l
+])
+]])
+
+touch foo.in
+
+AT_DATA([configure.ac],
+[[AC_PREREQ(2.54)
+m4_define([gnumeric_version_epoch], [1])
+AC_INIT
+OLD([ bla bla ])
+AC_FOREACH([name], [n1 n2],
+ [echo name
+])
+AC_CHECKING([for feature])
+AC_MSG_RESULT_UNQUOTED([`echo done`])
+
+AC_OUTPUT([foo])
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating with m4_pushdef
+# ----------------------------
+AT_SETUP([autoupdating with m4@&t@_pushdef])
+
+AT_XFAIL_IF([:])
+
+touch foo.in
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_CC
+# temporarily override this macro
+m4@&t@_pushdef([AC_MSG_RESULT_UNQUOTED], [:])
+AC_C_BIGENDIAN
+m4@&t@_popdef([AC_MSG_RESULT_UNQUOTED])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK([grep changequote configure.ac], [1])
+AT_CHECK([grep [pushdef.*AC_MSG_RESULT_UNQUOTED] configure.ac], [0], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating with AC_REQUIRE
+# ----------------------------
+AT_SETUP([autoupdating with AC_REQUIRE])
+
+AT_XFAIL_IF([:])
+
+AT_DATA([configure.ac],
+[[AC_DEFUN([MACRO],
+[AC_REQUIRE([AC_DECL_SYS_SIGLIST])
+AC_CHECK_DECLS([_sys_siglist], [], [], [#include <signal.h>])
+])
+
+AC_INIT
+MACRO
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating with complex quoting
+# ---------------------------------
+AT_SETUP([autoupdating with complex quoting])
+
+AT_XFAIL_IF([:])
+
+AT_DATA([configure.ac],
+[[m4_define([MACRO],
+[[#define STRING "hello, world\n"
+]])
+
+AC_INIT
+AC_TRY_COMPILE([#include <stdio.h>
+ ]MACRO[], [printf (STRING);],
+ [], [AS_EXIT([1])])
+AC_OUTPUT
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK([grep MACRO configure], [1])
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating AC_LANG_SAVE
+# -------------------------
+AT_SETUP([autoupdating AC_LANG_SAVE])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_LANG_SAVE
+AC_LANG_RESTORE
+AC_LANG_SAVE
+AC_LANG_RESTORE
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE([], [], [], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating AC_FOREACH
+# -----------------------
+AT_SETUP([autoupdating AC_FOREACH])
+
+AT_DATA([aclocal.m4],
+[[AU_DEFUN([OLD], [AC_FOREACH([myvar], [4 5 6], [' myvar'])])
+]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+echo AC_FOREACH([myvar], [1 2 3], [' myvar'])OLD
+]])
+
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([[grep 'echo 1 2 3 4 5 6' configure.ac]], 1, [ignore], [ignore])
+AT_CHECK([[grep 'm4@&t@_foreach_w' configure.ac]], 0, [ignore], [ignore])
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [0], [stdout])
+AT_CHECK([[grep ' 1 2 3 4 5 6' stdout]], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+# autoupdating with aclocal and m4_include
+# ----------------------------------------
+AT_SETUP([autoupdating with aclocal and m4@&t@_include])
+
+# We use aclocal.
+AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
+
+mkdir m4 aclocal
+AT_DATA([configure.in],
+[[AC_INIT(x,0)
+AC_UNCHANGED_MACRO
+AC_OLD_MACRO
+AC_OUTPUT
+]])
+AT_DATA([m4/stuff.m4],
+[[AU_ALIAS([AC_OLD_MACRO], [AC_NEW_MACRO])
+AC_DEFUN([AC_NEW_MACRO], [echo hi])
+AC_DEFUN([AC_UNCHANGED_MACRO], [echo one])
+]])
+cp m4/stuff.m4 aclocal/stuff.m4
+AT_CHECK([aclocal -I aclocal], [0], [ignore], [ignore])
+# Checking `autoupdate'.
+AT_CHECK_AUTOUPDATE
+AT_CHECK([aclocal -I m4], [0], [ignore], [ignore])
+AT_CHECK_AUTOUPDATE
+
+AT_CLEANUP
+
+
+# Keeping autom4te.cfg complete
+# -----------------------------
+
+AT_SETUP([autom4te preselections])
+: ${sleep='sleep 1'} # Command to force different time stamps.
+# If this test should run on FAT file systems and older w32,
+# then setting $sleep correctly needs to be revisited.
+
+# We use aclocal and automake. Skip broken automake wrappers.
+AT_CHECK([automake --version || exit 77], [], [stdout], [ignore])
+AT_CHECK([[grep '[1-9]\.[0-9]' stdout || exit 77]], [], [ignore])
+AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
+
+AT_DATA([configure.in],
+[[AC_INIT(GNU foo, 1.0)
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([Makefile.am],
+[[AUTOMAKE_OPTIONS = foreign
+]])
+
+$sleep # `aclocal.m4' should be strictly younger than its inputs
+
+# If Autoconf is too old, or the user has turned caching off, skip:
+AT_CHECK([aclocal || { ret=$?; test $ret -eq 63 && ret=77; exit $ret; }],
+ [], [], [ignore])
+AT_CHECK([test -d autom4te.cache || exit 77])
+AT_CHECK([autoconf])
+
+# If this test fails due to missing entries in lib/autom4te.in, then
+# comparing the old and new requests is a good place to start debugging:
+cp autom4te.cache/requests old-requests
+echo newer >newer
+$sleep # if `configure' is regenerated, we want it to be strictly newer,
+ # to catch the error consistently.
+AT_CHECK([aclocal], [], [], [ignore])
+AT_CHECK([automake --no-force --add-missing], [], [], [ignore])
+AT_CHECK([autoconf])
+AT_CHECK([test "`find configure -newer newer`" = "" ||
+ { diff old-requests autom4te.cache/requests; exit 1; }],
+ [], [], [],
+ [extract_version=['s/^[^0-9]*\([0-9][^ ]*\).*/\1/;q']
+ automake_version=`automake --version | sed "$extract_version"`
+ used_automake_version=`sed "$extract_version" "$abs_top_srcdir/Makefile.in"`
+ AT_CHECK([if test "$automake_version" = "$used_automake_version"; ]dnl
+ [then exit 1; else exit 77; fi])])
+AT_CLEANUP
+
+
+# autom4te cache creation
+# -----------------------
+# Ensure autom4te fails when it cannot create the cache directory
+# or create files there.
+AT_SETUP([autom4te cache creation])
+
+AT_CHECK([test ! -f $HOME/.autom4te.cfg || exit 77], [], [ignore], [ignore])
+
+# Work in a subdirectory so autotest can scribble in the toplevel.
+mkdir sub
+chmod a-w sub
+
+AT_DATA([configure.ac],
+[[AC_INIT
+]])
+
+AT_DATA([.autom4te.cfg],
+[[begin-language: "Autoconf-without-aclocal-m4"
+args: --cache=sub/autom4te.cache
+end-language: "Autoconf-without-aclocal-m4"
+]])
+
+# Do not try this when we are root or on systems without permissions.
+# A failed redirection may cause a status of 2 with FreeBSD sh.
+AT_CHECK([(: > sub/some-file) || exit 1 && exit 77], 1, [ignore], [ignore])
+
+# Failure to create cache directory.
+AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
+AT_CHECK([grep 'cannot create .*autom4te.cache' stderr], [0], [ignore])
+AT_CHECK([test -f configure], [1])
+
+chmod u+w sub
+AT_CHECK_AUTOCONF
+
+rm -f configure sub/autom4te.cache/*
+chmod a-w sub/autom4te.cache
+
+# Failure to create a file in the cache directory.
+AT_CHECK_AUTOCONF([], [1], [ignore], [stderr])
+AT_CHECK([grep 'cannot open.*autom4te.cache' stderr], [0], [ignore])
+
+AT_CLEANUP
+
+
+# autom4te cache locking
+# ----------------------
+
+AT_SETUP([autom4te cache locking])
+
+# Cannot use AT_CHECK here, autotest internals could be messed up.
+
+(echo AC_INIT; sleep 2; echo) \
+ | (autom4te --language=autoconf -o configure -; echo $? >&2 ) 2>errlog &
+AT_CHECK([echo AC_INIT | autom4te --language=autoconf -o configure -])
+wait
+
+# Ignore additional output from shell verbose or xtrace mode.
+AT_CHECK([grep 'cannot rename' errlog], [1])
+AT_CHECK([grep '^0$' errlog], [], [ignore])
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+# autotools and file names containing whitespace
+# ----------------------------------------------
+
+AT_SETUP([autotools and whitespace in file names])
+
+# We use aclocal.
+AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
+
+x=
+export x
+rm -f a b
+for funny in \
+ 'with funny '\'' $x & #! name ' \
+ 'with funny \ '\'' \'\'' " <a >b * ? name ' #"
+do
+ funny=`func_sanitize_file_name "$funny"`
+ file=" file $funny"
+ dir=`func_sanitize_dir_name " dir $funny"`
+ TMPDIR=" tmp$dir"
+ export TMPDIR
+
+ # skip if we cannot create such a file or directory
+ AT_CHECK([mkdir "$dir" "$TMPDIR" && touch "$file.in" || exit 77])
+
+ cat >"$file.in" <<'END'
+[AC_INIT(x,0)
+m4@&t@_include([foo.m4])
+AC_CONFIG_HEADERS([config.h:config.hin])
+AC_MACRO
+AC_OUTPUT]
+END
+ cat >"$dir"/foo.m4 <<'END'
+[AC_DEFUN([AC_MACRO], [echo hi])]
+END
+
+ AT_CHECK_AUTOHEADER([-B "$dir" "$file.in"])
+ AT_CHECK_AUTOHEADER([--force -I "$dir" "$file.in"])
+ AT_CHECK_AUTOUPDATE([-B "$dir" "$file.in"])
+ AT_CHECK_AUTOUPDATE([--force -I "$dir" "$file.in"])
+ AT_CHECK_AUTOUPDATE([-B "$dir" - < "$file.in"], [], [ignore])
+ AT_CHECK_AUTOCONF([-B "$dir" -o "$file" "$file.in"])
+ AT_CHECK_AUTOCONF([-I "$dir" -o "$file" "$file.in"])
+ # In autoconf, these exercise a slightly different code path:
+ AT_CHECK_AUTOCONF([--prepend-include="$dir" -o "$file" "$file.in"])
+ AT_CHECK_AUTOCONF([--include="$dir" -o "$file" "$file.in"])
+ AT_CHECK([autoscan -B "$dir"], [], [], [ignore])
+ AT_CHECK([autoscan --force -I "$dir"], [], [], [ignore])
+ # autoreconf requires a sane input file name. Also, disable aclocal.
+ mv -f "$file.in" configure.in
+ AT_DATA([aclocal.m4])
+ AT_CHECK([autoreconf -B "$dir"])
+ AT_CHECK([autoreconf --force -I "$dir"])
+
+ cat >"$file.c" <<'END'
+#if FOO
+#endif
+END
+ AT_CHECK([ifnames "$file.c"], [], [ignore])
+
+ test ! -f b
+done
+
+AT_CLEANUP
diff --git a/tests/torture.at b/tests/torture.at
new file mode 100644
index 0000000..9923305
--- /dev/null
+++ b/tests/torture.at
@@ -0,0 +1,1835 @@
+# -*- Autotest -*-
+
+# Copyright (C) 2000-2012 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+AT_BANNER([[Testing config.status.]])
+
+
+## ---------------------------------------- ##
+## AC_CONFIG_COMMANDS with empty commands. ##
+## ---------------------------------------- ##
+
+AT_CHECK_MACRO([AC_CONFIG_COMMANDS with empty commands],
+[[AC_CONFIG_COMMANDS([foo], [], [:])
+]])
+
+
+## --------------------------------------------- ##
+## AC_CONFIG_COMMANDS with temporary directory. ##
+## --------------------------------------------- ##
+
+AT_CHECK_MACRO([AC_CONFIG_COMMANDS with temporary directory],
+[[AC_CONFIG_COMMANDS([foo], [
+case $ACTION in
+ use)
+ echo "$tmp" > tmpdir
+ test -d "$tmp" || AC_MSG_ERROR([No $tmp directory])
+ echo garbage-in > "$tmp/garbage-out"
+ ;;
+ corrupt)
+ echo "$tmp" > tmpdir
+ tmp=./nosuch
+ ;;
+ *) ;;
+esac
+])
+]], [
+AT_CHECK([test ! -f tmpdir])
+AT_CHECK([ACTION=use ./config.status], [], [ignore])
+AT_CHECK([test -s tmpdir && test ! -d "`cat tmpdir`"])
+AT_CHECK([ACTION=corrupt ./config.status], [], [ignore])
+AT_CHECK([test -s tmpdir && test ! -d "`cat tmpdir`"])
+])
+
+
+## -------------------------- ##
+## Multiple AC_CONFIG_FILES. ##
+## -------------------------- ##
+
+AT_SETUP([Multiple AC_CONFIG_FILES])
+
+AT_CONFIGURE_AC([[AC_CONFIG_FILES([foo foo])]])
+AT_CHECK_AUTOCONF([], 1, [], [ignore])
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## parameterized AC_CONFIG_FILES. ##
+## ------------------------------- ##
+
+AT_SETUP([Parameterized AC_CONFIG_FILES])
+
+AT_CONFIGURE_AC([[
+files="foo
+bar"
+AC_CONFIG_FILES([$files])]])
+AT_CHECK_AUTOCONF([], [], [], [ignore])
+touch foo.in bar.in config.hin
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+## ------------ ##
+## AC_ARG_VAR. ##
+## ------------ ##
+
+# AT_CHECK_AC_ARG_VAR(FIRST-VALUE, SECOND-VALUE, [STATUS = 1])
+# ------------------------------------------------------------
+# Check that AC_ARG_VAR caches the latest values, diagnoses
+# inconsistencies, and arms config.status. Check that recheck
+# returns STATUS, save configure output in files 'stdout' and 'stderr'
+# for further inspection.
+m4_define([AT_CHECK_AC_ARG_VAR],
+[rm -f config.cache
+
+# Initial value.
+m4_ifval([$1],
+ [precious='m4_bpatsubst([$1], [[']], ['\\''])'; export precious],
+ [unset precious])
+AT_CHECK_CONFIGURE([--config-cache -q])
+AT_CHECK([cat file], [], [`$1'
+])
+
+# Testing --recheck: 1. have the environment `forget' about PRECIOUS.
+unset precious
+# 2. Rerun config.status to recreate `file'.
+AT_CHECK([./config.status --recheck], [], [ignore])
+AT_CHECK([./config.status], [], [ignore])
+# 3. Check that file contains the old value of PRECIOUS.
+AT_CHECK([cat file], [], [`$1'
+])
+
+# Second value: we should issue an error here: the value
+# has changed!
+m4_ifval([$2],
+ [precious='$2'; export precious],
+ [unset precious])
+AT_CHECK_CONFIGURE([--config-cache], [m4_default([$3], [1])], [stdout], [stderr])
+
+])# AT_CHECK_AC_ARG_VAR
+
+
+AT_SETUP([AC_ARG_VAR])
+
+# We don't want to run this test if this shell doesn't support
+# `unset'.
+AT_CHECK([
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ exit 0
+else
+ exit 77
+fi
+])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_ARG_VAR([precious], [this variable costs a lot])
+echo "precious:$precious"
+AC_OUTPUT(file)
+]])
+
+AT_DATA([file.in],
+[[`@precious@'
+]])
+
+AT_CHECK_AUTOCONF
+
+# Set a precious variable
+AT_CHECK_AC_ARG_VAR([], [apple of my eye])
+
+# Unset a precious variable
+AT_CHECK_AC_ARG_VAR([apple of my eye], [])
+
+# Change a precious variable
+AT_CHECK_AC_ARG_VAR([apple of my eye], [orange of my eye])
+
+# Change a precious variable that contains braces
+AT_CHECK_AC_ARG_VAR([apple of my {eye}], [orange of my eye])
+
+# Change a precious variable that contains all kinds of fun
+AT_CHECK_AC_ARG_VAR(['p r ec"iou$], [orange of my eye])
+dnl restore font-lock: "
+
+# Warn (but do not fail) about a whitespace-only change
+AT_CHECK_AC_ARG_VAR([ apple of my eye ], [apple of my eye],
+ [0], ["has whitespace changes"])
+mv stdout configure-output
+AT_CHECK([grep "ignoring whitespace changes" stderr], [], [ignore])
+AT_CHECK([grep "precious: apple" configure-output], [], [ignore])
+
+AT_CLEANUP
+
+
+
+
+## ---------------------------------------------- ##
+## AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS. ##
+## ---------------------------------------------- ##
+
+AT_SETUP([[AC_CONFIG_FILES, HEADERS, LINKS and COMMANDS]])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_PROG_FGREP
+rm -f -r header var-header file var-file link var-link command var-command
+echo 'OK' >input
+
+# Be sure to also stress the associated INIT-CMDS.
+case $what_to_test in
+ header)
+ AC_CONFIG_HEADERS(header:input);;
+ var-header)
+ AC_CONFIG_HEADERS(var-header:$header_in, [], [header_in=input]);;
+
+ file)
+ AC_CONFIG_FILES(file:input);;
+ var-file)
+ AC_CONFIG_FILES(var-file:$file_in, [], [file_in=input]);;
+
+ command)
+ AC_CONFIG_COMMANDS(command,
+ [cp input command]);;
+ var-command)
+ AC_CONFIG_COMMANDS(var-command,
+ [cp $command_in var-command], [command_in=input]);;
+
+ link)
+ AC_CONFIG_LINKS(link:input);;
+ var-link)
+ AC_CONFIG_LINKS(var-link:$link_in, [], [link_in=input]);;
+esac
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+
+
+# AT_CHECK_CONFIG_CREATION(THING = (header | link | file | command))
+# ------------------------------------------------------------------
+# Check that THING and var-THING (which uses variables in AC_CONFIG_THING)
+# are properly created, with the right content.
+# Use `grep OK' instead of a simple `cat' to avoid banners such as in
+# AC_CONFIG_HEADERS.
+m4_define([AT_CHECK_CONFIG_CREATION],
+[AT_CHECK_CONFIGURE([what_to_test=$1])
+AT_CHECK([ls header var-header file var-file command var-command link var-link 2>/dev/null],
+ [ignore], [$1
+])
+AT_CHECK([grep OK $1], [], [OK
+])
+
+AT_CHECK_CONFIGURE([what_to_test=var-$1 --no-create])
+# config.status might be stupidly expecting data on stdin, if it's
+# really broken...
+AT_CHECK([./config.status var-$1 </dev/null], [], [ignore])
+AT_CHECK([ls header var-header file var-file command var-command link var-link 2>/dev/null],
+ [ignore], [var-$1
+])
+AT_CHECK([grep OK var-$1], [], [OK
+])
+])# AT_CHECK_CONFIG_CREATION
+
+
+# AT_CHECK_CONFIG_CREATION_NOWRITE(THING = (header | link | file | command))
+# --------------------------------------------------------------------------
+# Check that THING and var-THING (which uses variables in AC_CONFIG_THING)
+# are properly created, with the right content.
+# Use `grep OK' instead of a simple `cat' to avoid banners such as in
+# AC_CONFIG_HEADERS.
+m4_define([AT_CHECK_CONFIG_CREATION_NOWRITE],
+[AT_CHECK_CONFIGURE([what_to_test=$1])
+AT_CHECK([ls header var-header file var-file command var-command link var-link 2>/dev/null],
+ [ignore], [$1
+])
+AT_CHECK([grep OK $1], [], [OK
+])
+
+AT_CHECK_CONFIGURE([what_to_test=var-$1 --no-create])
+# config.status might be stupidly expecting data on stdin, if it's
+# really broken...
+# Skip check if user can rename files into a read-only directory (when
+# run by root or on w32).
+touch t
+chmod a-w .
+mv t t1 >/dev/null 2>&1 \
+ || AT_CHECK([./config.status var-$1 </dev/null || exit 1],
+ [1], [ignore], [ignore])
+chmod u+w .
+rm -rf t t1
+])# AT_CHECK_CONFIG_CREATION_NOWRITE
+
+
+# Create a file
+AT_CHECK_CONFIG_CREATION(file)
+
+# Create a header
+AT_CHECK_CONFIG_CREATION(header)
+
+# Execute a command
+AT_CHECK_CONFIG_CREATION(command)
+
+# Create a link
+AT_CHECK_CONFIG_CREATION(link)
+
+# Now check for write errors
+
+# Create a file
+AT_CHECK_CONFIG_CREATION_NOWRITE(file)
+# Create a file with bits from stdin
+AT_CHECK([echo from-stdin | ./config.status --file=file:-],
+ [0], [ignore])
+AT_CHECK([grep from-stdin file], [], [from-stdin
+])
+# Force write error creating a file on stdout
+if test -w /dev/full && test -c /dev/full; then
+ AT_CHECK([./config.status --file=-:input </dev/null >/dev/full || exit 1],
+ [1], [ignore], [ignore])
+fi
+
+# Validate that --file requires an argument
+AT_CHECK([./config.status --file], [1], [ignore], [stderr])
+AT_CHECK([grep 'missing file argument' stderr], [0], [ignore])
+AT_CHECK([./config.status --file=], [1], [ignore], [stderr])
+AT_CHECK([grep 'missing file argument' stderr], [0], [ignore])
+
+# Create a header
+AT_CHECK_CONFIG_CREATION_NOWRITE(header)
+# Create a header on stdout
+AT_CHECK([./config.status --header=-:input </dev/null],
+ [0], [stdout], [ignore])
+AT_CHECK([grep OK stdout], [], [OK
+])
+# Force write error creating a header on stdout
+if test -w /dev/full && test -c /dev/full; then
+ AT_CHECK([./config.status --header=-:input </dev/null >/dev/full || exit 1],
+ [1], [ignore], [ignore])
+fi
+
+# Execute a command
+AT_CHECK_CONFIG_CREATION_NOWRITE(command)
+
+# Create a link
+AT_CHECK_CONFIG_CREATION_NOWRITE(link)
+
+# Check that no use of `ac_write_fail' escaped into config.status
+AT_CHECK([grep ac_write_fail config.status], [1])
+
+# Check that --file and --header accept funny file names
+AT_DATA([fgrep.in],
+[[FGREP="@FGREP@"
+]])
+./config.status --file=fgrep:fgrep.in
+. ./fgrep
+
+x=
+export x
+for file in \
+ 'with funny '\'' $x & #! name' \
+ 'file with funny \ '\'' \'\'' $ & #!*? name' \
+ 'with funny \ '\'' \'\'' " | <a >b & * ? name ' # "restore font-lock
+do
+ # The function func_sanitize_file_name comes from tools.at
+ file=`func_sanitize_file_name "$file"`
+ cat >"$file.in" <<'END'
+@configure_input@
+END
+ AT_CHECK([./config.status "--file=$file:$file.in"],
+ [0], [ignore])
+ AT_CHECK([$FGREP "$file" "$file"], [0], [ignore])
+ AT_CHECK([./config.status "--header=$file:$file.in"],
+ [0], [ignore])
+ # Run the same test a 2nd time to see that config.status does not recreate
+ # the header (regression test)
+ AT_CHECK_UNQUOTED([./config.status "--header=$file:$file.in"],
+ [0], [config.status: creating $file
+config.status: $file is unchanged
+])
+ AT_CHECK_UNQUOTED([grep ' & ' "$file"], [],
+[/* $file. Generated from $file.in by configure. */
+])
+ AT_CHECK([$FGREP "$file" "$file"], [0], [ignore])
+done
+AT_CLEANUP
+
+
+
+## ---------------------------------------- ##
+## Macro calls in AC_CONFIG_COMMANDS tags. ##
+## ---------------------------------------- ##
+
+AT_SETUP([Macro calls in AC_CONFIG_COMMANDS tags])
+
+AT_DATA_M4SUGAR([configure.ac],
+[[AC_INIT
+AC_CONFIG_COMMANDS([m4_if(1,1,mytag)])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+
+## ------------------- ##
+## Missing templates. ##
+## ------------------- ##
+
+# Check that config.status detects missing input files
+AT_SETUP([Missing templates])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_FILES([nonexistent])
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+mkdir build
+AT_CAPTURE_FILE([build/config.log])[]dnl
+cd build
+AT_CHECK([../configure], [1], [ignore],
+[[config.status: error: cannot find input file: `nonexistent.in'
+]])
+# Make sure that the output file doesn't exist
+AT_CHECK([test -f nonexistent], 1)
+cd ..
+AT_CHECK_CONFIGURE([], [1], [],
+[[config.status: error: cannot find input file: `nonexistent.in'
+]])
+# Make sure that the output file doesn't exist
+AT_CHECK([test -f nonexistent], 1)
+
+AT_CLEANUP
+
+
+
+
+## ---------------------- ##
+## configure invocation. ##
+## ---------------------- ##
+
+# Check that `configure' and `config.status' honor their interface.
+#
+# We run `./configure one=val1 --enable-two=val2 --with-three=val3'
+# and verify that (i) `configure' correctly receives the arguments,
+# (ii) correctly passes them to `config.status', which we check by
+# running `config.status --recheck', (iii) correctly passes them
+# to sub-configure scripts, and (iv) correctly reproduces them with
+# `config.status --config'.
+
+AT_SETUP([configure invocation])
+
+mkdir sub
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_SUBDIRS([sub])
+echo "result=$one$enable_two$with_three"
+AC_OUTPUT
+]])
+
+AT_DATA([sub/configure.ac],
+[[AC_INIT
+echo "result=$one$enable_two$with_three"
+AC_OUTPUT
+]])
+
+echo fake install-sh script >install-sh
+
+AT_CHECK_AUTOCONF
+cd sub
+AT_CHECK_AUTOCONF
+cd ..
+
+AT_CHECK_CONFIGURE([one=one --enable-two=two --with-three=three |
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do([onetwothree
+], [onetwothree
+])])
+AT_CHECK([./config.status --recheck | sed -n 's/^result=//p'], 0,
+ [onetwothree
+])
+AT_CHECK([args=`./config.status --config` && eval ./configure \$configure_options "$args" |
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do([onetwothree
+], [onetwothree
+])])
+
+AT_CHECK_CONFIGURE([one="\"'$ " --enable-two="\" ' $" --with-three=" \"'$"|
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do(["'$ " ' $ "'$
+], ["'$ " ' $ "'$
+])])
+AT_CHECK([./config.status --recheck | sed -n 's/^result=//p'], 0,
+ ["'$ " ' $ "'$
+])
+dnl restore font-lock: "
+AT_CHECK([args=`./config.status --config` && eval ./configure \$configure_options "$args" |
+ sed -n -e 's/^result=//p'], 0,
+ [m4_do(["'$ " ' $ "'$
+], ["'$ " ' $ "'$
+])])
+
+AT_CLEANUP
+
+
+
+## -------------------------------------------- ##
+## Check that `#define' templates are honored. ##
+## -------------------------------------------- ##
+
+# Use various forms of `#define' templates, and make sure there are no
+# problems when a symbol is prefix of another.
+
+AT_SETUP([@%:@define header templates])
+AT_KEYWORDS([AC@&t@_DEFINE])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+
+# I18n of dummy variables: their French translations.
+AC_DEFINE(foo, toto)
+AC_DEFINE(bar, tata)
+AC_DEFINE(baz, titi)
+AC_DEFINE(fubar, tutu)
+
+# Symbols which are prefixes of another.
+AC_DEFINE(a, A)
+AC_DEFINE(aaa, AAA)
+AC_DEFINE(aa, AA)
+
+# backslash-newline combinations
+AC_DEFINE([multiline], [line1\
+line2\
+line3 \
+line4])
+AC_DEFINE([multiline_args(ARG1, ARG2)], [ARG2 \
+ARG1])
+AC_CONFIG_FILES(defs)
+
+# underquoted #
+AC_DEFINE([paste(a,b)], [a##b])
+
+# Things included in confdefs.h, but which make no sense in
+# config.h, nor in $DEFS.
+cat <<\EOF >>confdefs.h
+/* Hi Mum! Look, I am doing C++! */
+#ifdef __cplusplus
+void exit (int status);
+#endif
+EOF
+
+# In addition of config.h output a full DEFS
+AC_OUTPUT_MAKE_DEFS
+DEFS_SAVED=$DEFS
+AC_SUBST(DEFS_SAVED)
+AC_OUTPUT
+]])
+
+AT_DATA([defs.in],
+[[@DEFS_SAVED@
+]])
+
+AT_DATA([config.hin],
+[[#define foo 0
+# define bar bar
+# define baz "Archimedes was sinking in his baz"
+ # define fubar tutu
+#define a B
+ #define aa BB
+ # define aaa BBB
+#undef a
+ # undef aa
+#undef aaa
+#define aaa(a, aa) aa a
+#define aaab
+#define aaac(a, aa) aa a
+#undef multiline
+# undef multiline_args
+#define paste(a,b) a##b
+/* an ugly one: */
+#define str(define) \
+#define
+#define stringify(arg) str(arg)
+#undef aaa /* with comments */
+#undef not_substed /* with comments */
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_DATA([expout],
+[[/* config.h. Generated from config.hin by configure. */
+#define foo toto
+# define bar tata
+# define baz titi
+ # define fubar tutu
+#define a A
+ #define aa AA
+ # define aaa AAA
+#define a A
+ # define aa AA
+#define aaa AAA
+#define aaa AAA
+#define aaab
+#define aaac(a, aa) aa a
+#define multiline line1\
+line2\
+line3 \
+line4
+# define multiline_args(ARG1, ARG2) ARG2 \
+ARG1
+#define paste(a,b) a##b
+/* an ugly one: */
+#define str(define) \
+#define
+#define stringify(arg) str(arg)
+#define aaa AAA
+/* #undef not_substed */
+]])
+AT_CHECK([cat config.h], 0, expout)
+
+# Check the value of DEFS.
+AT_DATA([expout],
+[[-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -Dfoo=toto -Dbar=tata -Dbaz=titi -Dfubar=tutu -Da=A -Daaa=AAA -Daa=AA -Dmultiline=line1line2line3\ line4 -Dmultiline_args\(ARG1,\ ARG2\)=ARG2\ ARG1 -Dpaste\(a,b\)=a\#\#b
+]])
+
+# Because we strip trailing spaces in `testsuite' we can't leave one in
+# expout, hence nuke the one left by AC_OUTPUT_MAKE_DEFS.
+AT_CHECK([sed -e 's/ $//' defs], 0, expout)
+
+AT_CLEANUP
+
+
+
+## ------------------------- ##
+## Torturing config.status. ##
+## ------------------------- ##
+
+## Require 100 AC_DEFINE and AC_SUBST and AC_SUBST_FILE with a significantly
+## big value. This is mostly to check that Autoconf produces portable sed
+## scripts in config.status. sed is used to skip the first two lines
+## `Generated by ...'.
+
+# We use m4_for many times.
+m4_pattern_allow([^m4_for$])
+
+AT_SETUP([Torturing config.status])
+
+dnl The value used as a big value for AC_DEFINE.
+dnl Don't use sh active chars here, below it is also used in a sh
+dnl assignment.
+m4_define([AT_BIG_VALUE],
+[This value should be long enough to torture the various limits of sed and other tools used by Autoconf.])
+
+m4_define([AT_DESCRIPTION],
+[Define to a long string if your `Autoconf' works properly.])
+
+
+# AT_DUMMY_VAR(NUMBER)
+# --------------------
+# Build a name used for AC_SUBST and AC_DEFINE. Put ac_ in it
+# so that the check for user name space invasion does not complain
+# of the new variables defined.
+#
+# Note that you should not use the name ac_dummy, because it will be
+# turned into ac_uummy during the construction of config.status. Yes,
+# this is admittedly a bug, but it would be too hard to fix this.
+# There is really no point in AC_DEFINE a var named ac_d.*.
+m4_pattern_allow([^m4_bpatsubst$])
+m4_define([AT_DUMMY_VAR],
+[ac_Dummy_[]m4_bpatsubst([000$1], [.*\(...\)$], [\1])])
+
+
+
+AT_DATA([dummy.in],
+[m4_for([AT_Count], 1, 100, 1,
+[@AT_DUMMY_VAR(AT_Count)@
+@[f]AT_Count@
+])])
+
+
+i=1
+while test $i != 101; do
+ echo "content of file $i" > file_$i
+ AS_VAR_ARITH([i], [$i + 1])
+done
+
+
+# ------------ #
+# configure.ac #
+# ------------ #
+
+m4_pattern_allow([^m4_(define|defun)$])
+AT_DATA([configure.ac],
+dnl The following lines transfer AT_DUMMY_VAR, AT_DESCRIPTION, and
+dnl AT_BIG_VALUE into the configure.ac as AC_DUMMY_VAR etc.
+[[m4_define([AC_DUMMY_VAR],]
+m4_dquote(m4_defn([AT_DUMMY_VAR]))[)]]
+
+[[m4_define([AC_DESCRIPTION],]
+m4_dquote(m4_defn([AT_DESCRIPTION]))[)]]
+
+[[m4_define([AC_BIG_VALUE],]
+m4_dquote(m4_defn([AT_BIG_VALUE]))[)]]
+
+[[# AC_DEFUBST(NAME)
+# ----------------
+# Related VALUE to NAME both with AC_SUBST and AC_DEFINE. This is
+# used in the torture tests.
+m4_defun([AC_DEFUBST],
+[AC_DUMMY_VAR($1)="AC_BIG_VALUE"
+AC_DEFINE_UNQUOTED(AC_DUMMY_VAR($1), "$AC_DUMMY_VAR($1) $AC_DUMMY_VAR($1)",
+ AC_DESCRIPTION)
+AC_SUBST(AC_DUMMY_VAR($1))
+AC_SUBST_FILE([f]$1)
+f$1=file_$1
+])
+
+AC_INIT
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_CONFIG_FILES(dummy)
+m4_for(AC_Count, 1, 100, 1,
+ [AC_DEFUBST(AC_Count)])
+AC_PROG_AWK
+AC_OUTPUT
+]])# configure.ac
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+# Check both awk and the result of AC_PROG_AWK.
+# Quote the first word in the for list for Solaris sh.
+for awk_arg in "FOO=" AWK=awk; do
+ AT_CHECK_CONFIGURE([$awk_arg])
+
+ # Checking that AC_DEFINE worked properly.
+ AT_DATA([expout],
+[/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME ""
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING ""
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME ""
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION ""
+m4_for(AT_Count, 1, 100, 1,
+[
+/* AT_DESCRIPTION */
+[#define] AT_DUMMY_VAR(AT_Count) "AT_BIG_VALUE AT_BIG_VALUE"
+])])
+
+ AT_CHECK([sed -n '4,$ p' config.h], 0, expout)
+
+ # Checking that AC_SUBST worked properly.
+ AT_DATA([expout],
+[m4_for(AT_Count, 1, 100, 1,
+[AT_BIG_VALUE
+content of file AT_Count
+])])
+
+ AT_CHECK([cat dummy], 0, expout)
+done
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Substitute a 2000-byte string. ##
+## ------------------------------- ##
+
+# Solaris 9 /usr/ucb/sed that rejects commands longer than 4000 bytes. HP/UX
+# sed dumps core around 8 KiB. However, POSIX says that sed need not
+# handle lines longer than 2048 bytes (including the trailing newline).
+# So we'll just test a 2000-byte value, and for awk, we test a line with
+# almost 1000 words, and one variable with 5 lines of 2000 bytes each:
+# multi-line values should allow to get around the limitations.
+# We also test runs of around 148 backslashes: they need to be escaped,
+# and 148 is the portable limit for awk string literals. config.status
+# uses concatenation to generate longer strings.
+
+AT_SETUP([Substitute a 2000-byte string])
+
+AT_DATA([Foo.in], [@foo@
+])
+AT_DATA([Bar.in], [@bar@
+])
+AT_DATA([Baz.in], [@baz@
+])
+AT_DATA([Boo.in], [@b147@
+@b148@
+@b149@
+@b295@
+@b296@
+@b297@
+])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_SUBST([foo], ]m4_for([n], 1, 100,, ....................)[)
+AC_SUBST([bar], "]m4_for([n], 1, 100,, @ @ @ @ @ @ @ @ @ @@)[")
+baz="]m4_for([m], 1, 100,, ... ... ... ... ....)[
+"
+baz=$baz$baz$baz$baz$baz
+AC_SUBST([baz])
+b29='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+b147=$b29$b29$b29$b29$b29'\\'
+b148=$b147'\'
+b149=$b148'\'
+b295=$b147$b147'\'
+b296=$b295'\'
+b297=$b296'\'
+AC_SUBST([b147])
+AC_SUBST([b148])
+AC_SUBST([b149])
+AC_SUBST([b295])
+AC_SUBST([b296])
+AC_SUBST([b297])
+AC_PROG_AWK
+AC_CONFIG_FILES([Foo Bar Baz Boo])
+AC_OUTPUT
+]])
+
+cp "$abs_top_srcdir/build-aux/install-sh" .
+
+b29='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+b147=$b29$b29$b29$b29$b29'\\'
+b295=$b147$b147'\'
+cat >Boo-exp <<EOF
+$b147
+$b147\\
+$b147\\\\
+$b295
+$b295\\
+$b295\\\\
+EOF
+
+AT_CHECK_AUTOCONF
+# Check both awk and the result of AC_PROG_AWK
+# Quote the first word in the for list for Solaris sh.
+for awk_arg in "Foo=" AWK=awk; do
+ AT_CHECK_CONFIGURE([$awk_arg])
+ AT_CHECK([cat Foo], 0, m4_for([n], 1, 100,, ....................)
+)
+ AT_CHECK([cat Bar], 0, m4_for([n], 1, 100,, @ @ @ @ @ @ @ @ @ @@)
+)
+ AT_DATA([stdout],
+ [m4_for([n], 1, 5,, m4_for([m], 1, 100,, ... ... ... ... ....)
+)])
+ AT_CHECK([cat Baz], 0, [stdout])
+ AT_CHECK([diff Boo-exp Boo])
+done
+AT_CLEANUP
+
+
+## ------------------------------ ##
+## Define to a 2000-byte string. ##
+## ------------------------------ ##
+
+AT_SETUP([Define to a 2000-byte string])
+AT_KEYWORDS([AC@&t@_DEFINE AC@&t@_DEFINE_UNQUOTED])
+
+AT_CONFIGURE_AC(
+[[
+AC_DEFINE_UNQUOTED([foo], ]m4_for([n], 1, 100,, ....................)[, [desc])
+AC_DEFINE([fooq], ]m4_for([n], 1, 100,, ....................)[, [desc])
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+AT_CHECK_CONFIGURE
+AT_CHECK_DEFINES([@%:@define foo m4_for([n], 1, 100,, ....................)
+@%:@define fooq m4_for([n], 1, 100,, ....................)
+])
+AT_CLEANUP
+
+
+## ------------------------------------------ ##
+## Substitute and define special characters. ##
+## ------------------------------------------ ##
+
+# Use characters special to the shell, sed, awk, and M4.
+
+AT_SETUP([Substitute and define special characters])
+AT_KEYWORDS([AC@&t@_DEFINE AC@&t@_DEFINE_UNQUOTED])
+
+AT_XFAIL_IF([byte=\\200s; dnl
+test `{ printf $byte; echo; } | sed -n '/^./p' | wc -l` = 0])
+
+AT_DATA([Foo.in], [@foo@
+@bar@@notsubsted@@baz@ stray @ and more@@@baz@
+abc@bar@baz@baz
+abc@bar@@baz@baz
+abc@bar@@baz@baz@
+abc@bar @baz@baz
+abc@bar @baz@baz@
+abc@bar @baz@@baz@
+@file@
+ @file@
+X@file@
+@file@X
+])
+
+AT_DATA([File],
+[@foo@@bar@
+])
+
+AT_DATA([Zardoz.in], [@zardoz@
+])
+
+AT_CONFIGURE_AC(
+[[foo="AS@&t@_ESCAPE([[X*'[]+ ", & &`\($foo \& \\& \\\& \\\\& \ \\ \\\ !]])"
+#"
+bar="@foo@ @baz@"
+baz=bla
+( for i in 0 1 2 3; do
+ for j in 0 1 2 3 4 5 6 7; do
+ for k in 0 1 2 3 4 5 6 7; do
+ case $i$j$k in #(
+ 000 | 015 | 377) ;; # MinGW awk dislikes 0xFF, and the test does
+ # the wrong thing for CR on MinGW.
+ #(
+ *) printf \\$i$j$k's' ;; # The 's' works around a Solaris 8 /bin/bash bug.
+ esac
+ done
+ done
+ done
+ printf \\n
+) >allowed-chars
+zardoz=`cat allowed-chars`
+AC_SUBST([foo])
+AC_SUBST([bar])
+AC_SUBST([baz])
+AC_SUBST([zardoz])
+file=File
+AC_SUBST_FILE([file])
+AC_DEFINE([fooq], [[X*'[]+ ", & &`\($foo !]], [Awful value.])
+AC_DEFINE([barq], [[%!_!# X]], [Value that is used as special delimiter.])
+AC_DEFINE_UNQUOTED([foo], [[X*'[]+ ", & &\`\\(\$foo !]], [Awful value.])
+AC_DEFINE_UNQUOTED([bar], [[%!_!# X]], [Value that is used as special delimiter.])
+AC_DEFINE_UNQUOTED([unq1], [$baz], [unquoted, test 1])
+AC_DEFINE_UNQUOTED([unq2], [\$baz], [unquoted, test 2])
+AC_DEFINE_UNQUOTED([unq3], ["$baz"], [unquoted, test 3])
+AC_DEFINE_UNQUOTED([unq4], [${baz+set}], [unquoted, test 4])
+AC_DEFINE_UNQUOTED([unq5], ["${baz+`echo "a "' b'`}"], [unquoted, test 5])
+AC_DEFINE_UNQUOTED([unq6], [`echo hi`], [unquoted, test 6])
+AC_DEFINE_UNQUOTED([unq7], ['\\"'], [unquoted, test 7])
+AC_PROG_AWK
+AC_CONFIG_FILES([Foo Zardoz])]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_AUTOHEADER
+# Check both awk and the result of AC_PROG_AWK
+# Quote the first word in the for list for Solaris sh.
+for awk_arg in "FOO=" AWK=awk; do
+ AT_CHECK_CONFIGURE([$awk_arg])
+ AT_CHECK([cat Foo], 0, [[X*'[]+ ", & &`\($foo \& \\& \\\& \\\\& \ \\ \\\ !
+@foo@ @baz@@notsubsted@bla stray @ and more@@bla
+abc@foo@ @baz@baz@baz
+abc@foo@ @baz@blabaz
+abc@foo@ @baz@blabaz@
+abc@bar blabaz
+abc@bar blabaz@
+abc@bar blabla
+@foo@@bar@
+@foo@@bar@
+X@file@
+@file@X
+]])
+ AT_CHECK([cmp allowed-chars Zardoz])
+ AT_CHECK_DEFINES([[#define bar %!_!# X
+#define barq %!_!# X
+#define foo X*'[]+ ", & &`\($foo !
+#define fooq X*'[]+ ", & &`\($foo !
+#define unq1 bla
+#define unq2 $baz
+#define unq3 "bla"
+#define unq4 set
+#define unq5 "a b"
+#define unq6 hi
+#define unq7 '\"'
+]])
+done
+AT_CLEANUP
+
+
+## ---------------------- ##
+## Substitute a newline. ##
+## ---------------------- ##
+
+AT_SETUP([Substitute a newline])
+
+AT_DATA([Foo.in],
+[@foo@
+@bar@
+])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+foo='one
+two'
+bar='%!_!# ''
+x'
+AC_SUBST([foo])
+AC_SUBST([bar])
+AC_CONFIG_FILES([Foo])
+AC_PROG_AWK
+AC_OUTPUT
+]])
+
+cp "$abs_top_srcdir/build-aux/install-sh" .
+
+echo 'one
+two
+%!_!# ''
+x' >expout
+
+AT_CHECK_AUTOCONF
+# Check both awk and the result of AC_PROG_AWK
+# Quote the first word in the for list for Solaris sh.
+for awk_arg in "FOO=" AWK=awk; do
+ AT_CHECK_CONFIGURE([$awk_arg])
+ AT_CHECK([cat Foo], 0, [expout])
+done
+AT_CLEANUP
+
+
+## ------------------ ##
+## Define a newline. ##
+## ------------------ ##
+
+AT_SETUP([Define a newline])
+AT_KEYWORDS([AC@&t@_DEFINE AC@&t@_DEFINE_UNQUOTED])
+AT_CONFIGURE_AC([[AC_DEFINE([foo], [one
+two], [This spans two lines.])
+]])
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+dnl Older versions of m4 report error at line 5 (end of macro);
+dnl newer versions report it at line 4 (start of macro).
+AT_CHECK([[sed 's/^configure.ac:[45]: //' stderr]], [],
+[[warning: AC_DEFINE: `one
+two' is not a valid preprocessor define value
+]])
+AT_CHECK_AUTOHEADER([], [], [], [stderr])
+AT_CHECK([[sed 's/^configure.ac:[45]: //' stderr]], [],
+[[warning: AC_DEFINE: `one
+two' is not a valid preprocessor define value
+]])
+AT_CHECK_CONFIGURE
+AT_CHECK_DEFINES([[#define foo one
+]])
+
+AT_CONFIGURE_AC([[AC_DEFINE_UNQUOTED([foo], [one
+two], [This spans two lines.])
+]])
+AT_CHECK_AUTOCONF([], [], [], [stderr])
+AT_CHECK([[sed 's/^configure.ac:[45]: //' stderr]], [],
+[[warning: AC_DEFINE_UNQUOTED: `one
+two' is not a valid preprocessor define value
+]])
+AT_CHECK_AUTOHEADER([], [], [], [stderr])
+AT_CHECK([[sed 's/^configure.ac:[45]: //' stderr]], [],
+[[warning: AC_DEFINE_UNQUOTED: `one
+two' is not a valid preprocessor define value
+]])
+AT_CHECK_CONFIGURE
+AT_CHECK_DEFINES([[#define foo one
+]])
+
+AT_CLEANUP
+
+
+## ------------------------------------ ##
+## AC_SUBST: variable name validation. ##
+## ------------------------------------ ##
+
+AT_SETUP([AC_SUBST: variable name validation])
+
+AT_CONFIGURE_AC([[AC_SUBST(, [])
+AC_CONFIG_FILES([Makefile])
+]])
+AT_DATA([Makefile.in], [[
+]])
+mv -f configure.ac configure.tmpl
+
+# Invalid names.
+for var in ['' ab\~ ab\( ab[] ab\' ab\" ab\\\\]; do
+ sed ["s/AC_SUBST(/&[$var]/"] <configure.tmpl >configure.ac
+ AT_CHECK_AUTOCONF([], [1], [], [ignore])
+done
+
+# Valid names.
+for var in ab a4 'a@@&t@\&t@b'; do
+ sed ["s/AC_SUBST(/&[$var]/"] <configure.tmpl >configure.ac
+ AT_CHECK_AUTOCONF
+ AT_CHECK_AUTOHEADER
+ AT_CHECK_CONFIGURE
+done
+
+AT_CLEANUP
+
+
+## ------------------------ ##
+## datarootdir workaround. ##
+## ------------------------ ##
+
+AT_SETUP([datarootdir workaround])
+
+AT_DATA([Foo.in],
+[@datadir@
+@docdir@
+@infodir@
+@localedir@
+@mandir@
+])
+
+AT_DATA([Bar.in],
+[@mydatadir@
+])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+d@&t@nl The following line silences the warnings, if uncommented:
+d@&t@nl AC_DEFUN([AC_DATAROOTDIR_CHECKED])
+
+# This substitution is wrong and bogus! Don't use it in your own code!
+# Read `info Autoconf "Defining Directories"'!
+AC_SUBST([mydatadir], [${datadir}/my])
+
+AC_CONFIG_FILES([Foo Bar])
+AC_OUTPUT
+]])
+
+cp "$abs_top_srcdir/build-aux/install-sh" .
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [], [],
+ [config.status: WARNING: 'Foo.in' seems to ignore the --datarootdir setting
+config.status: WARNING: Bar contains a reference to the variable `datarootdir'
+which seems to be undefined. Please make sure it is defined
+])
+AT_CHECK([grep datarootdir Foo], 1, [])
+
+rm configure
+sed '/AC_DEFUN/s/^d@&t@nl //' configure.ac >t
+mv t configure.ac
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE
+
+AT_CLEANUP
+
+
+## -------- ##
+## srcdir. ##
+## -------- ##
+
+AT_SETUP([srcdir])
+
+rm -f -r at-dir
+mkdir at-dir
+: >at-dir/bar.in
+: >foo.in
+
+AT_DATA([configure.ac],
+[[AC_INIT
+
+AC_CONFIG_FILES([foo at-dir/bar])
+
+# Use quotes in the INIT-COMMANDS to accommodate a value of $srcdir
+# containing e.g., spaces or shell meta-characters.
+# Use *single* quotes because the context is an unquoted here-doc.
+AC_CONFIG_COMMANDS([report],
+[test -f "$srcdir/configure.ac" ||
+ AC_MSG_ERROR([cannot find $srcdir/configure.ac])],
+ [srcdir='$srcdir'])
+
+AC_OUTPUT
+rm -f -r foo at-dir/bar
+]])
+
+AT_CHECK_AUTOCONF
+
+# In place.
+AT_CHECK([./configure $configure_options], [], [ignore])
+
+# Relative name.
+AT_CHECK([cd at-dir && ../configure $configure_options], [], [ignore])
+
+# Absolute name.
+at_here=`pwd`
+AT_CHECK([cd at-dir && "$at_here/configure" $configure_options], [], [ignore])
+
+AT_CLEANUP
+
+
+## ------- ##
+## VPATH. ##
+## ------- ##
+
+AT_SETUP([VPATH])
+
+dirs='at paren brace space'
+for dir in $dirs; do
+ mkdir $dir $dir/s1 $dir/s2
+ touch $dir/f $dir/s1/f1 $dir/s2/f2
+done
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_FILES([at/Makefile paren/Makefile brace/Makefile space/Makefile])
+AC_OUTPUT
+]])
+
+AT_DATA([at/Makefile.in],
+[[# This is what you should use in order to be portable to old makes.
+srcdir = @srcdir@
+VPATH = @srcdir@/s1:@srcdir@:@srcdir@/s2
+all: f f1 f2
+ @echo ok
+]])
+
+AT_DATA([paren/Makefile.in],
+[[# This works with some makes but not with old ones.
+srcdir = @srcdir@
+VPATH = $(srcdir)/s1:$(srcdir):$(srcdir)/s2
+all: f f1 f2
+ @echo ok
+]])
+
+AT_DATA([brace/Makefile.in],
+[[# This works with some makes but not with old ones.
+srcdir = @srcdir@
+VPATH = ${srcdir}/s1:${srcdir}:${srcdir}/s2
+all: f f1 f2
+ @echo ok
+]])
+
+AT_DATA([space/Makefile.in],
+[[# This fails with FreeBSD make, for example.
+srcdir = @srcdir@
+VPATH = @srcdir@/s1 @srcdir@ @srcdir@/s2
+all: f f1 f2
+ @echo ok
+]])
+
+AT_CHECK_AUTOCONF
+
+: "${MAKE=make}"
+
+# In place.
+AT_CHECK([./configure $configure_options], [], [ignore])
+# Treat BSD make separately, afterwards, for maximal coverage.
+dirs='at paren brace'
+for dir in $dirs; do
+ AT_CHECK([cd $dir && $MAKE], [], [ignore], [ignore])
+done
+
+rm -f config.status
+mkdir build absbuild
+
+# Relative name.
+AT_CHECK([cd build && ../configure $configure_options], [], [ignore])
+for dir in $dirs; do
+ AT_CHECK([cd build/$dir && $MAKE], [], [ignore], [ignore])
+done
+
+# Absolute name.
+at_here=`pwd`
+AT_CHECK([cd absbuild && "$at_here/configure" $configure_options], [], [ignore])
+for dir in $dirs; do
+ AT_CHECK([cd absbuild/$dir && $MAKE], [], [ignore], [ignore])
+done
+
+# These will not pass with BSD make.
+AT_CHECK([cd space && { $MAKE || exit 77; }], [], [ignore], [ignore])
+AT_CHECK([cd build/space && $MAKE], [], [ignore], [ignore])
+AT_CHECK([cd absbuild/space && $MAKE], [], [ignore], [ignore])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## Signal handling. ##
+## ----------------- ##
+
+AT_SETUP([Signal handling])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+kill -2 $$
+exit 77
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], 1, ignore, ignore)
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## AC_CONFIG_LINKS. ##
+## ----------------- ##
+
+AT_SETUP([AC_CONFIG_LINKS])
+
+AT_DATA([configure.ac],
+[[AC_INIT([config links to config files test], [1.0])
+AC_CONFIG_SRCDIR([sub1/file1.in])
+AC_CONFIG_FILES([sub1/file1 file2])
+AC_CONFIG_LINKS([file1:sub1/file1 sub2/file2:file2])
+AC_OUTPUT
+]])
+
+mkdir sub1
+
+AT_DATA([sub1/file1.in],
+[[/* @configure_input@ */
+#define PACKAGE_STRING "@PACKAGE_STRING@"
+]])
+
+AT_DATA([file2.in],
+[[/* @configure_input@ */
+#define PACKAGE_STRING "@PACKAGE_STRING@"
+]])
+
+mkdir build
+AT_CHECK_AUTOCONF
+cd build
+AT_CHECK([../configure && ../configure], 0, [ignore])
+AT_CHECK([cat sub1/file1 sub2/file2 | grep -c "config links"], 0, [2
+])
+AT_CHECK([../configure && ../configure], 0, [ignore])
+AT_CHECK([cat sub1/file1 sub2/file2 | grep -c "config links"], 0, [2
+])
+cd ..
+rm -rf build
+mkdir build
+cd build
+cwd=`pwd`
+AT_CHECK(["$cwd"/../configure && "$cwd"/../configure], 0, [ignore])
+AT_CHECK([cat sub1/file1 sub2/file2 | grep -c "config links"], 0, [2
+])
+cd ..
+AT_CHECK([./configure && ./configure], 0, [ignore], [stderr])
+AT_CHECK([cat sub1/file1 sub2/file2 | grep -c "config links"], 0, [2
+])
+cwd=`pwd`
+AT_CHECK(["$cwd"/configure && "$cwd"/configure], 0, [ignore], [ignore])
+AT_CHECK([cat sub1/file1 sub2/file2 | grep -c "config links"], 0, [2
+])
+
+AT_CLEANUP
+
+
+## ------------------------------------- ##
+## AC_CONFIG_LINKS and identical files. ##
+## ------------------------------------- ##
+AT_SETUP([AC_CONFIG_LINKS and identical files])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_CONFIG_LINKS([src/s:src/s])
+test "$srcdir" != '.' && AC_CONFIG_LINKS([src/t:src/t])
+AC_OUTPUT
+]])
+
+mkdir src build
+echo file1 > src/s
+echo file2 > src/t
+AT_CHECK_AUTOCONF
+cd build
+AT_CHECK([../configure $configure_options && ../configure $configure_options],
+ 0, [ignore])
+AT_CHECK([cat src/s src/t], 0, [file1
+file2
+])
+
+cd ..
+rm -rf build
+mkdir build
+cd build
+cwd=`pwd`
+AT_CHECK(["$cwd"/../configure], 0, [ignore])
+AT_CHECK([cat src/s src/t], 0, [file1
+file2
+])
+AT_CHECK(["$cwd"/../configure], 0, [ignore])
+AT_CHECK([cat src/s src/t], 0, [file1
+file2
+])
+cd ..
+AT_CHECK([./configure $configure_options && ./configure $configure_options],
+ 0, [ignore], [stderr])
+AT_CHECK([grep src/t stderr], 1)
+AT_CHECK([cat src/s src/t], 0, [file1
+file2
+])
+cwd=`pwd`
+AT_CHECK(["$cwd"/configure && "$cwd"/configure], 0, [ignore], [ignore])
+AT_CHECK([cat src/s src/t], 0, [file1
+file2
+])
+
+AT_CLEANUP
+
+
+AT_BANNER([autoreconf.])
+
+## ---------------------------- ##
+## Configuring subdirectories. ##
+## ---------------------------- ##
+
+# .
+# |-- builddir
+# | |-- config.log
+# | |-- config.status
+# | `-- inner
+# | |-- config.log
+# | |-- config.status
+# | `-- innermost
+# | `-- config
+# |-- configure
+# |-- configure.ac
+# |-- inner
+# | |-- configure
+# | |-- configure.ac
+# | `-- innermost
+# | `-- config.in
+# `-- install-sh
+#
+AT_SETUP([Configuring subdirectories])
+AT_KEYWORDS(autoreconf)
+
+# We use aclocal (via autoreconf).
+AT_CHECK([aclocal --version || exit 77], [], [stdout], [ignore])
+AT_CHECK([[grep '[1-9]\.[0-9]' stdout || exit 77]], [], [ignore])
+
+# It should understand configure.ac.
+AT_CHECK([[grep '[^0-9]1\.[01234][^0-9]' stdout && exit 77]], [1], [ignore])
+
+# Set CONFIG_SITE to a nonexistent file, so that there are
+# no worries about nonstandard values for 'prefix'.
+CONFIG_SITE=no-such-file
+export CONFIG_SITE
+
+# The contents of `inner/', and `inner/innermost/'.
+AS_MKDIR_P([inner/innermost])
+
+# We have to use configure.in, not configure.ac, if we still want to
+# be compatible with Automake 1.4: aclocal (run by autoreconf) would
+# die because it can't find configure.in.
+AT_DATA([inner/configure.in],
+[[AC_INIT(GNU Inner, 1.0)
+AC_CONFIG_SRCDIR([innermost/config.in])
+AC_ARG_VAR([INNER], [an inner variable])
+AC_SUBST([INNER])
+if test "x$INNER" = x; then
+ INNER=inner
+fi
+AC_CONFIG_FILES([innermost/config])
+AC_OUTPUT
+]])
+
+AT_DATA([inner/innermost/config.in],
+[INNER=@INNER@
+srcdir=@srcdir@
+top_srcdir=@top_srcdir@
+prefix=@prefix@
+])
+
+# The contents of `.'
+AT_DATA([install-sh], [])
+
+# nonexistent is allowed not to exist.
+AT_DATA([configure.in],
+[[AC_INIT(GNU Outer, 1.0)
+AC_ARG_VAR([OUTER], [an outer variable])
+if false; then
+ AC_CONFIG_SUBDIRS([nonexistent])
+fi
+AC_CONFIG_SUBDIRS([inner])
+AC_OUTPUT
+]])
+
+# If there are improperly quoted AC_DEFUN installed in share/aclocal,
+# they trigger warnings from aclocal 1.8, so ignore stderr.
+AT_CHECK([autoreconf], [], [], [ignore])
+AT_CHECK([test -f inner/configure])
+
+# Running the outer configure recursively should provide the innermost
+# help strings.
+chmod a-w inner/innermost inner .
+AT_CHECK([{ ./configure $configure_options --help=recursive; chmod u+w .; } | grep INNER], 0,
+ [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod u+w . inner inner/innermost
+
+# Running the outer configure should trigger the inner.
+AT_CHECK_CONFIGURE
+AT_CHECK([cat inner/innermost/config], 0,
+[INNER=inner
+srcdir=.
+top_srcdir=..
+prefix=/usr/local
+])
+
+# The same, but from a builddir.
+AS_MKDIR_P([builddir])
+AT_CHECK([cd builddir && ../configure $configure_options], 0, [ignore])
+AT_CHECK([cat builddir/inner/innermost/config], 0,
+[INNER=inner
+srcdir=../../../inner/innermost
+top_srcdir=../../../inner
+prefix=/usr/local
+])
+
+# Make sure precious variables and command line options are properly
+# passed, even when there are duplicates.
+AT_CHECK([cd builddir && ../configure $configure_options --prefix /bad --prefix /good INNER=bad INNER=good],
+ 0, [ignore])
+AT_CHECK([cat builddir/inner/innermost/config], 0,
+[INNER=good
+srcdir=../../../inner/innermost
+top_srcdir=../../../inner
+prefix=/good
+])
+
+# Make sure --prefix is properly quoted
+AT_CHECK([cd builddir && ../configure --prefix "/a b c$ 'd"], 0, [ignore])
+AT_CHECK([cat builddir/inner/innermost/config], 0,
+[INNER=inner
+srcdir=../../../inner/innermost
+top_srcdir=../../../inner
+prefix=/a b c$ 'd
+])
+
+# Make sure --silent is properly passed...
+AT_CHECK([cd builddir && ../configure $configure_options --silent], 0, [])
+# ...but not stored in config.status.
+AT_CHECK([cd builddir && ./config.status --recheck], 0, [stdout])
+AT_CHECK([grep 'creating \./config.status' stdout], 0, [ignore])
+
+# --cache-file is adjusted for subdirectories, so the cache is shared.
+AT_CHECK([cd builddir && ../configure $configure_options --config-cache],
+ [], [stdout])
+AT_CHECK([grep 'loading .*\.\./config.cache' stdout], [], [ignore])
+
+# Make sure we can run autoreconf on a subdirectory
+rm -f configure configure.in
+AT_CHECK([autoreconf inner], [], [], [ignore])
+
+# Make sure we can pass a configure.ac name
+AT_CHECK([cd inner && autoreconf configure.in], [], [], [ignore])
+AT_CHECK([autoreconf inner/configure.in], [], [], [ignore])
+
+AT_CLEANUP
+
+
+
+## -------------- ##
+## Deep Package. ##
+## -------------- ##
+
+AT_SETUP([Deep Package])
+AT_KEYWORDS(autoreconf)
+
+# We use aclocal (via autoreconf).
+AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
+
+# The contents of `.'
+AT_DATA([install-sh], [])
+AT_DATA([configure.in],
+[[AC_INIT(GNU Outer, 1.0)
+AC_ARG_VAR([OUTER], [an outer variable])
+AC_CONFIG_SUBDIRS([
+ inner
+ inner2
+])
+AC_OUTPUT
+]])
+
+# The contents of `inner/', and `inner/innermost/'.
+AS_MKDIR_P([inner/innermost])
+AS_MKDIR_P([inner2])
+
+AT_DATA([inner/configure.in],
+[[AC_INIT(GNU Inner, 1.0)
+AC_ARG_VAR([INNER], [an inner variable])
+AC_CONFIG_SUBDIRS(innermost)
+AC_OUTPUT
+]])
+
+AT_DATA([inner/innermost/configure.in],
+[[AC_INIT(GNU Innermost, 1.0)
+AC_ARG_VAR([INNERMOST], [an innermost variable])
+AC_CONFIG_HEADERS(config.h:config.hin)
+AC_DEFINE_UNQUOTED([INNERMOST], [$INNERMOST], [an innermost variable])
+if test -n "$innermost_error"; then
+ AC_MSG_FAILURE([error in $PACKAGE_NAME])
+fi
+AC_OUTPUT
+]])
+
+AT_DATA([inner2/configure.in],
+[[AC_INIT(GNU Inner 2, 1.0)
+AC_ARG_VAR([INNER2], [an inner2 variable])
+AC_OUTPUT
+]])
+
+AT_CHECK([autoreconf -Wall -v], [0], [ignore], [stderr])
+# We should not warn about nonliteral argument to AC_CONFIG_SUBDIRS here.
+AT_CHECK([grep 'AC_CONFIG_SUBDIRS:.*literals' stderr], [1])
+AT_CHECK([test -f inner/configure])
+AT_CHECK([test -f inner/innermost/configure])
+AT_CHECK([test -f inner/innermost/config.hin])
+AT_CHECK([test -f inner2/configure])
+
+# Running the outer configure recursively should provide the innermost
+# help strings.
+chmod a-w inner/innermost inner
+AT_CHECK([{ ./configure $configure_options --help=recursive; chmod u+w .; } | grep " INNER "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
+AT_CHECK([{ ./configure $configure_options --help=recursive; chmod u+w .; } | grep " INNER2 "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
+AT_CHECK([{ ./configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
+AT_CHECK([{ /bin/sh ./configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
+AT_CHECK([PATH=.$PATH_SEPARATOR$PATH; export PATH; { /bin/sh configure $configure_options --help=recursive; chmod +w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w .
+AT_CHECK([PATH=.$PATH_SEPARATOR$PATH; export PATH; { configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod u+w inner inner/innermost
+
+# Running the outer configure should trigger the inner.
+AT_CHECK_CONFIGURE([INNERMOST=tsomrenni])
+AT_CHECK([grep INNERMOST inner/innermost/config.h], 0,
+[[#define INNERMOST tsomrenni
+]])
+
+# Ensure we point to the right config.log file for errors.
+AT_CHECK_CONFIGURE([innermost_error=:], [1], [], [stderr])
+AT_CHECK([grep 'inner/innermost' stderr], [], [ignore])
+cd inner
+AT_CHECK_CONFIGURE([innermost_error=:], [1], [], [stderr])
+AT_CHECK([grep 'innermost' stderr], [], [ignore])
+cd ..
+
+# The same, but from a builddir.
+AS_MKDIR_P([builddir])
+chmod a-w builddir inner/innermost inner
+AT_CHECK([cd builddir && { ../configure $configure_options --help=recursive; chmod u+w .; } | grep " INNER "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w builddir
+AT_CHECK([cd builddir && { ../configure $configure_options --help=recursive; chmod u+w .; } | grep " INNER2 "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w builddir
+AT_CHECK([cd builddir && { ../configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w builddir
+AT_CHECK([cd builddir && { /bin/sh ../configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod a-w builddir
+# Not all shells search $PATH for scripts.
+if (cd builddir && PATH=`pwd`/..$PATH_SEPARATOR$PATH /bin/sh configure $configure_options --help) >/dev/null 2>&1; then
+ AT_CHECK([cd builddir && PATH=`pwd`/..$PATH_SEPARATOR$PATH /bin/sh configure $configure_options --help=recursive | grep " INNERMOST "], 0, [ignore])
+fi
+AT_CHECK([PATH=`pwd`$PATH_SEPARATOR$PATH; export PATH; cd builddir && { configure $configure_options --help=recursive; chmod u+w .; } | grep " INNERMOST "],
+ 0, [ignore], [stderr],
+ [AT_CHECK([grep 'rerun with a POSIX shell' stderr], [], [ignore])])
+chmod u+w builddir inner inner/innermost
+AT_CHECK([cd builddir && ../configure $configure_options INNERMOST=build/tsomrenni], 0, [ignore])
+AT_CHECK([grep INNERMOST builddir/inner/innermost/config.h], 0,
+[[#define INNERMOST build/tsomrenni
+]])
+
+AT_CLEANUP
+
+
+
+## -------------------------------- ##
+## Non-Autoconf AC_CONFIG_SUBDIRS. ##
+## -------------------------------- ##
+
+AT_SETUP([Non-Autoconf AC_CONFIG_SUBDIRS])
+AT_KEYWORDS([autoreconf])
+
+# We use aclocal (via autoreconf).
+AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
+
+AT_DATA([install-sh], [])
+AT_DATA([configure.in],
+[[AC_INIT(GNU Outer, 1.0)
+AC_CONFIG_SUBDIRS([inner])
+AC_OUTPUT
+]])
+
+AS_MKDIR_P([inner])
+
+AT_DATA([inner/configure],
+[[#! /bin/sh
+case "$*" in
+ *--help*) echo 'No Autoconf here, folks!' ;;
+ *) echo got_it >myfile ;;
+esac
+exit 0
+]])
+chmod +x inner/configure
+
+AT_CHECK([autoreconf -Wall -v], 0, [ignore], [ignore])
+
+# Running the outer configure recursively should provide the innermost
+# help strings.
+AT_CHECK([./configure $configure_options --help=recursive | grep "folks"], 0, [ignore])
+
+# Running the outer configure should trigger the inner.
+AT_CHECK([./configure $configure_options], 0, [ignore])
+AT_CHECK([test -f inner/myfile], 0)
+
+AT_CLEANUP
+
+
+## ------------------------------- ##
+## Non-literal AC_CONFIG_SUBDIRS. ##
+## ------------------------------- ##
+
+AT_SETUP([Non-literal AC_CONFIG_SUBDIRS])
+AT_KEYWORDS([autoreconf])
+
+AT_DATA([install-sh], [])
+AT_DATA([configure.in],
+[[AC_INIT(GNU Outer, 1.0)
+
+my_subdirs=
+# Taken from autoconf.texi:Subdirectories.
+if test "x$package_foo_enabled" = xyes; then
+ my_subdirs="$my_subdirs foo"
+fi
+AC_CONFIG_SUBDIRS([$my_subdirs])
+AC_OUTPUT
+]])
+
+# Hand-written aclocal.m4, so we don't invoke `aclocal -Werror' which
+# could barf over warnings in third-party macro files, or fail over
+# warnings with older aclocal which didn't yet understand -W*.
+AT_DATA([aclocal.m4])
+
+AS_MKDIR_P([foo])
+
+AT_DATA([foo/configure],
+[[#! /bin/sh
+touch innerfile
+exit 0
+]])
+chmod +x foo/configure
+
+# autoreconf should warn without -Wno-syntax, but should not fail without -Werror.
+AT_CHECK([autoreconf -Werror -v], [1], [ignore], [stderr])
+AT_CHECK([grep 'AC_CONFIG_SUBDIRS:.*literals' stderr], [0], [ignore])
+AT_CHECK([autoreconf -v], [0], [ignore], [stderr])
+AT_CHECK([grep 'AC_CONFIG_SUBDIRS:.*literals' stderr], [0], [ignore])
+AT_CHECK([autoreconf -v --force -Wno-syntax], 0, [ignore], [stderr])
+AT_CHECK([grep 'AC_CONFIG_SUBDIRS:.*literals' stderr], [1])
+
+AT_CHECK([./configure $configure_options], [0], [ignore])
+AT_CHECK([test ! -f foo/innerfile])
+# Running the outer configure should trigger the inner.
+AT_CHECK([./configure $configure_options package_foo_enabled=yes], [0], [ignore])
+AT_CHECK([test -f foo/innerfile])
+
+AT_CLEANUP
+
+
+## ----------------- ##
+## Empty directory. ##
+## ----------------- ##
+
+AT_SETUP([Empty directory])
+AT_KEYWORDS([autoreconf])
+
+# We use aclocal (via autoreconf).
+AT_CHECK([aclocal --version || exit 77], [], [ignore], [ignore])
+
+# The test group directory is not necessarily _empty_, but it does not contain
+# files meaningful to `autoreconf'.
+
+AT_CHECK([autoreconf -Wall -v], 1, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+
+## ------------------------------ ##
+## Unusual Automake input files. ##
+## ------------------------------ ##
+
+# This parallels gnumake.test in Automake.
+
+AT_SETUP([Unusual Automake input files])
+AT_KEYWORDS([autoreconf])
+
+# We use aclocal and automake via autoreconf.
+AT_CHECK([automake --version || exit 77], [], [stdout], [ignore])
+AT_CHECK([[grep '[1-9]\.[0-9]' stdout || exit 77]], [], [ignore])
+
+AT_DATA([configure.in],
+[[AC_INIT(GNU foo, 1.0)
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([HeeHee])
+AC_OUTPUT
+]])
+
+AT_DATA([HeeHee.am],
+[[# Humans do no worse than `GNUmakefile.am'.
+AUTOMAKE_OPTIONS = foreign 1.8
+]])
+
+AT_CHECK([autoreconf -Wall -v -i], 0, [ignore], [stderr],
+ [AT_CHECK([grep 'require.*1\.8' stderr && exit 77], [1])])
+AT_CHECK([test -f HeeHee.in])
+
+AT_CLEANUP
diff --git a/tests/wrapper.as b/tests/wrapper.as
new file mode 100644
index 0000000..7a77a04
--- /dev/null
+++ b/tests/wrapper.as
@@ -0,0 +1,41 @@
+AS_INIT[]dnl -*- shell-script -*-
+# wrapper.as -- running `@wrap_program@' as if it were installed.
+# @configure_input@
+# Copyright (C) 2003-2004, 2007, 2009-2012 Free Software Foundation,
+# Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+testdir='@abs_top_builddir@/tests'
+PATH=$testdir$PATH_SEPARATOR$PATH
+AUTOCONF=autoconf
+AUTOHEADER=autoheader
+AUTOM4TE=autom4te
+AUTOM4TE_CFG='@abs_top_builddir@/lib/autom4te.cfg'
+autom4te_perllibdir='@abs_top_srcdir@/lib'
+export AUTOCONF AUTOHEADER AUTOM4TE AUTOM4TE_CFG autom4te_perllibdir
+
+case '@wrap_program@' in
+ ifnames)
+ # Does not have lib files.
+ exec '@abs_top_builddir@/bin/@wrap_program@' ${1+"$@"}
+ ;;
+ *)
+ # We might need files from the build tree (frozen files), in
+ # addition of src files.
+ exec '@abs_top_builddir@/bin/@wrap_program@' \
+ -B '@abs_top_builddir@'/lib \
+ -B '@abs_top_srcdir@'/lib ${1+"$@"}
+esac
+exit 1