#!/bin/bash
#
# File tarscript: Script to build SUNDIALS tar-files.
# Author: Radu Serban @ LLNL
# Version of 08 August 2003
#

#==============================================================================
#
# Prints usage if help was requested or if the script was incorrectly called
#
#==============================================================================

function print_usage
{
    # Location of tarballs
    cd ../..
    location=`pwd`
    cd -

    # Print help message
    echo ""
    echo "Usage: tarscript [-hsv] [module]"
    echo "   -h       : help"
    echo "   -s       : short (no documentation)"
    echo "   -q       : quiet"
    echo "   module   : all, sundials, arkode, cvode, cvodes, ida, idas, kinsol"
    echo ""
    echo "Notes: If the module is not specified, all tarballs are created."
    echo "       This script must be executed from within its directory."
    echo "       Tarballs will be created in $location"
    echo ""
    exit 1
}

#==============================================================================
#
# MAIN SCRIPT
#
#==============================================================================

#---------------------------------------------------------
# VERSION NUMBERS
#---------------------------------------------------------

SUN_VER="4.1.0"
CV_VER="4.1.0"
CVS_VER="4.1.0"
IDA_VER="4.1.0"
IDAS_VER="3.1.0"
KIN_VER="4.1.0"
ARK_VER="3.1.0"

#---------------------------------------------------------
# Test if the script is executed from within its directory
#---------------------------------------------------------
scriptbase=`basename $0`
if [ ! -f "$scriptbase" ] ; then
    print_usage
fi

#-------------
# Define flags
#-------------
err=F   # Error flag
hlp=F   # Help flag
doc=T   # Documentation flag
quiet=F # Quiet flag

#----------------
# Process options
#----------------
while getopts ":hsq" name ; do
    case $name in
        h) hlp=T;;
        s) doc=F;;
        q) quiet=T;;
        ?) echo "Invalid option"; err=T;;
    esac
done

#------------------------------
# Extract argument (module name)
#------------------------------
shift $(($OPTIND - 1))
module=$1

#------------
# Test module
#------------
do_sundials=F
do_arkode=F
do_cvode=F
do_cvodes=F
do_ida=F
do_idas=F
do_kinsol=F

if [ -z $module ]; then
    module="all"
    do_sundials=T
    do_arkode=T
    do_cvode=T
    do_cvodes=T
    do_ida=T
    do_idas=T
    do_kinsol=T
else
    case $module in
        all)
            do_sundials=T
            do_arkode=T
            do_cvode=T
            do_cvodes=T
            do_ida=T
            do_idas=T
            do_kinsol=T
            ;;
        sundials)
            do_sundials=T
            ;;
        arkode)
            do_arkode=T
            ;;
        cvode)
            do_cvode=T
            ;;
        cvodes)
            do_cvodes=T
            ;;
        ida)
            do_ida=T
            ;;
        idas)
            do_idas=T
            ;;
        kinsol)
            do_kinsol=T
            ;;
        *)
            echo "Invalid module $module"
            err=T
    esac
fi

#------------
# Print usage
#------------
if [ $err = "T" -o $hlp = "T" ]; then
    print_usage
fi

#------------
# tar command
#------------
if [ "$quiet" = "T" ]; then
    tar="tar -uhf"
else
    tar="tar -uvhf"
fi

#------------------
# Define some names
#------------------

# Location of the scripts
scriptdir=`pwd`
cd ..
# Sundials directory
sundialsdir=`pwd`
# Location of tarballs
cd ..
rootdir=`pwd`

tmpdir=$rootdir/tmp_dir.$$

#---------------------------
# Create temporary directory
#---------------------------
echo -e "\n--- Create temporary directory ---"
echo "copy $sundialsdir to $rootdir/$tmpdir"
rm -rf $tmpdir
mkdir $tmpdir
mkdir $tmpdir/include
mkdir $tmpdir/src
mkdir $tmpdir/doc
mkdir $tmpdir/examples

#----------------------------------
# Copy appropriate files in $tmpdir
# and create additional files as needed
#----------------------------------

cp $sundialsdir/LICENSE $tmpdir/
cp $sundialsdir/NOTICE $tmpdir/
cp $sundialsdir/README.md $tmpdir/
cp $sundialsdir/CONTRIBUTING.md $tmpdir/
#cp $sundialsdir/INSTALL_NOTES $tmpdir/
#cp $sundialsdir/config.hin $tmpdir/
#cp $sundialsdir/configure.ac $tmpdir/configure.ac
#cp $sundialsdir/acinclude.m4 $tmpdir/
cp $sundialsdir/doc/Makefile.in $tmpdir/doc/
cp $sundialsdir/CMakeLists.txt $tmpdir/


# Make install guide and copy to $tmpdir
echo -e "--- SUNDIALS Common Installation documentation"
cd $sundialsdir/doc/sundials
make QUIET= purge
make QUIET= in_g_pdf
cp $sundialsdir/doc/sundials/install_guide.pdf $tmpdir/INSTALL_GUIDE.pdf
# cleanup doc/sundials
make QUIET= purge

cd -
cp -r $sundialsdir/config $tmpdir/
cp -r $sundialsdir/test $tmpdir/

cp -r $sundialsdir/include/sundials $tmpdir/include/
cp -r $sundialsdir/include/nvector $tmpdir/include/
cp -r $sundialsdir/include/sunmatrix $tmpdir/include/
cp -r $sundialsdir/include/sunlinsol $tmpdir/include/
cp -r $sundialsdir/include/sunnonlinsol $tmpdir/include/

cp    $sundialsdir/src/CMakeLists.txt $tmpdir/src/
cp -r $sundialsdir/src/sundials $tmpdir/src/
cp -r $sundialsdir/src/nvector $tmpdir/src/
cp -r $sundialsdir/src/sunmatrix $tmpdir/src/
cp -r $sundialsdir/src/sunlinsol $tmpdir/src/
cp -r $sundialsdir/src/sunnonlinsol $tmpdir/src/

cp -r $sundialsdir/doc/sundials $tmpdir/doc/

cp -r $sundialsdir/bin $tmpdir/

cp    $sundialsdir/examples/CMakeLists.txt $tmpdir/examples/
cp -r $sundialsdir/examples/nvector $tmpdir/examples/
cp -r $sundialsdir/examples/sunmatrix $tmpdir/examples/
cp -r $sundialsdir/examples/sunlinsol $tmpdir/examples/
cp -r $sundialsdir/examples/sunnonlinsol $tmpdir/examples/
cp -r $sundialsdir/examples/templates $tmpdir/examples/

#cd $tmpdir
#echo -e "\n--- Generate configure script ---"
#aclocal --force
#autoconf --force -o configure configure.ac
#autoheader --force
#cd -

# Don't release MATLAB until brought current with new version(s)
#if [ $do_sundials = "T" ]; then
#    cp -r $sundialsdir/sundialsTB $tmpdir/
#    cp -r $sundialsdir/sundialsTB/doc $tmpdir/doc/sundialsTB
#fi

if [ $do_sundials = "T" -o $do_arkode = "T" ]; then
    cp -r $sundialsdir/include/arkode $tmpdir/include/
    cp -r $sundialsdir/src/arkode $tmpdir/src/
    cp -r $sundialsdir/doc/arkode $tmpdir/doc/
    cp -r $sundialsdir/examples/arkode $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- ARKODE documentation"
        cd $tmpdir/doc/arkode
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
    #doc="F"
fi

if [ $do_sundials = "T" -o $do_cvode = "T" ]; then
    cp -r $sundialsdir/include/cvode $tmpdir/include/
    cp -r $sundialsdir/src/cvode $tmpdir/src/
    cp -r $sundialsdir/doc/cvode $tmpdir/doc/
    cp -r $sundialsdir/examples/cvode $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- CVODE documentation"
        cd $tmpdir/doc/cvode
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
fi

if [ $do_sundials = "T" -o $do_cvodes = "T" ]; then
    cp -r $sundialsdir/include/cvodes $tmpdir/include/
    cp -r $sundialsdir/src/cvodes $tmpdir/src/
    cp -r $sundialsdir/doc/cvodes $tmpdir/doc/
    cp -r $sundialsdir/examples/cvodes $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- CVODES documentation"
        cd $tmpdir/doc/cvodes
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
fi

if [ $do_sundials = "T" -o $do_ida = "T" ]; then
    cp -r $sundialsdir/include/ida $tmpdir/include/
    cp -r $sundialsdir/src/ida $tmpdir/src/
    cp -r $sundialsdir/doc/ida $tmpdir/doc/
    cp -r $sundialsdir/examples/ida $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- IDA documentation"
        cd $tmpdir/doc/ida
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
fi

if [ $do_sundials = "T" -o $do_idas = "T" ]; then
    cp -r $sundialsdir/include/idas $tmpdir/include/
    cp -r $sundialsdir/src/idas $tmpdir/src/
    cp -r $sundialsdir/doc/idas $tmpdir/doc/
    cp -r $sundialsdir/examples/idas $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- IDAS documentation"
        cd $tmpdir/doc/idas
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
fi

if [ $do_sundials = "T" -o $do_kinsol = "T" ]; then
    cp -r $sundialsdir/include/kinsol $tmpdir/include/
    cp -r $sundialsdir/src/kinsol $tmpdir/src/
    cp -r $sundialsdir/doc/kinsol $tmpdir/doc/
    cp -r $sundialsdir/examples/kinsol $tmpdir/examples/
    if [ $doc = "T" ]; then
        echo -e "--- KINSOL documentation"
        cd $tmpdir/doc/kinsol
        make QUIET= purge
        make QUIET= ug_pdf
        make QUIET= ex_pdf
        cd -
    fi
fi



#---------------------------
# Create tar files
#---------------------------

# Initial name of the directory to be archived
distrobase="$tmpdir"


# SUNDIALS
if [ $do_sundials = "T" ]; then
    echo -e "\n--- Generate SUNDIALS tarball ---"

    mv $distrobase sundials-$SUN_VER
    distrobase="sundials-"$SUN_VER
    filename="sundials-"$SUN_VER

    tarfile=$filename".tar"
    echo "$scriptdir/shared $tarfile $distrobase $tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/arkode $tarfile $distrobase $doc $tar
    $scriptdir/cvode $tarfile $distrobase $doc $tar
    $scriptdir/cvodes $tarfile $distrobase $doc $tar
    $scriptdir/ida $tarfile $distrobase $doc $tar
    $scriptdir/idas $tarfile $distrobase $doc $tar
    $scriptdir/kinsol $tarfile $distrobase $doc $tar

    ### Don't release MATLAB until brought current with new version(s)
    # $scriptdir/stb $tarfile $distrobase $doc $tar

    gzip $tarfile
fi

# ARKODE
if [ $do_arkode = "T" ]; then
    echo -e "\n--- Generate ARKODE tarball ---"

    mv $distrobase arkode-$ARK_VER
    distrobase="arkode-"$ARK_VER
    filename="arkode-"$ARK_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/arkode $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

# CVODE
if [ $do_cvode = "T" ]; then
    echo -e "\n--- Generate CVODE tarball ---"

    mv $distrobase cvode-$CV_VER
    distrobase="cvode-"$CV_VER
    filename="cvode-"$CV_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/cvode $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

# CVODES
if [ $do_cvodes = "T" ]; then
    echo -e "\n--- Generate CVODES tarball ---"

    mv $distrobase cvodes-$CVS_VER
    distrobase="cvodes-"$CVS_VER
    filename="cvodes-"$CVS_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/cvodes $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

# IDA
if [ $do_ida = "T" ]; then
    echo -e "\n--- Generate IDA tarball ---"

    mv $distrobase ida-$IDA_VER
    distrobase="ida-"$IDA_VER
    filename="ida-"$IDA_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/ida $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

# IDAS
if [ $do_idas = "T" ]; then
    echo -e "\n--- Generate IDAS tarball ---"

    mv $distrobase idas-$IDAS_VER
    distrobase="idas-"$IDAS_VER
    filename="idas-"$IDAS_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/idas $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

# KINSOL
if [ $do_kinsol = "T" ]; then
    echo -e "\n--- Generate KINSOL tarball ---"

    mv $distrobase kinsol-$KIN_VER
    distrobase="kinsol-"$KIN_VER
    filename="kinsol-"$KIN_VER

    tarfile=$filename".tar"
    $scriptdir/shared $tarfile $distrobase $tar
    $scriptdir/kinsol $tarfile $distrobase $doc $tar
    gzip $tarfile
fi

#---------------------------
# Remove temporary directory
#---------------------------

rm -rf $distrobase

#du -h *.tar.gz

exit 1

# That's all folks...
