#!/bin/bash
###############################################################################
#
# Copyright 2008, 2015, Mississippi State University
#
# This file is part of the Loci Framework.
#
# The Loci Framework is free software: you can redistribute it and/or modify
# it under the terms of the Lesser GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# The Loci Framework is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# Lesser GNU General Public License for more details.
#
# You should have received a copy of the Lesser GNU General Public License
# along with the Loci Framework.  If not, see <http://www.gnu.org/licenses>
#
###############################################################################

LD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$LD_LIBRARY_PATH:/:/usr:/usr/local:/opt:/opt/local
PETSC_BASE=$PETSC_DIR
if [ -e ParMetis-4.0/metis.h ] ; then
INSTALL_METIS=1
USE_METIS=1
METIS_BASE="\$(LOCI_BASE)/ParMetis-4.0"
METIS_LIBS="-lparmetis -lmetis -lgk"
METIS_INCLUDE="-I\$(METIS_BASE) -DLOCI_USE_METIS"
else
INSTALL_METIS=0
USE_METIS=0
METIS_BASE=
METIS_LIBS=
METIS_INCLUDE=
fi

set +e
set -u
set -f


if [ "$PETSC_BASE" == "" ]; then
    PETSC_BASE=/notinstalled/petsc
fi
H5PATH=/notinstalled/hdf5

CGNSPATH=none
TEC360PATH=none

find_exec() {
    RETURN_VALUE=0
    for i in ${PATH//:/ }; do
	if [ -e $i/$1 ]; then 
	    RETURN_VALUE=$i
	    break ;
	fi
    done
}

find_lib() {
    RETURN_VALUE=0
    for i in ${LD_LIBRARY_PATH//:/ }; do
	if [ -e $i/lib$1.a ]; then
	    RETURN_VALUE=$i
	    break;
	fi
	if [ -e $i/lib$1.so ]; then
	    RETURN_VALUE=$i
	    break ;
	fi
	if [ -e $i/lib$1.dylib ]; then
	    RETURN_VALUE=$i
	    break ;
	fi
    done
}

OBJDIR=OBJ
ARCH=`uname -s`

COMPILER=gcc

case "$ARCH" in
    IRIX64)
    COMPILER=CC_sgi
    ;;
    *)
    ;;
esac

NO_MPI=0
NO_MPI_DRIVER=0

PREFIX=/usr/local
if [ $# -eq 0 ]; then
    echo "*******************************************************************************"
    echo "** NOTICE!!!!"
    echo "** Usually the option --prefix will be used to specify an installation"
    echo "**  directory.  The default setting for the prefix is \"${PREFIX}\".  If you"
    echo "** want to install into a different directory, use the --prefix option of "
    echo "** configure.  Execute \"./configure --help\" to see more configure options."
    echo "** NOTICE!!!!"
    echo "*******************************************************************************"
fi

MPI_BASE=/notselected

while [ $# -ne 0 ]; do 
    case "$1" in
	--prefix)
	    shift
	    PREFIX=$1
	    ;;
	--prefix\=*)
	    tmp=$1
	    PREFIX=${tmp#--prefix\=}
	    ;;
	--petsc-dir)
	    shift
	    PETSC_BASE=$1
	    ;;
	--petsc-dir\=*)
	    tmp=$1
	    PETSC_BASE=${tmp#--petsc-dir\=}
	    ;;
	--with-petsc)
	    shift
	    PETSC_BASE=$1
	    ;;
	--with-petsc\=*)
	    tmp=$1
	    PETSC_BASE=${tmp#--with-petsc\=}
	    ;;
	--no-metis)
	    METIS_BASE=""
	    METIS_LIBS=""
	    METIS_INCLUDE=""
	    INSTALL_METIS=0
	    USE_METIS=0
	    ;;
	--nometis)
	    METIS_BASE=""
	    METIS_LIBS=""
	    METIS_INCLUDE=""
	    INSTALL_METIS=0
	    USE_METIS=0
	    ;;
	--with-metis)
	    shift
	    METIS_BASE=$1
	    INSTALL_METIS=0
	    ;;
	--with-metis\=*)
	    tmp=$1
	    METIS_BASE=${tmp#--with-metis\=}
	    INSTALL_METIS=0
	    ;;
	--hdf5-dir)
	    shift
	    H5PATH=$1
	    ;;
	--hdf5-dir\=*)
	    tmp=$1
	    H5PATH=${tmp#--hdf5-dir\=}
	    ;;
	--with-hdf5)
	    shift
	    H5PATH=$1
	    ;;
	--with-hdf5\=*)
	    tmp=$1
	    H5PATH=${tmp#--with-hdf5\=}
	    ;;

	--cgns-dir)
	    shift
	    CGNSPATH=$1
	    ;;
	--cgns-dir\=*)
	    tmp=$1
	    CGNSPATH=${tmp#--cgns-dir\=}
	    ;;
	--with-cgns)
	    shift
	    CGNSPATH=$1
	    ;;
	--with-cgns\=*)
	    tmp=$1
	    CGNSPATH=${tmp#--with-cgns\=}
	    ;;

	--tec360-dir)
	    shift
	    TEC360PATH=$1
	    ;;
	--tec360-dir\=*)
	    tmp=$1
	    TEC360PATH=${tmp#--tec360-dir\=}
	    ;;
	--with-tec360)
	    shift
	    TEC360PATH=$1
	    ;;
	--with-tec360\=*)
	    tmp=$1
	    TEC360PATH=${tmp#--with-tec360\=}
	    ;;

	--mpi-dir)
	    shift
	    MPI_BASE=$1
	    ;;
	--mpi-dir\=*)
	    tmp=$1
	    MPI_BASE=${tmp#--mpi-dir\=}
	    ;;
	--with-mpi)
	    shift
	    MPI_BASE=$1
	    ;;
	--with-mpi\=*)
	    tmp=$1
	    MPI_BASE=${tmp#--with-mpi\=}
	    ;;
        --no-mpi-driver)
	    NO_MPI_DRIVER=1
	    ;;
	--compiler)
	    shift
	    COMPILER=$1
	    ;;
	--compiler\=*)
	    tmp=$1
	    COMPILER=${tmp#--compiler\=}
	    ;;
	--obj-dir)
	    shift
	    OBJDIR=$1
	    ;;
	--obj-dir\=*)
	    tmp=$1
	    OBJDIR=${tmp#--obj-dir\=}
	    ;;
	--nompi)
	   NO_MPI=1
	   ;;
	 --help)
	    echo "configure usage:"
	    echo "./configure <options>"
	    echo "where <options> may include"
	    echo "  --prefix <install directory>    : tell configure where to install Loci."
	    echo "  --with-hdf5 <HDF5 directory>     : tell configure where to find HDF5 package."
	    echo "  --with-cgns <CGNS directory>     : tell configure where to find CGNS package."
	    echo "  --with-tec360 <tec360 directory> : tell configure where to find TECIO package."
	    echo "  --with-mpi <MPI directory>      : tell configure where to find MPI package."
	    echo "  --nompi                         : tell configure to build without using MPI"
	    echo "  --with-petsc <PETSc directory>  : tell configure where to find PETSc package."
	    echo "  --with-metis <parMETIS dir>     : tell configure where to find alternative    Parallel METIS package."
	    echo "  --no-metis                      : tell configure not to install or use metis"
	    echo "  --compiler <compiler name>      : tell configure what compiler to use"
	    echo "  --obj-dir <OBJDIR name>         : tell configure where to put object files"
	    echo "  --help                          : output this help information"
	    exit -1
	    ;;
	    
	*)
	    echo configure option \'$1\' not understood!
	    echo use ./configure --help to see correct usage!
	    exit -1 
            break
            ;;
    esac
    shift
done

if [ ${INSTALL_METIS} == 0 ] ; then
GKLIB=""
if [ -f ${METIS_BASE}/lib/libgk.so ] ; then
    GKLIB="-lgk"
fi
if [ -f ${METIS_BASE}/lib/libgk.a ] ; then
    GKLIB="-lgk"
fi
if [ -f ${METIS_BASE}/lib/libgk.dylib ] ; then
    GKLIB="-lgk"
fi
if [ ${USE_METIS} == 0 ] ; then
METIS_LIBS=""
METIS_INCLUDE=""
else
METIS_LIBS="-L\$(METIS_BASE)/lib -lparmetis -lmetis $GKLIB"
METIS_INCLUDE="-I\$(METIS_BASE)/include -DLOCI_USE_METIS"
fi
fi

echo Setup for compiler \"$COMPILER\".
#setup install directory
echo INSTALL_DIR=$PREFIX > sys.conf
echo >> sys.conf

#setup MPI

HAS_MPI=1
MPIEXEC=mpirun
if [ $MPI_BASE == "/notselected" ]; then
    find_exec mpirun
    if [ $RETURN_VALUE == 0 ]; then
	find_exec mpiexec
	MPIEXEC=mpiexec
    fi
    MPI_PATH=$RETURN_VALUE
    if [ $MPI_PATH == 0 ]; then
	HAS_MPI=0
	MPI_PATH="/usr"
    fi
    MPI_C_COMPILER=none
    MPI_CPP_COMPILER=none
    MPI_F90_COMPILER=none
    
    if [ $NO_MPI_DRIVER == 0 ]; then
	if [ -e $MPI_PATH/mpicc ]; then
	    MPI_C_COMPILER=mpicc
	fi
	if [ -e $MPI_PATH/mpif90 ]; then
	    MPI_F90_COMPILER=mpif90
	fi
	if [ -e $MPI_PATH/mpic++ ]; then
	    MPI_CPP_COMPILER=mpic++
	else
	    if [ -e $MPI_PATH/mpicxx ]; then
		MPI_CPP_COMPILER=mpicxx
	    else
		if [ -e $MPI_PATH/mpiCC ]; then
		    MPI_CPP_COMPILER=mpiCC
		fi
	    fi
	fi
    fi

    MPI_BASE=`echo $MPI_PATH | sed "s/\/.[a-zA-Z0-9]*$//"`
else
    MPI_PATH=$MPI_BASE/bin
    MPI_C_COMPILER=none
    MPI_CPP_COMPILER=none
    MPI_F90_COMPILER=none
    
    if [ -e $MPI_PATH/mpicc ]; then
	MPI_C_COMPILER=mpicc
    fi
    if [ -e $MPI_PATH/mpif90 ]; then
	MPI_F90_COMPILER=mpif90
    fi
    if [ -e $MPI_PATH/mpic++ ]; then
	MPI_CPP_COMPILER=mpic++
    else
	if [ -e $MPI_PATH/mpicxx ]; then
	    MPI_CPP_COMPILER=mpicxx
	else
	    if [ -e $MPI_PATH/mpiCC ]; then
		MPI_CPP_COMPILER=mpiCC
	    fi
	fi
    fi
fi

MPI_LIBRARY=""

if [ -e $MPI_BASE/lib/libmpi.a ]; then
    MPI_LIBRARY="-lmpi"
fi
if [ -e $MPI_BASE/lib/libmpi.so ]; then
    MPI_LIBRARY="-lmpi"
fi
if [ -e $MPI_BASE/lib/libmpi.dylib ]; then
    MPI_LIBRARY="-lmpi"
fi

if [ $MPI_LIBRARY=="" ]; then
    
    if [ -e $MPI_BASE/lib/libmpich.a ]; then
	MPI_LIBRARY="-lmpich"
    fi
    if [ -e $MPI_BASE/lib/libmpich.so ]; then
	MPI_LIBRARY="-lmpich"
    fi
    if [ -e $MPI_BASE/lib/libmpich.dylib ]; then
	MPI_LIBRARY="-lmpich"
    fi
fi


echo \# MPI Libraries Setup >> sys.conf
if [ $NO_MPI == 1 ] ; then
    echo "*********************************************************************"
    echo "** Configuring Loci to not use MPI!  This install will not support"
    echo "** parallel processing."
    echo "*********************************************************************"

    echo MPI_BASE = >> sys.conf
    echo MPI_LIBS = >> sys.conf
    echo MPI_INCLUDE = -DMPI_STUBB -I\$\(LOCI_BASE\)/include/MPI_stubb >> sys.conf
    echo MPI_RUN = none >> sys.conf
    echo MPI_C_COMPILER = none >> sys.conf
    echo MPI_CPP_COMPILER = none >> sys.conf
    echo MPI_F90_COMPILER = none >> sys.conf
else
    if [ "$MPI_C_COMPILER" == "none" ]; then
	if [ "$ARCH" == "IRIX64" ]; then
	    echo MPI_BASE = /usr/ >> sys.conf
	    echo MPI_LIBS = -L/usr/lib64 \$\(RPATH\)/usr/lib64 $MPI_LIBRARY >> sys.conf
	    echo MPI_INCLUDE = -DMPI_NO_CPPBIND >> sys.conf
	    echo MPI_RUN = $MPIEXEC >> sys.conf
	else
	    echo MPI_BASE =  $MPI_BASE >> sys.conf
	    echo MPI_LIBS =  -L$MPI_BASE/lib $MPI_LIBRARY >> sys.conf
	    echo MPI_INCLUDE = -DMPI_NO_CPPBIND -I$MPI_BASE/include  >> sys.conf
	    echo MPI_RUN=$MPI_PATH/$MPIEXEC >> sys.conf
	fi
    else
	echo MPI_BASE =  $MPI_BASE >> sys.conf
	echo MPI_LIBS =   >> sys.conf
	echo MPI_INCLUDE = -DMPI_NO_CPPBIND -DMPICH_IGNORE_CXX_SEEK >> sys.conf
	echo MPI_RUN=$MPI_PATH/$MPIEXEC >> sys.conf
    fi
    echo MPI_C_COMPILER = $MPI_C_COMPILER >> sys.conf
    echo MPI_CPP_COMPILER = $MPI_CPP_COMPILER >> sys.conf
    echo MPI_F90_COMPILER = $MPI_F90_COMPILER >> sys.conf
    
fi

echo >> sys.conf

#setup hdf5
# find hdf5

if [ ! -d "$H5PATH" ]; then
    find_exec h5dump
    if [ $RETURN_VALUE != 0 ]; then
	H5PATH=${RETURN_VALUE%/bin*}
    fi
fi

if [ ! -d "$H5PATH" ]; then
    find_lib hdf5
    if [ $RETURN_VALUE != 0 ]; then
	H5PATH=${RETURN_VALUE%/lib*}
    fi
fi
if [ ! -d $H5PATH ]; then
    echo Unable to find hdf5 libararies!
    echo Make sure hdf5 executables are in your PATH and that the library
    echo directories are in your LD_LIBRARY_PATH environment variables
    echo exiting configure in failure!
    exit -1
fi

H5SUPPORTLIBS=-lz
H5SUPPORTLIBSPATHS=
 
if [ -e $H5PATH/lib/libhdf5.settings ]; then
    H5SUPPORTLIBS=`grep "Extra libraries" $H5PATH/lib/libhdf5.settings | sed "s/.*://"`
    H5SUPPORTLIBSPATHS=`grep "AM_LDFLAGS" $H5PATH/lib/libhdf5.settings | sed "s/.*://"`
fi
 
echo \# HDF5 File I/O Libraries Setup >> sys.conf
echo HDF5_BASE = $H5PATH >> sys.conf
echo Using HDF5 libraries in directory \"$H5PATH\".
if [ -e $H5PATH/lib64/libhdf5.so ]; then
    echo HDF5_LIBS = -L\$\(HDF5_BASE\)/lib64 \$\(RPATH\)\$\(HDF5_BASE\)/lib64 -L\$\(HDF5_BASE\)/lib \$\(RPATH\)\$\(HDF5_BASE\)/lib -lhdf5 -lz >> sys.conf
elif [ -e $H5PATH/lib/x86_64-linux-gnu/libhdf5_serial.so ]; then
    echo HDF5_LIBS = -L\$\(HDF5_BASE\)/lib/x86_64-linux-gnu/ \$\(RPATH\)\$\(HDF5_BASE\)/lib/x86_64-linux-gnu -lhdf5_serial -lz >> sys.conf
else
    echo HDF5_LIBS = -L\$\(HDF5_BASE\)/lib -lhdf5 \$\(RPATH\)\$\(HDF5_BASE\)/lib $H5SUPPORTLIBSPATHS $H5SUPPORTLIBS >> sys.conf
fi
if [ -e $H5PATH/lib/x86_64-linux-gnu/libhdf5_serial.so ]; then
   echo HDF5_INCLUDE = -I\$\(HDF5_BASE\)/include/hdf5/serial  >> sys.conf
else
    echo HDF5_INCLUDE = -I\$\(HDF5_BASE\)/include/  >> sys.conf
fi
echo >> sys.conf

echo "# libxml2 library setup" >> sys.conf
XMLPATH=/usr
if [ ! -d $XMLPATH/include/libxml2 ]; then
    find_lib xml2
    if [ $RETURN_VALUE != 0 ]; then
	XMLPATH=${RETURN_VALUE%/lib*}
    fi
fi

if [ -d $XMLPATH/include/libxml2 ]; then
    echo LIBXML2_DEFINE = -DUSE_LIBXML2 >> sys.conf
    if [ -e $XMLPATH/lib64/libxml2.so -o -e $XMLPATH/lib64/libxml2.a ] ; then
	echo LIBXML2_LIBS = -L$XMLPATH/lib64 -L$XMLPATH/lib \$\(RPATH\)$XMLPATH/lib64 \$\(RPATH\)$XMLPATH/lib -lxml2 >> sys.conf
    else
	echo LIBXML2_LIBS = -L$XMLPATH/lib -lxml2 >> sys.conf
    fi
    echo LIBXML2_INCLUDE = -I$XMLPATH/include/libxml2 >> sys.conf
    echo Using libxml2 found in \"$XMLPATH/include/libxml2\".
else
    echo libxml2 not found, disabling XML features!
    echo LIBXML2_DEFINE = >> sys.conf
    echo LIBXML2_LIBS = >> sys.conf
    echo LIBXML2_INCLUDE = >> sys.conf
fi
echo >> sys.conf

echo \# METIS Library Setup >> sys.conf
echo INSTALL_METIS=$INSTALL_METIS >> sys.conf
echo METIS_BASE= $METIS_BASE >> sys.conf
echo METIS_LIBS= $METIS_LIBS >> sys.conf
echo METIS_INCLUDE= $METIS_INCLUDE >> sys.conf

echo >> sys.conf


if [ ! -d $CGNSPATH/include ]; then
    find_lib cgns
    if [ $RETURN_VALUE != 0 ]; then
	CGNSPATH=${RETURN_VALUE%/lib*}
    fi
fi

if [ ! -f $TEC360PATH/lib/libtecio.a ]; then
    find_lib tecio
    if [ $RETURN_VALUE != 0 ]; then
	TEC360PATH=${RETURN_VALUE%/lib*} 
	echo Found tecplot360 IO libraries in $TEC360PATH
    fi
fi


if [ -d $CGNSPATH/include ]; then
    echo Using CGNS library found in $CGNSPATH
    echo # CGNS Library Setup >> sys.conf
    echo CGNS_BASE = $CGNSPATH >> sys.conf
    echo CGNS_INCLUDE = -I\$\(CGNS_BASE\)/include/ -DUSE_CGNS >> sys.conf
    echo CGNS_LIBS = -L\$\(CGNS_BASE\)/lib \$\(RPATH\)\$\(CGNS_BASE\)/lib -lcgns >> sys.conf
    echo >>sys.conf
else
    echo libcgns not found, disabling CGNS features!
    echo CGNS_BASE = >> sys.conf
    echo CGNS_INCLUDE = >> sys.conf
    echo CGNS_LIBS = >> sys.conf
    echo >> sys.conf 
fi

if [ -f $TEC360PATH/lib/libtecio.a ]; then
    echo Using TECPLOT native IO library found in $TEC360PATH
    echo TEC360INCLUDE = -I$TEC360PATH/include -DUSE_NATIVE_TECPLOT >> sys.conf
    echo TEC360LIB = $TEC360PATH/lib/libtecio.a >> sys.conf
else
    echo Note: TECPLOT native IO library not found, older ascii format will be used instead.
    echo If you expected to include TECPLOT support, use --with-tec360 to specify where
    echo tecplot360 is installed.
    echo
    echo TEC360INCLUDE = >> sys.conf
    echo TEC360LIB = >> sys.conf
fi
echo >> sys.conf

echo \# PETSc Library Setup >> sys.conf

if [ ! -d $PETSC_BASE ]; then
    find_lib petsc
    if [ $RETURN_VALUE != 0 ]; then
	PETSC_BASE=${RETURN_VALUE%/lib*}
    fi
fi

if [ -d $PETSC_BASE ]; then
    if [ -e $PETSC_BASE/bmake/petscconf ]; then
# This is the OLD v2 petsc setup
	PETSC_ARCH=`grep PETSC_ARCH $PETSC_BASE/bmake/petscconf | sed s/PETSC_ARCH=//`
	if [ ! -d $PETSC_BASE/bmake/$PETSC_ARCH ]; then 
	    echo Problem with PETSc library setup, check PETSC_DIR
	    echo PETSC_BASE = $PETSC_BASE
	    echo PETSC_ARCH = $PETSC_ARCH
	    rm sys.conf
	    exit -1
	fi
	if [ -e $PETSC_BASE/bmake/$PETSC_ARCH/petscconf ]; then
	    BLASLAPACK_LIB=`egrep ^BLASLAPACK_LIB $PETSC_BASE/bmake/$PETSC_ARCH/petscconf`
	else
	    echo WARNING: Unable to find file $PETSC_BASE/bmake/$PETSC_ARCH/petscconf!
	    BLASLAPACK_LIB=
	fi
	if [ "$BLASLAPACK_LIB" == "" ] ; then
	    echo WARNING: BLAS library paths not extracted from PETSC config files!
	    echo WARNING:  Is PETSC installed properly?
	fi
	echo Using PETSc libraries found in \"$PETSC_BASE\".
	echo PETSC_BASE = $PETSC_BASE >> sys.conf
	echo $BLASLAPACK_LIB >> sys.conf
	echo PETSC_ARCH = $PETSC_ARCH >> sys.conf
	echo PETSC_LIBS = -L\$\(PETSC_BASE\)/lib/\$\(PETSC_ARCH\) \$\(RPATH\)\$\(PETSC_BASE\)/lib/\$\(PETSC_ARCH\) -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc -L\$\(PETSC_BASE\)/externalpackages/fblaslapack/\$\(PETSC_ARCH\) \$\(RPATH\)\$\(PETSC_BASE\)/externalpackages/fblaslapack/\$\(PETSC_ARCH\) \$\(BLASLAPACK_LIB\) >> sys.conf
	echo PETSC_INCLUDE = -I\$\(PETSC_BASE\)/include -I\$\(PETSC_BASE\)/bmake/\$\(PETSC_ARCH\) >> sys.conf
	echo PETSC_DEFINE = -DUSE_PETSC -DPETSC_USE_EXTERN_CXX >> sys.conf
    else
	BLASLAPACK_LIB=
	if [ -e $PETSC_BASE/conf/petscvariables ]; then
	    BLASLAPACK_LIB=`egrep ^BLASLAPACK_LIB $PETSC_BASE/conf/petscvariables`
	else
	    if [ -e $PETSC_BASE/lib/petsc/conf/petscvariables ]; then 
		BLASLAPACK_LIB=`egrep ^BLASLAPACK_LIB $PETSC_BASE/lib/petsc/conf/petscvariables`
	    fi
	fi
	if [ "$BLASLAPACK_LIB" == "" ] ; then
	    set +f
	    if [ -e $PETSC_BASE/arch-*/conf/petscvariables ]; then
		BLASLAPACK_LIB=`egrep ^BLASLAPACK_LIB $PETSC_BASE/arch-*/conf/petscvariables`
	    else 
		echo WARNING: Unable to find file $PETSC_BASE/arch-*/conf/petscvariables!
	    fi
	    set -f	    
	fi
	if [ "$BLASLAPACK_LIB" == "" ] ; then
	    echo WARNING: BLAS library paths not extracted from PETSC config files!
	    echo WARNING:  Is PETSC installed properly?
	fi
	echo Using PETSc libraries found in \"$PETSC_BASE\".
	echo PETSC_BASE = $PETSC_BASE >> sys.conf
	echo $BLASLAPACK_LIB >> sys.conf
	echo PETSC_LIBS = -L\$\(PETSC_BASE\)/lib/ \$\(RPATH\)\$\(PETSC_BASE\)/lib/ -lpetsc \$\(BLASLAPACK_LIB\) >> sys.conf
	echo PETSC_INCLUDE = -I\$\(PETSC_BASE\)/include  >> sys.conf
	echo PETSC_DEFINE = -DUSE_PETSC -DPETSC_USE_EXTERN_CXX >> sys.conf
    fi
else
    echo "# PETSc not found, Loci compiled without PETSc enabled" >> sys.conf
    echo "Warning: PETSc not installed... "
    echo "         Set PETSC_DIR if you want to compile Loci with"
    echo "         the PETSc libraries enabled."
fi


echo >> sys.conf

# check for fortran includes
FORTRAN_LIBS=

if [ "$MPI_C_COMPILER" == "none" ]; then
    echo Selecting compiler = $COMPILER
else
    COMP_TEST=`$MPI_PATH/$MPI_C_COMPILER -show | sed "s/ .*//"`
    if [ -e src/conf/$COMP_TEST.conf ]; then
	COMPILER=$COMP_TEST
	echo Selecting compiler = $COMPILER
    fi
fi
case "$COMPILER" in
    gcc)
    find_exec gfortran
    if [ $RETURN_VALUE != 0 ]; then
	FORTRAN_LIBS=-lgfortran
    else
	find_exec g77
	if [ $RETURN_VALUE != 0 ]; then
	    FORTRAN_LIBS=-lg2c
	fi
    fi
    ;;
    *)
    # Currently only gcc compiler supported in fortran library search
    ;;
esac

case "$ARCH" in
    SunOS)
# SunOS architecture
    # find sunmath.h
    find_exec cc
    CCPATH=$RETURN_VALUE/cc
    CCBASE=${CCPATH%/bin/cc}
    CCINC=$CCBASE/prod/include/cc
    if [ -e $CCINC/sunmath.h ]; then
	echo MISC=-I$CCINC >> sys.conf
	echo MISC_LIBS=-L$CCBASE/lib -lsunmath -lmalloc -lm $FORTRAN_LIBS >> sys.conf
    else
	echo MISC=-DNOSUNMATH >> sys.conf
	echo MISC_LIBS=-lmalloc -lm $FORTRAN_LIBS >> sys.conf
    fi
    ;;
    *)
#everything else
    echo MISC= >> sys.conf
    echo MISC_LIBS=$FORTRAN_LIBS >> sys.conf
    ;;
esac

echo >> sys.conf

echo \# Dynamic Library Defines >> sys.conf

case "$ARCH" in
    Linux)
    echo DYNAMIC_LOADING_DEFINES = >> sys.conf
    echo DYNAMIC_LOADING_LINK = -ldl >> sys.conf
    ;;
    Darwin)
    echo DYNAMIC_LOADING_DEFINES = >> sys.conf
    echo DYNAMIC_LOADING_LINK = -ldl >> sys.conf
    ;;
    IRIX64)
    echo DYNAMIC_LOADING_DEFINES = >> sys.conf
    echo DYNAMIC_LOADING_LINK = -lc >> sys.conf
    ;;
    *)
    echo DYNAMIC_LOADING_DEFINES = >> sys.conf
    echo DYNAMIC_LOADING_LINK =  >> sys.conf
    ;;
esac

echo >> sys.conf

case "$ARCH" in
    Linux)
    USEMAKE=make
    ;;
    Darwin)
    USEMAKE=make
    ;;
    CYGWIN*)
    USEMAKE=make
    ;;
    *)
    USEMAKE=gmake
    ;;
esac    
echo MAKE =$USEMAKE >> sys.conf 

echo >> sys.conf

echo "##############################################" >> sys.conf
echo "# No need to change things below this line" >> sys.conf

echo >> sys.conf

echo "MACHINE_SPECIFIC = \$(PETSC_DEFINE) \$(PETSC_INCLUDE) \$(HDF5_INCLUDE)\\">> sys.conf
echo "                   \$(MPI_INCLUDE) \$(METIS_INCLUDE) \$(CGNS_INCLUDE) \$(MISC)\\" >> sys.conf
echo "                   \$(DYNAMIC_LOADING_DEFINES) " >> sys.conf
echo >> sys.conf
echo "BASE_LIBS = \$(HDF5_LIBS) \$(PETSC_LIBS)  \$(METIS_LIBS) \\" >> sys.conf
echo "            \$(MISC_LIBS) \$(CGNS_LIBS) \$(DYNAMIC_LOADING_LINK) \$(MPI_LIBS)" >> sys.conf


echo Making compile subdirectory ${OBJDIR}...

INSTALL_METIS=$INSTALL_METIS ./tmpcopy --target $OBJDIR --compiler $COMPILER > copy.out
mv sys.conf ${OBJDIR}/sys.conf

# Make makefile
echo "default:" > Makefile
echo "	cd ${OBJDIR}; $USEMAKE" >> Makefile
echo "install:" >> Makefile
echo "	cd ${OBJDIR}; $USEMAKE install" >> Makefile
echo "clean:" >> Makefile
echo "	cd ${OBJDIR}; $USEMAKE clean" >> Makefile
echo "distclean:" >> Makefile
echo "	rm -fr ${OBJDIR} copy.out Makefile" >> Makefile


echo 
echo
echo "To compile Loci, enter:"
echo "  make"
echo "To install Loci in the directory $PREFIX, enter:"
echo "  make install"
