diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-03-31 18:53:52 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2017-03-31 18:53:52 +0100 |
commit | e499f5c08f27b0fa738f784dbb91d8fc28d8ca01 (patch) | |
tree | 078c78ebc90e5899bbe2afe5ffeebeab575b2542 /test/Makefile | |
parent | 4e750bdab60ab5007a108a6c99de321e21bcf4ce (diff) | |
download | netsurf-e499f5c08f27b0fa738f784dbb91d8fc28d8ca01.tar.gz netsurf-e499f5c08f27b0fa738f784dbb91d8fc28d8ca01.tar.bz2 |
Support coverage flushing on assert()
When assert() is called, which is not uncommon in utility code within NetSurf,
we lose coverage data for anything done before the assert() in the test. This
commit corrects that oversight but is at least slightly GCC specific and may
need tweaks for non-Linux platforms.
By default, 'make coverage' will enable assert coverage, and it can be disabled
with 'make coverage NOASSERTCOVERAGE=yes' if necessary.
Signed-off-by: Daniel Silverstone <dsilvers@netsurf-browser.org>
Diffstat (limited to 'test/Makefile')
-rw-r--r-- | test/Makefile | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/test/Makefile b/test/Makefile index 833e7d68e..39953a3d3 100644 --- a/test/Makefile +++ b/test/Makefile @@ -81,10 +81,19 @@ ifeq ($(MAKECMDGOALS),coverage) COV_CXXFLAGS ?= -fprofile-arcs -ftest-coverage -O0 COV_LDFLAGS ?= -lgcov -fprofile-arcs TESTROOT := $(COV_ROOT) + ifeq ($(NOASSERTCOVERAGE),yes) + NOCOV_TESTSOURCES ?= + COV_CPPFLAGS ?= + else + NOCOV_TESTSOURCES ?= test/assert.c + COV_CPPFLAGS ?= -D__assert_fail=__ns_assert_fail + endif else COV_CFLAGS ?= -O0 COV_CXXFLAGS ?= -O0 + COV_CPPFLAGS ?= TESTROOT := build/$(HOST)-test + NOCOV_TESTSOURCES ?= endif @@ -123,7 +132,7 @@ ifneq ($(CC_MAJOR),2) COMMON_WARNFLAGS += -Wno-unused-parameter endif -TESTCFLAGS := -std=c99 -g \ +BASE_TESTCFLAGS := -std=c99 -g \ $(COMMON_WARNFLAGS) \ -D_BSD_SOURCE \ -D_POSIX_C_SOURCE=200809L \ @@ -131,8 +140,10 @@ TESTCFLAGS := -std=c99 -g \ -Itest -Iinclude -Icontent/handlers -Ifrontends -I. -I.. \ -Dnsgtk \ $(shell pkg-config --cflags libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) \ - $(LIB_CFLAGS) \ - $(COV_CFLAGS) + $(LIB_CFLAGS) +TESTCFLAGS := $(BASE_TESTCFLAGS) \ + $(COV_CFLAGS) \ + $(COV_CPPFLAGS) TESTLDFLAGS := -L$(TESTROOT) \ $(shell pkg-config --libs libcurl libparserutils libwapcaplet libdom libnsutils libutf8proc) -lz \ @@ -149,7 +160,7 @@ TESTSOURCES := GCOV ?= gcov define gen_test_target -$$(TESTROOT)/$(1): $$(sort $$(addprefix $$(TESTROOT)/,$$(subst /,_,$$(patsubst %.c,%.o,$$(patsubst %.cpp,%.o,$$(patsubst %.m,%.o,$$(patsubst %.s,%.o,$$($(1)_SRCS)))))))) +$$(TESTROOT)/$(1): $$(sort $$(addprefix $$(TESTROOT)/,$$(subst /,_,$$(patsubst %.c,%.o,$$(patsubst %.cpp,%.o,$$(patsubst %.m,%.o,$$(patsubst %.s,%.o,$$($(1)_SRCS) $$(NOCOV_TESTSOURCES)))))))) $$(VQ)echo "LINKTEST: $$@" $$(Q)$$(CC) $$(TESTCFLAGS) $$^ -o $$@ $$($(1)_LD) $$(TESTLDFLAGS) @@ -171,12 +182,22 @@ $$(TESTROOT)/$(2): $(1) $$(TESTROOT)/created endef +define compile_test_nocov_target_c +$$(TESTROOT)/$(2): $(1) $$(TESTROOT)/created + $$(VQ)echo " COMPILE: $(1) (No coverage)" + $$(Q)$$(RM) $$(TESTROOT)/$(2) + $$(Q)$$(CC) $$(BASE_TESTCFLAGS) -o $$(TESTROOT)/$(2) -c $(1) + +endef + # Generate target for each test program and the list of objects it needs $(eval $(foreach TST,$(TESTS), $(call gen_test_target,$(TST)))) # generate target rules for test objects $(eval $(foreach SOURCE,$(sort $(filter %.c,$(TESTSOURCES))), \ $(call compile_test_target_c,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o)),$(subst /,_,$(SOURCE:.c=.d))))) +$(eval $(foreach SOURCE,$(sort $(filter %.c,$(NOCOV_TESTSOURCES))), \ + $(call compile_test_nocov_target_c,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o)),$(subst /,_,$(SOURCE:.c=.d))))) .PHONY:test coverage |