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