source: branches/species/UNIT_TESTER/Makefile.test

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