| ================================================================ |
| = This file |
| |
| * This file attempts to describe the rules to use when hacking |
| automake. |
| |
| * Don't put this file into the distribution. Don't mention it in the |
| ChangeLog. |
| |
| ================================================================ |
| = Administrivia |
| |
| * 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 ChangeLog entry. |
| |
| * If somebody reports a new bug, mention his name in the ChangeLog entry |
| and in the test case you write. Put him into THANKS. |
| |
| * 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. |
| |
| * Some files in the automake package are not owned by automake. These |
| files should never be edited here. These files are |
| COPYING (from FSF), |
| INSTALL (autoconf-patches@gnu.org), |
| config.guess, config.sub (config-patches@gnu.org), |
| texinfo.tex (bug-texinfo@gnu.org), |
| Most of them are updated before release with `make fetch'. |
| |
| * Changes other than bug fixes must be mentioned in NEWS. Important |
| bug fixes should be mentioned in NES, too. |
| |
| ================================================================ |
| = Naming |
| |
| * We've adopted the convention that internal AC_SUBSTs should be |
| named with a leading `am__', and internally generated targets should |
| be named with a leading `am--'. This convention is very new |
| (as of Feb 7 2001) and so it isn't yet universally used. But all |
| new code should use it. |
| |
| We used to use `_am_' as the prefix for an internal AC_SUBST. |
| However, it turns out that NEWS-OS 4.2R complains if a Makefile |
| variable begins with `_'. Yay for them. I changed the target |
| naming convention just to be safe. |
| |
| ================================================================ |
| = 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. |
| |
| * Do not use `cd' within back-quotes, use `$(am__cd)' instead. |
| Otherwise the directory name may be printed, depending on CDPATH. |
| More generally, do not ever use plain `cd' together with a relative |
| directory that does not start with a dot, or you might end up in one |
| computed with CDPATH. |
| |
| * 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. |
| |
| ================================================================ |
| = 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' 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. If such version is |
| not installed as "autoconf", pass it explicitly (along with the |
| accompanying "autom4te") when calling `bootstrap' and `configure'. |
| For example: |
| $ AUTOCONF=autoconf2.65 AUTOM4TE=autom4te2.65 ./bootstrap |
| $ ./configure AUTOCONF=autoconf2.65 AUTOM4TE=autom4te2.65 |
| |
| * Dependent files aclocal.m4, configure and Makefile.in in all |
| directories should be up to date in the git repository, so that |
| the changes in them can be easily noticed and analyzed. |
| |
| * The git tree currently carries a number of branches: master for the |
| current development, and release branches named branch-X.Y. The maint |
| branch serves as common ground for both master and the active release |
| branches. Changes intended for both should be applied to maint, which |
| should then be merged to release branches and master, of course after |
| suitable testing. It is advisable to merge only after a set of related |
| commits have been applied. |
| |
| * Example work flow for patches to maint: |
| |
| # 1. Checkout the "maint" branch: |
| git checkout maint |
| |
| # 2. Apply the patch(es) with "git am" (or create them with $EDITOR): |
| git am -3 0*.patch |
| # 2a. Run required tests, if any ... |
| |
| # 3. Merge maint into branch-1.11: |
| git checkout branch-1.11 |
| git merge maint |
| # 3a. Run required tests, if any ... |
| |
| # 4. Redo steps 3 and 3a for master: |
| git checkout master |
| git merge maint |
| # testing ... |
| |
| # 5. Push the maint and master branches: |
| git push --dry-run origin maint branch-1.11 master |
| # if all seems ok, then actually push: |
| git push origin maint branch-1.11 master |
| |
| * 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. |
| |
| * 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 be merged later. The next branch may serve as |
| common ground for feature merging and testing, should they not be ready |
| for master yet. |
| |
| * 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. |
| |
| * In order for rebasing and merging of ChangeLog entries to work seamlessly, |
| install and configure git-merge-changelog, currently available as gnulib |
| module. |
| |
| ================================================================ |
| = Test suite |
| |
| * Use "make check" and "make maintainer-check" liberally. |
| |
| * Make sure each test file is executable. |
| |
| * Use `keep_testdirs=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 `tests/README' for more information. |
| |
| ================================================================ |
| = Release procedure |
| |
| * Fetch new versions of the files that are maintained by the FSF. |
| Commit. Unfortunately you need an FSF account to do this. |
| (You can also use `make fetch', but that is still woefully incomplete.) |
| |
| * Update NEWS. For an alpha release, update README-alpha. |
| |
| * 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.) |
| |
| * Update ChangeLog. |
| |
| * Run ./bootstrap, ./configure, make. |
| |
| * Run `make release-stats' if release statistics in doc/automake.texi |
| have not been updated yet. |
| |
| * Run `make git-release'. |
| This will run distcheck to create the tarballs, commit the last |
| NEWS/configure.ac/ChangeLog changes, tag the repository, sign |
| the tarballs, and upload them. |
| Use `make GNUPLOADFLAGS="--user key" git-release' to sign with |
| a non-default key. |
| |
| * Update version number in configure.ac to next alpha number. |
| Re-run ./bootstrap and commit. |
| |
| * Don't forget to `git push' your changes so they appear in the public |
| git tree. |
| |
| * Update the web pages at sources.redhat.com: |
| - bump version in index.rst, |
| - add entry to news.rst, |
| - run `make' to update .html files, |
| - create manuals: |
| cd doc |
| make pdf |
| make html MAKEINFOFLAGS=--no-split |
| - copy automake.html and automake.pdf to web cvs, |
| - add ChangeLog entry and commit. |
| |
| * 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 announcement at least to autotools-announce@gnu.org, and |
| automake@gnu.org. If not an alpha, announcement must also go to |
| info-gnu@gnu.org. Copy this announcement into the NEWS feed at |
| <https://savannah.gnu.org/projects/automake>. |
| |
| ----- |
| |
| Copyright (C) 2003, 2007, 2008, 2010 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: |