#!/usr/bin/env bash

# partial build script for sifdecode
# version for Bourne/bash shell

# syntax: ginstall_sifdecode

# N. Gould, D. Orban & Ph. Toint
# ( Last modified on 18 March 2013 at 13:45 GMT )

export SIFDECODE=`dirs -l`
export SIFDECODE=`echo $SIFDECODE | $SED 's"/tmp_mnt""'`

if [[ -e $SIFDECODE/versions/$VERSION ]]; then
    warning "There is already an installed SIFDECODE version $VERSION"
    yesno_default_yes ' Do you wish to proceed ... existing version will be updated'
    [[ $? != 1 ]] && exit 4
fi

#echo $CMP

#  create architecture-dependent object and module directories

OBJDIR=$SIFDECODE/objects/$VERSION
MODDIR=$SIFDECODE/modules/$VERSION

echo "$MACHINE ($OPSYS) $COMPUSED" > $SIFDECODE/versions/$VERSION

if [[ ! -e $OBJDIR ]]; then
    $MKDIR $OBJDIR
    $MKDIR $OBJDIR/double $OBJDIR/single
else
    if [[ ! -e $OBJDIR/double ]]; then
        $MKDIR $OBJDIR/double
    fi
    if [[ ! -e $OBJDIR/single ]]; then
        $MKDIR $OBJDIR/single
    fi
fi

if [[ ! -e $MODDIR ]]; then
    $MKDIR $MODDIR
    $MKDIR $MODDIR/double $MODDIR/single
else
    if [[ ! -e $MODDIR/double ]]; then
        $MKDIR $MODDIR/double
    fi
    if [[ ! -e $MODDIR/single ]]; then
        $MKDIR $MODDIR/single
    fi
fi

#  write out the sifdecode/bin/sys file for this architecture

SYSFILE=$SIFDECODE/bin/sys/$VERSION

echo 'RM="'$RM'"'                                                  >  $SYSFILE
echo 'MAKE="'$MAKE'"'                                              >> $SYSFILE
echo 'CAT="'$CAT'"'                                                >> $SYSFILE
echo 'SED="'$SED'"'                                                >> $SYSFILE
echo 'MV="'$MV'"'                                                  >> $SYSFILE
echo 'LS="'$LS'"'                                                  >> $SYSFILE
echo 'LN="'$LN'"'                                                  >> $SYSFILE
echo 'GREP="'$GREP'"'                                              >> $SYSFILE
echo 'AWK="'$AWK'"'                                                >> $SYSFILE
echo 'HEAD="'HEAD'"'                                               >> $SYSFILE
echo 'TAIL="'$TAIL'"'                                              >> $SYSFILE
echo 'FORTRAN="'$FORTRAN'"'                                        >> $SYSFILE
MOD='$SIFDECODE/modules/'$VERSION'/$PRECIS'
FFLAGS="$LIBCMD"' '`eval echo $MODCMD`' '"$F90"
echo 'FFLAGS="'$FFLAGS' '$OPENMP'"'                                >> $SYSFILE
echo 'PROBFLAGS="'$FFLAGS' '$BASIC' '$OPTIMIZATION' '$F77' "'      >> $SYSFILE
echo 'BLAS="'$BLAS'"'                                              >> $SYSFILE
echo 'LAPACK="'$LAPACK'"'                                          >> $SYSFILE

#  write out the sifdecode/makefile/ file for this architecture

MAKEFILE=$SIFDECODE/makefiles/$VERSION

echo ' '                                                           >  $MAKEFILE
echo '#  Architecture dependent makefile'                          >> $MAKEFILE
echo '#  (automatically generated by install_sifdecode)'           >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'VERSION = '$VERSION                                          >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Basic system commands'                                    >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'CP = '$CP                                                    >> $MAKEFILE
echo 'MV = '$MV                                                    >> $MAKEFILE
echo 'RM = '$RM                                                    >> $MAKEFILE
echo 'SED = '$SED                                                  >> $MAKEFILE
echo 'GREP = '$GREP                                                >> $MAKEFILE
echo 'AR = '$AR                                                    >> $MAKEFILE
echo 'ARREPFLAGS = '$ARREPFLAGS                                    >> $MAKEFILE
echo 'RANLIB = '$RANLIB                                            >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Directory for binaries'                                   >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'PRECIS = double'                                             >> $MAKEFILE
echo 'OBJ = $(SIFDECODE)/objects/$(VERSION)/$(PRECIS)'             >> $MAKEFILE
echo 'OBJS = $(SIFDECODE)/objects/$(VERSION)/single'               >> $MAKEFILE
echo 'OBJD = $(SIFDECODE)/objects/$(VERSION)/double'               >> $MAKEFILE
echo 'MOD = $(SIFDECODE)/modules/$(VERSION)/$(PRECIS)'             >> $MAKEFILE
echo 'SEDS = $(SIFDECODE)/seds/$(PRECIS).sed'                      >> $MAKEFILE
echo 'MVMODS = '"$MVMODS"                                          >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Compiler options'                                         >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'FORTRAN = '$FORTRAN                                          >> $MAKEFILE
echo 'BASIC = '$BASIC                                              >> $MAKEFILE
MODTMP="$LIBCMD"' '`echo $MODCMD | $SED 's/MOD/(MOD)/g'`
echo 'MODULES = '$MODTMP                                           >> $MAKEFILE
echo 'OPTIMIZATION = '$OPTIMIZATION                                >> $MAKEFILE
echo 'NOOPTIMIZATION = '$NOOPTIMIZATION                            >> $MAKEFILE
echo 'DEBUG = '$DEBUG                                              >> $MAKEFILE
echo 'OPENMP = '$OPENMP                                            >> $MAKEFILE
echo 'F77 = '$F77                                                  >> $MAKEFILE
echo 'F90 = '$F90                                                  >> $MAKEFILE
echo 'F95 = '$F95                                                  >> $MAKEFILE
echo 'NOFMAIN = '$NOFMAIN                                          >> $MAKEFILE
echo 'USUAL = '$USUAL                                              >> $MAKEFILE
echo 'SPECIAL = '$SPECIAL                                          >> $MAKEFILE
echo 'F77SUFFIX = '$F77SUFFIX                                      >> $MAKEFILE
echo 'F95SUFFIX  = '$F95SUFFIX                                     >> $MAKEFILE
echo 'TIMER = '$TIMER                                              >> $MAKEFILE
echo 'NOT95 = '$NOT95                                              >> $MAKEFILE
echo 'NOT64 = '$NOT64                                              >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'AMPLDIR   = '$AMPLLIBDIR                                     >> $MAKEFILE
echo 'CC        = '$CC                                             >> $MAKEFILE
echo 'CCBASIC   = '$CCBASIC                                        >> $MAKEFILE
echo 'CCISO     = '$CCISO                                          >> $MAKEFILE
echo 'CCONDEF   = '$CCONDEF                                        >> $MAKEFILE
echo 'CCDEBUG   = '$CCDEBUG                                        >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Special flags'                                            >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Libraries'                                                >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'BLAS = '$BLAS                                                >> $MAKEFILE
echo 'LAPACK = '$LAPACK                                            >> $MAKEFILE
echo 'CUTERUSED = '                                                >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Shell used'                                               >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'BINSHELL = '$BINSHELL                                        >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Set directories for optional packages'                    >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'include $(SIFDECODE)/src/makedefs/packages'                  >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo '#  Body of makefile'                                         >> $MAKEFILE
echo ' '                                                           >> $MAKEFILE
echo 'include $(PWD)/makemaster'                                   >> $MAKEFILE

#  optionally compile the selected packages

yesno_default_yes ' Would you like to compile SIFDecode ...'

if [[ $? != 0 ]]; then
    cd $SIFDECODE/src/

    echo -e "\nInstalling the double precision version"
    OPTIONS="-s -f $SIFDECODE/makefiles/$VERSION"
    MACROS="PRECIS=double PWD=$SIFDECODE/src SIFDECODE=$SIFDECODE"
    if (( $DRYRUN )) ; then
      echo "$MAKE $OPTIONS all $MACROS"
    else
      echo " compiling in $SIFDECODE/src with the comand"
      echo " $MAKE $OPTIONS all"
      $MAKE $OPTIONS all $MACROS
      [[ $? != 0 ]] && exit 2
    fi
    success 'SIFDecode successfully installed'

fi

#exit 0
