These are some notes on how to maintain and hack the Darkbot source
code.  Part of this is justifications and assumptions, so that if an
assumption changes, we know what to change.


SOFTWARE REQUIREMENTS FOR DEVELOPERS

None of this stuff is required for ordinary users, this is what is
required to build from the git version.  Most people should be able to
build from the distributed tarball (if there is one).  Later versions of
these should work to.

GNU M4   1.4
autoconf 2.59 or 2.60
automake 1.9
perl     5.005_3

automake 1.10 is specifically not supported.  Though it seems to work fine now.


AUTOCONF, AUTOMAKE, AND FRIENDS (AUTOFOO)

I've been researching recent autofoo best practises.  Most users of
autofoo don't really understand it and just copy someone else's autofoo,
or follow one of several out of date tutorials.  I've attempted to
create an up to date set of autofoo stuff that follows recent best
practises.

In an attempt to provide the autogen.sh and bootstrap.sh that are now
outdated, but that everybody is used to, I have added other scripts in
the top level directory.  These scripts provide an easy to use method of
doing the usual things in the usual ways.

clean.sh - cleans up after all the other scripts, this includes deleting
the $HOME/darkbot default install directory.

bootstrap.sh - Do all the autofoo magic and generate the configure
script.

distribute.sh - calls bootstrap.sh to do all the autofoo magic, then
builds the source distribution archive from scratch.

autogen.sh - calls bootstrap.sh to do all the autofoo magic, then calls
the resulting configure script.  Defaults to using $HOME/darkbot as the
prefix.

build.sh - builds darkbot, but assumes that bootstrap.sh has already
been run.  It will run bootstrap.sh if needed. but this script is meant
for ordinary users installing from the source distribution archive.

build_small.sh - just like build.sh, only it turns off all the optional
code.

rebuild_all.sh - calls autogen.sh to configure everything, then builds
everything from scratch.  This script is meant for developers installing
from git.

testing.sh - Same as build.sh, but turns on testing mode, for developers
only.

One of the major things I have attempted to do is to enable building
darkbot from "out of tree".  That means building it from anywhere
outside of the directory that holds the source code.  In this way the
downloaded darkbot directory can be kept pristine.  There are now
scripts that create a directory called "build" and put generated files
in there.

I experimented a lot with clean ways of doing out of tree builds, but
inconsistancies in the way the various autofoo programs work means that
the only way that worked was to create a build directory, copy
configure.ac and Makefile.am into it, then build everything from there. 
This does mean that the top level directory doesn't got a configure or a
Makefile.

Aclocal ignores the redirection of autom4te.cache to the build
directory.  Autoconf (when run from autoreconf) insists on putting
configure in the same directory as configure.ac.  Automake ignores the
redirection of aclocal.m4 to the build directory, and insists on putting
Makefile.in in the same directory as Makefile.am.   Automake creates
make files that don't know how to make dist properly when building out
of tree.


LIBCOMPAT

This is a library of implementations of standard functions that may be
missing from a particular OS installation.  Autoconf (via the configure
script) will detect if they are missing and build the contents of
libcompat as needed.  These functions generally are copied from gnulib,
libiberty (part of gcc now) or uClibc.  Select() and socket() are
checked for, but there is no replacement functions for them.  It is
unlikely that replacements will be needed, when they are, then we can
worry about them.  Alarm() is also checked for, but I'm giving it the
benefit of the doubt for now.

The --enable-testing option to configure will force the compiling of all
libcompat source code, as well as all other optional code so that it can
be tested.


TESTED

All of these are 32 bit x86, unless otherwise stated.

Working git version on -
Linux CentOS 4.2 (maybe, not tested recently)
Linux Debian old-stable 6.0.9 squeeze
Linux Fedora Core 3 (maybe, not tested recently)
Linux Fedora Core 5 (maybe, not tested recently)
Linux SuSE 9.3 (maybe, not tested recently)
Linux Ubuntu 12.04 64 bit
FreeBSD 8.3
Latest cygwin
Old cygwin (from the freezedown.org web site)
OpenBSD 5.3
Mac OS X 10.7

Failed git version on -
Linux Debian 3.1 sarge, it's too old, we require more up to date autotools.
Linux Fedora Core 2, it's too old, we require more up to date autotools.
FreeBSD 5.4, doesn't seem to have autotools at all.
NetBSD 2.0.2, it's too old, we require more up to date autotools.
OpenBSD 3.8, it's too old, we require more up to date autotools.
MacOS X 10.2, it's too old, we require more up to date autotools.
Solaris 9, it's too old, we require more up to date autotools.

Working distributed version on -
Linux Debian 3.0 sid
Linux Debian 3.1 sarge
Linux Fedora Core 2
Linux Slackware 11.0
Linux SuSE Enterprise Server 9
FreeBSD 5.4
NetBSD 2.0.2
OpenBSD 3.8
MacOS X 10.2
Solaris 9
Windows cygwin NT 5.1 (WinXP, cygwin 1.5 I think).

Failed distributed version on -
Older cygwin from darkbot site
Windows SFU
