From 54921a5e45644a4b94bc0550e76b30a0049474b8 Mon Sep 17 00:00:00 2001
From: Ton Voon <tonvoon@users.sourceforge.net>
Date: Tue, 13 May 2003 22:03:48 +0000
Subject: The developer-guidelines.html file is now generated from the sgml
 file by docbook2html at tools/setup time

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@506 f882894a-f735-0410-b71e-b25c423dba1c

diff --git a/doc/developer-guidelines.html b/doc/developer-guidelines.html
deleted file mode 100644
index efac605..0000000
--- a/doc/developer-guidelines.html
+++ /dev/null
@@ -1,931 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
-<HTML
-><HEAD
-><TITLE
->Nagios plug-in development guidelines</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.64
-"></HEAD
-><BODY
-CLASS="BOOK"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><A
-NAME="AEN1"
-></A
-><DIV
-CLASS="TITLEPAGE"
-><H1
-CLASS="TITLE"
-><A
-NAME="AEN3"
->Nagios plug-in development guidelines</A
-></H1
-><H3
-CLASS="AUTHOR"
-><A
-NAME="AEN5"
->Karl DeBisschop</A
-></H3
-><DIV
-CLASS="AFFILIATION"
-><DIV
-CLASS="ADDRESS"
-><P
-CLASS="ADDRESS"
->karl@debisschop.net</P
-></DIV
-></DIV
-><H3
-CLASS="AUTHOR"
-><A
-NAME="AEN11"
->Ethan Galstad</A
-></H3
-><DIV
-CLASS="AFFILIATION"
-><DIV
-CLASS="ADDRESS"
-><P
-CLASS="ADDRESS"
->netsaint@linuxbox.com</P
-></DIV
-></DIV
-><H3
-CLASS="AUTHOR"
-><A
-NAME="AEN21"
->Hugo Gayosso</A
-></H3
-><DIV
-CLASS="AFFILIATION"
-><DIV
-CLASS="ADDRESS"
-><P
-CLASS="ADDRESS"
->hgayosso@gnu.org</P
-></DIV
-></DIV
-><H3
-CLASS="AUTHOR"
-><A
-NAME="AEN27"
->Subhendu Ghosh</A
-></H3
-><DIV
-CLASS="AFFILIATION"
-><DIV
-CLASS="ADDRESS"
-><P
-CLASS="ADDRESS"
->sghosh@sourceforge.net</P
-></DIV
-></DIV
-><H3
-CLASS="AUTHOR"
-><A
-NAME="AEN33"
->Stanley Hopcroft</A
-></H3
-><DIV
-CLASS="AFFILIATION"
-><DIV
-CLASS="ADDRESS"
-><P
-CLASS="ADDRESS"
->stanleyhopcroft@sourceforge.net</P
-></DIV
-></DIV
-><P
-CLASS="COPYRIGHT"
->Copyright &copy; 2000 2001 2002 by Karl DeBisschop, Ethan Galstad, 
-		Hugo Gayosso, Stanley Hopcroft, Subhendu Ghosh</P
-><HR></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="#PREFACE"
->About the guidelines</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#AEN51"
->Copyright</A
-></DT
-></DL
-></DD
-><DT
-><A
-HREF="#AEN56"
-></A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#PLUGOUTPUT"
->Plugin Output for Nagios</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#AEN60"
->Print only one line of text</A
-></DT
-><DT
-><A
-HREF="#AEN63"
->Screen Output</A
-></DT
-><DT
-><A
-HREF="#AEN67"
->Return the proper status code</A
-></DT
-><DT
-><A
-HREF="#AEN71"
->Plugin Return Codes</A
-></DT
-></DL
-></DD
-><DT
-><A
-HREF="#SYSCMDAUXFILES"
->System Commands and Auxiliary Files</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#AEN117"
->Don't execute system commands without specifying their
-		full path</A
-></DT
-><DT
-><A
-HREF="#AEN121"
->Use spopen() if external commands must be executed</A
-></DT
-><DT
-><A
-HREF="#AEN125"
->Don't make temp files unless absolutely required</A
-></DT
-><DT
-><A
-HREF="#AEN128"
->Don't be tricked into following symlinks</A
-></DT
-><DT
-><A
-HREF="#AEN131"
->Validate all input</A
-></DT
-></DL
-></DD
-><DT
-><A
-HREF="#PERLPLUGIN"
->Perl Plugins</A
-></DT
-><DT
-><A
-HREF="#RUNTIME"
->Runtime Timeouts</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#AEN165"
->Use DEFAULT_SOCKET_TIMEOUT</A
-></DT
-><DT
-><A
-HREF="#AEN168"
->Add alarms to network plugins</A
-></DT
-></DL
-></DD
-><DT
-><A
-HREF="#PLUGOPTIONS"
->Plugin Options</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="#AEN174"
->Option Processing</A
-></DT
-><DT
-><A
-HREF="#AEN187"
->Plugins with more than one type of threshold, or with
-      threshold ranges</A
-></DT
-></DL
-></DD
-><DT
-><A
-HREF="#SUBMITTINGCHANGES"
->New submissions and patches</A
-></DT
-></DL
-></DD
-></DL
-></DIV
-><DIV
-CLASS="PREFACE"
-><HR><H1
-><A
-NAME="PREFACE"
->About the guidelines</A
-></H1
-><P
->The purpose of this guidelines is to provide a reference for
-    the plug-in developers and encourage the standarization of the
-    different kind of plug-ins: C, shell, perl, python, etc.</P
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="AEN51"
->Copyright</A
-></H1
-><P
->Nagios Plug-in Development Guidelines Copyright (C) 2000 2001
-		2002
-        Karl DeBisschop, Ethan Galstad, Hugo Gayosso, Stanley Hopcroft, 
-		Subhendu Ghosh</P
-><P
->Permission is granted to make and distribute verbatim
-        copies of this manual provided the copyright notice and this
-        permission notice are preserved on all copies.</P
-><P
->The plugins themselves are copyrighted by their respective
-		authors.</P
-></DIV
-></DIV
-><DIV
-CLASS="ARTICLE"
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="#PLUGOUTPUT"
->Plugin Output for Nagios</A
-></DT
-><DT
-><A
-HREF="#SYSCMDAUXFILES"
->System Commands and Auxiliary Files</A
-></DT
-><DT
-><A
-HREF="#PERLPLUGIN"
->Perl Plugins</A
-></DT
-><DT
-><A
-HREF="#RUNTIME"
->Runtime Timeouts</A
-></DT
-><DT
-><A
-HREF="#PLUGOPTIONS"
->Plugin Options</A
-></DT
-><DT
-><A
-HREF="#SUBMITTINGCHANGES"
->New submissions and patches</A
-></DT
-></DL
-></DIV
-><DIV
-CLASS="SECTION"
-><H1
-CLASS="SECTION"
-><A
-NAME="PLUGOUTPUT"
->Plugin Output for Nagios</A
-></H1
-><P
->You should always print something to STDOUT that tells if the 
-		service is working or why its failing. Try to keep the output short - 
-		probably less that 80 characters. Remember that you ideally would like 
-		the entire output to appear in a pager message, which will get chopped
-		off after a certain length.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN60"
->Print only one line of text</A
-></H2
-><P
->Nagios will only grab the first line of text from STDOUT
-		when it notifies contacts about potential problems. If you print
-		multiple lines, you're out of luck. Remember, keep it short and
-		to the point.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN63"
->Screen Output</A
-></H2
-><P
->The plug-in should print the diagnostic and just the
-		synopsis part of the help message.  A well written plugin would
-		then have --help as a way to get the verbose help.</P
-><P
->Code and output should try to respect the 80x25 size of a
-		crt (remember when fixing stuff in the server room!)</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN67"
->Return the proper status code</A
-></H2
-><P
->See <A
-HREF="#RETURNCODES"
->Table 1 in the section called <I
->Plugin Return Codes</I
-></A
-> below
-		for the numeric values of status codes and their
-		description. Remember to return an UNKNOWN state if bogus or
-		invalid command line arguments are supplied or it you are unable
-		to check the service.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN71"
->Plugin Return Codes</A
-></H2
-><P
->The return codes below are based on the POSIX spec of returning
-		a positive value.  Netsaint prior to v0.0.7 supported non-POSIX
-		compliant return code of "-1" for unknown.  Nagios supports POSIX return
-		codes by default.</P
-><P
->Note: Some plugins will on occasion print on STDOUT that an error
-		occurred and error code is 138 or 255 or some such number.  These
-		are usually caused by plugins using system commands and having not 
-		enough checks to catch unexpected output.  Developers should include a
-		default catch-all for system command output that returns an UNKOWN
-		return code.</P
-><DIV
-CLASS="TABLE"
-><A
-NAME="RETURNCODES"
-></A
-><P
-><B
->Table 1. Plugin Return Codes</B
-></P
-><TABLE
-BORDER="1"
-BGCOLOR="#E0E0E0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><THEAD
-><TR
-><TH
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->Numeric Value</P
-></TH
-><TH
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->Service Status</P
-></TH
-><TH
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->Status Description</P
-></TH
-></TR
-></THEAD
-><TBODY
-><TR
-><TD
-ALIGN="CENTER"
-VALIGN="TOP"
-><P
->0</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="MIDDLE"
-><P
->OK</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->The plugin was able to check the service and it 
-						appeared to be functioning properly</P
-></TD
-></TR
-><TR
-><TD
-ALIGN="CENTER"
-VALIGN="TOP"
-><P
->1</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="MIDDLE"
-><P
->Warning</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->The plugin was able to check the service, but it 
-						appeared to be above some "warning" threshold or did not appear 
-						to be working properly</P
-></TD
-></TR
-><TR
-><TD
-ALIGN="CENTER"
-VALIGN="TOP"
-><P
->2</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="MIDDLE"
-><P
->Critical</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->The plugin detected that either the service was not 
-						running or it was above some "critical" threshold</P
-></TD
-></TR
-><TR
-><TD
-ALIGN="CENTER"
-VALIGN="TOP"
-><P
->3</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="MIDDLE"
-><P
->Unknown</P
-></TD
-><TD
-ALIGN="LEFT"
-VALIGN="TOP"
-><P
->Invalid command line arguments were supplied to the 
-						plugin or the plugin was unable to check the status of the given 
-						hosts/service</P
-></TD
-></TR
-></TBODY
-></TABLE
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="SYSCMDAUXFILES"
->System Commands and Auxiliary Files</A
-></H1
-><DIV
-CLASS="SECTION"
-><H2
-CLASS="SECTION"
-><A
-NAME="AEN117"
->Don't execute system commands without specifying their
-		full path</A
-></H2
-><P
->Don't use exec(), popen(), etc. to execute external
-		commands without explicity using the full path of the external
-		program.</P
-><P
->Doing otherwise makes the plugin vulnerable to hijacking
-		by a trojan horse earlier in the search path. See the main
-		plugin distribution for examples on how this is done.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN121"
->Use spopen() if external commands must be executed</A
-></H2
-><P
->If you have to execute external commands from within your
-    	plugin and you're writing it in C, use the spopen() function
-		that Karl DeBisschop has written.</P
-><P
->The code for spopen() and spclose() is included with the
-		core plugin distribution.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN125"
->Don't make temp files unless absolutely required</A
-></H2
-><P
->If temp files are needed, make sure that the plugin will
-		fail cleanly if the file can't be written (e.g., too few file
-		handles, out of disk space, incorrect permissions, etc.) and
-		delete the temp file when processing is complete.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN128"
->Don't be tricked into following symlinks</A
-></H2
-><P
->If your plugin opens any files, take steps to ensure that
-		you are not following a symlink to another location on the
-		system.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN131"
->Validate all input</A
-></H2
-><P
->use routines in utils.c or utils.pm and write more as needed</P
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="PERLPLUGIN"
->Perl Plugins</A
-></H1
-><P
->Perl plugins are coded a little more defensively than other
-		plugins because of embedded Perl.  When configured as such, embedded
-		Perl Nagios (ePN) requires stricter use of the some of Perl's features.
-		This section outlines some of the steps needed to use ePN
-		effectively.</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
-> Do not use BEGIN and END blocks since they will be called 
-			the first time and when Nagios shuts down with Embedded Perl (ePN).  In 
-			particular, do not use BEGIN blocks to initialize variables.</P
-></LI
-><LI
-><P
->To use utils.pm, you need to provide a full path to the
-			module in order for it to work with ePN.</P
-><P
-CLASS="LITERALLAYOUT"
->	&nbsp;&nbsp;e.g.<br>
-		use&nbsp;lib&nbsp;"/usr/local/nagios/libexec";<br>
-		use&nbsp;utils&nbsp;qw(...);<br>
-	&nbsp;&nbsp;</P
-></LI
-><LI
-><P
->Perl scripts should be called with "-w"</P
-></LI
-><LI
-><P
->All Perl plugins must compile cleanly under "use strict" - i.e. at
-			least explicitly package names as in "$main::x" or predeclare every
-			variable. </P
-><P
->Explicitly initialize each varialable in use.  Otherwise with
-			caching enabled, the plugin will not be recompilied each time, and
-			therefore Perl will not reinitialize all the variables.  All old
-			variable values will still be in effect.</P
-></LI
-><LI
-><P
->Do not use &#60; DATA &#62; (these simply do not compile under ePN).</P
-></LI
-><LI
-><P
->Do not use named subroutines</P
-></LI
-><LI
-><P
->If writing to a file (perhaps recording
-			performance data) explicitly close close it.  The plugin never
-			calls <I
-CLASS="EMPHASIS"
->exit</I
->; that is caught by
-			p1.pl, so output streams are never closed.</P
-></LI
-><LI
-><P
->As in <A
-HREF="#RUNTIME"
->the section called <I
->Runtime Timeouts</I
-></A
-> all plugins need 
-			to monitor their runtime, specially if they are using network
-			resources.  Use of the <I
-CLASS="EMPHASIS"
->alarm</I
-> is recommended.
-			Plugins may import a default time out ($TIMEOUT) from utils.pm.
-			</P
-></LI
-><LI
-><P
->Perl plugins should import %ERRORS from utils.pm
-			and then "exit $ERRORS{'OK'}" rather than "exit 0"
-			</P
-></LI
-></OL
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="RUNTIME"
->Runtime Timeouts</A
-></H1
-><P
->Plugins have a very limited runtime - typically 10 sec.
-		As a result, it is very important for plugins to maintain internal
-		code to exit if runtime exceeds a threshold. </P
-><P
->All plugins should timeout gracefully, not just networking
-		plugins. For instance, df may lock if you have automounted
-		drives and your network fails - but on first glance, who'd think
-		df could lock up like that.  Plus, it should just be more error
-		resistant to be able to time out rather than consume
-		resources.</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN165"
->Use DEFAULT_SOCKET_TIMEOUT</A
-></H2
-><P
->All network plugins should use DEFAULT_SOCKET_TIMEOUT to timeout</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN168"
->Add alarms to network plugins</A
-></H2
-><P
->If you write a plugin which communicates with another
-		networked host, you should make sure to set an alarm() in your
-		code that prevents the plugin from hanging due to abnormal
-		socket closures, etc. Nagios takes steps to protect itself
-		against unruly plugins that timeout, but any plugins you create
-		should be well behaved on their own.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="PLUGOPTIONS"
->Plugin Options</A
-></H1
-><P
->A well written plugin should have --help as a way to get 
-		verbose help. Code and output should try to respect the 80x25 size of a
-		crt (remember when fixing stuff in the server room!)</P
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN174"
->Option Processing</A
-></H2
-><P
->For plugins written in C, we recommend the C standard
-		getopt library for short options. If using getopt_long, check to
-		be sure that HAVE_GETOPT_H is defined (configure checks this and
-		sets the #define in common/config.h).</P
-><P
->For plugins written in Perl, we recommend Getopt::Long module.</P
-><P
->Positional arguments are strongly discouraged.</P
-><P
->There are a few reserved options that should not be used
-		for other purposes:</P
-><P
-CLASS="LITERALLAYOUT"
->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-V&nbsp;version&nbsp;(--version)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-h&nbsp;help&nbsp;(--help)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-t&nbsp;timeout&nbsp;(--timeout)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-w&nbsp;warning&nbsp;threshold&nbsp;(--warning)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-c&nbsp;critical&nbsp;threshold&nbsp;(--critical)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-H&nbsp;hostname&nbsp;(--hostname)<br>
-		</P
-><P
->In addition to the reserved options above, some other standard options are:</P
-><P
-CLASS="LITERALLAYOUT"
->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-C&nbsp;SNMP&nbsp;community&nbsp;(--community)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-a&nbsp;authentication&nbsp;password&nbsp;(--authentication)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-l&nbsp;login&nbsp;name&nbsp;(--logname)<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-p&nbsp;port&nbsp;or&nbsp;password&nbsp;(--port&nbsp;or&nbsp;--passwd/--password)monitors&nbsp;operational<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-u&nbsp;url&nbsp;or&nbsp;username&nbsp;(--url&nbsp;or&nbsp;--username)<br>
-		</P
-><P
->Look at check_pgsql and check_procs to see how I currently
-		think this can work.  Standard options are:</P
-><P
->The option -V or --version should be present in all
-		plugins. For C plugins it should result in a call to print_revision, a
-		function in utils.c which takes two character arguments, the
-		command name and the plugin revision.</P
-><P
->The -? option, or any other unparsable set of options,
-		should print out a short usage statement. Character width should
-		be 80 and less and no more that 23 lines should be printed (it
-		should display cleanly on a dumb terminal in a server
-		room).</P
-><P
->The option -h or --help should be present in all plugins.
-		In C plugins, it should result in a call to print_help (or
-		equivalent).  The function print_help should call print_revision, 
-		then print_usage, then should provide detailed
-		help. Help text should fit on an 80-character width display, but
-		may run as many lines as needed.</P
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H2
-CLASS="SECTION"
-><A
-NAME="AEN187"
->Plugins with more than one type of threshold, or with
-      threshold ranges</A
-></H2
-><P
->Old style was to do things like -ct for critical time and
-      -cv for critical value. That goes out the window with POSIX
-      getopt. The allowable alternatves are:</P
-><P
-></P
-><OL
-TYPE="1"
-><LI
-><P
->long options like -critical-time (or -ct and -cv, I
-	  suppose).</P
-></LI
-><LI
-><P
->repeated options like `check_load -w 10 -w 6 -w 4 -c
-	  16 -c 10 -c 10`</P
-></LI
-><LI
-><P
->for brevity, the above can be expressed as `check_load
-	  -w 10,6,4 -c 16,10,10`</P
-></LI
-><LI
-><P
->ranges are expressed with colons as in `check_procs -C
-	  httpd -w 1:20 -c 1:30` which will warn above 20 instances,
-	  and critical at 0 and above 30</P
-></LI
-><LI
-><P
->lists are expressed with commas, so Jacob's check_nmap
-	  uses constructs like '-p 1000,1010,1050:1060,2000'</P
-></LI
-><LI
-><P
->If possible when writing lists, use tokens to make the
-	  list easy to remember and non-order dependent - so
-	  check_disk uses '-c 10000,10%' so that it is clear which is
-	  the precentage and which is the KB values (note that due to
-	  my own lack of foresight, that used to be '-c 10000:10%' but
-	  such constructs should all be changed for consistency,
-	  though providing reverse compatibility is fairly
-	  easy).</P
-></LI
-></OL
-><P
->As always, comments are welcome - making this consistent
-      without a host of long options was quite a hassle, and I would
-      suspect that there are flaws in this strategy. Perhaps clear
-      long-options is the most important of the above choices, but not
-      all POSIX systems have C libraries for long options, so the
-      short forms must exist as well.</P
-></DIV
-></DIV
-><DIV
-CLASS="SECTION"
-><HR><H1
-CLASS="SECTION"
-><A
-NAME="SUBMITTINGCHANGES"
->New submissions and patches</A
-></H1
-><P
->If you would like other to use your plugins and have it included in
-	the standard distribution, please include patches for the relavant
-	configuration files, in particular "configure.in" Otherwise submitted 
-	plugins will be included in the contrib directory.</P
-><P
->Plugins in the contrib directory are going to be migrated to the
-	standard plugins/plugin-scripts directory as time permits and per user
-	requests</P
-><P
->Patches should be submitted via the SourceForge and be announced to
-	the mailing list.</P
-><P
->For new plugins, provide a diff to add to the EXTRAS list (configure.in) 
-	unless you are fairly sure that the plugin will work for all platforms with 
-	no non-standard	software added.</P
-><P
->If possible please submit a test harness. Documentation on sample
-	tests coming soon.</P
-></DIV
-></DIV
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/makefile b/doc/makefile
new file mode 100644
index 0000000..cd12814
--- /dev/null
+++ b/doc/makefile
@@ -0,0 +1,10 @@
+# Quick makefile to create developer-guidelines.html
+
+developer-guidelines.html: developer-guidelines.sgml
+	if which docbook2html > /dev/null 2>&1; then \
+		docbook2html -u developer-guidelines.sgml ;\
+		if [[ -e developer-guidelines/developer-guidelines.html ]] ; then \
+			mv developer-guidelines/developer-guidelines.html . ;\
+			rm -f developer-guidelines ;\
+		fi ;\
+	fi
diff --git a/tools/setup b/tools/setup
index b825a6b..bbc8266 100755
--- a/tools/setup
+++ b/tools/setup
@@ -8,3 +8,5 @@ automake --add-missing --copy
 if [ -f debian/rules ] ; then
   chmod +x debian/rules
 fi
+
+cd doc && make
-- 
cgit v0.10-9-g596f

