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.

James Clark
jjc@jclark.com