              Rivet 3.2 Installation
              ======================

For more detailed instructions, see the docs/html/ directory.

Rivet build system is based on autotools - autoconf, automake and libtool,
and so compilation is simple.  

1) run 'configure' with the appropiate options for your installation. (if you
are building Rivet from a working copy created by svn you have also to prepare
the source tree running 'aclocal; autoreconf' beforehand)

Example:
./configure --with-tcl=/usr/lib/tcl8.6                      \
            --with-apache=/usr/local/apache2                \
            --with-apxs=/usr/local/apache2/bin/apxs         \
            --with-rivet-target-dir=/usr/local/lib/rivet3.2 \
            --enable-version-display

2) if 'configure' was successful Rivet is ready for compilation

make

3) Install Rivet with the usual 

sudo make install

binary module and Tcl packages can be installed separately by calling

make install-binaries

and 

make install-packages

Along with the usual 'configure' variables Rivet's configure script 
handles other specific options. 

--with-tcl=DIR              Directory where tclConfig.sh is
                            stored. This is a shell script that
                            defines all the relevant symbols needed
                            to build Tcl related applications.
--with-apache-version=VER   Values are 1 or 2 depending
                            on the apache server you're 
                            builing the module for.
--with-apache=DIR           Apache server's root directory.
--with-apxs=FILE            Path to the apxs program to
                            be used in the compilation
                            process.
--with-apache-include=DIR   Apache's include files path.
--with-apr-config=FILE      Apache Portable Runtime 
                            metainformation program
--with-rivet-target-dir=DIR Rivet library installation directory.
--enable-version-display    Apache signature shows Rivet 
                            version number in the form Rivet/VERSION. 
                            Default=no

These are the basic Apache configuration directives that are needed:

# Loads the module.
LoadModule rivet_module /path/to/your/copy/of/mod_rivet.so

# Let the module handle .rvt and .tcl files.
AddType application/x-httpd-rivet  rvt
AddType application/x-rivet-tcl    tcl

# The default charset can be specified in the configuration

AddType "application/x-httpd-rivet; charset=utf-8" rvt

 Examples:

On a Debian system apxs for Apache2.x is named apxs2

./configure --with-apache-include=/usr/include/apr-1.0          \
            --with-apxs=/usr/bin/apxs2                          \
            --with-tcl=/usr/lib/tcl8.6                          \
            --with-apache=/usr

Here is another example reported by a user who successfully built 
Rivet on Slackware 12.1

aclocal
autoreconf
./configure --with-tcl=/usr/lib --with-apxs=/usr/bin/apxs 
make

Rivet is packaged for various Linux flavours. A list is available at http://tcl.apache.org/download.html
