|
|
#! /bin/sh |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
clang_report=0 |
|
|
nomalloc=0 |
|
|
|
|
|
while [ $# -gt 0 ] ; do |
|
|
case $1 in |
|
|
nomalloc|-nomalloc) nomalloc=1;; |
|
|
clang|-clang|clang-report|-clang-report) clang_report=1;; |
|
|
*) echo "Unknown option or test selector '$1'"; exit 1;; |
|
|
esac |
|
|
shift |
|
|
done |
|
|
|
|
|
LLVM_VER=`clang --version | head -n1 | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | cut -d. -f1` |
|
|
echo "(Using LLVM version $LLVM_VER)" |
|
|
echo "" |
|
|
|
|
|
rm -f coverage-*.profraw coverage.profdata coverage-lcov.info coverage-lcov.filtered.info |
|
|
[ -d testdata ] || rm -f ../coverage-*.profraw |
|
|
rm -rf coverage-html |
|
|
|
|
|
echo "== Running all tests with CTest ==" |
|
|
LLVM_PROFILE_FILE="coverage-%m.profraw" ctest -j1 --output-on-failure |
|
|
echo "" |
|
|
|
|
|
if [ "$nomalloc" -eq 0 ]; then |
|
|
echo "== Re-running pcre2test with -malloc ==" |
|
|
LLVM_PROFILE_FILE="coverage-%m.profraw" srcdir=.. pcre2test=./pcre2test ../RunTest -malloc |
|
|
echo "" |
|
|
fi |
|
|
|
|
|
|
|
|
echo "== Merging coverage data ==" |
|
|
PROF_FILES="coverage-*.profraw" |
|
|
[ -d testdata ] || PROF_FILES="$PROF_FILES ../coverage-*.profraw" |
|
|
llvm-profdata-$LLVM_VER merge -sparse $PROF_FILES -o coverage.profdata |
|
|
echo "" |
|
|
|
|
|
if [ "$clang_report" -eq 1 ]; then |
|
|
echo "== Generating Clang coverage report ==" |
|
|
llvm-cov-$LLVM_VER show \ |
|
|
-format=html \ |
|
|
-show-line-counts-or-regions -show-branches=percent \ |
|
|
-instr-profile=coverage.profdata \ |
|
|
./pcre2test -object ./pcre2grep -object ./pcre2posix_test -object ./pcre2_jit_test \ |
|
|
-sources ../src/ ./ \ |
|
|
-output-dir=coverage-html |
|
|
echo "" |
|
|
|
|
|
else |
|
|
|
|
|
echo "== Generating LCOV report ==" |
|
|
llvm-cov-$LLVM_VER export \ |
|
|
-format=lcov \ |
|
|
-instr-profile=coverage.profdata \ |
|
|
./pcre2test -object ./pcre2grep -object ./pcre2posix_test -object ./pcre2_jit_test \ |
|
|
-sources ../src/ ./ \ |
|
|
> ./coverage-lcov.info |
|
|
echo "" |
|
|
|
|
|
|
|
|
echo "== Filtering LCOV report ==" |
|
|
python3 ../maint/FilterCoverage.py ./coverage-lcov.info > ./coverage-lcov.filtered.info |
|
|
mv ./coverage-lcov.filtered.info ./coverage-lcov.info |
|
|
echo "" |
|
|
|
|
|
|
|
|
echo "== Generating HTML report ==" |
|
|
mkdir -p coverage-html |
|
|
genhtml \ |
|
|
--highlight --branch-coverage --legend --title "PCRE2 code coverage report" --num-spaces 2 \ |
|
|
-o coverage-html ./coverage-lcov.info |
|
|
echo "" |
|
|
|
|
|
fi |
|
|
|