source: tags/old_import_filter/Makefile

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