Building with Visual C++, prerequises
=====================================
   This document describes how to compile, build and install curl and libcurl
   from sources using the Visual C++ build tool. To build with VC++, you will
   of course have to first install VC++. The minimum required version of
   VC is 6 (part of Visual Studio 6). However using a more recent version like
   2008 (vc9) is strongly recommended.

   VC++ is also part of the Windows Platform SDK. You do not have to install
   the full Visual Studio or Visual C++ if all you want is to build curl.

   The Platform SDK can be fetched here, freely:

    http://msdn.microsoft.com/en-us/windows/bb980924

   If you wish to support zlib, openssl, ssh2, you will have to download
   them separately and copy them to the deps directory as shown below:
   
   somedirectory\
    |_curl-src
    | |_winbuild
    |
    |_deps
      |_ lib
      |_ include
      |_ bin

   It is also possible to create the deps directory in some other random
   places and tell the Makefile its location using the WITH_DEVEL option.

Building with Visual C++
========================

Open a Visual Studio Command prompt or the SDK CMD shell.

    Using the CMD Shell:
     choose the right environment via the setenv command (see setenv /?)
     for the full list of options. setenv /xp /x86 /release for example.

    Using the Visual Studio command prompt Shell:
     Everything is already pre-configured by calling one of the command
     prompt.

Once you are in the console, go to the winbuild directory in the Curl 
sources:
    cd curl-src\winbuild

Then you can call nmake /f makefile with the desired options (see below).
The builds will be in the top src directory, builds\ directory, in 
a directory named using the options given to the nmake call.

nmake /f makefile.vc mode=<static or dll> <options>
where <options> is one or many of:
  VC=<6,7,8,9,10>              - VC versions
  WITH_DEVEL=<path>            - Paths for the development files (SSL, zlib, etc.)
                                 Default to sibbling directory deps: ../deps
                                 Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/
                                 Uncompress them into the deps folder.
  WITH_SSL=<dll or static>     - Enable OpenSSL support, DLL or static
  WITH_ZLIB=<dll or static>    - Enable ZLib support, DLL or static
  WITH_SSH2=<dll or static>    - Enable LIbSSH2 support, DLL or static
  USE_SSSPI=<yes or no>        - Enable SSPI support, default to yes
  USE_IPV6=<yes or no>         - Enable IPV6, default to yes
  DEBUG=<yes or no>            - Debug builds
  USE_IDN=<yes or no>          - Wheter or not to use IDN Windows APIs. Requires Windows Vista or later.
                                 or to install http://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815
  GEN_PDB=<yes or no>          - Generate Program Database (debug symbols release build)

