#  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
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-util-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.2.tar.gz
tar xzf httpd-2.4.2.tar.gz
cd httpd-2.4.2
./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.2-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
curl -OL http://curl.haxx.se/download/curl-7.24.0.tar.gz
tar xzf curl-7.24.0.tar.gz
cd curl-7.24.0
./configure --enable-threaded-resolver --prefix=$build/curl-7.24.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
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build Mozilla Portable Runtime
curl -OL http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/v4.8.8/src/nspr-4.8.8.tar.gz
tar xzf nspr-4.8.8.tar.gz
cd nspr-4.8.8/mozilla/nsprpub
./configure --prefix=$build/nspr-4.8.8-bin --enable-64bit
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cd $build

# Build SpiderMonkey
sudo apt-get -y install zip unzip
if [ "$?" != "0" ]; then
    exit $?
fi
curl -OL http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz
tar xzf js185-1.0.0.tar.gz
cd js-1.8.5/js/src
export LD_RUN_PATH=$build/nspr-4.8.8-bin/lib
./configure --prefix=$build/js-1.8.5-bin --enable-threadsafe --with-system-nspr --with-nspr-prefix=$build/nspr-4.8.8-bin
make
make install
unset LD_RUN_PATH
ln -s $build/js-1.8.5-bin/lib/libmozjs185.so $build/js-1.8.5-bin/lib/libmozjs.so
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.24.0-bin/include" CURL_LIBS="-L$build/curl-7.24.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.2-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.24.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 --enable-thread-safety
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/incubator/thrift/0.2.0-incubating/thrift-0.2.0-incubating.tar.gz
tar xzf thrift-0.2.0-incubating.tar.gz
cd thrift-0.2.0
curl -OL http://svn.apache.org/repos/asf/tuscany/sca-cpp/trunk/patches/thrift-0.2.0.patch
patch -p0 <thrift-0.2.0.patch
./bootstrap.sh
./configure --prefix=$build/thrift-0.2.0-bin --with-java=no --with-erlang=no --with-py=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.2.0/contrib/fb303
./bootstrap.sh
./configure --prefix=$build/thrift-0.2.0-bin/contrib/fb303 PY_PREFIX=$build/thrift-0.2.0-bin/contrib/fb303 --with-thriftpath=$build/thrift-0.2.0-bin --disable-static
make
make install
if [ "$?" != "0" ]; then
    exit $?
fi
cp cpp/lib/libfb303.so $build/thrift-0.2.0-bin/contrib/fb303/lib
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.2.0-bin --with-fb303path=$build/thrift-0.2.0-bin/contrib/fb303 --disable-static CPPFLAGS="-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
curl -OL http://www.python.org/ftp/python/2.7.3/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 --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.24.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.2-bin --with-memcached=$build/memcached-1.4.13-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-pagespeed --with-pagespeed=$build/page-speed-1.9-bin --enable-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.2.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 curl-7.24.0 curl-7.24.0-bin curl-7.24.0.tar.gz expat-2.0.1 expat-2.0.1-bin expat-2.0.1.tar.gz httpd-2.4.2 httpd-2.4.2.tar.gz httpd-2.4.2-bin js-1.8.5-bin js-1.8.5 js185-1.0.0.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 nspr-4.8.8-bin nspr-4.8.8 nspr-4.8.8.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.2.0 thrift-0.2.0-bin thrift-0.2.0-incubating.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 curl-7.24.0-bin expat-2.0.1-bin httpd-2.4.2-bin js-1.8.5-bin liboauth-0.9.1-bin libstrophe-bin libxml2-2.7.7-bin memcached-1.4.13-bin modsecurity-apache-2.6.6-bin nspr-4.8.8-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.2.0-bin tinycdb-0.77-bin tuscany-sca-cpp tuscany-sca-cpp-bin

