source: tags/arb-6.0.3/Makefile

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