#!/bin/bash 
#########################################################################
# Defaults
#########################################################################
hostname=`hostname`
install_dir=$(pwd)
netcdf_home="/usr/local/netcdf"
hdf5_home="/usr/local/hdf5"
if [ -d /usr/lib64/openmpi ] ; then
  mpi_home="/usr/lib64/openmpi"
else
  mpi_home="/usr"
fi
arch="local"
#xios_branch="trunk"
xios_branch="2.6"
#xios_rev="HEAD"
xios_rev="2568"

#########################################################################
#  Options 
#########################################################################
while (($# > 0))
   do
   case $1 in
     "-h") cat <<........fin
    $0 [ -prefix path ]       where (path) to install
                              (default: $install_dir)
       [ -netcdf path ]       top directory of the netcdf library
                              (default: $netcdf_home)
       [ -hdf5 path ]         top directory of the hdf5 library
                              (default: $hdf5_home)
       [ -MPI path ]          top directory of the MPI library
                              (default: $mpi_home)
       [ -branch branch]      XIOS branch trunk|2.5|2.6
                              (default: $xios_branch)
       [ -rev number ]        XIOS revision
                              (default: $xios_rev)
       [ -arch ARCH ]         Use ARCH file (provided by XIOS)
                              (default: make/use a local arch file)
........fin
     exit ;;
     "-prefix") install_dir=$2 ; shift ; shift ;;
     "-netcdf") netcdf_home=$2 ; shift ; shift ;;
     "-hdf5" ) hdf5_home=$2 ; shift ; shift ;;
     "-MPI") mpi_home=$2 ; shift ; shift ;;
     "-branch") xios_branch=$2 ; shift ; shift ;;
     "-rev") xios_rev=$2 ; shift ; shift ;;
     "-arch") arch=$2 ; shift ; shift ;;
     *) echo "Error, bad argument $1" ; $0 -h ; exit
   esac
done

# Install directory (get full path)
mkdir -p $install_dir
install_dir=$(cd $install_dir ; pwd -P )

# Download XIOS
case $xios_branch in
  "trunk")
  xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk" ;;
  "2.5")
  xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/branchs/xios-2.5" ;;
  "2.6")
  xios_http="http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS2/branches/xios-2.6" ;;
*)
echo "Error, bad argument for -branch ! Did not expect $xios_branch" ; exit ;;
esac

cd $install_dir
svn co --revision $xios_rev $xios_http XIOS

# Make arch files, if necesary:
if [ "$arch" = "local" ] ; then
cd $install_dir/XIOS/arch
# arch-local.env
echo 'export MPI_LIB="-L'${mpi_home}'/lib -lmpi"'     > arch-local.env
echo ''                                              >> arch-local.env
echo 'export NETCDFC='${netcdf_home}                 >> arch-local.env
echo 'export NETCDFC_LIB=$NETCDFC/lib'               >> arch-local.env
echo 'export NETCDFC_INC=$NETCDFC/include'           >> arch-local.env
echo ''                                              >> arch-local.env
echo 'export NETCDFF='${netcdf_home}                 >> arch-local.env
echo 'export NETCDFF_LIB=$NETCDFF/lib'               >> arch-local.env
echo 'export NETCDFF_INC=$NETCDFF/include'           >> arch-local.env
echo ''                                              >> arch-local.env
echo 'export NETCDFCXX='${netcdf_home}               >> arch-local.env
echo 'export NETCDFCXX_LIB=$NETCDFCXX/lib'           >> arch-local.env
echo 'export NETCDFCXX_INC=$NETCDFCXX/include'       >> arch-local.env

# arch-local.fcm
echo '%CCOMPILER      '${mpi_home}'/bin/mpicc'             > arch-local.fcm
echo '%FCOMPILER      '${mpi_home}'/bin/mpif90'           >> arch-local.fcm
echo '%LINKER         '${mpi_home}'/bin/mpif90'           >> arch-local.fcm
echo ''                                                   >> arch-local.fcm
if [ ${hostname:0:5} = cicla ] ; then
echo '%BASE_CFLAGS    -w -ansi'                >> arch-local.fcm
else
echo '%BASE_CFLAGS    -w -std=c++11 -D__XIOS_EXCEPTION'   >> arch-local.fcm
fi
echo '%PROD_CFLAGS    -O3 -D BOOST_DISABLE_ASSERTS'       >> arch-local.fcm
echo '%DEV_CFLAGS     -g -O2'                             >> arch-local.fcm
echo '%DEBUG_CFLAGS   -g -DBZ_DEBUG'                      >> arch-local.fcm
echo ''                                                   >> arch-local.fcm
echo '%BASE_FFLAGS    -D__NONE__ -ffree-line-length-none' >> arch-local.fcm
echo '%PROD_FFLAGS    -O3'                                >> arch-local.fcm
echo '%DEV_FFLAGS     -g -O2'                             >> arch-local.fcm
echo '%DEBUG_FFLAGS   -g'                                 >> arch-local.fcm
echo ''                                                   >> arch-local.fcm
echo '%BASE_INC       -D__NONE__'                         >> arch-local.fcm
echo '%BASE_LD        -lstdc++ -Wl,-rpath='${mpi_home}'/lib' >> arch-local.fcm
echo ''                                                   >> arch-local.fcm
echo '%CPP            '${mpi_home}'/bin/mpicc -EP'        >> arch-local.fcm
echo '%FPP            cpp -P'                             >> arch-local.fcm
echo '%MAKE           make'                               >> arch-local.fcm

# arch-local.path
echo 'NETCDF_INCDIR="-I${NETCDFC_INC} -I${NETCDFF_INC} -I${NETCDFCXX_INC} "'  > arch-local.path
echo 'NETCDF_LIBDIR="-L${NETCDFC_LIB} -L${NETCDFF_LIB} -L${NETCDFCXX_LIB} "' >> arch-local.path
echo 'NETCDF_LIB="-lnetcdf -lnetcdff -lnetcdf_c++4"'                         >> arch-local.path
echo 'HDF5_INCDIR="-I'${hdf5_home}'/include"'                                >> arch-local.path
echo 'HDF5_LIBDIR="-L'${hdf5_home}'/lib"'                                    >> arch-local.path
echo 'HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz -lcurl"'                         >> arch-local.path
fi

# make XIOS
cd $install_dir/XIOS
./make_xios --arch $arch --job 8 2>&1 | tee make_xios.out

