#!/bin/bash

. buildsys/functions

ProcessArgs $*
Assert LoadConfigs
Assert SetupResFile

cd ../../..

if [ "$DEP" != "none" ]
then
   OSPL_HOME=$DEPWORKDIR
   export OSPL_HOME
fi

SPLICE_PLATFORM=$SETUP_TYPE
export SPLICE_PLATFORM
. ./configure -full
if [ "$CONFIGURATION" != "OK" ]
then
    echo "ERROR: configuration - coverage_collect_results"
    exit 1
fi

if [ "${TEST_GCOV}" = "yes" ]
then
   IGNORED_FILES="${OSPL_HOME}/src/tools/idlpp/bld/${SPLICE_HOST}/idl_base \
                  ${OSPL_HOME}/src/tools/cppgen/bld/${SPLICE_HOST}/y_tab \
                  ${OSPL_HOME}/src/tools/cppgen/bld/${SPLICE_HOST}/lex_yy \
                  ${OSPL_HOME}/src/osplcore/bld/${SPLICE_HOST}/q_parser \
                  ${OSPL_HOME}/src/osplcore/bld/${SPLICE_HOST}/c_odlbase \
                  ${OSPL_HOME}/src/osplcore/bld/${SPLICE_HOST}/cfg_parser \
                  ${OSPL_HOME}/src/osplcore/bld/${SPLICE_HOST}/v_parser \
                  ${OSPL_HOME}/src/services/cmsoap/bld/${SPLICE_HOST}/soapC \
                  ${OSPL_HOME}/src/services/cmsoap/bld/${SPLICE_HOST}/stdsoap2 \
                  ${OSPL_HOME}/src/services/cmsoap/bld/${SPLICE_HOST}/soapServer"

    for ifile in ${IGNORED_FILES}
    do
        rm ${ifile}.gcda
        rm ${ifile}.gcno
    done

   lcov -d $OSPL_HOME_NORMALIZED/src -d $OSPL_OUTER_HOME/src -d $OSPL_OUTER_HOME/testsuite/dbt/api/dcps -d $OSPL_OUTER_HOME/testsuite/rbt/services/rmi -c -o $LOGDIR/lcov-raw.info
   lcov -r $LOGDIR/lcov-raw.info "*/INSTALLED*" "/usr/include/*" "*/services/rmi/cpp/bld/*" "*/testsuite/*" -o $LOGDIR/lcov.info
   genhtml -o $LOGDIR/coverage --no-prefix $LOGDIR/lcov.info

   for i in index.html index-sort-b.html index-sort-f.html index-sort-l.html
   do
       if [ -f $LOGDIR/coverage/$i ]
       then
           sed -e s#\>$OSPL_HOME/src#\>\[INNER\]#g -e s#\>$OSPL_HOME_NORMALIZED/src#\>\[INNER\]#g -e s#\>$OSPL_OUTER_HOME/src#\>\[OUTER\]#g < $LOGDIR/coverage/$i > $LOGDIR/tmp.html
           mv $LOGDIR/tmp.html $LOGDIR/coverage/$i
       fi
   done

   echo -n "COVERAGE/GCOV=" >> $RESFILE

   if [ -f $LOGDIR/coverage/index.html ]
   then
      # Get the entries showing coverage totals and smash them into our format.
      GCOV_TOTALS=`grep 'headerCovTableEntry[Lo|Mid|Hi]' $LOGDIR/coverage/index.html | tr -d '\n'  | sed -e 's/[^0-9]*\([0-9][0-9]\)\.[0-9][^0-9]*\([0-9][0-9]\)\.[0-9][^0-9]*\([0-9][0-9]\)\.[0-9][^0-9]*/L:\1%_F:\2%_B:\3%/g'`
      echo $GCOV_TOTALS | grep -q 'L:[0-9][0-9]%_F:[0-9][0-9]%_B:[0-9][0-9]%'
      if [ $? = 1 ]
      then
         # Doesn't look right. Maybe we don't have branch coverage info.
         GCOV_TOTALS=`grep 'headerCovTableEntry[Lo|Mid|Hi]' $LOGDIR/coverage/index.html | tr -d '\n'  | sed -e 's/[^0-9]*\([0-9][0-9]\)\.[0-9][^0-9]*\([0-9][0-9]\)\.[0-9][^0-9]*/L:\1%_F:\2%/g'`
         echo $GCOV_TOTALS | grep -q 'L:[0-9][0-9]%_F:[0-9][0-9]%'
         if [ $? = 1 ]
         then
            # Not that either. Something's gone awry.
            echo FAILED >> $RESFILE
         else
            echo $GCOV_TOTALS >> $RESFILE
         fi
      else
         echo $GCOV_TOTALS >> $RESFILE
      fi
   else
      echo FAILED >> $RESFILE
   fi
else
    echo "COVERAGE/GCOV=SKIPPED" >> $RESFILE
fi

if [ "${TEST_JACOCO}" = "yes" ]
then
   java -jar ${JACOCO_HOME}/lib/org.jacoco.operator.jar report --input-srcs ${OSPL_HOME}/src/api/dcps/java/cj/code ${OSPL_HOME}/src/api/dcps/java/cj/bld/code/${SPLICE_HOST} ${OSPL_HOME}/src/api/dcps/java/common/java/code --input-builds ${OSPL_HOME}/jar/${SPLICE_HOST}/dcpscj.jar --html-output ${LOGDIR}/jcoverage/dcpscj --input-file ${OSPL_OUTER_HOME}/Results/jacoco.exec.corba
   java -jar ${JACOCO_HOME}/lib/org.jacoco.operator.jar report --input-srcs ${OSPL_HOME}/src/api/dcps/java/saj/code ${OSPL_HOME}/src/api/dcps/java/saj/bld/code/${SPLICE_HOST} ${OSPL_HOME}/src/api/dcps/java/common/java/code --input-builds ${OSPL_HOME}/jar/${SPLICE_HOST}/dcpssaj.jar --html-output ${LOGDIR}/jcoverage/dcpssaj --input-file ${OSPL_OUTER_HOME}/Results/jacoco.exec.standalone
#   java -jar ${JACOCO_HOME}/lib/org.jacoco.operator.jar report --input-srcs ${OSPL_OUTER_HOME}/src/tools/cm/tuner/code --input-builds ${OSPL_HOME}/jar/${SPLICE_HOST}/ospltun.jar --html-output ${LOGDIR}/jcoverage/ospltun --input-file ${OSPL_OUTER_HOME}/Results/jacoco.exec.tuner
#   java -jar ${JACOCO_HOME}/lib/org.jacoco.operator.jar report --input-srcs ${OSPL_OUTER_HOME}/src/tools/cm/tester/src/main/java --input-builds ${OSPL_HOME}/jar/${SPLICE_HOST}/ospltest.jar --html-output ${LOGDIR}/jcoverage/ospltest --input-file ${OSPL_OUTER_HOME}/Results/jacoco.exec.tester
   java -jar ${JACOCO_HOME}/lib/org.jacoco.operator.jar report --input-srcs ${OSPL_OUTER_HOME}/src/services/rmi/java/code ${OSPL_OUTER_HOME}/src/services/rmi/java/bld/code/${SPLICE_HOST} --input-builds ${OSPL_HOME}/jar/${SPLICE_HOST}/ddsrmi.jar --html-output ${LOGDIR}/jcoverage/ddsrmi --input-file ${OSPL_OUTER_HOME}/Results/jacoco.exec.rmi

   INDEX=${LOGDIR}/jcoverage/index.html
   CJRES='??'

   echo '<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><title>Coverage summary</title></head><body>' > ${INDEX}
   echo '<h2>Java coverage summary</h2>' >> ${INDEX}
   echo '<table border=1><tr><th>JAR</th><th>Instructions</th></tr>' >> ${INDEX}
   mv ${LOGDIR}/DBT-Results/jcoverage-java5/ ${LOGDIR}/jcoverage/java5/

   for i in `find ${LOGDIR}/jcoverage/* -maxdepth 0 -type d -printf '%f '`
   do
      INSTS=`sed -e 's/.*Total<\/td><td class="bar">[0-9,]* of [0-9,]*<\/td><td class="ctr2">\([0-9]*\)%.*/\1/' < ${LOGDIR}/jcoverage/${i}/index.html`
      if [ ${i} = dcpscj ]
      then
         CJRES=${INSTS}
      fi
      if [ ${i} = java5 ]
      then
         JAVA5RES=${INSTS}
      fi
      echo "<tr><td><a href=${i}/index.html>${i}</a></td><td>${INSTS}%</td></tr>" >> ${INDEX}
   done
   echo '</table>' >> ${INDEX}
   echo '</body>' >> ${INDEX}

   echo "COVERAGE/JACOCO=CJ:${CJRES}%_JAVA5:${JAVA5RES}%" >> ${RESFILE}
else
   echo "COVERAGE/JACOCO=SKIPPED" >> $RESFILE
fi
