--------------------------------------------------------------------------
DECAF CPP Library
--------------------------------------------------------------------------

Decaf is a CPP based SDK that provides classes simmilar to that of the
Java SDK.


1 Dependencies
--------------------------------------------------------------------------

1.1 libuuid
--------------------------------------------------------------------------

The build requires the *libuuid* library that is part of the e2fsprogs
package and is available from http://e2fsprogs.sourceforge.net/ which is
not always installed by default.

On Fedora, type the following:

  sudo yum install e2fsprogs-devel

On Debian/Ubuntu, type the following:

  sudo apt-get install uuid-dev


1.2 CppUnit
--------------------------------------------------------------------------

The package contains a complete set of CppUnit tests.  In order for you to
build an run the tests, you will need to download and install the CppUnit
suite.  See http://cppunit.sourceforge.net/cppunit-wiki

On Fedora, type the following:

  sudo yum install cppunit

On Debian/Ubuntu, type the following:

  sudo apt-get install libcppunit-dev

Make sure that the paths to the installed CppUnit library and includes are
visible in your current shell before you try building the tests.

Windows users will need to build the CppUnit library using the CPPUnit
MSVC project files. A discussion of the build process can be found
on the CPPUnit wiki under
http://cppunit.sourceforge.net/cppunit-wiki/BuildingCppUnit1 this covers
both MSVC along with many other platforms and tool suites.


1.3 GNU Build System (for building on Unix/Linux/OS X/Cygwin)
--------------------------------------------------------------------------

To Generate the ./configure script use to create the Makefiles, you need
the following software installed:

Tool        Recommended Version
-------------------------------
autoconf    >= 2.59
automake    >= 1.9.6
libtool     >= 1.5.22

On Debian/Ubuntu, multiple versions of autoconf and automake are available
in separate packages. If you have multiple versions of autoconf or automake
installed on your system, you may have to configure the versions to use
using /usr/sbin/update-alternatives.

2 Building on Unix/Linux/OS X/Cygwin
--------------------------------------------------------------------------

This assumes you have all of the project dependencies installed.  We're
now ready to create the configure script.  To do this, run:

  ./autogen.sh

    -----------------------------------------------------------------------
    |NOTE: You may see the following warnings when running this command:  |
    |                                                                     |
    |  src/test-integration/Makefile.am:44: `CXXFLAGS' is a user variable,|
    |you should not override it;                                          |
    |  src/test-integration/Makefile.am:44: use `AM_CXXFLAGS' instead.    |
    |  src/test/Makefile.am:104: `CXXFLAGS' is a user variable, you       |
    |should not override it;                                              |
    |  src/test/Makefile.am:104: use `AM_CXXFLAGS' instead.               |
    |                                                                     |
    |These can be ignored.  We override CXXFLAGS in the makefiles for     |
    |the unit and integration tests in order to suppress compiler         |
    |warnings.                                                            |
    -----------------------------------------------------------------------

This should be run the first time and anytime you change configure.ac or
any of the Makefile.am files.

    -----------------------------------------------------------------------
    |Solaris 10 Note:  CppUnit might not build until you correct the file |
    |  libstdc++.la to contain the correct data, see this discussion:     |
    |  http://forum.sun.com/jive/thread.jspa?threadID=73150               |
    -----------------------------------------------------------------------

The configure script will customize the way the software is built and
installed into your system along with detecting the available libraries
that have been installed.  To use the default configuration just run:

  ./configure

For more help on how to customize the build configuration, run:

  ./configure --help

Once the configure script has run successfully, you are ready to build.
Run:

  make

This will build all of the core ActiveMQ CPP source code.  To build and
install the code into the system directories, run:

  make install

You will have to become the superuser in order to be able to install the
files.

3 Doxygen
--------------------------------------------------------------------------

To generate the doxygen documentation for the project, just run:

  make doxygen-run


4 Running Tests
--------------------------------------------------------------------------

4.1 Unit Tests
--------------------------------------------------------------------------
In order to build and run the suite of unit tests, run:

  make check

This will verify that the library is functioning correctly on the target
platform. In addition, it will generate the integration tests binary.

4.2 Integration Tests
--------------------------------------------------------------------------
The library also contains a set of tests that are run against a real AMQ
broker.  These allow you to validate this distribution of ActiveMQ CPP
against your broker.  Running these without a broker will result in failed
tests.  The tests currently hard-code the broker url to be
tcp://localhost:61613 for stomp and tcp://localhost:61616 for openwire.

The integration tests are built via "make check".  To run them, first
start a broker and then

  cd src/test-integration
  ./activemq-test-integration

This will take quite some time to complete, so be patient.

5 Example
--------------------------------------------------------------------------
There is an example application that ships with the distribution in
src/examples.   The example is compiled by default with the "make"
command, but can easily be compiled manually using the command:

  g++ -o main -pthread -I ../main main.cpp ../../out/libactivemq-cpp-2_0.a -luuid

6 Notes for Windows users
--------------------------------------------------------------------------
We support using the GNU compiler on Windows, using the Cygwin package.
However we also support using the MSVC compiler on Windows.

There are a couple or things that you will need to setup to ensure that
the MSVC compile succeeds.

* You need to download and install the Platform SDK if you don't have it
  installed already.

* Ensure that the path to you MSVC install is set in the PATH env variable.
  You can test this by typing cl.exe at the command line, if you get an
  error complaining that its not found, then you'll need to fix your PATH.
* Set the INCLUDE env variable to include the path to your MSVC includes,
  and the platform SDK includes. For example:

    INCLUDE = D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft Platform SDK\Include\*

* Set the LIB env variable to include the path to your MSVC libs, and the
  Platform SDK libs. For example:

    LIB = D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft Platform SDK\Lib

* The Project files reference the CPPUnit libraries for the Integration and
  Unit tests builds. In order for these to build correctly you must
  either place the CPPUnit libraries in a directory listed in the project
  settings, or add a new location for your install of CPPUnit.

