#!/bin/sh set -e cd build/$1 case "$1" in coverage) rm -rf src/lib/* rm -rf src/bin/* ;; *) ;; esac make -j check case "$1" in coverage) ;; *) exit 0 ;; esac gcov -tg src/lib/*.gcno src/bin/*.gcno | awk ' BEGIN { FS=":" } function miss(t){ printf("%c %s:%d %s\n", t, file, line, src) missing_count++; } /^condition outcomes covered [0-9]+\/[1-9][0-9]*/ { if($0 ~ /0\//) skip_cond = 1 else skip_cond = 0 next } /^condition .* not covered/ { if(!skip_cond){ miss("C") print $0 } next } { hits = $1 line = $2 gsub(/ /, "", hits) gsub(/ /, "", line) if(line == 0) file=$NF src = "" for(n = 3; n <= NF; n++) src = src $n if(hits == "-") next if(hits ~ /^[1-9][0-9]*\*?$/) next miss("L") next } END { printf("\nMissing coverage: %d\n", missing_count); } '