Commit 981884e2 authored by Jan Kiene's avatar Jan Kiene
Browse files

add snippet for coverage collection

parent 16e1eb7c
Loading
Loading
Loading
Loading
+75 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<'EOF'
Usage: coverage_cli.sh --obj-dir DIR --output-file FILE --output-dir DIR --title STRING

Generates lcov coverage, removes "apps" and "lib_util" from coverage, normalizes paths,
and produces an HTML report with a title.

Required arguments:
  --obj-dir       Directory containing object files (.gcno/.gcda)
  --output-file   Path to lcov tracefile (.info)
  --output-dir    Directory to write HTML report
  --title         Title suffix for HTML report
EOF
}

obj_dir=""
output_file=""
output_dir=""
title=""

# Parse arguments
while [[ $# -gt 0 ]]; do
  case "$1" in
  --obj-dir)
    obj_dir="${2:-}"
    shift 2
    ;;
  --output-file)
    output_file="${2:-}"
    shift 2
    ;;
  --output-dir)
    output_dir="${2:-}"
    shift 2
    ;;
  --title)
    title="${2:-}"
    shift 2
    ;;
  -h | --help)
    usage
    exit 0
    ;;
  *)
    echo "Unknown option: $1" >&2
    usage
    exit 1
    ;;
  esac
done

# Validate required args
if [[ -z "$obj_dir" || -z "$output_file" || -z "$output_dir" || -z "$title" ]]; then
  echo "Error: missing required arguments." >&2
  usage
  exit 1
fi

# Capture coverage
lcov -c -d "$obj_dir" -o "$output_file"

# Remove apps and lib_util files from coverage
lcov -r "$output_file" "*apps*" -o "$output_file"
lcov -r "$output_file" "*lib_util*" -o "$output_file"

commit_sha="$(git rev-parse HEAD)"

# Replace absolute path with '.' to ease merging of .info files (assumes GNU sed)
sed -i "s|$(pwd)|.|g" "$output_file"

# Generate HTML report
genhtml "$output_file" -o "$output_dir" -t "$title @ $commit_sha"