# Libwww - the W3C Sample Code Library Installation

             (c) COPYRIGHT MIT 1995.
             Please first read the full copyright statement in the file COPYRIGH.

First, if you got libwww directly from CVS then you must bootstrap the code before compiling. If you have already done that or if you started from a distribution file then you can continue installation here:

- Building on Windows using MSVC
- Building on Unix or in the Cygwin Environment for Windows NT, 95, and 98
- After you have installed libwww, checkout how you can compile and link libwww apps

## Building on Windows using MSVC

Note that you can also use the Cygwin environment which is a Win32 port of the popular GNU development tools for Windows NT, 95, and 98 which allows us to use autoconf, automake, and libtool.

Vladimir Kozlov provides fresh binaries for wintel and MSVC makefiles are part of the distribution package.

You can also get the latest MSVC makefiles (PGP signature) which are in sync with the current CVS source tree (not the distribution package!). The makesfiles are not in CVS themselves as they constantly cause CVS conflicts. Unzip them on top (directly in the libwww folder) of your checked out CVS tree and repeat the bootstrap mechanism.

Regardless of whether you are using the CVS tree directly or got the distribution package, you can compile by opening the `libwww/windows/world.dsw` workspace and do a batch build of the whole thing.

You can configure libwww in windows config.h and if you are interested in the details of how we build libwww on Windows then please read the documentation on how to install on Windows. Libwww can work with several external software packages of which some you get by default. Here is the current list:

### Zlib Support

If `HT_ZLIB` is defined in the windows config.h file then libwww can use the zlib library for handling the deflate content-encoding. This may cause better performance as we then can inflate a compressed document on the fly. A version of the precompiled zlib DLL for Win32 is already included in the w3c-libwww distribution file.

1. Define `HT_ZLIB` in windows config.h file
2. Copy `zlib.dll` into a location where Windows can find it, for example `.\Bin\Debug\`

### Regular Expressions

If `HT_POSIX_REGEX` is defined in the windows config.h file then libwww can use posix compliant regular expressions, for example to handle URI matching. This is for example used in the webbot which can handle regular expressions when matching which URIs to check. The library has been tested with the GNU regular expression library for Win32.

1. Define `HT_POSIX_REGEX` in windows config.h file
2. Copy `regex.h` into `.\Library\External` and name it `rxposix.h`
3. Add `gnu_regex.lib` to the robot project (or whatever application you are building)
4. Copy `gnu_regex.dll` into a location where Windows can find it, for example `.\Bin\Debug\`

### SQL Access

`HT_MYSQL` is defined in the windows config.h file then libwww can use a MySQL database for handling logging instead of plain text files. This has a huge set of advantages.

### SOCKS Support

If either `SOCKS` and either `SOCKS4` or `SOCKS5` is defined in the windows config.h file then libwww can use SOCKS to go through firewalls. The SOCKS handling code in libwww can be found in wwwsys.h.

## Building on Unix and in the Cygwin Environment

You probably need the GNU version of make in order to build libwww. The reason is that some of the make files contain some syntax that most other makefiles don't understand. These installation instructions are based on the suggested instructions provided with GNU Autoconf.

The Cygwin environment is a Win32 port of the popular GNU development tools for Windows NT, 95, and 98. They function through the use of the Cygwin library which provides a UNIX-like API on top of the Win32 API.

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' and a `wwwconf.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).

The simplest way to compile this package on a Unix platform 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 for which it is checking.
2. Type `make' to compile the package.
3. Type `make install' to install the library.
4. You can remove the library and object files from the source 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.'

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

### Using a Different Build Directory

You can compile the package in a directory different from the one containing the source code. Doing so allows you to compile it on more than one kind of computer at the same time. 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 to object files and library to go and run the configure script (i.e., go ``../src/configure`'). configure automatically checks for source code in the directory that configure is in and in `..' as well.

### Installation Names

By default, ``make install`' will install the library in ``/usr/local/lib`'. You can specify an installation prefix other than `/usr/local' by giving configure the option ``--prefix=PATH`'. You can cause the library to be installed with an extra prefix or suffix on its name by giving configure the options ``--program-prefix=PREFIX`' or ``--program-suffix=SUFFIX`'.

### Extra Features and Packages

There are a set of options you can give to configure in addition to those understood by all GNU Autoconf configure scripts. This is how you can enable, disable, include, or exclude them:

`--disable-FEATURE`
  do not include FEATURE (same as `--enable-FEATURE=no`)
`--enable-FEATURE[=ARG]`
  include FEATURE [ARG=yes]
`--with-PACKAGE[=ARG]`
  use PACKAGE [ARG=yes]
`--without-PACKAGE`
  do not use PACKAGE (same as `--with-PACKAGE=no`)

#### Options for Handling Shared/Static Linking

Solaris 2.5.x has serious problems handling shared libraries (the linker dumps core) and therefore you MUST use the `--disable-shared` when compiling on this platform.

Libwww uses GNU Libtool to build shared libraries on a variety of systems. While this is very nice for making usable binaries, it can be a pain when trying to debug a program. For that reason, compilation of shared libraries can be turned off by specifying the `--disable-shared` option to `configure`.

`--with-gnu-ld`
  assume the C compiler uses GNU ld [default=no]
`--enable-shared`
  Build shared libraries [default=yes]
`--enable-static`
  Build static libraries [default=yes]

#### Highly Recommended Packages!

These provide very useful added functionality in the libwww and the libwww applications

`--with-expat[=PATH]`
  Compile a libwww XML parser wrapper for the Expat library and enable it as a libwww converter stream. This is on by default as the code is incorporated into the libwww codebase!
`--with-md5[=PATH]`
  Compile a MD5 library which is required in order to handle HTTP digest authentication etc. This is on by default as the code is incorporated into the libwww codebase!
`--with-mysql[=PATH]`
  Compile with support for MySQL database access used for Webbot logging etc.
`--with-regex[=PATH]`
  Compile with POSIX regex library support used for regular expession matching of URIs
`--with-ssl[=path]`
  Libwww can be set up to use SSL as a transport, for example in order to deal with the `https` URI access scheme. This requires the OpenSSL library, for example.
`--with-zlib[=PATH]`
  Compile with zlib compress/decompress support used for compressing HTML etc.

#### Other Packages

These are less used packages (or less tested packages, I should say)

`--with-socks`
  Compile with SOCKS firewall traversal support.
`--with-socks5[=PATH]`
  Compile with SOCKS5 firewall traversal support.
`--with-socks4[=PATH]`
  Compile with SOCKS4 firewall traversal support.
`--with-wais[=PATH]`
  Compile with support for direct WAIS access.

#### Less Used Libwww Configuration Options

Normally, you don't have to change the default settings here

`--disable-nagle`
  Turning off Nagle's algorithm. Nagle is off by default
`--disable-pipelining`
  Turning off HTTP/1.1 Pipelining. Pipelining is on by default
`--enable-reentrant`
  Define `_REENTRANT` to enable reentrant system calls. Off by default
`--enable-signals`
  Use internal libwww signal handler. Off by default
`--enable-posix`
  Define _POSIX_SOURCE. Off by default
`--enable-cyrillic`
  Include support for Cyrillic in Line Mode browser

#### Location of X Files

As libwww doesn't use X, this is not really used.

`--x-includes=DIR`
  X include files are in DIR
`--x-libraries=DIR`
  X library files are in DIR
`--with-x`
  Use the X Window System

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