# $Id: INSTALL.quagga.txt,v 1.7 2004/11/23 12:21:16 gdt Exp $

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

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

Quagga can be compiled with either BSD make or GNU make.
GNU make 3.80 is known to work.
The following system makes are known to work
  NetBSD 1.6.2
  NetBSD 2.0

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 and texinfo.  Note that the
CVS snapshots on the Quagga website do 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

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

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

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