#!/usr/bin/env bash # build-aux/gcov-prune - Prune old GCC coverage files # # Copyright (C) 2025 Luke T. Shumaker # SPDX-License-Identifier: AGPL-3.0-or-later set -e [[ $# == 1 ]] sourcedir="$(realpath -- .)" builddir="$(realpath -- "$1")" # `gcc` writes .gcno # Running the program writes .gcda (updates existing files, concurrent-safe) # GCC `gcov` post-processes .gcno+.gcda to .gcov # `gcovr` is a Python script that calls `gcov` and merges and post-processes the .gcov files to other formats # Prune orphaned .gcno files. find "$builddir" -name '*.gcno' -printf '%P\0' | while read -d '' -r gcno_file; do rel_base="${gcno_file%/CMakeFiles/*}" src_file="$gcno_file" src_file="${src_file#*/CMakeFiles/*.dir/}" src_file="${src_file%.gcno}" src_file="${src_file//__/..}" src_file="$rel_base/$src_file" if [[ ! -e "$sourcedir/$src_file" || "$sourcedir/$src_file" -nt "$builddir/$gcno_file" ]]; then rm -fv -- "$builddir/$gcno_file" fi done # Prune all .gcda files. find "$builddir" -name '*.gcda' -delete