Apache Tuscany SCA Runtime
==========================

Automated installation on Ubuntu Server 12.04
=============================================

Tuscany provides automated install scripts for Ubuntu Server 12.04.
You can start with a fresh Ubuntu Server system and these scripts will take care
of all the download, build and installation steps for you.

ubuntu/ubuntu-install:
Build and installation of the most commonly used Tuscany features with most
dependencies built from source.

ubuntu/ubuntu-install-all:
Build and installation of all the Tuscany features with most dependencies
built from source.

System dependencies are downloaded and installed using sudo apt-get. Source
dependencies are downloaded and built in the current directory.

To run the automated installation:
mkdir tuscany
cd tuscany
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/ubuntu/ubuntu-install
chmod +x ./ubuntu-install
./ubuntu-install

The installation script will display each command as it's executed.

That's all you need to do to build and install the Tuscany SCA runtime on
Ubuntu Server.

Automated installation on Max OS X 10.8
=======================================

Tuscany provides an automated install script for Mac OS X 10.8 and Xcode 4.4.
You can start with a fresh Mac OS X 10.8 + Xcode 4.4 system and the script
will take care of all the download, build and installation steps for you.

macos/macos-install:
Build and installation of the most commonly used Tuscany features with all
dependencies built from source.

To run the automated installation:
mkdir tuscany
cd tuscany
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/macos/macos-install
chmod +x ./macos-install
./macos-install

The installation script will display each command as it's executed.

The dependencies will be built using the GCC compiler. The Tuscany SCA runtime
will be built using the Apple Clang/LLVM compiler.

That's all you need to do to build and install the Tuscany SCA runtime on Mac
OS X.


Step by step build and installation
===================================

For manual build and install steps on other systems than Ubuntu Server and Mac
OS X, or if you need to customize your installation, read on...

The Tuscany SCA Linux build uses the GNU Autotools tool chain.

First install the following development tools:
autoconf-2.68
automake-1.11
libtool-2.4.2
doxygen-1.7.1
gcc-g++-4.6.1

Then install the following development dependencies:

Apache HTTP server and APR:
httpd-2.4.2 (http://httpd.apache.org/)
apr-1.4.6 and apr-util-1.4.1 (http://apr.apache.org/)
built with OpenSSL libssl-0.9.8, libpcre3-8.12,
and expat 2.0.1

Memcached:
memcached-1.4.7 (http://memcached.org/)
built with libevent-1.4.14

XML:
libxml2-2.7.7 (http://xmlsoft.org/)

CURL:
curl-7-28.0 (http://curl.haxx.se)
built with c-ares-1.9.1 (http://c-ares.haxx.se)

JSON:
Jansson 2.4 (http://www.digip.org/jansson/)

Key/value persistent store:
tinycdb-0.77 (http://www.corpit.ru/mjt/tinycdb.html)

Optional dependencies:

Web application firewall:
Mod-security 2.6.6 (http://www.modsecurity.org/)
with the Mod-security core rule set 2.2.5

Web page optimizations:
Page Speed SDK 1.9 (http://code.google.com/p/page-speed/)

Web Services:
Apache Axis2/C 1.6.0 (http://ws.apache.org/axis2/c/)

Queueing:
Apache Qpid/C++ 0.6 (http://qpid.apache.org/)
built with libuuid1-2.19.1, libboost-1.46.1, libboost-program-options-1.46.1 and
libboost-filesystem-1.46.1

Python:
Python 2.7.3 (http://www.python.org/)
Google AppEngine 1.4.0 (http://code.google.com/appengine/)

OpenCL:
an OpenCL SDK (http://software.intel.com/en-us/articles/opencl-sdk/,
http://developer.nvidia.com/, http://developer.amd.com/sdks/amdappsdk)

Java:
a Java 5+ JDK (http://openjdk.java.net/, http://harmony.apache.org/)

OpenID authentication:
Mod_auth_openid (http://trac.butterfat.net/public/mod_auth_openid)
build it from source at http://github.com/jsdelfino/mod_auth_openid
requires Libopkele (http://kin.klever.net/libopkele/ or
http://github.com/jsdelfino/libopkele)
and HTML Tidy (http://tidy.sourceforge.net/)

OAuth authorization:
Liboauth 0.9.1 (http://liboauth.sourceforge.net/)

XMPP Chat:
Apache Vysper 0.5 (http://mina.apache.org/)

Libstrophe (http://code.stanziq.com/strophe/)
build it from source at git://github.com/jsdelfino/libstrophe.git

SQL database:
PostgreSQL 9.1.2 (http://www.postgresql.org/)
PgBouncer 1.5 (http://wiki.postgresql.org/wiki/PgBouncer)

Logging:
Facebook Scribe 2.2 (http://github.com/facebook/scribe/downloads)
requires Apache Thrift 0.8.0 (http://incubator.apache.org/thrift/)

Cloud deployment:
Apache Libcloud 0.3.1 (http://incubator.apache.org/libcloud/)


To configure the Tuscany SCA build do this:
./bootstrap
./configure --prefix=<install dir>

To enable debugging and strict warning compile options, add:
--enable-maintainer-mode

To enable gprof profiling, add:
--enable-profiling

To enable memory usage debugging using Electric Fence add:
--enable-efence

To enable memory usage debugging using mmap add:
--enable-malloc-mmap

To enable multi-threading (required by the Queue and Chat components and
for running with the HTTPD worker or event multi-threaded MPMs):
--enable-threads

To enable support for Python component implementations:
--enable-python

To enable support for OpenCL component implementations:
--enable-opencl

To enable support for Java component implementations:
--enable-java

To build the Queue utility component (requires Apache Qpid/C++):
--enable-queue

To build the Chat utility component (requires Libstrophe and optionally Apache
Vysper if you want to run the tests with a local Vysper XMPP server):
--enable-chat

To build the Log utility component (requires Facebook Scribe and Apache Thrift):
--enable-log

To build the SQL Database utility component (requires PostgreSQL and PgBouncer):
--enable-sqldb

To build the Web service utility component (requires Apache Axis2/C):
--enable-webservice

To build the support for OAuth authorization:
--enable-oauth

To build the support for OpenID authentication:
--enable-openid

To build the support for Mod-security:
--enable-mod-security

To enable Page Speed Web page optimizations:
--enable-pagespeed

To generate doxygen documentation, add:
--enable-doxygen

To configure where to find dependencies, see the --with-* options described
in the configure help:
./configure --help


Here's an example configuration tested on Ubuntu Server 12.04 with some of the
most useful options and the corresponding dependencies installed under $build:

./configure --prefix=$build/tuscany-sca-cpp-bin \
--enable-threads --enable-maintainer-mode \
--with-curl=$build/curl-7.28.0-bin --with-libxml2=$build/libxml2-2.7.7-bin \
--with-apr=$build/apr-1.4.6-bin --with-apr-util=$build/apr-util-1.4.1-bin \
--with-httpd=$build/httpd-2.4.2-bin \
--with-memcached=$build/memcached-1.4.7-bin \
--with-tinycdb=$build/tinycdb-0.77-bin \
--with-js-include=$build/js-1.8.5-bin/include/js \
--with-js-lib=$build/js-1.8.5-bin/lib \
--enable-python --with-python=$build/python-2.7.3-bin \
--enable-sqldb --with-pgsql=$build/postgresql-9.1.2-bin \
--with-pgbouncer=$build/pgbouncer-1.5-bin \
--enable-log --with-thrift=$build/thrift-0.8.0-bin \
--with-scribe=$build/scribe-2.2-bin \
--enable-oauth --with-liboauth=$build/liboauth-0.9.1-bin \
--enable-mod-security --with-mod-security=$build/modsecurity-apache-2.6.6-bin \
--enable-pagespeed --with-pagespeed=$build/page-speed-1.9-bin

To build the Tuscany SCA runtime, do this:
make

To run the tests, do this:
make check

To install the Tuscany SCA binaries, do this:
make install

To build ctags for the source, do this:
make ctags

To build a source distribution, do this:
make dist

To build a binary distribution, do this:
make bindist

