aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/cover.mk
diff options
context:
space:
mode:
authorViktor Söderqvist <[email protected]>2015-01-27 23:50:41 +0100
committerViktor Söderqvist <[email protected]>2015-01-27 23:50:41 +0100
commit8f39bed18723b0b60b17ea1aeecde4c6c371e3f0 (patch)
tree857f5227c079d886ec7093a843408773b95df563 /plugins/cover.mk
parentdcb821ca1adaec189cdc99509a47fb59bc4e8d5a (diff)
downloaderlang.mk-8f39bed18723b0b60b17ea1aeecde4c6c371e3f0.tar.gz
erlang.mk-8f39bed18723b0b60b17ea1aeecde4c6c371e3f0.tar.bz2
erlang.mk-8f39bed18723b0b60b17ea1aeecde4c6c371e3f0.zip
Add a target to merge coverdata files and rename COVER_DIR to COVER_REPORT_DIR
Diffstat (limited to 'plugins/cover.mk')
-rw-r--r--plugins/cover.mk47
1 files changed, 27 insertions, 20 deletions
diff --git a/plugins/cover.mk b/plugins/cover.mk
index 7f62e33..b42311e 100644
--- a/plugins/cover.mk
+++ b/plugins/cover.mk
@@ -1,7 +1,7 @@
# Copyright 2015, Viktor Söderqvist <[email protected]>
# This file is part of erlang.mk and subject to the terms of the ISC License.
-COVER_DIR = cover
+COVER_REPORT_DIR = cover
# utility variables for representing special symbols
empty :=
@@ -44,7 +44,7 @@ endif
# Core targets
ifdef COVER
-ifneq ($(COVER_DIR),)
+ifneq ($(COVER_REPORT_DIR),)
tests::
@$(MAKE) make --no-print-directory cover-report
endif
@@ -52,8 +52,8 @@ endif
clean:: coverdata-clean
-ifneq ($(COVER_DIR),)
-distclean:: cover-clean
+ifneq ($(COVER_REPORT_DIR),)
+distclean:: cover-report-clean
endif
help::
@@ -61,28 +61,35 @@ help::
"Cover targets:" \
" cover-report Generate a HTML coverage report from previously collected" \
" cover data." \
+ " all.coverdata Merge {eunit,ct}.coverdata into one coverdata file." \
"" \
- "Cover-report is included in the 'tests' target by setting COVER=1." \
- "If you run 'ct' or 'eunit' separately with COVER=1, cover data is" \
- "collected but to generate a report you have to run 'cover-report'" \
- "afterwards."
+ "If COVER=1 is set, coverage data is generated by the targets eunit and ct. The" \
+ "target tests additionally generates a HTML coverage report from the combined" \
+ "coverdata files from each of these testing tools. HTML reports can be disabled" \
+ "by setting COVER_REPORT_DIR to empty."
# Plugin specific targets
+COVERDATA = $(filter-out all.coverdata,$(wildcard *.coverdata))
+
.PHONY: coverdata-clean
coverdata-clean:
$(gen_verbose) rm -f *.coverdata ct.cover.spec
-# These are only defined if COVER_DIR is non-empty
-
-ifneq ($(COVER_DIR),)
+# Merge all coverdata files into one.
+all.coverdata: $(COVERDATA)
+ $(gen_verbose) $(ERL) -eval ' \
+ $(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) \
+ cover:export("$@"), halt(0).'
-.PHONY: cover-clean cover-report
+# These are only defined if COVER_REPORT_DIR is non-empty. Set COVER_REPORT_DIR to
+# empty if you want the coverdata files but not the HTML report.
+ifneq ($(COVER_REPORT_DIR),)
-cover-clean: coverdata-clean
- $(gen_verbose) rm -rf $(COVER_DIR)
+.PHONY: cover-report-clean cover-report
-COVERDATA = $(wildcard *.coverdata)
+cover-report-clean:
+ $(gen_verbose) rm -rf $(COVER_REPORT_DIR)
ifeq ($(COVERDATA),)
cover-report:
@@ -92,14 +99,14 @@ else
# because eunit defines test/0 which is never called. We compensate for this.
EUNIT_HRL_MODS = $(subst $(space),$(comma),$(shell \
grep -e '^\s*-include.*include/eunit\.hrl"' src/*.erl \
- | sed 's/\.erl:.*//;s/^src\///' | uniq))
+ | sed "s/^src\/\(.*\)\.erl:.*/'\1'/" | uniq))
cover-report:
- $(gen_verbose) mkdir -p $(COVER_DIR)
+ $(gen_verbose) mkdir -p $(COVER_REPORT_DIR)
$(gen_verbose) $(ERL) -eval ' \
$(foreach f,$(COVERDATA),cover:import("$(f)") == ok orelse halt(1),) \
Ms = cover:imported_modules(), \
- [cover:analyse_to_file(M, "$(COVER_DIR)/" ++ atom_to_list(M) \
+ [cover:analyse_to_file(M, "$(COVER_REPORT_DIR)/" ++ atom_to_list(M) \
++ ".COVER.html", [html]) || M <- Ms], \
Report = [begin {ok, R} = cover:analyse(M, module), R end || M <- Ms], \
EunitHrlMods = [$(EUNIT_HRL_MODS)], \
@@ -108,7 +115,7 @@ cover-report:
TotalY = lists:sum([Y || {_, {Y, _}} <- Report1]), \
TotalN = lists:sum([N || {_, {_, N}} <- Report1]), \
TotalPerc = round(100 * TotalY / (TotalY + TotalN)), \
- {ok, F} = file:open("$(COVER_DIR)/index.html", [write]), \
+ {ok, F} = file:open("$(COVER_REPORT_DIR)/index.html", [write]), \
io:format(F, "<!DOCTYPE html><html>~n" \
"<head><meta charset=\"UTF-8\">~n" \
"<title>Coverage report</title></head>~n" \
@@ -126,4 +133,4 @@ cover-report:
halt().'
endif
-endif # ifneq ($(COVER_DIR),)
+endif # ifneq ($(COVER_REPORT_DIR),)