| ================================================================ |
| = This file |
| |
| * This file attempts to describe the rules to use when hacking |
| automake. |
| |
| ================================================================ |
| = Administrivia |
| |
| * The correct response to most actual bugs is to write a new test case |
| which demonstrates the bug. Then fix the bug, re-run the test suite, |
| and check everything in. |
| |
| * If you incorporate a change from somebody on the net: |
| First, if it is a large change, you must make sure they have signed the |
| appropriate paperwork. |
| Second, be sure to add their name and email address to THANKS |
| |
| * If a change fixes a test, mention the test in the commit message. |
| If a change fixes a bug registered in the Automake debbugs tracker, |
| mention the bug number in the commit message. |
| |
| * If somebody reports a new bug, mention his name in the commit message |
| and in the test case you write. Put him into THANKS. |
| |
| * When documenting a non-trivial idiom or example in the manual, be |
| sure to add a test case for it, and to reference such test case from |
| a proper Texinfo comment. |
| |
| * Some files in the automake package are not owned by automake; these |
| files are listed in the $(FETCHFILES) variable in Makefile.am. They |
| should never be edited here. Almost all of them can be updated from |
| respective upstreams with "make fetch" (this should be done especially |
| before releases). The only exception is the 'lib/COPYING' (from FSF), |
| which should be updated by hand whenever the GPL gets updated (which |
| shouldn't happen that often anyway :-) |
| |
| * Changes other than bug fixes must be mentioned in NEWS. Important |
| bug fixes should be mentioned in NEWS, too. |
| |
| ================================================================ |
| = Naming |
| |
| * Internal make variables and functions should be named following patterns |
| like 'am.tty-colors' or 'am.dist.files'. |
| |
| * Internal AC_SUBSTs should be named with a leading 'am__'. |
| |
| * Private make targets should be named with a leading 'am--'. |
| |
| * WARNING! This convention, introduced recently (since July 2012), |
| isn't yet universally used. But all new code should use it, |
| except in those situation where that would cause spurious |
| conflicts with mainline Automake. |
| |
| ================================================================ |
| = Editing '.am' files |
| |
| * Always use $(...) and not ${...} |
| |
| * Use ':', not 'true'. Use 'exit 1', not 'false'. |
| |
| * Use '##' comments liberally. Comment anything even remotely |
| unusual. |
| |
| * Never use basename or dirname. Instead use sed. |
| |
| * For install and uninstall rules, if a loop is required, it should be |
| silent. Then the body of the loop itself should print each |
| "important" command it runs. The printed commands should be preceded |
| by a single space. |
| |
| * Ensure install rules do not create any installation directory where |
| nothing is to be actually installed. See automake bug#11030. |
| |
| ================================================================ |
| = Editing automake.in and aclocal.in |
| |
| * Indent using GNU style. For historical reasons, the perl code |
| contains portions indented using Larry Wall's style (perl-mode's |
| default), and other portions using the GNU style (cperl-mode's |
| default). Write new code using GNU style. |
| |
| * Don't use & for function calls, unless required. |
| The use of & prevents prototypes from being checked. |
| Just as above, don't change massively all the code to strip the |
| &, just convert the old code as you work on it, and write new |
| code without. |
| |
| ================================================================ |
| = Working with git |
| |
| * To regenerate dependent files created by aclocal and automake, |
| use the 'bootstrap.sh' script. It uses the code from the source |
| tree, so the resulting files (aclocal.m4 and Makefile.in) should |
| be the same as you would get if you install this version of |
| automake and use it to generate those files. Be sure to have the |
| latest stable version of Autoconf installed and available early |
| in your PATH. |
| |
| * The Automake git tree currently carries two basic branches: 'master' for |
| the current development, and 'maint' for maintenance and bug fixes. The |
| maint branch should be kept regularly merged into the master branch. |
| It is advisable to merge only after a set of related commits have been |
| applied, to avoid introducing too much noise in the history. |
| |
| * There may be a number of longer-lived feature branches for new |
| developments. They should be based off of a common ancestor of all |
| active branches to which the feature should or might be merged later. |
| in the future, we might introduce a special branch named 'next' that |
| may serve as common ground for feature merging and testing, should |
| they not yet be ready for master. |
| |
| * After a major release is done, the master branch is to be merged into |
| the maint branch, and then a "new" master branch created stemming |
| from the resulting commit. |
| |
| * When fixing a bug (especially a long-standing one), it may be useful |
| to commit the fix to a new temporary branch based off the commit that |
| introduced the bug. Then this "bugfix branch" can be merged into all |
| the active branches descending from the buggy commit. This offers a |
| simple way to fix the bug consistently and effectively. |
| |
| * For merges from branches other than maint, prefer 'git merge --log' over |
| plain 'git merge', so that a later 'git log' gives an indication of which |
| actual patches were merged even when they don't appear early in the list. |
| |
| * master and release branches should not be rewound, i.e., should always |
| fast-forward, except maybe for privacy issues. The maint branch should not |
| be rewound except maybe after retiring a release branch or a new stable |
| release. For next, and for feature branches, the announcement for the |
| branch should document rewinding policy. |
| |
| ================================================================ |
| = Writing a good commit message |
| |
| * Here is the general format that Automake's commit messages are expected |
| to follow. See the further points below for clarifications and minor |
| corrections. |
| |
| topic: brief description (this is the "summary line") |
| |
| <reference to relevant bugs, if any> |
| |
| Here goes a more detailed explanation of why the commit is needed, |
| and a general overview of what it does, and how. This section is |
| optional, but you are expected to provide it more often than not. |
| |
| And if the detailed explanation is quite long or detailed, you can |
| want to break it in more paragraphs. |
| |
| Then you can add references to relevant mailing list discussions |
| (if any), with proper links. But don't take this as an excuse for |
| writing incomplete commit messages! The "distilled" conclusions |
| reached in such discussions should have been placed in the |
| paragraphs above. |
| |
| Finally, here you can thank people that motivated or helped the |
| change. So, thanks to John Doe for bringing up the issue, and to |
| J. Random Hacker for providing suggestions and testing the patch. |
| |
| <detailed list of touched files> |
| |
| * The <detailed list of touched files> is mandatory but for the most |
| trivial changes, and should follows the GNU guidelines for ChangeLog |
| entries (described explicitly in the GNU Coding Standards); it might |
| be something of this sort: |
| |
| * some/file (func1): Improved frobnication. |
| (func2): Adjusted accordingly. |
| * another/file (foo, bar): Likewise. |
| * tests/foo.tap: New test. |
| * tests/Makefile.am (TESTS): Add it. |
| |
| * If your commit fixes an automake bug registered in the tracker (say |
| numbered 1234), you should put the following line after the summary |
| line: |
| |
| This change fixes automake bug#1234. |
| |
| * If your commit is just related to the given bug report, but does not |
| fix it, you might want to add a line like this instead: |
| |
| This change is related to automake bug#1234. |
| |
| * When referring to older commits, use 'git describe' output as pointer. |
| But also try to identify the given commit by date and/or summary line |
| if possible. Examples: |
| |
| Since yesterday's commit, v1.11-2019-g4d2bf42, ... |
| |
| ... removed in commit 'v1.11-1674-g02e9072' of 01-01-2012, |
| "dist: ditch support for lzma"... |
| |
| ================================================================ |
| = Test suite |
| |
| * Use "make check" and "make maintainer-check" liberally. |
| |
| * Make sure each test file is executable. |
| |
| * Export the 'keep_testdirs' environment variable to "yes" to keep |
| test directories for successful tests also. |
| |
| * Use perl coverage information to ensure your new code is thoroughly |
| tested by your new tests. |
| |
| * See file 't/README' for more information. |
| |
| ================================================================ |
| = Release procedure |
| |
| * The steps outlined here are meant to be followed for alpha and stable |
| releases as well. Where differences are expected, they will be |
| explicitly described. |
| |
| * Fetch new versions of the files that are maintained by the FSF by |
| running "make fetch". In case any file in the automake repository |
| has been updated, commit and re-run the testsuite. |
| |
| * Ensure that the copyright notices of the distributed files is up to |
| date. The maintainer-only target "update-copyright" can help with |
| this. |
| |
| * Update NEWS. |
| |
| * Update the version number in configure.ac. |
| (The idea is that every other alpha number will be a net release. |
| The repository will always have its own "odd" number so we can easily |
| distinguish net and repo versions.) |
| |
| * Run this: |
| ./bootstrap.sh && ./configure && make && make check && make distcheck |
| |
| * Run "make git-tag-release". |
| This will run the maintainer checks, verify that the local git |
| repository and working tree are clean and up-to-date, and create |
| a proper signed git tag for the release (based on the contents |
| of $(VERSION)). |
| |
| * Run "make git-upload-release". |
| This will first verify that you are releasing from a tagged version |
| and that the local git repository and working tree are clean and |
| up-to-date, and will then run "make dist" to create the tarballs, |
| and invoke the 'gnupload' script sign and upload them to the correct |
| locations. In case you need to sign with a non-default key, you can |
| use "make GNUPLOADFLAGS='--user KEY' git-upload-release". |
| |
| * Update version number in configure.ac to next alpha number. |
| Re-run ./bootstrap.sh and commit. |
| |
| * Don't forget to "git push" your changes so they appear in the public |
| git tree. |
| |
| * For stable releases, update the manuals at www.gnu.org: |
| - Generate manuals: |
| cd doc |
| wget "http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" |
| wget "http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" |
| sh ./gendocs.sh --email bug-automake@gnu.org automake "GNU Automake" |
| - copy manuals recursively to web cvs, |
| - commit. |
| - Check for link errors, fix them, recheck until convergence: |
| <http://validator.w3.org/checklink> |
| |
| * Send the announcement at least to <autotools-announce@gnu.org> and |
| <automake@gnu.org>. If the release is a stable one, the announcement |
| must also go to <info-gnu@gnu.org>; if it is an alpha or beta release, |
| announcement should be sent also to <platform-testers@gnu.org>, to |
| maximize the possibility of early testing on exotic or proprietary |
| systems. Finally, copy the announcement into the NEWS feed at |
| <https://savannah.gnu.org/projects/automake>. |
| |
| ----- |
| |
| Copyright (C) 2003-2012 Free Software Foundation, Inc. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| Local Variables: |
| mode: text |
| End: |