summaryrefslogtreecommitdiff
path: root/test/Makefile
blob: f4ddb9d6c22f8d5d86c08a1d289c2c53fac2dba6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#
# 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