
Project standards
-----------------

   * Bug fixes and small code changes are updated in the CVS and the
     mailing list is notified later.

   * Adding new Features is the other way around. A proposal for a new
     Feature is first sent to the mailing list, discussed there (and
     possible voted on in case of major changes). If accepted, the CVS
     is updated with the new code.

     Adding new features also include updating the monit.pod file,
     the CHANGES.txt and other relevant documentation files, like
     ./monitrc for configuration syntax or semantic changes. It is
     important that the documentation is *always* aligned with the
     lates codebase.

   *  Add yourself as an author to any files you have changed
      substantially. Substantially changes means adding a new method
      or adding more than a couple of new code lines in a file so the
      program behavior was changed. The reason is mainly that you get
      the credit for the work you have done and partly that others
      will know whom to blame.


Decision Making
---------------

   *  All Contributors are encouraged to participate in decisions, but
      the decision itself is made by those that have Committer status
      in the Project. In other words, the Project is a "Minimum
      Threshold Meritocracy".

   *  Each vote can be made in one of three flavors:

     +1  "Yes," "Agree," or "the action should be performed." On some
         issues this is only binding if the voter has tested the
         action on their own system(s).  

      0  "Abstain," "no opinion". An abstention may have detrimental
         effects if too many people abstain.

     -1  "No." On issues where consensus is required, this vote counts
         as a veto. All vetos must contain an explanation of why the
         veto is appropriate. Vetos with no explanation are void. No
         veto can be overruled. If you disagree with the veto, you
         should lobby the person who cast the veto. Voters intending
         to veto an action item should make their opinions known to
         the group immediately so that the problem can be remedied as
         early as possible.


Programs you will need to build a monit package
-----------------------------------------------

   * GNU make
   * pod2html and pod2man
   * flex
   * yacc or bison (bison is recommended)
   * Perl 
   * GNU tar and GNU gzip
   * autoconf (v. >= 2.53)
   * automake (v. >= 1.5)
   * doxygen (v. >= 1.2.15)



Setting up the developing environment
-------------------------------------

   1. Run autogen.sh to create and run configure, or alternatively do:
	autoheader
	autoconf
	./configure
      Pass any configure arguments on the command line of autogen.sh if
      you are running autogen.sh.

   2. You will now have a Makefile for building the program. The
      Makefile will handle any additional source files you add to the
      project and will link everything to monit.

   3. The man file for the project is monit.pod and a monit.1 man
      file is created by using perl-pod and pod2man.

   4. To build a new release run the make_dist script. This will
      create a monit-{release-number}.tar.gz file in the current
      directory.


CVS standards
-------------

   * ONLY check-in files that will compile without any warnings.
     (Change the CFLAGS macro in the Makefile to include -Wall;
     CFLAGS = -Wall .. to compile with all warnings turned on)

   * Regularly do a 'cvs update -d .' to keep your local copy in sync
     with the master repository.

   * To check out a certain release you can do:
   
     export CVS_RSH=ssh
 cvs -z3 -duname@subversions.gnu.org:/cvsroot/monit/ co -r release-2-4-3 monit

     Where uname is your developer name at Savannah.

   * To check a files current tags, use: 'cvs status -v {filename}' 


   For Project Managers:

   * Every file in the project *must* be tagged with a release tag
     matching the version number in configure.ac before a new release
     is released. We use the following release tag standard:
     release-x-y(-z) e.g. release-2-4-2

   * The release numbers explained: 
 
      x is for major feature releases
      y is for minor feature releases
      z is for bug fix releases

   * To tag a new relase, use: 'cvs tag release-x-y-z .' This will tag
     all the files in current directory, and (recursively), files in
     any subdirectories. You can force a tag if you had to change
     files after the first tag *BUT* before the release is official:
     'cvs tag -F release-2-4-2 .'

   * Only the project manager is allowed to create and tag a new
     release


-- 
hauk@tildeslash.com
