Building spamd/spamc under Windows
----------------------------------

Spamd currently does not run under Windows, but spamc does.

With SpamAssassin 3.4.2, spamd has been made available for Windows. Note
that this is still experimental. In terms of stability and perfomance it
heavily depends on which Perl distribution and/or module versions you
are using. So do not use it in a production environment. Alternatively,
spamd also works when built and run in the Cygwin Unix emulation
environment, and a pure Windows spamc can be used with it. You can also
run a pure Windows spamc that communicates with spamd running on any
network accessible computer. The unix sockets option is not supported
under Windows, so only TCP/IP can be used, either with or without SSL.

Building spamc for Windows requires a lot more installed on your
computer than running it does. If all you want to do is run spamc
without the full SpamAssassin on your Windows machine, it is easier if
you can get a binary executable from someone else who has built it.

When building SpamAssassin under Windows, building spamc is
optional. You can specify BUILD_SPAMC=yes or BUILD_SPAMC=no on the
command line when you run 'perl Makefile.PL'. If you don't, you will be
asked during the build process if you want to build spamc.

System requirements
-------------------

To build spamc you have to be able to build SpamAssassin and have a
suitable C compiler.

To build SpamAssassin you must have installed a Windows version of Perl
and the modules that are listed as required in the general SpamAssassin
documentation.

Building spamc for Windows has been tested with Microsoft Visual C++ 6.0
and with Microsoft Visual C++ Toolkit 2003. It will probably just work
with any recent version of VC++. Some installation files would have to
be changed to use with any other C compiler.

Microsoft Visual C++ Toolkit 2003 can be downloaded for free. It
requires two other free downloads to be able to build spamc. To use it:

 Download and install Microsoft Visual C++ Toolkit 2003 from
  http://msdn.microsoft.com/visualc/vctoolkit2003/

 Download and install the Core Platform SDK from
  http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
  That download requires Internet Explorer and accepting installation
  of an ActiveX control to access.

 Download the self-extracting archive file
  http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe
  Run it to create the files nmake.exe and nmake.err, which should both
  be placed in a directory that is in the Path, such as \perl\bin.

To run the spamc executable once it is built you do not need to have
VC++ or perl installed.

Spamc requires spamd to be running on some system that it can talk to
using tcp/ip over a network or on the same machine. The test cases in
the build process will only work if the SPAMD_HOST environment variable
is set to the host name of a computer running spamd on the test port,
which defaults to 48373. This has been tested on a single computer in
which spamd was built and run under Cygwin, and SPAMD_HOST in the
Windows test command shell was set to localhost.

Building and testing a dual Cygwin/Windows system
-------------------------------------------------

To build such a combined setup, first install SpamAssassin under Cygwin
by unpacking the source files into some directory, for example,
/usr/local/src/spamassassin, then in a Cygwin bash shell

 cd /usr/local/src/spamassassin
 perl Makefile.PL
 make
 make test
 make install

This assumes that you have already installed perl and all necessary perl
modules as described elsewhere in the SpamAssassin install
documentation.

Now that you have a working SpamAssassin under Cygwin you can use that
to test the spamc that you will build under Windows.

Building the Windows version
----------------------------

Unpack the SpamAssassin source tree into a different directory than you
used for building the Cygwin version, for example C:\spamassassin\.

Start up a Widows command shell. In the shell, set the environment
variable SPAMD_HOST to be the host name or ip address of the spamd
server to be used for testing. In this case you would use the command

 set SPAMD_HOST=localhost

To use a port other than the deault testing port 48373, set the
environment variable SPAMD_PORT. To use SSL during the test,

 set SC_ARGS=-S

Make sure that the environment is set up for running VC++. In VC++ 6.0
there is a batch file created during installation that sets the
environment. In a typical installation that would be found at

 "\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"

Microsoft Visual C++ Toolkit 2003 has a similar batch file which has to
be changed to include the appropriate paths for the Platform SDK
installation.

Then use the commands

 cd \spamasassin
 perl Makefile.PL BUILD_SPAMC=yes
 nmake

In a Cygwin bash shell, start up spamd with the command line

 spamd -D -x -p 48373

You should add the -L option if you are not running network
tests. Specify the various SSL options or a different port if you set
SC_ARGS to the corresponding spamc options or if you set SPAMD_PORT to a
value other than the default.

Back in the Windows command shell, enter the commands

 nmake test
 nmake install

That's it. You should now have two working versions of SpamAssassin, one
under Cygwin and one under Windows.
