# Building SP

You will need a C++ compiler with good template support to build this. Support for exceptions is not required.

In most cases you should be able to port to a new compiler just by editing `include/config.h`.

## Unix

To build on Unix, edit the Makefile, and do a make. You can also build in a different directory. This requires GNU make or another make that implements VPATH. Copy or link the top-level Makefile to the build directory, change srcdir in the Makefile to point to the original directory, and do a make in the build directory.

`make install` installs the programs.

You can use the following compilers:

gcc
  gcc 2.7.2 works (gcc 2.7.0 won't work at least on the sparc). You will also an iostream library (eg as provided by libg++ 2.7). This distribution builds on Solaris 2.3 and on Linux 1.2. I expect it will build on SunOS 4 as well with little difficulty.

  With gcc 2.6.3/SunOS 4, you'll need to compile with `-Dsig_atomic_t=int`, and, if you want to compile with -DSP_HAVE_SOCKET, you'll need to make netdb.h and arpa/inet.h C++ compatible.

Sun C++
  To compile with Sun C++ 4.0.1, run first sunfix.sh. Also in the top-level Makefile, change set libMakefile to Makefile.lib.sun. This makes the library build use the -xar option.

Nelson Beebe has ported SP to a variety of other Unix systems and has produced some notes about his experiences.

## DOS/Windows

You must use a compiler that generates 32-bit code.

###

The following compilers have been tested:

Visual C++ 4.2
  Open SP.mak as a Makefile in the Developer Studio and build whatever you want. Don't use `Batch Build` or `Rebuild All`: these rebuild the library repeatedly. You can build all the targets in a particular configuration by building the all target. The `sp-generate.mak` makefile can be used to make all the .cxx and .h files that are automatically generated. (These are included in the distribution, so you don't need to do this unless you want to modify SP.)

  To create a new program, make a new project in the SP project workspace using the `Build>Subprojects` command, and include `lib` and maybe `generic` as subprojects. You may also want to add your project as a subproject to `all`. Then, in `Build>Settings` under the `C/C++` tab in the `Preprocessor` category, copy the `Preprocessor definitions` and `Additional include directories` entries from the nsgmls subproject. In the `Code Generation` category make sure you've selected the same run-time library as that used by the corresponding configuration of `lib`.

Visual C++ 5.0
  Use SP.mak as with Visual C++ 4.2. Visual C++ 5.0 has a bug which will cause it to crash when converting the makefile. To work around this, rename the lib directory to x, say, before converting the makefile and then, after conversion but before building, rename it back to lib. Then proceed as with Visual C++ 4.2.

  You should be aware that Visual C++ 5.0 also has some optimization bugs. There are workarounds for those I've discovered, but it would be safer to use Visual C++ 4.2.

Watcom C++ 11.0
  Use Makefile.wat.

  You must compile on a platform that supports long filenames.