source: tags/testbuild/Makefile

Last change on this file was 13145, checked in by westram, 10 years ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 70.1 KB
Line 
1# =============================================================== #
2#                                                                 #
3#   File      : Makefile                                          #
4#                                                                 #
5#   Institute of Microbiology (Technical University Munich)       #
6#   http://www.arb-home.de/                                       #
7#                                                                 #
8# =============================================================== #
9
10# -----------------------------------------------------
11# The ARB Makefile is aware of the following defines:
12#
13# CC                    C compiler (should be defined by OS)
14# CXX                   C++ compiler (should be defined by OS)
15#
16# BUILDHOST_64=0/1      1=>compile on 64 bit platform (defaults to ARB_64)
17# DEVELOPER=name        special compilation (values: ANY,RELEASE,your name)
18# OPENGL=0/1            whether OPENGL is available
19#
20# -----------------------------------------------------
21# ARB Makefile and ARB source code are aware of the following defines:
22#
23# $(MACH)               name of the machine (LINUX or DARWIN; see config.makefile)
24# DEBUG                 compiles the DEBUG sections
25# DEBUG_GRAPHICS        all X-graphics are flushed immediately (for debugging)
26# ARB_64=0/1            1=>compile 64 bit version
27# UNIT_TESTS=0/1        1=>compile in unit tests and call them after build
28# COVERAGE=0/1/2        compile in gcov support (useful together with UNIT_TESTS=1)
29#                       0=no, 1+2=compile in, 1=show
30# STABS=0/1             force stabs format? (0 = "use default format")
31# SANITIZE=0/#/all      use Sanitizer? (defaults to 0,
32#                                       1=AddressSanitizer+LeakSanitizer,
33#                                       2=UndefinedBehaviorSanitizer,
34#                                       combine bit-values to activate multiple Sanitizers,
35#                                       specify 'all' to activate all)
36# SHOWTODO=0/1          activate TODO-warnings? (defaults to 0, except for ralf)
37#
38# -----------------------------------------------------
39# The ARB source code is aware of the following defines:
40#
41# NDEBUG                doesn't compile the DEBUG sections
42# DEVEL_$(DEVELOPER)    developer-dependent flag (enables you to have private sections in code)
43#                       DEVELOPER='ANY' (default setting) will be ignored
44#                       configurable in config.makefile
45#
46# -----------------------------------------------------
47# Read configuration
48include config.makefile
49
50# set defaults for variables commented out in config.makefile:
51ifndef DARWIN
52        DARWIN:=0
53endif
54ifndef LINUX
55        LINUX:=0
56endif
57ifndef DEBIAN
58        DEBIAN:=0
59endif
60ifndef REDHAT
61        REDHAT:=0
62endif
63ifndef ARB_64
64        ARB_64=1#default to 64bit
65endif
66
67# compiler settings:
68ifneq ($(CC),use__A_CC__instead_of__CC)
69
70A_CC:=$(CC)# compile C
71A_CXX:=$(CXX)# compile C++
72
73# uncomment to ensure no submakefile uses CC and CXX directly
74override CC:=use__A_CC__instead_of__CC
75override CXX:=use__A_CXX__instead_of__CXX
76
77endif
78
79export CC CXX A_CC A_CXX
80
81# unconditionally prepend $(ARBHOME)/lib to LD_LIBRARY_PATH if not found
82ifeq ($(findstring $(ARBHOME)/lib,$(LD_LIBRARY_PATH)),)
83LD_LIBRARY_PATH:=${ARBHOME}/lib:$(LD_LIBRARY_PATH)
84endif
85
86FORCEMASK = umask 002
87NODIR=--no-print-directory
88
89SED:=$(ARBHOME)/SH/arb_sed
90READLINK:=$(ARBHOME)/SH/arb_readlink
91
92# ---------------------- compiler version detection
93
94# supported gcc versions:
95ALLOWED_gcc_VERSIONS=\
96        4.3.1 4.3.2 4.3.3 4.3.4 \
97        4.4.1       4.4.3       4.4.5 4.4.6  4.4.7 \
98              4.5.2 \
99        4.6.1 4.6.2 4.6.3 \
100        4.7.1 4.7.2 4.7.3 4.7.4 \
101  4.8.0 4.8.1 4.8.2 4.8.3 \
102  4.9.0 4.9.1 4.9.2 \
103
104# supported clang versions:
105ALLOWED_clang_VERSIONS=\
106        4.2.1 \
107
108# ----------------------
109
110COMPILER_INFO:=$(shell SOURCE_TOOLS/arb_compiler_version.pl $(A_CXX))
111COMPILER_NAME:=$(word 1,$(COMPILER_INFO))
112COMPILER_VERSION:=$(word 2,$(COMPILER_INFO))
113
114USE_CLANG:=0
115ifneq ($(COMPILER_NAME),gcc)
116 ifeq ($(COMPILER_NAME),clang)
117  USE_CLANG:=1
118 else
119  $(error failed to detect COMPILER_NAME (got '$(COMPILER_NAME)', expected 'clang' or 'gcc'))
120 endif
121endif
122
123ifeq ($(USE_CLANG),1)
124ALLOWED_COMPILER_VERSIONS=$(ALLOWED_clang_VERSIONS)
125else
126ALLOWED_COMPILER_VERSIONS=$(ALLOWED_gcc_VERSIONS)
127endif
128
129COMPILER_VERSION_ALLOWED=$(strip $(subst ___,,$(foreach version,$(ALLOWED_COMPILER_VERSIONS),$(findstring ___$(version)___,___$(COMPILER_VERSION)___))))
130
131#---------------------- split gcc version
132
133SPLITTED_VERSION:=$(subst ., ,$(COMPILER_VERSION))
134
135USE_GCC_MAJOR:=$(word 1,$(SPLITTED_VERSION))
136USE_GCC_MINOR:=$(word 2,$(SPLITTED_VERSION))
137USE_GCC_PATCHLEVEL:=$(word 3,$(SPLITTED_VERSION))
138
139USE_GCC_452_OR_HIGHER:=
140USE_GCC_46_OR_HIGHER:=
141USE_GCC_47_OR_HIGHER:=
142USE_GCC_48_OR_HIGHER:=
143USE_GCC_49_OR_HIGHER:=
144
145ifeq ($(USE_GCC_MAJOR),4)
146 ifeq ($(USE_GCC_MINOR),5)
147  ifneq ('$(findstring $(USE_GCC_PATCHLEVEL),23456789)','')
148   USE_GCC_452_OR_HIGHER:=yes
149  endif
150 else
151  ifneq ('$(findstring $(USE_GCC_MINOR),6789)','')
152   USE_GCC_452_OR_HIGHER:=yes
153   USE_GCC_46_OR_HIGHER:=yes
154   ifneq ($(USE_GCC_MINOR),6)
155    USE_GCC_47_OR_HIGHER:=yes
156    ifneq ($(USE_GCC_MINOR),7)
157     USE_GCC_48_OR_HIGHER:=yes
158      ifneq ($(USE_GCC_MINOR),8)
159       USE_GCC_49_OR_HIGHER:=yes
160      endif
161    endif
162   endif
163  endif
164 endif
165else
166 USE_GCC_452_OR_HIGHER:=yes
167 USE_GCC_46_OR_HIGHER:=yes
168 USE_GCC_47_OR_HIGHER:=yes
169 USE_GCC_48_OR_HIGHER:=yes
170 USE_GCC_49_OR_HIGHER:=yes
171endif
172
173#---------------------- define special directories for non standard builds
174
175ifeq ($(DARWIN),1)
176        OSX_FW:=/System/Library/Frameworks
177        OSX_FW_OPENGL:=$(OSX_FW)/OpenGL.framework/Versions/A/Libraries
178        OSX_FW_GLUT:=$(OSX_FW)/GLUT.framework/Versions/A/Libraries
179        OSX_FW_IMAGEIO:=$(OSX_FW)/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources
180endif
181
182#----------------------
183
184ifeq ($(DARWIN),1)
185        LINK_STATIC=1# link static
186else
187        LINK_STATIC=0# link dynamically
188#       LINK_STATIC=1# link static (testing only)
189endif
190
191shared_cflags :=# flags for shared lib compilation
192lflags :=# linker flags
193clflags :=# linker flags (when passed through gcc)
194extended_warnings :=# warning flags for C and C++-compiler
195extended_cpp_warnings :=# warning flags for C++-compiler only
196
197# TEMPORARY WORKAROUND for linker issues with launchpad binutils
198# code was added to ld to check for overlapping FDEs. Since ARB
199# worked before, we want this not to fail for the moment.
200# FIXME: remove this!
201clflags += -Wl,-noinhibit-exec
202
203
204ifeq ($(DEBUG),0)
205        dflags := -DNDEBUG# defines
206        ifeq ($(USE_CLANG),1)
207                cflags := -O3# compiler flags (C and C++)
208        else
209                cflags := -O4# compiler flags (C and C++)
210                lflags += -O2# linker flags
211                clflags += -Wl,-O2# passthrough linker flags
212        endif
213endif
214
215ifeq ($(DEBIAN),1)
216        lflags += -rpath=/usr/lib/arb/lib -z relro
217        clflags += -Wl,-rpath=/usr/lib/arb/lib -Wl,-z,relro
218endif
219
220ifeq ($(DEBUG),1)
221        dflags := -DDEBUG
222
223        gdb_common := -g -g3 -ggdb -ggdb3
224
225DBGOPTI:=-O0
226ifeq ('$(USE_GCC_48_OR_HIGHER)','yes')
227DBGOPTI:=-Og
228endif
229
230ifeq ($(STABS),1)
231        cflags := $(DBGOPTI)  $(gdb_common) -gstabs+  # using stabs+ (enable this for bigger debug session: debugs inlines, quick var inspect, BUT valgrind stops working :/)
232else
233        cflags := $(DBGOPTI) $(gdb_common) # (using dwarf - cant debug inlines here, incredible slow on showing variable content)
234endif
235
236#       cflags := $(DBGOPTI) $(gdb_common) -gdwarf-3 # (specify explicit dwarf format)
237#       cflags := $(DBGOPTI) $(gdb_common) -gstabs  # using stabs (same here IIRC)
238#       cflags := -O2 $(gdb_common) # use this for callgrind (force inlining)
239
240ifeq ($(DARWIN),0)
241        lflags += -g
242        clflags += -Wl,-g
243endif
244
245 ifeq ($(DEBUG_GRAPHICS),1)
246        dflags += -DDEBUG_GRAPHICS
247 endif
248
249endif # DEBUG only
250
251# control how much you get spammed
252# (please do not change default in SVN, use developer specific setting as below)
253        POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl
254#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --original# dont modify compiler output
255#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --hide-Noncopyable-advices
256#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --show-useless-Weff++
257#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --no-warnings
258#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --only-first-error
259#       POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --no-warnings --only-first-error
260ifeq ($(DEVELOPER),ELMAR)
261        POST_COMPILE := 2>&1 | $(ARBHOME)/SOURCE_TOOLS/postcompile.pl --only-first-error
262endif
263
264# Enable extra warnings
265        extended_warnings :=
266        extended_cpp_warnings :=
267
268#       C and C++
269        extended_warnings     += -Wwrite-strings -Wunused -Wno-aggregate-return -Wshadow
270
271#       C++ only
272        extended_cpp_warnings += -Wnon-virtual-dtor -Wreorder -Wpointer-arith -Wdisabled-optimization -Wmissing-format-attribute
273        extended_cpp_warnings += -Wctor-dtor-privacy# < gcc 3
274#       extended_cpp_warnings += -Wfloat-equal# gcc 3.0
275
276# ------- above only warnings available in 3.0
277
278WEFFC_BROKEN:=0
279 ifeq ('$(USE_GCC_47_OR_HIGHER)','yes')
280  ifneq ('$(USE_GCC_48_OR_HIGHER)','yes')
281#  -Weffc++ broken in 4.7.x series
282# gcc 4.7.3 crashes on GenomeImport.cxx when -Weffc++ is active
283# (bug reported https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56923; apparently wont be fixed for 4.7-series)
284# gcc 4.7.4 crashes on DBwriter.cxx when -Weffc++ is active
285   WEFFC_BROKEN:=1
286  endif
287 endif
288 ifeq ('$(WEFFC_BROKEN)','0')
289        extended_cpp_warnings += -Weffc++# gcc 3.0.1
290 endif
291        extended_cpp_warnings += -Wmissing-noreturn# gcc 3.0.2
292#       extended_cpp_warnings += -Wold-style-cast# gcc 3.0.4 (warn about 28405 old-style casts)
293        extended_cpp_warnings += -Winit-self# gcc 3.4.0
294        extended_cpp_warnings += -Wstrict-aliasing# gcc 3.4
295        extended_cpp_warnings += -Wextra# gcc 3.4.0
296 ifeq ($(DEBUG),1)
297#       turn off -Wmaybe-uninitialized in debug mode (gets activated with -Wextra). too many bogus warnings
298        extended_cpp_warnings += -Wno-maybe-uninitialized
299 endif
300 ifeq ('$(USE_GCC_452_OR_HIGHER)','yes')
301        extended_cpp_warnings += -Wlogical-op# gcc 4.5.2
302 endif
303 ifeq ('$(USE_GCC_47_OR_HIGHER)','yes')
304#       extended_cpp_warnings += -Wunused-local-typedefs# gcc 4.7 (fails for each STATIC_ASSERT, enable only for Cxx11)
305#       extended_cpp_warnings += -Wzero-as-null-pointer-constant# gcc 4.7 #@@@ activate
306 endif
307 ifeq ('$(USE_GCC_48_OR_HIGHER)','yes')
308        extended_cpp_warnings += -Wunused-local-typedefs# available since gcc 4.7 (but fails for each STATIC_ASSERT, so enable only for Cxx11)
309 endif
310
311#---------------------- turn off clang bogus warnings
312
313ifeq ($(USE_CLANG),1)
314# -Wmismatched-tags warns about struct/class mismatch in forward declarations (which is explicitely allowed)
315# -Wchar-subscripts reports too many bogus warnings for "array['x']" (when 'x' is known to be in range [0..128])
316# -Wunused-private-field report too many false positives (currently ~ 2 of 3)
317# -Wstring-plus-int warns about common ARB coding practice
318# -Wgnu-static-float-init warns about accepted GNU extension
319        extended_cpp_warnings += -Wno-mismatched-tags -Wno-char-subscripts -Wno-unused-private-field -Wno-string-plus-int -Wno-gnu-static-float-init
320endif
321
322#---------------------- developer
323
324ifneq ($(DEVELOPER),ANY) # ANY=default setting (skip all developer specific code)
325        dflags += -DDEVEL_$(DEVELOPER)# activate developer/release specific code
326endif
327
328#---------------------- activate TODO warnings?
329
330ifndef SHOWTODO
331 ifeq ($(DEVELOPER),RALF)
332        SHOWTODO:=1
333 else
334        SHOWTODO:=0
335 endif
336endif
337ifeq ($(SHOWTODO),1)
338        dflags += -DWARN_TODO# activate "TODO" warnings
339endif
340
341#---------------------- activate Sanitizers?
342
343ASAN_OPTIONS:=handle_segv=0:color=0
344ASAN_OPTIONS+=:detect_leaks=1 # comment-out to disable leak-detection
345ASAN_OPTIONS+=:check_initialization_order=1
346
347# suppressions: SOURCE_TOOLS/arb.leaksan.supp
348LSAN_OPTIONS:=max_leaks=3:suppressions=$(ARBHOME)/SOURCE_TOOLS/arb.leaksan.supp
349
350
351ifndef SANITIZE
352 SANITIZE:=0
353endif
354
355SANITIZE_ADDRESS:=0
356SANITIZE_UNDEFINED:=0
357
358ifneq ($(SANITIZE),0)
359 ifeq ($(SANITIZE),all)
360  SANITIZE:=3
361 endif
362
363 ifeq ($(SANITIZE),1)
364  SANITIZE_ADDRESS:=1
365 else
366  ifeq ($(SANITIZE),2)
367   SANITIZE_UNDEFINED:=1
368  else
369   ifeq ($(SANITIZE),3)
370    SANITIZE_ADDRESS:=1
371    SANITIZE_UNDEFINED:=1
372   else
373    $(error Unknown value '$(SANITIZE)' specified for SANITIZE in config.makefile)
374   endif
375  endif
376 endif
377endif
378
379ifeq ($(SANITIZE_ADDRESS),1)
380 ifneq ('$(USE_GCC_48_OR_HIGHER)','yes')
381  $(info AddressSanitizer not usable with gcc $(COMPILER_VERSION) - disabled)
382  SANITIZE_ADDRESS:=0
383 else
384  ifneq ('$(USE_GCC_49_OR_HIGHER)','yes')
385   $(warning note that LeakSanitizer does not work with gcc $(COMPILER_VERSION))
386  endif
387 endif
388endif
389
390ifeq ($(SANITIZE_UNDEFINED),1)
391 ifneq ('$(USE_GCC_49_OR_HIGHER)','yes')
392  $(info UndefinedBehaviorSanitizer not usable with gcc $(COMPILER_VERSION) - disabled)
393  SANITIZE_UNDEFINED:=0
394 endif
395endif
396
397#---------------------- 32 or 64 bit
398
399ifndef BUILDHOST_64
400        BUILDHOST_64:=$(ARB_64)# assume build host is same as version (see config.makefile)
401endif
402
403cross_cflags:=
404cross_lflags:=
405cross_clflags:=
406
407ifeq ($(ARB_64),1)
408        dflags += -DARB_64 #-fPIC
409        shared_cflags += -fPIC
410
411        ifeq ($(BUILDHOST_64),1)
412#               build 64-bit ARB version on 64-bit host
413                CROSS_LIB:=# empty = autodetect below
414                ifeq ($(DARWIN),1)
415                        cross_cflags  += -arch x86_64
416                        cross_lflags  += -arch x86_64
417                        cross_clflags += -arch x86_64
418                endif
419        else
420#               build 64-bit ARB version on 32-bit host
421                CROSS_LIB:=/lib64
422                cross_cflags += -m64
423                cross_lflags += -m64 -m elf_x86_64
424                cross_clflags += -m64 -Wl,-m64,-m,elf_x86_64
425        endif
426else
427        ifeq ($(BUILDHOST_64),1)
428#               build 32-bit ARB version on 64-bit host
429                CROSS_LIB:=# empty = autodetect below
430                cross_cflags += -m32
431                cross_lflags += -m32 -m elf_i386
432                cross_clflags += -m32 -Wl,-m32,-m,elf_i386
433        else
434#               build 32-bit ARB version on 32-bit host
435                CROSS_LIB:=/lib
436        endif
437endif
438
439cflags  += $(cross_cflags)
440lflags  += $(cross_lflags)
441clflags += $(cross_clflags)
442
443ifeq ('$(CROSS_LIB)','')
444# autodetect libdir
445        ifeq ($(ARB_64),1)
446                CROSS_LIB:=$(shell (test -d /lib64 && echo lib64) || echo lib)
447        else
448                CROSS_LIB:=$(shell (test -d /lib32 && echo lib32) || echo lib)
449        endif
450endif
451
452#---------------------- unit tests
453
454ifndef UNIT_TESTS
455        UNIT_TESTS=0#default is "no tests"
456endif
457ifeq ($(UNIT_TESTS),1)
458        dflags += -DUNIT_TESTS
459        UNIT_TESTER_LIB=UNIT_TESTER/UNIT_TESTER.a
460else
461        UNIT_TESTER_LIB=
462endif
463
464#---------------------- use gcov
465
466ifndef COVERAGE
467        COVERAGE=0#default is "no"
468endif
469ifneq ($(COVERAGE),0)
470        GCOVFLAGS=-ftest-coverage -fprofile-arcs
471        cflags += $(GCOVFLAGS)
472        EXECLIBS=-lgcov
473else
474        GCOVFLAGS=
475        EXECLIBS=
476endif
477
478#---------------------- other flags
479
480dflags += -D$(MACH) # define machine
481
482ifeq ($(DARWIN),1)
483        shared_cflags += -fno-common
484else
485        dflags +=  $(shell getconf LFS_CFLAGS)
486endif
487
488cflags += -pipe
489cflags += -fmessage-length=0# don't wrap compiler output
490cflags += -fshow-column# show columns
491cflags += -funit-at-a-time
492cflags += -fPIC
493cflags += -fno-common# link all global data into one namespace
494cflags += -fstrict-aliasing# gcc 3.4
495ifeq ('$(USE_GCC_48_OR_HIGHER)','yes')
496 cflags += -fno-diagnostics-show-caret#gcc 4.8 (4.7.?)
497endif
498#cflags += -save-temps# uncomment to see preprocessor output
499
500#---------------------- various sanitizers
501
502COMMON_SANITIZE_FLAGS:=-ggdb3 -fno-omit-frame-pointer
503
504# activate AddressSanitizer+LeakSanitizer?
505ifeq ($(SANITIZE_ADDRESS),1)
506 cflags += $(COMMON_SANITIZE_FLAGS) -fsanitize=address
507 EXECLIBS += -lasan
508# EXECLIBS += -static-libasan
509endif
510
511# activate UndefinedBehaviorSanitizer?
512ifeq ($(SANITIZE_UNDEFINED),1)
513 cflags += $(COMMON_SANITIZE_FLAGS) -fsanitize=undefined
514 ifeq ('$(DEBUG)','1')
515  ifeq ($(USE_GCC_MAJOR),4)
516   ifeq ($(USE_GCC_MINOR),9)
517    ifneq ('$(findstring $(USE_GCC_PATCHLEVEL),01)','')
518# workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63531 for 4.9.0 + 4.9.1
519# (problem is fixed in 4.9.2 release)
520     extended_cpp_warnings:=$(subst -Weffc++,,$(extended_cpp_warnings))
521    endif
522   endif
523  endif
524 endif
525 EXECLIBS += -lubsan
526endif
527
528#---------------------- X11 location
529
530ifeq ($(DARWIN),1)
531        XHOME:=$(PREFIX)
532else
533 ifeq ($(DEBIAN),1)
534        XHOME:=$(PREFIX)
535 else
536        XHOME:=/usr/X11R6
537 endif
538endif
539
540XINCLUDES:=-I$(XHOME)/include
541ifeq ($(DARWIN),1)
542        XINCLUDES += -I$(OSX_FW)/GLUT.framework/Headers -I$(OSX_FW)/OpenGL.framework/Headers -I$(OSX_SDK)/usr/include/krb5
543
544        XLIBS := -L$(XHOME)/lib -lXm -lpng -lz -lXt -lX11 -lXext -lXp -lXmu -lXi
545        XLIBS += -Wl,-dylib_file,$(OSX_FW_OPENGL)/libGL.dylib:$(OSX_FW_OPENGL)/libGL.dylib
546        XLIBS += -Wl,-dylib_file,$(OSX_FW_OPENGL)/libGLU.dylib:$(OSX_FW_OPENGL)/libGLU.dylib
547else
548        XLIBS:=-L$(XHOME)/$(CROSS_LIB) -lXm -lXpm -lXt -lXext -lX11
549endif
550
551dflags += -DARB_MOTIF
552
553#---------------------- open GL
554
555ifeq ($(OPENGL),1)
556        cflags += -DARB_OPENGL # activate OPENGL code
557        GL     := gl # this is the name of the OPENGL base target
558        GL_LIB_SYS := -lGL -lGLU
559        GL_LIB_ARB := -L$(ARBHOME)/GL/glAW -lglAW
560
561        ifeq ($(DARWIN),1)
562                GL_LIB_SYS += -lpthread
563        endif
564
565        GL_PNGLIBS_ARB := -L$(ARBHOME)/GL/glpng -lglpng_arb
566        GL_PNGLIBS_SYS := -lpng
567
568        GLEWLIB := -lGLEW -lGLw
569        ifeq ($(DARWIN),1)
570                GLUTLIB := -glut
571        else
572                GLUTLIB := -lglut
573        endif
574
575        GL_LIBS_SYS := $(GL_LIB_SYS) $(GL_PNGLIBS_SYS) $(GLEWLIB) $(GLUTLIB)
576        GL_LIBS_ARB := $(GL_LIB_ARB) $(GL_PNGLIBS_ARB)
577
578        RNA3D_LIB := RNA3D/RNA3D.a
579
580else
581
582        GL_LIBS_ARB:=# no opengl -> no libs
583        GL_LIBS_SYS:=# no opengl -> no libs
584        GL:=# don't build ARB openGL libs
585
586        RNA3D_LIB :=
587
588endif
589
590RNA3D_LIB_4_DEPENDS := RNA3D/RNA3D.a
591
592GL_LIBS:=$(GL_LIBS_ARB) $(GL_LIBS_SYS)
593
594#---------------------- tiff lib:
595
596TIFFLIBS := -ltiff
597
598#---------------------- glib:
599
600ARB_NEEDED_GLIB=glib-2.0
601
602ARB_GLIB_INCLUDE:=$(strip $(shell pkg-config --cflags $(ARB_NEEDED_GLIB)))
603ARB_GLIB_LIBS:=$(strip    $(shell pkg-config --libs   $(ARB_NEEDED_GLIB)))
604
605#---------------------- basic libs:
606
607SYSLIBS:=
608
609ifeq ($(DARWIN),1)
610        SYSLIBS += -lstdc++
611else
612        SYSLIBS += -lm $(ARB_GLIB_LIBS)
613endif
614
615#---------------------- include symbols?
616
617ifeq ($(TRACESYM),1)
618        ifeq ($(USE_CLANG),0)
619                cflags  += -rdynamic
620                lflags  += --export-dynamic
621                clflags += -rdynamic -Wl,--export-dynamic
622        endif
623endif
624
625#---------------------- system dependent commands
626
627ifeq ($(DARWIN),1)
628        TIME:=gtime
629else
630        TIME:=/usr/bin/time
631endif
632
633# -------------------------------------------------------------------------
634#       Don't put any machine/version/etc conditionals below!
635#       (instead define variables above)
636# -------------------------------------------------------------------------
637
638cflags += -W -Wall $(dflags) $(extended_warnings)
639cxxflags := $(extended_cpp_warnings)
640
641# add CFLAGS + CPPFLAGS from environment for DEBIAN build
642ifeq ($(DEBIAN),1)
643        cflags := $(CFLAGS) $(cflags)
644        cxxflags += $(CPPFLAGS)
645endif
646
647ifeq ('$(USE_GCC_47_OR_HIGHER)','yes')
648cxxflags += -std=gnu++11# see also TEMPLATES/cxxforward.h@USE_Cxx11
649else
650# only use for gcc versions between 4.3 and <4.7 (4.7++ adds -Wc++11-compat above)
651HAVE_GNUPP0X=`SOURCE_TOOLS/requireVersion.pl 4.3 $(COMPILER_VERSION)`
652 ifeq ($(HAVE_GNUPP0X),1)
653# ensure compatibility with upcoming C++ standard
654cxxflags += -std=gnu++0x
655 endif
656endif
657
658LINK_STATIC_LIB := ld $(lflags) -r -o# link static lib
659LINK_EXECUTABLE := $(A_CXX) $(clflags) -o# link executable (c++)
660
661ifeq ($(LINK_STATIC),1)
662SHARED_LIB_SUFFIX = a# static lib suffix
663LINK_SHARED_LIB := $(LINK_STATIC_LIB)
664else
665SHARED_LIB_SUFFIX = so# shared lib suffix
666LINK_SHARED_LIB := $(A_CXX) $(clflags) -shared $(GCOVFLAGS) -o# link shared lib
667endif
668
669# delete variables unused below
670lflags:=
671clflags:=
672
673# other used tools
674MAKEDEPEND_PLAIN = makedepend
675MAKEDEPEND = $(FORCEMASK);$(MAKEDEPEND_PLAIN)
676
677#SEP:=--------------------------------------------------------------------------------
678SEP=[`date +%M:%S.%N`] ------------------------------------------------
679# to analyse timings run
680# make -j9 clean; make -j9 all  | grep '^\[' | sort
681# make -j9 "TIMED_TARGET=perl" clean_timed_target | grep '^\[' | sort
682
683CORE_LIB=-lCORE
684ARBDB_LIB=-lARBDB $(CORE_LIB)
685LIBS = $(ARBDB_LIB) $(SYSLIBS)
686
687GUI_LIBS_PREFIX:=
688ifeq ($(DARWIN),1)
689#       this seem to be added at wrong place, since opengl is only needed to link EDIT4
690        GUI_LIBS_PREFIX:=-framework GLUT -framework OpenGL
691endif
692
693GUI_LIBS=$(GUI_LIBS_PREFIX) $(LIBS) -lAWT -lWINDOW
694GUI_LIBS+=$(XLIBS)
695
696LIBPATH = -L$(ARBHOME)/lib
697
698DEST_LIB = lib
699DEST_BIN = bin
700
701CC_INCLUDES  := -I. -I$(ARBHOME)/INCLUDE $(XINCLUDES) $(ARB_GLIB_INCLUDE)
702CXX_INCLUDES := $(CC_INCLUDES)
703MAKEDEPENDFLAGS := -- -DARB_OPENGL -DUNIT_TESTS -D__cplusplus -I. -Y$(ARBHOME)/INCLUDE
704
705# -------------------------------
706#     old PTSERVER or PTPAN?
707
708ifeq ($(PTPAN),1)
709# PTPAN only libs
710ARCHS_PT_SERVER = \
711        ptpan/PROBE.a
712else
713ifeq ($(PTPAN),2)
714# special mode to compile both servers (developers only!)
715ARCHS_PT_SERVER = \
716        ptpan/PROBE.a \
717        PROBE/PROBE.a
718ARCHS_PT_SERVER_LINK = PROBE/PROBE.a# default to old ptserver
719else
720# PT-server only libs
721ARCHS_PT_SERVER = \
722        PROBE/PROBE.a
723endif
724endif
725
726ifndef ARCHS_PT_SERVER_LINK
727ARCHS_PT_SERVER_LINK = $(ARCHS_PT_SERVER)
728endif
729
730# ---------------------------------------
731# wrap main()
732
733use_ARB_main=$(ARBHOME)/SOURCE_TOOLS/arb_main_cpp.o
734use_ARB_main_C=$(ARBHOME)/SOURCE_TOOLS/arb_main_c.o
735
736# -----------------------------------------
737#     export variables to submakefiles     
738
739include SOURCE_TOOLS/export2sub
740
741# do not define (exported) variables below this point
742
743# -------------------------
744#     Main arb targets:     
745# -------------------------
746
747first_target:
748                $(MAKE) checks
749                @echo $(SEP)
750                @echo 'Main targets:'
751                @echo ''
752                @echo ' all         - Compile ARB + TOOLs + and copy shared libs + link foreign software'
753                @echo '               (That is most likely the target you want)'
754                @echo ''
755                @echo ' clean       - remove generated files ("SUBDIR/SUBDIR.clean" to clean only SUBDIR)'
756                @echo ' rebuild     - clean + all'
757                @echo ' relink      - remove all binaries and relink them from objects'
758                @echo ''
759                @echo 'Some often used sub targets (make all makes them all):'
760                @echo ''
761                @echo ' arb         - Just compile ARB (but none of the integrated tools)'
762                @echo ' menus       - create lib/gde/arb.menu from GDEHELP/ARB_GDEmenus.source'
763                @echo ' perl        - Compile the PERL XSUBS into lib/ARB.so  and create links in lib to perl'
764                @echo ' binlink     - Create all links in the bin directory'
765                @echo ''
766                @echo 'Development targets:'
767                @echo ''
768                @echo ' depends      - create or update dependencies ("SUBDIR/SUBDIR.depends" to update only SUBDIR)'
769                @echo ' proto        - create or update prototypes ("SUBDIR/SUBDIR.proto" to update only SUBDIR)'
770                @echo ' tags         - create tags for xemacs'
771                @echo ' show         - show available shortcuts (AKA subtargets)'
772                @echo ' up           - shortcut for depends+proto+tags'
773ifeq ($(UNIT_TESTS),1)
774                @echo ' ut           - only run tests'
775endif
776                @echo ' modified     - rebuild files modified in svn checkout (does touch)'
777                @echo ' touch        - touch files modified in svn checkout'
778                @echo ''
779                @echo 'Internal maintenance:'
780                @echo ''
781                @echo ' relinfo     - show help on release targets'
782                @echo ' tarfile     - make rebuild and create arb version tarfile ("tarfile_quick" to skip rebuild)'
783                @echo ' save        - save all basic ARB sources into arbsrc_DATE ("savetest" to check filelist)'
784                @echo ' patch       - save svn diff to patchfile'
785                @echo ' source_doc  - create doxygen documentation'
786                @echo ' relocated   - rebuild partly (use when you have relocated ARBHOME)'
787                @echo ' check_res   - check ressource usage'
788                @echo ' dep_graph   - Build dependency graphs'
789                @echo ' clean_cov   - Clean coverage results'
790                @echo ''
791                @echo ' post_commit_check - Checks whether'
792                @echo '                     * main make targets work,'
793                @echo '                     * dependencies and prototypes are up to date,'
794                @echo '                     * SVN-controlled files remain unaffected by called targets and'
795                @echo '                     * all generated files are ignored.'
796                @echo '                     (has to be called in a clean SVN checkout)'
797                @echo $(SEP)
798                @echo ''
799
800relinfo:
801                @echo ''
802                @echo $(SEP)
803                @echo 'Release targets:'
804                @echo ''
805                @echo ' inc_candi     - increase RC candidate-number  (only possible in "rc" branch, not needed for RC1)'
806                @echo ' inc_patch     - increase release patchlevel   (only possible in "stable" branch)'
807                @echo ' inc_minor     - increase minor version number (only possible in "trunk")'
808                @echo ' inc_major     - increase MAJOR version number (only possible in "trunk")'
809                @echo ''
810                @echo ' show_version  - show version tag'
811                @echo ''
812                @echo $(SEP)
813                @echo ''
814
815# auto-generate config.makefile:
816
817CONFIG_MAKEFILE_FOUND=$(wildcard config.makefile)
818
819config.makefile : config.makefile.template
820                @echo --------------------------------------------------------------------------------
821ifeq ($(strip $(CONFIG_MAKEFILE_FOUND)),)
822                @cp $< $@
823                @echo '$(ARBHOME)/$@:1: has been generated.'
824                @echo 'Please edit $@ to configure your system!'
825                @echo --------------------------------------------------------------------------------
826                @false
827else
828                @echo '$(ARBHOME)/$<:1: is more recent than'
829                @echo '$(ARBHOME)/$@:1:'
830                @ls -al config.makefile*
831                @echo --------------------------------------------------------------------------------
832                @echo "Updating $@ (if this fails, check manually)"
833                SOURCE_TOOLS/update_config_makefile.pl
834                @echo "Sucessfully updated $@"
835                @echo --------------------------------------------------------------------------------
836                @ls -al config.makefile*
837                @echo --------------------------------------------------------------------------------
838                @echo "Diff to your old config.makefile:"
839                @echo --------------------------------------------------------------------------------
840                -diff $@.bak $@
841                @echo --------------------------------------------------------------------------------
842endif
843
844# check if everything is configured correctly
845
846check_DEVELOPER:
847ifndef DEVELOPER
848                @echo 'config.makefile:1: DEVELOPER not defined'
849                @false
850endif
851
852check_DEBUG:
853ifndef dflags
854                @echo 'config.makefile:1: DEBUG has to be defined. Valid values are 0 and 1'
855                @false
856endif
857
858check_ARB_64:
859ifndef ARB_64
860                @echo 'config.makefile:1: ARB_64 has to be defined. Valid values are 0 and 1'
861                @false
862endif
863
864# ---------------------------------------- check gcc version
865
866COMPILER_BROKEN:=0
867
868# gcc 4.8.0 produces invalid code (see #617)
869ifeq ('$(COMPILER_VERSION_ALLOWED)', '4.8.0')
870COMPILER_BROKEN:=1
871endif
872
873check_same_GCC_VERSION:
874                $(ARBHOME)/SOURCE_TOOLS/check_same_compiler_version.pl $(COMPILER_NAME) $(COMPILER_VERSION_ALLOWED)
875
876check_GCC_VERSION:
877                @echo 'Compiler version check:'
878ifeq ('$(COMPILER_VERSION_ALLOWED)', '')
879                @echo "  - Your compiler is '$(COMPILER_NAME)' version '$(COMPILER_VERSION)'"
880                @echo '    This version is not in the list of supported $(COMPILER_NAME)-versions:'
881                @$(foreach version,$(ALLOWED_COMPILER_VERSIONS),echo '    * $(version)';)
882                @echo '  - You may either ..'
883                @echo '    - add your version to ALLOWED_$(COMPILER_NAME)_VERSIONS in the Makefile and try it out or'
884                @echo '    - switch to one of the allowed versions (see arb_README_gcc.txt for installing'
885                @echo '      a different version of gcc)'
886                $(error Unsupported compiler '$(COMPILER_NAME)' version '$(COMPILER_VERSION)')
887else
888ifeq ($(COMPILER_BROKEN),1)
889                $(error $(COMPILER_NAME) version '$(COMPILER_VERSION_ALLOWED)' would build a broken ARB version. Compilation refused)
890else
891                @echo "  - Supported $(COMPILER_NAME) version '$(COMPILER_VERSION_ALLOWED)' detected - fine!"
892                @echo ''
893                $(MAKE) check_same_GCC_VERSION
894endif
895endif
896
897#---------------------- check ARBHOME
898
899# use arb_INSTALL.txt to determine whether ARBHOME points to correct directory
900ARB_INSTALL_FOUND=$(wildcard $(ARBHOME)/arb_INSTALL.txt)
901
902check_ARBHOME:
903ifeq ($(strip $(ARB_INSTALL_FOUND)),)
904                @echo ------------------------------------------------------------
905                @echo "ARBHOME is set to '$(ARBHOME)'"
906                @echo "The environment variable ARBHOME has to point to the top arb source directory."
907                @echo "If you use bash enter:"
908                @echo "          export ARBHOME='`pwd`'"
909                @echo ------------------------------------------------------------
910                @false
911endif
912
913ARB_PATH_SET=$(findstring $(ARBHOME)/bin,$(PATH))
914
915check_PATH: check_ARBHOME
916ifeq ($(strip $(ARB_PATH_SET)),)
917                @echo ------------------------------------------------------------
918                @echo "The environment variable PATH has to contain $(ARBHOME)/bin"
919                @echo "If you use bash enter:"
920                @echo '                 export PATH=$$ARBHOME/bin:$$PATH'
921                @echo ------------------------------------------------------------
922                @false
923endif
924
925check_TOOLS:
926        @util/arb_check_build_env.pl \
927                "$(A_CC)" \
928                "$(A_CXX)" \
929                "$(MAKEDEPEND_PLAIN)" \
930                "$(LINK_SHARED_LIB)" \
931                "$(LINK_SHARED_LIB)" \
932
933check_ENVIRONMENT : check_PATH check_TOOLS
934                @echo "-------------------- Environment [start]"
935                @echo "ARBHOME='$(ARBHOME)'"
936                @echo "PATH='$(PATH)'"
937                @echo "LD_LIBRARY_PATH='$(LD_LIBRARY_PATH)'"
938                @echo "-------------------- Environment [end]"
939
940check_tabs: check_setup
941ifeq ($(DEBUG),1)
942        @SOURCE_TOOLS/tabBrake.pl
943endif
944
945force_tab_check:
946        @touch -t 198001010000 SOURCE_TOOLS/stamp.tabBrake
947        @$(MAKE) check_tabs
948
949
950# ---------------------
951
952check_setup: check_ENVIRONMENT check_DEBUG check_ARB_64 check_DEVELOPER check_GCC_VERSION
953                @echo Your setup seems to be ok.
954
955checks: check_setup check_tabs
956        @rm -f SOURCE_TOOLS/postcompile.sav
957
958
959# end test section ------------------------------
960
961# ---------------------------------------
962# List of standard top level directories
963#
964# sub-makefiles have to define the targets
965# - 'depends' and
966# - 'clean'
967#
968# when adding new libs here, also add a dependency vs 'links' or 'links_non_perl' in .@DD_links_non_perl
969
970ARCHS = \
971                        $(ARCHS_PT_SERVER) \
972                        AISC/AISC.a \
973                        AISC_MKPTPS/AISC_MKPTPS.a \
974                        ARBDB/libARBDB.a \
975                        CORE/libCORE.a \
976                        ARB_GDE/ARB_GDE.a \
977                        AWT/libAWT.a \
978                        AWTC/AWTC.a \
979                        AWTI/AWTI.a \
980                        CONSENSUS_TREE/CONSENSUS_TREE.a \
981                        CONVERTALN/CONVERTALN.a \
982                        DBSERVER/DBSERVER.a \
983                        DIST/DIST.a \
984                        EDIT4/EDIT4.a \
985                        EISPACK/EISPACK.a \
986                        GDE/GDE.a \
987                        GENOM/GENOM.a \
988                        GENOM_IMPORT/GENOM_IMPORT.a \
989                        GL/GL.a \
990                        ISLAND_HOPPING/ISLAND_HOPPING.a \
991                        MERGE/MERGE.a \
992                        MULTI_PROBE/MULTI_PROBE.a \
993                        NALIGNER/NALIGNER.a \
994                        NAMES/NAMES.a \
995                        NAMES_COM/server.a \
996                        NTREE/NTREE.a \
997                        PARSIMONY/PARSIMONY.a \
998                        PERLTOOLS/PERLTOOLS.a \
999                        PHYLO/PHYLO.a \
1000                        PRIMER_DESIGN/PRIMER_DESIGN.a \
1001                        PROBE_COM/server.a \
1002                        PROBE_DESIGN/PROBE_DESIGN.a \
1003                        PROBE_SET/PROBE_SET.a \
1004                        READSEQ/READSEQ.a \
1005                        RNA3D/RNA3D.a \
1006                        RNACMA/RNACMA.a \
1007                        SECEDIT/SECEDIT.a \
1008                        SEQ_QUALITY/SEQ_QUALITY.a \
1009                        SERVERCNTRL/SERVERCNTRL.a \
1010                        SL/SL.a \
1011                        STAT/STAT.a \
1012                        TOOLS/TOOLS.a \
1013                        TREEGEN/TREEGEN.a \
1014                        UNIT_TESTER/UNIT_TESTER.a \
1015                        WETC/WETC.a \
1016                        WINDOW/libWINDOW.a \
1017                        XML/XML.a \
1018
1019# -----------------------
1020#     library packets     
1021
1022ARCHS_CLIENT_PROBE = PROBE_COM/client.a
1023ARCHS_CLIENT_NAMES = NAMES_COM/client.a
1024
1025ARCHS_SERVER_PROBE = PROBE_COM/server.a $(ARCHS_CLIENT_PROBE)
1026ARCHS_SERVER_NAMES = NAMES_COM/server.a $(ARCHS_CLIENT_NAMES)
1027
1028ARCHS_MAKEBIN = AISC_MKPTPS/AISC_MKPTPS.a AISC/AISC.a
1029
1030# communication libs need aisc and aisc_mkpts:
1031
1032AISC/AISC.dummy: proto_tools
1033
1034comtools: AISC/AISC.dummy
1035
1036ARCHS_SEQUENCE = \
1037                SL/SEQUENCE/SEQUENCE.a \
1038                SL/ALIVIEW/ALIVIEW.a \
1039                SL/PRONUC/PRONUC.a \
1040
1041ARCHS_TREE = \
1042                $(ARCHS_SEQUENCE) \
1043                SL/FILTER/FILTER.a \
1044                SL/ARB_TREE/ARB_TREE.a \
1045                SL/ROOTED_TREE/ROOTED_TREE.a \
1046
1047# parsimony tree (used by NTREE, PARSIMONY, STAT(->EDIT4), DIST(obsolete!))
1048ARCHS_AP_TREE = \
1049                $(ARCHS_TREE) \
1050                SL/AP_TREE/AP_TREE.a \
1051
1052# --------------------------------------------------------------------------------
1053# dependencies for linking shared libs
1054
1055link_core:      core
1056link_db:        db link_core
1057link_aw:        aw link_db
1058link_awt:       awt link_aw
1059
1060#***************************************************************************************
1061#               Individual_Programs_Section
1062#***************************************************************************************
1063
1064arbmainwrapper:
1065        $(MAKE) -C SOURCE_TOOLS -r mainwrapper
1066
1067
1068#***********************************    arb_ntree **************************************
1069NTREE = bin/arb_ntree
1070ARCHS_NTREE = \
1071                NTREE/NTREE.a \
1072                $(ARCHS_AP_TREE) \
1073                ARB_GDE/ARB_GDE.a \
1074                AWTC/AWTC.a \
1075                AWTI/AWTI.a \
1076                CONSENSUS_TREE/CONSENSUS_TREE.a \
1077                GENOM/GENOM.a \
1078                GENOM_IMPORT/GENOM_IMPORT.a \
1079                MERGE/MERGE.a \
1080                MULTI_PROBE/MULTI_PROBE.a \
1081                PRIMER_DESIGN/PRIMER_DESIGN.a \
1082                PROBE_DESIGN/PROBE_DESIGN.a \
1083                SEQ_QUALITY/SEQ_QUALITY.a \
1084                SERVERCNTRL/SERVERCNTRL.a \
1085                SL/ALILINK/ALILINK.a \
1086                SL/AW_NAME/AW_NAME.a \
1087                SL/DB_UI/DB_UI.a \
1088                SL/DB_SCANNER/DB_SCANNER.a \
1089                SL/DB_QUERY/DB_QUERY.a \
1090                SL/SEQIO/SEQIO.a \
1091                SL/GUI_ALIVIEW/GUI_ALIVIEW.a \
1092                SL/HELIX/HELIX.a \
1093                SL/REGEXPR/REGEXPR.a \
1094                SL/REFENTRIES/REFENTRIES.a \
1095                SL/NDS/NDS.a \
1096                SL/ITEMS/ITEMS.a \
1097                SL/INSDEL/INSDEL.a \
1098                SL/LOCATION/LOCATION.a \
1099                SL/MACROS/MACROS.a \
1100                SL/TRANSLATE/TRANSLATE.a \
1101                SL/TREEDISP/TREEDISP.a \
1102                SL/TREE_ADMIN/TREE_ADMIN.a \
1103                SL/TREE_READ/TREE_READ.a \
1104                SL/TREE_WRITE/TREE_WRITE.a \
1105                STAT/STAT.a \
1106                XML/XML.a \
1107
1108$(NTREE): $(ARCHS_NTREE:.a=.dummy) link_awt
1109        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_NTREE) $(GUI_LIBS) $(use_ARB_main) || ( \
1110                echo "$(SEP) Link $@"; \
1111                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NTREE) $(ARCHS_CLIENT_PROBE) $(GUI_LIBS) $(EXECLIBS)" ; \
1112                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NTREE) $(ARCHS_CLIENT_PROBE) $(GUI_LIBS) $(EXECLIBS) && \
1113                echo "$(SEP) Link $@ [done]"; \
1114                )
1115
1116#***********************************    arb_edit4 **************************************
1117EDIT4 = bin/arb_edit4
1118
1119ARCHS_EDIT4 := \
1120                EDIT4/EDIT4.a \
1121                $(ARCHS_AP_TREE) \
1122                ARB_GDE/ARB_GDE.a \
1123                AWTC/AWTC.a \
1124                ISLAND_HOPPING/ISLAND_HOPPING.a \
1125                SECEDIT/SECEDIT.a \
1126                SERVERCNTRL/SERVERCNTRL.a \
1127                SL/AW_HELIX/AW_HELIX.a \
1128                SL/AW_NAME/AW_NAME.a \
1129                SL/FAST_ALIGNER/FAST_ALIGNER.a \
1130                SL/ITEMS/ITEMS.a \
1131                SL/GUI_ALIVIEW/GUI_ALIVIEW.a \
1132                SL/HELIX/HELIX.a \
1133                SL/TRANSLATE/TRANSLATE.a \
1134                SL/MACROS/MACROS.a \
1135                SL/NDS/NDS.a \
1136                STAT/STAT.a \
1137                XML/XML.a \
1138
1139ifeq ($(OPENGL),1)
1140ARCHS_EDIT4 += RNA3D/RNA3D.a
1141endif
1142
1143LIBS_EDIT4 := $(GL_LIBS)
1144
1145$(EDIT4): $(ARCHS_EDIT4:.a=.dummy) link_awt
1146        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_EDIT4) $(GUI_LIBS) $(use_ARB_main) || ( \
1147                echo "$(SEP) Link $@"; \
1148                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_EDIT4) $(ARCHS_CLIENT_NAMES) $(GUI_LIBS) $(LIBS_EDIT4) $(EXECLIBS)" ; \
1149                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_EDIT4) $(ARCHS_CLIENT_NAMES) $(GUI_LIBS) $(LIBS_EDIT4) $(EXECLIBS) && \
1150                echo "$(SEP) Link $@ [done]"; \
1151                )
1152
1153#***********************************    arb_rnacma **************************************
1154RNACMA = bin/arb_rnacma
1155ARCHS_RNACMA = \
1156                RNACMA/RNACMA.a \
1157
1158$(RNACMA) : $(ARCHS_RNACMA:.a=.dummy) link_db
1159        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_RNACMA) || ( \
1160                echo "$(SEP) Link $@"; \
1161                echo "$(LINK_EXECUTABLE) $@ $(LIBPATH) $(ARCHS_RNACMA) $(LIBS) $(EXECLIBS)"; \
1162                $(LINK_EXECUTABLE) $@ $(LIBPATH) $(ARCHS_RNACMA) $(LIBS) $(EXECLIBS) && \
1163                echo "$(SEP) Link $@ [done]"; \
1164                )
1165
1166#***********************************    arb_wetc **************************************
1167WETC = bin/arb_wetc
1168ARCHS_WETC = \
1169                WETC/WETC.a \
1170                SL/HELIX/HELIX.a \
1171                SL/FILTER/FILTER.a \
1172                XML/XML.a \
1173
1174$(WETC): $(ARCHS_WETC:.a=.dummy) link_awt
1175        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_WETC) $(GUI_LIBS) $(use_ARB_main) || ( \
1176                echo "$(SEP) Link $@"; \
1177                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_WETC) $(GUI_LIBS) $(EXECLIBS)" ; \
1178                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_WETC) $(GUI_LIBS) $(EXECLIBS) && \
1179                echo "$(SEP) Link $@ [done]"; \
1180                )
1181
1182#***********************************    arb_dist **************************************
1183DIST = bin/arb_dist
1184ARCHS_DIST = \
1185                $(ARCHS_AP_TREE) \
1186                CONSENSUS_TREE/CONSENSUS_TREE.a \
1187                DIST/DIST.a \
1188                EISPACK/EISPACK.a \
1189                SERVERCNTRL/SERVERCNTRL.a \
1190                SL/GUI_ALIVIEW/GUI_ALIVIEW.a \
1191                SL/HELIX/HELIX.a \
1192                SL/MATRIX/MATRIX.a \
1193                SL/MACROS/MACROS.a \
1194                SL/NDS/NDS.a \
1195                SL/ITEMS/ITEMS.a \
1196                SL/NEIGHBOURJOIN/NEIGHBOURJOIN.a \
1197                XML/XML.a \
1198
1199$(DIST): $(ARCHS_DIST:.a=.dummy) link_awt
1200        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_DIST) $(GUI_LIBS) $(use_ARB_main) || ( \
1201                echo "$(SEP) Link $@"; \
1202                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_DIST) $(ARCHS_CLIENT_PROBE) $(GUI_LIBS) $(EXECLIBS)" ; \
1203                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_DIST) $(ARCHS_CLIENT_PROBE) $(GUI_LIBS) $(EXECLIBS) && \
1204                echo "$(SEP) Link $@ [done]"; \
1205                )
1206
1207#***********************************    arb_pars **************************************
1208PARSIMONY = bin/arb_pars
1209ARCHS_PARSIMONY = \
1210                $(ARCHS_AP_TREE) \
1211                PARSIMONY/PARSIMONY.a \
1212                SERVERCNTRL/SERVERCNTRL.a \
1213                SL/AW_NAME/AW_NAME.a \
1214                SL/GUI_ALIVIEW/GUI_ALIVIEW.a \
1215                SL/HELIX/HELIX.a \
1216                SL/MACROS/MACROS.a \
1217                SL/NDS/NDS.a \
1218                SL/ITEMS/ITEMS.a \
1219                SL/TRANSLATE/TRANSLATE.a \
1220                SL/TREEDISP/TREEDISP.a \
1221                XML/XML.a \
1222
1223$(PARSIMONY): $(ARCHS_PARSIMONY:.a=.dummy) link_awt
1224        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_PARSIMONY) $(GUI_LIBS) $(use_ARB_main) || ( \
1225                echo "$(SEP) Link $@"; \
1226                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PARSIMONY) $(ARCHS_CLIENT_NAMES) $(GUI_LIBS) $(EXECLIBS)" ; \
1227                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PARSIMONY) $(ARCHS_CLIENT_NAMES) $(GUI_LIBS) $(EXECLIBS) && \
1228                echo "$(SEP) Link $@ [done]"; \
1229                )
1230
1231#*********************************** arb_convert_aln **************************************
1232CONVERT_ALN = bin/arb_convert_aln
1233ARCHS_CONVERT_ALN =     \
1234                CONVERTALN/CONVERTALN.a \
1235
1236$(CONVERT_ALN) : $(ARCHS_CONVERT_ALN:.a=.dummy) link_db
1237        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_CONVERT_ALN) $(use_ARB_main) || ( \
1238                echo "$(SEP) Link $@"; \
1239                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_CONVERT_ALN) $(LIBS) $(EXECLIBS)"; \
1240                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_CONVERT_ALN) $(LIBS) $(EXECLIBS) && \
1241                echo "$(SEP) Link $@ [done]"; \
1242                )
1243
1244#*********************************** arb_treegen **************************************
1245
1246TREEGEN = bin/arb_treegen
1247ARCHS_TREEGEN = \
1248                TREEGEN/TREEGEN.a \
1249
1250$(TREEGEN) :  $(ARCHS_TREEGEN:.a=.dummy)
1251        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_TREEGEN) $(use_ARB_main_C) || ( \
1252                echo "$(SEP) Link $@"; \
1253                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main_C) $(LIBPATH) $(ARCHS_TREEGEN) $(EXECLIBS)" ; \
1254                $(LINK_EXECUTABLE) $@ $(use_ARB_main_C) $(LIBPATH) $(ARCHS_TREEGEN) $(EXECLIBS) && \
1255                echo "$(SEP) Link $@ [done]"; \
1256                )
1257
1258#***********************************    arb_naligner **************************************
1259NALIGNER = bin/arb_naligner
1260ARCHS_NALIGNER = \
1261                NALIGNER/NALIGNER.a \
1262                SERVERCNTRL/SERVERCNTRL.a \
1263                SL/HELIX/HELIX.a \
1264
1265$(NALIGNER): $(ARCHS_NALIGNER:.a=.dummy) link_db
1266        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_NALIGNER) $(use_ARB_main) || ( \
1267                echo "$(SEP) Link $@"; \
1268                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NALIGNER) $(ARCHS_CLIENT_PROBE) $(LIBS) $(EXECLIBS)" ; \
1269                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NALIGNER) $(ARCHS_CLIENT_PROBE) $(LIBS) $(EXECLIBS) && \
1270                echo "$(SEP) Link $@ [done]"; \
1271                )
1272
1273#***********************************    arb_phylo **************************************
1274PHYLO = bin/arb_phylo
1275ARCHS_PHYLO = \
1276                PHYLO/PHYLO.a \
1277                SL/HELIX/HELIX.a \
1278                SL/FILTER/FILTER.a \
1279                SL/MATRIX/MATRIX.a \
1280                SL/MACROS/MACROS.a \
1281                XML/XML.a \
1282
1283$(PHYLO): $(ARCHS_PHYLO:.a=.dummy) link_awt
1284        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_PHYLO) $(GUI_LIBS) $(use_ARB_main) || ( \
1285                echo "$(SEP) Link $@"; \
1286                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PHYLO) $(GUI_LIBS) $(EXECLIBS)" ; \
1287                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PHYLO) $(GUI_LIBS) $(EXECLIBS) && \
1288                echo "$(SEP) Link $@ [done]"; \
1289                )
1290
1291#***************************************************************************************
1292#                                       SERVER SECTION
1293#***************************************************************************************
1294
1295#***********************************    arb_db_server **************************************
1296DBSERVER = bin/arb_db_server
1297ARCHS_DBSERVER = \
1298                DBSERVER/DBSERVER.a \
1299                SERVERCNTRL/SERVERCNTRL.a \
1300
1301$(DBSERVER): $(ARCHS_DBSERVER:.a=.dummy) link_db
1302        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_DBSERVER) $(ARBDB_LIB) $(use_ARB_main) || ( \
1303                echo "$(SEP) Link $@"; \
1304                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_DBSERVER) $(ARBDB_LIB) $(ARCHS_CLIENT_PROBE) $(SYSLIBS) $(EXECLIBS)" ; \
1305                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_DBSERVER) $(ARBDB_LIB) $(ARCHS_CLIENT_PROBE) $(SYSLIBS) $(EXECLIBS) && \
1306                echo "$(SEP) Link $@ [done]"; \
1307                )
1308
1309#***********************************    arb_pt_server **************************************
1310PROBE = bin/arb_pt_server
1311ARCHS_PROBE_COMMON = \
1312                SERVERCNTRL/SERVERCNTRL.a \
1313                SL/HELIX/HELIX.a \
1314                SL/PTCLEAN/PTCLEAN.a \
1315
1316ARCHS_PROBE_LINK = \
1317                $(ARCHS_PROBE_COMMON) \
1318                $(ARCHS_PT_SERVER_LINK) \
1319
1320ARCHS_PROBE_DEPEND = \
1321                $(ARCHS_PROBE_COMMON) \
1322                $(ARCHS_PT_SERVER) \
1323
1324$(PROBE): $(ARCHS_PROBE_DEPEND:.a=.dummy) link_db
1325        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_PROBE_LINK) $(ARBDB_LIB) $(ARCHS_SERVER_PROBE) config.makefile $(use_ARB_main) || ( \
1326                echo "$(SEP) Link $@"; \
1327                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PROBE_LINK) $(ARBDB_LIB) $(ARCHS_SERVER_PROBE) $(SYSLIBS) $(EXECLIBS)" ; \
1328                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_PROBE_LINK) $(ARBDB_LIB) $(ARCHS_SERVER_PROBE) $(SYSLIBS) $(EXECLIBS) && \
1329                echo "$(SEP) Link $@ [done]"; \
1330                )
1331
1332#***********************************    arb_name_server **************************************
1333NAMES = bin/arb_name_server
1334ARCHS_NAMES = \
1335                NAMES/NAMES.a \
1336                SERVERCNTRL/SERVERCNTRL.a \
1337
1338$(NAMES): $(ARCHS_NAMES:.a=.dummy) link_db
1339        @SOURCE_TOOLS/binuptodate.pl $@ $(ARCHS_NAMES) $(ARBDB_LIB) $(ARCHS_CLIENT_NAMES) $(use_ARB_main) || ( \
1340                echo "$(SEP) Link $@"; \
1341                echo "$(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NAMES) $(ARBDB_LIB) $(ARCHS_CLIENT_NAMES) NAMES_COM/server.a $(SYSLIBS) $(EXECLIBS)" ; \
1342                $(LINK_EXECUTABLE) $@ $(use_ARB_main) $(LIBPATH) $(ARCHS_NAMES) $(ARBDB_LIB) $(ARCHS_CLIENT_NAMES) NAMES_COM/server.a $(SYSLIBS) $(EXECLIBS) && \
1343                echo "$(SEP) Link $@ [done]"; \
1344                )
1345
1346#***********************************    SHARED LIBRARIES SECTION  **************************************
1347
1348prepare_libdir: addlibs
1349
1350addlibs:
1351        (perl $(ARBHOME)/SOURCE_TOOLS/provide_libs.pl \
1352                                "arbhome=$(ARBHOME)" \
1353                                "opengl=$(OPENGL)" \
1354                                "link_static=$(LINK_STATIC)" \
1355        )
1356
1357#***************************************************************************************
1358#                       Recursive calls to sub-makefiles
1359#***************************************************************************************
1360
1361%.depends:
1362        @cp -p $(@D)/Makefile $(@D)/Makefile.old # save old Makefile
1363        @$(MAKE) -C $(@D) -r \
1364                "AUTODEPENDS=1" \
1365                "MAIN=nothing" \
1366                "cflags=noCflagsHere_use_MAKEDEPENDFLAGS" \
1367                "cxxflags=noCxxflagsHere_use_MAKEDEPENDFLAGS" \
1368                depends
1369        @grep "^# DO NOT DELETE" $(@D)/Makefile >/dev/null
1370        @cat $(@D)/Makefile \
1371                | SOURCE_TOOLS/fix_depends.pl "(from main)" \
1372                >$(@D)/Makefile.2
1373        @mv $(@D)/Makefile.old $(@D)/Makefile # restore old Makefile
1374        @$(ARBHOME)/SOURCE_TOOLS/mv_if_diff $(@D)/Makefile.2 $(@D)/Makefile # update Makefile if changed
1375
1376%.proto:
1377        @($(MAKE) -C $(@D) \
1378                "AUTODEPENDS=0" \
1379                "MAIN=nothing" \
1380                "cflags=noCflags" \
1381                "cxxflags=noCxxflags" \
1382                proto 2>&1 ) | $(ARBHOME)/SOURCE_TOOLS/asan2msg.pl
1383
1384%.clean:
1385        @$(MAKE) -C $(@D) \
1386                "AUTODEPENDS=0" \
1387                "MAIN=nothing" \
1388                "cflags=noCflags" \
1389                "cxxflags=noCxxflags" \
1390                clean
1391
1392
1393# stop wrong targets
1394target_is_missing_lib_prefix:
1395        @echo "Error: Denied to build shared library target with missing 'lib'-prefix"
1396        false
1397
1398ARBDB/ARBDB.dummy:   target_is_missing_lib_prefix
1399CORE/CORE.dummy:     target_is_missing_lib_prefix
1400AWT/AWT.dummy:       target_is_missing_lib_prefix
1401WINDOW/WINDOW.dummy: target_is_missing_lib_prefix
1402
1403# rule to generate main target (normally a library):
1404# @@@ check effect of setting LANG=C below
1405%.dummy:
1406        @( export ID=$$$$; LANG=C; \
1407        (( \
1408            echo "$(SEP) Make $(@D)"; \
1409            $(MAKE) -C $(@D) -r \
1410                "AUTODEPENDS=1" \
1411                "MAIN=$(@F:.dummy=.a)" \
1412                "cflags=$(cflags) -DIN_ARB_$(subst /,_,$(@D))" \
1413                && \
1414            echo "$(SEP) Make $(@D) [done]"; \
1415        ) >$(@D).$$ID.log 2>&1 && (cat $(@D).$$ID.log;rm $(@D).$$ID.log)) || (cat $(@D).$$ID.log;rm $(@D).$$ID.log;false))
1416
1417# Additional dependencies for subtargets:
1418
1419PROBE_COM/PROBE_COM.dummy : comtools
1420NAMES_COM/NAMES_COM.dummy : comtools
1421
1422com: PROBE_COM/PROBE_COM.dummy NAMES_COM/NAMES_COM.dummy
1423
1424PROBE_COM/server.dummy:
1425        @echo Unwanted request to make target $<
1426        false
1427
1428PROBE_COM/client.dummy:
1429        @echo Unwanted request to make target $<
1430        false
1431
1432NAMES_COM/server.dummy: 
1433        @echo Unwanted request to make target $<
1434        false
1435
1436NAMES_COM/client.dummy:
1437        @echo Unwanted request to make target $<
1438        false
1439
1440
1441ARBDB/libARBDB.dummy:                   links
1442CORE/libCORE.dummy:                     links
1443
1444PERLTOOLS/PERLTOOLS.dummy:              core db
1445
1446# all subdirs perl not depends on go here (ADD_links_non_perl)
1447AWT/libAWT.dummy:                       links_non_perl
1448AWTI/AWTI.dummy:                        links_non_perl
1449CONSENSUS_TREE/CONSENSUS_TREE.dummy:    links_non_perl
1450CONVERTALN/CONVERTALN.dummy:            links_non_perl
1451DBSERVER/DBSERVER.dummy:                links_non_perl
1452DIST/DIST.dummy:                        links_non_perl
1453EDIT4/EDIT4.dummy:                      links_non_perl genheaders com
1454EISPACK/EISPACK.dummy:                  links_non_perl
1455GDE/GDE.dummy:                          links_non_perl
1456GENOM/GENOM.dummy:                      links_non_perl
1457GENOM_IMPORT/GENOM_IMPORT.dummy:        links_non_perl
1458ISLAND_HOPPING/ISLAND_HOPPING.dummy:    links_non_perl
1459MERGE/MERGE.dummy:                      links_non_perl
1460NTREE/NTREE.dummy:                      links_non_perl genheaders
1461PARSIMONY/PARSIMONY.dummy:              links_non_perl
1462PHYLO/PHYLO.dummy:                      links_non_perl
1463PRIMER_DESIGN/PRIMER_DESIGN.dummy:      links_non_perl
1464PROBE_SET/PROBE_SET.dummy:              links_non_perl link_db
1465READSEQ/READSEQ.dummy:                  links_non_perl
1466RNACMA/RNACMA.dummy:                    links_non_perl header_libs
1467SECEDIT/SECEDIT.dummy:                  links_non_perl
1468SEQ_QUALITY/SEQ_QUALITY.dummy:          links_non_perl
1469SERVERCNTRL/SERVERCNTRL.dummy:          links_non_perl com
1470SL/ALILINK/ALILINK.dummy:               links_non_perl
1471SL/ALIVIEW/ALIVIEW.dummy:               links_non_perl
1472SL/AP_TREE/AP_TREE.dummy:               links_non_perl
1473SL/ARB_TREE/ARB_TREE.dummy:             links_non_perl
1474SL/AW_HELIX/AW_HELIX.dummy:             links_non_perl
1475SL/DB_QUERY/DB_QUERY.dummy:             links_non_perl
1476SL/DB_SCANNER/DB_SCANNER.dummy:         links_non_perl
1477SL/DB_UI/DB_UI.dummy:                   links_non_perl
1478SL/FAST_ALIGNER/FAST_ALIGNER.dummy:     links_non_perl
1479SL/FILTER/FILTER.dummy:                 links_non_perl
1480SL/GUI_ALIVIEW/GUI_ALIVIEW.dummy:       links_non_perl
1481SL/HELIX/HELIX.dummy:                   links_non_perl
1482SL/INSDEL/INSDEL.dummy:                 links_non_perl
1483SL/ITEMS/ITEMS.dummy:                   links_non_perl
1484SL/LOCATION/LOCATION.dummy:             links_non_perl
1485SL/MACROS/MACROS.dummy:                 links_non_perl
1486SL/MATRIX/MATRIX.dummy:                 links_non_perl
1487SL/NDS/NDS.dummy:                       links_non_perl
1488SL/NEIGHBOURJOIN/NEIGHBOURJOIN.dummy:   links_non_perl
1489SL/PRONUC/PRONUC.dummy:                 links_non_perl
1490SL/PTCLEAN/PTCLEAN.dummy:               links_non_perl link_db
1491SL/REFENTRIES/REFENTRIES.dummy:         links_non_perl
1492SL/REGEXPR/REGEXPR.dummy:               links_non_perl
1493SL/ROOTED_TREE/ROOTED_TREE.dummy:       links_non_perl
1494SL/SEQIO/SEQIO.dummy:                   links_non_perl
1495SL/SEQUENCE/SEQUENCE.dummy:             links_non_perl
1496SL/TRANSLATE/TRANSLATE.dummy:           links_non_perl
1497SL/TREE_ADMIN/TREE_ADMIN.dummy:         links_non_perl
1498SL/TREE_READ/TREE_READ.dummy:           links_non_perl
1499SL/TREE_WRITE/TREE_WRITE.dummy:         links_non_perl
1500SL/TREEDISP/TREEDISP.dummy:             links_non_perl
1501STAT/STAT.dummy:                        links_non_perl
1502TREEGEN/TREEGEN.dummy:                  links_non_perl
1503WETC/WETC.dummy:                        links_non_perl
1504WINDOW/libWINDOW.dummy:                 links_non_perl
1505XML/XML.dummy:                          links_non_perl
1506
1507ifeq ($(OPENGL),1)
1508GL/glAW/glAW.dummy: links_non_perl
1509GL/glpng/glpng.dummy: links_non_perl
1510GL/GL.dummy: GL/glAW/glAW.dummy GL/glpng/glpng.dummy
1511RNA3D/RNA3D.dummy: links_non_perl gl
1512endif
1513
1514UNIT_TESTER/UNIT_TESTER.dummy:          link_db \
1515        SERVERCNTRL/SERVERCNTRL.dummy \
1516
1517TOOLS/TOOLS.dummy : links_non_perl link_db \
1518        SERVERCNTRL/SERVERCNTRL.dummy \
1519        SL/ROOTED_TREE/ROOTED_TREE.dummy \
1520        SL/TREE_WRITE/TREE_WRITE.dummy \
1521        SL/TREE_READ/TREE_READ.dummy \
1522        CONSENSUS_TREE/CONSENSUS_TREE.dummy \
1523        XML/XML.dummy \
1524
1525AWTC/AWTC.dummy :                       com
1526
1527NAMES/NAMES.dummy :                     com
1528SL/AW_NAME/AW_NAME.dummy :              com
1529
1530PROBE/PROBE.dummy :                     com
1531ptpan/PROBE.dummy :                     com
1532MULTI_PROBE/MULTI_PROBE.dummy :         com
1533PROBE_DESIGN/PROBE_DESIGN.dummy :       com
1534NALIGNER/NALIGNER.dummy :               com
1535
1536ARB_GDE/ARB_GDE.dummy :                 proto_tools
1537
1538compile_compatibility: SOURCE_TOOLS/COMPILE_COMPAT/COMPILE_COMPAT.dummy
1539
1540#***************************************************************************************
1541#                       Short aliases to make targets
1542#***************************************************************************************
1543
1544show:
1545                @echo $(SEP)
1546                @echo 'Aliases for often needed targets:'
1547                @echo ''
1548                @echo ' executables:'
1549                @echo ''
1550                @echo '  nt     arb_ntree'
1551                @echo '  e4     arb_edit4 (includes secedit)'
1552                @echo '  di     arb_dist'
1553                @echo '  ph     arb_phylo'
1554                @echo '  pa     arb_parsimony'
1555                @echo '  tg     arb_treegen'
1556                @echo '  ds     arb_dbserver'
1557                @echo '  pt     arb_pt_server'
1558                @echo '  na     arb_name_server'
1559                @echo ''
1560                @echo ' libraries:'
1561                @echo ''
1562                @echo '  com    communication libraries'
1563                @echo '  db     ARB database'
1564                @echo '  aw     GUI lib'
1565                @echo '  awt    GUI toolkit'
1566                @echo '  awtc   general purpose library'
1567                @echo '  awti   import/export library'
1568                @echo '  mp     multi probe library'
1569                @echo '  ge     genome library'
1570                @echo '  pd     probe design lib'
1571                @echo '  prd    primer design lib'
1572                @echo ''
1573                @echo ' other targets:'
1574                @echo ''
1575                @echo '  help   recompile help files'
1576                @echo '  tools  make small tools used by arb'
1577                @echo ''
1578                @echo ' foreign targets:'
1579                @echo ''
1580                @echo '  gde    GDE'
1581                @echo '  agde   ARB_GDE'
1582                @echo ''
1583                @echo 'for other targets inspect $(ARBHOME)/Makefile'
1584                @echo ''
1585                @echo $(SEP)
1586
1587source_doc:
1588        @echo "Remove some links (doxygen crashes otherwise):"
1589        find . \( -name "AISC" -o -name "C" -o -name "GDEHELP" \) -type l -exec rm {} \;
1590        doxygen 2>&1 1>/dev/null
1591        $(MAKE) forcelinks
1592
1593dep_graph:
1594        @echo "Building some dependency graphs"
1595        SOURCE_TOOLS/dependency_graphs.pl
1596
1597help:   HELP_SOURCE/HELP_SOURCE.dummy
1598
1599HELP_SOURCE/HELP_SOURCE.dummy: link_core xml menus
1600
1601db:     ARBDB/libARBDB.dummy
1602core:   CORE/libCORE.dummy
1603aw:     WINDOW/libWINDOW.dummy
1604awt:    AWT/libAWT.dummy
1605awtc:   AWTC/AWTC.dummy
1606awti:   AWTI/AWTI.dummy
1607
1608mp:     MULTI_PROBE/MULTI_PROBE.dummy
1609mg:     MERGE/MERGE.dummy
1610ge:     GENOM/GENOM.dummy
1611prd:    PRIMER_DESIGN/PRIMER_DESIGN.dummy
1612
1613nt:     menus $(NTREE)
1614
1615nal:    $(NALIGNER)
1616
1617di:     $(DIST)
1618ph:     $(PHYLO)
1619pa:     $(PARSIMONY)
1620tg:     $(TREEGEN)
1621
1622ifeq ($(OPENGL),1)
16233d:     RNA3D/RNA3D.dummy
1624gl:     GL/GL.dummy
1625else
1626noopengl:
1627        @echo "invalid target for OPENGL=0"
16283d: noopengl
1629gl: noopengl
1630endif
1631
1632SL/SL.dummy: com
1633
1634ds:     $(DBSERVER)
1635pt:     $(PROBE)
1636pst:    PROBE_SET/PROBE_SET.dummy
1637pd:     PROBE_DESIGN/PROBE_DESIGN.dummy
1638na:     $(NAMES)
1639sq:     SEQ_QUALITY/SEQ_QUALITY.dummy
1640cma:    $(RNACMA)
1641
1642sec:    SECEDIT/SECEDIT.dummy
1643
1644e4:     $(EDIT4) readseq menus
1645
1646gi:     GENOM_IMPORT/GENOM_IMPORT.dummy
1647wetc:   $(WETC)
1648
1649xml:    XML/XML.dummy
1650xmlin:  XML_IMPORT/XML_IMPORT.dummy# broken
1651stat:   STAT/STAT.dummy $(NTREE) $(EDIT4)
1652fa:     SL/FAST_ALIGNER/FAST_ALIGNER.dummy
1653
1654#********************************************************************************
1655
1656up_by_remake: depends proto
1657
1658up: up_by_remake tags valgrind_update
1659
1660#********************************************************************************
1661
1662touch:
1663        SOURCE_TOOLS/touch_modified.pl
1664
1665modified: touch
1666        $(MAKE) all
1667
1668#********************************************************************************
1669
1670libdepends:
1671        $(MAKE) -C "SOURCE_TOOLS" \
1672                "RNA3D_LIB=$(RNA3D_LIB_4_DEPENDS)" \
1673                libdepends
1674
1675#********************************************************************************
1676
1677# create generated headers:
1678genheaders: TEMPLATES/TEMPLATES.dummy
1679
1680clrdotdepends:
1681        -rm PROBE_COM/.depends
1682        -rm NAMES_COM/.depends
1683        -rm PERL2ARB/.depends
1684
1685comdepends: comtools clrdotdepends
1686        @echo "$(SEP) Partially build com interface"
1687        $(MAKE) PROBE_COM/PROBE_COM.depends NAMES_COM/NAMES_COM.depends
1688        $(MAKE) PROBE_COM/server.depends    NAMES_COM/server.depends
1689
1690depends: genheaders comdepends
1691        @echo "$(SEP) Updating other dependencies"
1692        $(MAKE) $(subst NAMES_COM/server.depends,,$(subst PROBE_COM/server.depends,,$(ARCHS:.a=.depends))) \
1693                HELP_SOURCE/HELP_SOURCE.depends \
1694                SOURCE_TOOLS/COMPILE_COMPAT/COMPILE_COMPAT.depends \
1695
1696        $(MAKE) libdepends
1697
1698depend: depends
1699
1700# ------------------------------------------------------------
1701# dependency generation tests for AISC code
1702#(all should work w/o creating wrong dependencies;
1703# neither in XXX_COM/Makefile nor in code using AISC interface)
1704dependstest1: silent_clean
1705        $(MAKE) depends
1706dependstest2: silent_clean
1707        $(MAKE) com
1708dependstest3: silent_clean
1709        $(MAKE) aw
1710dependstest4: silent_clean
1711        $(MAKE) pt
1712dependstest5: silent_clean
1713        $(MAKE) na
1714dependstest6: silent_clean
1715        $(MAKE) nt
1716dependstest7: silent_clean
1717        $(MAKE) all
1718# ------------------------------------------------------------
1719
1720AISC_MKPTPS/AISC_MKPTPS.dummy: links
1721
1722proto_tools: AISC_MKPTPS/AISC_MKPTPS.dummy
1723
1724proto: proto_tools
1725        @echo $(SEP) Updating prototypes
1726        $(MAKE) \
1727                ARBDB/ARBDB.proto \
1728                AISC_COM/AISC_COM.proto \
1729                ARB_GDE/ARB_GDE.proto \
1730                CORE/CORE.proto \
1731                CONVERTALN/CONVERTALN.proto \
1732                NTREE/NTREE.proto \
1733                MERGE/MERGE.proto \
1734                $(ARCHS_PT_SERVER:.a=.proto) \
1735                SERVERCNTRL/SERVERCNTRL.proto \
1736                SL/SL.proto \
1737
1738#********************************************************************************
1739
1740valgrind_update: links
1741        @echo $(SEP) Updating for valgrind
1742        $(MAKE) -C SOURCE_TOOLS valgrind_update
1743
1744#********************************************************************************
1745
1746TAGFILE=TAGS
1747TAGFILE_TMP=TAGS.tmp
1748
1749TAG_SOURCE_HEADERS=TAGS.headers
1750TAG_SOURCE_CODE=TAGS.codefiles
1751TAG_SOURCE_LISTS=$(TAG_SOURCE_HEADERS) $(TAG_SOURCE_CODE)
1752
1753ETAGS=ctags -e -f $(TAGFILE_TMP) --sort=no --if0=no --extra=q
1754ETAGS_TYPES=--C-kinds=cgnsut --C++-kinds=cgnsut
1755ETAGS_FUN  =--C-kinds=fm     --C++-kinds=fm
1756ETAGS_REST =--C-kinds=dev    --C++-kinds=dev
1757
1758FILTER_TAGS_SOURCES= \
1759        $(SED) -e 's/^.\///g' | \
1760        grep -P -v -i '^HEADERLIBS|^GDE/|/GEN[CH]/'
1761
1762$(TAG_SOURCE_HEADERS): links
1763        find . \( -name '*.hxx' -o -name "*.h" \) -type f | $(FILTER_TAGS_SOURCES) > $@
1764
1765$(TAG_SOURCE_CODE): links
1766        find . \( -name '*.cxx' -o -name "*.c" \) -type f | $(FILTER_TAGS_SOURCES) > $@
1767
1768tags: $(TAG_SOURCE_LISTS)
1769        $(ETAGS)    $(ETAGS_TYPES) -L $(TAG_SOURCE_HEADERS)
1770        $(ETAGS) -a $(ETAGS_FUN)   -L $(TAG_SOURCE_HEADERS)
1771        $(ETAGS) -a $(ETAGS_REST)  -L $(TAG_SOURCE_HEADERS)
1772        $(ETAGS) -a $(ETAGS_TYPES) -L $(TAG_SOURCE_CODE)
1773        $(ETAGS) -a $(ETAGS_FUN)   -L $(TAG_SOURCE_CODE)
1774        $(ETAGS) -a $(ETAGS_REST)  -L $(TAG_SOURCE_CODE)
1775        mv_if_diff $(TAGFILE_TMP) $(TAGFILE)
1776        rm $(TAG_SOURCE_LISTS)
1777
1778#********************************************************************************
1779
1780LINKSTAMP=SOURCE_TOOLS/stamp.generate_all_links
1781
1782links: checks $(LINKSTAMP) arbmainwrapper
1783links_no_checks: $(LINKSTAMP) arbmainwrapper
1784
1785forcelinks:
1786        -rm $(LINKSTAMP)
1787        $(MAKE) links
1788
1789$(LINKSTAMP): SOURCE_TOOLS/generate_all_links.sh
1790        +SOURCE_TOOLS/generate_all_links.sh
1791        touch $(LINKSTAMP)
1792
1793clean_links:
1794#       avoid to delete linked pts, nas or arb_tcp.dat:
1795        find . -path './lib' -prune -o -type l -exec rm {} \;
1796#       removed obsolete file - refuses to disappear due to 'prune' above
1797        @rm -f lib/help/GDEHELP
1798        @rm -f $(LINKSTAMP) lib/inputMasks/format.readme
1799
1800redo_links: clean_links
1801        $(MAKE) links_no_checks
1802
1803#********************************************************************************
1804
1805header_libs:
1806        $(MAKE) -C HEADERLIBS all
1807
1808#********************************************************************************
1809
1810gde:            GDE/GDE.dummy
1811GDE:            gde
1812agde:           ARB_GDE/ARB_GDE.dummy
1813
1814tools:          TOOLS/TOOLS.dummy
1815
1816convert:        $(CONVERT_ALN)
1817readseq:        READSEQ/READSEQ.dummy
1818
1819#***************************************************************************************
1820#                       Some user commands
1821#***************************************************************************************
1822
1823menus: binlink links
1824        @(( \
1825                echo "$(SEP) Make GDEHELP"; \
1826                $(MAKE) -C GDEHELP -r all && \
1827                echo "$(SEP) Make GDEHELP [done]"; \
1828        ) > GDEHELP.log 2>&1 && (cat GDEHELP.log;rm GDEHELP.log)) || (cat GDEHELP.log;rm GDEHELP.log;false)
1829
1830ifeq ($(DEBUG),1)
1831BIN_TARGET=develall
1832else
1833BIN_TARGET=all
1834endif
1835
1836
1837binlink:
1838        $(MAKE) -C bin $(BIN_TARGET)
1839
1840preplib:
1841        (cd lib;$(MAKE) all)
1842
1843# --------------------------------------------------------------------------------
1844# This section is quite tricky:
1845#
1846# make 'perl' is a BIG target, so when it has to be made, it has to be started
1847# as early as possible to reduce overall compile time. Since 'make' does not
1848# provide any priotities, i force it to build all 'perl'-prerequisites early, by
1849# adding  artificial dependencies to these prerequisites
1850#
1851# That behavior is likely to be system-dependent.
1852# My goal was only to make it work on my current development system,
1853# where this saves about 20% of overall build time.
1854
1855ifeq ($(WITHPERL),1)
1856links_non_perl: PERLTOOLS/PERLTOOLS.dummy
1857perltools:      links_non_perl
1858perl:           realperl
1859else
1860links_non_perl: links
1861perl:
1862        $(MAKE) "WITHPERL=1" perl
1863endif
1864
1865# ---------------------------------------- perl
1866
1867ifeq ($(ARB_64),$(BUILDHOST_64))
1868TEST_PERL_SCRIPTS=$(MAKE) -C PERL_SCRIPTS/test test
1869else
1870TEST_PERL_SCRIPTS=echo "skipping perl script compilation (when cross-compiling)"
1871endif
1872
1873realperl: perltools
1874        (( \
1875                echo "$(SEP) Make PERL2ARB" ; \
1876                $(TIME) $(MAKE) -C PERL2ARB -r -f Makefile.main \
1877                        "AUTODEPENDS=1" \
1878                        "dflags=$(dflags)" \
1879                        "cross_cflags=$(cross_cflags) $(cxxflags) $(dflags)" \
1880                        "cross_lflags=$(cross_lflags)" \
1881                        "COMPILER_VERSION=$(COMPILER_VERSION)" \
1882                        all && \
1883                $(TEST_PERL_SCRIPTS) && \
1884                echo "$(SEP) Make PERL2ARB [done]" ; \
1885        ) > PERL2ARB.log 2>&1 && (cat PERL2ARB.log;rm PERL2ARB.log)) || (cat PERL2ARB.log;rm PERL2ARB.log;false)
1886
1887perl_clean:
1888        @$(MAKE) -C PERL2ARB -r -f Makefile.main \
1889                "AUTODEPENDS=0" \
1890                clean
1891
1892PERL2ARB/PERL2ARB.clean:
1893        $(MAKE) perl_clean
1894        $(MAKE) -C PERL_SCRIPTS/test clean
1895
1896# ---------------------------------------- bindings to script languages
1897
1898bindings: lib/libCORE.so lib/libARBDB.so
1899        $(MAKE) -C BINDINGS all ARBDEPENDS="$(^:%=../%)" DFLAGS="$(dflags)"
1900
1901bindings_clean:
1902        $(MAKE) -C BINDINGS clean
1903
1904# ----------------------------------------
1905
1906CLOC=cloc-1.08.pl
1907CLOCFLAGS=--no3 --quiet --progress-rate=0
1908CLOCARB=--exclude-dir=GDE .
1909CLOCEXT=GDE
1910CLOCCODE=--read-lang-def=$(ARBHOME)/SOURCE_TOOLS/arb.cloc.code.def
1911CLOCREST=--read-lang-def=$(ARBHOME)/SOURCE_TOOLS/arb.cloc.rest.def
1912CLOCFILT=tail --lines=+4
1913
1914cloc:
1915        @echo 'Arb code:'
1916        @$(CLOC) $(CLOCFLAGS) $(CLOCCODE) $(CLOCARB) | $(CLOCFILT)
1917        @echo 'Arb rest:'
1918        @$(CLOC) $(CLOCFLAGS) $(CLOCREST) $(CLOCARB) | $(CLOCFILT)
1919        @echo 'External code:'
1920        @$(CLOC) $(CLOCFLAGS) $(CLOCCODE) $(CLOCEXT) | $(CLOCFILT)
1921        @echo 'External rest:'
1922        @$(CLOC) $(CLOCFLAGS) $(CLOCREST) $(CLOCEXT) | $(CLOCFILT)
1923
1924# ---------------------------------------- check ressources
1925
1926check_res:
1927        $(ARBHOME)/SOURCE_TOOLS/check_ressources.pl
1928
1929# ---------------------------------------- cleaning
1930
1931rmbak:
1932        @echo "Cleanup:"
1933        @find . \(      -name '*%' \
1934                        -o -name '*.bak' \
1935                        -o -name '*~' \) \
1936                        -o \( -name 'core' -a \! -type d \) \
1937                -exec rm -v {} \;
1938
1939bin_reinit:
1940        $(MAKE) bin/bin.clean
1941        $(MAKE) -C "bin" all
1942
1943clean_directories:
1944        -rm -rf \
1945                $(ARBHOME)/PROBE_SET/bin \
1946                $(ARBHOME)/INCLUDE \
1947
1948libclean:
1949        -find $(ARBHOME) -type f \( -name '*.a' ! -type l \) -exec rm -f {} \;
1950
1951objclean:
1952        -find $(ARBHOME) -type f \( -name '*.o' ! -type l \) -exec rm -f {} \;
1953
1954# bin.clean and HELP_SOURCE.clean interfere
1955clean3:
1956        $(MAKE) bin/bin.clean
1957        $(MAKE) HELP_SOURCE/HELP_SOURCE.clean
1958
1959clean2: $(ARCHS:.a=.clean) \
1960                clean3 \
1961                rmbak \
1962                libclean \
1963                objclean \
1964                lib/lib.clean \
1965                GDEHELP/GDEHELP.clean \
1966                HEADERLIBS/HEADERLIBS.clean \
1967                SOURCE_TOOLS/SOURCE_TOOLS.clean \
1968                SOURCE_TOOLS/COMPILE_COMPAT/COMPILE_COMPAT.clean \
1969                UNIT_TESTER/UNIT_TESTER.clean \
1970                TEMPLATES/TEMPLATES.clean \
1971                perl_clean \
1972                clean_directories \
1973
1974        rm -f *.last_gcc *.last_compiler config.makefile.bak
1975
1976# links are needed for cleanup
1977clean: redo_links motif_xpm_hack_clean
1978        $(MAKE) clean2
1979        $(MAKE) clean_cov_all clean_links
1980
1981silent_clean:
1982        $(MAKE) clean >/dev/null
1983
1984# 'relocated' is about 50% faster than 'rebuild'
1985reloc_clean: links
1986        @echo "---------------------------------------- Relocation cleanup"
1987        $(MAKE) \
1988                perl_clean \
1989                GDEHELP/GDEHELP.clean \
1990                HELP_SOURCE/genhelp/genhelp.clean \
1991                bin/bin.clean \
1992                libclean \
1993                objclean
1994
1995relocated: links
1996        $(MAKE) reloc_clean
1997        @echo "---------------------------------------- and remake"
1998        $(MAKE) build
1999
2000# -----------------------------------
2001# some stress tests
2002# (helpful to reveal race conditions with -j)
2003
2004rebuild4ever: rebuild
2005        $(MAKE) rebuild4ever
2006
2007build4ever: build
2008        $(MAKE) build4ever
2009
2010clean4ever: clean
2011        $(MAKE) clean4ever
2012
2013test4ever: ut
2014        $(MAKE) test4ever
2015
2016perl4ever: clean
2017        $(MAKE) links
2018        $(MAKE) perl
2019        $(MAKE) perl4ever
2020
2021help4ever: clean
2022        $(MAKE) help
2023        $(MAKE) help4ever
2024
2025# -----------------------------------
2026
2027rebuild: clean
2028        $(MAKE) all
2029
2030relink: bin/bin.clean libclean
2031        $(MAKE) build
2032
2033tarfile: rebuild
2034        $(MAKE) prepare_libdir
2035        util/arb_compress
2036
2037tarfile_quick: build
2038        $(MAKE) prepare_libdir
2039        util/arb_compress
2040
2041save: sourcetarfile
2042
2043patch:
2044        SOURCE_TOOLS/arb_create_patch.sh arbPatch
2045
2046# test early whether save will work
2047savetest:
2048        @util/arb_srclst.pl >/dev/null
2049
2050testsave: savetest
2051
2052sourcetarfile: rmbak
2053        util/arb_save
2054
2055save2: rmbak
2056        util/arb_save ignore
2057
2058save_test: rmbak
2059        @echo "Testing source list.."
2060        @util/arb_srclst.pl > /dev/null
2061
2062save_test_no_error:
2063        @-$(MAKE) save_test
2064
2065inc_candi:
2066        touch SOURCE_TOOLS/inc_candi.stamp
2067        $(MAKE) do_version_update
2068
2069inc_patch:
2070        touch SOURCE_TOOLS/inc_patch.stamp
2071        $(MAKE) do_version_update
2072
2073inc_minor:
2074        touch SOURCE_TOOLS/inc_minor.stamp
2075        $(MAKE) do_version_update
2076
2077inc_major:
2078        touch SOURCE_TOOLS/inc_major.stamp
2079        $(MAKE) do_version_update
2080
2081do_version_update: 
2082        @echo Incrementing version information
2083        $(MAKE) testsave
2084        $(MAKE) genheaders # auto upgrades version early
2085
2086show_version:
2087        $(MAKE) genheaders # updates version info
2088        @echo "$(SEP) ARB version info"
2089        @grep ARB_VERSION TEMPLATES/arb_build.h
2090        @echo "$(SEP)"
2091
2092release_quick:
2093        -rm arb.tgz arbsrc.tgz
2094        $(MAKE) tarfile_quick
2095        $(MAKE) sourcetarfile
2096
2097# --------------------------------------------------------------------------------
2098
2099MAKE_IF_COMMITTED=$(MAKE) -C SOURCE_TOOLS -f Makefile.commitbuild
2100
2101build_CTARGET:
2102        +$(MAKE_IF_COMMITTED) "CTARGET=$(CTARGET)" build_CTARGET
2103
2104reset_committed_build:
2105        +$(MAKE_IF_COMMITTED) reset
2106
2107# --------------------------------------------------------------------------------
2108
2109arbapplications: nt pa e4 wetc pt na nal di ph ds wetc cma
2110
2111arb_external: convert tools gde readseq tg pst xmlin
2112
2113arb_no_perl: arbapplications help arb_external
2114
2115arb: motif_xpm_hack
2116        $(MAKE) "WITHPERL=1" perl arb_no_perl
2117
2118motif_xpm_hack:
2119        $(MAKE) -r -C "lib/motifHack" all
2120
2121motif_xpm_hack_clean:
2122        $(MAKE) -r -C "lib/motifHack" clean
2123
2124# --------------------------------------------------------------------------------
2125# special targets for SOURCE_TOOLS/remake_after_change.pl
2126
2127rac_arb_dist:           di
2128rac_arb_edit4:          e4
2129rac_arb_ntree:          nt
2130rac_arb_pars:           pa
2131rac_arb_phylo:          ph
2132rac_arb_wetc:           wetc
2133rac_arb_naligner:       nal
2134rac_arb_pt_server:      pt
2135rac_arb_db_server:      ds
2136rac_arb_name_server:    na
2137rac_arb_convert_aln:    convert
2138rac_arb_treegen:        tg
2139rac_arb_rnacma:         cma
2140rac_arb_help2xml:       help
2141
2142rac_arb_a2ps:           tools
2143rac_arb_consensus_tree: tools
2144rac_arb_dnarates:       tools
2145rac_arb_export_rates:   tools
2146rac_arb_export_tree:    tools
2147rac_arb_gene_probe:     tools
2148rac_arb_message:        tools
2149rac_arb_notify:         tools
2150rac_arb_primer:         tools
2151rac_arb_probe:          tools
2152rac_arb_read_tree:      tools
2153
2154# --------------------------------------------------------------------------------
2155# unit testing
2156# @@@ work in progress
2157#
2158# goal is to automatically test all libraries/executables using TESTED_UNITS_AUTO
2159#
2160# currently not all test executables link w/o error
2161# (see UNITS_WORKING, UNITS_UNTESTABLE_ATM and UNITS_NEED_FIX)
2162
2163# define RNA3D/RNA3D.test
2164RNA3D_TEST := $(subst .a,.test,$(RNA3D_LIB))
2165
2166TESTED_UNITS_AUTO = $(ARCHS:.a=.test)
2167
2168UNITS_WORKING = \
2169        $(RNA3D_TEST) \
2170        AWTI/AWTI.test \
2171        EISPACK/EISPACK.test \
2172        GENOM/GENOM.test \
2173        GL/glAW/libglAW.test \
2174        GL/glpng/libglpng_arb.test \
2175        ISLAND_HOPPING/ISLAND_HOPPING.test \
2176        NALIGNER/NALIGNER.test \
2177        NAMES/NAMES.test \
2178        PHYLO/PHYLO.test \
2179        PRIMER_DESIGN/PRIMER_DESIGN.test \
2180        PROBE_DESIGN/PROBE_DESIGN.test \
2181        SECEDIT/SECEDIT.test \
2182        SEQ_QUALITY/SEQ_QUALITY.test \
2183        SERVERCNTRL/SERVERCNTRL.test \
2184        SL/ALIVIEW/ALIVIEW.test \
2185        SL/AP_TREE/AP_TREE.test \
2186        SL/ARB_TREE/ARB_TREE.test \
2187        SL/AW_HELIX/AW_HELIX.test \
2188        SL/AW_NAME/AW_NAME.test \
2189        SL/DB_SCANNER/DB_SCANNER.test \
2190        SL/GUI_ALIVIEW/GUI_ALIVIEW.test \
2191        SL/HELIX/HELIX.test \
2192        SL/ITEMS/ITEMS.test \
2193        SL/LOCATION/LOCATION.test \
2194        SL/MATRIX/MATRIX.test \
2195        SL/REFENTRIES/REFENTRIES.test \
2196        SL/SEQUENCE/SEQUENCE.test \
2197        SL/TRANSLATE/TRANSLATE.test \
2198        SL/TREE_ADMIN/TREE_ADMIN.test \
2199        SL/TREE_WRITE/TREE_WRITE.test \
2200        STAT/STAT.test \
2201        TREEGEN/TREEGEN.test \
2202        WETC/WETC.test \
2203        XML/XML.test \
2204        SL/ROOTED_TREE/ROOTED_TREE.test \
2205
2206# untestable units
2207
2208UNITS_NEED_FIX = \
2209        ptpan/PROBE.test \
2210
2211UNITS_UNTESTABLE_ATM = \
2212        PROBE_SET/PROBE_SET.test \
2213        XML_IMPORT/XML_IMPORT.test \
2214
2215# for the moment, put all units containing tests into UNITS_TESTED or UNITS_TESTED_FIRST
2216
2217UNITS_TESTED_FIRST = \
2218        DIST/DIST.test \
2219        PARSIMONY/PARSIMONY.test \
2220        EDIT4/EDIT4.test \
2221        NTREE/NTREE.test \
2222        MULTI_PROBE/MULTI_PROBE.test \
2223
2224# plain test-libaries not linked anywhere
2225TEST_SANDBOXES = \
2226        SL/CB/CB.test \
2227
2228UNITS_TESTED = \
2229        SL/NEIGHBOURJOIN/NEIGHBOURJOIN.test \
2230        SL/NDS/NDS.test \
2231        ARB_GDE/ARB_GDE.test \
2232        GENOM_IMPORT/GENOM_IMPORT.test \
2233        SL/MACROS/MACROS.test \
2234        SL/REGEXPR/REGEXPR.test \
2235        SL/FILTER/FILTER.test \
2236        ARBDB/libARBDB.test \
2237        CONSENSUS_TREE/CONSENSUS_TREE.test \
2238        TOOLS/arb_consensus_tree.test \
2239        TOOLS/arb_test.test \
2240        TOOLS/arb_probe.test \
2241        PERLTOOLS/arb_proto_2_xsub.test \
2242        AWTC/AWTC.test \
2243        SL/ALILINK/ALILINK.test \
2244        SL/TREE_READ/TREE_READ.test \
2245        DBSERVER/DBSERVER.test \
2246        AWT/libAWT.test \
2247        CORE/libCORE.test \
2248        SL/INSDEL/INSDEL.test \
2249        SL/TREEDISP/TREEDISP.test \
2250        AISC_MKPTPS/mkptypes.test \
2251        MERGE/MERGE.test \
2252        SERVERCNTRL/SERVERCNTRL.test \
2253        SL/FAST_ALIGNER/FAST_ALIGNER.test \
2254        SL/PRONUC/PRONUC.test \
2255        WINDOW/libWINDOW.test \
2256        HELP_SOURCE/arb_help2xml.test \
2257        CONVERTALN/CONVERTALN.test \
2258        SL/SEQIO/SEQIO.test \
2259        SL/PTCLEAN/PTCLEAN.test \
2260        PROBE/PROBE.test \
2261        SL/DB_QUERY/DB_QUERY.test \
2262
2263TESTED_UNITS_MANUAL = \
2264        $(TEST_SANDBOXES) \
2265        $(UNITS_TESTED_FIRST) \
2266        $(UNITS_TESTED) \
2267
2268#       $(UNITS_WORKING)
2269
2270# see UNIT_TESTER/sym2testcode.pl@disableErrorOnUnitsWithoutTests
2271
2272#TESTED_UNITS = $(TESTED_UNITS_AUTO)
2273TESTED_UNITS = $(TESTED_UNITS_MANUAL)
2274
2275# ----------------------------------------
2276
2277TEST_LOG_DIR = UNIT_TESTER/logs
2278TEST_RUN_SUITE=$(MAKE) $(NODIR) -C UNIT_TESTER -f Makefile.suite -r
2279TEST_MAKE_FLAGS=
2280TEST_POST_CLEAN=
2281ifeq ($(COVERAGE),1)
2282TEST_POST_CLEAN=$(MAKE) clean_cov
2283TEST_MAKE_FLAGS+=-j1
2284endif
2285
2286
2287%.test:
2288        -@( export ID=$$$$; mkdir -p $(TEST_LOG_DIR); \
2289        ( \
2290            echo "fake[1]: Entering directory \`$(ARBHOME)/UNIT_TESTER'"; \
2291            $(MAKE) -C UNIT_TESTER -f Makefile.test -r \
2292                "UNITDIR=$(@D)" \
2293                "UNITLIBNAME=$(@F:.test=)" \
2294                "COVERAGE=$(COVERAGE)" \
2295                "ARB_PID=$(ARB_PID)_$(@F)" \
2296                runtest; \
2297            echo "fake[1]: Leaving directory \`$(ARBHOME)/UNIT_TESTER'"; \
2298            $(TEST_POST_CLEAN) \
2299        ) >$(TEST_LOG_DIR)/$(@F).log 2>&1; \
2300        UNIT_TESTER/log_result.pl $(TEST_LOG_DIR)/$(@F).log )
2301
2302
2303test_base: $(UNIT_TESTER_LIB:.a=.dummy) $(subst .test,.dummy,$(TEST_SANDBOXES))
2304
2305clean_cov:
2306        find . \( -name "*.gcda" -o -name "*.gcov" -o -name "*.cov" \) -exec rm {} \;
2307
2308clean_cov_all: clean_cov
2309        find . \( -name "*.gcno" \) -exec rm {} \;
2310
2311run_tests: test_base clean_cov
2312        $(MAKE) "ARB_PID=UT_$$$$" run_tests_faked_arbpid
2313
2314cleanup_faked_arbpids:
2315        @-rm ~/.arb_tmp/tmp/arb_pids_${USER}_${ARB_PID}_*
2316
2317cleanup_faked_arbpids_and_fail: cleanup_faked_arbpids
2318        @false
2319
2320run_tests_faked_arbpid:
2321        +@$(TEST_RUN_SUITE) init
2322        @echo "fake[2]: Entering directory \`$(ARBHOME)/UNIT_TESTER'"
2323        $(MAKE) $(TEST_MAKE_FLAGS) $(NODIR) $(TESTED_UNITS) || $(MAKE) cleanup_faked_arbpids_and_fail
2324        @echo "fake[2]: Leaving directory \`$(ARBHOME)/UNIT_TESTER'"
2325        +@$(TEST_RUN_SUITE) cleanup || $(MAKE) cleanup_faked_arbpids_and_fail
2326        @$(MAKE) clean_cov >/dev/null
2327        @$(MAKE) cleanup_faked_arbpids
2328
2329ut:
2330ifeq ($(UNIT_TESTS),1)
2331        @echo $(MAKE) run_tests
2332        @$(MAKE) run_tests
2333else
2334        @echo "Not compiled with unit tests"
2335endif
2336
2337
2338aut:
2339        +@$(TEST_RUN_SUITE) unskip
2340        $(MAKE) ut
2341
2342# --------------------------------------------------------------------------------
2343
2344TIMELOG=$(ARBHOME)/arb_time.log
2345TIMEARGS=--append --output=$(TIMELOG) --format=" %E(%S+%U) %P [%C]"
2346TIMECMD=$(TIME) $(TIMEARGS)
2347
2348time_one:
2349ifeq ($(ONE_TIMED_TARGET),)
2350        @echo "Error: You have to pass ONE_TIMED_TARGET to $@"
2351        false
2352else
2353        @echo "$(SEP) $(MAKE) $(ONE_TIMED_TARGET)"
2354        @$(TIMECMD) $(MAKE) $(ONE_TIMED_TARGET)
2355        @echo "$(SEP) $(MAKE) $(ONE_TIMED_TARGET) [done]"
2356endif
2357
2358timed_target:
2359ifeq ($(TIMED_TARGET),)
2360        @echo "Error: You have to pass TIMED_TARGET to $@"
2361        false
2362else
2363        @echo "Build time:" > $(TIMELOG)
2364        $(MAKE) "ONE_TIMED_TARGET=$(TIMED_TARGET)" time_one
2365        @cat $(TIMELOG)
2366        @rm $(TIMELOG)
2367endif
2368
2369timed_target_tested:
2370ifeq ($(TIMED_TARGET),)
2371        @echo "Error: You have to pass TIMED_TARGET to $@"
2372        false
2373else
2374        @echo "Build time:" > $(TIMELOG)
2375        $(MAKE) "ONE_TIMED_TARGET=$(TIMED_TARGET)" time_one
2376        $(MAKE) "ONE_TIMED_TARGET=ut" time_one
2377        @cat $(TIMELOG)
2378        @rm $(TIMELOG)
2379endif
2380
2381clean_timed_target:
2382ifeq ($(TIMED_TARGET),)
2383        @echo "Error: You have to pass TIMED_TARGET to $@"
2384        false
2385else
2386        @echo "Build time:" > $(TIMELOG)
2387        $(MAKE) "ONE_TIMED_TARGET=clean" time_one
2388        $(MAKE) "ONE_TIMED_TARGET=$(TIMED_TARGET)" time_one
2389        @cat $(TIMELOG)
2390        @rm $(TIMELOG)
2391endif
2392
2393# --------------------------------------------------------------------------------
2394
2395CHECKOUT_MODIFIED=0# set to 1 to temporarily skip test for modifications (do not check in if set to 1)
2396
2397check_svn_does_not_contain_generated:
2398ifeq ($(CHECKOUT_MODIFIED),0)
2399        @echo "Testing that build does not modify files in SVN"
2400        @test 0 = `svn status | wc -l` || ( \
2401                echo "The checkout is not/no longer clean:"; \
2402                svn status; \
2403                echo "- if this fails instantly, your checkout is not clean"; \
2404                echo "- if this fails after other targets, these targets modify checked in data"; \
2405                echo "  (a common cause may be that depends are not up to date)"; \
2406                false)
2407else
2408        grep -Hn 'CHECKOUT_MODIFIED' Makefile
2409endif
2410
2411check_svn_ignores_generated:
2412        @test 0 = `svn status | grep '^\?' | wc -l` || ( \
2413                echo "There are svn-unignored files:"; \
2414                svn status | grep '^\?'; \
2415                echo "(all generated files should be svn-ignored)"; \
2416                false)
2417
2418check_svn_state: check_svn_does_not_contain_generated
2419        $(MAKE) check_svn_ignores_generated
2420        $(MAKE) savetest
2421
2422things_that_always_should_work: depends proto
2423
2424post_commit_check:
2425        @echo "---------------------------------------- [Initial]"
2426        $(MAKE) check_svn_state
2427
2428        $(MAKE) clean
2429        @echo "---------------------------------------- [After 'make clean']"
2430        $(MAKE) check_svn_state
2431
2432        $(MAKE) things_that_always_should_work
2433        @echo "---------------------------------------- [After 'make things_that_always_should_work']"
2434        $(MAKE) check_svn_state
2435
2436        $(MAKE) all
2437        @echo "---------------------------------------- [After 'make all']"
2438        $(MAKE) check_svn_state
2439
2440        $(MAKE) things_that_always_should_work
2441        @echo "---------------------------------------- [Final]"
2442        $(MAKE) check_svn_state
2443
2444# --------------------------------------------------------------------------------
2445
2446build: arb
2447        $(MAKE) binlink preplib compile_compatibility
2448
2449all:
2450        @echo "Build time" > $(TIMELOG)
2451        @echo "$(SEP) $(MAKE) build"
2452        @$(TIMECMD) $(MAKE) build
2453        @echo $(SEP)
2454        @echo "made 'all' with success."
2455        @echo "to start arb enter 'arb'"
2456ifeq ($(UNIT_TESTS),1)
2457        @echo $(MAKE) run_tests
2458        @$(TIMECMD) $(MAKE) run_tests
2459endif
2460        @echo "$(SEP) $(MAKE) build [done]"
2461ifeq ($(DEBUG),1)
2462        @$(MAKE) save_test_no_error >/dev/null # just show hints
2463endif
2464        @cat $(TIMELOG)
2465        @rm $(TIMELOG)
2466
Note: See TracBrowser for help on using the repository browser.