--------------------------------------------------------------------------
Building and Installing Quagga from releases or snapshots:

The 'INSTALL' file contains generic instructions on how to use 'configure'
scripts.

Quagga requires a C compiler (and associated header files and
libraries) supporting the C99 standard.

Quagga requires a reasonable make.  It is considered a bug if quagga
does not compile with the system make on recent FreeBSD, NetBSD or
OpenBSD, and a very serious bug if it does not compile with GNU make.

Quagga expects a POSIX.2 compliant system, more or less.  Clean
workarounds for POSIX non-compliance are welcome.

It is considered a bug if Quagga fails to build and run on any of the
following systems (where .x indicates the most recent release), or
such systems "-current" versions.  Or, it might be that this list is
out of date and will be updated.  (Note that considering it a bug is
not a guarantee of support, merely "we agree that it is broken".)

  Dragonfly ?
  FreeBSD (stable branches currently supported, plus perhaps one)
  FreeBSD-current
  Linux [kernel/distribution information needed]
  NetBSD 4.x
  NetBSD 5.x
  NetBSD 6.x
  NetBSD-current
  OpenBSD ? [info needed on what should work]
  Solaris (modern/supported versions, including OpenSolaris forks) 

For further Quagga specific information on 'configure' and build-time
configuration of the software, please read the Quagga info
documentation, (doc/quagga.info).  To read the info page included with
the Quagga sources without first installing Quagga:

  cd doc
  # one of the following, depending on your info viewer preferences
  info quagga.info
  pinfo -r quagga.info
  emacs -eval '(info "quagga.info")'

The Quagga website (http://www.quagga.net) currently has the info
files available in various formats.

--------------------------------------------------------------------------
Building Quagga from CVS checkouts:

In order to build from CVS, you will need recent versions of several GNU
tools, particularly autoconf, automake, libtool, GNU awk and texinfo.  Note
that the CVS snapshots on the Quagga website should not require these tools;
everything is already setup ready to run 'configure'.  If you have trouble
building from CVS checkout it is recommended that you try a CVS snapshot
instead.

We declare that the following versions should work for building from
CVS checkouts.  Earlier versions may work, but failure to do so is not
a bug.  Required versions can be moved earlier if no problems, or
later after a judgement that a system without a higher version is
deficient is made.

	automake:	1.9.6 (released 2005-07-10)
	autoconf:	2.59 (2.60 on 2006-06-26 is too recent to require)
	libtool:	1.5.22 (released 2005-12-18)
	texinfo:	4.7 (released 2004-04-10; 4.8 is not yet common)
	GNU AWK:	3.1.5 (released 2005-08-12)

[TODO: texinfo 4.6 is now ancient and this should be revisited/fixed]
Because some systems provide texinfo 4.6 (4.7 is new), quagga.info is
checked in so that texinfo will generally not be invoked.  When
texinfo 4.7 is widespread, quagga.info will be removed from CVS and
texinfo will become required again.  (4.7 has figure support, needed
for the route server docs, which is why 4.6 doesn't work.)

In order to create PostScript or PDF versions of the Texinfo documentation,
you will need the convert utility, from the ImageMagick toolset installed,
and epstopdf from the TeTeX suite.

To create the required autotools files (Makefile.in, configure, etc.),
run "./bootstrap.sh".  After this you may run configure as for a
snapshot or release.

Please refer to "Building and Installing Quagga" above for further
instructions.

--------------------------------------------------------------------------
Notes on required versions:

The general goal is to use a modern baseline of tools, while not
imposing pain on those tracking supported (or almost supported) stable
distributions.  The notes below explain what versions are present in
various environments.

NetBSD 4 provides texinfo 4.7.
NetBSD 5 and 6 provides texinfo 4.8

Fedora Core ? provides autoconf 2.59.

OpenBSD 3.6 provides texinfo 4.2.
OpenBSD [3.6] ports provides automake 1.4-p6 autoconf 2.5.9 libtool 1.5.8

--------------------------------------------------------------------------
