#! /bin/sh
#    Filename: gammalib-setup(.in)
# Description: Writes an initialization script for GammaLib software
#              which is custom fit to the user and the particular
#              software installation. Note that this script is
#              designed to be invoked by gammalib-init.csh/gammalib-init.sh,
#              and should not normally be invoked directly by user.
# Author/Date: Juergen Knoedlseder, IRAP, October 29, 2011
#-------------------------------------------------------------------------------
#
# Set fixed parameters
# ====================
this_script=`echo $0 | sed 's:.*/::'`
gammalib_info="$this_script:"
gammalib_error="$gammalib_info ERROR --"

#
# Extract argument
# ================
flavor=$1
if [ "x$flavor" != xcsh -a "x$flavor" != xsh ]; then
  echo "$gammalib_info usage $this_script csh|sh" >&2
  exit 3
fi

#
# Set parameters
# ==============
prefix="/usr/local/gamma"
exec_prefix="${prefix}"
gammalib_bin="${exec_prefix}/bin"
gammalib_lib="${exec_prefix}/lib:/usr/local/gamma/lib"
uname_system=`uname`
python_dir="${prefix}/lib/python2.7/site-packages"
python_exec_dir="${exec_prefix}/lib/python2.7/site-packages"
pkgconfig_dir="${exec_prefix}/lib/pkgconfig"
man_dir="${prefix}/share/doc/gammalib/man"
caldb_dir="${prefix}/share/caldb"

#
# Make pfiles available
# =====================
if [ -d $prefix/syspfiles/. ]; then

  # make sure local parameter file directory exists
  if [ ! -w $HOME/pfiles/. ]; then
    mkdir $HOME/pfiles
    if [ $? -ne 0 ]; then
      echo "$gammalib_error cannot create local pfiles directory $HOME/pfiles" >&2
      exit 3
    fi
  fi

  # use PFILES (if set) to set initial values for locpfiles and syspfiles
  if [ "x$PFILES" != x ]; then
    syspfiles=`echo $PFILES | sed "s%.*;%%"`
    locpfiles=`echo $PFILES | sed "s%;*$syspfiles$%%"`
  fi

  # move $HOME/pfiles to front of locpfiles and weed out redundancies
  if [ "x$locpfiles" = x ]; then
    locpfiles="$HOME/pfiles"
  else
    locpfiles=`echo ":$locpfiles:" | \
      sed "s%:$HOME/pfiles:%:%g" | sed "s%::*$%%"`
    locpfiles="$HOME/pfiles$locpfiles"
  fi

  # move $prefix/syspfiles to front of syspfiles and weed out redundancies
  if [ "x$syspfiles" = x ]; then
    syspfiles="$prefix/syspfiles"
  else
    syspfiles=`echo ":$syspfiles:" | \
      sed "s%:$prefix/syspfiles:%:%g" | sed "s%::*$%%"`
    syspfiles="$prefix/syspfiles$syspfiles"
  fi

  # updates any existing PFILES if syspfiles are newer
  for filename in $HOME/pfiles/*.par
  do
    parfile=`basename $filename`
    sys_parfile=$prefix/syspfiles/$parfile
    if [ -e $sys_parfile ]
    then
      if test $sys_parfile -nt $filename
      then
        cp -f $sys_parfile $filename
      fi
    fi
  done

  # Set PFILES and PFCLOBBER environment variable
  PFILES="$locpfiles;$syspfiles"
  PFCLOBBER=1
fi

#
# Set LD_LIBRARY_PATH
# ===================
if [ "x$LD_LIBRARY_PATH" = x ]; then
  LD_LIBRARY_PATH="$gammalib_lib"
else
  LD_LIBRARY_PATH=`echo ":$LD_LIBRARY_PATH:" | \
    sed "s%:$gammalib_lib:%:%g" | sed "s%::*$%%"`
  LD_LIBRARY_PATH="$gammalib_lib$LD_LIBRARY_PATH"
fi

#
# Set DYLD_LIBRARY_PATH if required
# =================================
case $uname_system in
  Darwin*)
    if [ "x$DYLD_LIBRARY_PATH" = x ]; then
         DYLD_LIBRARY_PATH="$gammalib_lib"
    else
      DYLD_LIBRARY_PATH=`echo ":$DYLD_LIBRARY_PATH:" | \
        sed "s%:$gammalib_lib:%:%g" | sed "s%::*$%%"`
      DYLD_LIBRARY_PATH="$gammalib_lib$DYLD_LIBRARY_PATH"
    fi
    ;;
  CYGWIN*)
    if [ "x$PATH" = x ]; then
      PATH="$gammalib_lib"
    else
      PATH=`echo ":$PATH:" | sed "s%:$gammalib_lib:%:%g" | sed "s%::*$%%"`
      PATH="$gammalib_lib$PATH"
    fi
    ;;
esac

#
# Set PYTHONPATH
# ==============
if [ "x$PYTHONPATH" = x ]; then
  PYTHONPATH="$python_dir"
else
  PYTHONPATH=`echo ":$PYTHONPATH:" | \
    sed "s%:$python_dir:%:%g" | sed "s%::*$%%"`
  PYTHONPATH="$python_dir$PYTHONPATH"
fi
if [ "x$PYTHONPATH" = x ]; then
  PYTHONPATH="$python_exec_dir"
else
  PYTHONPATH=`echo ":$PYTHONPATH:" | \
    sed "s%:$python_exec_dir:%:%g" | sed "s%::*$%%"`
  PYTHONPATH="$python_exec_dir$PYTHONPATH"
fi

#
# Set PKG_CONFIG_PATH
# ===================
if [ "x$PKG_CONFIG_PATH" = x ]; then
  PKG_CONFIG_PATH="$pkgconfig_dir"
else
  PKG_CONFIG_PATH=`echo ":$PKG_CONFIG_PATH:" | \
    sed "s%:$pkgconfig_dir:%:%g" | sed "s%::*$%%"`
  PKG_CONFIG_PATH="$pkgconfig_dir$PKG_CONFIG_PATH"
fi

#
# Set PATH
# ========
if [ "x$PATH" = x ]; then
  PATH="$gammalib_bin"
else
  PATH=`echo ":$PATH:" | \
    sed "s%:$gammalib_bin:%:%g" | sed "s%::*$%%"`
  PATH="$gammalib_bin$PATH"
fi

#
# Set MANPATH
# ===========
if [ "x$MANPATH" = x ]; then
  MANPATH="$man_dir:$(manpath)"
else
  MANPATH=`echo ":$MANPATH:" | \
    sed "s%:$man_dir:%:%g" | sed "s%::*$%%"`
  MANPATH="$man_dir$MANPATH"
fi

#
# Set GAMMALIB_CALDB (if not yet set)
# ===================================
if [ "x$GAMMALIB_CALDB" = x ]; then
  GAMMALIB_CALDB="$caldb_dir"
fi

#
# List of variables needed in initialization script
# =================================================
varlist="LD_LIBRARY_PATH DYLD_LIBRARY_PATH PATH"
varlist="$varlist PYTHONPATH PKG_CONFIG_PATH MANPATH"
varlist="$varlist PFILES PFCLOBBER GAMMALIB_CALDB"

#
# Save values in output initialization shell scripts
# ==================================================
# Name of temporary config script
HOST_NAME=`hostname`
gammalib_config="$HOME/gammalib-config-$HOST_NAME"

# Bourne Shell version, write only for sh flavor initialization
if [ $flavor = sh ]; then
  rm -f $gammalib_config$$.sh
  touch $gammalib_config$$.sh
  for var in $varlist; do
    eval "if [ \"x\$$var\" != x ]; then
            echo \"\$var=\\\"\$$var\\\"; export \$var\" >> $gammalib_config$$.sh;
          fi"
  done
  echo "$gammalib_config$$.sh"
# C Shell version, write only for csh flavor initialization
elif [ $flavor = csh ]; then
  rm -f $gammalib_config$$.csh
  touch $gammalib_config$$.csh
  for var in $varlist; do
    eval "if [ \"x\$$var\" != x ]; then
            echo setenv \$var \\\"\$$var\\\" >> $gammalib_config$$.csh;
          fi"
  done
  echo "$gammalib_config$$.csh"
fi
