summaryrefslogtreecommitdiff
path: root/infra/command/gen-coverage-report
blob: 5f928eca569afd3b05d605dbc927f5eb4096d8be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

import "build.configuration"

BUILD_WORKSPACE_PATH="${NNAS_PROJECT_PATH}/${BUILD_WORKSPACE_RPATH}"

LCOV_PATH=$(command -v lcov)
GENHTML_PATH=$(command -v genhtml)

if [[ -z "${LCOV_PATH}" ]]; then
  echo "ERROR: 'lcov' is not found"
  exit 255
fi

if [[ -z "${GENHTML_PATH}" ]]; then
  echo "ERROR: 'genhtml' is not found"
  exit 255
fi

if [[ -z "${GCOV_PATH}" ]]; then
  GCOV_PATH=$(command -v gcov)
  if [[ -z "${GCOV_PATH}" ]]; then
    echo "ERROR: 'gcov' is not found"
    exit 255
  fi
fi

OUTPUT_TAG="${NNAS_COVERAGE:-coverage}"
OUTPUT_PATH="${NNAS_COVERAGE_PATH:-${NNAS_PROJECT_PATH}/${OUTPUT_TAG}}"

if [[ -e "${OUTPUT_PATH}" ]]; then
  echo "ERROR: '${OUTPUT_PATH}' already exists"
  exit 255
fi

mkdir -p "${OUTPUT_PATH}"

RAW_BASE_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.base.raw.info"
RAW_TEST_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.test.raw.info"
RAW_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.raw.info"
EXTRACTED_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.extracted.info"
EXCLUDED_COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.excluded.info"
COVERAGE_INFO_PATH="${OUTPUT_PATH}/coverage.info"
HTML_PATH="${OUTPUT_PATH}/html"

CANDIDATES=()

for CANDIDATE in "$@";
do
  CANDIDATES+=("${NNAS_PROJECT_PATH}/${CANDIDATE}/*")
done

# Capture initial zero coverage data
"${LCOV_PATH}" -c -i -d "${BUILD_WORKSPACE_PATH}" --gcov-tool ${GCOV_PATH} -o "${RAW_BASE_COVERAGE_INFO_PATH}"

# Capture tests coverage data
"${LCOV_PATH}" -c -d "${BUILD_WORKSPACE_PATH}" --gcov-tool ${GCOV_PATH} -o "${RAW_TEST_COVERAGE_INFO_PATH}"

# Append zero coverage data and tests coverage data
"${LCOV_PATH}" -o "${RAW_COVERAGE_INFO_PATH}" \
    -a "${RAW_BASE_COVERAGE_INFO_PATH}" \
    -a "${RAW_TEST_COVERAGE_INFO_PATH}"

# Extract data for particular pathes
"${LCOV_PATH}" -e "${RAW_COVERAGE_INFO_PATH}" -o "${EXTRACTED_COVERAGE_INFO_PATH}" \
  "${CANDIDATES[@]}"

# Exclude *.test.cpp files from coverage report
"${LCOV_PATH}" -r "${EXTRACTED_COVERAGE_INFO_PATH}" -o "${EXCLUDED_COVERAGE_INFO_PATH}" \
  '*.test.cpp'

# Final coverage data
cp -v ${EXCLUDED_COVERAGE_INFO_PATH} ${COVERAGE_INFO_PATH}

# Gen html
"${GENHTML_PATH}" "${EXCLUDED_COVERAGE_INFO_PATH}" \
  --prefix "${NNAS_PROJECT_PATH}" \
  --output-directory "${HTML_PATH}"