# $Id$

--------------------------------------------------------------------------
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
  FreeBSD 5.x
  FreeBSD 6.x
  FreeBSD-current
  Linux [kernel/distribution information needed]
  NetBSD 1.6.x
  NetBSD 2.x
  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.

If you are building from plain CVS checkouts, the versions which
should work at least with:

	automake:	1.8.5
	autoconf:	2.59
	libtool:	1.5.6
	texinfo:	4.7
	GNU AWK:	3.1 [XXX is GNU version really needed?  BSD?]
	texinfo		4.7

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 either the 'update-autotools' script provided, or else the
'autoreconf -i' command supplied with your autoconf package.  After this
you may run configure.

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.2 and 2.0 provide texinfo 4.6.
NetBSD 2.99.15 provides texinfo 4.7 (so NetBSD 3 will as well).
NetBSD pkgsrc provides automake 1.9.1 autoconf 2.59 libtool 1.5.6
NetBSD pgksrc provides texinfo 4.7 (devel/gtexinfo)

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

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