Apache CouchDB README.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.
