Apache CouchDB INSTALL.Windows
==============================

For a high-level guide to Microsoft Windows.

Troubleshooting
---------------

There is a troubleshooting guide:

    http://wiki.apache.org/couchdb/Troubleshooting

There is a wiki for general documentation:

    http://wiki.apache.org/couchdb/

And some Windows-specific tips:

    http://wiki.apache.org/couchdb/Quirks_on_Windows

There are collection of friendly mailing lists:

    http://couchdb.apache.org/community/lists.html

Please work through these in order if you experience any problems.

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

You will need the following installed:

 * Erlang OTP (>=14B01, <R17)    (http://erlang.org/)
 * ICU        (>=4.*)            (http://icu-project.org/)
 * OpenSSL    (>=0.9.8r)         (http://www.openssl.org/)
 * Mozilla SpiderMonkey (=1.8.5) (http://www.mozilla.org/js/spidermonkey/)
 * libcurl    (>=7.20)           (http://curl.haxx.se/libcurl/)
 * Cygwin                        (http://www.cygwin.com/)
 * Microsoft SDK 7.0 or 7.1      (http://www.microsoft.com/en-us/download/details.aspx?id=8279)
 * Python (>= 2.68) for docs     (http://python.org/)
 * Python Sphinx (>=1.1.3)       (http://pypi.python.org/pypi/Sphinx)

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

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

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

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

 * All dependent libraries should be built with the same version of
   microsoft SDK.

 * Do not try to link against libraries built with, or included in,
   Cygwin or MingW. They are not compatible with the Erlang/OTP or CouchDB
   build scripts.

 * ICU version 4.6 and later will build cleanly using MSBuild.

 * Python and Sphinx are optional for building the online documentation.
   Use cygwin-provided Python and install Sphinx via easy_install or pip.
   Further information is here http://pypi.python.org/pypi/setuptools#id4

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.

    * The `which nmake` command points to the Microsoft make 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, built statically from source. Use
exactly the same version as required by the Erlang/OTP build process.

However, you can skip the GUI tools by running:

   echo "skipping gs" > lib/gs/SKIP

   echo "skipping ic" > lib/ic/SKIP

   echo "skipping jinterface" > lib/jinterface/SKIP

Follow the rest of the Erlang instructions as described.

After running:

   ./otp_build release -a

You should run:

   ./release/win32/Install.exe -s

This will set up the release/win32/bin directory correctly. The CouchDB
installation scripts currently write their data directly into this
location.

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.5/bin:$PATH

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

Relax.

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

Note that `win32-curl` is only required if you wish to run the developer
tests.

The documentation step may be skipped using `--disable-docs` if you wish.

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 \
        --disable-init \
        --disable-launchd \
        --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.

To build the .exe installer package, you should run:

    make dist

Alternatively, you may run CouchDB directly from the build tree, but
to avoid any contamination do not run `make dist` after this.

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 verification tests in Firefox.
