root/trunk/Makefile

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