Fork me on GitHub

source: git/doc/genMakefile.tcl@ 3051358a

ImprovedOutputFile
Last change on this file since 3051358a was cdbca0d, checked in by Pavel Demin <pavel-demin@…>, 6 years ago

fix formatting in genMakefile.tcl and Makefile

  • Property mode set to 100644
File size: 13.4 KB
Line 
1#!/usr/bin/env tclsh
2
3set prefix "tmp/"
4set suffix " \\\n\t"
5
6set srcSuf {.$(SrcSuf)}
7set objSuf {.$(ObjSuf)}
8set pcmSuf {$(PcmSuf)}
9set exeSuf {$(ExeSuf)}
10
11proc dependencies {fileName firstLine {force 1} {command {}}} {
12 global suffix headerFiles sourceFiles
13
14 if {[info exists sourceFiles($fileName)]} return
15
16 set sourceFiles($fileName) 1
17
18 set list {}
19 set fid [open $fileName]
20 while {! [eof $fid]} {
21 set line [gets $fid]
22 if [regexp -- {^\s*#include\s*"((\w+/)+\w+\.(h|hh))"} $line] {
23 set elements [split $line {"}]
24 set file [lindex $elements 1]
25 if [file exists $file] {
26 lappend list $file
27 set headerFiles($file) 1
28 } elseif [file exists external/$file] {
29 lappend list external/$file
30 set headerFiles(external/$file) 1
31 }
32 }
33 }
34
35 if {[llength $list] > 0} {
36 puts -nonewline $firstLine
37 foreach file $list {puts -nonewline $suffix$file}
38 if {$command != {}} {
39 puts {}
40 puts $command
41 }
42 puts {}
43 } elseif {$force} {
44 puts -nonewline $firstLine
45 if {$command != {}} {
46 puts {}
47 puts $command
48 }
49 puts {}
50 }
51
52 close $fid
53}
54
55proc dictDeps {dictPrefix args} {
56
57 global prefix suffix srcSuf objSuf pcmSuf
58
59 set dict [lsort [eval glob -nocomplain $args]]
60
61 set dictSrcFiles {}
62 set dictObjFiles {}
63
64 foreach fileName $dict {
65 regsub {LinkDef\.h} $fileName {Dict} dictName
66 set dictName $prefix$dictName
67
68 lappend dictSrcFiles $dictName$srcSuf
69 lappend dictObjFiles $dictName$objSuf
70 lappend dictPcmFiles [file tail $dictName$pcmSuf]
71
72 dependencies $fileName "$dictName$srcSuf:$suffix$fileName"
73
74 puts -nonewline $dictName$pcmSuf:$suffix
75 puts -nonewline $dictName$srcSuf
76 puts {}
77
78 puts -nonewline [file tail $dictName$pcmSuf]:$suffix
79 puts -nonewline $dictName$pcmSuf
80 puts {}
81 }
82
83 puts -nonewline "${dictPrefix}_OBJ += $suffix"
84 puts [join $dictObjFiles $suffix]
85 puts {}
86
87 puts -nonewline "${dictPrefix}_PCM += $suffix"
88 puts [join $dictPcmFiles $suffix]
89 puts {}
90}
91
92proc sourceDeps {srcPrefix args} {
93
94 global prefix suffix srcSuf objSuf
95
96 set source [lsort [eval glob -nocomplain $args]]
97
98 set srcObjFiles {}
99 set srcObjFilesFastJet {}
100 set srcObjFilesPythia8 {}
101
102 foreach fileName $source {
103 regsub {\.cc} $fileName {} srcName
104 set srcObjName $prefix$srcName
105
106 if {$fileName == "modules/PileUpMergerPythia8.cc"} {
107 lappend srcObjFilesPythia8 $srcObjName$objSuf
108 } elseif {([string match {modules/FastJet*.cc} $fileName] || [string match {modules/RunPUPPI.cc} $fileName]) && $srcPrefix != {FASTJET}} {
109 continue
110 } else {
111 lappend srcObjFiles $srcObjName$objSuf
112 }
113
114 dependencies $fileName "$srcObjName$objSuf:$suffix$srcName$srcSuf"
115 }
116
117 puts -nonewline "${srcPrefix}_OBJ += $suffix"
118 puts [join $srcObjFiles $suffix]
119 puts {}
120
121 puts {ifeq ($(HAS_PYTHIA8),true)}
122 puts -nonewline "${srcPrefix}_OBJ += $suffix"
123 puts [join $srcObjFilesPythia8 $suffix]
124 puts {endif}
125 puts {}
126}
127
128proc tclDeps {} {
129
130 global prefix suffix srcSuf objSuf
131
132 set source [lsort [glob -nocomplain {external/tcl/*.c}]]
133
134 set srcObjFiles {}
135
136 foreach fileName $source {
137 if {$fileName == "tcl/tclc.c" || $fileName == "tcl/tcl.c"} continue
138
139 regsub {\.c} $fileName {} srcName
140 set srcObjName $prefix$srcName
141
142 lappend srcObjFiles $srcObjName$objSuf
143
144 dependencies $fileName "$srcObjName$objSuf:$suffix$fileName"
145 }
146
147 puts -nonewline "TCL_OBJ += $suffix"
148 puts [join $srcObjFiles $suffix]
149 puts {}
150}
151
152proc executableDeps {args} {
153
154 global prefix suffix objSuf exeSuf
155
156 set executable [lsort [eval glob -nocomplain $args]]
157
158 set exeFiles {}
159
160 foreach fileName $executable {
161 regsub {\.cpp} $fileName {} exeObjName
162 set exeObjName $prefix$exeObjName
163 set exeName [file tail $exeObjName]
164
165 lappend exeFiles $exeName$exeSuf
166 lappend exeObjFiles $exeObjName$objSuf
167
168 puts "$exeName$exeSuf:$suffix$exeObjName$objSuf"
169 puts {}
170
171 dependencies $fileName "$exeObjName$objSuf:$suffix$fileName"
172 }
173
174 if [info exists exeFiles] {
175 puts -nonewline "EXECUTABLE += $suffix"
176 puts [join $exeFiles $suffix]
177 puts {}
178 }
179 if [info exists exeObjFiles] {
180 puts -nonewline "EXECUTABLE_OBJ += $suffix"
181 puts [join $exeObjFiles $suffix]
182 puts {}
183 }
184}
185
186proc headerDeps {} {
187 global suffix headerFiles
188
189 foreach fileName [array names headerFiles] {
190 dependencies $fileName "$fileName:" 0 "\t@touch \$@"
191 }
192}
193
194puts {
195#
196# Makefile for ExRootAnalysis
197#
198# Author: P. Demin - UCL, Louvain-la-Neuve
199#
200# multi-platform configuration is taken from ROOT (root/test/Makefile.arch)
201#
202
203include doc/Makefile.arch
204
205ROOT_MAJOR := $(shell $(RC) --version | cut -d'.' -f1)
206
207SrcSuf = cc
208PcmSuf = _rdict.pcm
209
210CXXFLAGS += $(ROOTCFLAGS) -Wno-write-strings -D_FILE_OFFSET_BITS=64 -DDROP_CGAL -I. -Iexternal -Iexternal/tcl
211DELPHES_LIBS = $(shell $(RC) --libs) -lEG $(SYSLIBS)
212DISPLAY_LIBS = $(shell $(RC) --evelibs) -lGuiHtml $(SYSLIBS)
213
214ifneq ($(CMSSW_FWLITE_INCLUDE_PATH),)
215HAS_CMSSW = true
216CXXFLAGS += -std=c++0x -I$(subst :, -I,$(CMSSW_FWLITE_INCLUDE_PATH))
217OPT_LIBS += -L$(subst include,lib,$(subst :, -L,$(CMSSW_FWLITE_INCLUDE_PATH)))
218ifneq ($(CMSSW_RELEASE_BASE),)
219CXXFLAGS += -I$(CMSSW_RELEASE_BASE)/src
220endif
221ifneq ($(LD_LIBRARY_PATH),)
222OPT_LIBS += -L$(subst include,lib,$(subst :, -L,$(LD_LIBRARY_PATH)))
223endif
224OPT_LIBS += -lGenVector -lFWCoreFWLite -lDataFormatsFWLite -lDataFormatsCommon -lDataFormatsPatCandidates -lDataFormatsLuminosity -lSimDataFormatsGeneratorProducts -lCommonToolsUtils -lDataFormatsCommon
225endif
226
227# check consistency
228ifneq ($(PROMC),)
229ifneq ($(PROIO),)
230$(error Attention: PROMC and PROIO env. variables are set simultaneously. You cannot compile ProMC and ProIO readers in one compilation process due to an inconsistency in protocol buffers libraries. The suggestion is to compile these two readers in two steps. First unset PROIO variable and then \"configure; make\". After this, unset PROMC, set PROIO, and run \"configure; make\". During runs, make sure shared libraries are set correctly.)
231endif
232endif
233
234ifneq ($(PROMC),)
235HAS_PROMC = true
236$(info ProMC event reader is requested)
237CXXFLAGS += -I$(PROMC)/include -I$(PROMC)/src
238OPT_LIBS += -L$(PROMC)/lib -lpromc -lprotoc -lprotobuf -lprotobuf-lite -lcbook -lz
239endif
240
241ifneq ($(PROIO),)
242HAS_PROIO = true
243$(info ProIO reader is requested)
244ifeq ($(PROTOBUF),)
245$(error but PROTOBUF variable is not set.)
246endif
247PROTOBUF_FILE=$(PROTOBUF)/lib/libprotobuf.a
248ifeq ("$(wildcard $(PROTOBUF_FILE))","")
249$(error PROTOBUF variable is set, but it does not point to valid $(PROTOBUF_FILE))
250endif
251ifeq ($(LZ4),)
252$(error but LZ4 variable is not set.)
253endif
254LZ4_FILE=$(LZ4)/lib/liblz4.so
255ifeq ("$(wildcard $(LZ4_FILE))","")
256$(error LZ4 variable is set, but it does not point to valid $(LZ4_FILE))
257endif
258CXXFLAGS += -I$(PROIO)/include -I$(PROTOBUF)/include -I$(LZ4)/include -I$(PROIO)/src
259OPT_LIBS += -L$(PROTOBUF)/lib -lprotobuf -L$(PROIO)/lib -lproio -lproio.pb -lz -L$(LZ4)/lib -llz4
260endif
261
262ifeq ($(HAS_PYTHIA8),true)
263ifneq ($(PYTHIA8),)
264CXXFLAGS += -I$(PYTHIA8)/include
265CXXFLAGS += -I$(PYTHIA8)/include/Pythia8
266OPT_LIBS += -L$(PYTHIA8)/lib -lpythia8 -ldl -lz
267endif
268endif
269
270DELPHES_LIBS += $(OPT_LIBS)
271DISPLAY_LIBS += $(OPT_LIBS)
272
273###
274
275NOFASTJET = libDelphesNoFastJet.$(DllSuf)
276NOFASTJETLIB = libDelphesNoFastJet.lib
277
278DELPHES = libDelphes.$(DllSuf)
279DELPHESLIB = libDelphes.lib
280
281DISPLAY = libDelphesDisplay.$(DllSuf)
282DISPLAYLIB = libDelphesDisplay.lib
283
284VERSION = $(shell cat VERSION)
285DISTDIR = Delphes-$(VERSION)
286DISTTAR = $(DISTDIR).tar.gz
287
288all:
289
290}
291
292executableDeps {converters/*.cpp} {examples/*.cpp} {validation/*.cpp}
293
294executableDeps {readers/DelphesHepMC.cpp} {readers/DelphesLHEF.cpp} {readers/DelphesSTDHEP.cpp} {readers/DelphesROOT.cpp}
295
296puts {ifeq ($(HAS_CMSSW),true)}
297executableDeps {readers/DelphesCMSFWLite.cpp}
298puts {endif}
299puts {}
300
301puts {ifeq ($(HAS_PROMC),true)}
302executableDeps {readers/DelphesProMC.cpp}
303puts {endif}
304puts {}
305
306puts {ifeq ($(HAS_PROIO),true)}
307executableDeps {readers/DelphesProIO.cpp}
308puts {endif}
309puts {}
310
311puts {ifeq ($(HAS_PYTHIA8),true)}
312executableDeps {readers/DelphesPythia8.cpp}
313dictDeps {DELPHES_DICT} {modules/Pythia8LinkDef.h}
314puts {endif}
315puts {}
316
317dictDeps {DELPHES_DICT} {classes/ClassesLinkDef.h} {modules/ModulesLinkDef.h} {external/ExRootAnalysis/ExRootAnalysisLinkDef.h}
318
319dictDeps {FASTJET_DICT} {modules/FastJetLinkDef.h}
320
321dictDeps {DISPLAY_DICT} {display/DisplayLinkDef.h}
322
323sourceDeps {DELPHES} {classes/*.cc} {modules/*.cc} {external/ExRootAnalysis/*.cc} {external/Hector/*.cc}
324
325sourceDeps {FASTJET} {modules/FastJet*.cc} {modules/RunPUPPI.cc} {external/PUPPI/*.cc} {external/fastjet/*.cc} {external/fastjet/tools/*.cc} {external/fastjet/plugins/*/*.cc} {external/fastjet/contribs/*/*.cc}
326
327sourceDeps {DISPLAY} {display/*.cc}
328
329tclDeps
330
331headerDeps
332
333puts {
334
335###
336
337ifeq ($(ROOT_MAJOR),6)
338all: $(NOFASTJET) $(DELPHES) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(EXECUTABLE)
339display: $(DISPLAY) $(DISPLAY_DICT_PCM)
340else
341all: $(NOFASTJET) $(DELPHES) $(EXECUTABLE)
342display: $(DISPLAY)
343endif
344
345$(NOFASTJET): $(DELPHES_DICT_OBJ) $(DELPHES_OBJ) $(TCL_OBJ)
346 @mkdir -p $(@D)
347 @echo ">> Building $@"
348ifeq ($(ARCH),aix5)
349 @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
350else
351ifeq ($(PLATFORM),macosx)
352# We need to make both the .dylib and the .so
353 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
354ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
355ifeq ($(MACOSX_MINOR),4)
356 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
357endif
358endif
359else
360ifeq ($(PLATFORM),win32)
361 @bindexplib $* $^ > $*.def
362 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(NOFASTJETLIB)
363 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
364 @$(MT_DLL)
365else
366 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
367 @$(MT_DLL)
368endif
369endif
370endif
371
372$(DELPHES): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
373 @mkdir -p $(@D)
374 @echo ">> Building $@"
375ifeq ($(ARCH),aix5)
376 @$(MAKESHARED) $(OutPutOpt) $@ $(DELPHES_LIBS) -p 0 $^
377else
378ifeq ($(PLATFORM),macosx)
379# We need to make both the .dylib and the .so
380 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
381ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
382ifeq ($(MACOSX_MINOR),4)
383 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
384endif
385endif
386else
387ifeq ($(PLATFORM),win32)
388 @bindexplib $* $^ > $*.def
389 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DELPHESLIB)
390 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DELPHES_LIBS) $(OutPutOpt)$@
391 @$(MT_DLL)
392else
393 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DELPHES_LIBS)
394 @$(MT_DLL)
395endif
396endif
397endif
398
399$(DISPLAY): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ)
400 @mkdir -p $(@D)
401 @echo ">> Building $@"
402ifeq ($(ARCH),aix5)
403 @$(MAKESHARED) $(OutPutOpt) $@ $(DISPLAY_LIBS) -p 0 $^
404else
405ifeq ($(PLATFORM),macosx)
406# We need to make both the .dylib and the .so
407 @$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
408ifneq ($(subst $(MACOSX_MINOR),,1234),1234)
409ifeq ($(MACOSX_MINOR),4)
410 @ln -sf $@ $(subst .$(DllSuf),.so,$@)
411endif
412endif
413else
414ifeq ($(PLATFORM),win32)
415 @bindexplib $* $^ > $*.def
416 @lib -nologo -MACHINE:IX86 $^ -def:$*.def $(OutPutOpt)$(DISPLAYLIB)
417 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(DISPLAY_LIBS) $(OutPutOpt)$@
418 @$(MT_DLL)
419else
420 @$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(DISPLAY_LIBS)
421 @$(MT_DLL)
422endif
423endif
424endif
425
426clean:
427 @rm -f $(DELPHES_DICT_OBJ) $(DISPLAY_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(DISPLAY_OBJ) $(TCL_OBJ) core
428 @rm -rf tmp
429
430distclean: clean
431 @rm -f $(NOFASTJET) $(NOFASTJETLIB) $(DELPHES) $(DELPHESLIB) $(DELPHES_DICT_PCM) $(FASTJET_DICT_PCM) $(DISPLAY) $(DISPLAYLIB) $(DISPLAY_DICT_PCM) $(EXECUTABLE)
432
433dist:
434 @echo ">> Building $(DISTTAR)"
435 @mkdir -p $(DISTDIR)
436 @cp -a AUTHORS CHANGELOG CMakeLists.txt COPYING DelphesEnv.sh LICENSE NOTICE README README_4LHCb VERSION Makefile MinBias.pileup configure cards classes converters display doc examples external modules python readers validation $(DISTDIR)
437 @find $(DISTDIR) -depth -name .\* -exec rm -rf {} \;
438 @tar -czf $(DISTTAR) $(DISTDIR)
439 @rm -rf $(DISTDIR)
440
441###
442
443.SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf) $(PcmSuf)
444
445%Dict.$(SrcSuf):
446 @mkdir -p $(@D)
447 @echo ">> Generating $@"
448 @rootcint -f $@ -c -Iexternal $<
449 @mv $@ $@.base
450 @cat $< $@.base > $@
451 @rm $@.base
452
453$(DELPHES_DICT_PCM): %Dict$(PcmSuf):
454 @echo ">> Copying $@"
455 @cp $< $@
456
457$(FASTJET_DICT_PCM): %Dict$(PcmSuf):
458 @echo ">> Copying $@"
459 @cp $< $@
460
461$(DISPLAY_DICT_PCM): %Dict$(PcmSuf):
462 @echo ">> Copying $@"
463 @cp $< $@
464
465$(DELPHES_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
466 @mkdir -p $(@D)
467 @echo ">> Compiling $<"
468 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
469
470$(FASTJET_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
471 @mkdir -p $(@D)
472 @echo ">> Compiling $<"
473 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
474
475$(DISPLAY_OBJ): tmp/%.$(ObjSuf): %.$(SrcSuf)
476 @mkdir -p $(@D)
477 @echo ">> Compiling $<"
478 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
479
480$(DELPHES_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
481 @mkdir -p $(@D)
482 @echo ">> Compiling $<"
483 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
484
485$(FASTJET_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
486 @mkdir -p $(@D)
487 @echo ">> Compiling $<"
488 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
489
490$(DISPLAY_DICT_OBJ): %.$(ObjSuf): %.$(SrcSuf)
491 @mkdir -p $(@D)
492 @echo ">> Compiling $<"
493 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
494
495$(TCL_OBJ): tmp/%.$(ObjSuf): %.c
496 @mkdir -p $(@D)
497 @echo ">> Compiling $<"
498 @$(CC) $(patsubst -std=%,,$(CXXFLAGS)) -c $< $(OutPutOpt)$@
499
500$(EXECUTABLE_OBJ): tmp/%.$(ObjSuf): %.cpp
501 @mkdir -p $(@D)
502 @echo ">> Compiling $<"
503 @$(CXX) $(CXXFLAGS) -c $< $(OutPutOpt)$@
504
505$(EXECUTABLE): %$(ExeSuf): $(DELPHES_DICT_OBJ) $(FASTJET_DICT_OBJ) $(DELPHES_OBJ) $(FASTJET_OBJ) $(TCL_OBJ)
506 @echo ">> Building $@"
507 @$(LD) $(LDFLAGS) $^ $(DELPHES_LIBS) $(OutPutOpt)$@
508
509###
510
511}
Note: See TracBrowser for help on using the repository browser.