#!/bin/bash


###############################################################################
#
# CONFIG SECTION - EDIT TO SUIT YOUR SITE 
#
###############################################################################
#
# prefix : everything will be installed under this
#
  prefix="$1"
#
# sudo : set to 'sudo' if you will need sudo to install into prefix
#
  sudo=""
  #sudo="sudo"
#
# libdir : libs will installed here
#
  libdir="${prefix}/lib"
#
# bindir : executables and scripts will installed here
#
  bindir="${prefix}/bin"
#
# full path of dir containing packages to be installed
#
  packagedir="`pwd`/packages"
#
# full path of dir where packages will be built 
#
  builddir="`pwd`/build"
#
# listing of all packages to install into $prefix
#
  ruby_tgz="${packagedir}/ruby-1.8.1.tar.gz"
  sqlite_tgz="${packagedir}/sqlite-2.8.15.tar.gz"
  sqlite_ruby_tgz="${packagedir}/sqlite-ruby-1.3.1.tar.gz"
  posixlock_tgz="${packagedir}/posixlock-0.0.1.tgz"
  arrayfields_tgz="${packagedir}/arrayfields-3.4.0.tgz"
  lockfile_tgz="${packagedir}/lockfile-1.3.0.tgz"
  rq_tgz="${packagedir}/rq-2.3.0.tgz"
#
# toggle which packages to install
#
  install_ruby="true"
  install_sqlite="true"
  install_sqlite_ruby="true"
  install_posixlock="true"
  install_arrayfields="true"
  install_lockfile="true"
  install_rq="true"


###############################################################################
#
# INSTALL SECTION - DO **NOT** EDIT
#
###############################################################################
#
# re-exec myself sending stdout/stderr both to terminal and to log
#
  if [[ ! -n "$install_sh_log" ]]; then
    export install_sh_log="$0.log"
    exec "$0" "$@" 2>&1 | tee "$install_sh_log"
    exit
  fi
#
# vars 
#
  div="==============================================================================="
  line="-------------------------------------------------------------------------------"
  usage="usage : $0 prefix [sudo]"
#
# we disallow root execution of install.sh
#
  if [[ `whoami` == root ]];then
    printf "CANNOT COMPILE AS ROOT - ENV LD_RUN_PATH WILL NOT WORK PROPERLY" 1>&2
    exit 1
  fi
#
# check/create prefix
#
  if [[ ! -n "$prefix" ]]; then
    printf "$usage\n"
    exit 1
  fi
  if [[ ! -d "$prefix" ]]; then
    $sudo mkdir -p $prefix 
  fi
  if [[ ! -d "$prefix" ]]; then
    "prefix <$prefix> does not exist and could not be created"
    exit 1
  fi
#
# info 
#
  printf "\n$div\n"
  printf "CONFIG\n"
  printf -- "$line\n"
  printf "prefix <$prefix>\n"
  printf "libdir <$libdir>\n"
  printf "bindir <$bindir>\n"
  printf "packagedir <$packagedir>\n"
  printf "builddir <$builddir>\n"
  printf -- "$line\n"
#
# important env settings for proper compilation
#
  export PATH="${bindir}:$PATH"
  export LD_RUN_PATH="${libdir}"
  export LD_LIBRARY_PATH="${libdir}"
#
# important aliases for proper complilation and installation
#
  make="env LD_RUN_PATH=${libdir} LD_LIBRARY_PATH=${libdir} make"
  ruby="${bindir}/ruby"
#
# pre-install
#
  cwd=`pwd`
  pushd . >/dev/null
  mkdir -p "$builddir"
  if [[ $? != 0 ]];then
    printf "COULD NOT CREATE BUILDIR <${builddir}>" 1>&2
    popd >/dev/null
    exit 1
  fi
#
# install ruby 
#
  if [[ "$install_ruby" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/ruby_install.log"
    printf "\n$div\n"
    printf "INSTALING RUBY (see ${log} for details)\n"

    (tar xvfz "$ruby_tgz" &&\
     cd ruby* &&\
    ./configure "--prefix=${prefix}" &&\
    $make &&\
    $sudo $make install) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL RUBY - SUCCESS\n"
    else
      printf "INSTALL RUBY - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install sqlite 
#
  if [[ "$install_sqlite" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/sqlite_install.log"
    printf "\n$div\n"
    printf "INSTALING SQLITE (see ${log} for details)\n"

    (tar xvfz "$sqlite_tgz" &&\
     cd sqlite* &&\
    ./configure "--prefix=${prefix}" &&\
    $make &&\
    $sudo $make install) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL SQLITE - SUCCESS\n"
    else
      printf "INSTALL SQLITE - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install sqlite-ruby 
#
  if [[ "$install_sqlite_ruby" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/sqlite_ruby.log"
    printf "\n$div\n"
    printf "INSTALING SQLITE RUBY LIB (see ${log})\n"

    (tar xvfz "$sqlite_ruby_tgz" &&\
     cd sqlite-ruby*/ &&\
     mkdir -p build &&\
     cp -r ./lib/ ./build &&\
     cp -r ./ext/* ./build &&\
     cd build &&\
     "$ruby" ./extconf.rb "--with-sqlite-dir=${prefix}" &&\
     $make &&\
     $sudo $make install) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL SQLITE RUBY LIB - SUCCESS\n"
    else
      printf "INSTALL SQLITE RUBY LIB - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install posixlock
#
  if [[ "$install_posixlock" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/posixlock.log"
    printf "\n$div\n"
    printf "INSTALING POSIXLOCK RUBY LIB (see ${log})\n"

    (tar xvfz "$posixlock_tgz" &&\
     cd posixlock* &&\
     "$ruby" ./extconf.rb &&\
     $make &&\
     $sudo $make install) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL POSIXLOCK RUBY LIB - SUCCESS\n"
    else
      printf "INSTALL POSIXLOCK RUBY LIB - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install arrayfields 
#
  if [[ "$install_arrayfields" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/arrayfields.log"
    printf "\n$div\n"
    printf "INSTALING RUBY ARRAYFIELDS LIB (see ${log})\n"

    (tar xvfz "$arrayfields_tgz" &&\
     cd arrayfields* &&\
    $sudo "$ruby" ./install.rb) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL ARRAYFIELDS RUBY LIB - SUCCESS\n"
    else
      printf "INSTALL ARRAYFIELDS RUBY LIB - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install lockfile
#
  if [[ "$install_lockfile" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/lockfile.log"
    printf "\n$div\n"
    printf "INSTALING RUBY LOCKFILE LIB (see ${log})\n"

    (tar xvfz "$lockfile_tgz" &&\
     cd lockfile* &&\
    $sudo "$ruby" ./install.rb) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL LOCKFILE RUBY LIB - SUCCESS\n"
    else
      printf "INSTALL LOCKFILE RUBY LIB - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# install rq 
#
  if [[ "$install_rq" == *true* ]]; then
    cd "$builddir"
    log="${builddir}/rq.log"
    printf "\n$div\n"
    printf "INSTALING RUBY RQ LIB (see ${log})\n"

    (tar xvfz "$rq_tgz" &&\
     cd rq* &&\
    $sudo "$ruby" ./install.rb) > "$log" 2>&1

    if [[ $? == 0 ]];then
      printf "INSTALL RQ RUBY LIB - SUCCESS\n"
    else
      printf "INSTALL RQ RUBY LIB - FAILURE\n"
      cd "$cwd"
      exit 1
    fi
    printf -- "$line\n"
    cd "$cwd"
  fi
#
# serve notice
#
  printf -- "\n$div\n"
  printf "ATTENTION\n"

  printf -- "$line\n"
  printf "IT APPEARS THAT INSTALLATION WAS COMPLETE AND SUCCESSFUL\n"
  printf "\n"
  printf "THE FOLLOWING ENVIRONMENT SETTINGS ARE RECCOMENDED WHEN RUNNING THE SOFTWARE\n"
  printf "  bash/sh:\n"
  printf "    export PATH=\"${bindir}:\$PATH\"\n"
  printf "    export LD_LIBRARY_PATH=\"${libdir}\"\n"
  printf "  tcsh/csh:\n"
  printf "    setenv PATH \"${bindir}:\$PATH\"\n"
  printf "    setenv LD_LIBRARY_PATH \"${libdir}\"\n"
  printf "\n"

  printf -- "$line\n"
  printf "THE FOLLOWING COMMAND WILL CREATE A QUEUE IN ${prefix}\n"
  printf "\n"
  printf "  ${bindir}/rq ${prefix}/queue create\n"
  printf "\n"

  printf -- "$line\n"
  printf "THE FOLLOWING COMMAND WILL CREATE A SUBMIT AN 'ls' JOB TO THIS QUEUE\n"
  printf "\n"
  printf "  ${bindir}/rq ${prefix}/queue submit ls\n"
  printf "\n"

  printf -- "$line\n"
  printf "IN ORDER TO START A FEEDER IN DEBUGGING MODE, WHICH YOU CAN TRY NOW, DO\n"
  printf "\n"
  printf "  ${bindir}/rq ${prefix}/queue feed -d -m4 -M8\n"
  printf "\n"

  printf -- "$line\n"
  printf "THE FOLLOWING CRONTAB ENTRY WILL MAINTAIN AN IMMORTAL FEEDER FOR THIS QUEUE\n"
  printf "FROM ANY NODE MOUNTING THE NFS FILESYSTEM ON WHICH THE QUEUE RESIDES.\n"
  printf "SOMETHING LIKE IT MUST BE IN THE CRONTABS OF EACH PROCESSING NODE IN THE CLUSTER\n" 
  printf "\n"
  printf "  */15 * * * * ${bindir}/rq ${prefix}/queue feed -d -q -l${HOME}/rq.log\n"
  printf "\n"

  printf -- "$line\n"
  printf "TRY THE FOLLOWING COMMAND FOR MORE HELP\n"
  printf "\n"
  printf "  ${bindir}/rq help\n"
  printf "\n"
#
# post-install 
#
  popd >/dev/null
  exit 0
