aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtests/code_coverage.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/code_coverage.sh b/tests/code_coverage.sh
new file mode 100755
index 00000000..bf2471b4
--- /dev/null
+++ b/tests/code_coverage.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+###############################################################################
+#
+# This builds xz with special CFLAGS for measuring code coverage and
+# uses lcov and genhtml to create coverage reports.
+#
+# The current directory is used as the build directory so out-of-tree
+# builds are possible. The coverage reports are written to the directory
+# "coverage" under the current directory.
+#
+# Any options passed to this script are passed to "make" so to get
+# faster builds use, for example, "-j4" as an argument to this script.
+#
+# Author: Jia Tan
+#
+# This file has been put into the public domain.
+# You can do whatever you want with this file.
+#
+###############################################################################
+
+set -e
+
+COVERAGE_DIR="coverage"
+
+# Test if lcov is installed
+if ! command -v lcov > /dev/null
+then
+ echo "Error: lcov not installed"
+ exit 1
+fi
+
+# Test if genhtml is installed
+if ! command -v genhtml > /dev/null
+then
+ echo "Error: genhtml not installed"
+ exit 1
+fi
+
+top_srcdir=$(cd -- "$(dirname -- "$0")" && cd .. && pwd)
+
+# Run the autogen.sh script if the configure script has not been generated
+if ! test -f "$top_srcdir/configure"
+then
+ ( cd "$top_srcdir" && ./autogen.sh )
+fi
+
+# Execute the configure script if the Makefile is not present
+if ! test -f "Makefile"
+then
+ "$top_srcdir/configure" \
+ --disable-xzdec \
+ --disable-lzmadec \
+ --disable-lzmainfo \
+ --disable-shared \
+ --enable-silent-rules \
+ CFLAGS="$CFLAGS --coverage --no-inline -O0"
+fi
+
+# Run the tests
+make "$@" check
+
+# Re-create the coverage directory
+rm -rf "$COVERAGE_DIR"
+mkdir -p "$COVERAGE_DIR/liblzma"
+mkdir -p "$COVERAGE_DIR/xz"
+
+# Run lcov with src/liblzma as the input directory and write the
+# results out to the coverage directory
+lcov -c -d "src/liblzma" -o "$COVERAGE_DIR/liblzma/liblzma.cov"
+lcov -c -d "src/xz" -o "$COVERAGE_DIR/xz/xz.cov"
+
+# Generate the reports
+genhtml "$COVERAGE_DIR/liblzma/liblzma.cov" -o "$COVERAGE_DIR/liblzma"
+genhtml "$COVERAGE_DIR/xz/xz.cov" -o "$COVERAGE_DIR/xz"
+
+echo "Success! See:"
+echo "file://$PWD/$COVERAGE_DIR/liblzma/index.html"
+echo "file://$PWD/$COVERAGE_DIR/xz/index.html"