		Installing Qpid/C++
		===================

Table of Contents
=================
1. Introduction
2. How to Build and Install Qpid from a Source Distribution
3. Building a Repository Working Copy
4. Tests

5. Prerequisites
   5.1. What Prerequisite Libraries to Install
   5.2. How to Install Prerequisite Libraries
      5.2.1. Using Package Management Tools
      5.2.2. Building Prerequisites From Source
   5.3. Important Environment Variable Settings


1. Introduction
===============
This document describes how to build the Qpid/C++ broker and client, either
from a checkout of the source or from a source distribution, on Linux/UNIX.

Please see INSTALL-WINDOWS for information on building on Windows.

There are a number of prerequisite libraries that may need to be installed.
If this is the first time that you have built Qpid please check the prerequisites
section 5. below and/or check the output from running cmake for any errors.

As of Qpid 0.26 cmake (versions 2.6 or 2.8) is the only way to build Qpid.

As an alternative to building from source, you can if you like use the
packages available for some OS distributions.

 * Fedora packages: https://apps.fedoraproject.org/packages/qpid-cpp
 * Ubuntu packages: https://launchpad.net/~qpid

2. How to Build and Install Qpid from a Source Distribution
===========================================================
It is strongly recommended that you use a separate build directory and do not try to
build in the source directory. You may use a build directory in any convenient place.
These instructions use a build directory inside the source tree but this isn't essential.

In the distribution directory, build the code with:

 # mkdir bld       # This is just a suggested name for the build directory
 # cd bld
 # cmake ..        # ".." is the path to the distribution directory

 # make all

To run the tests:

 # make test

To install (you may need to be root/sudo to do this):

 # make install

To uninstall (you may need to be root/sudo to do this):

 # make uninstall


The daemon and client API may be built separately if so desired:

 # make qpidbroker

 # make qpidclient

The available make targets can be listed using:

 # make help


You can have multiple builds which use the same working copy with different
configuration. For example you can do the following to build twice, once for
debug, the other with optimization:

 # mkdir BLD-dbg BLD-opt
 # (cd BLD-dbg; cmake -DCMAKE_BUILD_TYPE=Debug .. && make )
 # (cd BLD-opt; cmake -DCMAKE_BUILD_TYPE=Release .. && make)

Note that there are 4 different predefined cmake build types:
Debug, Release, MinSizeRel, DebWithRelInfo: They each correspond to a different
set of build flags for respectively debug; release; minimum size release; release
with debug information.

To see and edit all the available cmake options:

 # cmake-gui ..    # ".." is the path to the source directory

Or if you have only have a command line environment available

 # ccmake ..       # ".." is the path to the source directory

2.1 Building as C++11 (Experimental)
====================================
Currently the Qpid project uses C++ that conforms to the C++03 standard, as currently
this is the C++ standard that is supported the most widely, so any new code must also
compile as C++03. As an experiment (and to support a few extra platforms) the Qpid code
will also now build as C++11.

This will work under both gcc and clang. However when compiled under gcc you will hit some
depracation watrnings which will need to be suppressed.

To compile as C++11 under gcc configure using cmake like this:

 # cmake -DCMAKE_CXX_FLAGS="-std=c++11 -Wno-error=deprecated-declarations" ..

To compile as C++11 under clang configure using cmake like this:

 # CXX=clang++ CC=clang cmake -DBUILD_PROBES=no -DCMAKE_CXX_FLAGS=-std=c++11 ..

2.2 Building with the clang C++ compiler
========================================
Qpid will build with the clang compiler as well as gcc. When compiling using clang the probe
code will not compile so will need to be turned off.

To compile using clang configure with cmake as follows:

 # CXX=clang++ CC=clang cmake -DBUILD_PROBES=no ..

2.3 Building on FreeBSD
=======================
Qpid will build (and run) under FreeBSD using the clang compiler, compiling on FreeBSD using gcc
is not being worked on, and indeed from FreeBSD 10 and onwards the system compiler is clang.

Under FreeBSD 10 the C++ standard library is provided by libc++ rather than libstdc++ (which is the
norm under Linux). There seems to be a bug in boost::lexical_cast which exhibits when compiling Qpid
under C++03 with libc++ but not C++11 with libc++. This means that you have to compile Qpid as C++11
under FreeBSD 10.

 # cmake -DCMAKE_CXX_FLAGS=-std=c++11 -DBUILD_BINDING_PERL=no ..

It is not necessary to specify CXX=clang++ because it is the system compiler under FreeBSD 10;
similarly we don't try to build the probe code on FreeBSD at this point because it doesn't work
there yet, so it doesn't need to be explicitly turned off.

We turn building the PERL bindings off because the perl header file is incompatible with C++11 currently.

If you want to use the ports version of cyrus-sasl then you should also add:

 -DCMAKE_REQUIRED_FLAGS=-L/usr/local/lib -DCMAKE_REQUIRED_INCLUDES=/usr/local/include

Which will allow cmake to find libraries installed in /usr/local (which is where cyrus-sasl gets
installed by ports).

2.4 Building on AIX
===================
Qpid has been tested on AIX 7.1 with XL C++ 13.1 and Boost 1.55.0. The
thread-using variant of the compiler must be used but it isn't the default
picked up by cmake. Thus, the compiler must be specified at cmake time.
For example (assuming PATH includes the compiler binaries):

 # CXX=xlC_r CC=cc_r cmake ..

Warnings from Boost header files are expected and can be ignored.

It is normal to see (lots of) multiply-defined symbol warnings when linking
the shared libraries built as part of Qpid.

The mktemp package must be installed separately in order to execute the
Qpid test suite.

3. Building a Repository Working Copy
=====================================
Developers interested in building the main branch, e.g to test ahead of release, can
get the source code from the git repository using:

 # git clone https://gitbox.apache.org/repos/asf/qpid-cpp.git

To build, cd to the new qpid-cpp directory and then follow the instructions for building
from a Source Distribution in step (2).


4. Tests
========
See src/tests/README.txt for details.


======================================================================================


5. Prerequisites
================
We prefer to avoid spending time accommodating older versions of these
packages, so please make sure that you have the latest stable versions.
Known version numbers for a succesful build are given in brackets, take
these as a recommended minimum version.


5.1. What Prerequisite Libraries to Install
===========================================
The following libraries and header files must be installed to build
a source distribution:
 * boost      <http://www.boost.org>                    (1.41) (*)
 * libuuid    <http://kernel.org/~kzak/util-linux/>     (2.19)
 * pkgconfig  <http://pkgconfig.freedesktop.org/wiki/>  (0.21)

(*) Boost 1.33 will also work.

Optional support for AMQP 1.0 requires (see docs/amqp-1.0.txt for details):
* Qpid proton-c <http://qpid.apache.org/proton>         (0.5)
Note: If Proton is installed in a non-standard location, there are two ways to locate it:
1. Recommended: use proton 0.7 or later and use the same install prefix
   for both Proton and Qpid.
2. Using pkg-config: set the PKG_CONFIG_PATH environment variable to
   <proton-prefix>/lib[64]/pkgconfig before running cmake.

Optional XML exchange requires:
 * xqilla  <http://xqilla.sourceforge.net/HomePage>     (2.0.0)
 * xerces-c <http://xerces.apache.org/xerces-c/>        (2.7.0)

Optional SSL support requires (see docs/ssl.txt for details):
* nss <http://www.mozilla.org/projects/security/pki/nss/>
* nspr <http://www.mozilla.org/projects/nspr/>

Optional RDMA transport protocol requires:
* libibverbs <http://www.openfabrics.org/>              (1.1)
* librdmacm  <http://www.openfabrics.org/>              (1.0)

Optional binding support for ruby requires:
* ruby and ruby devel <http://www.ruby-lang.org/en/>
* swig <http://www.swig.org/>

Qpid has been built using the GNU C++ compiler:
 * gcc     <http://gcc.gnu.org/>            		(4.1.2)

If you want to build directly from the SVN repository you will need
all of the above plus:

 * Cmake      <http://www.cmake.org/>                   (2.6.4)
 * GNU make   <http://www.gnu.org/software/make/>      	(3.8.0)
 * help2man   <http://www.gnu.org/software/help2man/>  	(1.36.4)
 * doxygen    <ftp://ftp.stack.nl/pub/users/dimitri/>  	(1.5.1)
 * graphviz   <http://www.graphviz.org/>               	(2.12)
 * ruby 1.8   <http://www.ruby-lang.org>               	(1.8.4)
 * python 2.x <http://www.python.org>                   (2.4.3)

NOTE: make sure to install the related '-devel' packages also!!!!

NOTE: Python 3.x is known to NOT work - please use 2.7 or earlier.

To build the QMF (Qpid Management Framework) bindings for Ruby and Python,
the following must also be installed:

 * ruby-devel
 * python-devel
 * swig       <http://www.swig.org>                     (1.3.35)

UUID problems:

In some earlier Linux releases (such as Fedora 11), the uuid/uuid.h
file is located in the e2fsprogs-devel package instead of
libuuid-devel. If you are using an older Linux release and run into a
problem during configure in which uuid.h cannot be found, install the
e2fsprogs-devel package.

5.2. How to Install Prerequisite Libraries
==========================================

5.2.1. Using Package Management Tools
=====================================
On linux most packages can be installed using your distribution's
package management tool. For example on Fedora:

 # yum install cmake boost-devel libuuid-devel pkgconfig gcc-c++ make ruby help2man doxygen graphviz

For SASL and SSL, include:

 # yum install cyrus-sasl-devel cyrus-sasl-md5 cyrus-sasl-plain nss-devel nspr-devel

For the XML exchange, include:

 # yum install xqilla-devel xerces-c-devel

For the RDMA transport, include:

 # yum install libibverbs-devel librdmacm-devel

For the Ruby binding, include:

 # yum install ruby ruby-devel swig

For the legacy store implementation, include:

 # yum install libdb-cxx-devel libaio-devel

Follow the manual installation instruction below for any packages not
available through your distributions packaging tool.

5.2.2. Building Prerequisites From Source
=========================================
Required dependencies can be installed and built from source distributions.
It is recommended that you create a directory to install them to, for example,
~/qpid-tools.

 To build and install the dependency packages:

 1. Unzip and untar them and cd to the untared directory.
 2. do:
  # ./configure --prefix=~/qpid-tools
  # make install

The exception is boost.

boost
=====
 1. Unpack boost-jam.
 2. Add bjam in the unpacked directory to your path.
 3. Unpack boost and cd to the boost untarred directory.
 4. do:

  # bjam toolset=gcc variant=release threading=single link=shared \
    --layout=system --prefix=~/qpid-tools install


5.3. Important Environment Variable Settings
============================================
Note that the following is generally not necessary if dependency packages have been
installed using Package Management Tools such as yum or apt.

Ensure that all the build tools are available on your path, when they are
manually installed to non-standard locations. For example:

 # export PATH=~/qpid-tools/bin:$PATH

Ensure that pkg-config is set up correctly. This is especially important
if you have built the dependencies from source, as they may not be installed
in the default system location. For example:

 # export PKG_CONFIG_PATH=~/qpid-tools/lib/pkgconfig:/usr/local/lib/pkgconfig
 # export PKG_CONFIG=~/qpid-tools/bin/pkg-config

Ensure that the boost libraries are made available on the gcc library path.
For example:

 # export CXXFLAGS=-I~/qpid-tools/include/boost-1_33_1
