source: tags/svn.1.5.4/Makefile

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