The most recent version of the build instructions can always be found
linked from the RDKit wiki: 
http://code.google.com/p/rdkit/wiki/GettingStarted

The instructions below are for the Q2 2011 release and subsequent releases.

= Building on Linux or the Mac =

== Getting Ready ==
 * Required packages:

   * cmake. You need at least version 2.6. http://www.cmake.org if
     your linux distribution doesn't have an appropriate
     package. _Update: It seems that v2.8 is a better bet than
     v2.6. It might be worth compiling your own copy of v2.8 even if
     v2.6 is already installed._

   * The following are required if you are planning on using the Python wrappers:

      * The python headers. This probably means that you need to
        install the python-dev package (or whatever it's called) for
        your linux distribution.

      * sqlite3. You also need the shared libraries. This may require
        that you install a sqlite3-dev package.

      * You need to have numpy (http://www.scipy.org/NumPy) installed.

 * Optional packages

   * If you would like to install the RDKit InChI support (first
     available in the Q2 2011 release), follow the instructions in
     $RDBASE/External/INCHI-API to get a copy of the InChI source and
     put it in the appropriate place.

== Installing Boost ==

  * *NOTE*: if your linux distribution has a boost-devel package
     including the python and regex libraries, you can use that and
     save yourself the steps below. _Update: if you *do* have a
     version of the boost libraries pre-installed and you want to use
     your own version, be careful when you build the code. We've seen
     at least one example on a Fedora system where cmake compiled
     using a user-installed version of boost and then linked against
     the system version. This led to segmentation faults. There is a
     workaround for this below in the
     [#Frequently_Encountered_Problems Frequently Encountered
     Problems] section._

  * download the boost source distribution from [http://www.boost.org
    the boost web site]

  * extract the source somewhere on your machine
    (e.g. `/usr/local/src/boost_1_45_0`)

  * build the required boost libraries:

    * `cd $BOOST`

    * If you want to use the python wrappers: `./bootstrap.sh --with-libraries=python,regex`

    * If not using the python wrappers: `./bootstrap.sh --with-libraries=regex`

    * Building on 32 bit systems: `./bjam install`

    * Building on 64 bit systems: `./bjam address-model=64 cflags=-fPIC cxxflags=-fPIC install`

    If you have any problems with this step, check the boost
    [http://www.boost.org/more/getting_started/unix-variants.html
    installation instructions].

== Building the Code ==
  * follow the Installing Boost instructions above.

  * environment variables:

    * RDBASE: the root directory of the RDKit distribution (e.g. ~/RDKit)

    * *Linux:* LD_LIBRARY_PATH: make sure it includes $RDBASE/lib and
       wherever the boost shared libraries were installed

    * *Mac:* DYLD_LIBRARY_PATH: make sure it includes $RDBASE/lib and
       wherever the boost shared libraries were installed

    * The following are required if you are planning on using the
      * Python wrappers: PYTHONPATH: make sure it includes $RDBASE

  * Building: 

    * cd to $RDBASE

    * `mkdir build`

    * `cd build`

    * `cmake ..` : See the section below on configuring the build if
      you need to specify a non-default version of python or if you
      have boost in a non-standard location

    * `make` : this builds all libraries, regression tests, and
      wrappers (by default).

    * `make install`

See below for a list of [#Frequently_Encountered_Problems frequently
encountered problems] and solutions.

== Testing the Build (optional, but recommended) ==
  * cd to $RDBASE/build and do `ctest`

  * you're done!

== Advanced ==

=== Specifying an alternate Boost installation ===

You need to tell cmake where to find the boost libraries and header files:

If you have put boost in /opt/local, the cmake invocation would look like:

{{{cmake -DBOOST_ROOT=/opt/local ..}}}

=== Specifying an alternate Python installation ===

You need to tell cmake where to find the python library it should link
against and the python header files.

Here's a sample command line:

{{{cmake -D PYTHON_LIBRARY=/usr/lib/python2.5/config/libpython2.5.a -D PYTHON_INCLUDE_DIR=/usr/include/python2.5/ -D PYTHON_EXECUTABLE=/usr/bin/python ..}}}

The `PYTHON_EXECUTABLE` part is optional if the correct python is the
first version in your PATH.

=== Disabling the Python wrappers ==

You can completely disable building of the python wrappers by setting
the configuration variable RDK_BUILD_PYTHON_WRAPPERS to nil:

{{{cmake -D RDK_BUILD_PYTHON_WRAPPERS= ..}}}

=== Building the Java wrappers ===

*Additional Requirements*

  * SWIG v2.0.x: http://www.swig.org

  * Junit: get a copy of the junit .jar file from
    https://github.com/KentBeck/junit/downloads and put it in the
    directory `$RDBASE/External/java_lib` (you will need to create the
    directory) and rename it to junit.jar.

*Building*

  * When you invoke cmake add `-D RDK_BUILD_SWIG_WRAPPERS=ON` to the
    arguments. For example: {{{cmake -D RDK_BUILD_SWIG_WRAPPERS=ON ..}}}

  * Build and install normally using `make`. The directory
    `$RDBASE/Code/JavaWrappers/gmwrapper` will contain the three
    required files: libGraphMolWrap.so (libGraphMolWrap.jnilib on the
    Mac), org.RDKit.jar, and org.RDKitDoc.jar.

*Using the wrappers*

To use the wrappers, the three files need to be in the same directory,
and that should be on your CLASSPATH and in the java.library.path. An
example using jython:

{{{
% CLASSPATH=$CLASSPATH:$RDBASE/Code/JavaWrappers/gmwrapper/org.RDKit.jar; jython -Djava.library.path=$RDBASE/Code/JavaWrappers/gmwrapper
Jython 2.2.1 on java1.6.0_20
Type "copyright", "credits" or "license" for more information.
>>> from org.RDKit import *
>>> from java import lang
>>> lang.System.loadLibrary('GraphMolWrap')
>>> m = RWMol.MolFromSmiles('c1ccccc1')
>>> m.getNumAtoms()
6L
}}}


== Frequently Encountered Problems ==

In each case I've replaced specific pieces of the path with `...`.

*Problem:*
{{{
Linking CXX shared library libSLNParse.so
/usr/bin/ld: .../libboost_regex.a(cpp_regex_traits.o): relocation R_X86_64_32S against `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage' can not be used when making a shared object; recompile with -fPIC
.../libboost_regex.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [Code/GraphMol/SLNParse/libSLNParse.so] Error 1
make[1]: *** [Code/GraphMol/SLNParse/CMakeFiles/SLNParse.dir/all] Error 2
make: *** [all] Error 2
}}}

*Solution:*

Add this to the arguments when you call cmake:
`-DBoost_USE_STATIC_LIBS=OFF`

[http://www.mail-archive.com/rdkit-discuss@lists.sourceforge.net/msg01119.html more information here]

---- 

*Problem:*

{{{
 .../Code/GraphMol/Wrap/EditableMol.cpp:114:   instantiated from here
 .../boost/type_traits/detail/cv_traits_impl.hpp:37: internal compiler error: in make_rtl_for_nonlocal_decl, at cp/decl.c:5067
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccgSaXge.out file, please attach this to your bugreport.
make[2]: *** [Code/GraphMol/Wrap/CMakeFiles/rdchem.dir/EditableMol.cpp.o] Error 1
make[1]: *** [Code/GraphMol/Wrap/CMakeFiles/rdchem.dir/all] Error 2
make: *** [all] Error 2
}}}

*Solution:*

Add `#define BOOST_PYTHON_NO_PY_SIGNATURES` at the top of
`Code/GraphMol/Wrap/EditableMol.cpp`

[http://www.mail-archive.com/rdkit-discuss@lists.sourceforge.net/msg01178.html
more information here]


---- 

*Problem:*

Your system has a version of boost installed in /usr/lib, but you
would like to force the RDKit to use a more recent one.

*Solution:*

This can be solved by using cmake version 2.8.3 (or more recent) and
providing the `-D Boost_NO_SYSTEM_PATHS=ON` argument :

{{{
cmake -D BOOST_ROOT=/usr/local -D Boost_NO_SYSTEM_PATHS=ON ..
}}}


#------------------------------------------------
= Building on Windows =
#------------------------------------------------

== Software to Install ==

  * Microsoft Visual C++ : The Express version has everything
    necessary and can be downloaded for free
    [http://www.microsoft.com/express/download/ from Microsoft]. This
    is a big installation and will take a while. The RDKit has been
    successfully built with all version of visual c++ since 6.0, so
    the current version of VC++ (2010 as of this writing) should be
    fine.

  * cmake : [http://www.cmake.org/cmake/resources/software.html cmake] should be installed.

  * python : [http://www.python.org/download python] should be installed

  * numpy : the
    [http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103
    current version of numpy] should be installed. It's fine to use
    the binary installer.

  * boost : download a copy of the current versions of the
    [http://www.boost.org/users/download/ boost source distribution
    and boost-Jam]. Both are available from the same link, be sure to
    get the `.ntx86.zip` file for boost-Jam.  Extract the source
    distribution (to, for example, c:\boost\boost_1_43_0) and copy the
    bjam.exe executable from the boost jam zip file to the same
    directory. *Note:* it is also possible to download and use a
    precompiled version of the boost libraries from
    http://www.boostpro.com/download/ . When you run the installer,
    the only binary libraries you need are python and regex.

  * a subversion client : _This is only necessary if you are planning
    on building development versions of the RDKit_. A command line
    client for subversion can be installed as part of the cygwin
    installation, or a very nice graphical client that integrates well
    with windows explorer can be downloaded from the
    [http://tortoisesvn.tigris.org/ Tortoise SVN home page].

 * Optional packages

   * If you would like to install the RDKit InChI support (first
     available in the Q2 2011 release), follow the instructions in
     $RDBASE/External/INCHI-API to get a copy of the InChI source and
     put it in the appropriate place.

== Setup and Preparation ==
This section assumes that python is installed in c:\Python26, that the
boost libraries have been extracted to c:\boost\boost_1_43_0, and that
you will build the RDKit from a directory named c:\RDKit. If any of
these conditions is not true, just change the corresponding paths.

_Notes_ :

    # If you install things in paths that have spaces in their names,
      be sure to use quotes properly in your environment variable
      definitions.

    # If you have more than one version of visual studio installed,
      the instructions below may not use the correct compiler. In this
      case you need to use a different `--toolset` argument to specify
      the version of the compiler used in all commands. Information
      for this situation is covered in
      [http://www.boost.org/doc/libs/1_43_0/more/getting_started/windows.html
      the boost.build documentation].

  * Make sure that boost builds properly by going to the directory
    c:\boost\boost_1_43_0 and executing the command: `.\bjam.exe
    --toolset=msvc --with-regex --with-python release install`. This
    may take a while, but it should finish without errors. _This step
    is not required if you are using a pre-compiled version of boost._

  * If you are planning on using a development version of the RDKit:
    get a copy of the current RDKit source using subversion. If you're
    using the command-line client the command is: `svn co
    http://rdkit.svn.sourceforge.net/svnroot/rdkit/trunk c:\RDKit`

  * If you are planning on using a released version of the RDKit : get
    a copy of the most recent release and extract it into the directory c:\RDKit 

  * Set the required environment variables (you can set this in cygwin
    or in windows. If you set them in windows, be sure to restart your
    cygwin window):

    * RDBASE = c:\RDKit *Note* this variable is optional for the Q3
      2010 release and later releases.

  * Make sure that the directory c:\Python26 is in your PATH

  * Make sure that the directory c:\RDKit\lib is in your PATH

  * Make sure that the directory c:\boost\lib is in your PATH _If you
    are using a precompiled version of boost, make sure the directory
    containing its DLLs is in your path._

  * Make sure that the directory c:\RDKit is in your PYTHONPATH

== Building the Code ==
  * follow the Installing Boost instructions above.

  * environment variables:

    * if you built your own version of boost and cmake complains about
      not being able to find it, define the environment variable
      BOOST_ROOT to point to the directory containing the boost
      source.

  * Configure the build:

    * Start the cmake gui

    * tell it where the source code is (e.g. c:/RDKit) and where to
      build the binaries (recommended: c:/RDKit/build)

    * click "Configure", select your compiler, and wait until the
      basic configuration is complete, you'll see a bunch of red lines
      entries in the main windows.

    * click "Configure" again

    * click "Generate"

  * Build:

    * open the solution file that cmake created
      (c:/RDKit/build/RDKit.sln) with Visual Studio.

    * check to be sure that you're building a Release build (for some
      reason CMake produces solution files that default to doing a
      Debug build)

    * build the "ALL_BUILD" target; this will take a while and
      generate warnings, but there should be no errors. *Note:* if you
      are building the SWIG wrappers you may get an error the first
      time you try to build them. If you see this error, try building
      ALL_BUILD again; it should work the second time.

    * build the "INSTALL" target

== Testing the Build (optional, but recommended) ==
  * cd to $RDBASE/build and run `ctest`

  * you're done!

== Additional notes ==

  * There is a bug in boost v1.44 that causes link errors related to
    boost-serialization on windows. To fix this you need to edit one
    of the boost header
    files. [https://groups.google.com/group/boost-list/msg/066897d43d9ca27a?hl=en
    This post] contains instructions on what needs to be done.

=======
# $Id: INSTALL 2230 2012-10-08 04:02:32Z glandrum $
# Copyright (C) 2008-2010 Greg Landrum

