about summary refs log tree commit diff
path: root/pkgs/build-support/setup-hooks
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-02-05 14:11:21 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-02-05 19:18:33 +0100
commit80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b (patch)
treee23432117b0cdfdec490c68e80da1d8e181f7b61 /pkgs/build-support/setup-hooks
parentbea2b3c5177a9fae5df5598574bd25bca8f6cb09 (diff)
downloadnixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar.gz
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar.bz2
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar.lz
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar.xz
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.tar.zst
nixlib-80647127a3e7e3eaf84dc6ff0af13ff4aaad2e0b.zip
Turn the coverage analysis stdenv adapters into setup hooks
Stdenv adapters are kinda weird and un-idiomatic (especially when they
don't actually change stdenv).  It's more idiomatic to say

  buildInputs = [ makeCoverageAnalysisReport ];
Diffstat (limited to 'pkgs/build-support/setup-hooks')
-rw-r--r--pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh14
-rw-r--r--pkgs/build-support/setup-hooks/make-coverage-analysis-report.sh18
2 files changed, 32 insertions, 0 deletions
diff --git a/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh b/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh
new file mode 100644
index 000000000000..08ef490e2447
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/enable-coverage-instrumentation.sh
@@ -0,0 +1,14 @@
+# Force GCC to build with coverage instrumentation.  Also disable
+# optimisation, since it may confuse things.
+export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -O0 --coverage"
+
+# FIXME: Handle the case where postUnpack is already set.
+postUnpack() {
+    # This is an uberhack to prevent libtool from remoaving gcno
+    # files.  This has been fixed in libtool, but there are packages
+    # out there with old ltmain.sh scripts.  See
+    # http://www.mail-archive.com/libtool@gnu.org/msg10725.html
+    for i in $(find -name ltmain.sh); do
+        substituteInPlace $i --replace '*.$objext)' '*.$objext | *.gcno)'
+    done
+}
diff --git a/pkgs/build-support/setup-hooks/make-coverage-analysis-report.sh b/pkgs/build-support/setup-hooks/make-coverage-analysis-report.sh
new file mode 100644
index 000000000000..2951666651c6
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/make-coverage-analysis-report.sh
@@ -0,0 +1,18 @@
+postPhases+=" coverageReportPhase"
+
+coverageReportPhase() {
+    lcov --directory . --capture --output-file app.info
+    set -o noglob
+    lcov --remove app.info $lcovFilter > app2.info
+    set +o noglob
+    mv app2.info app.info
+
+    mkdir -p $out/coverage
+    genhtml app.info $lcovExtraTraceFiles -o $out/coverage > log
+
+    # Grab the overall coverage percentage for use in release overviews.
+    mkdir -p $out/nix-support
+    grep "Overall coverage rate" log | sed 's/^.*(\(.*\)%).*$/\1/' > $out/nix-support/coverage-rate
+
+    echo "report coverage $out/coverage" >> $out/nix-support/hydra-build-products
+}