source: tags/arb-6.0-rc1/Makefile

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