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                        (http://icu.sourceforge.net/)
 * OpenSSL                    (http://www.openssl.org/)
 * Mozilla SpiderMonkey (1.8) (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 makes use of 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+.
