source: branches/gcc/UNIT_TESTER/Makefile.test

Last change on this file was 19810, checked in by westram, 3 weeks ago
File size: 7.2 KB
Line 
1# ----------------------------------------------------------
2#   _  _  __ _  __  ____    ____  ____  ____  ____  ____
3#  / )( \(  ( \(  )(_  _)  (_  _)(  __)/ ___)(_  _)/ ___)
4#  ) \/ (/    / )(   )(      )(   ) _) \___ \  )(  \___ \
5#  \____/\_)__)(__) (__)    (__) (____)(____/ (__) (____/
6#
7# ----------------------------------------------------------
8
9
10.SUFFIXES: .cxx .o .sym .done
11.PHONY: makedirs show_test_header
12
13dummy:
14        false
15
16include Makefile.setup.include
17
18RELUNITDIR=../$(UNITDIR)
19FULLUNITDIR=$(ARBHOME)/$(UNITDIR)
20
21# Note: whitespace is important for the following tests!
22
23SHAREDLIBS= \
24        CORE \
25        ARBDB \
26        AWT \
27        WINDOW \
28
29EXEOBJDIRS= \
30        TOOLS \
31        PERLTOOLS \
32        HELP_SOURCE \
33        AISC_MKPTPS \
34        PROBE_SET \
35
36ISSHAREDLIB=$(findstring  $(UNITDIR) , $(SHAREDLIBS) )
37ISEXEOBJECT=$(findstring  $(UNITDIR) , $(EXEOBJDIRS) )
38
39ifneq ($(ISSHAREDLIB),)
40        UNITLIB=$(UNITLIBNAME).$(SHARED_LIB_SUFFIX)
41else
42ifneq ($(ISEXEOBJECT),)
43        UNITLIB=$(UNITLIBNAME).o
44else
45        UNITLIB=$(UNITLIBNAME).a
46endif
47endif
48
49UNIQUE_NAME=test_$(subst /,_,$(subst .,_,$(UNITDIR)_$(UNITLIB)))
50
51ifneq ($(ISSHAREDLIB),)
52FULLLIB=$(ARBHOME)/lib/$(UNITLIB)
53else
54FULLLIB=$(FULLUNITDIR)/$(UNITLIB)
55endif
56
57RUNDIR=run# see also UnitTester.cxx@chdir
58
59SKIPPING_SLOW_TEST=$(wildcard skipslow.stamp)
60ifeq ($(SKIPPING_SLOW_TEST),)
61        DESTDIR=tests.slow
62else
63        DESTDIR=tests
64endif
65
66TEST_BASE=$(DESTDIR)/$(UNIQUE_NAME)
67
68SYMLIST=$(TEST_BASE).sym
69TEST_CODE=$(TEST_BASE).cxx
70TEST_OBJ=$(TEST_BASE).o
71TEST_EXE=$(TEST_BASE)
72TEST_DONE=$(TEST_BASE).done
73
74MAKESYMLIST=./make_symlist.sh
75MAKESYMLIST_DEPENDS=$(MAKESYMLIST) ./annotate_dwarf_locations.pl ./filter_objdump_syms.pl
76SYM2TESTCODE=./sym2testcode.pl
77DUMPTESTLOCATIONS=./dumpTestLocations.pl
78
79INCDIR=../INCLUDE
80
81INCLUDES= \
82        UnitTester.hxx \
83        $(INCDIR)/arb_assert.h \
84
85UNIT_TESTER_LIB=./UNIT_TESTER.a
86
87ifeq ($(UNITLIB),.a)
88# nothing given (only avoids undefined symbols)
89LINKLIST=
90LINKDEPS=
91else
92LINKLIST=$(shell ../SOURCE_TOOLS/needed_libs.pl -S -A .. -L $(FULLLIB))
93LINKDEPS=$(shell ../SOURCE_TOOLS/needed_libs.pl -S -A .. -F $(FULLLIB)) ../SOURCE_TOOLS/needed_libs.pl
94endif
95
96ifeq ($(CHECK_LEAKS),0)
97        LEAKS:=
98else
99ifeq ($(CHECK_LEAKS),1)
100        LEAKS:=-l
101else
102        LEAKS:=-l -r
103endif
104endif
105
106EXTRA_LINK_FLAGS =
107# print link details (e.g. what objects are taken from libs)
108# EXTRA_LINK_FLAGS += -Wl,--print-map
109# EXTRA_LINK_FLAGS += -Wl,-zdefs
110
111# --------------------------------------------------------------------------------
112
113clean:
114        rm -f $(DESTDIR)/*
115
116# --------------------------------------------------------------------------------
117
118$(DESTDIR):
119        test -d $(DESTDIR) || mkdir -p $(DESTDIR)
120
121$(RUNDIR):
122        test -d $(RUNDIR) || mkdir -p $(RUNDIR)
123
124makedirs: $(DESTDIR) $(RUNDIR)
125
126$(SYMLIST) : $(FULLLIB) Makefile $(MAKESYMLIST_DEPENDS) | makedirs show_test_header
127        $(MAKESYMLIST) $(FULLLIB) $(SYMLIST)
128
129$(TEST_CODE) : $(SYMLIST) $(SYM2TESTCODE) Makefile.test Makefile.setup.local
130        $(SYM2TESTCODE) $(UNITLIB) $(RESTRICT_MODULE) $(RESTRICT_FUN) $< $@.tmp $(WARN_LEVEL)
131        ../SOURCE_TOOLS/mv_if_diff $@.tmp $@
132
133$(TEST_OBJ) : $(TEST_CODE) $(INCLUDES)
134        $(A_CXX) $(cflags) $(cxxflags) -c $< -o $@ $(CXX_INCLUDES) $(POST_COMPILE) $<
135
136$(TEST_EXE) : $(TEST_OBJ) $(UNIT_TESTER_LIB) $(LINKDEPS) Makefile.test
137        $(LINK_EXECUTABLE) $@ $(EXTRA_LINK_FLAGS) $< $(UNIT_TESTER_LIB) -L../lib $(LINKLIST)
138
139dump:
140        @echo "$(SEP) dump $(UNITLIBNAME)"
141        @echo "UNITDIR        ='$(UNITDIR)'"
142        @echo "UNITLIBNAME    ='$(UNITLIBNAME)'"
143        @echo "FULLUNITDIR    ='$(FULLUNITDIR)'"
144        @echo "ISSHAREDLIB    ='$(ISSHAREDLIB)'"
145        @echo "UNITLIB        ='$(UNITLIB)'"
146        @echo "FULLLIB        ='$(FULLLIB)'"
147        @echo "UNIQUE_NAME    ='$(UNIQUE_NAME)'"
148        @echo "SYMLIST        ='$(SYMLIST)'"
149        @echo "TEST_CODE      ='$(TEST_CODE)'"
150        @echo "TEST_OBJ       ='$(TEST_OBJ)'"
151        @echo "TEST_EXE       ='$(TEST_EXE)'"
152        @echo "INCLUDES       ='$(INCLUDES)'"
153        @echo "LINKLIST       ='$(LINKLIST)'"
154        @echo "LINKDEPS       ='$(LINKDEPS)'"
155
156do_valgrind:
157        @echo "Valgrinding $(TEST_EXE)"
158        $(ARBHOME)/SOURCE_TOOLS/arb_valgrind -e -q $(LEAKS) -c 40 $(TEST_EXE) || \
159                echo "UnitTester: $(UNITLIBNAME) valgrind reports error(s)"
160
161show_test_header:
162        @echo ""
163        @echo "-------------------- [ Test $(UNITLIBNAME) ] --------------------"
164
165
166$(TEST_DONE) : $(TEST_EXE)
167        @echo "fake[2]: Entering directory \`$(FULLUNITDIR)'"
168ifeq ($(findstring B,$(VALGRIND)),B)
169        $(MAKE) -f Makefile.test do_valgrind
170endif
171        $(TEST_EXE)
172ifeq ($(COVERAGE),1)
173        @echo "UnitTester: coverage" # do not remove (used as trigger)
174        @echo "-------------------- test-coverage for $(UNITLIBNAME)"
175        ./gcov2msg.sh $(FULLUNITDIR) $(UNITLIBNAME)
176        @echo "-------------------- test-coverage for $(UNITLIBNAME) [end]"
177endif
178ifeq ($(findstring A,$(VALGRIND)),A)
179        $(MAKE) -f Makefile.test do_valgrind
180endif
181        @echo "fake[2]: Leaving directory \`$(FULLUNITDIR)'"
182        touch $@
183
184perform_test: $(TEST_DONE)
185        @echo "UnitTester: target=$(UNITLIBNAME) tests=0 (possibly skipped because unchanged)"
186
187skip_test:
188        @echo "UnitTester: target=$(UNITLIBNAME) tests=0 (skipped via RESTRICT_LIB)"
189
190# --------------------
191
192try_create_test_code:
193        @rm -f $(TEST_CODE)
194        ( $(MAKE) -f Makefile.test $(TEST_CODE) || true )
195#       always reports success. either create TEST_CODE or not.
196
197# --------------------
198# test to link untested units to make sure dependencies are defined correctly:
199TEST_LINK_UNTESTED_UNITS:=1
200
201# --------------------
202
203check_no_test: try_create_test_code
204        @( \
205                ( \
206                        test -f $(TEST_CODE) \
207                        && \
208                        ( \
209                                echo "Error: inactive testunit $(UNITLIBNAME) seems to contain tests -- please activate that unit"; \
210                                echo "UnitTester: target=$(UNITLIBNAME) tests=1 failed=1 (testunit has to be activated)"; \
211                        ) \
212                ) \
213                || \
214                echo "[ok] have no tests defined" \
215        )
216        @( test \! -f $(TEST_CODE) || ($(DUMPTESTLOCATIONS) $(TEST_CODE) ; false) ) # if TEST_CODE exists => report failure + bail out here
217ifeq ('$(TEST_LINK_UNTESTED_UNITS)', '1')
218        ( $(MAKE) -f Makefile.test test_linkage_of_untested_unit )
219else
220        @echo "[ok] did not check link dependencies"
221endif
222        @echo "UnitTester: target=$(UNITLIBNAME) tests=0 (proper inactive testunit)"
223
224test_linkage_of_untested_unit:
225        @rm -f $(TEST_CODE)
226        $(MAKE) -f Makefile.test "ACCEPT_ZERO_TESTS=1" $(TEST_EXE)
227
228# --------------------
229
230RUN:=perform_test
231
232ifneq ('$(RESTRICT_LIB)','')
233IS_RESTRICTED_TO=$(findstring :$(UNITLIBNAME):,:$(RESTRICT_LIB):)
234ifeq ('$(IS_RESTRICTED_TO)','')
235        RUN:=skip_test
236endif
237endif
238
239# --------------------
240
241ifeq ($(ONLY_CHANGED_TESTS),0)
242
243always:
244        @echo forcing target $(TEST_DONE)
245
246$(TEST_DONE) : always
247
248else
249
250# declare some EXTRA_TEST_DEPENDENCIES
251
252TOOLDIR=../bin
253
254# tests in arb_test.o call several command-line-tools:
255$(DESTDIR)/test_TOOLS_arb_test_o.done : \
256        $(TOOLDIR)/arb_calc_pvp \
257        $(TOOLDIR)/arb_export_newick \
258        $(TOOLDIR)/arb_export_tree \
259        $(TOOLDIR)/arb_export_rates \
260        $(TOOLDIR)/arb_export_sequences \
261        $(TOOLDIR)/arb_export_seq_filtered \
262        $(TOOLDIR)/arb_probe \
263        $(TOOLDIR)/arb_probe_match \
264        $(TOOLDIR)/arb_dnarates \
265
266# force tests affected by changed pt-server:
267$(DESTDIR)/test_MULTI_PROBE_MULTI_PROBE_a.done : $(TOOLDIR)/arb_pt_server
268$(DESTDIR)/test_AWTC_AWTC_a.done : $(TOOLDIR)/arb_pt_server
269$(DESTDIR)/test_TOOLS_arb_probe_o.done : $(TOOLDIR)/arb_pt_server
270$(DESTDIR)/test_TOOLS_arb_test_o.done : $(TOOLDIR)/arb_pt_server
271
272# help test depends on xslt processing
273XSLTDIR=../HELP_SOURCE
274$(DESTDIR)/test_HELP_SOURCE_arb_help2xml_o.done : $(XSLTDIR)/to_help.xsl $(XSLTDIR)/to_html.xsl
275
276endif
277
278# --------------------
279
280runtest: $(RUN)
281#runtest: dump
282
Note: See TracBrowser for help on using the repository browser.