TABLE OF CONTENTS
=================

  Table Of Contents
  Quick Instructions
* Net-SNMP Specific Information
  Long (but you should read these) Instructions
  Installing the Perl/SNMP Module
* Compilers and Options
  Compiling For Multiple Architectures
  Installation Names
  Optional Features
  Sharing Defaults
  Operation Controls

  * = required reading

QUICK INSTRUCTIONS
==================

  1) Run ./configure
     (type "./configure --help" for a quick usage summary.)
     (--prefix=PATH will change the default /usr/local installation path.)
     (see "Compilers and Options" on changing the compiler to use)

  2) Optionally edit include/net-snmp/net-snmp-config.h
     (due to prompting done by the configure script, this is very rarely
      necessary.)

  3) make

  4) Run the next command as root:
  5) make install

  6) configure the agent
     (either using 'snmpconf' or by crafting an snmpd.conf file manually.
      The file 'EXAMPLE.conf' may be a suitable starting point)

Note: By default, everything will be installed in /usr/local.
      (see below for more instructions)

Net-SNMP Specific Information
=============================

As of UCD-SNMP V3.3.1 the configuration files are now looked for in
$(prefix)/share/snmp, where ($prefix) is defined as the value passed
to the --prefix argument of the configure script, or /usr/local if
undefined.  In version 3.0.3 till 3.3, the files were kept in
$(prefix)/lib/snmp

Optional features to pass to configure for Net-SNMP can be obtained by
running configure --help.

LONG (but you should read these) INSTRUCTIONS
=============================================

   The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation.  It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions.  Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, a file `config.log' containing compiler output
(useful mainly for debugging `configure') and a file `configure-summary'
containing the summary displayed at the end of the `configure' run.

   The file `include/net-snmp/net-snmp-config.h' is also generated
at this time.  It contains IMPORTANT information such as the location
of log and configuration files.  In some special cases you may need to
modify this file but it is prefererable to work out a way of getting
`configure' to set things up for your particular environment.

As the `configure' invocation often gets lengthy and difficult to
type or if you have several different ways you want to configure a
system, you may want to create a shell script containing your invocation.

   If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release.  If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.

   The file `configure.in' is used to create `configure' by a program
called `autoconf'.  You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.

The simplest way to compile this package is:

  1. `cd' to the directory containing the package's source code and type
     `./configure' to configure the package for your system.  If you're
     using `csh' on an old version of System V, you might need to type
     `sh ./configure' instead to prevent `csh' from trying to execute
     `configure' itself.

     Running `configure' takes awhile.  While running, it prints some
     messages telling which features it is checking for.  When it
     completes it prints a short message (also available in configure-summary)
     indicating what functionality will be available when compiled.

  2. If necessary, edit include/net-snmp/net-snmp-config.h (see above).  

  3. Type `make' to compile the package.

  4. Type `make test' which runs a variety of tests to see what functionality
     has been incorporated and if it works.

  5. Type `make install' to install the programs and any data files and
     documentation.

  6. You can remove the program binaries and object files from the
     source code directory by typing `make clean'.  To also remove the
     files that `configure' created (so you can compile the package for
     a different kind of computer), type `make distclean'.

  7. You can remove the application by typing `make uninstall'.

There may be additional installation issues discussed in the 
README's for various platforms such as README.solaris.


Installing the Perl/SNMP Module
===============================

   The Perl/SNMP Module is now bundled with the net-snmp package
(which includes other Net-SNMP specific modules as well), all of which
are located in the net-snmp/perl directory. The Perl package provides
a high level abstract interface to the functionality found in the
Net-SNMP libraries and demon applications.

   It is recommended you install the perl modules as you build the
   Net-SNMP package.  The configure script can be run as follows to
   automatically find perl and use it to install the perl modules:

      ./configure --with-perl-modules

   If you wish to use the embedded perl support available in the
   Net-SNMP agent (and starting in Net-SNMP 5.2, the trap receiver),
   then use the following option instead:

      ./configure --enable-embedded-perl --enable-shared

   Starting with Net-SNMP 5.4, configure enables embedded Perl and the 
   Perl modules by default when possible unless explicitly disabled.

   If you wish to build the perl modules by hand, *install Net-SNMP
   first* and then change directories to the perl subdirectory and:

   Run:
            cd perl
            perl Makefile.PL
            make
            make test
            make install (as root)


Compilers and Options
=====================

   Some systems require unusual options for compilation or linking that
the `configure' script does not know about.  You can give `configure'
initial values for variables by setting them in the environment.  Using
a Bourne-compatible shell, you can do that on the command line like
this:
     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure

Or on systems that have the `env' program, you can do it like this:
     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

Compiling For Multiple Architectures
====================================

   You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory.  To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'.  `cd' to the
directory where you want the object files and executables to go and run
the `configure' script.  `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.

   If you have to use a `make' that does not supports the `VPATH'
variable, there is a `maketarget' script that will generate a symlink'ed
shadow-directory for the object files. Do a `sh maketarget', then `cd' into
targets/`config.guess` and do the configuration and installation.

Installation Names
==================

   By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc.  You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.

   You can specify separate installation prefixes for
architecture-specific files and architecture-independent files.  If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.

   If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.

Optional Features
=================

   Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System).  The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.

   For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.

Specifying the System Type
==========================

   There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on.  Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option.  TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
     CPU-COMPANY-SYSTEM

See the file `config.sub' for the possible values of each field.  If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.

   If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.

Sharing Defaults
================

   If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists.  Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.

Operation Controls
==================

   `configure' recognizes the following options to control how it
operates.

`--cache-file=FILE'
     Use and save the results of the tests in FILE instead of
     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
     debugging `configure'.

`--help'
     Print a summary of the options to `configure', and exit.

`--quiet'
`--silent'
`-q'
     Do not print messages saying which checks are being made.

`--srcdir=DIR'
     Look for the package's source code in directory DIR.  Usually
     `configure' can determine that directory automatically.

`--version'
     Print the version of Autoconf used to generate the `configure'
     script, and exit.

`configure' also accepts some other, not widely useful, options.

