source: tags/arb-6.0.5/Makefile

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