etl/test/run-coverage.sh
Roland Reichwein f858b8a72d
Add installed dependencies for docker, documentation (#1377)
* Add development tools to docker image

python3-cogapp, clang-format, treefmt

Add script to run development environment in docker container

Document docker use in docs/docker.md

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-15 11:27:57 +02:00

83 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
#
# run-coverage.sh [gcc|clang]
#
# defaults:
# compiler: clang
#
set -e
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)
# Choose gcc or clang via cmdline
if [ "$1" = "gcc" ] ; then
COMPILER=gcc
else
# default
COMPILER=clang
fi
if [ "$COMPILER" = "gcc" ]; then
C_COMPILER=gcc
CXX_COMPILER=g++
GCOV="$(command -v gcov)" || { echo "gcov not found in PATH"; exit 1; }
GCOV_ADD=""
EXTRA_LINK_OPTIONS=""
EXTRA_LINK_LIBS="gcov"
elif [ "$COMPILER" = "clang" ]; then
C_COMPILER=clang
CXX_COMPILER=clang++
GCOV="$(command -v llvm-cov)" || { echo "llvm-cov not found in PATH"; exit 1; }
GCOV_ADD="--gcov-tool gcov"
EXTRA_LINK_OPTIONS="--coverage"
EXTRA_LINK_LIBS=""
else
echo "Unsupported compiler: $COMPILER"
exit 1
fi
BUILD=build-coverage
rm -rf -- "${BUILD:?}"
mkdir -p "$BUILD"
cd "$BUILD" || exit 1
touch total.info
for CXXSTD in 11 14 17 20 23; do
for NOSTL in OFF ON; do
rm -rf CMakeFiles
cmake -DEXTRA_COMPILE_OPTIONS="--coverage" \
-DEXTRA_LINK_OPTIONS="$EXTRA_LINK_OPTIONS" \
-DEXTRA_LINK_LIBS="$EXTRA_LINK_LIBS" \
-DCMAKE_C_COMPILER=$C_COMPILER \
-DCMAKE_CXX_COMPILER=$CXX_COMPILER \
-DNO_STL=$NOSTL \
-DETL_USE_TYPE_TRAITS_BUILTINS=OFF \
-DETL_USER_DEFINED_TYPE_TRAITS=OFF \
-DETL_FORCE_TEST_CPP03_IMPLEMENTATION=OFF \
-DETL_OPTIMISATION=-O0 \
-DETL_CXX_STANDARD=$CXXSTD \
-DETL_ENABLE_SANITIZER=Off \
-DETL_MESSAGES_ARE_NOT_VIRTUAL=OFF \
-DETL_USE_BUILTIN_MEM_FUNCTIONS=ON ..
cmake --build .
./etl_tests
lcov --gcov-tool "$GCOV" $GCOV_ADD --capture --directory CMakeFiles/etl_tests.dir \
--rc "geninfo_unexecuted_blocks=1" --output-file coverage.info --include '*/include/etl/*' --rc "lcov_branch_coverage=1" \
--ignore-errors inconsistent \
--ignore-errors mismatch
lcov -a total.info -a coverage.info -o total.info --rc "lcov_branch_coverage=1" \
--ignore-errors inconsistent \
--ignore-errors corrupt \
--ignore-errors empty
done
done
genhtml total.info --output-directory coverage --rc "genhtml_branch_coverage=1" --branch-coverage -t $COMPILER \
--ignore-errors inconsistent \
--ignore-errors category
cd ..