Building on Win32.

Building libical on Windows is a different process than building it on the other platforms: Instead of autogenerating makefiles using the autoconf/automake/make tools, Microsoft project files (.dsp) are used.

Here are the requirements and steps to build libical on the Win32 platform.

Software Requirements
---------------------

The following softwares need to be installed for a standard Windows build:

- Microsoft Visual C++ 6.0 or higher (only tested on 6.0 as of today).

- GNU Tools for Microsoft Windows (the cygwin toolkit).
 cygwin is a UNIX-like environment for Windows, free from Red Hat. libical uses a few set of cygwin packages, which must be installed.
 Go to http://www.cygwin.com and follow the installation instructions. The cygwin installer wizard runs as a Windows program. One page of the wizard presents an outline view of categories and packages. Here is a list of the cygwin packages needed for building libical:
 . base --> ash :         Unix-like command line interpreter shell.
 . base --> grep:         GNU grep, egrep and fgrep
 . interpreters --> perl: A scripting language used to autogenerate some header files.

Environment Variables
---------------------

Visual C++ needs to be able to launch the cygwin tools. To do so, you can either:
- add the path to the cygwin tools (by default c:\cygwin\bin) to your global or user Path enviroment variable,
- or, in Visual C++ go to Tools --> Options --> Directories --> Show directories for Executable files and add the path to the cygwin tools (by default c:\cygwin\bin).

Building the library
--------------------
You need to build each subcomponent of libical one by one in the following order:
 . src/libical/libical.dsp
 . src/libicalss/libicalss.dsp
 . src/libicalvcal/libicalvcal.dsp

Testing your build
------------------
libical comes with 2 regression test programs:
 . src/test/recur.dsp
 . src/test/regression.dsp

Building those and running them (from the command line or from VC++) is probably a good idea to check that your build is OK. The results are pretty much self explanatory.
Of course, running the regression tests becomes mandatory if you're planning on submitting a change.


Using the library
-----------------
By default, the library is created as a static library under src/libical/Debug/libical.lib (Debug version). You can also create a Release version which will be put under src/libical/Release/libical.lib.

The header file ical.h is autogenerated by the build process and should be located under src/libical/ical.h.

The library is created using the (Debug) Multithreaded DLL run-time library option. Be sure that you have the same setting in your application (Project --> Settings --> C/C++ --> Code Generation) or things will start to break.
 The symptoms of this problem are link time errors like:
    MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in
LIBCMTD.lib(dbgheap.obj)
    MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in
LIBCMTD.lib(dbgheap.obj)
    MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in
LIBCMTD.lib(strncmp.obj)

Alternatively, you can alter the libical .dsp files and recompile the library.

