Basic Installation
==================

    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 also create a `config.h' file 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, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').

   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 `AUTHORS' 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'.

The simplest way to compile this package is:

  1. `cd' to the directory containing the package's source code.

  2. type `./autogen.sh' to generate the configure script.
     If you're using `csh' on an old version of System V, you might
	 need to type `sh ./autogen.sh' instead to prevent `csh' from trying
	 to execute `autogen.sh' itself.

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

  4. Type `make' to compile the package.

  5. Optionally, type `make check' to run any self-tests that come with
     the package.

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

  7. 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'.  There is
     also a `make maintainer-clean' target, but that is intended mainly
     for the package's developers.  If you use it, you may have to get
     all sorts of other programs in order to regenerate files that came
     with the distribution.

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, you have to compile the package for one architecture at a time
in the source code directory.  After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.

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.

   In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files.  Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.

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

With --enable-unicode, the library will be compiled with UTF16 Unicode support
(2 bytes wide characters instead of 1 byte wide characters)

If the libXML2 library (http://xmlsoft.org) is detected, the DOMConfigurator
class will be compiled. 

Threading support can be added through option -with-thread
	* "pthread" (default): pthread library
	* "Microsoft" : native microsoft library
	* "no" : no threading support

ODBC support (ODBCAppender) can be added through option -with-ODBC
	* "unixODBC" : unixODBC library (http://www.unixodbc.org)
	* "iODBC" : iODBC library (http://www.iodbc.org)
	* "Microsoft" : Microsoft ODBC library
	* "no" (default) : no ODBC support

SMTP support (SMTPAppender) can be added through option -with-SMTP
	* "libsmtp" : libsmtp library (http://libsmtp.berlios.de)
	* "CDO" : Microsoft CDO library (no yet implemented !)
	* "no" (default) : no SMTP support

XML support (DOMConfigurator) can be added through option -with-XML
	* "libxm2" (default) : gnome xml library (http://xmlsoft.org)
	* "Microsoft" : MSXML library
	* "no" : no XML support


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.  To
     suppress all normal output, redirect it to `/dev/null' (any error
     messages will still be shown).

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

MsDev 6.0 Compilation
=====================

Copy the msvc/config.h.msvc file to include/log4cxx/config.h.
If you want to compile a dynamic library (dll), compile msvc/dll/dll.dsp.
If you want to compile a static library (lib), compile msvc/static/static.dsp.

The DOMConfigurator class is compiled with the MSXML library, if 'HAVE_XML'
and 'HAVE_MS_XML' are defined in the config.h file.

The ODBCAppender class is compiled with the Microsoft ODBC library, if
'HAVE_ODBC' and 'HAVE_MS_ODBC' are defined in the config.h file.

The SMTPAppender class is compiled with the Microsoft CDO library, if
'HAVE_SMTP' and 'HAVE_CDO_SMTP' are defined in the config.h file.
(not yet implemented)

log4cxx is build with Windows native thread support, if 'HAVE_THREAD' and
'HAVE_MS_THREAD' are defined in the config.h file.

UNICODE support is available through 'Unicode Debug' and 'Unicode Release'
compilation targets.

Visual Studio .Net 2003 Compilation
===================================

Copy the msvc/config.h.msvc file to include/log4cxx/config.h.
If you want to compile a dynamic library (dll), compile msvc/dll/dll.vcproj.
If you want to compile a static library (lib), compile msvc/static/static.vcproj.

The config file options are same as for MsDev 6.0


