• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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