| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env bash
- # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
- # Exit on error.
- set -e
- if [ -n "$USE_CLANG" ]; then
- echo "Error: Coverage test is supported only for gcc."
- exit 1
- fi
- ROOT=".."
- # Fetch right version of gcov
- if [ -d /mnt/gvfs/third-party -a -z "$CXX" ]; then
- source $ROOT/build_tools/fbcode_config.sh
- GCOV=$GCC_BASE/bin/gcov
- else
- GCOV=$(which gcov)
- fi
- COVERAGE_DIR="$PWD/COVERAGE_REPORT"
- mkdir -p $COVERAGE_DIR
- # Find all gcno files to generate the coverage report
- GCNO_FILES=`find $ROOT -name "*.gcno"`
- $GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |
- # Parse the raw gcov report to more human readable form.
- python $ROOT/coverage/parse_gcov_output.py |
- # Write the output to both stdout and report file.
- tee $COVERAGE_DIR/coverage_report_all.txt &&
- echo -e "Generated coverage report for all files: $COVERAGE_DIR/coverage_report_all.txt\n"
- # TODO: we also need to get the files of the latest commits.
- # Get the most recently committed files.
- LATEST_FILES=`
- git show --pretty="format:" --name-only HEAD |
- grep -v "^$" |
- paste -s -d,`
- RECENT_REPORT=$COVERAGE_DIR/coverage_report_recent.txt
- echo -e "Recently updated files: $LATEST_FILES\n" > $RECENT_REPORT
- $GCOV --preserve-paths --relative-only --no-output $GCNO_FILES 2>/dev/null |
- python $ROOT/coverage/parse_gcov_output.py -interested-files $LATEST_FILES |
- tee -a $RECENT_REPORT &&
- echo -e "Generated coverage report for recently updated files: $RECENT_REPORT\n"
- # Unless otherwise specified, we'll not generate html report by default
- if [ -z "$HTML" ]; then
- exit 0
- fi
- # Generate the html report. If we cannot find lcov in this machine, we'll simply
- # skip this step.
- echo "Generating the html coverage report..."
- LCOV=$(which lcov || true 2>/dev/null)
- if [ -z $LCOV ]
- then
- echo "Skip: Cannot find lcov to generate the html report."
- exit 0
- fi
- LCOV_VERSION=$(lcov -v | grep 1.1 || true)
- if [ $LCOV_VERSION ]
- then
- echo "Not supported lcov version. Expect lcov 1.1."
- exit 0
- fi
- (cd $ROOT; lcov --no-external \
- --capture \
- --directory $PWD \
- --gcov-tool $GCOV \
- --output-file $COVERAGE_DIR/coverage.info)
- genhtml $COVERAGE_DIR/coverage.info -o $COVERAGE_DIR
- echo "HTML Coverage report is generated in $COVERAGE_DIR"
|