1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678 |
- This is automake-history.info, produced by makeinfo version 6.1 from
- automake-history.texi.
- This manual describes (part of) the history of GNU Automake, a program
- that creates GNU standards-compliant Makefiles from template files.
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with no Front-Cover texts,
- and with no Back-Cover Texts. A copy of the license is included in
- the section entitled "GNU Free Documentation License."
- File: automake-history.info, Node: Top, Next: Timeline, Up: (dir)
- Brief History of Automake
- *************************
- This manual describes (part of) the history of GNU Automake, a program
- that creates GNU standards-compliant Makefiles from template files.
- Copyright (C) 1995-2017 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with no Front-Cover texts,
- and with no Back-Cover Texts. A copy of the license is included in
- the section entitled "GNU Free Documentation License."
- * Menu:
- * Timeline:: The Automake story.
- * Dependency Tracking Evolution:: Evolution of Automatic Dependency Tracking
- * Releases:: Release statistics
- * Copying This Manual:: How to make copies of this manual
- -- The Detailed Node Listing --
- Evolution of Automatic Dependency Tracking
- * First Take on Dependencies:: Precomputed dependency tracking
- * Dependencies As Side Effects:: Update at developer compile time
- * Dependencies for the User:: Update at user compile time
- * Techniques for Dependencies:: Alternative approaches
- Techniques for Computing Dependencies
- * Recommendations for Tool Writers::
- * Future Directions for Dependencies::
- Copying This Manual
- * GNU Free Documentation License:: License for copying this manual
- File: automake-history.info, Node: Timeline, Next: Dependency Tracking Evolution, Prev: Top, Up: Top
- 1 Timeline
- **********
- 1994-09-19 First CVS commit.
- If we can trust the CVS repository, David J. MacKenzie (djm)
- started working on Automake (or AutoMake, as it was spelt then)
- this Monday.
- The first version of the 'automake' script looks as follows.
- #!/bin/sh
- status=0
- for makefile
- do
- if test ! -f ${makefile}.am; then
- echo "automake: ${makefile}.am: No such honkin' file"
- status=1
- continue
- fi
- exec 4> ${makefile}.in
- done
- From this you can already see that Automake will be about reading
- '*.am' file and producing '*.in' files. You cannot see anything
- else, but if you also know that David is the one who created
- Autoconf two years before you can guess the rest.
- Several commits follow, and by the end of the day Automake is
- reported to work for GNU fileutils and GNU m4.
- The modus operandi is the one that is still used today: variable
- assignments in 'Makefile.am' files trigger injections of precanned
- 'Makefile' fragments into the generated 'Makefile.in'. The use of
- 'Makefile' fragments was inspired by the 4.4BSD 'make' and include
- files, however Automake aims to be portable and to conform to the
- GNU standards for 'Makefile' variables and targets.
- At this point, the most recent release of Autoconf is version 1.11,
- and David is preparing to release Autoconf 2.0 in late October. As
- a matter of fact, he will barely touch Automake after September.
- 1994-11-05 David MacKenzie's last commit.
- At this point Automake is a 200 line portable shell script, plus
- 332 lines of 'Makefile' fragments. In the 'README', David states
- his ambivalence between "portable shell" and "more appropriate
- language":
- I wrote it keeping in mind the possibility of it becoming an
- Autoconf macro, so it would run at configure-time. That would
- slow configuration down a bit, but allow users to modify the
- Makefile.am without needing to fetch the AutoMake package.
- And, the Makefile.in files wouldn't need to be distributed.
- But all of AutoMake would. So I might reimplement AutoMake in
- Perl, m4, or some other more appropriate language.
- Automake is described as "an experimental Makefile generator".
- There is no documentation. Adventurous users are referred to the
- examples and patches needed to use Automake with GNU m4 1.3,
- fileutils 3.9, time 1.6, and development versions of find and
- indent.
- These examples seem to have been lost. However at the time of
- writing (10 years later in September, 2004) the FSF still
- distributes a package that uses this version of Automake: check out
- GNU termutils 2.0.
- 1995-11-12 Tom Tromey's first commit.
- After one year of inactivity, Tom Tromey takes over the package.
- Tom was working on GNU cpio back then, and doing this just for fun,
- having trouble finding a project to contribute to. So while
- hacking he wanted to bring the 'Makefile.in' up to GNU standards.
- This was hard, and one day he saw Automake on
- <ftp://alpha.gnu.org/>, grabbed it and tried it out.
- Tom didn't talk to djm about it until later, just to make sure he
- didn't mind if he made a release. He did a bunch of early releases
- to the Gnits folks.
- Gnits was (and still is) totally informal, just a few GNU friends
- who Franc,ois Pinard knew, who were all interested in making a
- common infrastructure for GNU projects, and shared a similar
- outlook on how to do it. So they were able to make some progress.
- It came along with Autoconf and extensions thereof, and then
- Automake from David and Tom (who were both gnitsians). One of
- their ideas was to write a document paralleling the GNU standards,
- that was more strict in some ways and more detailed. They never
- finished the GNITS standards, but the ideas mostly made their way
- into Automake.
- 1995-11-23 Automake 0.20
- Besides introducing automatic dependency tracking (*note Dependency
- Tracking Evolution::), this version also supplies a 9-page manual.
- At this time 'aclocal' and 'AM_INIT_AUTOMAKE' did not exist, so
- many things had to be done by hand. For instance, here is what a
- configure.in (this is the former name of the 'configure.ac' we use
- today) must contain in order to use Automake 0.20:
- PACKAGE=cpio
- VERSION=2.3.911
- AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
- AC_SUBST(PACKAGE)
- AC_SUBST(VERSION)
- AC_ARG_PROGRAM
- AC_PROG_INSTALL
- (Today all of the above is achieved by 'AC_INIT' and
- 'AM_INIT_AUTOMAKE'.)
- Here is how programs are specified in 'Makefile.am':
- PROGRAMS = hello
- hello_SOURCES = hello.c
- This looks pretty much like what we do today, except the 'PROGRAMS'
- variable has no directory prefix specifying where 'hello' should be
- installed: all programs are installed in '$(bindir)'.
- 'LIBPROGRAMS' can be used to specify programs that must be built
- but not installed (it is called 'noinst_PROGRAMS' nowadays).
- Programs can be built conditionally using 'AC_SUBST'itutions:
- PROGRAMS = @progs@
- AM_PROGRAMS = foo bar baz
- ('AM_PROGRAMS' has since then been renamed to 'EXTRA_PROGRAMS'.)
- Similarly scripts, static libraries, and data can be built and
- installed using the 'LIBRARIES', 'SCRIPTS', and 'DATA' variables.
- However 'LIBRARIES' were treated a bit specially in that Automake
- did automatically supply the 'lib' and '.a' prefixes. Therefore to
- build 'libcpio.a', one had to write
- LIBRARIES = cpio
- cpio_SOURCES = ...
- Extra files to distribute must be listed in 'DIST_OTHER' (the
- ancestor of 'EXTRA_DIST'). Also extra directories that are to be
- distributed should appear in 'DIST_SUBDIRS', but the manual
- describes this as a temporary ugly hack (today extra directories
- should also be listed in 'EXTRA_DIST', and 'DIST_SUBDIRS' is used
- for another purpose, *note Conditional Subdirectories:
- (automake)Conditional Subdirectories.).
- 1995-11-26 Automake 0.21
- In less time than it takes to cook a frozen pizza, Tom rewrites
- Automake using Perl. At this time Perl 5 is only one year old, and
- Perl 4.036 is in use at many sites. Supporting several Perl
- versions has been a source of problems through the whole history of
- Automake.
- If you never used Perl 4, imagine Perl 5 without objects, without
- 'my' variables (only dynamically scoped 'local' variables), without
- function prototypes, with function calls that needs to be prefixed
- with '&', etc. Traces of this old style can still be found in
- today's 'automake'.
- 1995-11-28 Automake 0.22
- 1995-11-29 Automake 0.23
- Bug fixes.
- 1995-12-08 Automake 0.24
- 1995-12-10 Automake 0.25
- Releases are raining. 0.24 introduces the uniform naming scheme we
- use today, i.e., 'bin_PROGRAMS' instead of 'PROGRAMS',
- 'noinst_LIBRARIES' instead of 'LIBLIBRARIES', etc. (However
- 'EXTRA_PROGRAMS' does not exist yet, 'AM_PROGRAMS' is still in use;
- and 'TEXINFOS' and 'MANS' still have no directory prefixes.)
- Adding support for prefixes like that was one of the major ideas in
- 'automake'; it has lasted pretty well.
- AutoMake is renamed to Automake (Tom seems to recall it was
- Franc,ois Pinard's doing).
- 0.25 fixes a Perl 4 portability bug.
- 1995-12-18 Jim Meyering starts using Automake in GNU Textutils.
- 1995-12-31 Franc,ois Pinard starts using Automake in GNU tar.
- 1996-01-03 Automake 0.26
- 1996-01-03 Automake 0.27
- Of the many changes and suggestions sent by Franc,ois Pinard and
- included in 0.26, perhaps the most important is the advice that to
- ease customization a user rule or variable definition should always
- override an Automake rule or definition.
- Gordon Matzigkeit and Jim Meyering are two other early contributors
- that have been sending fixes.
- 0.27 fixes yet another Perl 4 portability bug.
- 1996-01-13 Automake 0.28
- Automake starts scanning 'configure.in' for 'LIBOBJS' support.
- This is an important step because until this version Automake only
- knew about the 'Makefile.am's it processed. 'configure.in' was
- Autoconf's world and the link between Autoconf and Automake had to
- be done by the 'Makefile.am' author. For instance, if 'config.h'
- was generated by 'configure', it was the package maintainer's
- responsibility to define the 'CONFIG_HEADER' variable in each
- 'Makefile.am'.
- Succeeding releases will rely more and more on scanning
- 'configure.in' to better automate the Autoconf integration.
- 0.28 also introduces the 'AUTOMAKE_OPTIONS' variable and the
- '--gnu' and '--gnits' options, the latter being stricter.
- 1996-02-07 Automake 0.29
- Thanks to 'configure.in' scanning, 'CONFIG_HEADER' is gone, and
- rebuild rules for 'configure'-generated file are automatically
- output.
- 'TEXINFOS' and 'MANS' converted to the uniform naming scheme.
- 1996-02-24 Automake 0.30
- The test suite is born. It contains 9 tests. From now on test
- cases will be added pretty regularly (*note Releases::), and this
- proved to be really helpful later on.
- 'EXTRA_PROGRAMS' finally replaces 'AM_PROGRAMS'.
- All the third-party Autoconf macros, written mostly by Franc,ois
- Pinard (and later Jim Meyering), are distributed in Automake's
- hand-written 'aclocal.m4' file. Package maintainers are expected
- to extract the necessary macros from this file. (In previous
- versions you had to copy and paste them from the manual...)
- 1996-03-11 Automake 0.31
- The test suite in 0.30 was run via a long 'check-local' rule. Upon
- Ulrich Drepper's suggestion, 0.31 makes it an Automake rule output
- whenever the 'TESTS' variable is defined.
- 'DIST_OTHER' is renamed to 'EXTRA_DIST', and the 'check_' prefix is
- introduced. The syntax is now the same as today.
- 1996-03-15 Gordon Matzigkeit starts writing libtool.
- 1996-04-27 Automake 0.32
- '-hook' targets are introduced; an idea from Dieter Baron.
- '*.info' files, which were output in the build directory are now
- built in the source directory, because they are distributed. It
- seems these files like to move back and forth as that will happen
- again in future versions.
- 1996-05-18 Automake 0.33
- Gord Matzigkeit's main two contributions:
- * very preliminary libtool support
- * the distcheck rule
- Although they were very basic at this point, these are probably
- among the top features for Automake today.
- Jim Meyering also provides the infamous 'jm_MAINTAINER_MODE', since
- then renamed to 'AM_MAINTAINER_MODE' and abandoned by its author
- (*note maintainer-mode: (automake)maintainer-mode.).
- 1996-05-28 Automake 1.0
- After only six months of heavy development, the 'automake' script
- is 3134 lines long, plus 973 lines of 'Makefile' fragments. The
- package has 30 pages of documentation, and 38 test cases.
- 'aclocal.m4' contains 4 macros.
- From now on and until version 1.4, new releases will occur at a
- rate of about one a year. 1.1 did not exist, actually 1.1b to 1.1p
- have been the name of beta releases for 1.2. This is the first
- time Automake uses suffix letters to designate beta releases, a
- habit that lasts.
- 1996-10-10 Kevin Dalley packages Automake 1.0 for Debian GNU/Linux.
- 1996-11-26 David J. MacKenzie releases Autoconf 2.12.
- Between June and October, the Autoconf development is almost
- stalled. Roland McGrath has been working at the beginning of the
- year. David comes back in November to release 2.12, but he won't
- touch Autoconf anymore after this year, and Autoconf then really
- stagnates. The desolate Autoconf 'ChangeLog' for 1997 lists only 7
- commits.
- 1997-02-28 <automake@gnu.ai.mit.edu> list alive
- The mailing list is announced as follows:
- I've created the "automake" mailing list. It is
- "automake@gnu.ai.mit.edu". Administrivia, as always, to
- automake-request@gnu.ai.mit.edu.
- The charter of this list is discussion of automake, autoconf, and
- other configuration/portability tools (e.g., libtool). It is expected
- that discussion will range from pleas for help all the way up to
- patches.
- This list is archived on the FSF machines. Offhand I don't know if
- you can get the archive without an account there.
- This list is open to anybody who wants to join. Tell all your
- friends!
- -- Tom Tromey
- Before that people were discussing Automake privately, on the Gnits
- mailing list (which is not public either), and less frequently on
- 'gnu.misc.discuss'.
- 'gnu.ai.mit.edu' is now 'gnu.org', in case you never noticed. The
- archives of the early years of the 'automake@gnu.org' list have
- been lost, so today it is almost impossible to find traces of
- discussions that occurred before 1999. This has been annoying more
- than once, as such discussions can be useful to understand the
- rationale behind a piece of uncommented code that was introduced
- back then.
- 1997-06-22 Automake 1.2
- Automake developments continues, and more and more new Autoconf
- macros are required. Distributing them in 'aclocal.m4' and
- requiring people to browse this file to extract the relevant macros
- becomes uncomfortable. Ideally, some of them should be contributed
- to Autoconf so that they can be used directly, however Autoconf is
- currently inactive. Automake 1.2 consequently introduces 'aclocal'
- ('aclocal' was actually started on 1996-07-28), a tool that
- automatically constructs an 'aclocal.m4' file from a repository of
- third-party macros. Because Autoconf has stalled, Automake also
- becomes a kind of repository for such third-party macros, even
- macros completely unrelated to Automake (for instance macros that
- fix broken Autoconf macros).
- The 1.2 release contains 20 macros, including the
- 'AM_INIT_AUTOMAKE' macro that simplifies the creation of
- 'configure.in'.
- Libtool is fully supported using '*_LTLIBRARIES'.
- The missing script is introduced by Franc,ois Pinard; it is meant
- to be a better solution than 'AM_MAINTAINER_MODE' (*note
- maintainer-mode: (automake)maintainer-mode.).
- Conditionals support was implemented by Ian Lance Taylor. At the
- time, Tom and Ian were working on an internal project at Cygnus.
- They were using ILU, which is pretty similar to CORBA. They wanted
- to integrate ILU into their build, which was all 'configure'-based,
- and Ian thought that adding conditionals to 'automake' was simpler
- than doing all the work in 'configure' (which was the standard at
- the time). So this was actually funded by Cygnus.
- This very useful but tricky feature will take a lot of time to
- stabilize. (At the time this text is written, there are still
- primaries that have not been updated to support conditional
- definitions in Automake 1.9.)
- The 'automake' script has almost doubled: 6089 lines of Perl, plus
- 1294 lines of 'Makefile' fragments.
- 1997-07-08 Gordon Matzigkeit releases Libtool 1.0.
- 1998-04-05 Automake 1.3
- This is a small advance compared to 1.2. It adds support for
- assembly, and preliminary support for Java.
- Perl 5.004_04 is out, but fixes to support Perl 4 are still
- regularly submitted whenever Automake breaks it.
- 1998-09-06 'sourceware.cygnus.com' is on-line.
- Sourceware was setup by Jason Molenda to host open source projects.
- 1998-09-19 Automake CVS repository moved to 'sourceware.cygnus.com'
- 1998-10-26 'sourceware.cygnus.com' announces it hosts Automake:
- Automake is now hosted on 'sourceware.cygnus.com'. It has a
- publicly accessible CVS repository. This CVS repository is a copy
- of the one Tom was using on his machine, which in turn is based on
- a copy of the CVS repository of David MacKenzie. This is why we
- still have to full source history. (Automake was on Sourceware
- until 2007-10-29, when it moved to a git repository on
- 'savannah.gnu.org', but the Sourceware host had been renamed to
- 'sources.redhat.com'.)
- The oldest file in the administrative directory of the CVS
- repository that was created on Sourceware is dated 1998-09-19,
- while the announcement that 'automake' and 'autoconf' had joined
- 'sourceware' was made on 1998-10-26. They were among the first
- projects to be hosted there.
- The heedful reader will have noticed Automake was exactly 4 years
- old on 1998-09-19.
- 1999-01-05 Ben Elliston releases Autoconf 2.13.
- 1999-01-14 Automake 1.4
- This release adds support for Fortran 77 and for the 'include'
- statement. Also, '+=' assignments are introduced, but it is still
- quite easy to fool Automake when mixing this with conditionals.
- These two releases, Automake 1.4 and Autoconf 2.13 make a duo that
- will be used together for years.
- 'automake' is 7228 lines, plus 1591 lines of Makefile fragment, 20
- macros (some 1.3 macros were finally contributed back to Autoconf),
- 197 test cases, and 51 pages of documentation.
- 1999-03-27 The 'user-dep-branch' is created on the CVS repository.
- This implements a new dependency tracking schemed that should be
- able to handle automatic dependency tracking using any compiler
- (not just gcc) and any make (not just GNU 'make'). In addition,
- the new scheme should be more reliable than the old one, as
- dependencies are generated on the end user's machine. Alexandre
- Oliva creates depcomp for this purpose.
- *Note Dependency Tracking Evolution::, for more details about the
- evolution of automatic dependency tracking in Automake.
- 1999-11-21 The 'user-dep-branch' is merged into the main trunk.
- This was a huge problem since we also had patches going in on the
- trunk. The merge took a long time and was very painful.
- 2000-05-10
- Since September 1999 and until 2003, Akim Demaille will be
- zealously revamping Autoconf.
- I think the next release should be called "3.0".
- Let's face it: you've basically rewritten autoconf.
- Every weekend there are 30 new patches.
- I don't see how we could call this "2.15" with a straight
- face.
- - Tom Tromey on <autoconf@gnu.org>
- Actually Akim works like a submarine: he will pile up patches while
- he works off-line during the weekend, and flush them in batch when
- he resurfaces on Monday.
- 2001-01-24
- On this Wednesday, Autoconf 2.49c, the last beta before Autoconf
- 2.50 is out, and Akim has to find something to do during his
- week-end :)
- 2001-01-28
- Akim sends a batch of 14 patches to <automake@gnu.org>.
- Aiieeee! I was dreading the day that the Demaillator turned
- his sights on automake... and now it has arrived! - Tom
- Tromey
- It's only the beginning: in two months he will send 192 patches.
- Then he would slow down so Tom can catch up and review all this.
- Initially Tom actually read all of these patches, then he probably
- trustingly answered OK to most of them, and finally gave up and let
- Akim apply whatever he wanted. There was no way to keep up with
- that patch rate.
- Anyway the patch below won't apply since it predates Akim's
- sourcequake; I have yet to figure where the relevant passage
- has been moved :) - Alexandre Duret-Lutz
- All of these patches were sent to and discussed on
- <automake@gnu.org>, so subscribed users were literally drowning in
- technical mails. Eventually, the <automake-patches@gnu.org>
- mailing list was created in May.
- Year after year, Automake had drifted away from its initial design:
- construct 'Makefile.in' by assembling various 'Makefile' fragments.
- In 1.4, lots of 'Makefile' rules are being emitted at various
- places in the 'automake' script itself; this does not help ensuring
- a consistent treatment of these rules (for instance making sure
- that user-defined rules override Automake's own rules). One of
- Akim's goal was moving all of these hard-coded rules to separate
- 'Makefile' fragments, so the logic could be centralized in a
- 'Makefile' fragment processor.
- Another significant contribution of Akim is the interface with the
- "trace" feature of Autoconf. The way to scan 'configure.in' at
- this time was to read the file and grep the various macro of
- interest to Automake. Doing so could break in many unexpected
- ways; 'automake' could miss some definition (for instance
- 'AC_SUBST([$1], [$2])' where the arguments are known only when M4
- is run), or conversely it could detect some macro that was not
- expanded (because it is called conditionally). In the CVS version
- of Autoconf, Akim had implemented the '--trace' option, which
- provides accurate information about where macros are actually
- called and with what arguments. Akim will equip Automake with a
- second 'configure.in' scanner that uses this '--trace' interface.
- Since it was not sensible to drop the Autoconf 2.13 compatibility
- yet, this experimental scanner was only used when an environment
- variable was set, the traditional grep-scanner being still the
- default.
- 2001-04-25 Gary V. Vaughan releases Libtool 1.4
- It has been more than two years since Automake 1.4, CVS Automake
- has suffered lot's of heavy changes and still is not ready for
- release. Libtool 1.4 had to be distributed with a patch against
- Automake 1.4.
- 2001-05-08 Automake 1.4-p1
- 2001-05-24 Automake 1.4-p2
- Gary V. Vaughan, the principal Libtool maintainer, makes a "patch
- release" of Automake:
- The main purpose of this release is to have a stable automake
- which is compatible with the latest stable libtool.
- The release also contains obvious fixes for bugs in Automake 1.4,
- some of which were reported almost monthly.
- 2001-05-21 Akim Demaille releases Autoconf 2.50
- 2001-06-07 Automake 1.4-p3
- 2001-06-10 Automake 1.4-p4
- 2001-07-15 Automake 1.4-p5
- Gary continues his patch-release series. These also add support
- for some new Autoconf 2.50 idioms. Essentially, Autoconf now
- advocates 'configure.ac' over 'configure.in', and it introduces a
- new syntax for 'AC_OUTPUT'ing files.
- 2001-08-23 Automake 1.5
- A major and long-awaited release, that comes more than two years
- after 1.4. It brings many changes, among which:
- * The new dependency tracking scheme that uses 'depcomp'. Aside
- from the improvement on the dependency tracking itself (*note
- Dependency Tracking Evolution::), this also streamlines the
- use of 'automake'-generated 'Makefile.in's as the
- 'Makefile.in's used during development are now the same as
- those used in distributions. Before that the 'Makefile.in's
- generated for maintainers required GNU 'make' and GCC, they
- were different from the portable 'Makefile' generated for
- distribution; this was causing some confusion.
- * Support for per-target compilation flags.
- * Support for reference to files in subdirectories in most
- 'Makefile.am' variables.
- * Introduction of the 'dist_', 'nodist_', and 'nobase_'
- prefixes.
- * Perl 4 support is finally dropped.
- 1.5 did break several packages that worked with 1.4. Enough so
- that Linux distributions could not easily install the new Automake
- version without breaking many of the packages for which they had to
- run 'automake'.
- Some of these breakages were effectively bugs that would eventually
- be fixed in the next release. However, a lot of damage was caused
- by some changes made deliberately to render Automake stricter on
- some setup we did consider bogus. For instance, 'make distcheck'
- was improved to check that 'make uninstall' did remove all the
- files 'make install' installed, that 'make distclean' did not omit
- some file, and that a VPATH build would work even if the source
- directory was read-only. Similarly, Automake now rejects multiple
- definitions of the same variable (because that would mix very badly
- with conditionals), and '+=' assignments with no previous
- definition. Because these changes all occurred suddenly after 1.4
- had been established for more than two years, it hurt users.
- To make matter worse, meanwhile Autoconf (now at version 2.52) was
- facing similar troubles, for similar reasons.
- 2002-03-05 Automake 1.6
- This release introduced versioned installation (*note API
- Versioning: (automake)API Versioning.). This was mainly pushed by
- Havoc Pennington, taking the GNOME source tree as motive: due to
- incompatibilities between the autotools it's impossible for the
- GNOME packages to switch to Autoconf 2.53 and Automake 1.5 all at
- once, so they are currently stuck with Autoconf 2.13 and Automake
- 1.4.
- The idea was to call this version 'automake-1.6', call all its
- bug-fix versions identically, and switch to 'automake-1.7' for the
- next release that adds new features or changes some rules. This
- scheme implies maintaining a bug-fix branch in addition to the
- development trunk, which means more work from the maintainer, but
- providing regular bug-fix releases proved to be really worthwhile.
- Like 1.5, 1.6 also introduced a bunch of incompatibilities,
- intentional or not. Perhaps the more annoying was the dependence
- on the newly released Autoconf 2.53. Autoconf seemed to have
- stabilized enough since its explosive 2.50 release and included
- changes required to fix some bugs in Automake. In order to upgrade
- to Automake 1.6, people now had to upgrade Autoconf too; for some
- packages it was no picnic.
- While versioned installation helped people to upgrade, it also
- unfortunately allowed people not to upgrade. At the time of
- writing, some Linux distributions are shipping packages for
- Automake 1.4, 1.5, 1.6, 1.7, 1.8, and 1.9. Most of these still
- install 1.4 by default. Some distribution also call 1.4 the
- "stable" version, and present "1.9" as the development version;
- this does not really makes sense since 1.9 is way more solid than
- 1.4. All this does not help the newcomer.
- 2002-04-11 Automake 1.6.1
- 1.6, and the upcoming 1.4-p6 release were the last release by Tom.
- This one and those following will be handled by Alexandre
- Duret-Lutz. Tom is still around, and will be there until about
- 1.7, but his interest into Automake is drifting away towards
- projects like 'gcj'.
- Alexandre has been using Automake since 2000, and started to
- contribute mostly on Akim's incitement (Akim and Alexandre have
- been working in the same room from 1999 to 2002). In 2001 and 2002
- he had a lot of free time to enjoy hacking Automake.
- 2002-06-14 Automake 1.6.2
- 2002-07-28 Automake 1.6.3
- 2002-07-28 Automake 1.4-p6
- Two releases on the same day. 1.6.3 is a bug-fix release.
- Tom Tromey backported the versioned installation mechanism on the
- 1.4 branch, so that Automake 1.6.x and Automake 1.4-p6 could be
- installed side by side. Another request from the GNOME folks.
- 2002-09-25 Automake 1.7
- This release switches to the new 'configure.ac' scanner Akim was
- experimenting in 1.5.
- 2002-10-16 Automake 1.7.1
- 2002-12-06 Automake 1.7.2
- 2003-02-20 Automake 1.7.3
- 2003-04-23 Automake 1.7.4
- 2003-05-18 Automake 1.7.5
- 2003-07-10 Automake 1.7.6
- 2003-09-07 Automake 1.7.7
- 2003-10-07 Automake 1.7.8
- Many bug-fix releases. 1.7 lasted because the development version
- (upcoming 1.8) was suffering some major internal revamping.
- 2003-10-26 Automake on screen
- Episode 49, 'Repercussions', in the third season of the 'Alias' TV
- show is first aired.
- Marshall, one of the characters, is working on a computer virus
- that he has to modify before it gets into the wrong hands or
- something like that. The screenshots you see do not show any
- program code, they show a 'Makefile.in' generated by automake...
- 2003-11-09 Automake 1.7.9
- 2003-12-10 Automake 1.8
- The most striking update is probably that of 'aclocal'.
- 'aclocal' now uses 'm4_include' in the produced 'aclocal.m4' when
- the included macros are already distributed with the package (an
- idiom used in many packages), which reduces code duplication. Many
- people liked that, but in fact this change was really introduced to
- fix a bug in rebuild rules: 'Makefile.in' must be rebuilt whenever
- a dependency of 'configure' changes, but all the 'm4' files
- included in 'aclocal.m4' where unknown from 'automake'. Now
- 'automake' can just trace the 'm4_include's to discover the
- dependencies.
- 'aclocal' also starts using the '--trace' Autoconf option in order
- to discover used macros more accurately. This will turn out to be
- very tricky (later releases will improve this) as people had
- devised many ways to cope with the limitation of previous 'aclocal'
- versions, notably using handwritten 'm4_include's: 'aclocal' must
- make sure not to redefine a rule that is already included by such
- statement.
- Automake also has seen its guts rewritten. Although this rewriting
- took a lot of efforts, it is only apparent to the users in that
- some constructions previously disallowed by the implementation now
- work nicely. Conditionals, Locations, Variable and Rule
- definitions, Options: these items on which Automake works have been
- rewritten as separate Perl modules, and documented.
- 2004-01-11 Automake 1.8.1
- 2004-01-12 Automake 1.8.2
- 2004-03-07 Automake 1.8.3
- 2004-04-25 Automake 1.8.4
- 2004-05-16 Automake 1.8.5
- 2004-07-28 Automake 1.9
- This release tries to simplify the compilation rules it outputs to
- reduce the size of the Makefile. The complaint initially come from
- the libgcj developers. Their 'Makefile.in' generated with Automake
- 1.4 and custom build rules (1.4 did not support compiled Java) is
- 250KB. The one generated by 1.8 was over 9MB! 1.9 gets it down to
- 1.2MB.
- Aside from this it contains mainly minor changes and bug-fixes.
- 2004-08-11 Automake 1.9.1
- 2004-09-19 Automake 1.9.2
- Automake has ten years. This chapter of the manual was initially
- written for this occasion.
- 2007-10-29 Automake repository moves to 'savannah.gnu.org'
- and uses git as primary repository.
- File: automake-history.info, Node: Dependency Tracking Evolution, Next: Releases, Prev: Timeline, Up: Top
- 2 Evolution of Automatic Dependency Tracking
- ********************************************
- Over the years Automake has deployed three different dependency tracking
- methods. Each method, including the current one, has had flaws of
- various sorts. Here we lay out the different dependency tracking
- methods, their flaws, and their fixes. We conclude with recommendations
- for tool writers, and by indicating future directions for dependency
- tracking work in Automake.
- * Menu:
- * First Take on Dependencies:: Precomputed dependency tracking
- * Dependencies As Side Effects:: Update at developer compile time
- * Dependencies for the User:: Update at user compile time
- * Techniques for Dependencies:: Alternative approaches
- File: automake-history.info, Node: First Take on Dependencies, Next: Dependencies As Side Effects, Up: Dependency Tracking Evolution
- 2.1 First Take on Dependency Tracking
- =====================================
- Description
- -----------
- Our first attempt at automatic dependency tracking was based on the
- method recommended by GNU 'make'. (*note Generating Prerequisites
- Automatically: (make)Automatic Prerequisites.)
- This version worked by precomputing dependencies ahead of time. For
- each source file, it had a special '.P' file that held the dependencies.
- There was a rule to generate a '.P' file by invoking the compiler
- appropriately. All such '.P' files were included by the 'Makefile',
- thus implicitly becoming dependencies of 'Makefile'.
- Bugs
- ----
- This approach had several critical bugs.
- * The code to generate the '.P' file relied on 'gcc'. (A limitation,
- not technically a bug.)
- * The dependency tracking mechanism itself relied on GNU 'make'. (A
- limitation, not technically a bug.)
- * Because each '.P' file was a dependency of 'Makefile', this meant
- that dependency tracking was done eagerly by 'make'. For instance,
- 'make clean' would cause all the dependency files to be updated,
- and then immediately removed. This eagerness also caused problems
- with some configurations; if a certain source file could not be
- compiled on a given architecture for some reason, dependency
- tracking would fail, aborting the entire build.
- * As dependency tracking was done as a pre-pass, compile times were
- doubled-the compiler had to be run twice per source file.
- * 'make dist' re-ran 'automake' to generate a 'Makefile' that did not
- have automatic dependency tracking (and that was thus portable to
- any version of 'make'). In order to do this portably, Automake had
- to scan the dependency files and remove any reference that was to a
- source file not in the distribution. This process was error-prone.
- Also, if 'make dist' was run in an environment where some object
- file had a dependency on a source file that was only conditionally
- created, Automake would generate a 'Makefile' that referred to a
- file that might not appear in the end user's build. A special,
- hacky mechanism was required to work around this.
- Historical Note
- ---------------
- The code generated by Automake is often inspired by the 'Makefile' style
- of a particular author. In the case of the first implementation of
- dependency tracking, I believe the impetus and inspiration was Jim
- Meyering. (I could be mistaken. If you know otherwise feel free to
- correct me.)
- File: automake-history.info, Node: Dependencies As Side Effects, Next: Dependencies for the User, Prev: First Take on Dependencies, Up: Dependency Tracking Evolution
- 2.2 Dependencies As Side Effects
- ================================
- Description
- -----------
- The next refinement of Automake's automatic dependency tracking scheme
- was to implement dependencies as side effects of the compilation. This
- was aimed at solving the most commonly reported problems with the first
- approach. In particular we were most concerned with eliminating the
- weird rebuilding effect associated with make clean.
- In this approach, the '.P' files were included using the '-include'
- command, which let us create these files lazily. This avoided the 'make
- clean' problem.
- We only computed dependencies when a file was actually compiled.
- This avoided the performance penalty associated with scanning each file
- twice. It also let us avoid the other problems associated with the
- first, eager, implementation. For instance, dependencies would never be
- generated for a source file that was not compilable on a given
- architecture (because it in fact would never be compiled).
- Bugs
- ----
- * This approach also relied on the existence of 'gcc' and GNU 'make'.
- (A limitation, not technically a bug.)
- * Dependency tracking was still done by the developer, so the
- problems from the first implementation relating to massaging of
- dependencies by 'make dist' were still in effect.
- * This implementation suffered from the "deleted header file"
- problem. Suppose a lazily-created '.P' file includes a dependency
- on a given header file, like this:
- maude.o: maude.c something.h
- Now suppose that you remove 'something.h' and update 'maude.c' so
- that this include is no longer needed. If you run 'make', you will
- get an error because there is no way to create 'something.h'.
- We fixed this problem in a later release by further massaging the
- output of 'gcc' to include a dummy dependency for each header file.
- File: automake-history.info, Node: Dependencies for the User, Next: Techniques for Dependencies, Prev: Dependencies As Side Effects, Up: Dependency Tracking Evolution
- 2.3 Dependencies for the User
- =============================
- Description
- -----------
- The bugs associated with 'make dist', over time, became a real problem.
- Packages using Automake were being built on a large number of platforms,
- and were becoming increasingly complex. Broken dependencies were
- distributed in "portable" 'Makefile.in's, leading to user complaints.
- Also, the requirement for 'gcc' and GNU 'make' was a constant source of
- bug reports. The next implementation of dependency tracking aimed to
- remove these problems.
- We realized that the only truly reliable way to automatically track
- dependencies was to do it when the package itself was built. This meant
- discovering a method portable to any version of make and any compiler.
- Also, we wanted to preserve what we saw as the best point of the second
- implementation: dependency computation as a side effect of compilation.
- In the end we found that most modern make implementations support
- some form of include directive. Also, we wrote a wrapper script that
- let us abstract away differences between dependency tracking methods for
- compilers. For instance, some compilers cannot generate dependencies as
- a side effect of compilation. In this case we simply have the script
- run the compiler twice. Currently our wrapper script ('depcomp') knows
- about twelve different compilers (including a "compiler" that simply
- invokes 'makedepend' and then the real compiler, which is assumed to be
- a standard Unix-like C compiler with no way to do dependency tracking).
- Bugs
- ----
- * Running a wrapper script for each compilation slows down the build.
- * Many users don't really care about precise dependencies.
- * This implementation, like every other automatic dependency tracking
- scheme in common use today (indeed, every one we've ever heard of),
- suffers from the "duplicated new header" bug.
- This bug occurs because dependency tracking tools, such as the
- compiler, only generate dependencies on the successful opening of a
- file, and not on every probe.
- Suppose for instance that the compiler searches three directories
- for a given header, and that the header is found in the third
- directory. If the programmer erroneously adds a header file with
- the same name to the first directory, then a clean rebuild from
- scratch could fail (suppose the new header file is buggy), whereas
- an incremental rebuild will succeed.
- What has happened here is that people have a misunderstanding of
- what a dependency is. Tool writers think a dependency encodes
- information about which files were read by the compiler. However,
- a dependency must actually encode information about what the
- compiler tried to do.
- This problem is not serious in practice. Programmers typically do
- not use the same name for a header file twice in a given project.
- (At least, not in C or C++. This problem may be more troublesome
- in Java.) This problem is easy to fix, by modifying dependency
- generators to record every probe, instead of every successful open.
- * Since Automake generates dependencies as a side effect of
- compilation, there is a bootstrapping problem when header files are
- generated by running a program. The problem is that, the first
- time the build is done, there is no way by default to know that the
- headers are required, so make might try to run a compilation for
- which the headers have not yet been built.
- This was also a problem in the previous dependency tracking
- implementation.
- The current fix is to use 'BUILT_SOURCES' to list built headers
- (*note Sources: (automake)Sources.). This causes them to be built
- before any other build rules are run. This is unsatisfactory as a
- general solution, however in practice it seems sufficient for most
- actual programs.
- This code is used since Automake 1.5.
- In GCC 3.0, we managed to convince the maintainers to add special
- command-line options to help Automake more efficiently do its job. We
- hoped this would let us avoid the use of a wrapper script when
- Automake's automatic dependency tracking was used with 'gcc'.
- Unfortunately, this code doesn't quite do what we want. In
- particular, it removes the dependency file if the compilation fails;
- we'd prefer that it instead only touch the file in any way if the
- compilation succeeds.
- Nevertheless, since Automake 1.7, when a recent 'gcc' is detected at
- 'configure' time, we inline the dependency-generation code and do not
- use the 'depcomp' wrapper script. This makes compilations faster for
- those using this compiler (probably our primary user base). The
- counterpart is that because we have to encode two compilation rules in
- 'Makefile' (with or without 'depcomp'), the produced 'Makefile's are
- larger.
- File: automake-history.info, Node: Techniques for Dependencies, Prev: Dependencies for the User, Up: Dependency Tracking Evolution
- 2.4 Techniques for Computing Dependencies
- =========================================
- There are actually several ways for a build tool like Automake to cause
- tools to generate dependencies.
- 'makedepend'
- This was a commonly-used method in the past. The idea is to run a
- special program over the source and have it generate dependency
- information. Traditional implementations of 'makedepend' are not
- completely precise; ordinarily they were conservative and
- discovered too many dependencies.
- The tool
- An obvious way to generate dependencies is to simply write the tool
- so that it can generate the information needed by the build tool.
- This is also the most portable method. Many compilers have an
- option to generate dependencies. Unfortunately, not all tools
- provide such an option.
- The file system
- It is possible to write a special file system that tracks opens,
- reads, writes, etc, and then feed this information back to the
- build tool. 'clearmake' does this. This is a very powerful
- technique, as it doesn't require cooperation from the tool.
- Unfortunately it is also very difficult to implement and also not
- practical in the general case.
- 'LD_PRELOAD'
- Rather than use the file system, one could write a special library
- to intercept 'open' and other syscalls. This technique is also
- quite powerful, but unfortunately it is not portable enough for use
- in 'automake'.
- * Menu:
- * Recommendations for Tool Writers::
- * Future Directions for Dependencies::
- File: automake-history.info, Node: Recommendations for Tool Writers, Next: Future Directions for Dependencies, Up: Techniques for Dependencies
- 2.4.1 Recommendations for Tool Writers
- --------------------------------------
- We think that every compilation tool ought to be able to generate
- dependencies as a side effect of compilation. Furthermore, at least
- while 'make'-based tools are nearly universally in use (at least in the
- free software community), the tool itself should generate dummy
- dependencies for header files, to avoid the deleted header file bug.
- Finally, the tool should generate a dependency for each probe, instead
- of each successful file open, in order to avoid the duplicated new
- header bug.
- File: automake-history.info, Node: Future Directions for Dependencies, Prev: Recommendations for Tool Writers, Up: Techniques for Dependencies
- 2.4.2 Future Directions for Dependencies
- ----------------------------------------
- Currently, only languages and compilers understood by Automake can have
- dependency tracking enabled. We would like to see if it is practical
- (and worthwhile) to let this support be extended by the user to
- languages unknown to Automake.
- File: automake-history.info, Node: Releases, Next: Copying This Manual, Prev: Dependency Tracking Evolution, Up: Top
- 3 Release Statistics
- ********************
- The following table (inspired by 'perlhist(1)') quantifies the evolution
- of Automake using these metrics:
- Date, Rel
- The date and version of the release.
- am
- The number of lines of the 'automake' script.
- acl
- The number of lines of the 'aclocal' script.
- pm
- The number of lines of the 'Perl' supporting modules.
- '*.am'
- The number of lines of the 'Makefile' fragments. The number in
- parentheses is the number of files.
- m4
- The number of lines (and files) of Autoconf macros.
- doc
- The number of pages of the documentation (the Postscript version).
- t
- The number of test cases in the test suite. Of those, the number
- in parentheses is the number of generated test cases.
- Date Rel am acl pm '*.am' m4 doc t
- ------------------------------------------------------------------------------------
- 1994-09-19 CVS 141 299 (24)
- 1994-11-05 CVS 208 332 (28)
- 1995-11-23 0.20 533 458 (35) 9
- 1995-11-26 0.21 613 480 (36) 11
- 1995-11-28 0.22 1116 539 (38) 12
- 1995-11-29 0.23 1240 541 (38) 12
- 1995-12-08 0.24 1462 504 (33) 14
- 1995-12-10 0.25 1513 511 (37) 15
- 1996-01-03 0.26 1706 438 (36) 16
- 1996-01-03 0.27 1706 438 (36) 16
- 1996-01-13 0.28 1964 934 (33) 16
- 1996-02-07 0.29 2299 936 (33) 17
- 1996-02-24 0.30 2544 919 (32) 85 (1) 20 9
- 1996-03-11 0.31 2877 919 (32) 85 (1) 29 17
- 1996-04-27 0.32 3058 921 (31) 85 (1) 30 26
- 1996-05-18 0.33 3110 926 (31) 105 (1) 30 35
- 1996-05-28 1.0 3134 973 (32) 105 (1) 30 38
- 1997-06-22 1.2 6089 385 1294 (36) 592 (20) 37 126
- 1998-04-05 1.3 6415 422 1470 (39) 741 (23) 39 156
- 1999-01-14 1.4 7240 426 1591 (40) 734 (20) 51 197
- 2001-05-08 1.4-p1 7251 426 1591 (40) 734 (20) 51 197
- 2001-05-24 1.4-p2 7268 439 1591 (40) 734 (20) 49 197
- 2001-06-07 1.4-p3 7312 439 1591 (40) 734 (20) 49 197
- 2001-06-10 1.4-p4 7321 439 1591 (40) 734 (20) 49 198
- 2001-07-15 1.4-p5 7228 426 1596 (40) 734 (20) 51 198
- 2001-08-23 1.5 8016 475 600 2654 (39) 1166 (29) 63 327
- 2002-03-05 1.6 8465 475 1136 2732 (39) 1603 (27) 66 365
- 2002-04-11 1.6.1 8544 475 1136 2741 (39) 1603 (27) 66 372
- 2002-06-14 1.6.2 8575 475 1136 2800 (39) 1609 (27) 67 386
- 2002-07-28 1.6.3 8600 475 1153 2809 (39) 1609 (27) 67 391
- 2002-07-28 1.4-p6 7332 455 1596 (40) 735 (20) 49 197
- 2002-09-25 1.7 9189 471 1790 2965 (39) 1606 (28) 73 430
- 2002-10-16 1.7.1 9229 475 1790 2977 (39) 1606 (28) 73 437
- 2002-12-06 1.7.2 9334 475 1790 2988 (39) 1606 (28) 77 445
- 2003-02-20 1.7.3 9389 475 1790 3023 (39) 1651 (29) 84 448
- 2003-04-23 1.7.4 9429 475 1790 3031 (39) 1644 (29) 85 458
- 2003-05-18 1.7.5 9429 475 1790 3033 (39) 1645 (29) 85 459
- 2003-07-10 1.7.6 9442 475 1790 3033 (39) 1660 (29) 85 461
- 2003-09-07 1.7.7 9443 475 1790 3041 (39) 1660 (29) 90 467
- 2003-10-07 1.7.8 9444 475 1790 3041 (39) 1660 (29) 90 468
- 2003-11-09 1.7.9 9444 475 1790 3048 (39) 1660 (29) 90 468
- 2003-12-10 1.8 7171 585 7730 3236 (39) 1666 (31) 104 521
- 2004-01-11 1.8.1 7217 663 7726 3287 (39) 1686 (31) 104 525
- 2004-01-12 1.8.2 7217 663 7726 3288 (39) 1686 (31) 104 526
- 2004-03-07 1.8.3 7214 686 7735 3303 (39) 1695 (31) 111 530
- 2004-04-25 1.8.4 7214 686 7736 3310 (39) 1701 (31) 112 531
- 2004-05-16 1.8.5 7240 686 7736 3299 (39) 1701 (31) 112 533
- 2004-07-28 1.9 7508 715 7794 3352 (40) 1812 (32) 115 551
- 2004-08-11 1.9.1 7512 715 7794 3354 (40) 1812 (32) 115 552
- 2004-09-19 1.9.2 7512 715 7794 3354 (40) 1812 (32) 132 554
- 2004-11-01 1.9.3 7507 718 7804 3354 (40) 1812 (32) 134 556
- 2004-12-18 1.9.4 7508 718 7856 3361 (40) 1811 (32) 140 560
- 2005-02-13 1.9.5 7523 719 7859 3373 (40) 1453 (32) 142 562
- 2005-07-10 1.9.6 7539 699 7867 3400 (40) 1453 (32) 144 570
- 2006-10-15 1.10 7859 1072 8024 3512 (40) 1496 (34) 172 604
- 2008-01-19 1.10.1 7870 1089 8025 3520 (40) 1499 (34) 173 617
- 2008-11-23 1.10.2 7882 1089 8027 3540 (40) 1509 (34) 176 628
- 2009-05-17 1.11 8721 1092 8289 4164 (42) 1714 (37) 181 732 (20)
- File: automake-history.info, Node: Copying This Manual, Prev: Releases, Up: Top
- Appendix A Copying This Manual
- ******************************
- * Menu:
- * GNU Free Documentation License:: License for copying this manual
- File: automake-history.info, Node: GNU Free Documentation License, Up: Copying This Manual
- A.1 GNU Free Documentation License
- ==================================
- Version 1.3, 3 November 2008
- Copyright (C) 2000-2017 Free Software Foundation, Inc.
- <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- 0. PREAMBLE
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document "free" in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
- This License is a kind of "copyleft", which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book. We
- recommend this License principally for works whose purpose is
- instruction or reference.
- 1. APPLICABILITY AND DEFINITIONS
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it can
- be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- "Document", below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as "you". You accept
- the license if you copy, modify or distribute the work in a way
- requiring permission under copyright law.
- A "Modified Version" of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
- A "Secondary Section" is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document's overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
- The "Invariant Sections" are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in the
- notice that says that the Document is released under this License.
- If a section does not fit the above definition of Secondary then it
- is not allowed to be designated as Invariant. The Document may
- contain zero Invariant Sections. If the Document does not identify
- any Invariant Sections then there are none.
- The "Cover Texts" are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
- A "Transparent" copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images composed
- of pixels) generic paint programs or (for drawings) some widely
- available drawing editor, and that is suitable for input to text
- formatters or for automatic translation to a variety of formats
- suitable for input to text formatters. A copy made in an otherwise
- Transparent file format whose markup, or absence of markup, has
- been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if
- used for any substantial amount of text. A copy that is not
- "Transparent" is called "Opaque".
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and standard-conforming
- simple HTML, PostScript or PDF designed for human modification.
- Examples of transparent image formats include PNG, XCF and JPG.
- Opaque formats include proprietary formats that can be read and
- edited only by proprietary word processors, SGML or XML for which
- the DTD and/or processing tools are not generally available, and
- the machine-generated HTML, PostScript or PDF produced by some word
- processors for output purposes only.
- The "Title Page" means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, "Title
- Page" means the text near the most prominent appearance of the
- work's title, preceding the beginning of the body of the text.
- The "publisher" means any person or entity that distributes copies
- of the Document to the public.
- A section "Entitled XYZ" means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- "Acknowledgements", "Dedications", "Endorsements", or "History".)
- To "Preserve the Title" of such a section when you modify the
- Document means that it remains a section "Entitled XYZ" according
- to this definition.
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
- 2. VERBATIM COPYING
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow the
- conditions in section 3.
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
- 3. COPYING IN QUANTITY
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document's license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- of these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the title
- equally prominent and visible. You may add other material on the
- covers in addition. Copying with changes limited to the covers, as
- long as they preserve the title of the Document and satisfy these
- conditions, can be treated as verbatim copying in other respects.
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a machine-readable
- Transparent copy along with each Opaque copy, or state in or with
- each Opaque copy a computer-network location from which the general
- network-using public has access to download using public-standard
- network protocols a complete Transparent copy of the Document, free
- of added material. If you use the latter option, you must take
- reasonably prudent steps, when you begin distribution of Opaque
- copies in quantity, to ensure that this Transparent copy will
- remain thus accessible at the stated location until at least one
- year after the last time you distribute an Opaque copy (directly or
- through your agents or retailers) of that edition to the public.
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of copies,
- to give them a chance to provide you with an updated version of the
- Document.
- 4. MODIFICATIONS
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with the
- Modified Version filling the role of the Document, thus licensing
- distribution and modification of the Modified Version to whoever
- possesses a copy of it. In addition, you must do these things in
- the Modified Version:
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of previous
- versions (which should, if there were any, be listed in the
- History section of the Document). You may use the same title
- as a previous version if the original publisher of that
- version gives permission.
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
- D. Preserve all the copyright notices of the Document.
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document's
- license notice.
- H. Include an unaltered copy of this License.
- I. Preserve the section Entitled "History", Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on the
- Title Page. If there is no section Entitled "History" in the
- Document, create one stating the title, year, authors, and
- publisher of the Document as given on its Title Page, then add
- an item describing the Modified Version as stated in the
- previous sentence.
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in the
- "History" section. You may omit a network location for a work
- that was published at least four years before the Document
- itself, or if the original publisher of the version it refers
- to gives permission.
- K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section
- all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
- L. Preserve all the Invariant Sections of the Document, unaltered
- in their text and in their titles. Section numbers or the
- equivalent are not considered part of the section titles.
- M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
- N. Do not retitle any existing section to be Entitled
- "Endorsements" or to conflict in title with any Invariant
- Section.
- O. Preserve any Warranty Disclaimers.
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option designate
- some or all of these sections as invariant. To do this, add their
- titles to the list of Invariant Sections in the Modified Version's
- license notice. These titles must be distinct from any other
- section titles.
- You may add a section Entitled "Endorsements", provided it contains
- nothing but endorsements of your Modified Version by various
- parties--for example, statements of peer review or that the text
- has been approved by an organization as the authoritative
- definition of a standard.
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end of
- the list of Cover Texts in the Modified Version. Only one passage
- of Front-Cover Text and one of Back-Cover Text may be added by (or
- through arrangements made by) any one entity. If the Document
- already includes a cover text for the same cover, previously added
- by you or by arrangement made by the same entity you are acting on
- behalf of, you may not add another; but you may replace the old
- one, on explicit permission from the previous publisher that added
- the old one.
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
- 5. COMBINING DOCUMENTS
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination all
- of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
- In the combination, you must combine any sections Entitled
- "History" in the various original documents, forming one section
- Entitled "History"; likewise combine any sections Entitled
- "Acknowledgements", and any sections Entitled "Dedications". You
- must delete all sections Entitled "Endorsements."
- 6. COLLECTIONS OF DOCUMENTS
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the documents
- in all other respects.
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow this
- License in all other respects regarding verbatim copying of that
- document.
- 7. AGGREGATION WITH INDEPENDENT WORKS
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of a
- storage or distribution medium, is called an "aggregate" if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation's users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document's Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
- 8. TRANSLATION
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
- If a section in the Document is Entitled "Acknowledgements",
- "Dedications", or "History", the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
- 9. TERMINATION
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense, or distribute it is void,
- and will automatically terminate your rights under this License.
- However, if you cease all violation of this License, then your
- license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
- copyright holder fails to notify you of the violation by some
- reasonable means prior to 60 days after the cessation.
- Moreover, your license from a particular copyright holder is
- reinstated permanently if the copyright holder notifies you of the
- violation by some reasonable means, this is the first time you have
- received notice of violation of this License (for any work) from
- that copyright holder, and you cure the violation prior to 30 days
- after your receipt of the notice.
- Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, receipt of a copy of some or all of the
- same material does not give you any rights to use it.
- 10. FUTURE REVISIONS OF THIS LICENSE
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- <http://www.gnu.org/copyleft/>.
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License "or any later version" applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If the
- Document does not specify a version number of this License, you may
- choose any version ever published (not as a draft) by the Free
- Software Foundation. If the Document specifies that a proxy can
- decide which future versions of this License can be used, that
- proxy's public statement of acceptance of a version permanently
- authorizes you to choose that version for the Document.
- 11. RELICENSING
- "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
- World Wide Web server that publishes copyrightable works and also
- provides prominent facilities for anybody to edit those works. A
- public wiki that anybody can edit is an example of such a server.
- A "Massive Multiauthor Collaboration" (or "MMC") contained in the
- site means any set of copyrightable works thus published on the MMC
- site.
- "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
- license published by Creative Commons Corporation, a not-for-profit
- corporation with a principal place of business in San Francisco,
- California, as well as future copyleft versions of that license
- published by that same organization.
- "Incorporate" means to publish or republish a Document, in whole or
- in part, as part of another Document.
- An MMC is "eligible for relicensing" if it is licensed under this
- License, and if all works that were first published under this
- License somewhere other than this MMC, and subsequently
- incorporated in whole or in part into the MMC, (1) had no cover
- texts or invariant sections, and (2) were thus incorporated prior
- to November 1, 2008.
- The operator of an MMC Site may republish an MMC contained in the
- site under CC-BY-SA on the same site at any time before August 1,
- 2009, provided the MMC is eligible for relicensing.
- ADDENDUM: How to use this License for your documents
- ====================================================
- To use this License in a document you have written, include a copy of
- the License in the document and put the following copyright and license
- notices just after the title page:
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
- Texts, replace the "with...Texts." line with this:
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
- If you have Invariant Sections without Cover Texts, or some other
- combination of the three, merge those two alternatives to suit the
- situation.
- If your document contains nontrivial examples of program code, we
- recommend releasing these examples in parallel under your choice of free
- software license, such as the GNU General Public License, to permit
- their use in free software.
- Tag Table:
- Node: Top702
- Node: Timeline2236
- Node: Dependency Tracking Evolution33697
- Node: First Take on Dependencies34539
- Node: Dependencies As Side Effects37197
- Node: Dependencies for the User39256
- Node: Techniques for Dependencies44286
- Node: Recommendations for Tool Writers45984
- Node: Future Directions for Dependencies46703
- Node: Releases47173
- Node: Copying This Manual52560
- Node: GNU Free Documentation License52787
- End Tag Table
|