Proton is 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:

  + designed for easy language bindings
     - includes full fidelity data exchange:
         maps, lists, strings, custom data structures, and more

Please see http://qpid.apache.org/proton for a more info.

== Build Instructions ==

The following prerequesuites are required to do a full build. If you
do not wish to build a given language binding you can ommit 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

  # 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 ..

  # Omit the docs target if you do not wish to build or install
  # documentation.
  make all docs

  # Note that if you have configured cmake with a system prefix such
  # as the one show above (/usr), this step will require root
  # privileges.
  make install

Note that all installed files are stored in the install_manifest.txt
file.
