From 25cdf1772a2ab6db902f97e464bf05e39d7b42bc Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Thu, 8 Mar 2012 02:11:14 +0200
Subject: [PATCH] Build a coverage-enabled version of the tools
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This allows the offline tests to also generate coverage data, and the
hs-coverage target is changed to show both unit-test and offline-tests
coverage.

The downside is that now we build yet-another-binary, which makes the
unit-test time slower…

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: RenΓ© Nussbaumer <rn@google.com>
---
 .gitignore               |  2 ++
 Makefile.am              | 20 ++++++++++++--------
 autotools/run-in-tempdir |  2 +-
 htools/cli-tests-defs.sh |  2 +-
 htools/htools-hpc.hs     |  1 +
 5 files changed, 17 insertions(+), 10 deletions(-)
 create mode 120000 htools/htools-hpc.hs

diff --git a/.gitignore b/.gitignore
index 207b7d3a4..3885108a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,11 +102,13 @@
 
 /htools/htools
 /htools/hconfd
+/htools/htools-hpc
 /htools/test
 /htools/*.prof*
 /htools/*.stat
 /htools/*.tix
 /.hpc/
+/*.tix
 
 /htools/Ganeti/HTools/Version.hs
 /htools/Ganeti/Constants.hs
diff --git a/Makefile.am b/Makefile.am
index 65ac038b9..f57781970 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -354,7 +354,7 @@ docrst = \
 HS_PROGS = htools/htools htools/hconfd
 HS_BIN_ROLES = hbal hscan hspace hinfo
 
-HS_ALL_PROGS = $(HS_PROGS) htools/test
+HS_ALL_PROGS = $(HS_PROGS) htools/test htools/htools-hpc
 HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
 # we don't add -Werror by default
 HFLAGS = -O -Wall -fwarn-monomorphism-restriction -fwarn-tabs -ihtools
@@ -538,8 +538,11 @@ htools/test: HEXTRA_INT=-fhpc -Wwarn -fno-warn-missing-signatures \
 	-fno-warn-monomorphism-restriction -fno-warn-orphans \
 	-fno-warn-missing-methods -fno-warn-unused-imports
 
+# we compile the htools-hpc binary with the program coverage
+htools/htools-hpc: HEXTRA_INT=-fhpc
+
 # test dependency
-htools/offline-tests.sh: htools/htools
+htools/offline-tests.sh: htools/htools-hpc
 
 # rules for building profiling-enabled versions of the haskell
 # programs: hs-prof does the full two-step build, whereas
@@ -1217,10 +1220,10 @@ check-local: check-dirs $(BUILT_SOURCES)
 	done
 
 .PHONY: hs-check
-hs-check: htools/test htools/htools
+hs-check: htools/test htools/htools-hpc
 	@rm -f test.tix
 	./htools/test
-	HBINARY="./htools/htools" ./htools/offline-test.sh
+	HBINARY="./htools/htools-hpc" ./htools/offline-test.sh
 
 # E111: indentation is not a multiple of four
 # E261: at least two spaces before inline comment
@@ -1385,11 +1388,12 @@ py-coverage: $(BUILT_SOURCES) $(python_tests)
 	$(python_tests)
 
 .PHONY: hs-coverage
-hs-coverage: $(haskell_tests)
-	cd htools && rm -f *.tix *.mix && ./test
+hs-coverage: $(haskell_tests) htools/htools-hpc
+	rm -f *.tix && $(MAKE) hs-check
 	@mkdir_p@ $(COVERAGE_HS_DIR)
-	hpc markup --destdir=$(COVERAGE_HS_DIR) htools/test $(HPCEXCL)
-	hpc report htools/test $(HPCEXCL)
+	hpc combine $(HPCEXCL) test.tix htools-hpc.tix > htools-coverage.tix
+	hpc markup --destdir=$(COVERAGE_HS_DIR) htools-coverage.tix
+	hpc report htools-coverage.tix
 	$(LN_S) -f hpc_index.html $(COVERAGE_HS_DIR)/index.html
 
 # Special "kind-of-QA" target for htools, needs special setup (all
diff --git a/autotools/run-in-tempdir b/autotools/run-in-tempdir
index e4f9df261..b9be39077 100755
--- a/autotools/run-in-tempdir
+++ b/autotools/run-in-tempdir
@@ -12,7 +12,7 @@ cp -r autotools daemons scripts lib tools test $tmpdir
 mv $tmpdir/lib $tmpdir/ganeti
 ln -T -s $tmpdir/ganeti $tmpdir/lib
 mkdir -p $tmpdir/htools
-for htest in htools test offline-test.sh cli-tests-defs.sh; do
+for htest in htools htools-hpc test offline-test.sh cli-tests-defs.sh; do
   if [ -e htools/$htest ]; then
     cp -p htools/$htest $tmpdir/htools/
   fi
diff --git a/htools/cli-tests-defs.sh b/htools/cli-tests-defs.sh
index da24b0c1f..89821f8a1 100644
--- a/htools/cli-tests-defs.sh
+++ b/htools/cli-tests-defs.sh
@@ -19,7 +19,7 @@
 
 # This is an shell testing configuration fragment.
 
-HBINARY=${HBINARY:-./htools/htools}
+HBINARY=${HBINARY:-./htools/htools-hpc}
 
 hbal() {
   HTOOLS=hbal $HBINARY "$@"
diff --git a/htools/htools-hpc.hs b/htools/htools-hpc.hs
new file mode 120000
index 000000000..487efdc27
--- /dev/null
+++ b/htools/htools-hpc.hs
@@ -0,0 +1 @@
+htools.hs
\ No newline at end of file
-- 
GitLab