#!/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.1.0.tgz"
  rq_tgz="${packagedir}/rq-0.1.7.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\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 "THE FOLLOWING CRONTAB ENTRY WILL MAINTAIN AN IMMORTAL FEEDERS FOR THIS QUEUE\n"
  printf "FROM ANY NODE MOUNTING THE NFS FILESYSTEM ON WHICH THE QUEUE RESIDES\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
