]> git.llucax.com Git - software/posixx.git/blob - test/Makefile
Avoid rebuilding of doc, (mem)test and install targets
[software/posixx.git] / test / Makefile
1
2 LOCAL_CFLAGS = -std=c++98 -Wall -pedantic -isystem include
3 LOCAL_LDFLAGS = -lboost_unit_test_framework
4
5 TESTPRG = test_suite
6 TESTCMD = ./$(TESTPRG) --detect_memory_leak=1 --report_level=short \
7 #               --build_info=yes --log_level=test_suite \
8 #               | grep -v "Entering test case " | grep -v "Leaving test case"
9
10 VALGRIND = valgrind --tool=memcheck --leak-check=yes --db-attach=no \
11                 --num-callers=24 --leak-resolution=high --track-fds=yes \
12                 --suppressions=valgrind.suppressions --error-exitcode=1
13
14
15 SOURCES = $(shell find -name '*.cpp')
16 OBJS = $(SOURCES:.cpp=.o)
17
18
19
20 ALL_CFLAGS = $(LOCAL_CFLAGS) $(LI_CFLAGS) $(CFLAGS)
21 ALL_LDFLAGS = $(LOCAL_LDFLAGS) $(LI_LDFLAGS) $(LDFLAGS)
22
23 ifdef RELEASE
24 ALL_CFLAGS += -O3 -NDEBUG
25 endif
26
27 ifdef DEBUG
28 ALL_CFLAGS += -g -DDEBUG
29 endif
30
31 ifdef PROFILE
32 ALL_CFLAGS += -g -pg -fprofile-arcs -ftest-coverage
33 endif
34
35
36 ifneq ($(V), 1)
37 NICE_CXX = @echo "  CXX $@"; $(CXX)
38 NICE_LINK = @echo "  LINK $@"; $(CXX)
39 NICE_TEST = @echo "  TEST"; $(TESTCMD) > $(TESTPRG).log 2>&1
40 NICE_MEMTEST = @echo "  MEMTEST"; $(VALGRIND) --log-file=valgrind.log \
41                 $(TESTCMD) > valgrind.$(TESTPRG).log 2>&1
42 NICE_CLEAN = @echo "  CLEAN"; $(RM)
43 else
44 NICE_CXX = $(CXX)
45 NICE_LINK = $(CXX)
46 NICE_TEST = $(TESTCMD)
47 NICE_MEMTEST = $(VALGRIND) $(TESTCMD)
48 NICE_CLEAN = $(RM) -v
49 endif
50
51
52 default: all
53
54 all: $(TESTPRG)
55
56
57 # dependency handling
58
59 # XXX the mkdir *has* to be inside the rule, otherwise make will build the
60 #     dependencies over and over again, because of this:
61 #     When a file that is included in the Makefile need to be built by itself,
62 #     the Makefile is re-executed after building the files to include. The
63 #     problem is, the directory .deps is updated *after* the files are created
64 #     in it, so when the Makefile re-executes, the files to include are created
65 #     but one of it's dependencies (the .deps directory) is outdated, so the
66 #     the files to include are re-built and the Makefile re-executed again,
67 #     entering in an infinite loop.
68 .deps/%.deps: %.cpp
69         @mkdir -p $(dir $@)
70         @set -e; rm -f $@; \
71                 $(CC) -MM -MG -MP $(CPPFLAGS) $(ALL_CFLAGS) $< -MF $@.$$$$; \
72                 sed 's,\($(notdir $*)\)\.o[ :]*,$(dir $<)\1.o $@ : ,g' \
73                                 < $@.$$$$ > $@; \
74                 rm -f $@.$$$$
75
76 ifneq ($(MAKECMDGOALS),clean)
77 -include $(addprefix .deps/,$(OBJS:.o=.deps))
78 endif
79
80
81 # main build
82
83
84 $(TESTPRG): $(OBJS)
85         $(NICE_LINK) $(ALL_LDFLAGS) -o $@ $^
86
87 $(OBJS): include
88
89 .cpp.o:
90         $(NICE_CXX) $(ALL_CFLAGS) -c $< -o $@
91
92 include:
93         @mkdir -p include
94         @ln -fs ../../src include/posixx
95
96 test: .test-stamp
97
98 .test-stamp: $(TESTPRG)
99         $(NICE_TEST)
100         @touch $@
101
102 memtest: .memtest-stamp
103
104 .memtest-stamp: $(TESTPRG)
105         $(NICE_MEMTEST)
106         @touch $@
107
108 clean:
109         $(NICE_CLEAN) -r $(TESTPRG) include $(OBJS) .deps valgrind.log \
110                 *.bb *.bbg *.da *.gcov *.gcda *.gcno gmon.out .*-stamp
111
112 .PHONY: default all test memtest clean
113
114