1
0

generate-gcov-report.sh 1.1 KB

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