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