#!/bin/ksh
set -x
domainHome=$1
packageHome=$2
profileDirPath=${packageHome}/etc/profile.d
packageFullName=${packageHome##*/}
packageNameVersion=${packageFullName%_*}
packageName=${packageNameVersion%%_*}
packageVersion=${packageNameVersion##*_}
packageArch=${packageFullName##*_}

cd ${packageHome}

mkdir bin 2>/dev/null
cp .ssm.d/r.pkg-config bin/r.${packageName}_${packageArch}-config

#==== Check dependencies [Should be done in pre-install... not an ssm feature]
if [[ x$EC_ARCH = x ]] ; then
    echo "ERROR: EC_ARCH not defined, must provide an ARCH/Compiler"
    exit 1
fi

version=$(r.${packageName}_all-config --version 2>/dev/null)
if [[ x"$version" != x"${packageVersion}" ]] then
    echo "ERROR: cannot install, missing package all or wrong version: $version"
    exit 1
fi

#packageAllName=${packageName}_${packageVersion}_all
#packageAllHome=${domainHome}/$packageAllName
#if [[ ! -d ${packageAllHome} ]] ; then
#    echo "ERROR: cannot install, missing package: $packageAllHome"
#    exit 1
#fi


#==== Compile libs

checkobj(){
    _malib=$1
    _name=$2
    cnt=0
    errorlist=""
    for i in `ls *.ftn* *.cdk90 *.c *.cpp 2> /dev/null` ; do
        f=`echo $i | sed 's/\.ftn.*//' | sed 's/\.cdk90//' | sed 's/\.cpp//' | sed 's/\.c//' `
        if [ ! -s ${_malib}/$f.o ] ; then
            errorlist="$errorlist $i"
            echo "MISSING ${_malib}/$f.o: $(ls $i) : $(ls ${_malib}/$f.o 2>/dev/null)"
            let cnt=cnt+1
        fi
    done
    if [[ cnt -gt 0 ]] ; then
        echo "ERROR: Problem with $errorlist"
        echo "---- ABORT ----"
        exit 1
    else
        echo "Obj for ${_name}: $(ls -1 ${_malib}/*.o 2>/dev/null|wc -l) [src: $(ls -1 *.ftn* *.cdk90 *.c *.cpp 2>/dev/null|wc -l) ]"
    fi

}

#rcspath="`${packageAllHome}/bin/r.${packageName}_all-config --rcspath`"
rcspath="$(r.${packageName}_all-config --rcspath 2>/dev/null)"
packageAllHome=$(echo ${rcspath%%:*})
packageAllHome=$(echo ${packageAllHome%/*})

#TODO: add support for many EC_ARCH (compiler version)
#BASE_ARCH=${BASE_ARCH:-`uname -s`}
#for mycomppkg in `ls ${domainHome}/compiler_${BASE_ARCH}-*` ; do
#    mycomp=`echo ${mycomppkg} | cut -d_ -f2`
#    mycomp=${mycomp##*-}
#
#    . r.ssmuse.dot $mycomp

   LIBDIR=${packageHome}/lib/$EC_ARCH
   mkdir -p ${LIBDIR} 2>/dev/null
   MODDIR=${packageHome}/include/$EC_ARCH
   mkdir -p ${MODDIR} 2>/dev/null

   production_date="$(date '+%Y-%m-%d %H:%M %Z')"
   chmod u+w $MODDIR
   cat > ${MODDIR}/${packageName}_version.inc << EOF
       character(len=50),parameter :: MODELUTILS_NAME_S = 'MODELUTILS'
       character(len=50),parameter :: MODELUTILS_VERSION_S = '${packageVersion}'
       character(len=50),parameter :: MODELUTILS_DSTP_S = '${production_date}'
       character(len=50),parameter :: MODELUTILS_EC_ARCH_S = '${EC_ARCH}'
EOF


    MALIB=malib${EC_ARCH}

    liblist=$(ls -d ${packageAllHome}/RCS_*)

    for item in $liblist ; do
        rcsname=${item##*/}
        partname=$(echo ${rcsname#*_} | tr 'A-Z' 'a-z')
        libname=${packageName}_$partname
#        if [[ x$partname != xstubs && x$partname != xmonitor ]] ; then
        if [[ x$partname != xmassvp7_wrap || x${BASE_ARCH} == xAIX-powerpc7 ]] ; then

            cd ${TMPDIR:-/tmp}
            chmod -R u+w tmpwkdir$$
            /bin/rm -rf tmpwkdir$$
            mkdir tmpwkdir$$
            cd tmpwkdir$$
            ouv_exp base -RCSPATH $rcspath #${packageAllHome}/RCS ${packageAllHome}/$rcsname
            r.make_exp
            mkdir -p ${MALIB}
            #make genlib
            cd ${packageAllHome}/src/$partname
            cp * ${TMPDIR:-/tmp}/tmpwkdir$$
            cd ${TMPDIR:-/tmp}/tmpwkdir$$
            cp ${MODDIR}/${packageName}_version.inc .
            make objloc
            
            set +x
            checkobj ${MALIB} $libname
            set -x
            
            #TODO: check that needed .mod are present
            
            /bin/rm -f ${LIBDIR}/lib${libname}.a
            r.ar rv ${LIBDIR}/lib${libname}.a ${MALIB}/*.o
            if [[ ! -r ${LIBDIR}/lib${libname}.a ]] ; then
                echo "ERROR lib not Found: ${LIBDIR}/lib${libname}.a"
                exit 1
            fi
            
            cp ${MALIB}/*.[mM][oO][dD] ./*.[mM][oO][dD]  $MODDIR 2>/dev/null

            chmod -R u+w tmpwkdir$$
            /bin/rm -rf tmpwkdir$$

        fi
    done
    
    #support older ARCH names
    here=`pwd`
    #EC_ARCH_OLD=$(echo $EC_ARCH | tr '/' '_')
    #EC_ARCH_NEW=$(echo $EC_ARCH | tr '_' '/')
    EC_ARCH_OLD=${BASE_ARCH}_${COMP_ARCH}
    EC_ARCH_NEW=${BASE_ARCH}/${COMP_ARCH}
    for mydir in ${packageHome}/lib ${packageHome}/include ; do
       cd $mydir
       mkdir -p $EC_ARCH_NEW 2>/dev/null
       rmdir $EC_ARCH_NEW 2>/dev/null
       mv -f $EC_ARCH $EC_ARCH_NEW 2>/dev/null
       /bin/rm -f $EC_ARCH_OLD
       ln -s ./$EC_ARCH/. $EC_ARCH_OLD
    done
    cd $here

    #merge libs
    here=`pwd`
    cd $LIBDIR
    liblist=$(ls -1 *.a)

    OBJDIR=${TMPDIR:-/tmp}/tmpwkdir$$
    /bin/rm -rf $OBJDIR 2>/dev/null
    mkdir -p $OBJDIR
    cd $OBJDIR
    for item in $liblist ; do
       domerge=1
       [[ x$(echo $item | grep ${packageName}_massvp7_wrap.a) != x ]] && domerge=0
       [[ x$(echo $item | grep ${packageName}_main.a) != x ]] && domerge=0
       [[ x$(echo $item | grep _stubs.a) != x ]] && domerge=0
       [[ x$(echo $item | grep _tests.a) != x ]] && domerge=0
       # [[ x$(echo $item | grep ${packageName}_utils.a) != x ]] && domerge=0
       # [[ x$(echo $item | grep ${packageName}_v4d.a) != x ]] && domerge=0
        if [[ x$domerge == x1 ]] ; then
            r.ar xv $LIBDIR/$item
            /bin/rm -f $LIBDIR/$item
        fi
    done

    libname=${packageName}
    /bin/rm -f ${LIBDIR}/lib${libname}.a
    #for item in $(ls *.o) ; do
      #  r.ar rv ${LIBDIR}/lib${libname}.a $item   
    #done
    r.ar rv ${LIBDIR}/lib${libname}.a *.o
    cd $here
    /bin/rm -rf $OBJDIR 2>/dev/null

#done


exit 0 #success

