automake-history.texi 51 KB

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