#!/usr/bin/env bash
######################################################################
## Script to generate code coverage using gcov
## -------------------------------------------------------------
## $Id: gencoverage,v 1.1.1.1 2004/06/17 17:30:10 alien Exp $
## -------------------------------------------------------------
##
##
## -- Return Values --------------------------------------------
##    0 : script did run successfully
##    1 : script returned with errors
##
## -- variables ------------------------
##  CURRENT_PWD          : current directory
##  ASTS_PROG_NAME       : name of the executed file
##  MAKEENVROOT          : root directory of the make environment
##
######################################################################

######################################################################
## Parsing command line arguments
######################################################################

export ASTS_PROG_NAME=`basename $0`
export CURRENT_PWD=${PWD};
export MAKEENVROOT=${RTT_TESTCONTEXT}/SUT
export GCOV_OPTS="-b -c"

######################################################################
## Usage function
######################################################################
function print_usage {
  echo 'usage: ${ASTS_PROG_NAME} <TLA>';
  echo "   <TLA>           a string: the TLA of the tested component" ;
 ## ----------------------------------------------------
 exit 80;        
}

## usage: abort_on_error $?;
## $1 is the error code (0 for ok)
## $2 (optional) contains the name of the last external call
function abort_on_error {
  if [ 0 -ne ${1} ]; then
    if [ ! -z "${2}" ]; then
      echo "FAILED IN OPERATION: ${2}" >&2;
    fi
    echo "${ASTS_PROG_NAME}: exiting with code ${1}" >&2;
    cd ${CURRENT_PWD};
    exit ${1};
  fi
}

## ###################################################################
## CHECKING COMMAND LINE ARGUMENTS
## ###################################################################

if [ "$1" == "--help" ] ||
   [ "$1" == "-h" ]; then
   print_usage;
fi

if [ -z "$1" ] ; then
  echo "${ASTS_PROG_NAME}: insufficient number of arguments provided." >&2;
  print_usage;   
fi

if [ -z "$RTT_TESTCONTEXT" ]; then
  echo "${ASTS_PROG_NAME}: required environment variable \$RTT_TESTCONTEXT is undefined." >&2;
  exit 1;
fi

export TLA=$1

######################################################################
## Generating code coverage
######################################################################

export COVDIR=""
cd $MAKEENVROOT
if [ -d $TLA ]; then
	export COVDIR=$MAKEENVROOT/$TLA
fi

if [ -z "$COVDIR" ]; then
    echo "${ASTS_PROG_NAME}: cannot find TLA directory." >&2;
    exit 1;
fi

echo "${ASTS_PROG_NAME}: Generating code coverage for $TLA from $COVDIR ..."
cd $COVDIR
IMPL_FILES=`ls *.c 2>/dev/null`
if [ -z "$IMPL_FILES" ]; then
    echo "${ASTS_PROG_NAME}: the specified directory contains no relevant files." >&2;
    exit 0;
fi

for filename in $(ls *.c); do
    echo "${ASTS_PROG_NAME}: processing file $filename"
    gcov $GCOV_OPTS $filename 
done

######################################################################
## Copy code coverage to test context
######################################################################

cd $RTT_TESTCONTEXT
if [ ! -d $TLA ]; then
    mkdir $TLA
    abort_on_error $? "mkdir $RTT_TESTCONTEXT/$TLA"
fi
cd $TLA
if [ ! -d code-coverage ]; then
    mkdir code-coverage
    abort_on_error $? "mkdir $RTT_TESTCONTEXT/$TLA/code-coverage"
fi
COVTGTDIR=$RTT_TESTCONTEXT/$TLA/code-coverage

cp -a $COVDIR/*.gcov $COVTGTDIR 2>/dev/null;
abort_on_error $? "cp -a $COVDIR/*.gcov $COVTGTDIR"

######################################################################
## End
######################################################################
cd ${CURRENT_PWD}
echo "${ASTS_PROG_NAME}: Generating code coverage completed."


######################################################################
##
## Change History:
##
## $Log: gencoverage,v $
## Revision 1.1.1.1  2004/06/17 17:30:10  alien
## Imported from lehre/ss04/ta/aufgaben/blatt3/rtt/ta-project2, rev. initial_rev_for_series4
##
## Revision 1.2  2004/05/27 10:41:56  alien
## gcov-Optionen fuer Zweigueberdeckung zugefuegt
##
## Revision 1.1.1.1  2004/05/26 09:27:38  alien
## Imported from lehre/ss04/ta/aufgaben/blatt2/rtt/ta-project, rev. initial_rev_for_series3
##
## Revision 1.1  2004/05/06 22:42:26  alien
## Test project PLS inkl. SUT
##
##
######################################################################
