X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=docs%2FREADME.developers;h=a4505980e85667d9a2632d7a5f62b69bf32719e9;hb=eda302e1f049eae6b429a12c5526600eea6a02e1;hp=0fe6311212951056821c2256524665acf27f8715;hpb=cc9976fbd511140bf7eef525a447c6e47f17850e;p=mmh
diff --git a/docs/README.developers b/docs/README.developers
index 0fe6311..a450598 100644
--- a/docs/README.developers
+++ b/docs/README.developers
@@ -1,227 +1,179 @@
#
# 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.
+This file is intended to provide a few tips for anyone doing development
+on mmh. Developers who learn things "the hard way" about the mmh codebase
+(as opposed to local info best encoded in a comment) are encouraged to
+share their wisdom here.
---------------
-autoconf files
---------------
-
-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).
-
-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.
-
-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'.
-
-The correct procedure to commit the configure-related files is:
-
- % 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
-
-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 // CVS
-updates the strings to have the new version number, the modification time
-of the file gets updated by the OS. -- Kimmo Suominen ]
-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.
-[But since we have the RCS Id strings in the files, isn't it useless to even
-mention this? The fix would be to remove the strings, and I don't think that
-would be good. -- Kimmo Suominen ]
-
-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).
+Absolute beginners should start reading docs/README.start-devel.
-------------------
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.
+Following is a list of mmh'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.
./
- The top-level directory. Contains files like README and INSTALL.
+ The top-level directory. Contains files like README and INSTALL.
config/
- Contains utility files for the `configure' process. Ordinarily nothing in
- here needs to be messed with.
+ Contains utility files for the `configure' process. Ordinarily
+ nothing in here needs to be messed with, but config/config.c is
+ very interesting to have a look at.
+
+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.
+ Contains files, file templates, and scripts to generate files that
+ will be installed in the ${prefix}/etc directory. Stuff like
+ replcomps.
h/
- Most of nmh's header (.h) files are kept not in the individual source
- directories, but in this central location.
+ Most of mmh's header files are kept in this central location instead
+ of in the individual source directories.
man/
- Contains all the input files that are processed to generate nmh's manual
- pages.
+ Contains all the input files that are processed to generate mmh's
+ manual pages.
-mts/
- "mts" stands for "Message Transfer Service". Source files specific to the
- different MTSs go in the subdirectories.
+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 mmh.
-mts/mmdf/
- "mmdf" stands for "Multichannel Memorandum Distribution Facility". It is an
- alternative to sendmail used primarily on SCO UNIX.
+uip/
+ "uip" stands for "User Interface Programs". Most mmh commands have a
+ file in this directory named .c containing the code for that
+ command (e.g. repl.c). In some cases there is also an auxiliary file
+ called sbr.c which contains additional subroutines called
+ from .c.
-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.
+----------------------
+version control system
+----------------------
-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.
+As of December 2010, nmh has switched to using git for revision control
+instead of CVS. Mmh has stick to git. While the topic of git is beyond
+the scope of this FAQ, to get started with git and mmh, you can run the
+following command to checkout the mmh repository:
-uip/
- "uip" stands for "User Interface Programs". Most nmh commands have a file
- in this directory named .c containing the code for that command
- (e.g. repl.c). In some cases there is also an auxiliary file called
- 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...
+ % git clone http://git.marmaro.de/mmh
-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.
+That will create a workspace called mmh. To update that workspace
+change to it and run:
-zotnet/mf/
- "mf" stands for "Mail Filter". The filtering in this case apparently refers
- to translation between different address and mailbox formats.
+ % git pull
-zotnet/mts/
- MTS code not specific to any single MTS apparently goes here.
-zotnet/tws/
- No idea what "tws" stands for, other than 't' almost certainly standing for
- "time". Date and time manipulation routines go here.
+--------------
+autoconf files
+--------------
+If you wish to change the `configure' script or its related files,
+you'll need to first install GNU m4 and GNU autoconf. Mmh is currently
+using a minimum of autoconf 2.61.
--------------------------------------------------------
-nmh-local functions to use in preference to OS versions
--------------------------------------------------------
+Most of the configure-related files are automatically generated. The
+only files you should need to manually edit are `acconfig.h' and
+`configure.ac'. 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).
-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:
+Note that the automatically generated autoconf files (such as
+`config.h.in', `stamp-h.in', and `configure'), are NOT kept in the
+version control system. Thus, when you check out the source tree,
+you need to run the `autogen.sh' script before you can build anything:
-OS function nmh-local version to use instead
-=========== ================================
-getpass() nmh_getpass()
+ % ./autogen.sh
-------------
-releasing nmh
+releasing mmh
-------------
-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 mmh (we'll use version 1.0 as example
+here):
+
+ 1. % echo 1.0 > VERSION
+ % date +"%Y-%m-%d" > DATE
+ (DATE should contain something like "2012-12-08")
+
+ 2. % git commit VERSION DATE; git push
+
+ 3. % git tag -a mmh-1.0 -m 'Releasing mmh-1.0'
+
+ 4. % make mmhdist
+
+ 5. Untar mmh-1.0.tar.gz and `diff -r' it vs. your workspace. 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).
- 1. % echo 1.0.4 > VERSION
+ 6. If you have root access on your machine, it's good at this point
+ to do:
- 2. Put a comment like "Released nmh-1.0.4." in the ChangeLog.
+ % chown -R 0:0 mmh-1.0
+ % tar cvf - mmh-1.0 | gzip -c > mmh-1.0.tar.gz
- 3. % cvs commit ChangeLog VERSION
+ 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 mmh is
+ being installed, making it possible for that user to Trojan the mmh
+ code before the system administrator finishes installing it.
- 4. % cvs tag nmh-1_0_4
- (cvs treats dots specially, so underscores are substituted here.)
+ 7. Make sure your new tarball uncompresses and untars with no problem.
+ Make sure you can configure, make, and install mmh from it.
- 5. % make nmhdist
+ 8. If all is well and your tarball is final, go back to your workspace
+ and do:
- 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).
+ % echo 1.0+dev > VERSION
- 7. If you have root access on your machine, it's good at this point to do:
+ 9. % git commit VERSION; git push
- % 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
+10. Generate an MD5 hash and a PGP signature of the tarball:
- 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.
+ % md5sum mmh-1.0.tar.gz > mmh-1.0.tar.gz.md5sum
+ % gpg -ab mmh-1.0.tar.gz
- 8. Make sure your new tarball uncompresses and untars with no problem. Make
- sure you can configure, make, and install nmh from it.
+ You can verify the hash and signature with:
- 9. If all is well and your tarball is final, go back to your CVS tree and do:
+ % md5sum -c mmh-1.0.tar.gz.md5sum
+ % gpg --verify mmh-1.0.tar.gz.asc
- % echo 1.0.4+dev > VERSION
+11. Upload the files to the web space:
-10. Put a comment like "Upped the version number to 1.0.4+dev until the next nmh
- release." in the ChangeLog.
+ % scp -p mmh-1.0.tar.gz* marmaro.de:.../prog/mmh/
-11. % cvs commit ChangeLog VERSION
+12. Update the homepage.
-12. If possible, make an MD5 hash and/or a PGP signature of nmh-1.0.4.tar.gz.
+13. Add a news item to relevant pages, e.g. freshmeat.net.
-13. % scp -p nmh-1.0.4.tar.gz* danh@mhost.com:/var/ftp/pub/nmh
+14. Send the release announcement email to the following places:
+
+
+ *or* (bidirectional gateway)
-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.
- 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
- 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:
+ Preferably, the announcement should contain:
+ - the URL for the tarball
+ - the MD5 hash
+ - the URL of the website
+ - a brief summary of visible changes
+ - the URL of the git diff page that shows a detailed list of
+ changes. The changes between 0.9 and 1.0 would be shown by:
+
- http://www.mhost.com/cgi-bin/cvsweb/nmh/ChangeLog?r1=1.40&r2=1.71
+ Further more, the message should be PGP-signed.