# # NetSurf unit tests TESTS := nsurl urldbtest nsoption bloom hashtable #llcache # nsurl sources nsurl_SRCS := utils/corestrings.c utils/nsurl.c utils/idna.c \ test/log.c test/nsurl.c # url database test sources urldbtest_SRCS := content/urldb.c \ utils/idna.c utils/bloom.c utils/nsoption.c utils/nsurl.c \ utils/corestrings.c \ test/log.c test/urldbtest.c # low level cache sources llcache_SRCS := content/fetch.c content/fetchers/curl.c \ content/fetchers/about.c content/fetchers/data.c \ content/fetchers/resource.c content/llcache.c \ content/urldb.c \ image/image_cache.c \ utils/base64.c utils/corestrings.c utils/hashtable.c \ utils/nsurl.c utils/messages.c utils/url.c utils/useragent.c \ utils/utils.c \ test/log.c test/llcache.c # nsoption test sources nsoption_SRCS := utils/nsoption.c test/log.c test/nsoption.c # Bloom filter test sources bloom_SRCS := utils/bloom.c test/bloom.c # hash table test sources hashtable_SRCS := utils/hashtable.c test/log.c test/hashtable.c # Coverage builds need additional flags ifeq ($(MAKECMDGOALS),coverage) COVCFLAGS ?= -fprofile-arcs -ftest-coverage -O0 COVCXXFLAGS ?= -fprofile-arcs -ftest-coverage -O0 COVLDFLAGS ?= -lgcov -fprofile-arcs TESTROOT := build-$(HOST)-coverage else COVCFLAGS ?= -O0 COVCXXFLAGS ?= -O0 TESTROOT := build-$(HOST)-test endif TESTCFLAGS := -std=c99 -g -Wall \ -D_BSD_SOURCE \ -D_POSIX_C_SOURCE=200809L \ -D_XOPEN_SOURCE=600 \ -Itest -I. -I.. \ -Dnsgtk \ $(shell pkg-config --cflags libcurl check libparserutils libwapcaplet libdom libnsutils libutf8proc libidn) \ $(COVCFLAGS) TESTLDFLAGS := $(shell pkg-config --libs libcurl check libparserutils libwapcaplet libdom libnsutils libutf8proc libidn) -lz \ $(COVLDFLAGS) # Source files for all tests being compiled 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)))))))) $$(VQ)echo "LINKTEST: $$@" $$(Q)$$(CC) $$(TESTCFLAGS) $$^ -o $$@ $$(TESTLDFLAGS) .PHONY:$(1)_test $(1)_test:$$(TESTROOT)/$(1) $$(VQ)echo "RUN TEST: $(1)" $$(Q)$$(TESTROOT)/$(1) TESTSOURCES += $$($(1)_SRCS) endef define compile_test_target_c $$(TESTROOT)/$(2): $(1) $$(TESTROOT)/created $$(VQ)echo " COMPILE: $(1)" $$(Q)$$(RM) $$(TESTROOT)/$(2) $$(Q)$$(CC) $$(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))))) .PHONY:test coverage test: $(TESTROOT)/created $(addsuffix _test,$(TESTS)) coverage: test $(TESTROOT)/created: $(VQ)echo " MKDIR: $(TESTROOT)" $(Q)$(MKDIR) $(TESTROOT) $(Q)$(TOUCH) $@ .PHONY: test-clean test-clean: $(VQ)echo " CLEAN: $(TESTROOT)" $(VQ)echo " CLEAN: build-$(HOST)-coverage" $(Q)$(RM) -r $(TESTROOT) build-$(HOST)-coverage CLEANS += test-clean