]> git.uio.no Git - u/mrichter/AliRoot.git/blob - cmake/CMakeDA.cmake
ALIROOT-5492 Add field to separate HG and LG digits
[u/mrichter/AliRoot.git] / cmake / CMakeDA.cmake
1 #--------------------------------------------------------------------
2 # CMakeDA.cmake file for AliRoot Build System
3 #
4 # Author: Anshul Goel (anshul.goel@cern.ch)
5 #         Port of previous Makefile build to DAQ targets and RPM
6 #
7
8 cmake_minimum_required(VERSION 2.8.4 FATAL_ERROR)
9
10 # -----------Utilities--------------------
11
12 #list of detectors 
13 #set(ONLINEDETECTORS T00)
14 set(ONLINEDETECTORS SPD SDD SSD ACO GRP TST HLT EMC TRI T00 PMD CPV PHS FMD TPC TRD ZDC V00 MTR MCH HMP TOF)
15 function(expand output input)
16     string(REGEX MATCH "\\\${[^}]*}" m "${input}")
17     while(m)
18         string(REGEX REPLACE "\\\${(.*)}" "\\1" v "${m}")
19         string(REPLACE "\${${v}}" "${${v}}" input "${input}")
20         string(REGEX MATCH "\\\${[^}]*}" m "${input}")
21     endwhile()
22     set("${output}" "${input}" PARENT_SCOPE)
23 endfunction()
24
25 #function to get module for detector
26 function (detector_module _module detector)
27   #Map of online detectors to DA in pairs of ONLINEDETECTORNAME DAMODULE
28   set (DETECTORMODULEMAP SPD ITS SDD ITS SSD ITS HMP HMPID PHS PHOS CPV PHOS MCH MUON MTR MUON T00 T0 V00 VZERO ACO ACORDE EMC EMCAL)
29   list(FIND DETECTORMODULEMAP ${detector} _index)
30   if(_index STREQUAL "-1")
31     set(${_module} "${detector}" PARENT_SCOPE)
32   else()
33     math(EXPR _index "${_index}+1")
34     list(GET DETECTORMODULEMAP ${_index} _index)
35     set(${_module} ${_index} PARENT_SCOPE)
36   endif(_index STREQUAL "-1")
37 endfunction()
38
39 #function to get subDA for detector
40 function (detector_subda _subda detector)
41   #Map of online detectors to SUBDAMODULE in pairs of ONLINEDETECTORNAME SUBDAMODULE
42   set (DETECTORSUBDAMAP SPD SPD SDD SDD SSD SSD CPV CPV MCH TRK MTR TRG)
43   list(FIND DETECTORSUBDAMAP ${detector} _index)
44   if(_index STREQUAL "-1")
45     set(${_subda} "" PARENT_SCOPE)
46   else()
47     math(EXPR _index "${_index}+1")
48     list(GET DETECTORSUBDAMAP ${_index} _index)
49     set(${_subda} ${_index} PARENT_SCOPE)
50   endif(_index STREQUAL "-1")
51 endfunction()
52
53 #function to extract info
54 function (getinfo _info pattern file)
55   string(REGEX MATCH "${pattern}:[^\n]*" _match ${file})
56   if(_match)
57     string(REGEX REPLACE "${pattern}:[ ]*" "" _data ${_match})
58     string(REPLACE "(" "\\(" _data "${_data}")
59     string(REPLACE ")" "\\)" _data "${_data}")
60     string(REPLACE "<" "\\<" _data "${_data}")
61     string(REPLACE ">" "\\>" _data "${_data}")
62   endif(_match)
63   set(${_info} ${_data} PARENT_SCOPE)
64 endfunction()
65
66
67 foreach(oldetect ${ONLINEDETECTORS})
68 detector_module(h_module ${oldetect})
69   list(APPEND mod "-I${CMAKE_SOURCE_DIR}/${h_module}")
70 endforeach(oldetect ${ONLINEDETECTORS})
71 list(APPEND mod "-I${CMAKE_SOURCE_DIR}/include" "-I${CMAKE_SOURCE_DIR}/STEER" "-I${CMAKE_SOURCE_DIR}/ANALYSIS" "-I${CMAKE_SOURCE_DIR}/RAW" "-I${CMAKE_SOURCE_DIR}/STEER/STEER" "-I${CMAKE_SOURCE_DIR}/STEER/CDB" "-I${ROOTINCDIR}" "-I${CMAKE_SOURCE_DIR}/STEER/STEERBase" "-I${CMAKE_SOURCE_DIR}/STEER/AOD" "-I${CMAKE_SOURCE_DIR}/STEER/ESD" "-I${CMAKE_SOURCE_DIR}/MUON/mapping" "-I${CMAKE_SOURCE_DIR}/TPC/Base" "-I$ENV{AMORE}/include/amore")
72
73 # ----------Common stuff-------------------
74
75 #file(GLOB_RECURSE _dafiles $ENV{ALICE_ROOT}/*da.cxx)
76 file(GLOB_RECURSE _dafiles ${CMAKE_SOURCE_DIR}/*da.cxx)
77
78 set (DAINSTALL "$ENV{ALICE_INSTALL}/DA")
79 if(DAINSTALL STREQUAL "/DA") 
80   set(DAINSTALL "$ENV{ALICE_ROOT}/DA")
81 endif(DAINSTALL STREQUAL "/DA")
82
83
84 file(MAKE_DIRECTORY ${DAINSTALL})
85
86 string (REPLACE "-pedantic-errors" "" CXXFLAGS ${CXXFLAGS})
87
88 find_program(XML2 xml2-config)
89
90 if(AMORE_FOUND)
91   #Set compiler flags
92   set(CXXFLAGS "${CXXFLAGS} ${AMOREFLAGS}")
93   set(CFLAGS "${CFLAGS} ${AMOREFLAGS}")
94   set(CINTFLAGS "${CINTFLAGS} ${AMOREFLAGS}")
95 else()
96   set(AMORELIBS)
97 endif(AMORE_FOUND)
98
99 execute_process(COMMAND ${XML2} --libs OUTPUT_VARIABLE _xml2libs OUTPUT_STRIP_TRAILING_WHITESPACE)
100 execute_process(COMMAND ${DATE_CONFIG} --monitorlibs=noshift OUTPUT_VARIABLE MONITORLIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
101 execute_process(COMMAND $ENV{AMORE}/bin/amore-config --ldflags-da-static OUTPUT_VARIABLE _amore1 OUTPUT_STRIP_TRAILING_WHITESPACE)
102 execute_process(COMMAND $ENV{AMORE}/bin/amore-config --auxlibs  OUTPUT_VARIABLE _amore3 OUTPUT_STRIP_TRAILING_WHITESPACE)
103 execute_process(COMMAND date-config --rcproxylibs OUTPUT_VARIABLE _amore2 OUTPUT_STRIP_TRAILING_WHITESPACE)
104 execute_process(COMMAND date-config --monitorlibs=noshift OUTPUT_VARIABLE _monitor1 OUTPUT_STRIP_TRAILING_WHITESPACE)
105 string(REPLACE "\n" " " _amore1 "${_amore1}") 
106 set(AMOREDALIBS " ${_amore1} ${_amore2}")
107 set(AMOREDADLIBS " ${_amore3} ${_amore2}")
108 set(MONITORLIBS "${_monitor1} -lssl")
109 separate_arguments(MONITORLIBS)
110 separate_arguments(AMOREDALIBS)
111 separate_arguments(AMOREDADLIBS)
112 set(SYSLIBS -ldl -lpthread ${_xml2libs})
113 set(DATE_CFLAGS "${DATEFLAGS}")
114 separate_arguments(DATE_CFLAGS)
115 set(ROOTDLIBS "${ROOTCLIBS} -lRMySQL")
116 separate_arguments(ROOTDLIBS)
117
118 set(EXTRAROOTLIB "libRootExtra.a")
119 set(ROOTLIB "RootExtra")
120 file(GLOB _extraroot "$ENV{ROOTSYS}/montercarlo/vmc/src/*.o" "$ENV{ROOTSYS}/tree/treeplayer/src/*.o" "$ENV{ROOTSYS}/io/xmlparser/src/*.o" "$ENV{ROOTSYS}/math/minuit2/src/*.o")
121
122 add_library(${ROOTLIB} STATIC ${_extraroot})      
123 set_target_properties(${ROOTLIB} PROPERTIES LINKER_LANGUAGE CXX)
124
125 set(DAQDALIB_PATH $ENV{DAQDALIB_PATH})  
126 if(DAQDALIB_PATH)
127   set(DAQDADIR "${DAQDALIB_PATH}")
128 else()
129   set(DAQDADIR "$ENV{ALICE}/daqDAlib")
130 endif(DAQDALIB_PATH)
131 set(DAQDALIB "${DAQDADIR}/libdaqDA.a")
132
133 include_directories(${DAQDADIR} ${CMAKE_SOURCE_DIR}/RAW ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/STEER)
134 include_directories(SYSTEM ${ROOTINCDIR})
135
136 # ----------Create All Valid targets---------
137           
138 foreach(detector ${ONLINEDETECTORS} )
139
140   set(ONLINEDETECTORNAME ${detector})
141
142   detector_module(DAMODULE ${ONLINEDETECTORNAME})
143
144   detector_subda(SUBDAMODULE ${ONLINEDETECTORNAME})
145   
146   #ALIROOTALIBS
147
148   set(ALIROOTALIBS)
149   set(ALIROOTDLIBS)
150         set(BASIC_TARGET "daqDA-${ONLINEDETECTORNAME}-all")
151         add_custom_target(${BASIC_TARGET}
152         WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
153         ) 
154         set(BASIC_RPM "daqDA-${ONLINEDETECTORNAME}-all-rpm")
155         add_custom_target(${BASIC_RPM}
156         WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
157         )
158  list(APPEND ALIROOTALIBS RAWDatabase-static RAWDatarec-static RAWDatasim-static STEERBase-static STEER-static CDB-static ESD-static STAT-static AOD-static ANALYSIS-static ANALYSISalice-static )
159   list(APPEND ALIROOTDLIBS -lRAWDatabase -lRAWDatarec -lRAWDatasim -lSTEERBase -lSTEER -lCDB -lESD -lSTAT -lAOD -lANALYSIS -lANALYSISalice )
160
161   expand(ALIROOTALIBS2 "\${${DAMODULE}ALIBS}")
162   expand(ALIROOTDLIBS2 "\${${DAMODULE}LIBS}")
163   expand(DAINCDIRS "\${${DAMODULE}INC}")
164   list(APPEND ALIROOTALIBS ${ALIROOTALIBS2})
165   foreach (detlib ${ALIROOTDLIBS2}) 
166     list(APPEND ALIROOTDLIBS "-l${detlib}")
167   endforeach(detlib ${ALIROOTDLIBS2})  
168   # list(APPEND ALIROOTDLIBS ${ALIROOTDLIBS2})
169   
170   include_directories(${DAMODULE} ${SUBDIR} ${DAINCDIRS})
171 #Get detector algorithms for this detector
172   foreach(dafile ${_dafiles})
173
174     string(REGEX MATCH "${CMAKE_SOURCE_DIR}/${DAMODULE}/${DAMODULE}${SUBDAMODULE}" match ${dafile})
175 #Found a valid target name
176         if(match)
177       string(REGEX REPLACE "${CMAKE_SOURCE_DIR}/${DAMODULE}/${DAMODULE}${SUBDAMODULE}(.*)da\\.cxx" "\\1" DANAME ${dafile})
178 #Check for default DA 
179           if(DANAME)
180             set(DATARGETNAME "daqDA-${ONLINEDETECTORNAME}-${DANAME}")
181         else()
182             set(DATARGETNAME "daqDA-${ONLINEDETECTORNAME}")
183           endif(DANAME)
184         add_dependencies(${BASIC_TARGET} ${DATARGETNAME})  
185         add_dependencies(${BASIC_RPM} ${DATARGETNAME}-rpm) 
186         set(DATARGETDIR "${DAINSTALL}/${DAMODULE}/tgt_$ENV{ALICE_TARGET}")
187         file(MAKE_DIRECTORY ${DATARGETDIR})
188         set(DAOBJ "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.o")
189         set(DASRC "${DAMODULE}/${DAMODULE}${SUBDAMODULE}${DANAME}da.cxx")
190         set(DALIB "${DAMODULE}${SUBDAMODULE}${DANAME}DA")
191         set(DAEXE "${DAMODULE}${SUBDAMODULE}${DANAME}da.exe")
192         set(DADEP "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.d") 
193
194         # DAVERSION
195         # execute_process(COMMAND svn info ${CMAKE_SOURCE_DIR}/${DASRC} OUTPUT_VARIABLE _daversion OUTPUT_STRIP_TRAILING_WHITESPACE)
196         # string(REGEX REPLACE ".*Last Changed Rev: ([^\n]+)\n.*" "\\1" DAVERSION ${_daversion}e)
197         execute_process(COMMAND git log -1 --format=%h ${DASRC} 
198           WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
199           OUTPUT_STRIP_TRAILING_WHITESPACE
200           OUTPUT_VARIABLE DAVERSION)
201
202         #DAREVISION
203         # execute_process(COMMAND svn info ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE _darevision OUTPUT_STRIP_TRAILING_WHITESPACE)
204         # string(REGEX REPLACE ".*Revision: ([^\n]+)\n.*" "\\1" DAREVISION ${_darevision})
205         execute_process(COMMAND git log -1 --format=%h ${DASRC}
206           WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
207           OUTPUT_STRIP_TRAILING_WHITESPACE
208           OUTPUT_VARIABLE DAREVISION)
209
210         # DAROOTRELEASE 
211           execute_process(COMMAND root-config --version OUTPUT_VARIABLE _darootrelease OUTPUT_STRIP_TRAILING_WHITESPACE)
212           string(REGEX REPLACE "/" "." DAROOTRELEASE ${_darootrelease})
213         
214         # DAALIROOTRELEASE
215         # string(REGEX REPLACE ".*URL: .*/(.+)/${DASRC}.*$" "\\1" DAALIROOTRELEASE ${_daversion})
216         # string (REPLACE "-" "." DAALIROOTRELEASE "${DAALIROOTRELEASE}")
217         execute_process(COMMAND git branch
218           WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
219           OUTPUT_STRIP_TRAILING_WHITESPACE
220           OUTPUT_VARIABLE DAALIROOTRELEASE)
221         string (REPLACE "* " "" DAALIROOTRELEASE "${DAALIROOTRELEASE}")
222         
223           set(DAARCNAME "${DATARGETNAME}")
224           #string(REPLACE "-" "" DAARCNAME "${DAARCNAME}")
225           set(DAARC "${DAARCNAME}-${DAVERSION}")
226           set(DATAR "${DATARGETDIR}/${DAARC}.src.tar.gz")
227           set(DASPECFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.spec")
228           set(DAMAKEFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.make")
229
230   
231       file(READ "${CMAKE_SOURCE_DIR}/${DASRC}" _dasrc)
232           getinfo(DACONTACT "Contact" ${_dasrc})
233           getinfo(DALINKPAGE "Link" ${_dasrc})
234           getinfo(DAREFRUN "Reference Run" ${_dasrc})
235           getinfo(DARUNTYPE "Run Type" ${_dasrc})
236           getinfo(DATYPE "DA Type" ${_dasrc})
237           getinfo(DANUMBEROFEVENTS "Number of events needed" ${_dasrc})
238           getinfo(DAINPUTFILES "Input Files" ${_dasrc})
239           getinfo(DAOUTPUTFILES "Output Files" ${_dasrc})
240           getinfo(DATRIGGERTYPE "Trigger types used" ${_dasrc})
241
242           if(NOT _dasrc)
243            message(FATAL_ERROR "SRC FILE MISSING")
244           endif(NOT _dasrc)
245
246 #----------- Targets ----------------------
247
248           set(CMAKE_CXX_FLAGS "${CXXFLAGS}")
249           set(CMAKE_C_FLAGS "${CFLAGS}")
250           set(CMAKE_Fortran_FLAGS ${FFLAGS})
251           set(CMAKE_SHARED_LINKER_FLAGS ${SOFLAGS}) 
252           set(CMAKE_MODULE_LINKER_FLAGS ${LDFLAGS})
253
254 add_dependencies(DA-all ${DATARGETNAME})
255 add_custom_target(${DATARGETNAME}
256 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
257 )
258 add_dependencies(${DATARGETNAME} ${DAEXE})
259
260 set(ZIP)
261 foreach(_lib ${ALIROOTALIBS})
262 string(REGEX REPLACE "-static" "" _lib ${_lib})
263 list(APPEND ZIP && ar x "../lib${_lib}.a")
264 endforeach(_lib)
265 list (APPEND ZIP && ar r "../lib${DALIB}.a" "*.o")
266
267 add_custom_target(${DALIB}.a
268 COMMAND rm -rf junk${DAEXE} && mkdir -p junk${DAEXE}
269 COMMAND cd junk${DAEXE} ${ZIP}
270 COMMAND cd ../ && rm -rf junk${DAEXE}
271 DEPENDS ${ALIROOTALIBS} 
272 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} 
273 )
274
275 add_custom_command(
276 TARGET ${DATARGETNAME}-clean
277 COMMAND echo "***** Cleaning ${DAMODULE} ${SUBDAMODULE} ${DANAME} detector-algorithm *****"
278 COMMAND rm -f ${DASPECFILE}
279 COMMAND rm -f ${DATAR}
280 COMMAND rm -f ${DAEXE}
281 COMMAND rm -f ${DAOBJ}
282 COMMAND rm -f ${DADEP}
283 COMMAND rm -f ${DAMAKEFILE}
284 COMMAND rm -f ${DALIB}.a
285 COMMAND rm -f ${ALIROOTALIBS}
286 COMMAND rm -f ${EXTRAROOTLIB}
287 )
288
289 separate_arguments(SYSLIBS)
290 #execute_process(COMMAND ${AMORE}/amore-config --ldflags-da-static | tr "\n" " "  OUTPUT_VARIABLE _amore1 OUTPUT_STRIP_TRAILING_WHITESPACE)
291 #execute_process(COMMAND date-config --rcproxylibs OUTPUT_VARIABLE _amore2 OUTPUT_STRIP_TRAILING_WHITESPACE)
292 #execute_process(COMMAND date-config --monitorlibs=noshift OUTPUT_VARIABLE _monitor1 OUTPUT_STRIP_TRAILING_WHITESPACE)
293   
294 #set(AMOREDALIBS "-static ${_amore1} ${_amore2}\\")
295 #set(MONITORLIBS "${_monitor1}\\")
296
297 add_custom_target(DAMAKEFILE_${DAEXE}_)
298 add_custom_command( 
299 TARGET DAMAKEFILE_${DAEXE}_
300 COMMAND rm -f ${DAMAKEFILE}
301 COMMAND @echo "***** Making makefile ${DAMAKEFILE} *****"
302 COMMAND @echo '\#***************************************************' >> ${DAMAKEFILE}
303 COMMAND @echo '\# Makefile for Detector Algorithm' >> ${DAMAKEFILE}
304 COMMAND @echo '\#' >> ${DAMAKEFILE}
305 COMMAND @echo '\# It is necessary to setup build environment before' >> ${DAMAKEFILE}
306 COMMAND @echo '\# using make:' >> ${DAMAKEFILE}
307 COMMAND @echo '\# - define path to daqDAlib \(env. DAQDALIB_PATH\)' >> ${DAMAKEFILE}
308 COMMAND @echo '\#' >> ${DAMAKEFILE}
309 COMMAND @echo '\#*****************************************************' >> ${DAMAKEFILE}
310 COMMAND @echo "" >> ${DAMAKEFILE}
311 COMMAND @echo "CXX=g++" >> ${DAMAKEFILE}
312 COMMAND @echo "LD=g++" >> ${DAMAKEFILE}
313 COMMAND @echo "" >> ${DAMAKEFILE}
314 COMMAND @echo "CXXFLAGS=${CXXFLAGS}" >> ${DAMAKEFILE}
315 COMMAND @echo "LDFLAGS=${LDFLAGS}" >> ${DAMAKEFILE}
316 COMMAND @echo "" >> ${DAMAKEFILE}
317 COMMAND @echo 'ifeq \($$\(DAQDALIB_PATH\),\)' >> ${DAMAKEFILE}
318 COMMAND @echo "DAQDADIR=${ALICE}/daqDAlib" >> ${DAMAKEFILE}
319 COMMAND @echo "else" >> ${DAMAKEFILE}
320 COMMAND @echo 'DAQDADIR=$$(DAQDALIB_PATH)' >> ${DAMAKEFILE}
321 COMMAND @echo "endif" >> ${DAMAKEFILE}
322 COMMAND @echo "" >> ${DAMAKEFILE}
323 COMMAND @echo 'DAQDALIB=$$(DAQDADIR)/libdaqDA.a' >> ${DAMAKEFILE}
324 #COMMAND @echo 'AMOREDALIBS=-static $$(shell $$(AMORE)/amore-config --ldflags-da-static) $$(shell date-config --rcproxylibs)' >> ${DAMAKEFILE}
325 #COMMAND @echo 'MONITORLIBS=$$(shell date-config --monitorlibs=noshift)' >> ${DAMAKEFILE}
326 #COMMAND @echo 'AMOREDALIBS=-static ${_amore1} ${_amore2}' >> ${DAMAKEFILE}
327 #COMMAND @echo 'MONITORLIBS=${monitor1}' >> ${DAMAKEFILE}
328 COMMAND @echo "" >> ${DAMAKEFILE}
329 COMMAND @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.exe: ${DAMODULE}${SUBDAMODULE}${DANAME}da.o" >> ${DAMAKEFILE}
330 COMMAND @echo -e '\t$$(LD) $$(LDFLAGS) -o ''$$''@ ''$$''< ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${DALIB}.a ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${EXTRAROOTLIB} $$(ROOTSYS)/lib/libRoot.a $$(ROOTSYS)/lib/liblzma.a $$(ROOTSYS)/lib/libfreetype.a $$(ROOTSYS)/lib/libpcre.a ${SYSLIBS} $$(DAQDALIB) ${AMOREDALIBS} ${MONITORLIBS}' >> ${DAMAKEFILE}
331 COMMAND @echo "" >> ${DAMAKEFILE}
332 COMMAND @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.o: ${DAMODULE}${SUBDAMODULE}${DANAME}da.cxx" >> ${DAMAKEFILE}
333 COMMAND @echo -e '\t$$(CXX) -c $$(CXXFLAGS) -I$$(DAQDADIR) ${mod} ''$$''< -o ''$$''@' >> ${DAMAKEFILE}
334 COMMAND @echo "" >> ${DAMAKEFILE}
335 COMMAND @echo "clean:" >> ${DAMAKEFILE}
336 COMMAND @echo -e '\t@rm -f ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe ${DAMODULE}${SUBDAMODULE}${DANAME}da.o' >> ${DAMAKEFILE}
337 COMMAND @echo "" >> ${DAMAKEFILE}
338 COMMAND @echo "install: ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe" >> ${DAMAKEFILE}
339 COMMAND @echo -e '\tif [ $$(INSTALL_PATH) == '' ]; then \\' >> ${DAMAKEFILE}
340 COMMAND @echo -e '\techo Environment variable INSTALL_PATH undefined, cannot continue\; \\' >> ${DAMAKEFILE}
341 COMMAND @echo -e '\texit 1\; \\' >> ${DAMAKEFILE}
342 COMMAND @echo -e '\tfi' >> ${DAMAKEFILE}
343 COMMAND @echo -e '\t@cp -p ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe $$(INSTALL_PATH)' >> ${DAMAKEFILE}
344 )
345
346 add_custom_target(DATAR_${DAEXE}_)
347 add_custom_command( 
348 TARGET DATAR_${DAEXE}_
349 COMMAND @echo "***** Making archive ${DATAR} *****"
350 COMMAND rm -rf ${DATAR}
351 COMMAND rm -rf junk
352 COMMAND mkdir junk && mkdir junk/${DAARC} 
353         COMMAND cp -a ${CMAKE_SOURCE_DIR}/${DASRC} junk/${DAARC} 
354 COMMAND cp -a ${DAMAKEFILE} junk/${DAARC}/Makefile 
355 COMMAND cp -a ${DASPECFILE} junk/${DAARC}/${DAMODULE}${SUBDAMODULE}${DANAME}da.spec
356 COMMAND cd junk && tar czf ${DATAR} * 
357 COMMAND cd .. && rm -rf junk
358 )
359 add_dependencies(DATAR_${DAEXE}_ DAMAKEFILE_${DAEXE}_ DASPECFILE_${DAEXE}_ ${DASRC}) 
360
361 add_custom_target(DASPECFILE_${DAEXE}_)
362
363 add_custom_command(
364 TARGET DASPECFILE_${DAEXE}_
365 COMMAND rm -f ${DASPECFILE}
366 COMMAND @echo "***** Making RPM spec-file ${DASPECFILE} *****"
367 COMMAND @echo '\# RPM specfile for $(DAMODULE)${SUBDAMODULE}$(DANAME) Detector Algorithm' >> ${DASPECFILE}
368 COMMAND @echo "Summary: ${ONLINEDETECTORNAME} Detector Algorithm" >> ${DASPECFILE}
369 COMMAND @echo "Name: ${DAARCNAME}" >> ${DASPECFILE}
370 COMMAND @echo "Version: ${DAVERSION}" >> ${DASPECFILE}
371 COMMAND @echo "Release: ${DAALIROOTRELEASE}.${DAREVISION}" >> ${DASPECFILE}
372 COMMAND @echo "License: CERN Alice DAQ/Offine" >> ${DASPECFILE}
373 COMMAND @echo "Source: %{name}-%{version}.src.tar.gz" >> ${DASPECFILE}
374 COMMAND @echo "Group: Applications/Alice" >> ${DASPECFILE}
375 COMMAND @echo "Prefix: /opt/%{name}" >> ${DASPECFILE}
376 COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${DASPECFILE}
377 COMMAND @echo "" >> ${DASPECFILE}
378 COMMAND @echo '\# automatic dependencies' >> ${DASPECFILE}
379 COMMAND @echo "AutoReqProv: yes" >> ${DASPECFILE}
380 COMMAND @echo "" >> ${DASPECFILE}
381 COMMAND @echo '\# list here required RPM packages for compilation' >> ${DASPECFILE}
382 COMMAND @echo "BuildRequires: date" >> ${DASPECFILE} 
383 COMMAND @echo "" >> ${DASPECFILE}
384 COMMAND @echo '\# list here required RPM packages for runtime' >> ${DASPECFILE}
385 COMMAND @echo "Requires: date" >> ${DASPECFILE}
386 COMMAND @echo "" >> ${DASPECFILE}    
387 COMMAND @echo '\# You can specify other dependencies in the description tag below.' >> ${DASPECFILE}
388 COMMAND @echo "" >> ${DASPECFILE}
389 COMMAND @echo '\# description of the package' >> ${DASPECFILE}
390 COMMAND @echo "%description" >> ${DASPECFILE}
391 COMMAND @echo "This is the ${ONLINEDETECTORNAME} ${DANAME} DA for online calibration." >> ${DASPECFILE}
392 COMMAND @echo "It uses data from ${DAMODULE} detectors at run time." >> ${DASPECFILE}
393 COMMAND @echo "Build requires: daqDAlib, date, AliRoot ${DAALIROOTRELEASE},ROOT ${DAROOTRELEASE}." >> ${DASPECFILE}
394 COMMAND @echo "Runtime requires: date." >> ${DASPECFILE}
395 COMMAND @echo "Contact: ${DACONTACT}" >> ${DASPECFILE}
396 COMMAND @echo "Link: ${DALINKPAGE}" >> ${DASPECFILE}
397 COMMAND @echo "Reference Run: ${DAREFRUN}" >> ${DASPECFILE}
398 COMMAND @echo "Run type: ${DARUNTYPE}" >> ${DASPECFILE}
399 COMMAND @echo "DA type: ${DATYPE}" >> ${DASPECFILE}
400 COMMAND @echo "Number of events needed: ${DANUMBEROFEVENTS}" >> ${DASPECFILE}
401 COMMAND @echo "Input files: ${DAINPUTFILES}" >> ${DASPECFILE}
402 COMMAND @echo "Output files: ${DAOUTPUTFILES}" >> ${DASPECFILE}
403 COMMAND @echo "Trigger types used: ${DATRIGGERTYPE}" >> ${DASPECFILE}
404 COMMAND @echo "" >> ${DASPECFILE}
405 COMMAND @echo '\#*****************************************************************' >> ${DASPECFILE}
406 COMMAND @echo '\# Do not modify following scripts' >> ${DASPECFILE}
407 COMMAND @echo '\#*****************************************************************' >> ${DASPECFILE}
408 COMMAND @echo "" >> ${DASPECFILE}
409 COMMAND @echo "%define debug_package %{nil}" >> ${DASPECFILE}
410 COMMAND @echo "%define __os_install_post %{nil}" >> ${DASPECFILE}
411 COMMAND @echo "" >> ${DASPECFILE}
412 COMMAND @echo '\# here is defined the installation root directory' >> ${DASPECFILE}
413 COMMAND @echo "%define pkgname %{name}-%{version}" >> ${DASPECFILE}
414 COMMAND @echo "%define destdir %{prefix}" >> ${DASPECFILE}
415 COMMAND @echo "" >> ${DASPECFILE}
416 COMMAND @echo '\# pre-compilation script: extract from tarball' >> ${DASPECFILE}
417 COMMAND @echo "%prep" >> ${DASPECFILE}
418 COMMAND @echo '\# extract archive' >> ${DASPECFILE}
419 COMMAND @echo "%setup -n %{pkgname}" >> ${DASPECFILE}
420 COMMAND @echo "" >> ${DASPECFILE}
421 COMMAND @echo '\# compile' >> ${DASPECFILE}
422 COMMAND @echo "%build" >> ${DASPECFILE}
423 COMMAND @echo "export DATE_SITE=" >> ${DASPECFILE}
424 COMMAND @echo ". /date/setup.sh" >> ${DASPECFILE}
425 COMMAND @echo "gmake" >> ${DASPECFILE}
426 COMMAND @echo "" >> ${DASPECFILE}
427 COMMAND @echo '\# install runtime files' >> ${DASPECFILE}
428 COMMAND @echo "%install" >> ${DASPECFILE}
429 COMMAND @echo '\#remove install dir if existing' >> ${DASPECFILE}
430 COMMAND echo  '[ -d ''$$''RPM_BUILD_ROOT ] && rm -rf ''$$''RPM_BUILD_ROOT' >> ${DASPECFILE}
431 COMMAND @echo '\#make install in install root directory' >> ${DASPECFILE}
432 COMMAND @echo 'mkdir -p ''$$''RPM_BUILD_ROOT%{prefix}' >> ${DASPECFILE}
433 COMMAND @echo 'make install INSTALL_PATH=''$$''RPM_BUILD_ROOT%{prefix}' >> ${DASPECFILE}
434 COMMAND @echo "" >> ${DASPECFILE}
435 COMMAND @echo '\# clean RPM build files' >> ${DASPECFILE}
436 COMMAND @echo "%clean" >> ${DASPECFILE}
437 COMMAND @echo '\# remove installed files' >> ${DASPECFILE}
438 COMMAND @echo 'rm -rf ''$$''RPM_BUILD_ROOT' >> ${DASPECFILE}
439 COMMAND @echo '\# remove source files' >> ${DASPECFILE}
440 COMMAND @echo 'rm -rf ''$$''RPM_BUILD_DIR/%{pkgname}' >> ${DASPECFILE}
441 COMMAND @echo "" >> ${DASPECFILE}
442 COMMAND @echo '\# pre-install script' >> ${DASPECFILE}
443 COMMAND @echo "%pre" >> ${DASPECFILE}
444 COMMAND @echo "" >> ${DASPECFILE}
445 COMMAND @echo '\# list of files to be installed' >> ${DASPECFILE}
446 COMMAND @echo "%files" >> ${DASPECFILE}
447 COMMAND @echo '%defattr \(-,root,root\)' >> ${DASPECFILE}
448 COMMAND @echo "%{destdir}" >> ${DASPECFILE}
449 COMMAND @echo "" >> ${DASPECFILE}
450 COMMAND @echo '\# post-install script' >> ${DASPECFILE}
451 COMMAND @echo '\# launched after rpm installed' >> ${DASPECFILE}
452 COMMAND @echo "%post" >> ${DASPECFILE}
453 COMMAND @echo "" >> ${DASPECFILE}
454 COMMAND @echo '\# post-uninstall script' >> ${DASPECFILE}
455 COMMAND @echo '\# launched after rpm removed' >> ${DASPECFILE}
456 COMMAND @echo "%postun" >> ${DASPECFILE}
457 )
458
459
460 add_custom_target( ${DATARGETNAME}-rpm
461 )
462 add_dependencies(${DATARGETNAME}-rpm DATAR_${DAEXE}_ DASPECFILE_${DAEXE}_ ${LIBPATH} ${DALIB}.a DADEP_${DAEXE}_ ${ROOTLIB}     
463 )
464 add_custom_command(TARGET ${DATARGETNAME}-rpm
465 COMMAND mkdir -p ${CMAKE_BINARY_DIR}/junk/SOURCES ${CMAKE_BINARY_DIR}/junk/SPECS ${CMAKE_BINARY_DIR}/junk/BUILD ${CMAKE_BINARY_DIR}/junk/RPMS ${CMAKE_BINARY_DIR}/junk/SRPMS
466 COMMAND cp ${DATAR} ${CMAKE_BINARY_DIR}/junk/SOURCES
467 COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_BINARY_DIR}/junk" --nodeps -bb ${DASPECFILE}
468 COMMAND cp `find './junk/' -name '${DAARC}*.rpm'` ./ 
469 COMMAND rm -rf junk
470 COMMAND echo "***** RPMS created and put ${CMAKE_BINARY_DIR} folder *****"
471 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
472 )
473
474
475 add_custom_target(${DAEXE}
476 COMMAND echo "***** Making executable ${DAEXE} *****"
477 COMMAND g++ ${LDFLAGS} ${DAOBJ} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${DALIB}.a ${EXTRAROOTLIB} $ENV{ROOTSYS}/lib/libRoot.a $ENV{ROOTSYS}/lib/liblzma.a $ENV{ROOTSYS}/lib/libfreetype.a $ENV{ROOTSYS}/lib/libpcre.a  ${SYSLIBS} ${DAQDALIB} ${AMOREDALIBS} ${MONITORLIBS} -o ${DAEXE}
478 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
479 )
480
481
482 add_dependencies(${DAEXE} ${DASRC} DAOBJ_${DAEXE}_ ${BINPATH} ${LIBPATH} ${DALIB}.a ${DAQDALIB} ${ROOTLIB})
483
484 add_custom_target(DAOBJ_${DAEXE}_
485 )
486 add_custom_command(
487 TARGET DAOBJ_${DAEXE}_
488 COMMAND echo "***** Compiling ${DASRC} *****"
489 COMMAND echo "${DFLAGS}"
490         COMMAND g++ -c ${AMOREDEFINITIONS} -D${CMAKE_SYSTEM_NAME} ${DATE_CFLAGS} -I${DATE_ROOT}/infoLogger -I${DATE_ROOT}/logbook -I${DAQDADIR} -I${CMAKE_SOURCE_DIR}/RAW -I${CMAKE_BINARY_DIR}/include -I${ROOTINCDIR} ${mod} ${date_head} ${CMAKE_SOURCE_DIR}/${DASRC} -o ${DAOBJ}
491         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
492 )
493 add_dependencies(DAOBJ_${DAEXE}_ DADEP_${DAEXE}_ )
494
495
496 add_custom_target(DADEP_${DAEXE}_)
497 add_custom_command(
498 TARGET DADEP_${DAEXE}_
499 COMMAND echo "***** Making detector-algorithm dependencies ${DADEP} *****"
500         COMMAND g++ -MM ${DATE_CFLAGS} -I${DAQDADIR} -I${CMAKE_SOURCE_DIR}/RAW -I${CMAKE_BINARY_DIR}/include -I${ROOTINCDIR} ${mod} ${date_head} ${CMAKE_SOURCE_DIR}/${DASRC} > ${DADEP}
501         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
502 )
503
504
505 add_custom_command(TARGET clean
506 COMMAND rm -rf junk*.exe
507 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
508   
509
510         endif(match)
511   endforeach(dafile)
512 endforeach(detector)