1 \input texinfo @c -*-texinfo-*-
3 @setfilename automake-history.info
4 @settitle automake-history
10 This manual describes (part of) the history of GNU Automake, a program
11 that creates GNU standards-compliant Makefiles from template files.
13 Copyright @copyright{} 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
14 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software
18 Permission is granted to copy, distribute and/or modify this document
19 under the terms of the GNU Free Documentation License,
20 Version 1.3 or any later version published by the Free Software
21 Foundation; with no Invariant Sections, with no Front-Cover texts,
22 and with no Back-Cover Texts. A copy of the license is included in the
23 section entitled ``GNU Free Documentation License.''
29 @title Brief History of Automake
30 @author David MacKenzie
32 @author Alexandre Duret-Lutz
34 @vskip 0pt plus 1filll
42 @comment node-name, next, previous, up
43 @top Brief History of Automake
48 * Timeline:: The Automake story.
49 * Dependency Tracking Evolution:: Evolution of Automatic Dependency Tracking
50 * Releases:: Release statistics
51 * Copying This Manual:: How to make copies of this manual
54 --- The Detailed Node Listing ---
56 Evolution of Automatic Dependency Tracking
58 * First Take on Dependencies:: Precomputed dependency tracking
59 * Dependencies As Side Effects:: Update at developer compile time
60 * Dependencies for the User:: Update at user compile time
61 * Techniques for Dependencies:: Alternative approaches
63 Techniques for Computing Dependencies
65 * Recommendations for Tool Writers::
66 * Future Directions for Dependencies::
70 * GNU Free Documentation License:: License for copying this manual
81 @item 1994-09-19 First CVS commit.
83 If we can trust the CVS repository, David J.@tie{}MacKenzie (djm) started
84 working on Automake (or AutoMake, as it was spelt then) this Monday.
86 The first version of the @command{automake} script looks as follows.
95 if test ! -f $@{makefile@}.am; then
96 echo "automake: $@{makefile@}.am: No such honkin' file"
101 exec 4> $@{makefile@}.in
106 From this you can already see that Automake will be about reading
107 @file{*.am} file and producing @file{*.in} files. You cannot see
108 anything else, but if you also know that David is the one who created
109 Autoconf two years before you can guess the rest.
111 Several commits follow, and by the end of the day Automake is
112 reported to work for GNU fileutils and GNU m4.
114 The modus operandi is the one that is still used today: variable
115 assignments in @file{Makefile.am} files trigger injections of
116 precanned @file{Makefile} fragments into the generated
117 @file{Makefile.in}. The use of @file{Makefile} fragments was inspired
118 by the 4.4BSD @command{make} and include files, however Automake aims
119 to be portable and to conform to the GNU standards for @file{Makefile}
120 variables and targets.
122 At this point, the most recent release of Autoconf is version 1.11,
123 and David is preparing to release Autoconf 2.0 in late October. As a
124 matter of fact, he will barely touch Automake after September.
126 @item 1994-11-05 David MacKenzie's last commit.
128 At this point Automake is a 200 line portable shell script, plus 332
129 lines of @file{Makefile} fragments. In the @file{README}, David
130 states his ambivalence between ``portable shell'' and ``more
131 appropriate language'':
134 I wrote it keeping in mind the possibility of it becoming an Autoconf
135 macro, so it would run at configure-time. That would slow
136 configuration down a bit, but allow users to modify the Makefile.am
137 without needing to fetch the AutoMake package. And, the Makefile.in
138 files wouldn't need to be distributed. But all of AutoMake would. So
139 I might reimplement AutoMake in Perl, m4, or some other more
140 appropriate language.
143 Automake is described as ``an experimental Makefile generator''.
144 There is no documentation. Adventurous users are referred to the
145 examples and patches needed to use Automake with GNU m4 1.3, fileutils
146 3.9, time 1.6, and development versions of find and indent.
148 These examples seem to have been lost. However at the time of writing
149 (10 years later in September, 2004) the FSF still distributes a
150 package that uses this version of Automake: check out GNU termutils
153 @item 1995-11-12 Tom Tromey's first commit.
155 After one year of inactivity, Tom Tromey takes over the package.
156 Tom was working on GNU cpio back then, and doing this just for fun,
157 having trouble finding a project to contribute to. So while hacking
158 he wanted to bring the @file{Makefile.in} up to GNU standards. This
159 was hard, and one day he saw Automake on @url{ftp://alpha.gnu.org/},
160 grabbed it and tried it out.
162 Tom didn't talk to djm about it until later, just to make sure he
163 didn't mind if he made a release. He did a bunch of early releases to
166 Gnits was (and still is) totally informal, just a few GNU friends who
167 Fran@,cois Pinard knew, who were all interested in making a common
168 infrastructure for GNU projects, and shared a similar outlook on how
169 to do it. So they were able to make some progress. It came along
170 with Autoconf and extensions thereof, and then Automake from David and
171 Tom (who were both gnitsians). One of their ideas was to write a
172 document paralleling the GNU standards, that was more strict in some
173 ways and more detailed. They never finished the GNITS standards, but
174 the ideas mostly made their way into Automake.
176 @item 1995-11-23 Automake 0.20
178 Besides introducing automatic dependency tracking (@pxref{Dependency
179 Tracking Evolution}), this version also supplies a 9-page manual.
181 At this time @command{aclocal} and @code{AM_INIT_AUTOMAKE} did not
182 exist, so many things had to be done by hand. For instance, here is
183 what a configure.in (this is the former name of the
184 @file{configure.ac} we use today) must contain in order to use
190 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
191 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
198 (Today all of the above is achieved by @code{AC_INIT} and
199 @code{AM_INIT_AUTOMAKE}.)
201 Here is how programs are specified in @file{Makefile.am}:
205 hello_SOURCES = hello.c
208 This looks pretty much like what we do today, except the
209 @code{PROGRAMS} variable has no directory prefix specifying where
210 @file{hello} should be installed: all programs are installed in
211 @samp{$(bindir)}. @code{LIBPROGRAMS} can be used to specify programs
212 that must be built but not installed (it is called
213 @code{noinst_PROGRAMS} nowadays).
215 Programs can be built conditionally using @code{AC_SUBST}itutions:
219 AM_PROGRAMS = foo bar baz
222 (@code{AM_PROGRAMS} has since then been renamed to
223 @code{EXTRA_PROGRAMS}.)
225 Similarly scripts, static libraries, and data can be built and installed
226 using the @code{LIBRARIES}, @code{SCRIPTS}, and @code{DATA} variables.
227 However @code{LIBRARIES} were treated a bit specially in that Automake
228 did automatically supply the @file{lib} and @file{.a} prefixes.
229 Therefore to build @file{libcpio.a}, one had to write
236 Extra files to distribute must be listed in @code{DIST_OTHER} (the
237 ancestor of @code{EXTRA_DIST}). Also extra directories that are to be
238 distributed should appear in @code{DIST_SUBDIRS}, but the manual
239 describes this as a temporary ugly hack (today extra directories should
240 also be listed in @code{EXTRA_DIST}, and @code{DIST_SUBDIRS} is used
241 for another purpose, @pxref{Conditional Subdirectories, , Conditional
242 Subdirectories, automake, GNU Automake}).
244 @item 1995-11-26 Automake 0.21
246 In less time than it takes to cook a frozen pizza, Tom rewrites
247 Automake using Perl. At this time Perl 5 is only one year old, and
248 Perl 4.036 is in use at many sites. Supporting several Perl versions
249 has been a source of problems through the whole history of Automake.
251 If you never used Perl 4, imagine Perl 5 without objects, without
252 @samp{my} variables (only dynamically scoped @samp{local} variables),
253 without function prototypes, with function calls that needs to be
254 prefixed with @samp{&}, etc. Traces of this old style can still be
255 found in today's @command{automake}.
257 @item 1995-11-28 Automake 0.22
258 @itemx 1995-11-29 Automake 0.23
262 @item 1995-12-08 Automake 0.24
263 @itemx 1995-12-10 Automake 0.25
265 Releases are raining. 0.24 introduces the uniform naming scheme we
266 use today, i.e., @code{bin_PROGRAMS} instead of @code{PROGRAMS},
267 @code{noinst_LIBRARIES} instead of @code{LIBLIBRARIES}, etc. (However
268 @code{EXTRA_PROGRAMS} does not exist yet, @code{AM_PROGRAMS} is still
269 in use; and @code{TEXINFOS} and @code{MANS} still have no directory
270 prefixes.) Adding support for prefixes like that was one of the major
271 ideas in @command{automake}; it has lasted pretty well.
273 AutoMake is renamed to Automake (Tom seems to recall it was Fran@,cois
276 0.25 fixes a Perl 4 portability bug.
278 @item 1995-12-18 Jim Meyering starts using Automake in GNU Textutils.
279 @item 1995-12-31 Fran@,cois Pinard starts using Automake in GNU tar.
281 @item 1996-01-03 Automake 0.26
282 @itemx 1996-01-03 Automake 0.27
284 Of the many changes and suggestions sent by Fran@,cois Pinard and
285 included in 0.26, perhaps the most important is the advice that to
286 ease customization a user rule or variable definition should always
287 override an Automake rule or definition.
289 Gordon Matzigkeit and Jim Meyering are two other early contributors
290 that have been sending fixes.
292 0.27 fixes yet another Perl 4 portability bug.
294 @item 1996-01-13 Automake 0.28
296 Automake starts scanning @file{configure.in} for @code{LIBOBJS}
297 support. This is an important step because until this version
298 Automake only knew about the @file{Makefile.am}s it processed.
299 @file{configure.in} was Autoconf's world and the link between Autoconf
300 and Automake had to be done by the @file{Makefile.am} author. For
301 instance, if @file{config.h} was generated by @file{configure}, it was the
302 package maintainer's responsibility to define the @code{CONFIG_HEADER}
303 variable in each @file{Makefile.am}.
305 Succeeding releases will rely more and more on scanning
306 @file{configure.in} to better automate the Autoconf integration.
308 0.28 also introduces the @code{AUTOMAKE_OPTIONS} variable and the
309 @option{--gnu} and @option{--gnits} options, the latter being stricter.
311 @item 1996-02-07 Automake 0.29
313 Thanks to @file{configure.in} scanning, @code{CONFIG_HEADER} is gone,
314 and rebuild rules for @file{configure}-generated file are
315 automatically output.
317 @code{TEXINFOS} and @code{MANS} converted to the uniform naming
320 @item 1996-02-24 Automake 0.30
322 The test suite is born. It contains 9 tests. From now on test cases
323 will be added pretty regularly (@pxref{Releases}), and this proved to
324 be really helpful later on.
326 @code{EXTRA_PROGRAMS} finally replaces @code{AM_PROGRAMS}.
328 All the third-party Autoconf macros, written mostly by Fran@,cois
329 Pinard (and later Jim Meyering), are distributed in Automake's
330 hand-written @file{aclocal.m4} file. Package maintainers are expected
331 to extract the necessary macros from this file. (In previous versions
332 you had to copy and paste them from the manual...)
334 @item 1996-03-11 Automake 0.31
336 The test suite in 0.30 was run via a long @code{check-local} rule. Upon
337 Ulrich Drepper's suggestion, 0.31 makes it an Automake rule output
338 whenever the @code{TESTS} variable is defined.
340 @code{DIST_OTHER} is renamed to @code{EXTRA_DIST}, and the @code{check_}
341 prefix is introduced. The syntax is now the same as today.
343 @item 1996-03-15 Gordon Matzigkeit starts writing libtool.
345 @item 1996-04-27 Automake 0.32
347 @code{-hook} targets are introduced; an idea from Dieter Baron.
349 @file{*.info} files, which were output in the build directory are
350 now built in the source directory, because they are distributed. It
351 seems these files like to move back and forth as that will happen
352 again in future versions.
354 @item 1996-05-18 Automake 0.33
356 Gord Matzigkeit's main two contributions:
359 @item very preliminary libtool support
360 @item the distcheck rule
363 Although they were very basic at this point, these are probably
364 among the top features for Automake today.
366 Jim Meyering also provides the infamous @code{jm_MAINTAINER_MODE}, since
367 then renamed to @code{AM_MAINTAINER_MODE} and abandoned by its author
368 (@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).
370 @item 1996-05-28 Automake 1.0
372 After only six months of heavy development, the @command{automake} script is
373 3134 lines long, plus 973 lines of @file{Makefile} fragments. The
374 package has 30 pages of documentation, and 38 test cases.
375 @file{aclocal.m4} contains 4 macros.
377 From now on and until version 1.4, new releases will occur at a rate
378 of about one a year. 1.1 did not exist, actually 1.1b to 1.1p have
379 been the name of beta releases for 1.2. This is the first time
380 Automake uses suffix letters to designate beta releases, a habit that
383 @item 1996-10-10 Kevin Dalley packages Automake 1.0 for Debian GNU/Linux.
385 @item 1996-11-26 David J.@tie{}MacKenzie releases Autoconf 2.12.
387 Between June and October, the Autoconf development is almost stalled.
388 Roland McGrath has been working at the beginning of the year. David
389 comes back in November to release 2.12, but he won't touch Autoconf
390 anymore after this year, and Autoconf then really stagnates. The
391 desolate Autoconf @file{ChangeLog} for 1997 lists only 7 commits.
393 @item 1997-02-28 @email{automake@@gnu.ai.mit.edu} list alive
395 The mailing list is announced as follows:
397 I've created the "automake" mailing list. It is
398 "automake@@gnu.ai.mit.edu". Administrivia, as always, to
399 automake-request@@gnu.ai.mit.edu.
401 The charter of this list is discussion of automake, autoconf, and
402 other configuration/portability tools (e.g., libtool). It is expected
403 that discussion will range from pleas for help all the way up to
406 This list is archived on the FSF machines. Offhand I don't know if
407 you can get the archive without an account there.
409 This list is open to anybody who wants to join. Tell all your
414 Before that people were discussing Automake privately, on the Gnits
415 mailing list (which is not public either), and less frequently on
416 @code{gnu.misc.discuss}.
418 @code{gnu.ai.mit.edu} is now @code{gnu.org}, in case you never
419 noticed. The archives of the early years of the
420 @code{automake@@gnu.org} list have been lost, so today it is almost
421 impossible to find traces of discussions that occurred before 1999.
422 This has been annoying more than once, as such discussions can be
423 useful to understand the rationale behind a piece of uncommented code
424 that was introduced back then.
426 @item 1997-06-22 Automake 1.2
428 Automake developments continues, and more and more new Autoconf macros
429 are required. Distributing them in @file{aclocal.m4} and requiring
430 people to browse this file to extract the relevant macros becomes
431 uncomfortable. Ideally, some of them should be contributed to
432 Autoconf so that they can be used directly, however Autoconf is
433 currently inactive. Automake 1.2 consequently introduces
434 @command{aclocal} (@command{aclocal} was actually started on
435 1996-07-28), a tool that automatically constructs an @file{aclocal.m4}
436 file from a repository of third-party macros. Because Autoconf has
437 stalled, Automake also becomes a kind of repository for such
438 third-party macros, even macros completely unrelated to Automake (for
439 instance macros that fix broken Autoconf macros).
441 The 1.2 release contains 20 macros, including the
442 @code{AM_INIT_AUTOMAKE} macro that simplifies the creation of
445 Libtool is fully supported using @code{*_LTLIBRARIES}.
447 The missing script is introduced by Fran@,cois Pinard; it is meant
448 to be a better solution than @code{AM_MAINTAINER_MODE}
449 (@pxref{maintainer-mode, , maintainer-mode, automake, GNU Automake}).
451 Conditionals support was implemented by Ian Lance Taylor. At the
452 time, Tom and Ian were working on an internal project at Cygnus. They
453 were using ILU, which is pretty similar to CORBA@. They wanted to
454 integrate ILU into their build, which was all @file{configure}-based,
455 and Ian thought that adding conditionals to @command{automake} was
456 simpler than doing all the work in @file{configure} (which was the
457 standard at the time). So this was actually funded by Cygnus.
459 This very useful but tricky feature will take a lot of time to
460 stabilize. (At the time this text is written, there are still
461 primaries that have not been updated to support conditional
462 definitions in Automake 1.9.)
464 The @command{automake} script has almost doubled: 6089 lines of Perl,
465 plus 1294 lines of @file{Makefile} fragments.
467 @item 1997-07-08 Gordon Matzigkeit releases Libtool 1.0.
469 @item 1998-04-05 Automake 1.3
471 This is a small advance compared to 1.2.
472 It adds support for assembly, and preliminary support for Java.
474 Perl 5.004_04 is out, but fixes to support Perl 4 are still
475 regularly submitted whenever Automake breaks it.
477 @item 1998-09-06 @code{sourceware.cygnus.com} is on-line.
479 Sourceware was setup by Jason Molenda to host open source projects.
481 @item 1998-09-19 Automake CVS repository moved to @code{sourceware.cygnus.com}
482 @itemx 1998-10-26 @code{sourceware.cygnus.com} announces it hosts Automake:
483 Automake is now hosted on @code{sourceware.cygnus.com}. It has a
484 publicly accessible CVS repository. This CVS repository is a copy of
485 the one Tom was using on his machine, which in turn is based on
486 a copy of the CVS repository of David MacKenzie. This is why we still
487 have to full source history. (Automake was on Sourceware until 2007-10-29,
488 when it moved to a git repository on @code{savannah.gnu.org},
489 but the Sourceware host had been renamed to @code{sources.redhat.com}.)
491 The oldest file in the administrative directory of the CVS repository
492 that was created on Sourceware is dated 1998-09-19, while the
493 announcement that @command{automake} and @command{autoconf} had joined
494 @command{sourceware} was made on 1998-10-26. They were among the
495 first projects to be hosted there.
497 The heedful reader will have noticed Automake was exactly 4 years old
500 @item 1999-01-05 Ben Elliston releases Autoconf 2.13.
502 @item 1999-01-14 Automake 1.4
504 This release adds support for Fortran 77 and for the @code{include}
505 statement. Also, @samp{+=} assignments are introduced, but it is
506 still quite easy to fool Automake when mixing this with conditionals.
508 These two releases, Automake 1.4 and Autoconf 2.13 make a duo that
509 will be used together for years.
511 @command{automake} is 7228 lines, plus 1591 lines of Makefile
512 fragment, 20 macros (some 1.3 macros were finally contributed back to
513 Autoconf), 197 test cases, and 51 pages of documentation.
515 @item 1999-03-27 The @code{user-dep-branch} is created on the CVS repository.
517 This implements a new dependency tracking schemed that should be
518 able to handle automatic dependency tracking using any compiler (not
519 just gcc) and any make (not just GNU @command{make}). In addition,
520 the new scheme should be more reliable than the old one, as
521 dependencies are generated on the end user's machine. Alexandre Oliva
522 creates depcomp for this purpose.
524 @xref{Dependency Tracking Evolution}, for more details about the
525 evolution of automatic dependency tracking in Automake.
527 @item 1999-11-21 The @code{user-dep-branch} is merged into the main trunk.
529 This was a huge problem since we also had patches going in on the
530 trunk. The merge took a long time and was very painful.
534 Since September 1999 and until 2003, Akim Demaille will be zealously
538 I think the next release should be called "3.0".@*
539 Let's face it: you've basically rewritten autoconf.@*
540 Every weekend there are 30 new patches.@*
541 I don't see how we could call this "2.15" with a straight face.@*
542 -- Tom Tromey on @email{autoconf@@gnu.org}
545 Actually Akim works like a submarine: he will pile up patches while he
546 works off-line during the weekend, and flush them in batch when he
547 resurfaces on Monday.
551 On this Wednesday, Autoconf 2.49c, the last beta before Autoconf 2.50
552 is out, and Akim has to find something to do during his week-end :)
556 Akim sends a batch of 14 patches to @email{automake@@gnu.org}.
559 Aiieeee! I was dreading the day that the Demaillator turned his
560 sights on automake@dots{} and now it has arrived! -- Tom Tromey
563 It's only the beginning: in two months he will send 192 patches. Then
564 he would slow down so Tom can catch up and review all this. Initially
565 Tom actually read all these patches, then he probably trustingly
566 answered OK to most of them, and finally gave up and let Akim apply
567 whatever he wanted. There was no way to keep up with that patch rate.
570 Anyway the patch below won't apply since it predates Akim's
571 sourcequake; I have yet to figure where the relevant passage has
572 been moved :) -- Alexandre Duret-Lutz
575 All these patches were sent to and discussed on
576 @email{automake@@gnu.org}, so subscribed users were literally drowning in
577 technical mails. Eventually, the @email{automake-patches@@gnu.org}
578 mailing list was created in May.
580 Year after year, Automake had drifted away from its initial design:
581 construct @file{Makefile.in} by assembling various @file{Makefile}
582 fragments. In 1.4, lots of @file{Makefile} rules are being emitted at
583 various places in the @command{automake} script itself; this does not
584 help ensuring a consistent treatment of these rules (for instance
585 making sure that user-defined rules override Automake's own rules).
586 One of Akim's goal was moving all these hard-coded rules to separate
587 @file{Makefile} fragments, so the logic could be centralized in a
588 @file{Makefile} fragment processor.
590 Another significant contribution of Akim is the interface with the
591 ``trace'' feature of Autoconf. The way to scan @file{configure.in} at
592 this time was to read the file and grep the various macro of interest
593 to Automake. Doing so could break in many unexpected ways; @command{automake}
594 could miss some definition (for instance @samp{AC_SUBST([$1], [$2])}
595 where the arguments are known only when M4 is run), or conversely it
596 could detect some macro that was not expanded (because it is called
597 conditionally). In the CVS version of Autoconf, Akim had implemented
598 the @option{--trace} option, which provides accurate information about
599 where macros are actually called and with what arguments. Akim will
600 equip Automake with a second @file{configure.in} scanner that uses
601 this @option{--trace} interface. Since it was not sensible to drop the
602 Autoconf 2.13 compatibility yet, this experimental scanner was only
603 used when an environment variable was set, the traditional
604 grep-scanner being still the default.
606 @item 2001-04-25 Gary V.@tie{}Vaughan releases Libtool 1.4
608 It has been more than two years since Automake 1.4, CVS Automake has
609 suffered lot's of heavy changes and still is not ready for release.
610 Libtool 1.4 had to be distributed with a patch against Automake 1.4.
612 @item 2001-05-08 Automake 1.4-p1
613 @itemx 2001-05-24 Automake 1.4-p2
615 Gary V.@tie{}Vaughan, the principal Libtool maintainer, makes a ``patch
616 release'' of Automake:
619 The main purpose of this release is to have a stable automake
620 which is compatible with the latest stable libtool.
623 The release also contains obvious fixes for bugs in Automake 1.4,
624 some of which were reported almost monthly.
626 @item 2001-05-21 Akim Demaille releases Autoconf 2.50
628 @item 2001-06-07 Automake 1.4-p3
629 @itemx 2001-06-10 Automake 1.4-p4
630 @itemx 2001-07-15 Automake 1.4-p5
632 Gary continues his patch-release series. These also add support for
633 some new Autoconf 2.50 idioms. Essentially, Autoconf now advocates
634 @file{configure.ac} over @file{configure.in}, and it introduces a new
635 syntax for @code{AC_OUTPUT}ing files.
637 @item 2001-08-23 Automake 1.5
639 A major and long-awaited release, that comes more than two years after
640 1.4. It brings many changes, among which:
642 @item The new dependency tracking scheme that uses @command{depcomp}.
643 Aside from the improvement on the dependency tracking itself
644 (@pxref{Dependency Tracking Evolution}), this also streamlines the use
645 of @command{automake}-generated @file{Makefile.in}s as the @file{Makefile.in}s
646 used during development are now the same as those used in
647 distributions. Before that the @file{Makefile.in}s generated for
648 maintainers required GNU @command{make} and GCC, they were different
649 from the portable @file{Makefile} generated for distribution; this was
650 causing some confusion.
652 @item Support for per-target compilation flags.
654 @item Support for reference to files in subdirectories in most
655 @file{Makefile.am} variables.
657 @item Introduction of the @code{dist_}, @code{nodist_}, and @code{nobase_}
659 @item Perl 4 support is finally dropped.
662 1.5 did break several packages that worked with 1.4. Enough so that
663 Linux distributions could not easily install the new Automake version
664 without breaking many of the packages for which they had to run
667 Some of these breakages were effectively bugs that would eventually be
668 fixed in the next release. However, a lot of damage was caused by
669 some changes made deliberately to render Automake stricter on some
670 setup we did consider bogus. For instance, @samp{make distcheck} was
671 improved to check that @samp{make uninstall} did remove all the files
672 @samp{make install} installed, that @samp{make distclean} did not omit
673 some file, and that a VPATH build would work even if the source
674 directory was read-only. Similarly, Automake now rejects multiple
675 definitions of the same variable (because that would mix very badly
676 with conditionals), and @samp{+=} assignments with no previous
677 definition. Because these changes all occurred suddenly after 1.4 had
678 been established for more than two years, it hurt users.
680 To make matter worse, meanwhile Autoconf (now at version 2.52) was
681 facing similar troubles, for similar reasons.
683 @item 2002-03-05 Automake 1.6
685 This release introduced versioned installation (@pxref{API Versioning, ,
686 API Versioning, automake, GNU Automake}). This was mainly pushed by
687 Havoc Pennington, taking the GNOME source tree as motive: due to
688 incompatibilities between the autotools it's impossible for the GNOME
689 packages to switch to Autoconf 2.53 and Automake 1.5 all at once, so
690 they are currently stuck with Autoconf 2.13 and Automake 1.4.
692 The idea was to call this version @file{automake-1.6}, call all its
693 bug-fix versions identically, and switch to @file{automake-1.7} for
694 the next release that adds new features or changes some rules. This
695 scheme implies maintaining a bug-fix branch in addition to the
696 development trunk, which means more work from the maintainer, but
697 providing regular bug-fix releases proved to be really worthwhile.
699 Like 1.5, 1.6 also introduced a bunch of incompatibilities, intentional or
700 not. Perhaps the more annoying was the dependence on the newly
701 released Autoconf 2.53. Autoconf seemed to have stabilized enough
702 since its explosive 2.50 release and included changes required to fix
703 some bugs in Automake. In order to upgrade to Automake 1.6, people
704 now had to upgrade Autoconf too; for some packages it was no picnic.
706 While versioned installation helped people to upgrade, it also
707 unfortunately allowed people not to upgrade. At the time of writing,
708 some Linux distributions are shipping packages for Automake 1.4, 1.5,
709 1.6, 1.7, 1.8, and 1.9. Most of these still install 1.4 by default.
710 Some distribution also call 1.4 the ``stable'' version, and present
711 ``1.9'' as the development version; this does not really makes sense
712 since 1.9 is way more solid than 1.4. All this does not help the
715 @item 2002-04-11 Automake 1.6.1
717 1.6, and the upcoming 1.4-p6 release were the last release by Tom.
718 This one and those following will be handled by Alexandre
719 Duret-Lutz. Tom is still around, and will be there until about 1.7,
720 but his interest into Automake is drifting away towards projects like
723 Alexandre has been using Automake since 2000, and started to
724 contribute mostly on Akim's incitement (Akim and Alexandre have been
725 working in the same room from 1999 to 2002). In 2001 and 2002 he had
726 a lot of free time to enjoy hacking Automake.
728 @item 2002-06-14 Automake 1.6.2
730 @item 2002-07-28 Automake 1.6.3
731 @itemx 2002-07-28 Automake 1.4-p6
733 Two releases on the same day. 1.6.3 is a bug-fix release.
735 Tom Tromey backported the versioned installation mechanism on the 1.4
736 branch, so that Automake 1.6.x and Automake 1.4-p6 could be installed
737 side by side. Another request from the GNOME folks.
739 @item 2002-09-25 Automake 1.7
741 This release switches to the new @file{configure.ac} scanner Akim
742 was experimenting in 1.5.
744 @item 2002-10-16 Automake 1.7.1
745 @itemx 2002-12-06 Automake 1.7.2
746 @itemx 2003-02-20 Automake 1.7.3
747 @itemx 2003-04-23 Automake 1.7.4
748 @itemx 2003-05-18 Automake 1.7.5
749 @itemx 2003-07-10 Automake 1.7.6
750 @itemx 2003-09-07 Automake 1.7.7
751 @itemx 2003-10-07 Automake 1.7.8
753 Many bug-fix releases. 1.7 lasted because the development version
754 (upcoming 1.8) was suffering some major internal revamping.
756 @item 2003-10-26 Automake on screen
758 Episode 49, `Repercussions', in the third season of the `Alias' TV
761 Marshall, one of the characters, is working on a computer virus that he
762 has to modify before it gets into the wrong hands or something like
763 that. The screenshots you see do not show any program code, they show
764 a @file{Makefile.in} generated by automake...
766 @item 2003-11-09 Automake 1.7.9
768 @item 2003-12-10 Automake 1.8
770 The most striking update is probably that of @command{aclocal}.
772 @command{aclocal} now uses @code{m4_include} in the produced
773 @file{aclocal.m4} when the included macros are already distributed
774 with the package (an idiom used in many packages), which reduces code
775 duplication. Many people liked that, but in fact this change was
776 really introduced to fix a bug in rebuild rules: @file{Makefile.in}
777 must be rebuilt whenever a dependency of @file{configure} changes, but
778 all the @file{m4} files included in @file{aclocal.m4} where unknown
779 from @command{automake}. Now @command{automake} can just trace the
780 @code{m4_include}s to discover the dependencies.
782 @command{aclocal} also starts using the @option{--trace} Autoconf option
783 in order to discover used macros more accurately. This will turn out
784 to be very tricky (later releases will improve this) as people had
785 devised many ways to cope with the limitation of previous
786 @command{aclocal} versions, notably using handwritten
787 @code{m4_include}s: @command{aclocal} must make sure not to redefine a
788 rule that is already included by such statement.
790 Automake also has seen its guts rewritten. Although this rewriting
791 took a lot of efforts, it is only apparent to the users in that some
792 constructions previously disallowed by the implementation now work
793 nicely. Conditionals, Locations, Variable and Rule definitions,
794 Options: these items on which Automake works have been rewritten as
795 separate Perl modules, and documented.
797 @itemx 2004-01-11 Automake 1.8.1
798 @itemx 2004-01-12 Automake 1.8.2
799 @itemx 2004-03-07 Automake 1.8.3
800 @itemx 2004-04-25 Automake 1.8.4
801 @itemx 2004-05-16 Automake 1.8.5
803 @item 2004-07-28 Automake 1.9
805 This release tries to simplify the compilation rules it outputs to
806 reduce the size of the Makefile. The complaint initially come from
807 the libgcj developers. Their @file{Makefile.in} generated with
808 Automake 1.4 and custom build rules (1.4 did not support compiled
809 Java) is 250KB@. The one generated by 1.8 was over 9MB@! 1.9 gets it
812 Aside from this it contains mainly minor changes and bug-fixes.
814 @itemx 2004-08-11 Automake 1.9.1
815 @itemx 2004-09-19 Automake 1.9.2
817 Automake has ten years. This chapter of the manual was initially
818 written for this occasion.
820 @itemx 2007-10-29 Automake repository moves to @code{savannah.gnu.org}
821 and uses git as primary repository.
825 @node Dependency Tracking Evolution
826 @chapter Evolution of Automatic Dependency Tracking
828 Over the years Automake has deployed three different dependency
829 tracking methods. Each method, including the current one, has had
830 flaws of various sorts. Here we lay out the different dependency
831 tracking methods, their flaws, and their fixes. We conclude with
832 recommendations for tool writers, and by indicating future directions
833 for dependency tracking work in Automake.
836 * First Take on Dependencies:: Precomputed dependency tracking
837 * Dependencies As Side Effects:: Update at developer compile time
838 * Dependencies for the User:: Update at user compile time
839 * Techniques for Dependencies:: Alternative approaches
842 @node First Take on Dependencies
843 @section First Take on Dependency Tracking
844 @unnumberedsubsec Description
846 Our first attempt at automatic dependency tracking was based on the
847 method recommended by GNU @command{make}. (@pxref{Automatic
848 Prerequisites, , Generating Prerequisites Automatically, make, The GNU
851 This version worked by precomputing dependencies ahead of time. For
852 each source file, it had a special @file{.P} file that held the
853 dependencies. There was a rule to generate a @file{.P} file by
854 invoking the compiler appropriately. All such @file{.P} files were
855 included by the @file{Makefile}, thus implicitly becoming dependencies
858 @unnumberedsubsec Bugs
860 This approach had several critical bugs.
864 The code to generate the @file{.P} file relied on @command{gcc}.
865 (A limitation, not technically a bug.)
867 The dependency tracking mechanism itself relied on GNU @command{make}.
868 (A limitation, not technically a bug.)
870 Because each @file{.P} file was a dependency of @file{Makefile}, this
871 meant that dependency tracking was done eagerly by @command{make}.
872 For instance, @samp{make clean} would cause all the dependency files
873 to be updated, and then immediately removed. This eagerness also
874 caused problems with some configurations; if a certain source file
875 could not be compiled on a given architecture for some reason,
876 dependency tracking would fail, aborting the entire build.
878 As dependency tracking was done as a pre-pass, compile times were
879 doubled--the compiler had to be run twice per source file.
881 @samp{make dist} re-ran @command{automake} to generate a
882 @file{Makefile} that did not have automatic dependency tracking (and
883 that was thus portable to any version of @command{make}). In order to
884 do this portably, Automake had to scan the dependency files and remove
885 any reference that was to a source file not in the distribution.
886 This process was error-prone. Also, if @samp{make dist} was run in an
887 environment where some object file had a dependency on a source file
888 that was only conditionally created, Automake would generate a
889 @file{Makefile} that referred to a file that might not appear in the
890 end user's build. A special, hacky mechanism was required to work
894 @unnumberedsubsec Historical Note
896 The code generated by Automake is often inspired by the
897 @file{Makefile} style of a particular author. In the case of the first
898 implementation of dependency tracking, I believe the impetus and
899 inspiration was Jim Meyering. (I could be mistaken. If you know
900 otherwise feel free to correct me.)
902 @node Dependencies As Side Effects
903 @section Dependencies As Side Effects
904 @unnumberedsubsec Description
906 The next refinement of Automake's automatic dependency tracking scheme
907 was to implement dependencies as side effects of the compilation.
908 This was aimed at solving the most commonly reported problems with the
909 first approach. In particular we were most concerned with eliminating
910 the weird rebuilding effect associated with make clean.
912 In this approach, the @file{.P} files were included using the
913 @code{-include} command, which let us create these files lazily. This
914 avoided the @samp{make clean} problem.
916 We only computed dependencies when a file was actually compiled. This
917 avoided the performance penalty associated with scanning each file
918 twice. It also let us avoid the other problems associated with the
919 first, eager, implementation. For instance, dependencies would never
920 be generated for a source file that was not compilable on a given
921 architecture (because it in fact would never be compiled).
923 @unnumberedsubsec Bugs
927 This approach also relied on the existence of @command{gcc} and GNU
928 @command{make}. (A limitation, not technically a bug.)
930 Dependency tracking was still done by the developer, so the problems
931 from the first implementation relating to massaging of dependencies by
932 @samp{make dist} were still in effect.
934 This implementation suffered from the ``deleted header file'' problem.
935 Suppose a lazily-created @file{.P} file includes a dependency on a
936 given header file, like this:
939 maude.o: maude.c something.h
942 Now suppose that you remove @file{something.h} and update @file{maude.c}
943 so that this include is no longer needed. If you run @command{make},
944 you will get an error because there is no way to create
947 We fixed this problem in a later release by further massaging the
948 output of @command{gcc} to include a dummy dependency for each header
952 @node Dependencies for the User
953 @section Dependencies for the User
954 @unnumberedsubsec Description
956 The bugs associated with @samp{make dist}, over time, became a real
957 problem. Packages using Automake were being built on a large number
958 of platforms, and were becoming increasingly complex. Broken
959 dependencies were distributed in ``portable'' @file{Makefile.in}s,
960 leading to user complaints. Also, the requirement for @command{gcc}
961 and GNU @command{make} was a constant source of bug reports. The next
962 implementation of dependency tracking aimed to remove these problems.
964 We realized that the only truly reliable way to automatically track
965 dependencies was to do it when the package itself was built. This
966 meant discovering a method portable to any version of make and any
967 compiler. Also, we wanted to preserve what we saw as the best point
968 of the second implementation: dependency computation as a side effect
971 In the end we found that most modern make implementations support some
972 form of include directive. Also, we wrote a wrapper script that let
973 us abstract away differences between dependency tracking methods for
974 compilers. For instance, some compilers cannot generate dependencies
975 as a side effect of compilation. In this case we simply have the
976 script run the compiler twice. Currently our wrapper script
977 (@command{depcomp}) knows about twelve different compilers (including
978 a "compiler" that simply invokes @command{makedepend} and then the
979 real compiler, which is assumed to be a standard Unix-like C compiler
980 with no way to do dependency tracking).
982 @unnumberedsubsec Bugs
986 Running a wrapper script for each compilation slows down the build.
988 Many users don't really care about precise dependencies.
990 This implementation, like every other automatic dependency tracking
991 scheme in common use today (indeed, every one we've ever heard of),
992 suffers from the ``duplicated new header'' bug.
994 This bug occurs because dependency tracking tools, such as the
995 compiler, only generate dependencies on the successful opening of a
996 file, and not on every probe.
998 Suppose for instance that the compiler searches three directories for
999 a given header, and that the header is found in the third directory.
1000 If the programmer erroneously adds a header file with the same name to
1001 the first directory, then a clean rebuild from scratch could fail
1002 (suppose the new header file is buggy), whereas an incremental rebuild
1005 What has happened here is that people have a misunderstanding of what
1006 a dependency is. Tool writers think a dependency encodes information
1007 about which files were read by the compiler. However, a dependency
1008 must actually encode information about what the compiler tried to do.
1010 This problem is not serious in practice. Programmers typically do not
1011 use the same name for a header file twice in a given project. (At
1012 least, not in C or C++. This problem may be more troublesome in
1013 Java.) This problem is easy to fix, by modifying dependency
1014 generators to record every probe, instead of every successful open.
1017 Since Automake generates dependencies as a side effect of compilation,
1018 there is a bootstrapping problem when header files are generated by
1019 running a program. The problem is that, the first time the build is
1020 done, there is no way by default to know that the headers are
1021 required, so make might try to run a compilation for which the headers
1022 have not yet been built.
1024 This was also a problem in the previous dependency tracking implementation.
1026 The current fix is to use @code{BUILT_SOURCES} to list built headers
1027 (@pxref{Sources, , Sources, automake, GNU Automake}). This causes them
1028 to be built before any other build rules are run. This is unsatisfactory
1029 as a general solution, however in practice it seems sufficient for most
1033 This code is used since Automake 1.5.
1035 In GCC 3.0, we managed to convince the maintainers to add special
1036 command-line options to help Automake more efficiently do its job. We
1037 hoped this would let us avoid the use of a wrapper script when
1038 Automake's automatic dependency tracking was used with @command{gcc}.
1040 Unfortunately, this code doesn't quite do what we want. In
1041 particular, it removes the dependency file if the compilation fails;
1042 we'd prefer that it instead only touch the file in any way if the
1043 compilation succeeds.
1045 Nevertheless, since Automake 1.7, when a recent @command{gcc} is
1046 detected at @command{configure} time, we inline the
1047 dependency-generation code and do not use the @command{depcomp}
1048 wrapper script. This makes compilations faster for those using this
1049 compiler (probably our primary user base). The counterpart is that
1050 because we have to encode two compilation rules in @file{Makefile}
1051 (with or without @command{depcomp}), the produced @file{Makefile}s are
1054 @node Techniques for Dependencies
1055 @section Techniques for Computing Dependencies
1057 There are actually several ways for a build tool like Automake to
1058 cause tools to generate dependencies.
1061 @item @command{makedepend}
1062 This was a commonly-used method in the past. The idea is to run a
1063 special program over the source and have it generate dependency
1064 information. Traditional implementations of @command{makedepend} are
1065 not completely precise; ordinarily they were conservative and
1066 discovered too many dependencies.
1068 An obvious way to generate dependencies is to simply write the tool so
1069 that it can generate the information needed by the build tool. This is
1070 also the most portable method. Many compilers have an option to
1071 generate dependencies. Unfortunately, not all tools provide such an
1073 @item The file system
1074 It is possible to write a special file system that tracks opens,
1075 reads, writes, etc, and then feed this information back to the build
1076 tool. @command{clearmake} does this. This is a very powerful
1077 technique, as it doesn't require cooperation from the
1078 tool. Unfortunately it is also very difficult to implement and also
1079 not practical in the general case.
1080 @item @code{LD_PRELOAD}
1081 Rather than use the file system, one could write a special library to
1082 intercept @code{open} and other syscalls. This technique is also quite
1083 powerful, but unfortunately it is not portable enough for use in
1088 * Recommendations for Tool Writers::
1089 * Future Directions for Dependencies::
1092 @node Recommendations for Tool Writers
1093 @subsection Recommendations for Tool Writers
1095 We think that every compilation tool ought to be able to generate
1096 dependencies as a side effect of compilation. Furthermore, at least
1097 while @command{make}-based tools are nearly universally in use (at
1098 least in the free software community), the tool itself should generate
1099 dummy dependencies for header files, to avoid the deleted header file
1100 bug. Finally, the tool should generate a dependency for each probe,
1101 instead of each successful file open, in order to avoid the duplicated
1104 @node Future Directions for Dependencies
1105 @subsection Future Directions for Dependencies
1107 Currently, only languages and compilers understood by Automake can
1108 have dependency tracking enabled. We would like to see if it is
1109 practical (and worthwhile) to let this support be extended by the user
1110 to languages unknown to Automake.
1113 @chapter Release Statistics
1115 The following table (inspired by @samp{perlhist(1)}) quantifies the
1116 evolution of Automake using these metrics:
1120 The date and version of the release.
1122 The number of lines of the @command{automake} script.
1124 The number of lines of the @command{aclocal} script.
1126 The number of lines of the @command{Perl} supporting modules.
1128 The number of lines of the @file{Makefile} fragments. The number in
1129 parentheses is the number of files.
1131 The number of lines (and files) of Autoconf macros.
1133 The number of pages of the documentation (the Postscript version).
1135 The number of test cases in the test suite. Of those, the number in
1136 parentheses is the number of generated test cases.
1139 @multitable {8888-88-88} {8.8-p8} {8888} {8888} {8888} {8888 (88)} {8888 (88)} {888} {888 (88)}
1140 @headitem Date @tab Rel @tab am @tab acl @tab pm @tab @file{*.am} @tab m4 @tab doc @tab t
1141 @item 1994-09-19 @tab CVS @tab 141 @tab @tab @tab 299 (24) @tab @tab @tab
1142 @item 1994-11-05 @tab CVS @tab 208 @tab @tab @tab 332 (28) @tab @tab @tab
1143 @item 1995-11-23 @tab 0.20 @tab 533 @tab @tab @tab 458 (35) @tab @tab 9 @tab
1144 @item 1995-11-26 @tab 0.21 @tab 613 @tab @tab @tab 480 (36) @tab @tab 11 @tab
1145 @item 1995-11-28 @tab 0.22 @tab 1116 @tab @tab @tab 539 (38) @tab @tab 12 @tab
1146 @item 1995-11-29 @tab 0.23 @tab 1240 @tab @tab @tab 541 (38) @tab @tab 12 @tab
1147 @item 1995-12-08 @tab 0.24 @tab 1462 @tab @tab @tab 504 (33) @tab @tab 14 @tab
1148 @item 1995-12-10 @tab 0.25 @tab 1513 @tab @tab @tab 511 (37) @tab @tab 15 @tab
1149 @item 1996-01-03 @tab 0.26 @tab 1706 @tab @tab @tab 438 (36) @tab @tab 16 @tab
1150 @item 1996-01-03 @tab 0.27 @tab 1706 @tab @tab @tab 438 (36) @tab @tab 16 @tab
1151 @item 1996-01-13 @tab 0.28 @tab 1964 @tab @tab @tab 934 (33) @tab @tab 16 @tab
1152 @item 1996-02-07 @tab 0.29 @tab 2299 @tab @tab @tab 936 (33) @tab @tab 17 @tab
1153 @item 1996-02-24 @tab 0.30 @tab 2544 @tab @tab @tab 919 (32) @tab 85 (1) @tab 20 @tab 9
1154 @item 1996-03-11 @tab 0.31 @tab 2877 @tab @tab @tab 919 (32) @tab 85 (1) @tab 29 @tab 17
1155 @item 1996-04-27 @tab 0.32 @tab 3058 @tab @tab @tab 921 (31) @tab 85 (1) @tab 30 @tab 26
1156 @item 1996-05-18 @tab 0.33 @tab 3110 @tab @tab @tab 926 (31) @tab 105 (1) @tab 30 @tab 35
1157 @item 1996-05-28 @tab 1.0 @tab 3134 @tab @tab @tab 973 (32) @tab 105 (1) @tab 30 @tab 38
1158 @item 1997-06-22 @tab 1.2 @tab 6089 @tab 385 @tab @tab 1294 (36) @tab 592 (20) @tab 37 @tab 126
1159 @item 1998-04-05 @tab 1.3 @tab 6415 @tab 422 @tab @tab 1470 (39) @tab 741 (23) @tab 39 @tab 156
1160 @item 1999-01-14 @tab 1.4 @tab 7240 @tab 426 @tab @tab 1591 (40) @tab 734 (20) @tab 51 @tab 197
1161 @item 2001-05-08 @tab 1.4-p1 @tab 7251 @tab 426 @tab @tab 1591 (40) @tab 734 (20) @tab 51 @tab 197
1162 @item 2001-05-24 @tab 1.4-p2 @tab 7268 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 197
1163 @item 2001-06-07 @tab 1.4-p3 @tab 7312 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 197
1164 @item 2001-06-10 @tab 1.4-p4 @tab 7321 @tab 439 @tab @tab 1591 (40) @tab 734 (20) @tab 49 @tab 198
1165 @item 2001-07-15 @tab 1.4-p5 @tab 7228 @tab 426 @tab @tab 1596 (40) @tab 734 (20) @tab 51 @tab 198
1166 @item 2001-08-23 @tab 1.5 @tab 8016 @tab 475 @tab 600 @tab 2654 (39) @tab 1166 (29) @tab 63 @tab 327
1167 @item 2002-03-05 @tab 1.6 @tab 8465 @tab 475 @tab 1136 @tab 2732 (39) @tab 1603 (27) @tab 66 @tab 365
1168 @item 2002-04-11 @tab 1.6.1 @tab 8544 @tab 475 @tab 1136 @tab 2741 (39) @tab 1603 (27) @tab 66 @tab 372
1169 @item 2002-06-14 @tab 1.6.2 @tab 8575 @tab 475 @tab 1136 @tab 2800 (39) @tab 1609 (27) @tab 67 @tab 386
1170 @item 2002-07-28 @tab 1.6.3 @tab 8600 @tab 475 @tab 1153 @tab 2809 (39) @tab 1609 (27) @tab 67 @tab 391
1171 @item 2002-07-28 @tab 1.4-p6 @tab 7332 @tab 455 @tab @tab 1596 (40) @tab 735 (20) @tab 49 @tab 197
1172 @item 2002-09-25 @tab 1.7 @tab 9189 @tab 471 @tab 1790 @tab 2965 (39) @tab 1606 (28) @tab 73 @tab 430
1173 @item 2002-10-16 @tab 1.7.1 @tab 9229 @tab 475 @tab 1790 @tab 2977 (39) @tab 1606 (28) @tab 73 @tab 437
1174 @item 2002-12-06 @tab 1.7.2 @tab 9334 @tab 475 @tab 1790 @tab 2988 (39) @tab 1606 (28) @tab 77 @tab 445
1175 @item 2003-02-20 @tab 1.7.3 @tab 9389 @tab 475 @tab 1790 @tab 3023 (39) @tab 1651 (29) @tab 84 @tab 448
1176 @item 2003-04-23 @tab 1.7.4 @tab 9429 @tab 475 @tab 1790 @tab 3031 (39) @tab 1644 (29) @tab 85 @tab 458
1177 @item 2003-05-18 @tab 1.7.5 @tab 9429 @tab 475 @tab 1790 @tab 3033 (39) @tab 1645 (29) @tab 85 @tab 459
1178 @item 2003-07-10 @tab 1.7.6 @tab 9442 @tab 475 @tab 1790 @tab 3033 (39) @tab 1660 (29) @tab 85 @tab 461
1179 @item 2003-09-07 @tab 1.7.7 @tab 9443 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab 90 @tab 467
1180 @item 2003-10-07 @tab 1.7.8 @tab 9444 @tab 475 @tab 1790 @tab 3041 (39) @tab 1660 (29) @tab 90 @tab 468
1181 @item 2003-11-09 @tab 1.7.9 @tab 9444 @tab 475 @tab 1790 @tab 3048 (39) @tab 1660 (29) @tab 90 @tab 468
1182 @item 2003-12-10 @tab 1.8 @tab 7171 @tab 585 @tab 7730 @tab 3236 (39) @tab 1666 (31) @tab 104 @tab 521
1183 @item 2004-01-11 @tab 1.8.1 @tab 7217 @tab 663 @tab 7726 @tab 3287 (39) @tab 1686 (31) @tab 104 @tab 525
1184 @item 2004-01-12 @tab 1.8.2 @tab 7217 @tab 663 @tab 7726 @tab 3288 (39) @tab 1686 (31) @tab 104 @tab 526
1185 @item 2004-03-07 @tab 1.8.3 @tab 7214 @tab 686 @tab 7735 @tab 3303 (39) @tab 1695 (31) @tab 111 @tab 530
1186 @item 2004-04-25 @tab 1.8.4 @tab 7214 @tab 686 @tab 7736 @tab 3310 (39) @tab 1701 (31) @tab 112 @tab 531
1187 @item 2004-05-16 @tab 1.8.5 @tab 7240 @tab 686 @tab 7736 @tab 3299 (39) @tab 1701 (31) @tab 112 @tab 533
1188 @item 2004-07-28 @tab 1.9 @tab 7508 @tab 715 @tab 7794 @tab 3352 (40) @tab 1812 (32) @tab 115 @tab 551
1189 @item 2004-08-11 @tab 1.9.1 @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 115 @tab 552
1190 @item 2004-09-19 @tab 1.9.2 @tab 7512 @tab 715 @tab 7794 @tab 3354 (40) @tab 1812 (32) @tab 132 @tab 554
1191 @item 2004-11-01 @tab 1.9.3 @tab 7507 @tab 718 @tab 7804 @tab 3354 (40) @tab 1812 (32) @tab 134 @tab 556
1192 @item 2004-12-18 @tab 1.9.4 @tab 7508 @tab 718 @tab 7856 @tab 3361 (40) @tab 1811 (32) @tab 140 @tab 560
1193 @item 2005-02-13 @tab 1.9.5 @tab 7523 @tab 719 @tab 7859 @tab 3373 (40) @tab 1453 (32) @tab 142 @tab 562
1194 @item 2005-07-10 @tab 1.9.6 @tab 7539 @tab 699 @tab 7867 @tab 3400 (40) @tab 1453 (32) @tab 144 @tab 570
1195 @item 2006-10-15 @tab 1.10 @tab 7859 @tab 1072 @tab 8024 @tab 3512 (40) @tab 1496 (34) @tab 172 @tab 604
1196 @item 2008-01-19 @tab 1.10.1 @tab 7870 @tab 1089 @tab 8025 @tab 3520 (40) @tab 1499 (34) @tab 173 @tab 617
1197 @item 2008-11-23 @tab 1.10.2 @tab 7882 @tab 1089 @tab 8027 @tab 3540 (40) @tab 1509 (34) @tab 176 @tab 628
1198 @item 2009-05-17 @tab 1.11 @tab 8721 @tab 1092 @tab 8289 @tab 4164 (42) @tab 1714 (37) @tab 181 @tab 732 (20)
1202 @c ========================================================== Appendices
1205 @node Copying This Manual
1206 @appendix Copying This Manual
1209 * GNU Free Documentation License:: License for copying this manual
1212 @node GNU Free Documentation License
1213 @appendixsec GNU Free Documentation License