64 lines
1.5 KiB
Bash
Executable File
64 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e -u -x
|
|
|
|
# needs 'gcov' executable and gcovr script installed
|
|
# as well https://github.com/gcovr/gcovr
|
|
|
|
gcovr --version
|
|
jq --version
|
|
sed --version
|
|
mktemp --version
|
|
|
|
REV="${1:-HEAD}"
|
|
|
|
TDIR=`mktemp -d`
|
|
trap 'rm -rf "$TDIR"' EXIT INT QUIT TERM
|
|
|
|
git archive --format tar "$REV" | tar -C "$TDIR" -xv
|
|
|
|
if [ -f configure/RELEASE.local ]
|
|
then
|
|
sed -e "s|\$(TOP)|${PWD}|g" configure/RELEASE.local > "$TDIR/configure"/RELEASE.local
|
|
else
|
|
sed -e "s|\$(TOP)|${PWD}|g" configure/RELEASE > "$TDIR/configure"/RELEASE.local
|
|
fi
|
|
|
|
if [ -f configure/CONFIG_SITE.local ]
|
|
then
|
|
sed -e 's|-Werror||g' configure/CONFIG_SITE.local > "$TDIR/configure"/CONFIG_SITE.local
|
|
fi
|
|
|
|
make -C "$TDIR" -j8 \
|
|
CROSS_COMPILER_TARGET_ARCHS= \
|
|
CMD_CXXFLAGS='-fprofile-arcs -ftest-coverage -O0' \
|
|
CMD_LDFLAGS='-fprofile-arcs -ftest-coverage' \
|
|
test
|
|
|
|
# run tests, which write .gcdc/gcno files
|
|
make -C "$TDIR" -j8 \
|
|
CROSS_COMPILER_TARGET_ARCHS= \
|
|
CMD_CXXFLAGS='-fprofile-arcs -ftest-coverage -O0' \
|
|
CMD_LDFLAGS='-fprofile-arcs -ftest-coverage' \
|
|
runtests
|
|
|
|
OUTDIR="$PWD"/coverage
|
|
install -d "$OUTDIR"
|
|
|
|
# pre-process for each directory, correcting "file" relative to repo root
|
|
for dir in src ioc
|
|
do
|
|
( cd "$TDIR"/$dir/O.linux-* \
|
|
&& gcovr --gcov-ignore-parse-errors -v -r .. --json \
|
|
| jq '.files[].file |= "'${dir}'/" + .' ) \
|
|
> "$TDIR"/${dir}.json
|
|
done
|
|
|
|
# aggregate and summarize
|
|
gcovr \
|
|
--add-tracefile "$TDIR"/src.json \
|
|
--add-tracefile "$TDIR"/ioc.json \
|
|
--html --html-details -o "$OUTDIR"/coverage.html
|
|
|
|
cd "$OUTDIR"
|
|
tar -cavf coverage.tar.bz2 coverage*.html
|