From 375925dba8a003526b300c65616a8dbab184e14d Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sat, 24 Feb 2018 21:05:17 +0100 Subject: [PATCH] Import a code coverage test Disabled by default for the moment. --- tests/coverage.sh | 126 +++++++++++++++++++++++++++++++++++++++++++++ tests/project.conf | 8 ++- 2 files changed, 133 insertions(+), 1 deletion(-) create mode 100755 tests/coverage.sh diff --git a/tests/coverage.sh b/tests/coverage.sh new file mode 100755 index 0000000..26c41a9 --- /dev/null +++ b/tests/coverage.sh @@ -0,0 +1,126 @@ +#!/bin/sh +#$Id$ +#Copyright (c) 2018 Pierre Pronchery +#This file is part of DeforaOS System libSystem +#All rights reserved. +# +#Redistribution and use in source and binary forms, with or without +#modification, are permitted provided that the following conditions are +#met: +# +#1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +#2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +#IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +#TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +#PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +#HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +#SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +#TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +#PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +#LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +#NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +#variables +CFLAGS= +LDFLAGS= +PROGNAME="coverage.sh" +TARGET="tests.log" +#executables +CC="gcc -fprofile-arcs -ftest-coverage" +DATE="date" +FIND="find" +GCOV="gcov" +MAKE="make" +MKDIR="mkdir -p" +MKTEMP="mktemp" +RM="rm -f" + + +#coverage +_coverage() +{ + #create a temporary directory + tmpdir=$($MKTEMP -d) + if [ $? -ne 0 ]; then + return 2 + fi + #build the project in a separate directory + $MKDIR "$tmpdir/src" "$tmpdir/tests" "$tmpdir/tools" && + (cd ../src && $MAKE CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" OBJDIR="$tmpdir/src/") && + (cd ../tools && $MAKE CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" OBJDIR="$tmpdir/tools/") && + $MAKE CC="$CC" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" OBJDIR="$tmpdir/tests/" "$tmpdir/tests/$TARGET" + res=$? + #look for any code executed + $FIND "$tmpdir" -name '*.gcda' | while read filename; do + echo + echo "${filename%.gcda}.c:" + $GCOV -n "${filename%.gcda}.gcno" + #TODO output the GCOV file + done + $RM -r -- "$tmpdir" + return $res +} + + +#date +_date() +{ + if [ -n "$SOURCE_DATE_EPOCH" ]; then + TZ=UTC $DATE -d "@$SOURCE_DATE_EPOCH" '+%a %b %d %T %Z %Y' + else + $DATE + fi +} + + +#usage +_usage() +{ + echo "Usage: $PROGNAME [-c] target..." 1>&2 + return 1 +} + + +#main +clean=0 +while getopts "cP:" name; do + case "$name" in + c) + clean=1 + ;; + P) + #XXX ignored + ;; + ?) + _usage + exit $? + ;; + esac +done +shift $((OPTIND - 1)) +if [ $# -eq 0 ]; then + _usage + exit $? +fi + +while [ $# -ne 0 ]; do + target="$1" + shift + + [ "$clean" -eq 0 ] || break + + (_date; echo) > "$target" + echo "Gathering test coverage:" 1>&2 + _coverage >> "$target" || exit 2 + echo "Gathered test coverage" 1>&2 +done +exit 0 diff --git a/tests/project.conf b/tests/project.conf index bf37b4e..25a4d52 100644 --- a/tests/project.conf +++ b/tests/project.conf @@ -1,4 +1,4 @@ -targets=amd64.o,arm.o,armeb.o,armel.o,dalvik.o,fixme.log,i386.o,i386_real.o,i486.o,i586.o,i686.o,mips.o,mipseb.o,mipsel.o,java.o,pylint.log,sparc.o,sparc64.o,template.o,tests.log,yasep.o,yasep16.o,yasep32.o +targets=amd64.o,arm.o,armeb.o,armel.o,coverage.log,dalvik.o,fixme.log,i386.o,i386_real.o,i486.o,i586.o,i686.o,mips.o,mipseb.o,mipsel.o,java.o,pylint.log,sparc.o,sparc64.o,template.o,tests.log,yasep.o,yasep16.o,yasep32.o as=$(OBJDIR)../tools/asm-static dist=Makefile,pylint.sh,python.sh,tests.sh @@ -34,6 +34,12 @@ sources=armel.asm [armel.asm] depends=arm.asm,$(OBJDIR)../tools/asm-static$(EXEEXT) +[coverage.log] +type=script +script=./coverage.sh +enabled=0 +depends=coverage.sh + [dalvik.o] type=object asflags=-a dalvik -f flat