--------------------------------------------------------------------------
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.  (Note that considering it a bug is
not a guarantee of support, merely "we agree that it is broken".)

  Dragonfly ?
  FreeBSD 4.x	[In 2007, this is getting tenous.]
  FreeBSD 5.x
  FreeBSD 6.x
  FreeBSD-current
  Linux [kernel/distribution information needed]
  NetBSD 2.x	[Note texinfo 4.6  in base system]
  NetBSD 3.x
  NetBSD 4.x
  NetBSD-current
  OpenBSD ? [info needed on what should work]
  Solaris 9
  Solaris 10


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)

Becuase 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 stable distributions.  The notes below
explain what versions are present in various environments.

NetBSD 1.6 and 2 provide texinfo 4.6.  This is now considered old.
NetBSD 3 and 4 provide texinfo 4.7.

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

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