#! /bin/sh
#
# Script to perform a single coverage test run on a single BSP
# in a specific configuration. This script automates all steps
# of building RTEMS, running the tests, and generating the reports.
#
vfile=`dirname $0`/VERSIONS-COVERAGE
if [ ! -r ${vfile} ] ; then
echo VERSIONS-COVERAGE file not found
exit 1
fi
source ${vfile}
if [ ! -d ${BASEDIR} ] ; then
echo Have you set the BASEDIR in VERSIONS correctly?
exit 1
fi
progname=${0##*/} # fast basename hack for ksh, bash
USAGE="
usage: $progname [ -opts ]
-v -- verbose (default=no)
-d -- analyze Core Configuration (default=yes)
-D -- analyze Developmental Configuration (default=yes)
-A -- Execute all steps (default=no)
-B BSP -- Specify BSP to test
-P -- Enable POSIX API (default=yes)
-S -- Optimize for size (default=no)
-m -- Update and build covMerge (default=no)
-u -- Do CVS update on RTEMS (default=no)
-c -- Configure RTEMS (default=no)
-b -- Build RTEMS (default=no)
-C -- get tests from build to test execution point (default=no)
-L -- do not link files to test execution point (default=link)
-r -- run the tests (default=no)
-R -- generate reports (default=no)
-g -- generate GCOV reports (default=no)
-f -- publish the results to ftp site (default=no)
-t -- save the results locally (default=no)
-O -- output directory (default=BSP-CONF-YYYYMMDD-HHMM)
-p -- project name (default empty)
Notes: + There are currently NO checks at each step to determine if
the previous steps were performed!!!
+ Use of each option toggles the setting. For example, \"-v -v -A -u\"
results in verbose=no and all steps done except CVS update on RTEMS."
# log an error to stderr
prerr()
{
echo "$*" >&2
}
fatal() {
prerr "$USAGE"
[ "$1" ] && (prerr ; prerr $*);
exit 1
}
check_status()
{
if [ $1 -ne 0 ] ; then
shift
echo "FAILED: " "$*" >&2
exit 1
fi
}
toggle()
{
case $1 in
no) echo "yes" ;;
yes) echo "no" ;;
*) fatal "Unknown value to toggle ($1)" ;;
esac
}
# parse arguments for these
verbose="no"
do_all="no"
do_posix="yes"
do_optimize_size="no"
do_covoar="no"
do_rtems_update="no"
do_rtems_configure="no"
do_rtems_build="no"
do_copy_tests="no"
do_link_tests="yes"
do_run_tests="no"
do_generate_gcov="no"
do_reports="no"
do_publish="no"
do_save_tarballs="yes"
do_core="yes"
do_developmental="yes"
outputDir=""
BSP="not_set"
while getopts vB:PSmAucbCLrgRftO:dD OPT
do
case "$OPT" in
A)
do_all="yes"
do_covoar="yes"
do_posix="yes"
do_rtems_update="yes"
do_rtems_configure="yes"
do_rtems_build="yes"
do_copy_tests="yes"
do_run_tests="yes"
do_reports="yes"
;;
d) do_core=`toggle ${do_core}` ;;
D) do_developmental=`toggle ${do_developmental}` ;;
B) BSP="${OPTARG}";;
O) outputDir="${OPTARG}";;
v) verbose=`toggle ${verbose}` ;;
m) do_covoar=`toggle ${do_covoar}` ;;
P) do_posix=`toggle ${do_posix}` ;;
S) do_optimize_size=`toggle ${do_optimize_size}` ;;
u) do_rtems_update=`toggle ${do_rtems_update}` ;;
c) do_rtems_configure=`toggle ${do_rtems_configure}` ;;
b) do_rtems_build=`toggle ${do_rtems_build}` ;;
C) do_copy_tests=`toggle ${do_copy_tests}` ;;
L) do_link_tests=`toggle ${do_link_tests}` ;;
r) do_run_tests=`toggle ${do_run_tests}` ;;
g) do_generate_gcov=`toggle ${do_generate_gcov}` ;;
R) do_reports=`toggle ${do_reports}` ;;
f) do_publish=`toggle ${do_publish}` ;;
t) do_save_tarballs=`toggle ${do_save_tarballs}` ;;
*) fatal;;
esac
done
# If we are to update or configure RTEMS, then we need to clean the
# RTEMS build tree up.
do_clean="no"
if [ ${do_rtems_update} = "yes" -o \
${do_rtems_configure} = "yes" ] ; then
do_clean="yes"
fi
# allow bsp override
if [ ${BSP} == "not_set" ] ; then
fatal "No BSP selected"
fi
# you can't publish unless ftp directory is accessible
if [ ${do_publish} = "yes" ] ; then
if [ ! -d ${FTPDIR} ] ; then
fatal "Publishing results requested and ${FTPDIR} does not exist"
fi
fi
# For most BSPs, there is a script with the same name as the BSP.
RUNNER=${BSP}
RTEMSEXT=${DEFAULT_EXEEXT}
COVEXT=cov
case ${BSP} in
pc386)
CPU=i386
COVERAGE_FORMAT=QEMU
RTEMS_EXTRA_ARGS="USE_COM1_AS_CONSOLE=1"
RTEMS_EXTRA_ARGS="${RTEMS_EXTRA_ARGS} BSP_PRESS_KEY_FOR_RESET=0"
RTEMSEXT=exe
;;
uC5282)
CPU=m68k
COVERAGE_FORMAT=QEMU
RTEMSEXT=exe
COVEXT=tra
;;
qemuppc)
RTEMSEXT=ralf
CPU=powerpc
COVERAGE_FORMAT=QEMU
;;
lm32_evr)
CPU=lm32
COVERAGE_FORMAT=QEMU
RTEMSEXT=exe
COVEXT=tra
RUNNER=qemu-lm32_evr
RTEMS_EXTRA_ARGS="ON_SIMULATOR=1"
;;
erc32|leon2|leon3)
CPU=sparc
COVERAGE_FORMAT=TSIM
;;
edb7312|rtl22xx|gumstix|smdk2410)
CPU=arm
COVERAGE_FORMAT=Skyeye
RTEMS_EXTRA_ARGS="ON_SKYEYE=1"
;;
*)
fatal "Unsupported BSP (${BSP}) for coverage analysis."
;;
esac
case ${RTEMS_VERSION} in
4.5*) TARGET=${CPU}-rtems ;;
4.6*) TARGET=${CPU}-rtems ;;
4.7*) TARGET=${CPU}-rtems4.7 ;;
4.8*) TARGET=${CPU}-rtems4.8 ;;
4.9*) TARGET=${CPU}-rtems4.9 ;;
4.10*) TARGET=${CPU}-rtems4.10 ;;
4.11*) TARGET=${CPU}-rtems4.11 ;;
*)
fatal "Unknown RTEMS Version (${RTEMS_VERSION})" ;;
esac
##### VERBOSE
print_verbose()
{
echo "BSP: " ${BSP}
echo "Target: " ${TARGET}
echo "Compiler version: " `${TARGET}-gcc --version | grep gcc`
echo "do_optimize_size: " ${do_optimize_size}
echo "Optimization Level: " ${c_opt}
echo "POSIX Enabled: " ${do_posix}
echo "Core Configuration " ${do_core}
echo "Developmental Code: " ${do_developmental}
echo "do_all: " ${do_all}
echo "do_covoar " ${do_covoar}
echo "do_rtems_update: " ${do_rtems_update}
echo "do_rtems_configure: " ${do_rtems_configure}
echo "do_rtems_build: " ${do_rtems_build}
echo "do_copy_tests: " ${do_copy_tests}
echo "do_link_tests: " ${do_link_tests}
echo "do_run_tests: " ${do_run_tests}
echo "do_generate_gcov: " ${do_generate_gcov}
echo "do_reports: " ${do_reports}
echo "do_publish: " ${do_publish}
echo "do_save_tarballs: " ${do_save_tarballs}
echo "Clean Before: " ${do_clean}
echo "Executable Extension: " ${RTEMSEXT}
echo "Coverage Extension: " ${COVEXT}
}
if [ ${do_optimize_size} = yes ] ; then
c_opt=-Os
else
c_opt=-O2
fi
if [ ${do_core} = "no" -a ${do_developmental} = "no" ]; then
fatal "No symbol configurations to analyze selected"
fi
if [ ${verbose} = "yes" ] ; then
print_verbose
fi
# Basic error checking and sanity checking on the directory structure
# and PATH
if [ ! -d ${COVBASE} ] ; then
echo "The directory you specified for the base of the coverage run is "
echo "not present. (${COVBASE})"
exit 1
fi
if [ ! -d ${RTEMSDIR} ] ; then
echo "${RTEMSDIR} not found!!!"
exit 1
fi
type ${TARGET}-gcc
check_status $? "Path appears to be broken"
# Start real action
NM=${TARGET}-nm
type ${NM}
check_status $? "Cannot find ${NM} on PATH"
# Locate the custom file
custom=${RTEMSDIR}/make/custom/${BSP}.cfg
if [ ! -r ${custom} ] ; then
custom=`ls -1 \
${RTEMSDIR}/c/src/lib/libbsp/${CPU}/*/make/custom/${BSP}.cfg 2>/dev/null`
check_status $? "unable to find a custom file"
if [ x${custom} = x -o ! -r ${custom} ] ; then
echo "Unable to read ${custom}"
exit 1
fi
fi
grep "^CFLAGS_OPTIMIZE_V.*=.*-O[s01234].*" ${custom} >/dev/null
if [ $? -ne 0 ] ; then
echo "Unable to find CFLAGS_OPTIMIZE_V in ${custom}"
exit 1
fi
EXTENSION=${c_opt}
if [ ${do_posix} = yes ] ; then
EXTENSION=${EXTENSION}P
else
EXTENSION=${EXTENSION}p
fi
year=`date +%Y`
day=`date +%Y%m%d`
hour=`date +%H`
minute=`date +%M`
echo "Testing ${TARGET}/${BSP} at optimization (${c_opt})"
# print a data element in table
print_element()
{
echo "
"${*}" | "
}
# generate table row of results in html
generate_html()
{
summary=$1
echo ""
print_element ${day}
print_element ${hour}:${minute}
print_element ${c_opt}
print_element ${do_posix}
print_element ${analyze_developmental}
print_element `grep "Uncovered range" ${summary} | cut -d ':' -f2`
print_element `grep "age Not Exec" ${summary} | cut -d ':' -f2`
print_element `grep "age Exec" ${summary} | cut -d ':' -f2`
print_element `grep "Bytes Not Exec" ${summary} | cut -d ':' -f2`
print_element `grep "Bytes Analyzed" ${summary} | cut -d ':' -f2`
print_element "untarred " \
"tarball "
echo "
"
}
add_to_summary()
{
unref=${results_dir}/sizes_unreferenced.txt
echo
unreffed=`cat ${unref} | wc -l`
echo "Symbols unreferenced: " ${unreffed}
if [ ${unreffed} = 0 ] ; then
size_of=0
else
size_of=`cut -f1 ${unref} | sed -e '2,$s/$/ +/' -e '$,$s/$/ p/' | dc`
fi
echo "Bytes in unreferenced symbols : " ${size_of}
}
generate_size_per_file()
{
total=0
pfile=X
cut -d':' -f1 ${results_dir}/sizes_all.txt | sort -k3 | while read line
do
size=`echo $line | cut -d' ' -f1`
file=`echo $line | cut -d' ' -f3`
#echo $size XXX $file
if [ $file != $pfile ] ; then
if [ $pfile != X ]; then
echo $total $pfile
total=0
fi
pfile=$file
fi
#echo ADD $file $total $size `expr $total + $size`
total=`expr $total + $size`
done | sort -n -r
}
# generate the coverage report set
generate_reports()
{
if [ $# -ne 3 ] ; then
echo Usage: ${0} TARGET BSP COVERAGE_FORMAT
exit 1
fi
TARGET=${1}
BSP=${2}
COVERAGE_FORMAT=${3}
cd ${BASEDIR}/${BSP}-tests/
check_status $? "cd ${BSP}-tests"
sed -e "s/@FORMAT@/${COVERAGE_FORMAT}/" \
-e "s/@TARGET@/${TARGET}/" \
-e "s,@EXPLANATIONS@,${COVBASE}/Explanations.txt," \
-e "s,@SYMBOLS_FILE@,${BASEDIR}/${BSP}-tests/rtems.syms," \
-e "s,@OUTPUT_DIRECTORY@,${results_dir}," \
-e "s/@EXECUTABLE_EXTENSION@/exe/" \
-e "s/@COVERAGE_EXTENSION@/${RTEMSEXT}.${COVEXT}/" \
-e "s,@GCNOS_LIST@,${rtems_gcnos_file}," \
-e "s/@PROJECT_NAME@/RTEMS ${RTEMS_VERSION}/" \
<${COVBASE}/rtems_config.in \
>${BASEDIR}/${BSP}-tests/config
check_status $? "Unable to generate COVOAR config file"
rm -rf ${results_dir}
mkdir ${results_dir}
covoar -C ${BASEDIR}/${BSP}-tests/config \
*.exe
check_status $? "covoar failed"
# This should be made obsolete by sortable tables.
#(echo "====== Largest Range Sizes (Size and Count)======" ; \
# grep ^Size uncovered.txt | cut -d':' -f2 | sort -n | uniq -c | \
# tail -15 | sed -e 's/ *\([0-9]*\) *\([0-9]*\)/\2 \1/' | sort -n -r | \
# while read l; do printf "%6d %6d\n" $l; done ; \
# echo "=====================================" ) >>summary.txt
check_endof >${results_dir}/testsWithNoEndOfTest.txt
# Generate the configuration settings file
(
echo "#"
echo "# Settings for this coverage test run"
echo "#"
echo
print_verbose
) >${results_dir}/configuration.txt
RTEMSLIB=${BASEDIR}/b-${BSP}/${TARGET}/${BSP}/lib/librtemscpu.a
if [ -r ${RTEMSLIB} ] ; then
while read symbol
do
line=`${TARGET}-nm --format=sysv \
${BASEDIR}/b-${BSP}/${TARGET}/${BSP}/lib/librtemscpu.a | \
grep FUNC | sed -e's/|/ | /g' | grep ${symbol}`
size=`echo ${line} | cut -d'|' -f5 | tr "[:lower:]" "[:upper:]"`
size=`echo 16 i ${size} p | dc`
echo "${size} ${symbol} unknown"
done <${results_dir}/no_range_uncovered.txt | sort -n -r \
>${results_dir}/sizes_unreferenced.txt
fi
cat ${results_dir}/sizes_unreferenced.txt ${results_dir}/sizes.txt | \
sort -n -r >${results_dir}/sizes_all.txt
generate_size_per_file >${results_dir}/size_per_file.txt
generate_html ${results_dir}/summary.txt >${results_dir}/row.html
add_to_summary >>${results_dir}/summary.txt
cat ${results_dir}/summary.txt ${results_dir}/testsWithNoEndOfTest.txt
mv ${results_dir}/index.html ${results_dir}/index.html.tmp
sed -f ${COVBASE}/rtems_items.sed \
<${results_dir}/index.html.tmp \
>${results_dir}/index.html
# Now create the archive of information
cp ${COVOARBASE}/covoar.css ${COVOARBASE}/*gif ${COVOARBASE}/table.js ${results_dir}
echo "Results saved in ${results_dir}.tar.bz2"
tar cjf ${results_dir}.tar.bz2 ${results_dir}
}
# This grabs the list of methods from a library or object file
filter_nm()
{
for l in $*
do
if [ -r ${l} ] ; then
test ${verbose} = "yes" && echo Generating symbols from ${l} >&2
# echo "========= START $l"
${TARGET}-nm --format=sysv $l | grep "FUNC|" | \
cut -d'|' -f1 | sed -e 's/ *$//' -e "s,$, ${l},"
# echo "========= END $l"
# no else
# We keep a complete CURRENT list and some are not in old versions
fi
done
}
# generate the list of symbols to analyze
generate_symbols()
{
case ${RTEMS_VERSION} in
4.5*|4.6*)
cd ${BASEDIR}/b-${BSP}/${TARGET}/c/${BSP}/exec
check_status $? "could not cd to object directory"
subd=o-optimize/
;;
*)
cd ${BASEDIR}/b-${BSP}/${TARGET}/c/${BSP}/cpukit
check_status $? "could not cd to object directory"
subd=
;;
esac
case ${RTEMS_VERSION} in
4.5*)
filter_nm wrapup/rtems/o-optimize/librtems.a
if [ ${do_posix} = "yes" ] ; then
filter_nm wrapup/posix/o-optimize/libposix.a
fi
if [ ${analyze_developmental} = "yes" ] ; then
filter_nm ../lib/libc/${subd}libcsupport.a
filter_nm ../lib/libmisc/wrapup/${subd}libmisc.a
fi
;;
*) # 4.6 or newer
# Base set of libraries to analyse. Do NOT include libscorecpu.a!!!
filter_nm score/${subd}libscore.a
filter_nm sapi/${subd}libsapi.a
filter_nm rtems/${subd}librtems.a
# Now add the POSIX API onto that
if [ ${do_posix} = "yes" ] ; then
filter_nm posix/${subd}libposix.a
fi
# Now add developmental libraries
# NOTE: all non-network libraries are listed here. --joel 5 March 2010
if [ ${analyze_developmental} = "yes" ] ; then
filter_nm libfs/${subd}librfs.a
filter_nm libfs/${subd}libdosfs.a
filter_nm libfs/${subd}libdevfs.a
filter_nm libfs/${subd}libimfs.a
filter_nm libcsupport/${subd}libcsupport.a
# filter_nm libi2c/${subd}libi2c.a
# filter_nm zlib/${subd}libz.a
# filter_nm libmd/${subd}libmd.a
# filter_nm libmisc/${subd}libshell.a
filter_nm libmisc/${subd}libbspcmdline.a
filter_nm libmisc/${subd}libcpuuse.a
# filter_nm libmisc/${subd}libuuid.a
filter_nm libmisc/${subd}libstackchk.a
# filter_nm libmisc/${subd}libmw-fb.a
# NEVER INCLUDE libdummy.a!!!
# filter_nm libmisc/${subd}libdummy.a
filter_nm libmisc/${subd}libfsmount.a
filter_nm libmisc/${subd}libstringto.a
filter_nm libmisc/${subd}libdevnull.a
# filter_nm libmisc/${subd}libcapture.a
filter_nm libmisc/${subd}libdumpbuf.a
# filter_nm libmisc/${subd}libmonitor.a
# filter_nm libmisc/${subd}libserdbg.a
# filter_nm libmisc/${subd}libuntar.a
filter_nm libblock/${subd}libblock.a
fi
;;
esac
}
# remove symbols we do not want coverage on.
remove_unwanted_symbols()
{
# cat
# sed -e '/IMFS_print_node/d' \
# -e '/IMFS_dump_directory/d' \
# -e '/IMFS_dump/d' \
# -e '/IMFS_memfile_maximum_size/d'
sed -e '/rtems_shell_debugrfs/d' \
-e '/rtems_rfs_shell_/d'
}
# Now we are ready to start doing real work
start=`date`
# If necessary, clean up the RTEMS build and test run directories
if [ ${do_clean} = "yes" ] ; then
echo "Cleaning before building"
rm -rf ${BASEDIR}/b-${BSP}
rm -rf ${BASEDIR}/${BSP}-tests
else
echo "Skipping clean before building"
fi
# If they don't exist, create the RTEMS build and test run directories
test -d ${BASEDIR}/b-${BSP} || mkdir ${BASEDIR}/b-${BSP}
test -d ${BASEDIR}/${BSP}-tests || mkdir ${BASEDIR}/${BSP}-tests
# If requested, update and build the coverage support tools
if [ ${do_covoar} = "yes" ] ; then
echo "Updating and building covoar..."
cd ${COVBASE}/../covoar
check_status $? "cd covoar"
cvs up -Pd 2>&1 | grep -v ^cvs
make clean all
check_status $? "build covoar"
make
check_status $? "make covoar"
else
echo "Skipping Updating and building covoar..."
fi
# If requested, update the RTEMS tree
if [ ${do_rtems_update} = "yes" ] ; then
echo "Updating RTEMS ..."
cd ${RTEMSDIR}
check_status $? "cd rtems"
cvs up -Pd 2>&1 | grep -v ^cvs
./bootstrap -c
./bootstrap
else
echo "Skipping Updating RTEMS ..."
fi
# If requested, configure RTEMS
if [ ${do_rtems_configure} = "yes" ] ; then
# Now let's patch the make/custom file
cat ${custom} |
sed -e '/^CFLAGS_OPTIMIZE_V.*=.*-ftest-coverage -finline-functions -g/d' \
-e "s/-O[0123s]/${c_opt}/" |
if [ ${do_generate_gcov} = "yes" ] ; then
sed -e \
'/^CFLAGS_OPTIMIZE_V/a CFLAGS_OPTIMIZE_V += -ftest-coverage -finline-functions -g'
else
cat
fi >${custom}.tmp
mv ${custom}.tmp ${custom}
echo "Configuring RTEMS..."
rm -rf ${BASEDIR}/b-${BSP}/
mkdir ${BASEDIR}/b-${BSP}/
cd ${BASEDIR}/b-${BSP}/
check_status $? "cd b-${BSP}"
##################
################## WARNING!!!!!!
##################
################## BE CAREFUL ABOUT THIS CONFIGURE COMMAND. IT IS
################## VERY SPECIFIC TO COVERAGE TESTING
##################
if [ ${do_posix} = "yes" ] ; then
posix_en=en
else
posix_en=dis
fi
if [ ${RTEMS_VERSION} = 4.5 ] ; then
${RTEMSDIR}/configure \
--target=${TARGET} --enable-rtemsbsp=${BSP} \
--enable-maintainer-mode \
--disable-itron --${posix_en}able-posix --enable-tests \
--disable-networking --disable-ada --disable-cxx \
--prefix=${BASEDIR}/coverage/install >c.log 2>&1
else
${RTEMSDIR}/configure NDEBUG=1 \
RTEMS_DO_NOT_INLINE_THREAD_ENABLE_DISPATCH=1 \
RTEMS_DO_NOT_INLINE_CORE_MUTEX_SEIZE=1 \
RTEMS_DO_NOT_UNROLL_THREADQ_ENQUEUE_PRIORITY=1 \
${RTEMS_EXTRA_ARGS} \
--target=${TARGET} --enable-rtemsbsp=${BSP} \
--enable-maintainer-mode \
--disable-itron --${posix_en}able-posix --enable-tests \
--disable-networking --disable-ada --disable-cxx \
--prefix=${BASEDIR}/coverage/install >c.log 2>&1
fi
check_status $? "configuring RTEMS for ${BSP}"
else
echo "Skipping Configuring RTEMS ..."
fi
# If requested, build RTEMS
if [ ${do_rtems_build} = "yes" ] ; then
echo "Building RTEMS..."
cd ${BASEDIR}/b-${BSP}/
check_status $? "cd b-${BSP}"
case ${RTEMS_VERSION} in
4.5*|4.6*)
sleep 5 # 4.5 on chroot'ed env needs this for some reason
make >b.log 2>&1
;;
*)
cpus=`/usr/bin/getconf _NPROCESSORS_ONLN`
make -j${cpus} >b.log 2>&1
;;
esac
check_status $? "Building RTEMS for ${BSP}"
else
echo "Skipping Building RTEMS ..."
fi
# If requested, copy the tests from the build tree to the run tree
if [ ${do_copy_tests} = "yes" ] ; then
echo "Copying tests..."
# clean destination
rm -rf ${BASEDIR}/${BSP}-tests/*
check_status $? "clean test directory"
cd ${BASEDIR}/b-${BSP}/
check_status $? "cd b-${BSP}"
find `pwd` -name "*.ralf" -o -name "*.exe" | while read f
do
rm -f ../${BSP}-tests/`basename ${f}`
if [ ${do_link_tests} = "yes" ] ; then
ln -s ${f} ../${BSP}-tests
else
cp ${f} ../${BSP}-tests
fi
done
else
echo "Skipping copying tests..."
fi
# If requested prepare data to create gcov reports
if [ ${do_generate_gcov} = "yes" ] ; then
echo "Preparing data for gcov reports..."
cd ${BASEDIR}/b-${BSP}/
check_status $? "cd b-${BSP}"
rtems_gcnos_file="${BASEDIR}/${BSP}-tests/rtems.gcnos"
find `pwd` -name \*.gcno >${rtems_gcnos_file}
check_status $? "Preparing data for gcov reports for for ${BSP}"
else
rtems_gcnos_file="/dev/null"
echo "Skipping creating gcov reports ..."
fi
# If requested, run the tests with coverage reporting enabled
if [ ${do_run_tests} = "yes" ] ; then
echo "Running tests..."
cd ${BASEDIR}/${BSP}-tests/
check_status $? "cd ${BSP}-tests"
time ${RUNNER} -c *.${RTEMSEXT}
else
echo "Skipping Running tests..."
fi
# If requested, generate the coverage reports
if [ ${do_reports} = "yes" ] ; then
echo "Generating reports..."
cd ${BASEDIR}/${BSP}-tests/
check_status $? "cd ${BSP}-tests"
to_analyze=""
if [ ${do_core} = "yes" ] ; then
to_analyze="${to_analyze} no"
fi
if [ ${do_developmental} = "yes" ]; then
to_analyze="${to_analyze} yes"
fi
for analyze_developmental in ${to_analyze}
do
if [ ${analyze_developmental} = yes ] ; then
echo "Processing coverage for developmental configuration ..."
EXT=${EXTENSION}D
else
echo "Processing coverage for core source configuration ..."
EXT=${EXTENSION}d
fi
if [ "X${outputDir}" = "X" ] ; then
results_dir=${BSP}${EXT}-${day}-${hour}${minute}
else
results_dir=${outputDir}
fi
generate_symbols | sort -u | remove_unwanted_symbols \
>${BASEDIR}/${BSP}-tests/rtems.syms
syms=`cat ${BASEDIR}/${BSP}-tests/rtems.syms | wc -l`
if [ ${syms} -eq 0 ] ; then
fatal "no symbols found"
fi
generate_reports ${TARGET} ${BSP} ${COVERAGE_FORMAT}
done
else
echo "Skipping Generating reports..."
fi
# If requested, publish the coverage reports
if [ ${do_publish} = "yes" -o ${do_save_tarballs} = "yes" ] ; then
if [ -d ${BASEDIR}/${BSP}-tests ] ; then
cd ${BASEDIR}/${BSP}-tests/
if [ ${do_publish} = "yes" ] ; then
cp ${BSP}${EXTENSION}[dD]-${day}-${hour}${minute}.tar.bz2 ${FTPDIR}
check_status $? "cp ${BSP} results to ftp site failed"
${COVBASE}/generate_coverage_html ${FTPDIR}
fi
if [ ${do_save_tarballs} = "yes" ] ; then
if [ ! -d ${TARDIR} ] ; then
echo "Creating ${TARDIR}"
mkdir -p ${TARDIR}
check_status $? "Failed to mkdir ${TARDIR}"
fi
cp ${BSP}${EXTENSION}[dD]-${day}-${hour}${minute}.tar.bz2 ${TARDIR}
check_status $? "cp ${BSP} results to save directory"
fi
else
echo "No results to publish or save"
fi
else
echo "Skipping Publishing reports..."
fi
stop=`date`
echo "Started: " ${start}
echo "Stopped: " ${stop}
exit 0