# $Id: INSTALL.quagga.txt,v 1.10 2005/06/28 00:19:48 paul Exp $

--------------------------------------------------------------------------
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 supporting the C99 standard and GNU make.

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/
	pinfo -r quagga.info

Assuming you have the user-friendly 'pinfo' info browser installed.

You can also the standard GNU 'info' browser, if you prefer this browser you
have no doubt already spent a lot of time reading its documentation and dont
need to be told how to specify an info file by filename. ;)

The Quagga website should also have recent versions of documentation
available online.

--------------------------------------------------------------------------
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

Texinfo is not actually required since quagga.info is checked in.
When texinfo 4.7 is widespread, it will be removed 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.  GNU texinfo is required in order to build
doc/quagga.info, which is not supplied in CVS, but is supplied in the
CVS snapshots on the Quagga website.   quagga.info is created via
makeinfo during the build.

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 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

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