#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#  
#    http://www.apache.org/licenses/LICENSE-2.0
#    
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

# Install a minimal distribution, the required system tools and libraries,
# runtime dependencies and the Tuscany SCA runtime on Ubuntu Server 12.04.

# Display commands as they are executed
set -x

# Build and install in the current directory
build=`pwd`

# First update the system
sudo apt-get update

# Install core dev tools
sudo apt-get -y install curl git-core subversion autoconf pkg-config automake libtool g++ make gdb vim
if [ "$?" != "0" ]; then
    exit $?
fi

# Build Libexpat
curl -L http://sourceforge.net/projects/expat/files/expat/2.0.1/expat-2.0.1.tar.gz/download -o expat-2.0.1.tar.gz
tar xzf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure --prefix=$build/expat-2.0.1-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Apache APR and APR util
sudo apt-get -y install libssl-dev libpcre3-dev
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://archive.apache.org/dist/apr/apr-1.4.6.tar.gz
tar xzf apr-1.4.6.tar.gz
cd apr-1.4.6
./buildconf
./configure --prefix=$build/apr-1.4.6-bin --disable-threads
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

curl -OL http://archive.apache.org/dist/apr/apr-util-1.4.1.tar.gz
tar xzf apr-1.4.1.tar.gz
cd apr-util-1.4.1
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/apr-util-1.4.1.patch
patch -p0 <apr-util-1.4.1.patch
./buildconf --with-apr=$build/apr-1.4.6
./configure --with-apr=$build/apr-1.4.6-bin --with-openssl --with-crypto --with-expat=$build/expat-2.0.1-bin --prefix=$build/apr-util-1.4.1-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build HTTP server
curl -OL http://archive.apache.org/dist/httpd/httpd-2.4.3.tar.gz
tar xzf httpd-2.4.3.tar.gz
cd httpd-2.4.3
./configure --enable-ssl --enable-proxy --enable-usertrack --enable-cgi --enable-session-crypto --enable-mods-shared=most --enable-mpms-shared="prefork worker event" --with-mpm=prefork --with-apr=$build/apr-1.4.6-bin --with-apr-util=$build/apr-util-1.4.1-bin --with-expat=$build/expat-2.0.1-bin --prefix=$build/httpd-2.4.3-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Memcached
sudo apt-get -y install libevent-dev
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
tar xzf memcached-1.4.13.tar.gz
cd memcached-1.4.13
./configure --prefix=$build/memcached-1.4.13-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Tinycdb
curl -OL http://www.corpit.ru/mjt/tinycdb/tinycdb_0.77.tar.gz
tar xzf tinycdb_0.77.tar.gz
cd tinycdb-0.77
make all shared
make prefix=$build/tinycdb-0.77-bin install-all install-sharedlib
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Libcurl with c-ares
curl -OL http://c-ares.haxx.se/download/c-ares-1.9.1.tar.gz
tar xzf c-ares-1.9.1.tar.gz
cd c-ares-1.9.1
./configure --prefix=$build/c-ares-1.9.1-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build
curl -OL http://curl.haxx.se/download/curl-7.28.0.tar.gz
tar xzf curl-7.28.0.tar.gz
cd curl-7.28.0
curl -OL http://curl.haxx.se/ca/cacert.pem
mkdir -p $build/curl-7.28.0-bin/lib
cp cacert.pem $build/curl-7.28.0-bin/lib/cacert.pem
./configure --enable-ares=$build/c-ares-1.9.1-bin --with-ca-bundle=$build/curl-7.28.0-bin/lib/cacert.pem --prefix=$build/curl-7.28.0-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Libxml2
curl -OL ftp://xmlsoft.org/libxml2/libxml2-sources-2.7.7.tar.gz
tar xzf libxml2-sources-2.7.7.tar.gz
cd libxml2-2.7.7
./configure --prefix=$build/libxml2-2.7.7-bin --without-threads
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Jansson
curl -OL http://www.digip.org/jansson/releases/jansson-2.4.tar.gz
tar xzf jansson-2.4.tar.gz
cd jansson-2.4
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/jansson-2.4.patch
patch -p0 <jansson-2.4.patch
./configure --prefix=$build/jansson-2.4-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Libstrophe
git clone git://github.com/jsdelfino/libstrophe.git
cd libstrophe
./bootstrap.sh
./configure --prefix=$build/libstrophe-bin --with-expat=$build/expat-2.0.1-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Liboauth
curl -OL http://liboauth.sourceforge.net/pool/liboauth-0.9.1.tar.gz
tar xzf liboauth-0.9.1.tar.gz
cd liboauth-0.9.1
./configure --prefix=$build/liboauth-0.9.1-bin CURL_CFLAGS="-I$build/curl-7.28.0-bin/include" CURL_LIBS="-L$build/curl-7.28.0-bin/lib -lcurl"
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build mod_security
curl -OL http://people.apache.org/~jsdelfino/tuscany/cpp/dependencies/modsecurity-apache_2.6.6.tar.gz
tar xzf modsecurity-apache_2.6.6.tar.gz
cd modsecurity-apache_2.6.6
./configure --prefix=$build/modsecurity-apache-2.6.6-bin --with-apxs=$build/httpd-2.4.3-bin/bin/apxs --with-apr=$build/apr-1.4.6-bin/bin/apr-1-config --with-apu=$build/apr-util-1.4.1-bin/bin/apu-1-config --with-libxml=$build/libxml2-2.7.7-bin --with-curl=$build/curl-7.28.0-bin LIBS="-L$build/expat-2.0.1-bin/lib"
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build
curl -OL http://people.apache.org/~jsdelfino/tuscany/cpp/dependencies/modsecurity-crs_2.2.5.tar.gz
tar xzf modsecurity-crs_2.2.5.tar.gz
cd modsecurity-crs_2.2.5
#curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/modsecurity-crs_2.2.5.patch
#patch -p0 <modsecurity-crs_2.2.2.patch
cp -R base_rules $build/modsecurity-apache-2.6.6-bin
cp -R optional_rules $build/modsecurity-apache-2.6.6-bin
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build PostgreSQL and PgBouncer
sudo apt-get -y install libreadline-dev
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://ftp.postgresql.org/pub/source/v9.1.2/postgresql-9.1.2.tar.gz
tar xzf postgresql-9.1.2.tar.gz
cd postgresql-9.1.2
./configure --prefix=$build/postgresql-9.1.2-bin --disable-thread-safety
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd contrib/pgbench
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build
curl -OL http://pgfoundry.org/frs/download.php/3197/pgbouncer-1.5.tar.gz
tar xzf pgbouncer-1.5.tar.gz
cd pgbouncer-1.5
./configure --prefix=$build/pgbouncer-1.5-bin
make
cp install-sh doc
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Apache Thrift
sudo apt-get -y install bison flex libboost-dev libboost-filesystem-dev 
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gz
tar xzf thrift-0.8.0.tar.gz
cd thrift-0.8.0
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/thrift-0.8.0.patch
patch -p0 <thrift-0.8.0.patch
./configure --prefix=$build/thrift-0.8.0-bin PY_PREFIX=$build/thrift-0.8.0-bin/contrib/fb303 --with-java=no --with-erlang=no --with-perl=no --with-ruby=no --with-csharp=no --disable-static
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Facebook fb303
cd thrift-0.8.0/contrib/fb303
./bootstrap.sh --prefix=$build/thrift-0.8.0-bin/contrib/fb303 PY_PREFIX=$build/thrift-0.8.0-bin/contrib/fb303 --with-thriftpath=$build/thrift-0.8.0-bin --disable-static CPPFLAGS="-DHAVE_CONFIG_H"
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Facebook Scribe
sudo apt-get -y install gawk
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://github.com/downloads/facebook/scribe/scribe-2.2.tar.gz
tar xzf scribe-2.2.tar.gz
cd scribe
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/scribe-2.2.patch
patch -p0 <scribe-2.2.patch
autoreconf --force --verbose --install
./configure --prefix=$build/scribe-2.2-bin PY_PREFIX=$build/scribe-2.2-bin --with-thriftpath=$build/thrift-0.8.0-bin --with-fb303path=$build/thrift-0.8.0-bin/contrib/fb303 --disable-static CPPFLAGS="-DHAVE_CONFIG_H -DBOOST_FILESYSTEM_VERSION=2" LIBS="-lboost_system -lboost_filesystem"
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cp src/lib/libscribe.so $build/scribe-2.2-bin/lib
cd $build

# Build Python
sudo apt-get -y install libssl-dev
curl -OL http://www.python.org/ftp/python/2.6.6/Python-2.7.3.tgz
tar xzf Python-2.7.3.tgz
cd Python-2.7.3
./configure --prefix=$build/python-2.7.3-bin --enable-shared --without-threads --with-system-expat=$build/expat-2.0.1-bin
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Google Page Speed
curl -OL https://dl-ssl.google.com/page-speed/sdk/current/page-speed-sdk.zip
unzip page-speed-sdk.zip
cd page-speed-1.9
make builddir=$build/page-speed-1.9-bin CXXFLAGS="-Wno-unused-but-set-variable"
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Apache Nuvem
git clone git://git.apache.org/nuvem.git
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Tuscany SCA
git clone git://git.apache.org/tuscany-sca-cpp.git
cd tuscany-sca-cpp
./bootstrap
./configure --prefix=$build/tuscany-sca-cpp-bin --with-curl=$build/curl-7.28.0-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.3-bin --with-memcached=$build/memcached-1.4.13-bin --with-tinycdb=$build/tinycdb-0.77-bin --with-jansson=$build/jansson-2.4-bin --enable-pagespeed --with-pagespeed=$build/page-speed-1.9-bin --disable-threads --enable-python --with-python=$build/python-2.7.3-bin --with-libxml2=$build/libxml2-2.7.7-bin --enable-chat --with-libstrophe=$build/libstrophe-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
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Create src archive
tar czf tuscany-sca-cpp-1.0-src.tar.gz apr-1.4.6 apr-1.4.6.tar.gz apr-1.4.6-bin apr-util-1.4.1 apr-util-1.4.1.tar.gz apr-util-1.4.1-bin c-ares-1.9.1 c-ares-1.9.1-bin c-ares-1.9.1.tar.gz curl-7.28.0 curl-7.28.0-bin curl-7.28.0.tar.gz expat-2.0.1 expat-2.0.1-bin expat-2.0.1.tar.gz httpd-2.4.3 httpd-2.4.3.tar.gz httpd-2.4.3-bin jansson-2.4 jansson-2.4-bin jansson-2.4.tar.gz liboauth-0.9.1 liboauth-0.9.1-bin liboauth-0.9.1.tar.gz libstrophe libstrophe-bin libxml2-2.7.7 libxml2-2.7.7-bin libxml2-sources-2.7.7.tar.gz memcached-1.4.13 memcached-1.4.13-bin memcached-1.4.13.tar.gz modsecurity-apache_2.6.6 modsecurity-apache-2.6.6-bin modsecurity-apache_2.6.6.tar.gz modsecurity-crs_2.2.5 modsecurity-crs_2.2.5.tar.gz nuvem page-speed-1.9 page-speed-1.9-bin page-speed-sdk.zip pgbouncer-1.5 pgbouncer-1.5-bin pgbouncer-1.5.tar.gz postgresql-9.1.2 postgresql-9.1.2-bin postgresql-9.1.2.tar.gz Python-2.7.3 python-2.7.3-bin Python-2.7.3.tgz scribe scribe-2.2-bin scribe-2.2.tar.gz thrift-0.8.0 thrift-0.8.0-bin thrift-0.8.0.tar.gz tinycdb-0.77 tinycdb-0.77-bin tinycdb_0.77.tar.gz tuscany-sca-cpp tuscany-sca-cpp-bin

# Create bin archive
tar czf tuscany-sca-cpp-1.0.tar.gz apr-1.4.6-bin apr-util-1.4.1-bin c-ares-1.9.1-bin curl-7.28.0-bin expat-2.0.1-bin httpd-2.4.3-bin jansson-2.4-bin liboauth-0.9.1-bin libstrophe-bin libxml2-2.7.7-bin memcached-1.4.13-bin modsecurity-apache-2.6.6-bin nuvem/nuvem-parallel page-speed-1.9-bin pgbouncer-1.5-bin postgresql-9.1.2-bin python-2.7.3-bin scribe-2.2-bin thrift-0.8.0-bin tinycdb-0.77-bin tuscany-sca-cpp tuscany-sca-cpp-bin

