X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=docs%2FREADME.developers;h=9038cd2124b8af3f35aef61eb80bb2ca9bf202df;hb=dd1c5703125bb10f78add2488ce32e83c523cfbb;hp=f93c70bd72a4afe7eb969031bc02ea68eee0b90a;hpb=2ef1a2bc54aa523b9edbb830959f17a3ed05d74d;p=mmh diff --git a/docs/README.developers b/docs/README.developers index f93c70b..9038cd2 100644 --- a/docs/README.developers +++ b/docs/README.developers @@ -1,63 +1,58 @@ # # README.developers # -# $Id$ -# This file is intended to provide a few tips for anyone doing development on nmh. Developers who learn things "the hard way" about the nmh codebase (as opposed to local info best encoded in a comment) are encouraged to share their wisdom here. -The topics are organized alphabetically. +Following a commit checklist, the topics are organized alphabetically. +---------------- +commit checklist +---------------- --------------- -autoconf files --------------- +1. code updated? +2. test added? +3. man page and other documentation updated? +4. docs/pending-release-notes updated? +5. should commit message reference bug report? +6. update/close bug report (with commit id)? +7. notify nmh-users? -If you wish to change the `configure' script or its related files, you'll need -to first install GNU m4, available from and then -GNU autoconf (). -Most of the configure-related files are automatically generated. The only files -you should need to manually edit are acconfig.h and configure.in. Don't, for -instance, edit config.h.in. Though it is an input file from the point of view -of the users (and the configure script) it is an output file from the point of -view of the developers (and the autoconf script). +------------------------- +autoconf & automake files +------------------------- -If you do change acconfig.h or configure.in and want to `cvs commit' them, be -sure to regenerate the output files and commit them as well. The easiest way to -regenerate the files is to simply run `make' -- it'll do the necessary calls of -autoconf and autoheader and will do a `./config.status --recheck', which will -exercise your new configure script. +If you wish to change the `configure' script, the generated Makefile +or other related files, you'll need to first install GNU m4, available +from , then GNU autoconf +() and GNU automake +(). Nmh is currently using a +minimum of autoconf 2.61 and automake 1.10. -When you commit the configure-related files, it's very important to commit them -in the right order. The timestamps on the files in the CVS archive are based on -the current time at the moment they were committed -- the timestamps from the -local files you commit are not copied over. If you commit the files in the -wrong order, you'll cause unnecessary calls of `autoconf' to occur when people -try to `make' their copies of the latest CVS source. These people may be -end-users who don't have any interest in changing the configure-related files -and don't have autoconf installed. They'll be unable to make without playing -around with `touch'. +Most of the configure-related files are automatically generated. +The only files you should need to manually edit are configure.ac +and any autoconf macros in the m4 directory. Don't, for instance, +edit config.h.in. Though it is an input file from the point of +view of the users (and the configure script) it is an output file +from the point of view of the developers (and the autoconf script). -The correct procedure to commit the configure-related files is: +If you wish to add a new autoconf macro, it should be placed in it's +own file and put in the m4 directory; aclocal will automatically pick +it up and automake will add it to the distribution target automatically. - % cvs commit acconfig.h aclocal.m4 configure.in - % autoconf && autoheader # or simply "make" - % cvs commit config.h.in configure - % make stamp-h.in # or simply "make" - % cvs commit stamp-h.in +If you wish to make changes to the Makefile, you will need to edit +Makefile.am. See the automake documentation if you need further help. +You should always check changes to Makefile.am by using "make distcheck". -The reason that the commits need to be split up is that the RCS Id strings -in the files change when you commit, which can apparently mess up the -dependencies. [How? -- Dan Harkless ] If this were -not the case, you could commit with a single make followed by a -cvs commit acconfig.h aclocal.m4 config.h.in configure.in configure stamp-h.in. +Note that the automatically generated autotools files (such as config.h.in, +Makefile.in, and configure), are NOT kept in git. Thus, when you check out +a git tree, you need to run the autogen.sh script before you can build +anything: -If you haven't changed all the files noted above, just commit the ones you have, -in the stated order (for instance, configure.in, then configure, then -stamp-h.in). + % ./autogen.sh ------------------- @@ -67,7 +62,7 @@ directory structure Following is a list of nmh's directories along with a brief description of the purpose of each one. Meanings are given for the abbreviations, but note that these meanings are just informed guesses as to what the MH developers were -thinking. +thinking. ./ The top-level directory. Contains files like README and INSTALL. @@ -76,6 +71,10 @@ config/ Contains utility files for the `configure' process. Ordinarily nothing in here needs to be messed with. +docs/ + Contains more specialized documentation, such as this file and + the FAQ. + etc/ Contains files, file templates, and scripts to generate files that will be installed in the ${prefix}/etc directory. Stuff like replcomps. @@ -92,14 +91,6 @@ mts/ "mts" stands for "Message Transfer Service". Source files specific to the different MTSs go in the subdirectories. -mts/mmdf/ - "mmdf" stands for "Multichannel Memorandum Distribution Facility". It is an - alternative to sendmail used primarily on SCO UNIX. - -mts/sendmail/ - When nmh is configured --with-mts=sendmail, the files in this directory are - used. - mts/smtp/ When nmh is configured to just talk to an SMTP server over TCP/IP, the source in this directory is compiled. @@ -108,7 +99,10 @@ sbr/ "sbr" stands for "subroutine(s)". For the most part, each source file in this directory contains a single function with the same name as the source file. These functions are of general use and are called from throughout - nmh. + nmh. + +test/ + The num unit test suite. uip/ "uip" stands for "User Interface Programs". Most nmh commands have a file @@ -117,28 +111,22 @@ uip/ sbr.c which contains additional subroutines called from .c (which would contain not much else besides main()). -zotnet/ - Files in this hierarchy were either written by or moved here by UCI - (University of California, Irvine) after they took over MH from the Rand - Corporation. "Zot!" is the sound effect made by the anteater in the "B.C." - comic strip when its tongue lashes out at ants. The anteater is UCI's - official mascot. Not sure whether UCInet was once called ZotNet... -zotnet/bboards/ - UCI added Bulletin Board functionality to MH with the `bbc' command. This - functionality has been removed from nmh but apparently files in this - directory are still needed for other purposes. +--- +git +--- + +As of December 2010, nmh has switched to using git for revision control +instead of CVS. While the topic of git is beyond the scope of this FAQ, +to get started with git & nmh, you can run the following command to checkout +the nmh repository: -zotnet/mf/ - "mf" stands for "Mail Filter". The filtering in this case apparently refers - to translation between different address and mailbox formats. + % git clone git://git.savannah.nongnu.org/nmh.git -zotnet/mts/ - MTS code not specific to any single MTS apparently goes here. +That will create a workspace call nmh. To update that workspace +with changes to the master, cd to it and run: -zotnet/tws/ - No idea what "tws" stands for, other than 't' almost certainly standing for - "time". Date and time manipulation routines go here. + % git pull ------------------------------------------------------- @@ -149,7 +137,7 @@ For some system functions whose availability or behavior varies from OS to OS, nmh conditionally uses a local definition with the same name as the OS function (e.g. snprintf()). For other functions, developers need to avoid the OS versions and always use the nmh-supplied function. Here is a list of such -functions: +functions: OS function nmh-local version to use instead =========== ================================ @@ -160,63 +148,68 @@ getpass() nmh_getpass() releasing nmh ------------- -To make a public release of nmh (we'll use version 1.0.4 and my mhost.com -account, danh, as examples here): +To make a public release of nmh (we'll use version 1.5 as the example +here; the convention for release candidates is to use something like +"1.5-RC1"): - 1. % echo 1.0.4 > VERSION + 1. % echo 1.5 > VERSION + % date +"%e %B %Y" > DATE + (DATE should contain something like "30 December 2000") - 2. Put a comment like "Released nmh-1.0.4." in the ChangeLog. + 2. % git commit VERSION DATE; git push - 3. % cvs commit ChangeLog VERSION + 3. % git tag -a 1.5 -m 'Releasing nmh-1.5.' - 4. % cvs tag nmh-1_0_4 - (cvs treats dots specially, so underscores are substituted here.) + Note that the new convention for tagging is to simply tag with the + version number (tag formats in the past have varied). - 5. % make nmhdist + 4. % make distcheck - 6. Untar nmh-1.0.4.tar.gz and `diff -r' it vs. your CVS tree. Make sure no - files got left out of the distribution that should be in it (due to someone - forgetting to update the DIST variables in the Makefiles). + If you want to check the distribution build with some particular + configure options, set the DISTCHECK_CONFIGURE_FLAGS variable. + E.g.: - 7. If you have root access on your machine, it's good at this point to do: + % make distcheck DISTCHECK_CONFIGURE_FLAGS=--with-cyrus-sasl - % chown -R 0:0 nmh-1.0.4 - % tar cvf nmh-1.0.4.tar nmh-1.0.4 - % gzip nmh-1.0.4.tar + 5. If all is well and your tarball is final, go back to your workspace and do: - If you leave the files in the archive as being owned by yourself, your UID - may coincide with one of a user on a machine where nmh is being installed, - making it possible for that user to Trojan the nmh code before the system - administrator finishes installing it. + % echo 1.5+dev > VERSION - 8. Make sure your new tarball uncompresses and untars with no problem. Make - sure you can configure, make, and install nmh from it. + 6. % git commit VERSION; git push - 9. If all is well and your tarball is final, go back to your CVS tree and do: + 7. Upload the distribution file to savannah. You can automate this process + by doing: - % echo 1.0.4+dev > VERSION + % make upload SAVANNAH_USERNAME=username -10. Put a comment like "Upped the version number to 1.0.4+dev until the next nmh - release." in the ChangeLog. + This will automatically call gpg to sign the release. You can bypass + this step by setting the SKIP_GPG_SIG variable. -11. % cvs commit ChangeLog VERSION + 8. Update the http://www.nongnu.org/nmh/ homepage. (It lives in the CVS + 'webpages repository'; see https://savannah.nongnu.org/cvs/?group=nmh) -12. If possible, make an MD5 hash and/or a PGP signature of nmh-1.0.4.tar.gz. + 9. Add a news item to the savannah nmh page. You'll have to submit it first + and then separately approve it (under News->Manage). -13. % scp -p nmh-1.0.4.tar.gz* danh@mhost.com:/var/ftp/pub/nmh +10. Send the release announcement email to the following places: + nmh-workers@nongnu.org + nmh-announce@nongnu.org + exmh-users@redhat.com + exmh-workers@redhat.com + mh-e-users@lists.sourceforge.net -14. Send an announcement to exmh-users@redhat.com, exmh-workers@redhat.com, - mh-users@ics.uci.edu, and nmh-announce@mhost.com. If the release fixes - significant security holes, also send an announcement to - bugtraq@securityfocus.com. The exmh lists require you to be subscribed in - order to post. Note that you don't need to post separately to comp.mail.mh, - as the mh-users mailing list is apparently bidirectionally gatewayed to it. + If the release fixes significant security holes, also send an announcement + to bugtraq@securityfocus.com. The exmh lists require you to be subscribed + in order to post. Note that you don't need to post separately to + comp.mail.mh, as the mh-users mailing list is apparently bidirectionally + gatewayed to it. Preferably, the announcement should contain the MD5 hash generated above, - and should be PGP-signed. It should include the FTP URL for the tarball as + and should be PGP-signed. It should include the URL for the tarball as well as the URL of the website. It should contain a brief summary of - visible changes, as well as the URL of the cvsweb diff page that would show - a detailed list of changes. The changes between 1.0.3 and 1.0.4 would be - shown by: + visible changes, as well as the URL of the git diff page that would show + a detailed list of changes. The changes between 1.5 and 1.4 would be + shown by [this is just a guess, I don't know anything about cgit, and + it assumes that we tag with nmh-x_x-release from now on]: - http://www.mhost.com/cgi-bin/cvsweb/nmh/ChangeLog?r1=1.40&r2=1.71 + http://git.savannah.gnu.org/cgit/nmh.git/diff/?h=nmh-1_5-release?h=nmh-1_4-release