source: tags/ms_r16q4/Makefile

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