\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename automake-history.info
@settitle automake-history
@setchapternewpage on
@c %**end of header

@copying

This manual describes (part of) the history of GNU Automake, a program
that creates GNU standards-compliant Makefiles from template files.

Copyright @copyright{} 1995-2018 Free Software Foundation, Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with 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 quotation
@end copying

@titlepage
@title Brief History of Automake
@author David MacKenzie
@author Tom Tromey
@author Alexandre Duret-Lutz
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@contents

@ifnottex
@node Top
@comment  node-name,  next,  previous,  up
@top Brief History of Automake

@insertcopying

@menu
* Timeline::                      The Automake story.
* Dependency Tracking Evolution:: Evolution of Automatic Dependency Tracking
* Releases::                      Release statistics
* Copying This Manual::           How to make copies of this manual

@detailmenu
 --- The Detailed Node Listing ---

Evolution of Automatic Dependency Tracking

* First Take on Dependencies::    Precomputed dependency tracking
* Dependencies As Side Effects::  Update at developer compile time
* Dependencies for the User::     Update at user compile time
* Techniques for Dependencies::   Alternative approaches

Techniques for Computing Dependencies

* Recommendations for Tool Writers::
* Future Directions for Dependencies::

Copying This Manual

* GNU Free Documentation License::  License for copying this manual

@end detailmenu
@end menu

@end ifnottex

@node Timeline
@chapter Timeline

@table @asis
@item 1994-09-19 First CVS commit.

If we can trust the CVS repository, David J.@tie{}MacKenzie (djm) started
working on Automake (or AutoMake, as it was spelt then) this Monday.

The first version of the @command{automake} script looks as follows.

@example
#!/bin/sh

status=0

for makefile
do
  if test ! -f $@{makefile@}.am; then
    echo "automake: $@{makefile@}.am: No such honkin' file"
    status=1
    continue
  fi

  exec 4> $@{makefile@}.in

done
@end example

From this you can already see that Automake will be about reading
@file{*.am} file and producing @file{*.in} files.  You cannot see
anything else, but if you also know that David is the one who created
Autoconf two years before you can guess the rest.

Several commits follow, and by the end of the day Automake is
reported to work for GNU fileutils and GNU m4.

The modus operandi is the one that is still used today: variable
assignments in @file{Makefile.am} files trigger injections of
precanned @file{Makefile} fragments into the generated
@file{Makefile.in}.  The use of @file{Makefile} fragments was inspired
by the 4.4BSD @command{make} and include files, however Automake aims
to be portable and to conform to the GNU standards for @file{Makefile}
variables and targets.

At this point, the most recent release of Autoconf is version 1.11,
and David is preparing to release Autoconf 2.0 in late October.  As a
matter of fact, he will barely touch Automake after September.

@item 1994-11-05 David MacKenzie's last commit.

At this point Automake is a 200 line portable shell script, plus 332
lines of @file{Makefile} fragments.  In the @file{README}, David
states his ambivalence between ``portable shell'' and ``more
appropriate language'':

@quotation
I wrote it keeping in mind the possibility of it becoming an Autoconf
macro, so it would run at configure-time.  That would slow
configuration down a bit, but allow users to modify the Makefile.am
without needing to fetch the AutoMake package.  And, the Makefile.in
files wouldn't need to be distributed.  But all of AutoMake would.  So
I might reimplement AutoMake in Perl, m4, or some other more
appropriate language.
@end quotation

Automake is described as ``an experimental Makefile generator''.
There is no documentation.  Adventurous users are referred to the
examples and patches needed to use Automake with GNU m4 1.3, fileutils
3.9, time 1.6, and development versions of find and indent.

These examples seem to have been lost.  However at the time of writing
(10 years later in September, 2004) the FSF still distributes a
package that uses this version of Automake: check out GNU termutils
2.0.

@item 1995-11-12 Tom Tromey's first commit.

After one year of inactivity, Tom Tromey takes over the package.
Tom was working on GNU cpio back then, and doing this just for fun,
having trouble finding a project to contribute to.  So while hacking
he wanted to bring the @file{Makefile.in} up to GNU standards.  This
was hard, and one day he saw Automake on @url{ftp://alpha.gnu.org/},
grabbed it and tried it out.

Tom didn't talk to djm about it until later, just to make sure he
didn't mind if he made a release.  He did a bunch of early releases to
the Gnits folks.

Gnits was (and still is) totally informal, just a few GNU friends who
Fran@,cois Pinard knew, who were all interested in making a common
infrastructure for GNU projects, and shared a similar outlook on how
to do it.  So they were able to make some progress.  It came along
with Autoconf and extensions thereof, and then Automake from David and
Tom (who were both gnitsians).  One of their ideas was to write a
document paralleling the GNU standards, that was more strict in some
ways and more detailed.  They never finished the GNITS standards, but
the ideas mostly made their way into Automake.

@item 1995-11-23 Automake 0.20

Besides introducing automatic dependency tracking (@pxref{Dependency
Tracking Evolution}), this version also supplies a 9-page manual.

At this time @command{aclocal} and @code{AM_INIT_AUTOMAKE} did not
exist, so many things had to be done by hand.  For instance, here is
what a configure.in (this is the former name of the
@file{configure.ac} we use today) must contain in order to use
Automake 0.20:

@example
PACKAGE=cpio
VERSION=2.3.911
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
AC_ARG_PROGRAM
AC_PROG_INSTALL
@end example

(Today all of the above is achieved by @code{AC_INIT} and
@code{AM_INIT_AUTOMAKE}.)

Here is how programs are specified in @file{Makefile.am}:

@example
PROGRAMS = hello
hello_SOURCES = hello.c
@end example

This looks pretty much like what we do today, except the
@code{PROGRAMS} variable has no directory prefix specifying where
@file{hello} should be installed: all programs are installed in
@samp{$(bindir)}.  @code{LIBPROGRAMS} can be used to specify programs
that must be built but not installed (it is called
@code{noinst_PROGRAMS} nowadays).

Programs can be built conditionally using @code{AC_SUBST}itutions:

@example
PROGRAMS = @@progs@@
AM_PROGRAMS = foo bar baz
@end example

(@code{AM_PROGRAMS} has since then been renamed to
@code{EXTRA_PROGRAMS}.)

Similarly scripts, static libraries, and data can be built and installed
using the @code{LIBRARIES}, @code{SCRIPTS}, and @code{DATA} variables.
However @code{LIBRARIES} were treated a bit specially in that Automake
did automatically supply the @file{lib} and @file{.a} prefixes.
Therefore to build @file{libcpio.a}, one had to write

@example
LIBRARIES = cpio
cpio_SOURCES = ...
@end example

Extra files to distribute must be listed in @code{DIST_OTHER} (the
ancestor of @code{EXTRA_DIST}).  Also extra directories that are to be
distributed should appear in @code{DIST_SUBDIRS}, but the manual
describes this as a temporary ugly hack (today extra directories should
also be listed in @code{EXTRA_DIST}, and @code{DIST_SUBDIRS} is used
for another purpose, @pxref{Conditional Subdirectories, , Conditional
Subdirectories, automake, GNU Automake}).

@item 1995-11-26 Automake 0.21

In less time than it takes to cook a frozen pizza, Tom rewrites
Automake using Perl.  At this time Perl 5 is only one year old, and
Perl 4.036 is in use at many sites.  Supporting several Perl versions
has been a source of problems through the whole history of Automake.

If you never used Perl 4, imagine Perl 5 without objects, without
@samp{my} variables (only dynamically scoped @samp{local} variables),
without function prototypes, with function calls that needs to be
prefixed with @samp{&}, etc.  Traces of this old style can still be
found in today's @command{automake}.

@item 1995-11-28 Automake 0.22
@itemx 1995-11-29 Automake 0.23

Bug fixes.

@item 1995-12-08 Automake 0.24
@itemx 1995-12-10 Automake 0.25

Releases are raining.  0.24 introduces the uniform naming scheme we
use today, i.e., @code{bin_PROGRAMS} instead of @code{PROGRAMS},
@code{noinst_LIBRARIES} instead of @code{LIBLIBRARIES}, etc.  (However
@code{EXTRA_PROGRAMS} does not exist yet, @code{AM_PROGRAMS} is still
in use; and @code{TEXINFOS} and @code{MANS} still have no directory
prefixes.)  Adding support for prefixes like that was one of the major
ideas in @command{automake}; it has lasted pretty well.

AutoMake is renamed to Automake (Tom seems to recall it was Fran@,cois
Pinard's doing).

0.25 fixes a Perl 4 portability bug.

@item 1995-12-18 Jim Meyering starts using Automake in GNU Textutils.
@item 1995-12-31 Fran@,cois Pinard starts using Automake in GNU tar.

@item 1996-01-03 Automake 0.26
@itemx 1996-01-03 Automake 0.27

Of the many changes and suggestions sent by Fran@,cois Pinard and
included in 0.26, perhaps the most important is the advice that to
ease customization a user rule or variable definition should always
override an Automake rule or definition.

Gordon Matzigkeit and Jim Meyering are two other early contributors
that have been sending fixes.

0.27 fixes yet another Perl 4 portability bug.

@item 1996-01-13 Automake 0.28

Automake starts scanning @file{configure.in} for @code{LIBOBJS}
support.  This is an important step because until this version
Automake only knew about the @file{Makefile.am}s it processed.
@file{configure.in} was Autoconf's world and the link between Autoconf
and Automake had to be done by the @file{Makefile.am} author.  For
instance, if @file{config.h} was generated by @file{configure}, it was the
package maintainer's responsibility to define the @code{CONFIG_HEADER}
variable in each @file{Makefile.am}.

Succeeding releases will rely more and more on scanning
@file{configure.in} to better automate the Autoconf integration.

0.28 also introduces the @code{AUTOMAKE_OPTIONS} variable and the
@option{--gnu} and @option{--gnits} options, the latter being stricter.

@item 1996-02-07 Automake 0.29

Thanks to @file{configure.in} scanning, @code{CONFIG_HEADER} is gone,
and rebuild rules for @file{configure}-generated file are
automatically output.

@code{TEXINFOS} and @code{MANS} converted to the uniform naming
scheme.

@item 1996-02-24 Automake 0.30

The test suite is born.  It contains 9 tests.  From now on test cases
will be added pretty regularly (@pxref{Releases}), and this proved to
be really helpful later on.

@code{EXTRA_PROGRAMS} finally replaces @code{AM_PROGRAMS}.

All the third-party Autoconf macros, written mostly by Fran@,cois
Pinard (and later Jim Meyering), are distributed in Automake's
hand-written @file{aclocal.m4} file.  Package maintainers are expected
to extract the necessary macros from this file.  (In previous versions
you had to copy and paste them from the manual...)

@item 1996-03-11 Automake 0.31

The test suite in 0.30 was run via a long @code{check-local} rule.  Upon
Ulrich Drepper's suggestion, 0.31 makes it an Automake rule output
whenever the @code{TESTS} variable is defined.

@code{DIST_OTHER} is renamed to @code{EXTRA_DIST}, and the @code{check_}
prefix is introduced.  The syntax is now the same as today.

@item 1996-03-15 Gordon Matzigkeit starts writing libtool.

@item 1996-04-27 Automake 0.32

@code{-hook} targets are introduced; an idea from Dieter Baron.

@file{*.info} files, which were output in the build directory are
now built in the source directory, because they are distributed.  It
seems these files like to move back and forth as that will happen
again in future versions.

@item 1996-05-18 Automake 0.33

Gord Matzigkeit's main two contributions:

@itemize
@item very preliminary libtool support
@item the distcheck rule
@end itemize

Although they were very basic at this point, these are probably
among the top features for Automake today.

Jim Meyering also provides the infamous @code{jm_MAINTAINER_MODE}, since
then renamed to @code{AM_MAINTAINER_MODE} and abandoned by its author
(@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).

@item 1996-05-28 Automake 1.0

After only six months of heavy development, the @command{automake} script is
3134 lines long, plus 973 lines of @file{Makefile} fragments.  The
package has 30 pages of documentation, and 38 test cases.
@file{aclocal.m4} contains 4 macros.

From now on and until version 1.4, new releases will occur at a rate
of about one a year.  1.1 did not exist, actually 1.1b to 1.1p have
been the name of beta releases for 1.2.  This is the first time
Automake uses suffix letters to designate beta releases, a habit that
lasts.

@item 1996-10-10 Kevin Dalley packages Automake 1.0 for Debian GNU/Linux.

@item 1996-11-26 David J.@tie{}MacKenzie releases Autoconf 2.12.

Between June and October, the Autoconf development is almost stalled.
Roland McGrath has been working at the beginning of the year.  David
comes back in November to release 2.12, but he won't touch Autoconf
anymore after this year, and Autoconf then really stagnates.  The
desolate Autoconf @file{ChangeLog} for 1997 lists only 7 commits.

@item 1997-02-28 @email{automake@@gnu.ai.mit.edu} list alive

The mailing list is announced as follows:
@smallexample
I've created the "automake" mailing list.  It is
"automake@@gnu.ai.mit.edu".  Administrivia, as always, to
automake-request@@gnu.ai.mit.edu.

The charter of this list is discussion of automake, autoconf, and
other configuration/portability tools (e.g., libtool).  It is expected
that discussion will range from pleas for help all the way up to
patches.

This list is archived on the FSF machines.  Offhand I don't know if
you can get the archive without an account there.

This list is open to anybody who wants to join.  Tell all your
friends!
-- Tom Tromey
@end smallexample

Before that people were discussing Automake privately, on the Gnits
mailing list (which is not public either), and less frequently on
@code{gnu.misc.discuss}.

@code{gnu.ai.mit.edu} is now @code{gnu.org}, in case you never
noticed.  The archives of the early years of the
@code{automake@@gnu.org} list have been lost, so today it is almost
impossible to find traces of discussions that occurred before 1999.
This has been annoying more than once, as such discussions can be
useful to understand the rationale behind a piece of uncommented code
that was introduced back then.

@item 1997-06-22 Automake 1.2

Automake developments continues, and more and more new Autoconf macros
are required.  Distributing them in @file{aclocal.m4} and requiring
people to browse this file to extract the relevant macros becomes
uncomfortable.  Ideally, some of them should be contributed to
Autoconf so that they can be used directly, however Autoconf is
currently inactive.  Automake 1.2 consequently introduces
@command{aclocal} (@command{aclocal} was actually started on
1996-07-28), a tool that automatically constructs an @file{aclocal.m4}
file from a repository of third-party macros.  Because Autoconf has
stalled, Automake also becomes a kind of repository for such
third-party macros, even macros completely unrelated to Automake (for
instance macros that fix broken Autoconf macros).

The 1.2 release contains 20 macros, including the
@code{AM_INIT_AUTOMAKE} macro that simplifies the creation of
@file{configure.in}.

Libtool is fully supported using @code{*_LTLIBRARIES}.

The missing script is introduced by Fran@,cois Pinard; it is meant
to be a better solution than @code{AM_MAINTAINER_MODE}
(@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).

Conditionals support was implemented by Ian Lance Taylor.  At the
time, Tom and Ian were working on an internal project at Cygnus.  They
were using ILU, which is pretty similar to CORBA@.  They wanted to
integrate ILU into their build, which was all @file{configure}-based,
and Ian thought that adding conditionals to @command{automake} was
simpler than doing all the work in @file{configure} (which was the
standard at the time).  So this was actually funded by Cygnus.

This very useful but tricky feature will take a lot of time to
stabilize.  (At the time this text is written, there are still
primaries that have not been updated to support conditional
definitions in Automake 1.9.)

The @command{automake} script has almost doubled: 6089 lines of Perl,
plus 1294 lines of @file{Makefile} fragments.

@item 1997-07-08 Gordon Matzigkeit releases Libtool 1.0.

@item 1998-04-05 Automake 1.3

This is a small advance compared to 1.2.
It adds support for assembly, and preliminary support for Java.

Perl 5.004_04 is out, but fixes to support Perl 4 are still
regularly submitted whenever Automake breaks it.

@item 1998-09-06 @code{sourceware.cygnus.com} is on-line.

Sourceware was setup by Jason Molenda to host open source projects.

@item 1998-09-19  Automake CVS repository moved to @code{sourceware.cygnus.com}
@itemx 1998-10-26  @code{sourceware.cygnus.com} announces it hosts Automake:
Automake is now hosted on @code{sourceware.cygnus.com}.  It has a
publicly accessible CVS repository.  This CVS repository is a copy of
the one Tom was using on his machine, which in turn is based on
a copy of the CVS repository of David MacKenzie.  This is why we still
have to full source history.  (Automake was on Sourceware until 2007-10-29,
when it moved to a git repository on @code{savannah.gnu.org},
but the Sourceware host had been renamed to @code{sources.redhat.com}.)

The oldest file in the administrative directory of the CVS repository
that was created on Sourceware is dated 1998-09-19, while the
announcement that @command{automake} and @command{autoconf} had joined
@command{sourceware} was made on 1998-10-26.  They were among the
first projects to be hosted there.

The heedful reader will have noticed Automake was exactly 4 years old
on 1998-09-19.

@item 1999-01-05 Ben Elliston releases Autoconf 2.13.

@item 1999-01-14 Automake 1.4

This release adds support for Fortran 77 and for the @code{include}
statement.  Also, @samp{+=} assignments are introduced, but it is
still quite easy to fool Automake when mixing this with conditionals.

These two releases, Automake 1.4 and Autoconf 2.13 make a duo that
will be used together for years.

@command{automake} is 7228 lines, plus 1591 lines of Makefile
fragment, 20 macros (some 1.3 macros were finally contributed back to
Autoconf), 197 test cases, and 51 pages of documentation.

@item 1999-03-27 The @code{user-dep-branch} is created on the CVS repository.

This implements a new dependency tracking schemed that should be
able to handle automatic dependency tracking using any compiler (not
just gcc) and any make (not just GNU @command{make}).  In addition,
the new scheme should be more reliable than the old one, as
dependencies are generated on the end user's machine.  Alexandre Oliva
creates depcomp for this purpose.

@xref{Dependency Tracking Evolution}, for more details about the
evolution of automatic dependency tracking in Automake.

@item 1999-11-21 The @code{user-dep-branch} is merged into the main trunk.

This was a huge problem since we also had patches going in on the
trunk.  The merge took a long time and was very painful.

@item 2000-05-10

Since September 1999 and until 2003, Akim Demaille will be zealously
revamping Autoconf.

@quotation
I think the next release should be called "3.0".@*
Let's face it: you've basically rewritten autoconf.@*
Every weekend there are 30 new patches.@*
I don't see how we could call this "2.15" with a straight face.@*
-- Tom Tromey on @email{autoconf@@gnu.org}
@end quotation

Actually Akim works like a submarine: he will pile up patches while he
works off-line during the weekend, and flush them in batch when he
resurfaces on Monday.

@item 2001-01-24

On this Wednesday, Autoconf 2.49c, the last beta before Autoconf 2.50
is out, and Akim has to find something to do during his week-end :)

@item 2001-01-28

Akim sends a batch of 14 patches to @email{automake@@gnu.org}.

@quotation
Aiieeee!  I was dreading the day that the Demaillator turned his
sights on automake@dots{} and now it has arrived! -- Tom Tromey
@end quotation

It's only the beginning: in two months he will send 192 patches.  Then
he would slow down so Tom can catch up and review all this.  Initially
Tom actually read all of these patches, then he probably trustingly
answered OK to most of them, and finally gave up and let Akim apply
whatever he wanted.  There was no way to keep up with that patch rate.

@quotation
Anyway the patch below won't apply since it predates Akim's
sourcequake; I have yet to figure where the relevant passage has
been moved :) -- Alexandre Duret-Lutz
@end quotation

All of these patches were sent to and discussed on
@email{automake@@gnu.org}, so subscribed users were literally drowning in
technical mails.  Eventually, the @email{automake-patches@@gnu.org}
mailing list was created in May.

Year after year, Automake had drifted away from its initial design:
construct @file{Makefile.in} by assembling various @file{Makefile}
fragments.  In 1.4, lots of @file{Makefile} rules are being emitted at
various places in the @command{automake} script itself; this does not
help ensuring a consistent treatment of these rules (for instance
making sure that user-defined rules override Automake's own rules).
One of Akim's goal was moving all of these hard-coded rules to separate
@file{Makefile} fragments, so the logic could be centralized in a
@file{Makefile} fragment processor.

Another significant contribution of Akim is the interface with the
``trace'' feature of Autoconf.  The way to scan @file{configure.in} at
this time was to read the file and grep the various macro of interest
to Automake.  Doing so could break in many unexpected ways; @command{automake}
could miss some definition (for instance @samp{AC_SUBST([$1], [$2])}
where the arguments are known only when M4 is run), or conversely it
could detect some macro that was not expanded (because it is called
conditionally).  In the CVS version of Autoconf, Akim had implemented
the @option{--trace} option, which provides accurate information about
where macros are actually called and with what arguments.  Akim will
equip Automake with a second @file{configure.in} scanner that uses
this @option{--trace} interface.  Since it was not sensible to drop the
Autoconf 2.13 compatibility yet, this experimental scanner was only
used when an environment variable was set, the traditional
grep-scanner being still the default.

@item 2001-04-25 Gary V.@tie{}Vaughan releases Libtool 1.4

It has been more than two years since Automake 1.4, CVS Automake has
suffered lot's of heavy changes and still is not ready for release.
Libtool 1.4 had to be distributed with a patch against Automake 1.4.

@item 2001-05-08 Automake 1.4-p1
@itemx 2001-05-24 Automake 1.4-p2

Gary V.@tie{}Vaughan, the principal Libtool maintainer, makes a ``patch
release'' of Automake:

@quotation
The main purpose of this release is to have a stable automake
which is compatible with the latest stable libtool.
@end quotation

The release also contains obvious fixes for bugs in Automake 1.4,
some of which were reported almost monthly.

@item 2001-05-21 Akim Demaille releases Autoconf 2.50

@item 2001-06-07 Automake 1.4-p3
@itemx 2001-06-10 Automake 1.4-p4
@itemx 2001-07-15 Automake 1.4-p5

Gary continues his patch-release series.  These also add support for
some new Autoconf 2.50 idioms.  Essentially, Autoconf now advocates
@file{configure.ac} over @file{configure.in}, and it introduces a new
syntax for @code{AC_OUTPUT}ing files.

@item 2001-08-23 Automake 1.5

A major and long-awaited release, that comes more than two years after
1.4.  It brings many changes, among which:
@itemize
@item The new dependency tracking scheme that uses @command{depcomp}.
Aside from the improvement on the dependency tracking itself
(@pxref{Dependency Tracking Evolution}), this also streamlines the use
of @command{automake}-generated @file{Makefile.in}s as the @file{Makefile.in}s
used during development are now the same as those used in
distributions.  Before that the @file{Makefile.in}s generated for
maintainers required GNU @command{make} and GCC, they were different
from the portable @file{Makefile} generated for distribution; this was
causing some confusion.

@item Support for per-target compilation flags.

@item Support for reference to files in subdirectories in most
@file{Makefile.am} variables.

@item Introduction of the @code{dist_}, @code{nodist_}, and @code{nobase_}
prefixes.
@item Perl 4 support is finally dropped.
@end itemize

1.5 did break several packages that worked with 1.4.  Enough so that
Linux distributions could not easily install the new Automake version
without breaking many of the packages for which they had to run
@command{automake}.

Some of these breakages were effectively bugs that would eventually be
fixed in the next release.  However, a lot of damage was caused by
some changes made deliberately to render Automake stricter on some
setup we did consider bogus.  For instance, @samp{make distcheck} was
improved to check that @samp{make uninstall} did remove all the files
@samp{make install} installed, that @samp{make distclean} did not omit
some file, and that a VPATH build would work even if the source
directory was read-only.  Similarly, Automake now rejects multiple
definitions of the same variable (because that would mix very badly
with conditionals), and @samp{+=} assignments with no previous
definition.  Because these changes all occurred suddenly after 1.4 had
been established for more than two years, it hurt users.

To make matter worse, meanwhile Autoconf (now at version 2.52) was
facing similar troubles, for similar reasons.

@item 2002-03-05 Automake 1.6

This release introduced versioned installation (@pxref{API Versioning, ,
API Versioning, automake, GNU Automake}). This was mainly pushed by
Havoc Pennington, taking the GNOME source tree as motive: due to
incompatibilities between the autotools it's impossible for the GNOME
packages to switch to Autoconf 2.53 and Automake 1.5 all at once, so
they are currently stuck with Autoconf 2.13 and Automake 1.4.

The idea was to call this version @file{automake-1.6}, call all its
bug-fix versions identically, and switch to @file{automake-1.7} for
the next release that adds new features or changes some rules.  This
scheme implies maintaining a bug-fix branch in addition to the
development trunk, which means more work from the maintainer, but
providing regular bug-fix releases proved to be really worthwhile.

Like 1.5, 1.6 also introduced a bunch of incompatibilities, intentional or
not.  Perhaps the more annoying was the dependence on the newly
released Autoconf 2.53.  Autoconf seemed to have stabilized enough
since its explosive 2.50 release and included changes required to fix
some bugs in Automake.  In order to upgrade to Automake 1.6, people
now had to upgrade Autoconf too; for some packages it was no picnic.

While versioned installation helped people to upgrade, it also
unfortunately allowed people not to upgrade.  At the time of writing,
some Linux distributions are shipping packages for Automake 1.4, 1.5,
1.6, 1.7, 1.8, and 1.9.  Most of these still install 1.4 by default.
Some distribution also call 1.4 the ``stable'' version, and present
``1.9'' as the development version; this does not really makes sense
since 1.9 is way more solid than 1.4.  All this does not help the
newcomer.

@item 2002-04-11 Automake 1.6.1

1.6, and the upcoming 1.4-p6 release were the last release by Tom.
This one and those following will be handled by Alexandre
Duret-Lutz.  Tom is still around, and will be there until about 1.7,
but his interest into Automake is drifting away towards projects like
@command{gcj}.

Alexandre has been using Automake since 2000, and started to
contribute mostly on Akim's incitement (Akim and Alexandre have been
working in the same room from 1999 to 2002).  In 2001 and 2002 he had
a lot of free time to enjoy hacking Automake.

@item 2002-06-14 Automake 1.6.2

@item 2002-07-28 Automake 1.6.3
@itemx 2002-07-28 Automake 1.4-p6

Two releases on the same day.  1.6.3 is a bug-fix release.

Tom Tromey backported the versioned installation mechanism on the 1.4
branch, so that Automake 1.6.x and Automake 1.4-p6 could be installed
side by side.  Another request from the GNOME folks.

@item 2002-09-25 Automake 1.7

This release switches to the new @file{configure.ac} scanner Akim
was experimenting in 1.5.

@item 2002-10-16 Automake 1.7.1
@itemx 2002-12-06 Automake 1.7.2
@itemx 2003-02-20 Automake 1.7.3
@itemx 2003-04-23 Automake 1.7.4
@itemx 2003-05-18 Automake 1.7.5
@itemx 2003-07-10 Automake 1.7.6
@itemx 2003-09-07 Automake 1.7.7
@itemx 2003-10-07 Automake 1.7.8

Many bug-fix releases.  1.7 lasted because the development version
(upcoming 1.8) was suffering some major internal revamping.

@item 2003-10-26 Automake on screen

Episode 49, `Repercussions', in the third season of the `Alias' TV
show is first aired.

Marshall, one of the characters, is working on a computer virus that he
has to modify before it gets into the wrong hands or something like
that.  The screenshots you see do not show any program code, they show
a @file{Makefile.in} generated by automake...

@item 2003-11-09 Automake 1.7.9

@item 2003-12-10 Automake 1.8

The most striking update is probably that of @command{aclocal}.

@command{aclocal} now uses @code{m4_include} in the produced
@file{aclocal.m4} when the included macros are already distributed
with the package (an idiom used in many packages), which reduces code
duplication.  Many people liked that, but in fact this change was
really introduced to fix a bug in rebuild rules: @file{Makefile.in}
must be rebuilt whenever a dependency of @file{configure} changes, but
all the @file{m4} files included in @file{aclocal.m4} where unknown
from @command{automake}.  Now @command{automake} can just trace the
@code{m4_include}s to discover the dependencies.

@command{aclocal} also starts using the @option{--trace} Autoconf option
in order to discover used macros more accurately.  This will turn out
to be very tricky (later releases will improve this) as people had
devised many ways to cope with the limitation of previous
@command{aclocal} versions, notably using handwritten
@code{m4_include}s: @command{aclocal} must make sure not to redefine a
rule that is already included by such statement.

Automake also has seen its guts rewritten.  Although this rewriting
took a lot of efforts, it is only apparent to the users in that some
constructions previously disallowed by the implementation now work
nicely.  Conditionals, Locations, Variable and Rule definitions,
Options: these items on which Automake works have been rewritten as
separate Perl modules, and documented.

@item 2004-01-11 Automake 1.8.1
@itemx 2004-01-12 Automake 1.8.2
@itemx 2004-03-07 Automake 1.8.3
@itemx 2004-04-25 Automake 1.8.4
@itemx 2004-05-16 Automake 1.8.5

@item 2004-07-28 Automake 1.9

This release tries to simplify the compilation rules it outputs to
reduce the size of the Makefile.  The complaint initially come from
the libgcj developers.  Their @file{Makefile.in} generated with
Automake 1.4 and custom build rules (1.4 did not support compiled
Java) is 250KB@.  The one generated by 1.8 was over 9MB@!  1.9 gets it
down to 1.2MB@.

Aside from this it contains mainly minor changes and bug-fixes.

@item 2004-08-11 Automake 1.9.1
@itemx 2004-09-19 Automake 1.9.2

Automake has ten years.  This chapter of the manual was initially
written for this occasion.

@item 2007-10-29 Automake repository moves to @code{savannah.gnu.org}
and uses git as primary repository.

@end table

@node Dependency Tracking Evolution
@chapter Evolution of Automatic Dependency Tracking

Over the years Automake has deployed three different dependency
tracking methods.  Each method, including the current one, has had
flaws of various sorts.  Here we lay out the different dependency
tracking methods, their flaws, and their fixes.  We conclude with
recommendations for tool writers, and by indicating future directions
for dependency tracking work in Automake.

@menu
* First Take on Dependencies::    Precomputed dependency tracking
* Dependencies As Side Effects::  Update at developer compile time
* Dependencies for the User::     Update at user compile time
* Techniques for Dependencies::   Alternative approaches
@end menu

@node First Take on Dependencies
@section First Take on Dependency Tracking
@unnumberedsubsec Description

Our first attempt at automatic dependency tracking was based on the
method recommended by GNU @command{make}.  (@pxref{Automatic
Prerequisites, , Generating Prerequisites Automatically, make, The GNU
make Manual})

This version worked by precomputing dependencies ahead of time.  For
each source file, it had a special @file{.P} file that held the
dependencies.  There was a rule to generate a @file{.P} file by
invoking the compiler appropriately.  All such @file{.P} files were
included by the @file{Makefile}, thus implicitly becoming dependencies
of @file{Makefile}.

@unnumberedsubsec Bugs

This approach had several critical bugs.

@itemize
@item
The code to generate the @file{.P} file relied on @command{gcc}.
(A limitation, not technically a bug.)
@item
The dependency tracking mechanism itself relied on GNU @command{make}.
(A limitation, not technically a bug.)
@item
Because each @file{.P} file was a dependency of @file{Makefile}, this
meant that dependency tracking was done eagerly by @command{make}.
For instance, @samp{make clean} would cause all the dependency files
to be updated, and then immediately removed.  This eagerness also
caused problems with some configurations; if a certain source file
could not be compiled on a given architecture for some reason,
dependency tracking would fail, aborting the entire build.
@item
As dependency tracking was done as a pre-pass, compile times were
doubled--the compiler had to be run twice per source file.
@item
@samp{make dist} re-ran @command{automake} to generate a
@file{Makefile} that did not have automatic dependency tracking (and
that was thus portable to any version of @command{make}).  In order to
do this portably, Automake had to scan the dependency files and remove
any reference that was to a source file not in the distribution.
This process was error-prone.  Also, if @samp{make dist} was run in an
environment where some object file had a dependency on a source file
that was only conditionally created, Automake would generate a
@file{Makefile} that referred to a file that might not appear in the
end user's build.  A special, hacky mechanism was required to work
around this.
@end itemize

@unnumberedsubsec Historical Note

The code generated by Automake is often inspired by the
@file{Makefile} style of a particular author.  In the case of the first
implementation of dependency tracking, I believe the impetus and
inspiration was Jim Meyering.  (I could be mistaken.  If you know
otherwise feel free to correct me.)

@node Dependencies As Side Effects
@section Dependencies As Side Effects
@unnumberedsubsec Description

The next refinement of Automake's automatic dependency tracking scheme
was to implement dependencies as side effects of the compilation.
This was aimed at solving the most commonly reported problems with the
first approach.  In particular we were most concerned with eliminating
the weird rebuilding effect associated with make clean.

In this approach, the @file{.P} files were included using the
@code{-include} command, which let us create these files lazily.  This
avoided the @samp{make clean} problem.

We only computed dependencies when a file was actually compiled.  This
avoided the performance penalty associated with scanning each file
twice.  It also let us avoid the other problems associated with the
first, eager, implementation.  For instance, dependencies would never
be generated for a source file that was not compilable on a given
architecture (because it in fact would never be compiled).

@unnumberedsubsec Bugs

@itemize
@item
This approach also relied on the existence of @command{gcc} and GNU
@command{make}.  (A limitation, not technically a bug.)
@item
Dependency tracking was still done by the developer, so the problems
from the first implementation relating to massaging of dependencies by
@samp{make dist} were still in effect.
@item
This implementation suffered from the ``deleted header file'' problem.
Suppose a lazily-created @file{.P} file includes a dependency on a
given header file, like this:

@example
maude.o: maude.c something.h
@end example

Now suppose that you remove @file{something.h} and update @file{maude.c}
so that this include is no longer needed.  If you run @command{make},
you will get an error because there is no way to create
@file{something.h}.

We fixed this problem in a later release by further massaging the
output of @command{gcc} to include a dummy dependency for each header
file.
@end itemize

@node Dependencies for the User
@section Dependencies for the User
@unnumberedsubsec Description

The bugs associated with @samp{make dist}, over time, became a real
problem.  Packages using Automake were being built on a large number
of platforms, and were becoming increasingly complex.  Broken
dependencies were distributed in ``portable'' @file{Makefile.in}s,
leading to user complaints.  Also, the requirement for @command{gcc}
and GNU @command{make} was a constant source of bug reports.  The next
implementation of dependency tracking aimed to remove these problems.

We realized that the only truly reliable way to automatically track
dependencies was to do it when the package itself was built.  This
meant discovering a method portable to any version of make and any
compiler.  Also, we wanted to preserve what we saw as the best point
of the second implementation: dependency computation as a side effect
of compilation.

In the end we found that most modern make implementations support some
form of include directive.  Also, we wrote a wrapper script that let
us abstract away differences between dependency tracking methods for
compilers.  For instance, some compilers cannot generate dependencies
as a side effect of compilation.  In this case we simply have the
script run the compiler twice.  Currently our wrapper script
(@command{depcomp}) knows about twelve different compilers (including
a "compiler" that simply invokes @command{makedepend} and then the
real compiler, which is assumed to be a standard Unix-like C compiler
with no way to do dependency tracking).

@unnumberedsubsec Bugs

@itemize
@item
Running a wrapper script for each compilation slows down the build.
@item
Many users don't really care about precise dependencies.
@item
This implementation, like every other automatic dependency tracking
scheme in common use today (indeed, every one we've ever heard of),
suffers from the ``duplicated new header'' bug.

This bug occurs because dependency tracking tools, such as the
compiler, only generate dependencies on the successful opening of a
file, and not on every probe.

Suppose for instance that the compiler searches three directories for
a given header, and that the header is found in the third directory.
If the programmer erroneously adds a header file with the same name to
the first directory, then a clean rebuild from scratch could fail
(suppose the new header file is buggy), whereas an incremental rebuild
will succeed.

What has happened here is that people have a misunderstanding of what
a dependency is.  Tool writers think a dependency encodes information
about which files were read by the compiler.  However, a dependency
must actually encode information about what the compiler tried to do.

This problem is not serious in practice.  Programmers typically do not
use the same name for a header file twice in a given project.  (At
least, not in C or C++.  This problem may be more troublesome in
Java.)  This problem is easy to fix, by modifying dependency
generators to record every probe, instead of every successful open.

@item
Since Automake generates dependencies as a side effect of compilation,
there is a bootstrapping problem when header files are generated by
running a program.  The problem is that, the first time the build is
done, there is no way by default to know that the headers are
required, so make might try to run a compilation for which the headers
have not yet been built.

This was also a problem in the previous dependency tracking implementation.

The current fix is to use @code{BUILT_SOURCES} to list built headers
(@pxref{Sources, , Sources, automake, GNU Automake}).  This causes them
to be built before any other build rules are run.  This is unsatisfactory
as a general solution, however in practice it seems sufficient for most
actual programs.
@end itemize

This code is used since Automake 1.5.

In GCC 3.0, we managed to convince the maintainers to add special
command-line options to help Automake more efficiently do its job.  We
hoped this would let us avoid the use of a wrapper script when
Automake's automatic dependency tracking was used with @command{gcc}.

Unfortunately, this code doesn't quite do what we want.  In
particular, it removes the dependency file if the compilation fails;
we'd prefer that it instead only touch the file in any way if the
compilation succeeds.

Nevertheless, since Automake 1.7, when a recent @command{gcc} is
detected at @command{configure} time, we inline the
dependency-generation code and do not use the @command{depcomp}
wrapper script.  This makes compilations faster for those using this
compiler (probably our primary user base).  The counterpart is that
because we have to encode two compilation rules in @file{Makefile}
(with or without @command{depcomp}), the produced @file{Makefile}s are
larger.

@node Techniques for Dependencies
@section Techniques for Computing Dependencies

There are actually several ways for a build tool like Automake to
cause tools to generate dependencies.

@table @asis
@item @command{makedepend}
This was a commonly-used method in the past.  The idea is to run a
special program over the source and have it generate dependency
information.  Traditional implementations of @command{makedepend} are
not completely precise; ordinarily they were conservative and
discovered too many dependencies.
@item The tool
An obvious way to generate dependencies is to simply write the tool so
that it can generate the information needed by the build tool.  This is
also the most portable method.  Many compilers have an option to
generate dependencies.  Unfortunately, not all tools provide such an
option.
@item The file system
It is possible to write a special file system that tracks opens,
reads, writes, etc, and then feed this information back to the build
tool.  @command{clearmake} does this.  This is a very powerful
technique, as it doesn't require cooperation from the
tool.  Unfortunately it is also very difficult to implement and also
not practical in the general case.
@item @code{LD_PRELOAD}
Rather than use the file system, one could write a special library to
intercept @code{open} and other syscalls.  This technique is also quite
powerful, but unfortunately it is not portable enough for use in
@command{automake}.
@end table

@menu
* Recommendations for Tool Writers::
* Future Directions for Dependencies::
@end menu

@node Recommendations for Tool Writers
@subsection Recommendations for Tool Writers

We think that every compilation tool ought to be able to generate
dependencies as a side effect of compilation.  Furthermore, at least
while @command{make}-based tools are nearly universally in use (at
least in the free software community), the tool itself should generate
dummy dependencies for header files, to avoid the deleted header file
bug.  Finally, the tool should generate a dependency for each probe,
instead of each successful file open, in order to avoid the duplicated
new header bug.

@node Future Directions for Dependencies
@subsection Future Directions for Dependencies

Currently, only languages and compilers understood by Automake can
have dependency tracking enabled.  We would like to see if it is
practical (and worthwhile) to let this support be extended by the user
to languages unknown to Automake.

@node Releases
@chapter Release Statistics

The following table (inspired by @samp{perlhist(1)}) quantifies the
evolution of Automake using these metrics:

@table @asis
@item Date, Rel
The date and version of the release.
@item am
The number of lines of the @command{automake} script.
@item acl
The number of lines of the @command{aclocal} script.
@item pm
The number of lines of the @command{Perl} supporting modules.
@item @file{*.am}
The number of lines of the @file{Makefile} fragments.  The number in
parentheses is the number of files.
@item m4
The number of lines (and files) of Autoconf macros.
@item doc
The number of pages of the documentation (the Postscript version).
@item t
The number of test cases in the test suite.  Of those, the number in
parentheses is the number of generated test cases.
@end table

@multitable {8888-88-88} {8.8-p8} {8888} {8888} {8888} {8888 (88)} {8888 (88)} {888} {888 (88)}
@headitem Date   @tab Rel    @tab   am @tab acl @tab   pm @tab @file{*.am} @tab m4 @tab doc @tab t
@item 1994-09-19 @tab CVS    @tab  141 @tab     @tab      @tab  299 (24) @tab           @tab     @tab
@item 1994-11-05 @tab CVS    @tab  208 @tab     @tab      @tab  332 (28) @tab           @tab     @tab
@item 1995-11-23 @tab 0.20   @tab  533 @tab     @tab      @tab  458 (35) @tab           @tab   9 @tab
@item 1995-11-26 @tab 0.21   @tab  613 @tab     @tab      @tab  480 (36) @tab           @tab  11 @tab
@item 1995-11-28 @tab 0.22   @tab 1116 @tab     @tab      @tab  539 (38) @tab           @tab  12 @tab
@item 1995-11-29 @tab 0.23   @tab 1240 @tab     @tab      @tab  541 (38) @tab           @tab  12 @tab
@item 1995-12-08 @tab 0.24   @tab 1462 @tab     @tab      @tab  504 (33) @tab           @tab  14 @tab
@item 1995-12-10 @tab 0.25   @tab 1513 @tab     @tab      @tab  511 (37) @tab           @tab  15 @tab
@item 1996-01-03 @tab 0.26   @tab 1706 @tab     @tab      @tab  438 (36) @tab           @tab  16 @tab
@item 1996-01-03 @tab 0.27   @tab 1706 @tab     @tab      @tab  438 (36) @tab           @tab  16 @tab
@item 1996-01-13 @tab 0.28   @tab 1964 @tab     @tab      @tab  934 (33) @tab           @tab  16 @tab
@item 1996-02-07 @tab 0.29   @tab 2299 @tab     @tab      @tab  936 (33) @tab           @tab  17 @tab
@item 1996-02-24 @tab 0.30   @tab 2544 @tab     @tab      @tab  919 (32) @tab   85 (1)  @tab  20 @tab 9
@item 1996-03-11 @tab 0.31   @tab 2877 @tab     @tab      @tab  919 (32) @tab   85 (1)  @tab  29 @tab 17
@item 1996-04-27 @tab 0.32   @tab 3058 @tab     @tab      @tab  921 (31) @tab   85 (1)  @tab  30 @tab 26
@item 1996-05-18 @tab 0.33   @tab 3110 @tab     @tab      @tab  926 (31) @tab  105 (1)  @tab  30 @tab 35
@item 1996-05-28 @tab 1.0    @tab 3134 @tab     @tab      @tab  973 (32) @tab  105 (1)  @tab  30 @tab 38
@item 1997-06-22 @tab 1.2    @tab 6089 @tab 385 @tab      @tab 1294 (36) @tab  592 (20) @tab  37 @tab 126
@item 1998-04-05 @tab 1.3    @tab 6415 @tab 422 @tab      @tab 1470 (39) @tab  741 (23) @tab  39 @tab 156
@item 1999-01-14 @tab 1.4    @tab 7240 @tab 426 @tab      @tab 1591 (40) @tab  734 (20) @tab  51 @tab 197
@item 2001-05-08 @tab 1.4-p1 @tab 7251 @tab 426 @tab      @tab 1591 (40) @tab  734 (20) @tab  51 @tab 197
@item 2001-05-24 @tab 1.4-p2 @tab 7268 @tab 439 @tab      @tab 1591 (40) @tab  734 (20) @tab  49 @tab 197
@item 2001-06-07 @tab 1.4-p3 @tab 7312 @tab 439 @tab      @tab 1591 (40) @tab  734 (20) @tab  49 @tab 197
@item 2001-06-10 @tab 1.4-p4 @tab 7321 @tab 439 @tab      @tab 1591 (40) @tab  734 (20) @tab  49 @tab 198
@item 2001-07-15 @tab 1.4-p5 @tab 7228 @tab 426 @tab      @tab 1596 (40) @tab  734 (20) @tab  51 @tab 198
@item 2001-08-23 @tab 1.5    @tab 8016 @tab 475 @tab  600 @tab 2654 (39) @tab 1166 (29) @tab  63 @tab 327
@item 2002-03-05 @tab 1.6    @tab 8465 @tab 475 @tab 1136 @tab 2732 (39) @tab 1603 (27) @tab  66 @tab 365
@item 2002-04-11 @tab 1.6.1  @tab 8544 @tab 475 @tab 1136 @tab 2741 (39) @tab 1603 (27) @tab  66 @tab 372
@item 2002-06-14 @tab 1.6.2  @tab 8575 @tab 475 @tab 1136 @tab 2800 (39) @tab 1609 (27) @tab  67 @tab 386
@item 2002-07-28 @tab 1.6.3  @tab 8600 @tab 475 @tab 1153 @tab 2809 (39) @tab 1609 (27) @tab  67 @tab 391
@item 2002-07-28 @tab 1.4-p6 @tab 7332 @tab 455 @tab      @tab 1596 (40) @tab  735 (20) @tab  49 @tab 197
@item 2002-09-25 @tab 1.7    @tab 9189 @tab 471 @tab 1790 @tab 2965 (39) @tab 1606 (28) @tab  73 @tab 430
@item 2002-10-16 @tab 1.7.1  @tab 9229 @tab 475 @tab 1790 @tab 2977 (39) @tab 1606 (28) @tab  73 @tab 437
@item 2002-12-06 @tab 1.7.2  @tab 9334 @tab 475 @tab 1790 @tab 2988 (39) @tab 1606 (28) @tab  77 @tab 445
@item 2003-02-20 @tab 1.7.3  @tab 9389 @tab 475 @tab 1790 @tab 3023 (39) @tab 1651 (29) @tab  84 @tab 448
@item 2003-04-23 @tab 1.7.4  @tab 9429 @tab 475 @tab 1790 @tab 3031 (39) @tab 1644 (29) @tab  85 @tab 458
@item 2003-05-18 @tab 1.7.5  @tab 9429 @tab 475 @tab 1790 @tab 3033 (39) @tab 1645 (29) @tab  85 @tab 459
@item 2003-07-10 @tab 1.7.6  @tab 9442 @tab 475 @tab 1790 @tab 3033 (39) @tab 1660 (29) @tab  85 @tab 461
@item 2003-09-07 @tab 1.7.7  @tab 9443 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab  90 @tab 467
@item 2003-10-07 @tab 1.7.8  @tab 9444 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab  90 @tab 468
@item 2003-11-09 @tab 1.7.9  @tab 9444 @tab 475 @tab 1790 @tab 3048 (39) @tab 1660 (29) @tab  90 @tab 468
@item 2003-12-10 @tab 1.8    @tab 7171 @tab 585 @tab 7730 @tab 3236 (39) @tab 1666 (31) @tab 104 @tab 521
@item 2004-01-11 @tab 1.8.1  @tab 7217 @tab 663 @tab 7726 @tab 3287 (39) @tab 1686 (31) @tab 104 @tab 525
@item 2004-01-12 @tab 1.8.2  @tab 7217 @tab 663 @tab 7726 @tab 3288 (39) @tab 1686 (31) @tab 104 @tab 526
@item 2004-03-07 @tab 1.8.3  @tab 7214 @tab 686 @tab 7735 @tab 3303 (39) @tab 1695 (31) @tab 111 @tab 530
@item 2004-04-25 @tab 1.8.4  @tab 7214 @tab 686 @tab 7736 @tab 3310 (39) @tab 1701 (31) @tab 112 @tab 531
@item 2004-05-16 @tab 1.8.5  @tab 7240 @tab 686 @tab 7736 @tab 3299 (39) @tab 1701 (31) @tab 112 @tab 533
@item 2004-07-28 @tab 1.9    @tab 7508 @tab 715 @tab 7794 @tab 3352 (40) @tab 1812 (32) @tab 115 @tab 551
@item 2004-08-11 @tab 1.9.1  @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 115 @tab 552
@item 2004-09-19 @tab 1.9.2  @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 132 @tab 554
@item 2004-11-01 @tab 1.9.3  @tab 7507 @tab 718 @tab 7804 @tab 3354 (40) @tab 1812 (32) @tab 134 @tab 556
@item 2004-12-18 @tab 1.9.4  @tab 7508 @tab 718 @tab 7856 @tab 3361 (40) @tab 1811 (32) @tab 140 @tab 560
@item 2005-02-13 @tab 1.9.5  @tab 7523 @tab 719 @tab 7859 @tab 3373 (40) @tab 1453 (32) @tab 142 @tab 562
@item 2005-07-10 @tab 1.9.6  @tab 7539 @tab 699 @tab 7867 @tab 3400 (40) @tab 1453 (32) @tab 144 @tab 570
@item 2006-10-15 @tab 1.10   @tab 7859 @tab 1072 @tab 8024 @tab 3512 (40) @tab 1496 (34) @tab 172 @tab 604
@item 2008-01-19 @tab 1.10.1 @tab 7870 @tab 1089 @tab 8025 @tab 3520 (40) @tab 1499 (34) @tab 173 @tab 617
@item 2008-11-23 @tab 1.10.2 @tab 7882 @tab 1089 @tab 8027 @tab 3540 (40) @tab 1509 (34) @tab 176 @tab 628
@item 2009-05-17 @tab 1.11   @tab 8721 @tab 1092 @tab 8289 @tab 4164 (42) @tab 1714 (37) @tab 181 @tab 732 (20)
@end multitable


@c ========================================================== Appendices

@page
@node Copying This Manual
@appendix Copying This Manual

@menu
* GNU Free Documentation License::  License for copying this manual
@end menu

@node GNU Free Documentation License
@appendixsec GNU Free Documentation License
@include fdl.texi

@bye
