Returned to old version where parameters are given at first point.
[u/mrichter/AliRoot.git] / JETAN / Makefile
1 # $Id$
2 #
3 # Makefile for the jetan package (standalone)
4
5 ifdef ALIVERBOSE
6 MUTE:=
7 else
8 MUTE:=@
9 endif
10
11 #-------------------------------------------------------------------------------
12 # Include library definition
13
14 include $(ALICE_ROOT)/build/Makefile.config
15
16 #-------------------------------------------------------------------------------
17 # Location where to install libraries and binaries and common header files
18
19 LIBPATH      := ./lib/tgt_$(ALICE_TARGET)
20 BINPATH      := ./bin/tgt_$(ALICE_TARGET)
21 EXPORTDIR    := $(ALICE_ROOT)/include
22 BINLIBDIRS   := -L$(ALICE_ROOT)/$(LIBPATH)
23
24 #-------------------------------------------------------------------------------
25 # Include machine dependent macros
26
27 include $(ALICE_ROOT)/build/Makefile.$(ALICE_TARGET)
28
29 #-------------------------------------------------------------------------------
30 # Check if called with debug
31
32 ifeq ($(ALIDEBUG),YES)
33 override ALICE_TARGET := $(ALICE_TARGET)DEBUG
34 FFLAGS   := -g $(filter-out -O%,$(FFLAGS))
35 CXXFLAGS := -g $(filter-out -O%,$(CXXLAGS))
36 CFLAGS   := -g $(filter-out -O%,$(CLAGS))
37 SOFLAGS  := -g $(filter-out -O%,$(SOFLAGS))
38 LDFLAGS  := -g $(filter-out -O%,$(LDFLAGS))
39 endif
40
41 #-------------------------------------------------------------------------------
42 # Check if called with profile
43
44 ifeq ($(ALIPROFILE),YES)
45 override ALICE_TARGET := $(ALICE_TARGET)PROF
46 FFLAGS   += -pg
47 CXXFLAGS += -pg
48 CFLAGS   += -pg
49 SOFLAGS  += -pg
50 LDFLAGS  += -pg
51 endif
52
53 #-------------------------------------------------------------------------------
54 # Check if DATE is installed
55
56 ifdef DATE_ROOT
57 DATEFLAGS  = -DALI_DATE -D${DATE_SYS} -DDATE_SYS=${DATE_SYS} -Dlong32=${DATE_LONG32} \
58              -Dlong64=${DATE_LONG64} -DdatePointer=${DATE_POINTER}
59 CXXFLAGS  += $(DATEFLAGS)
60 CFLAGS    += $(DATEFLAGS)
61 CINTFLAGS += $(DATEFLAGS)
62 DEPINC    += $(DATEFLAGS)
63 endif
64
65 #-------------------------------------------------------------------------------
66 # Default include dirs for C++, Fortran, Cint, and dependencies
67 # The module directory will be added by each module
68
69 GENINC     := -I$(ALICE_ROOT)/include -I$(shell root-config --incdir)
70 CXXFLAGS   += $(GENINC)
71 CXXFLAGSNO += $(GENINC)
72 CINTFLAGS  += $(GENINC)
73 DEPINC     += $(GENINC)
74
75 LIBS := $(GLIBS) $(ROOTLIBS) $(SYSLIBS)
76
77 #Determine if it's a library or a executable
78 TYPE=lib
79
80 # Package head directory, source and include directories
81 CURDIR=$(shell pwd)
82 MODDIR:=.
83 MODDIRS:=$(MODDIR)
84 MODDIRI:=$(MODDIR)
85 MODDIRO:=./.objs
86
87 # Reseting variables before importing pkg-file
88 SRCS:=
89 HDRS:=
90 FSRCS:=
91 DHDR:=
92 CSRCS:=
93 CHDRS:=
94 EINCLUDE:=
95 EDEFINE:=
96 ELIBS:=
97 ELIBSDIR:=
98 PACKFFLAGS:=
99 PACKCXXFLAGS:=
100 PACKCFLAGS:=
101 PACKDYFLAGS:=
102 PACKSOFLAGS:=
103 EXPORT:=
104 EHDRS:=
105 CINTHDRS:=
106 ARLIBS:=
107 SHLIBS:=
108 SUBDIR:=
109
110 include libJETAN.pkg
111
112 ifndef PACKFFLAGS
113 JETANFFLAGS:=$(FFLAGS)
114 else
115 JETANFFLAGS:=$(PACKFFLAGS)
116 endif
117
118 ifndef PACKCFLAGS
119 JETANCFLAGS:=$(CFLAGS)
120 else
121 JETANCFLAGS:=$(PACKCFLAGS)
122 endif
123
124 ifndef PACKCXXFLAGS
125 JETANCXXFLAGS:=$(CXXFLAGS)
126 else
127 JETANCXXFLAGS:=$(PACKCXXFLAGS)
128 endif
129
130 ifndef PACKSOFLAGS
131 JETANSOFLAGS:=$(SOFLAGS)
132 else
133 JETANSOFLAGS:=$(PACKSOFLAGS)
134 endif
135
136 ifdef DYEXT
137 ifndef PACKDYFLAGS
138 JETANDYFLAGS:=$(DYFLAGS)
139 else
140 JETANDYFLAGS:=$(PACKDYFLAGS)
141 endif
142 endif
143
144 ifndef PACKDCXXFLAGS
145 JETANDCXXFLAGS:=$(CXXFLAGSNO)
146 else
147 JETANDCXXFLAGS:=$(PACKDCXXFLAGS)
148 endif
149
150
151 ifdef DHDR
152 WITHDICT=YES
153 else
154 WITHDICT=
155 endif
156
157 # Headerfiles exported to common place:
158 JETANEXPORT:=$(EXPORT)
159 JETANEXPORTDEST:=$(patsubst %,$(EXPORTDIR)/%,$(EXPORT))
160
161
162 #Extra include,libs, defines etc.
163
164 JETANDEFINE:=$(EDEFINE) -DNOUQHEADERINFO
165
166 JETANINC:=$(patsubst %,-I$(ALICE_ROOT)/%,$(EINCLUDE)) -I.
167
168 JETANELIBS:=$(patsubst %,-l%,$(ELIBS))
169 JETANELIBSDEP:=$(patsubst %,lib/tgt_$(ALICE_TARGET)/lib%.$(SOEXT),$(ELIBS))
170 JETANELIBSDIR:=$(patsubst %,-L%,$(ELIBSDIR))
171
172 #c sources and headers
173
174 JETANCS:=$(patsubst %,$(MODDIR)/%,$(CSRCS))
175 JETANCH:=$(patsubst %,$(MODDIR)/%,$(CHDRS))
176
177 #Fortran sources 
178 JETANFS:=$(patsubst %,$(MODDIR)/%,$(FSRCS))
179
180 #c++ sources and header
181 JETANS:=$(patsubst %,$(MODDIR)/%,$(SRCS))
182 JETANH:=$(patsubst %,$(MODDIR)/%,$(HDRS)) $(EHDRS)
183
184 #c++ source subdirectories
185 JETANSDIR:=$(SUBDIR)
186
187 #############################################################################
188 #
189 #            If special rootcint headerfiles is specified use them
190 #                         else use all headers
191
192 ifndef CINTHDRS
193 JETANCINTHDRS:=$(JETANH) 
194 else
195 JETANCINTHDRS:=$(CINTHDRS)
196 endif
197 #############################################################################
198
199 # Package Dictionary 
200
201 JETANDH:=$(MODDIR)/$(DHDR)
202
203
204 #All objects
205 JETANCO:=$(patsubst %,$(MODDIRO)/%, $(CSRCS:.c=.o))
206 TEMP:=$(FSRCS:.F=.o)
207 JETANFO:=$(patsubst %,$(MODDIRO)/%, $(TEMP:.f=.o))
208 JETANO:= $(patsubst %,$(MODDIRO)/%, $(SRCS:.cxx=.o)) $(JETANFO) $(JETANCO)
209
210
211
212 ifdef WITHDICT
213   JETANDS:=$(MODDIRO)/G__JETAN.cxx
214   JETANDO:=$(MODDIRO)/G__JETAN.o
215   JETANDDEP:=$(JETANDO:.o=.d)
216   JETANDEP:=$(JETANO:.o=.d) $(JETANDDEP)
217 else
218   JETANDS:=
219   JETANDO:=
220   JETANDDEP:=
221   JETANDEP:=$(JETANO:.o=.d)
222 endif
223
224
225 #The actual library file
226
227 JETANLIB:=$(LIBPATH)/libJETAN.$(SOEXT)
228
229 ifneq ($(DYEXT),)
230 JETANDLIB:=$(LIBPATH)/libJETAN.$(DYEXT)
231 endif
232
233 JETANALIB:=$(LIBPATH)/libJETAN.$(AEXT)
234
235 #Add this to the modules libs
236 JETANLIBS += $(JETANLIB)
237 JETANALIBS += $(JETANALIB)
238 ifneq ($(DYEXT),)
239 JETANDLIBS += $(JETANDLIB)
240 endif
241
242 #The actual binary file
243
244 JETANBIN:=$(BINPATH)/JETAN
245
246 #Add to modules list of binaries
247 JETANBINS += $(JETANBIN)
248
249 # Use in the main Makefile
250
251 ifeq ($(TYPE),lib)
252 ALLLIBS += $(JETANLIB)
253 ALLALIBS += $(JETANALIB)
254 ifneq ($(DYEXT),)
255 ALLLIBS += $(JETANDLIB)
256 endif
257 BINLIBS += -lJETAN
258 else
259 ALLEXECS += $(JETANBIN)
260 endif
261
262 ifeq ($(DYEXT),)
263 JETANLIB := $(JETANLIB)
264 else
265 JETANLIB := $(JETANLIB)
266 endif
267
268 # include all dependence files
269 INCLUDEFILES +=$(JETANDEP)
270
271 EXPORTFILES += $(JETANEXPORTDEST)
272
273 #local rules
274
275 #The exportfiles only include if any!!
276
277 ifdef JETANEXPORT
278 #$(JETANEXPORTDEST): $(patsubst %,JETAN/%,$(JETANEXPORT))
279
280 $(JETANEXPORTDEST): $(EXPORTDIR)/%.h: JETAN/%.h
281 ifndef ALIQUIET
282           @echo "***** Copying file $^ to $@ *****"
283 endif
284           @[ -d $(dir $@) ] || mkdir -p $(dir $@)
285           @cp $^ $@     
286 endif
287
288 #------------------------------------------------------------------------
289
290 $(JETANLIB):$(JETANO) $(JETANDO)
291 ifndef ALIQUIET
292           @echo "***** Linking library $@ *****"
293 endif
294         $(MUTE)mkdir -p $(LIBPATH)
295         $(MUTE)TMPDIR=/tmp/JETAN$$$$.`date +%M%S` ; \
296         export TMPDIR; mkdir -p $$TMPDIR ; cd $$TMPDIR ; \
297         find $(CURDIR)/.objs/ -name '*.o' -exec ln -s {} . \; ;\
298         \rm -f $(CURDIR)/$@ ;\
299         TMPLIB=$(notdir $(JETANLIB)); export TMPLIB;\
300         $(SHLD) $(JETANSOFLAGS) -o $(CURDIR)/$@ $(notdir $(JETANO) $(JETANDO))  $(JETANELIBSDIR) $(JETANELIBS) $(SHLIB);\
301         chmod a-w $(CURDIR)/$@ ;\
302         cd $(ALICE_ROOT) ; \rm -rf $$TMPDIR
303
304 ifneq ($(DYEXT),)
305 $(JETANDLIB):$(JETANO) $(JETANDO)
306 ifndef ALIQUIET
307           @echo "***** Linking library $@ *****"
308 endif
309         $(MUTE)mkdir -p $(LIBPATH)
310         $(MUTE)TMPDIR=/tmp/JETAN$$$$.`date +%M%S` ; \
311         export TMPDIR; mkdir -p $$TMPDIR ; cd $$TMPDIR ; \
312         find $(CURDIR)/.objs/ -name '*.o' -exec ln -s {} . \; ;\
313         \rm -f $(CURDIR)/$@ ;\
314         $(DYLD) $(JETANDYFLAGS) -o $(CURDIR)/$@ $(notdir $(JETANO) $(JETANDO))  $(JETANELIBSDIR) $(JETANELIBS) $(DYLIB);\
315         chmod a-w $(CURDIR)/$@ ;\
316         cd $(ALICE_ROOT) ; \rm -rf $$TMPDIR
317 endif
318
319 #------------------------------------------------------------------------
320
321 $(JETANALIB):$(JETANO) $(JETANDO)
322 ifndef ALIQUIET
323         @echo "***** Linking static library $@ *****"
324 endif
325         $(MUTE)mkdir -p $(LIBPATH)
326         $(MUTE)TMPDIR=/tmp/JETAN$$$$.`date +%M%S` ; \
327         export TMPDIR; mkdir -p $$TMPDIR ; cd $$TMPDIR ; \
328         find $(CURDIR)/JETAN/tgt_$(ALICE_TARGET) -name '*.o' -exec ln -s {} . \; ;\
329         \rm -f $(CURDIR)/$@ ;\
330         TMPLIB=$(notdir $(JETANLIB)); export TMPLIB;\
331         $(ALLD) $(ALFLAGS) $(CURDIR)/$@ $(notdir $(JETANO) $(JETANDO))  $(JETANELIBSDIR) $(JETANELIBS) $(ALLIB);\
332         cd $(CURDIR) ; \rm -rf $$TMPDIR
333         $(MUTE)chmod a-w $@
334
335
336 $(JETANBIN):$(JETANO) $(JETANDO) $(JETANELIBSDEP)
337 ifndef ALIQUIET
338         @echo "***** Making executable $@ *****"
339 endif
340 ifeq ($(ALIPROFILE),YES)
341         $(MUTE)$(LD) $(LDFLAGS) $(JETANO) $(ARLIBS) $(SHLIBS) $(LIBS) $(EXEFLAGS) -o $@
342 else
343         $(MUTE)$(LD) $(LDFLAGS) $(JETANO) $(JETANDO) $(BINLIBDIRS) $(JETANELIBSDIR) $(JETANELIBS) $(LIBS) $(EXEFLAGS) -o $@
344 endif
345
346 $(JETANDS): $(JETANCINTHDRS) $(JETANDH)
347 ifndef ALIQUIET
348         @echo "***** Creating $@ *****";        
349 endif
350         @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
351         @\rm -f $(patsubst %.cxx,%.d, $@)
352         $(MUTE)rootcint -f $@ -c $(JETANDEFINE) $(CINTFLAGS) $(JETANINC) $(JETANCINTHDRS) $(JETANDH) 
353
354 $(JETANDO): $(JETANDS)
355 ifndef ALIQUIET
356         @echo "***** Compiling $< *****";
357 endif
358         $(MUTE)$(CXX) $(JETANDEFINE) -c $(JETANINC)  -I$(ALICE_ROOT) $< -o $@ $(JETANDCXXFLAGS)
359
360 #Different targets for the module
361
362 ifeq ($(TYPE),lib)
363 all-JETAN: $(JETANLIB)
364 ifneq ($(DYEXT),)
365 all-JETAN: $(JETANDLIB)
366 endif
367 else
368 all-JETAN: $(JETANBIN)
369 endif
370
371 depend-JETAN: $(JETANDEP)
372
373 # determination of object files
374 $(MODDIRO)/%.o: $(MODDIR)/%.cxx $(MODDIRO)/%.d 
375 ifndef ALIQUIET
376         @echo "***** Compiling $< *****";
377 endif
378         @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
379         $(MUTE)$(CXX) $(JETANDEFINE) -c $(JETANINC)   $< -o $@ $(JETANCXXFLAGS)
380
381 $(MODDIRO)/%.o: $(MODDIR)/%.F $(MODDIRO)/%.d 
382 ifndef ALIQUIET
383         @echo "***** Compiling $< *****";
384 endif
385         @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
386         $(MUTE)$(F77) -c $(JETANINC)  $< -o $@ $(JETANFFLAGS)
387
388 $(MODDIRO)/%.o: $(MODDIR)/%.f $(MODDIRO)/%.d 
389 ifndef ALIQUIET
390         @echo "***** Compiling $< *****";
391 endif
392         @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
393         $(MUTE)$(F77) -c $(JETANINC)  $< -o $@ $(JETANFFLAGS)
394
395 $(MODDIRO)/%.o: $(MODDIR)/%.c $(MODDIRO)/%.d 
396 ifndef ALIQUIET
397         @echo "***** Compiling $< *****";
398 endif
399         @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
400         $(MUTE)$(CC) $(JETANDEFINE) -c  $(JETANINC)  $< -o $@   $(JETANCFLAGS)
401
402 $(JETANDDEP): $(JETANDS)
403 ifndef ALIQUIET
404                 @echo "***** Making dependences for $< *****";
405 endif
406                 @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
407                 @$(ALICE_ROOT)/share/alibtool depend "$(JETANELIBSDIR) $(JETANINC) $(DEPINC)  $<" > $@
408
409 $(MODDIRO)/%.d: $(MODDIRS)/%.cxx
410 ifndef ALIQUIET
411                 @echo "***** Making dependences for $< *****";
412 endif
413                 @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
414                 @$(ALICE_ROOT)/share/alibtool depend "$(JETANDEFINE) $(JETANELIBSDIR) $(JETANINC) $(DEPINC)  $<" > $@
415 $(MODDIRO)/%.d: $(MODDIRS)/%.f
416 ifndef ALIQUIET
417                 @echo "***** Making dependences for $< *****";
418 endif
419                 @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
420                 @$(ALICE_ROOT)/share/alibtool dependF "$(JETANELIBSDIR) $(JETANINC) $(DEPINC)  $<" > $@
421 $(MODDIRO)/%.d: $(MODDIRS)/%.F
422 ifndef ALIQUIET
423                 @echo "***** Making dependences for $< *****";
424 endif
425                 @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
426                 $(MUTE)share/alibtool dependF "$(JETANELIBSDIR) $(JETANINC) $(DEPINC)  $<" > $@
427 $(MODDIRO)/%.d: $(MODDIRS)/%.c
428 ifndef ALIQUIET
429                 @echo "***** Making dependences for $< *****";
430 endif
431                 @(if [ ! -d '$(dir $@)' ]; then echo "***** Making directory $(dir $@) *****"; mkdir -p $(dir $@); fi;)
432                 @$(ALICE_ROOT)/share/alibtool depend "$(JETANDEFINE) $(JETANELIBSDIR) $(JETANINC) $(DEPINC) $<" > $@
433
434 .PRECIOUS: $(patsubst %.cxx,$(MODDIRO)/%.d,$(SRCS))
435 .PRECIOUS: $(patsubst %.c,$(MODDIRO)/%.d,$(CSRCS))
436 .PRECIOUS: $(patsubst %.F,$(MODDIRO)/%.d,$(patsubst %.f,$(MODDIRO)/%.d,$(FSRCS)))
437
438
439 #  Clean option for the whole module
440 clean:
441 ifndef ALIQUIET
442                 @echo "***** Cleaning JETAN *****"
443 endif
444                 $(MUTE)rm -rf $(MODDIRO)
445                 $(MUTE)rm -rf lib
446                 $(MUTE)rm -rf $(BINPATH)