README

Proton Project
==============
Proton is a library for speaking AMQP, including:
+ The AMQP Messenger API, a simple but powerful interface to send and receive
messages over AMQP.
+ The AMQP Protocol Engine, a succinct encapsulation of the full
AMQP protocol machinery.
Proton is designed for maximum embeddability:
+ minimal dependencies
+ minimal assumptions about application threading model
Proton is designed to scale up and down:
+ transparently supports both simple peer to peer messaging and complex
globally federated topologies
Proton is multi-lingual:
+ Proton-C - a C implementation with language bindings in Python,
Php, Perl, and Ruby
+ Proton-J - a pure Java implementation
Please see http://qpid.apache.org/proton for a more info.
Build Instructions
==================
Proton comes with two separate build systems. The CMake build system
builds the entire codebase including the C implementation, all the
bindings of the C implementation, and the pure Java implementation.
The maven build system builds only the Java portions of the code.
Developers wishing to work across multiple languages should become
familiar with the cmake build system as this will build and run all
available tests and code whereas the maven build system only runs Java
tests.
CMake (Linux)
-------------
The following prerequisites are required to do a full build. If you do
not wish to build a given language binding you can omit the devel
package for that language:
# required dependencies
yum install gcc cmake libuuid-devel
# dependencies needed for ssl support
yum install openssl-devel
# dependencies needed for bindings
yum install swig python-devel ruby-devel php-devel perl-devel
# dependencies needed for java (note that any non-ancient jvm will
# work, 1.8.0 is just what is current for fedora 20)
yum install java-1.8.0-openjdk-devel
# dependencies needed for python docs
yum install epydoc
From the directory where you found this README file:
mkdir build
cd build
# Set the install prefix. You may need to adjust depending on your
# system.
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DSYSINSTALL_BINDINGS=ON
# Omit the docs target if you do not wish to build or install
# documentation.
make all docs
# Note that this step will require root privileges.
make install
When make install completes, all installed files are listed in the
install_manifest.txt file. The contents of this file may be used to
uninstall.
Note: When SYSINSTALL_BINDINGS is enabled (ON), the
CMAKE_INSTALL_PREFIX does not affect the location for where the
language bindings (Python, Perl, PHP, Ruby) are installed. For those
elements, the location is determined by the language interpreter
itself; i.e., each interpreter is queried for the proper location for
extensions. If you want to constrain where the Proton code is
installed, set SYSINSTALL_BINDINGS to OFF. This will install all
bindings to a common location under ${CMAKE_INSTALL_PREFIX}. When
installed like this, each user will need to manually configure their
interpreters with the respective binding location.
Installing Language Bindings
----------------------------
Most dynamic languages provide a way for asking where to install
libraries in order to place them in a default search path.
When SYSINSTALL_BINDINGS is disabled (OFF), Proton installs all
dynamic language bindings into a central, default location:
BINDINGS=${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/proton/bindings
In order to use these bindings, you'll need to configure your
interpreter to load the bindings from the appropriate directory:
* Perl - Add ${BINDINGS}/perl to PERL5LIB
* PHP - Set the PHPRC environment variable to point to
${BINDINGS}/php/proton.ini
* Python - Add ${BINDINGS}/python to PYTHONPATH
* Ruby - Add ${BINDINGS}/ruby to RUBYLIB
You can configure the build to install a specific binding to the
location specified by the system interpreter with the
SYSINSTALL_[LANGUAGE] options, where [LANGUAGE] is one of JAVA, PERL,
PHP, PYTHON, or RUBY.:
cmake .. -DSYSINSTALL_PHP=ON
Disabling Language Bindings
---------------------------
To disable any given language bindings, you can use the
BUILD_[LANGUAGE] option where [LANGUAGE] is one of JAVA, PERL, PHP,
PYTHON or RUBY, e.g.:
cmake .. -DBUILD_PHP=OFF
CMake (Windows)
---------------
This describes how to build the Proton library on Windows using
Microsoft Visual C++.
The Proton build uses the cmake tool to generate the Visual Studio
project files. These project files can then be loaded into Visual
Studio and used to build the Proton library.
These instructions assume use of a command shell. If you use the
Visual Studio supplied Command Prompt, cmake is even more likely to
guess the intended compiler.
The following packages must be installed:
- Visual Studio 2005 or newer (regular or C++ Express)
- Python (www.python.org)
- Cmake (www.cmake.org)
The following packages are optionally required in order to run the
python or java driven test suites:
- swig (www.swig.org)
Notes:
- be sure to install relevant Microsoft Service Packs and updates
- python.exe _must_ be in your path
- cmake.exe _must_ be in your path
- swig.exe optional (but should be in your path for building test
modules)
### Step 1:
Create a 'build' directory - this must be at the same level as the
'proton-c' directory. For example, from the directory where you found
this README file:
> mkdir build
### Step 2:
cd into the build directory
> cd build
### Step 3:
Generate the Visual Studio project files using cmake. The command
contains:
1. the name of the compiler you are using (if cmake guesses wrongly)
2. the path (required) to the _directory_ that contains the top
level "CMakeLists.txt" file (the parent directory, in this case).
Example:
> cmake ..
If cmake doesn't guess things correctly, useful additional arguments
are:
-G "Visual Studio 10"
-DSWIG_EXECUTABLE=C:\swigwin-2.0.7\swig.exe
Refer to the cmake documentation for more information.
### Step 4:
Load the ALL_BUILD project into Visual Studio
a. Run the Microsoft Visual Studio IDE
b. From within the IDE, open the ALL_BUILD project file or proton
solution file - it should be in the 'build' directory you created
above.
c. select the appropriate configuration. RelWithDebInfo works best
with the included CMake/CTest scripts
### Step 5:
Build the ALL_BUILD project.
Note that if you wish to build debug version of proton for use with
swig bindings on Windows, you must have the appropriate debug target
libraries to link against.
Maven (All platforms)
---------------------
The following prerequesuites are required to do a full build.
+ Apache Maven 3.0 (or higher) (http://maven.apache.org/)
From the directory where you found this README file:
# To compile and package all Java modules (omitting the tests)
mvn -DskipTests package
# To install the packages in the local Maven repository (usually ~/.m2/repo)
mvn -DskipTests install
Testing
=======
Additional packages required for testing:
yum install rubygem-minitest rubygem-rspec rubygem-simplecov
On non-RPM based systems, you can install them using:
gem install minitest rspec simplecov
To test Proton, use the cmake build and run 'make test'. Note that
this will invoke the maven tests as well, so the maven prerequisites
are required in addition to the cmake prerequisites.
Running Tests
-------------
To run the system tests using the CMake build system, cd into your
build directory and use the following commands:
# to run all the tests, summary mode
ctest
# to run a single test, full output
ctest -V -R proton-c