1#!/usr/bin/env bash 2 3set -e 4 5if [[ $# -lt 2 ]]; then 6 echo "Usage: ./generate-gcov-report.sh <rel-target-dir> <srcdir> [<srcdir> ... ]" 7 exit 1 8fi 9 10target_dir=$1 11shift 12source_dirs=$* 13 14if [[ "${target_dir:0:1}" != '/' ]]; then 15 target_dir="$PWD/$target_dir" 16fi 17summary_file="$target_dir/summary.txt" 18 19mkdir -p "$target_dir" 20rm -f "$target_dir"/*.gcov 21 22for dir in $source_dirs; do 23 pushd "$dir" > /dev/null 24 for file in *.c; do 25 find ./ -name "*${file/\.c/.gcda}" -exec gcov {} \; > /dev/null 26 done 27 find ./ -name "*.gcov" \! -path "*/`basename "$target_dir"`/*" -exec mv {} "$target_dir" \; 28 popd > /dev/null 29done 30 31echo "========== coverage report ========" > "$summary_file" 32for file in "$target_dir"/*.gcov; do 33 total=`grep -v " -:" "$file" | wc -l` 34 missing=`grep "#####" "$file" | wc -l` 35 hit=$((total - missing)); 36 percent=$((($hit * 100)/$total)) 37 fname=`basename "$file"` 38 printf "%-32s total lines: %4s not tested: %4s (%3s%%)\n" "$fname" "$total" "$missing" "$percent">> "$summary_file" 39done 40echo "========== =============== ========" >> "$summary_file" 41