Apache CouchDB README.Windows
==============================

For a high-level guide to Microsoft Windows.

Dependencies
------------

You will need the following installed:

 * Erlang OTP (=14B01)        (http://erlang.org/)
 * ICU        (=4.4.*)         (http://icu.sourceforge.net/)
 * OpenSSL                    (http://www.openssl.org/)
 * Mozilla SpiderMonkey (1.7) (http://www.mozilla.org/js/spidermonkey/)
 * libcurl                    (http://curl.haxx.se/libcurl/)
 * Cygwin                     (http://www.cygwin.com/)
 * Visual Studio 2008         (http://msdn.microsoft.com/en-gb/vstudio/default.aspx)

General Notes
-------------

 * When installing Erlang, you must build it from source.

   The CouchDB build requires a number of the Erlang build scripts.

 * When installing ICU, select the binaries built with Visual Studio 2008.

 * When installing Cygwin, be sure to select all the `development` tools.

 * When installing libcurl, be sure to install by hand.

   The Cygwin binaries are incompatible and will not work with Erlang.

Setting Up Cygwin
-----------------

Before starting any Cygwin terminals, run:

    set CYGWIN=nontsec

To set up your environment, run:

    [VS_BIN]/vcvars32.bat

Replace [VS_BIN] with the path to your Visual Studio `bin` directory.

You must check that:

    * The `which link` command points to the Microsoft linker.

    * The `which cl` command points to the Microsoft compiler.

    * The `which mc` command points to the Microsoft message compiler.

    * The `which mt` command points to the Microsoft manifest tool.

If you do not do this, the build may fail due to Cygwin ones found in `/usr/bin`
being used instead.

Building Erlang
---------------

You must include Win32 OpenSSL.

However, you can skip the GUI tools by running:

   echo "skipping gs" > lib/gs/SKIP

   echo "skipping ic" > lib/ic/SKIP

Follow the rest of the Erlang instructions as described.

After running:

   ./otp_build release -a

You should run:

   ./release/win32/Install.exe

This will set up the release/win32/bin directory correctly.

To set up your environment for building CouchDB, run:

    eval `./otp_build env_win32`

To set up the `ERL_TOP` environment variable, run:

    export ERL_TOP=[ERL_TOP]

Replace `[ERL_TOP]` with the Erlang source directory name.

Remember to use `/cygdrive/c/` instead of `c:/` as the directory prefix.

To set up your path, run:

    export PATH=$ERL_TOP/release/win32/erts-5.8.2/bin:$PATH

If everything was successful, you should be ready to build CouchDB.

Relax.

Building CouchDB
----------------

Once you have satisfied the dependencies you should run:

    ./configure \
        --with-js-include=/cygdrive/c/path_to_spidermonkey_include \
        --with-js-lib=/cygdrive/c/path_to_spidermonkey_lib \
        --with-win32-icu-binaries=/cygdrive/c/path_to_icu_binaries_root \
        --with-erlang=$ERL_TOP/release/win32/usr/include \
        --with-win32-curl=/cygdrive/c/path/to/curl/root/directory \
        --with-openssl-bin-dir=/cygdrive/c/openssl/bin \
        --with-msvc-redist-dir=/cygdrive/c/dir/with/vcredist_platform_executable \
        --prefix=$ERL_TOP/release/win32

This command could take a while to complete.

If everything was successful you should see the following message:

    You have configured Apache CouchDB, time to relax.

Relax.

To install CouchDB you should run:

    make install

If everything was successful you should see the following message:

    You have installed Apache CouchDB, time to relax.

Relax.

First Run
---------

You can start the CouchDB server by running:

    $ERL_TOP/release/win32/bin/couchdb.bat

When CouchDB starts it should eventually display the following message:

    Apache CouchDB has started, time to relax.

Relax.

To check that everything has worked, point your web browser to:

    http://127.0.0.1:5984/_utils/index.html

From here you should run the test suite in either Firefox 3.6+ or Safari 4+.
