summaryrefslogtreecommitdiff
path: root/qpid/cpp/INSTALL
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/INSTALL')
-rw-r--r--qpid/cpp/INSTALL327
1 files changed, 327 insertions, 0 deletions
diff --git a/qpid/cpp/INSTALL b/qpid/cpp/INSTALL
new file mode 100644
index 0000000000..717c9b0908
--- /dev/null
+++ b/qpid/cpp/INSTALL
@@ -0,0 +1,327 @@
+ 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.
+
+
+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 cpp distribution directory (<qpid>/cpp), 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
+=====================================
+To get the source code from the subversion repository (trunk) do:
+
+ # svn checkout http://svn.apache.org/repos/asf/qpid/trunk/qpid/.
+
+To build, cd to <qpid>/cpp subdirectory and then follow the instructions for building
+from a Source Distribution in step (2).
+
+
+4. Tests
+========
+See <qpid>/cpp/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 AMQP_1.0 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:
+* 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 nss-devel nspr-devel
+
+For the XML Exchange, include:
+
+ # yum install xqilla-devel xerces-c-devel
+
+Optional ruby binding support include:
+ # yum install ruby ruby-devel swig
+
+Optional legacystore store module.
+# 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
+