#!/bin/bash
#
# @@@ START COPYRIGHT @@@
#
# 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.
#
# @@@ END COPYRIGHT @@@
#

# -----------------------------------------------------------------------------
# script: traf_tools_setup
#
# Helper script that downloads and installs dependent tools required by 
# Apache Trafodion to build from a source distribution
#
# Tools installed:
#
# MPICH: Implementation of the Message Passing Interface (MPI) standard.  For use 
#   in Trafodion, MPICH must be built to force sockets to be used in both 
#   internode and intranode message passing. 
# Bison: General-purpose parser generator.
# Udis86: Minimalistic disassembler library (libudis86) for the x86 class of 
#   instruction set architectures.
# LLVM: Collection of modular and reusable compiler and toolchain technologies.
# ICU: C/C++ and Java libraries providing Unicode and Globalization support for 
#   software applications.
# Zookeeper: Coordination service for distributed applications.  It exposes 
#   common services such as naming, configuration management, synchronization, 
#   and group services.
# Thrift: Communications and data serialization tool
# Maven: Build tool that is only installed if compatible version does not exist
# log4cxx: standard logging framework for C++
# hadoop: shared libraries for libhadoop, libhdfs, and hdfs header file
#
# Script can be modified to meet the needs of your environment
# May need root or SUDO access to install tools in desired location
# ----------------------------------------------------------------------------- 

##############################################################################
# Environment variables - optional
#
# MY_LOCAL_SW_DIST - shared location on local network for tar balls for build, etc.
# - udis
# - llvm
# - mpich
# - bison
# - icu
# - zookeeper
# - thrift
# - apache-maven
# - protobuf
# - apache-log4cxx
# - hadoop
# also set http_proxy and ftp_proxy if necessary, to download
# files from repositories on the Internet
#
##############################################################################
MY_LOCAL_SW_DIST=${MY_LOCAL_SW_DIST-""}

function Usage {
   echo
   echo "Usage: $0 -d <downloaddir> -i <installdir>"
   echo
   echo " -d <downloaddir> - location of download directory"
   echo " -i <installdir>  - location of install directory"
   echo
   echo " -h - help"
   echo
   echo "example: traf_tools_setup.sh -d /home/userx/download -i /home/userx/tools"
   echo
}

# -----------------------------------------------------------------------------
# function: downloadSource - downloads and un-tars the requested file
#    $1 - tar file URL to download
#    $2 - directory where source is untarred (leave empty to skip untar)
#
# -----------------------------------------------------------------------------
function downloadSource
{
  URL="$1"
  SRCDIR="$2"
  TARFILE="${URL##*/}"

  if [ "x${MY_LOCAL_SW_DIST}" != "x" ]; then
      echo "INFO:   copy file ${TARFILE} from [${MY_LOCAL_SW_DIST}/${TARFILE}]"
      if [ -f ${MY_LOCAL_SW_DIST}/${TARFILE} ]; then
	  cp ${MY_LOCAL_SW_DIST}/${TARFILE} ${BASEDIR}/${TARFILE}
      fi
  fi

  if [ ! -e $BASEDIR/$TARFILE ]; then
    wget $URL  >>$LOGFILE 2>&1
    echo "INFO:   downloaded tar file: $TARFILE " | tee -a $LOGFILE
  else
    echo "INFO:   tar file already downloaded, step skipped" | tee -a $LOGFILE
  fi

  if [ ! -e $BASEDIR/$SRCDIR ]; then
    cd $BASEDIR
    tar -xzf $BASEDIR/$TARFILE
  else
    echo "INFO:   source tree already exists" | tee -a $LOGFILE
  fi
}

LOGDIR=$(pwd)
LOGFILE=$LOGDIR/traf_tools_setup.log
BLDLOG=$LOGDIR/traf_tools_bld

# -----------------------------------------------------------------------------
# execute build functions in background
# $1 - short name of component (single word, also used in logfile name)
# $2 - first make target (usually empty string for the default target)
# $3 - second make target
# $4 - dir/file to check for success
# -----------------------------------------------------------------------------
function bkgBuild
{
  LOG=${BLDLOG}-${1}.log
  echo "INFO:   Starting background make and install for $1" | tee -a $LOGFILE

 (make $2 > $LOG 2>&1
  echo "INFO:   make completed" > $LOG
  make $3 > $LOG 2>&1
  if [[ ! -e $4 ]]; then
    echo "ERROR:  failed to install $1" | tee -a $LOGFILE
    echo "  see details in $LOG" | tee -a $LOGFILE
    exit 2;
  fi
  echo "INFO:   $1 install complete at $(date), files placed in $TOOLSDIR" | tee -a $LOGFILE
 ) &
}

# main code

TOOLSDIR=
BASEDIR=
rm $LOGFILE 2>/dev/null
echo
echo "INFO: Starting tools build on $(date)" | tee -a $LOGFILE

    while getopts "d:i:hv" arg
      do
      case $arg in
          d)
              BASEDIR=${OPTARG};
              ;;
          h)
              Usage;
              exit 1;
              ;;
          i)
              TOOLSDIR=${OPTARG};
              ;;
          *)
              Usage;
              exit 1;
              ;;
      esac
    done


if [ "$BASEDIR" == "" ]; then
  echo
  echo "ERROR: download directory (-d) is not specified"
  Usage;
  exit 1;
fi
# handle relative path
if [[ ! $BASEDIR =~ ^/ ]]
then
  BASEDIR=$(pwd)/$BASEDIR
fi

if [ ! -d "$BASEDIR" ]; then
  echo
  echo "ERROR: download directory ($BASEDIR) does not exist"
  echo
  exit 1;
fi
 
if [ "$TOOLSDIR" == "" ]; then
  echo
  echo "ERROR: install directory (-t)  is not specified"
  Usage;
  exit 1;
fi
# handle relative path
if [[ ! $TOOLSDIR =~ ^/ ]]
then
  TOOLSDIR=$(pwd)/$TOOLSDIR
fi

if [ ! -d "$TOOLSDIR" ]; then                                                    
  read -p "Tools install directory $TOOLSDIR does not exist, do you want to to create it? y/n : " CREATEDIR
  if [ "$CREATEDIR" == "y" ]; then
     mkdir $TOOLSDIR
     if [ ! -d "$TOOLSDIR" ]; then
       echo
       echo "ERROR: unable to create directory $TOOLSDIR"
       echo
       exit 1
     else
       echo "INFO: Created directory $TOOLSDIR" | tee -a $LOGFILE
     fi
  else
    echo
    echo "ERROR: install directory ($TOOLSDIR) does not exist"
    echo
    exit 1;
  fi
fi

echo "INFO: Tar download location: $BASEDIR" | tee -a $LOGFILE
echo "INFO: Tool install directory location: $TOOLSDIR" | tee -a $LOGFILE
echo "INFO: LogFile location: $LOGFILE" | tee -a $LOGFILE
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# install udis
cd $BASEDIR
echo
echo "INFO: Installing UDIS on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/udis86-1.7.2/bin ]; then
  echo "INFO: UDIS is already installed, skipping to next tool" | tee -a $LOGFILE
else
  downloadSource http://sourceforge.net/projects/udis86/files/udis86/1.7/udis86-1.7.2.tar.gz udis86-1.7.2
  cd udis86-1.7.2
  ./configure --prefix=$TOOLSDIR/udis86-1.7.2 --enable-shared >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "udis86" "" "install" "$TOOLSDIR/udis86-1.7.2/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
#install LLVM
cd $BASEDIR
echo
echo "INFO: Installing LLVM on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/dest-llvm-3.2/release/bin -a -d $TOOLSDIR/dest-llvm-3.2/debug/bin ]; then
  echo "INFO: LLVM is already installed, skipping to next step" | tee -a $LOGFILE
else
  downloadSource http://llvm.org/releases/3.2/llvm-3.2.src.tar.gz llvm-3.2.src
  
  # Depends on UDIS, so make sure it is done
  wait

  export MY_UDIS_INSTALL_DIR=$TOOLSDIR/udis86-1.7.2
  export MY_LLVM_INSTALL_DIR=$TOOLSDIR/dest-llvm-3.2/
  export MY_LLVM_SRC_DIR=$BASEDIR/llvm-3.2.src
  export MY_LLVM_OBJ_DIR=$BASEDIR/llvm-3.2.obj/
  export LD_LIBRARY_PATH=$MY_UDIS_INSTALL_DIR/lib:$LD_LIBRARY_PATH
  export C_INCLUDE_PATH=$MY_UDIS_INSTALL_DIR/include
  export CPATH=$MY_UDIS_INSTALL_DIR/include

  # Build release version
  if [ ! -d $TOOLSDIR/dest-llvm-3.2/release/bin ]; then 
    mkdir -p $MY_LLVM_OBJ_DIR/release
    cd $MY_LLVM_OBJ_DIR/release

    $MY_LLVM_SRC_DIR/configure --prefix=$MY_LLVM_INSTALL_DIR/release \
       --enable-shared --enable-targets=x86,x86_64,cpp \
       --with-udis86=$MY_UDIS_INSTALL_DIR/lib \
       CFLAGS=-fgnu89-inline >>$LOGFILE 2>&1
    echo "INFO:   release configure complete" | tee -a $LOGFILE

    bkgBuild "llvm-release" "libs-only" "install-libs" "$TOOLSDIR/dest-llvm-3.2/release/bin"
  fi

  # Build debug version
  if [ ! -d $TOOLSDIR/dest-llvm-3.2/debug/bin ]; then
    mkdir -p $MY_LLVM_OBJ_DIR/debug
    cd $MY_LLVM_OBJ_DIR/debug

    $MY_LLVM_SRC_DIR/configure --prefix=$MY_LLVM_INSTALL_DIR/debug \
       --enable-optimized --enable-jit \
       --enable-debug-runtime --enable-debug-symbols \
       --enable-shared --enable-targets=x86,x86_64,cpp \
       --with-udis86=$MY_UDIS_INSTALL_DIR/lib \
       CFLAGS=-fgnu89-inline >>$LOGFILE 2>&1
    echo "INFO:   debug configure complete" | tee -a $LOGFILE
    bkgBuild "llvm-debug" "libs-only" "install-libs" "$TOOLSDIR/dest-llvm-3.2/debug/bin"
  fi
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# install mpi
cd $BASEDIR
echo
echo "INFO: Installing MPI on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/dest-mpich-3.0.4/bin ]; then
  echo "INFO: MPI is already installed, skipping to next tool" | tee -a $LOGFILE
else	
  downloadSource http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz mpich-3.0.4 
  cd mpich-3.0.4
  ./configure --prefix=$TOOLSDIR/dest-mpich-3.0.4 --with-device=ch3:sock --disable-f77 --disable-fc >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "MPI" "" "install" "$TOOLSDIR/dest-mpich-3.0.4/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# install bison
cd $BASEDIR
echo
echo "INFO: Installing Bison on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/bison_3_linux/bin ]; then
  echo "INFO: Bison is already installed, skipping to next tool" | tee -a $LOGFILE
else	
  downloadSource http://ftp.gnu.org/gnu/bison/bison-3.0.tar.gz bison-3.0
  cd bison-3.0
  ./configure --prefix=$TOOLSDIR/bison_3_linux >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "bison" "" "install" "$TOOLSDIR/bison_3_linux/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# Build ICU
cd $BASEDIR
echo
echo "INFO: Installing ICU on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/icu4c_4.4/linux64/bin ]; then
  echo "INFO: ICU is already installed, skipping to next tool" | tee -a $LOGFILE
else
  downloadSource http://download.icu-project.org/files/icu4c/4.4/icu4c-4_4-src.tgz icu4c-4_4-src
  cd icu/source
  ./configure --prefix=$TOOLSDIR/icu4c_4.4/linux64 >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "ICU" "" "install" "$TOOLSDIR/icu4c_4.4/linux64/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# make zookeeper
cd $BASEDIR
echo
echo "INFO: Installing ZooKeeper on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/zookeeper-3.4.5/bin ]; then
  echo "INFO: ZooKeeper is already installed, skipping to next tool" | tee -a $LOGFILE
else
  downloadSource https://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz zookeeper-3.4.5
  cd zookeeper-3.4.5/src/c
  ./configure --prefix=$TOOLSDIR/zookeeper-3.4.5 >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "zookeeper" "" "install" "$TOOLSDIR/zookeeper-3.4.5/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# make thrift
cd $BASEDIR
echo
echo "INFO: Installing Thrift on $(date)" | tee -a $LOGFILE
if [ -d $TOOLSDIR/thrift-0.9.0/bin ]; then
  echo "INFO: Thrift is already installed, skipping to next tool" | tee -a $LOGFILE
else
  downloadSource http://archive.apache.org/dist/thrift/0.9.0/thrift-0.9.0.tar.gz thrift-0.9.0
  cd thrift-0.9.0
  ./configure --prefix=$TOOLSDIR/thrift-0.9.0 -without-qt >>$LOGFILE 2>&1
  echo "INFO:   configure complete" | tee -a $LOGFILE
  bkgBuild "thrift" "" "install" "$TOOLSDIR/thrift-0.9.0/bin"
fi
echo " *********************************************************** " | tee -a $LOGFILE


# -----------------------------------------------------------------------------
# install maven, if version 3 or greater not available already
MAVEN_VERSION=`mvn --version 2>/dev/null | grep 'Apache Maven' | cut -f 3 -d ' '`
if [[ ! "$MAVEN_VERSION" =~ "3." ]]; then
  cd $BASEDIR
  echo
  echo "INFO: Installing Maven on $(date)" | tee -a $LOGFILE
  if [ -d $TOOLSDIR/apache-maven-3.3.3/bin ]; then
    echo "INFO: Maven is already installed, skipping to next tool" | tee -a $LOGFILE
  else
    # there is no install, simply extract the files into $TOOLSDIR
    wget http://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz >>$LOGFILE 2>&1
    cd $TOOLSDIR
    tar -xzf $BASEDIR/apache-maven-3.3.3-bin.tar.gz >>$LOGFILE 2>&1
    echo "INFO:   downloaded tar file:  apache-maven-3.3.3-bin.tar.gz" | tee -a $LOGFILE
  fi
    echo "INFO: Maven installation complete" | tee -a $LOGFILE
  echo " *********************************************************** " | tee -a $LOGFILE
else
  echo "INFO:  Maven is already installed, skipping to next tool" | tee -a $LOGFILE
fi

# -----------------------------------------------------------------------------
# install protobuf, if version 2.5 not available already
PROTOC_VERSION=`protoc --version 2>/dev/null | grep 'libprotoc' | cut -f 2 -d ' '`
if [[ ! "$PROTOC_VERSION" =~ "^2.5" ]]; then
  cd $BASEDIR
  echo
  echo "INFO: Installing Protobuf on $(date)" | tee -a $LOGFILE
  if [ -d $TOOLSDIR/protobuf-2.5.0/bin ]; then
    echo "INFO: Protobuf is already installed, skipping to next tool" | tee -a $LOGFILE
  else
    downloadSource https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz protobuf-2.5.0
    cd protobuf-2.5.0
    ./configure --prefix=$TOOLSDIR/protobuf-2.5.0 >>$LOGFILE 2>&1
    echo "INFO:   configure complete" | tee -a $LOGFILE
    bkgBuild "protobuf" "" "install" "$TOOLSDIR/protobuf-2.5.0/bin"
  fi
  echo " *********************************************************** " | tee -a $LOGFILE
else
  echo "INFO:  Protobuf is already installed, skipping to next tool" | tee -a $LOGFILE
fi

# -----------------------------------------------------------------------------
# install log4cxx, if not installed
if [[ !  -e /usr/lib64/liblog4cxx.so ]]; then
  cd $BASEDIR
  echo
  echo "INFO: Installing log4cxx on $(date)" | tee -a $LOGFILE
  if [ -d $TOOLSDIR/apache-log4cxx-0.10.0/lib ]; then
    echo "INFO: log4cxx is already installed, skipping to next tool" | tee -a $LOGFILE
  else
    downloadSource https://dist.apache.org/repos/dist/release/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.tar.gz apache-log4cxx-0.10.0
    cd apache-log4cxx-0.10.0
    echo "INFO:   headerfile patch - per LOG4CXX-360" | tee -a $LOGFILE
    sed -i '1 i#include <string.h>' src/main/cpp/inputstreamreader.cpp
    sed -i '1 i#include <string.h>' src/main/cpp/socketoutputstream.cpp
    sed -i '1 i#include <string.h>' src/examples/cpp/console.cpp
    sed -i '2 i#include <stdio.h>' src/examples/cpp/console.cpp
    ./configure --prefix=$TOOLSDIR/apache-log4cxx-0.10.0 >>$LOGFILE 2>&1
    echo "INFO:   configure complete" | tee -a $LOGFILE
    echo "INFO:   Be sure dependencies apr-devel and apr-util-devel are installed" | tee -a $LOGFILE
    bkgBuild "log4cxx" "" "install" "$TOOLSDIR/apache-log4cxx-0.10.0/lib"
  fi
  echo " *********************************************************** " | tee -a $LOGFILE
else
  echo "INFO:  log4cxx is already installed, skipping to next tool" | tee -a $LOGFILE
fi

# -----------------------------------------------------------------------------
# download hadoop/hdfs libs
cd $BASEDIR
echo
echo "INFO: Hadoop/HDFS libs on $(date)" | tee -a $LOGFILE
HVER="2.6.0"
if [ -d $TOOLSDIR/hadoop-${HVER} ]; then
  echo "INFO: Hadoop/HDFS is already installed, skipping to next tool" | tee -a $LOGFILE
else
  downloadSource http://archive.apache.org/dist/hadoop/common/hadoop-${HVER}/hadoop-${HVER}.tar.gz # no un-tar
  cd $TOOLSDIR
  tar -xzf $BASEDIR/hadoop-${HVER}.tar.gz \
    hadoop-${HVER}/lib/native/libhadoop\*so\* \
    hadoop-${HVER}/lib/native/libhdfs\*so\* \
    hadoop-${HVER}/include/hdfs.h
  echo "INFO:   extraction complete" | tee -a $LOGFILE
fi
echo " *********************************************************** " | tee -a $LOGFILE

# -----------------------------------------------------------------------------

echo
echo "INFO: Waiting for all background builds. This might take a while." | tee -a $LOGFILE
wait
echo "INFO: Completed tools builds on $(date)" | tee -a $LOGFILE
echo "INFO: List of tools directory: " | tee -a $LOGFILE
ls $TOOLSDIR | echo | tee -a $LOGFILE
echo "`ls $TOOLSDIR`" | tee -a $LOGFILE
echo
