#!/bin/bash MERGED_INFO="merged" GATHER_ON_BUILD="code_cov_gather_on_build.sh" PARSE_INFO="code_cov_parse_info.pl" trap 'catch $LINENO' ERR catch() { echo "$0: error on line $1. HTML report not generated." exit $1 } usage() { printf >&2 "\ Usage: $(basename $0) --read --kernel-source --kernel-object --output-dir [--info or --tar] [--force-override] [--print] [--stat] [--ignore-unused] [--only-i915] [--only-drm] [--show-files] [--func-filters ] [--source-filters ] --kernel-object is only needed when Kernel was built with make O=dir " exit $1 } MODE= RESULTS= KSRC= KOBJ= DEST_DIR= FORCE= PARSE_ARGS= while [ "$1" != "" ]; do case $1 in --info|-i) MODE=info ;; --tar|--tarball|-t) MODE=tar.gz ;; --kernel-source|-k) if [ "$2" == "" ]; then usage 1 else KSRC=$(realpath $2) shift fi ;; --kernel-object|-O) if [ "$2" == "" ]; then usage 1 else KOBJ=$(realpath $2) shift fi ;; --output-dir|-o) if [ "$2" == "" ]; then usage 1 else DEST_DIR=$(realpath $2) shift fi ;; --read|-r) if [ "$2" == "" ]; then usage 1 else RESULTS=$(realpath $2) shift fi ;; --print|--stat|--ignore-unused|--only-i915|--only-drm|--show-files) PARSE_ARGS="$PARSE_ARGS $1" ;; --func-filters|--source-filters) if [ "$2" == "" ]; then usage 1 else PARSE_ARGS="$PARSE_ARGS $1 $2" shift fi ;; --force-override|-f) FORCE=1 ;; --help) usage 0 ;; *) echo "Unknown argument '$1'" usage 1 ;; esac shift done if [ "x$RESULTS" == "x" -o "x$KSRC" == "x" -o "x$DEST_DIR" == "x" -o "x$MODE" == "x" ]; then echo "Missing a mandatory argument" usage 1 fi if [ -z "$KOBJ" ]; then KOBJ=$KSRC fi SCRIPT_DIR=$(dirname $(realpath $0)) RESULTS=$(realpath $RESULTS) KSRC=$(realpath $KSRC) KOBJ=$(realpath $KOBJ) DEST_DIR=$(realpath $DEST_DIR) if [ -e "$DEST_DIR" ]; then if [ "x$FORCE" != "x" -a -d "$DEST_DIR" ]; then rm -rf $DEST_DIR/ else echo "Directory exists. Won't override." exit 1 fi fi mkdir -p $DEST_DIR cd $DEST_DIR if [ "$MODE" != "info" ]; then echo "Generating source tarball from $KSRC (O=$KOBJ)..." ${SCRIPT_DIR}/${GATHER_ON_BUILD} $KSRC $KOBJ source.tar.gz echo "Adding source files..." tar xf source.tar.gz if [ -d "$RESULTS" ]; then echo "Creating per-file info files..." echo -n "" >${MERGED_INFO}.info for i in $RESULTS/*.tar.gz; do TITLE=$(basename $i) TITLE=${TITLE/.tar.gz/} echo "Adding results from $i..." tar xf $i echo "Generating $TITLE.info..." lcov -q -t ${TITLE} --rc lcov_branch_coverage=1 -o $TITLE.info -c -d . cat $TITLE.info >>${MERGED_INFO}.info # Remove the contents of the results tarball rm -rf sys/ done TITLE=${MERGED_INFO} else TITLE=$(basename $RESULTS) TITLE=${TITLE/.tar.gz/} echo "Adding results from $RESULTS..." tar xf $RESULTS echo "Generating $TITLE.info..." lcov -q -t ${TITLE} --rc lcov_branch_coverage=1 -o $TITLE.info -c -d . fi else if [ -d "$RESULTS" ]; then echo "Merging info files..." echo -n "" >${MERGED_INFO}.info for i in $RESULTS/*.info; do cat $i >>${MERGED_INFO}.info done TITLE=${MERGED_INFO} else echo "Copying $RESULTS to $DEST_DIR..." cp $RESULTS . TITLE=$(basename $RESULTS) TITLE=${TITLE/.info/} fi fi if [ "x$PARSE_ARGS" != "x" ]; then ${SCRIPT_DIR}/$PARSE_INFO $PARSE_ARGS --output filtered_${TITLE}.info ${TITLE}.info TITLE=filtered_${TITLE} fi echo "Generating HTML files..." genhtml -q ${TITLE}.info