| #! /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 |
|
|