#101318: Patch for various problems in AliROOT
[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$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})
197
198         #DAREVISION
199           execute_process(COMMAND svn info ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE _darevision OUTPUT_STRIP_TRAILING_WHITESPACE)
200           string(REGEX REPLACE ".*Revision: ([^\n]+)\n.*" "\\1" DAREVISION ${_darevision})
201         # DAROOTRELEASE 
202           execute_process(COMMAND root-config --version OUTPUT_VARIABLE _darootrelease OUTPUT_STRIP_TRAILING_WHITESPACE)
203           string(REGEX REPLACE "/" "." DAROOTRELEASE ${_darootrelease})
204         
205         # DAALIROOTRELEASE
206           string(REGEX REPLACE ".*URL: .*/(.+)/${DASRC}.*$" "\\1" DAALIROOTRELEASE ${_daversion})
207           string (REPLACE "-" "." DAALIROOTRELEASE "${DAALIROOTRELEASE}")
208         
209           set(DAARCNAME "${DATARGETNAME}")
210           #string(REPLACE "-" "" DAARCNAME "${DAARCNAME}")
211           set(DAARC "${DAARCNAME}-${DAVERSION}")
212           set(DATAR "${DATARGETDIR}/${DAARC}.src.tar.gz")
213           set(DASPECFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.spec")
214           set(DAMAKEFILE "${DATARGETDIR}/${DAMODULE}${SUBDAMODULE}${DANAME}da.make")
215
216   
217       file(READ "${CMAKE_SOURCE_DIR}/${DASRC}" _dasrc)
218           getinfo(DACONTACT "Contact" ${_dasrc})
219           getinfo(DALINKPAGE "Link" ${_dasrc})
220           getinfo(DAREFRUN "Reference Run" ${_dasrc})
221           getinfo(DARUNTYPE "Run Type" ${_dasrc})
222           getinfo(DATYPE "DA Type" ${_dasrc})
223           getinfo(DANUMBEROFEVENTS "Number of events needed" ${_dasrc})
224           getinfo(DAINPUTFILES "Input Files" ${_dasrc})
225           getinfo(DAOUTPUTFILES "Output Files" ${_dasrc})
226           getinfo(DATRIGGERTYPE "Trigger types used" ${_dasrc})
227
228           if(NOT _dasrc)
229            message(FATAL_ERROR "SRC FILE MISSING")
230           endif(NOT _dasrc)
231
232 #----------- Targets ----------------------
233
234           set(CMAKE_CXX_FLAGS "${CXXFLAGS}")
235           set(CMAKE_C_FLAGS "${CFLAGS}")
236           set(CMAKE_Fortran_FLAGS ${FFLAGS})
237           set(CMAKE_SHARED_LINKER_FLAGS ${SOFLAGS}) 
238           set(CMAKE_MODULE_LINKER_FLAGS ${LDFLAGS})
239
240 add_dependencies(DA-all ${DATARGETNAME})
241 add_custom_target(${DATARGETNAME}
242 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
243 )
244 add_dependencies(${DATARGETNAME} ${DAEXE})
245
246 set(ZIP)
247 foreach(_lib ${ALIROOTALIBS})
248 string(REGEX REPLACE "-static" "" _lib ${_lib})
249 list(APPEND ZIP && ar x "../lib${_lib}.a")
250 endforeach(_lib)
251 list (APPEND ZIP && ar r "../lib${DALIB}.a" "*.o")
252
253 add_custom_target(${DALIB}.a
254 COMMAND rm -rf junk${DAEXE} && mkdir -p junk${DAEXE}
255 COMMAND cd junk${DAEXE} ${ZIP}
256 COMMAND cd ../ && rm -rf junk${DAEXE}
257 DEPENDS ${ALIROOTALIBS} 
258 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} 
259 )
260
261 add_custom_command(
262 TARGET ${DATARGETNAME}-clean
263 COMMAND echo "***** Cleaning ${DAMODULE} ${SUBDAMODULE} ${DANAME} detector-algorithm *****"
264 COMMAND rm -f ${DASPECFILE}
265 COMMAND rm -f ${DATAR}
266 COMMAND rm -f ${DAEXE}
267 COMMAND rm -f ${DAOBJ}
268 COMMAND rm -f ${DADEP}
269 COMMAND rm -f ${DAMAKEFILE}
270 COMMAND rm -f ${DALIB}.a
271 COMMAND rm -f ${ALIROOTALIBS}
272 COMMAND rm -f ${EXTRAROOTLIB}
273 )
274
275 separate_arguments(SYSLIBS)
276 #execute_process(COMMAND ${AMORE}/amore-config --ldflags-da-static | tr "\n" " "  OUTPUT_VARIABLE _amore1 OUTPUT_STRIP_TRAILING_WHITESPACE)
277 #execute_process(COMMAND date-config --rcproxylibs OUTPUT_VARIABLE _amore2 OUTPUT_STRIP_TRAILING_WHITESPACE)
278 #execute_process(COMMAND date-config --monitorlibs=noshift OUTPUT_VARIABLE _monitor1 OUTPUT_STRIP_TRAILING_WHITESPACE)
279   
280 #set(AMOREDALIBS "-static ${_amore1} ${_amore2}\\")
281 #set(MONITORLIBS "${_monitor1}\\")
282
283 add_custom_target(DAMAKEFILE_${DAEXE}_)
284 add_custom_command( 
285 TARGET DAMAKEFILE_${DAEXE}_
286 COMMAND rm -f ${DAMAKEFILE}
287 COMMAND @echo "***** Making makefile ${DAMAKEFILE} *****"
288 COMMAND @echo '\#***************************************************' >> ${DAMAKEFILE}
289 COMMAND @echo '\# Makefile for Detector Algorithm' >> ${DAMAKEFILE}
290 COMMAND @echo '\#' >> ${DAMAKEFILE}
291 COMMAND @echo '\# It is necessary to setup build environment before' >> ${DAMAKEFILE}
292 COMMAND @echo '\# using make:' >> ${DAMAKEFILE}
293 COMMAND @echo '\# - define path to daqDAlib (env. DAQDALIB_PATH)' >> ${DAMAKEFILE}
294 COMMAND @echo '\#' >> ${DAMAKEFILE}
295 COMMAND @echo '\#*****************************************************' >> ${DAMAKEFILE}
296 COMMAND @echo "" >> ${DAMAKEFILE}
297 COMMAND @echo "CXX=g++" >> ${DAMAKEFILE}
298 COMMAND @echo "LD=g++" >> ${DAMAKEFILE}
299 COMMAND @echo "" >> ${DAMAKEFILE}
300 COMMAND @echo "CXXFLAGS=${CXXFLAGS}" >> ${DAMAKEFILE}
301 COMMAND @echo "LDFLAGS=${LDFLAGS}" >> ${DAMAKEFILE}
302 COMMAND @echo "" >> ${DAMAKEFILE}
303 COMMAND @echo 'ifeq ($$(DAQDALIB_PATH),)' >> ${DAMAKEFILE}
304 COMMAND @echo "DAQDADIR=${ALICE}/daqDAlib" >> ${DAMAKEFILE}
305 COMMAND @echo "else" >> ${DAMAKEFILE}
306 COMMAND @echo 'DAQDADIR=$$(DAQDALIB_PATH)' >> ${DAMAKEFILE}
307 COMMAND @echo "endif" >> ${DAMAKEFILE}
308 COMMAND @echo "" >> ${DAMAKEFILE}
309 COMMAND @echo 'DAQDALIB=$$(DAQDADIR)/libdaqDA.a' >> ${DAMAKEFILE}
310 #COMMAND @echo 'AMOREDALIBS=-static $$(shell $$(AMORE)/amore-config --ldflags-da-static) $$(shell date-config --rcproxylibs)' >> ${DAMAKEFILE}
311 #COMMAND @echo 'MONITORLIBS=$$(shell date-config --monitorlibs=noshift)' >> ${DAMAKEFILE}
312 #COMMAND @echo 'AMOREDALIBS=-static ${_amore1} ${_amore2}' >> ${DAMAKEFILE}
313 #COMMAND @echo 'MONITORLIBS=${monitor1}' >> ${DAMAKEFILE}
314 COMMAND @echo "" >> ${DAMAKEFILE}
315 COMMAND @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.exe: ${DAMODULE}${SUBDAMODULE}${DANAME}da.o" >> ${DAMAKEFILE}
316 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}
317 COMMAND @echo "" >> ${DAMAKEFILE}
318 COMMAND @echo "${DAMODULE}${SUBDAMODULE}${DANAME}da.o: ${DAMODULE}${SUBDAMODULE}${DANAME}da.cxx" >> ${DAMAKEFILE}
319 COMMAND @echo -e '\t$$(CXX) -c $$(CXXFLAGS) -I$$(DAQDADIR) ${mod} ''$$''< -o ''$$''@' >> ${DAMAKEFILE}
320 COMMAND @echo "" >> ${DAMAKEFILE}
321 COMMAND @echo "clean:" >> ${DAMAKEFILE}
322 COMMAND @echo -e '\t@rm -f ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe ${DAMODULE}${SUBDAMODULE}${DANAME}da.o' >> ${DAMAKEFILE}
323 COMMAND @echo "" >> ${DAMAKEFILE}
324 COMMAND @echo "install: ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe" >> ${DAMAKEFILE}
325 COMMAND @echo -e '\tif [ $$(INSTALL_PATH) == '' ]; then \\' >> ${DAMAKEFILE}
326 COMMAND @echo -e '\techo Environment variable INSTALL_PATH undefined, cannot continue\; \\' >> ${DAMAKEFILE}
327 COMMAND @echo -e '\texit 1\; \\' >> ${DAMAKEFILE}
328 COMMAND @echo -e '\tfi' >> ${DAMAKEFILE}
329 COMMAND @echo -e '\t@cp -p ${DAMODULE}${SUBDAMODULE}${DANAME}da.exe $$(INSTALL_PATH)' >> ${DAMAKEFILE}
330 )
331
332 add_custom_target(DATAR_${DAEXE}_)
333 add_custom_command( 
334 TARGET DATAR_${DAEXE}_
335 COMMAND @echo "***** Making archive ${DATAR} *****"
336 COMMAND rm -rf ${DATAR}
337 COMMAND rm -rf junk
338 COMMAND mkdir junk && mkdir junk/${DAARC} 
339         COMMAND cp -a ${CMAKE_SOURCE_DIR}/${DASRC} junk/${DAARC} 
340 COMMAND cp -a ${DAMAKEFILE} junk/${DAARC}/Makefile 
341 COMMAND cp -a ${DASPECFILE} junk/${DAARC}/${DAMODULE}${SUBDAMODULE}${DANAME}da.spec
342 COMMAND cd junk && tar czf ${DATAR} * 
343 COMMAND cd .. && rm -rf junk
344 )
345 add_dependencies(DATAR_${DAEXE}_ DAMAKEFILE_${DAEXE}_ DASPECFILE_${DAEXE}_ ${DASRC}) 
346
347 add_custom_target(DASPECFILE_${DAEXE}_)
348
349 add_custom_command(
350 TARGET DASPECFILE_${DAEXE}_
351 COMMAND rm -f ${DASPECFILE}
352 COMMAND @echo "***** Making RPM spec-file ${DASPECFILE} *****"
353 COMMAND @echo '\# RPM specfile for $(DAMODULE)${SUBDAMODULE}$(DANAME) Detector Algorithm' >> ${DASPECFILE}
354 COMMAND @echo "Summary: ${ONLINEDETECTORNAME} Detector Algorithm" >> ${DASPECFILE}
355 COMMAND @echo "Name: ${DAARCNAME}" >> ${DASPECFILE}
356 COMMAND @echo "Version: ${DAVERSION}" >> ${DASPECFILE}
357 COMMAND @echo "Release: ${DAALIROOTRELEASE}.${DAREVISION}" >> ${DASPECFILE}
358 COMMAND @echo "License: CERN Alice DAQ/Offine" >> ${DASPECFILE}
359 COMMAND @echo "Source: %{name}-%{version}.src.tar.gz" >> ${DASPECFILE}
360 COMMAND @echo "Group: Applications/Alice" >> ${DASPECFILE}
361 COMMAND @echo "Prefix: /opt/%{name}" >> ${DASPECFILE}
362 COMMAND @echo "BuildRoot: %{_tmppath}/%{name}-root" >> ${DASPECFILE}
363 COMMAND @echo "" >> ${DASPECFILE}
364 COMMAND @echo '\# automatic dependencies' >> ${DASPECFILE}
365 COMMAND @echo "AutoReqProv: yes" >> ${DASPECFILE}
366 COMMAND @echo "" >> ${DASPECFILE}
367 COMMAND @echo '\# list here required RPM packages for compilation' >> ${DASPECFILE}
368 COMMAND @echo "BuildRequires: date" >> ${DASPECFILE} 
369 COMMAND @echo "" >> ${DASPECFILE}
370 COMMAND @echo '\# list here required RPM packages for runtime' >> ${DASPECFILE}
371 COMMAND @echo "Requires: date" >> ${DASPECFILE}
372 COMMAND @echo "" >> ${DASPECFILE}    
373 COMMAND @echo '\# You can specify other dependencies in the description tag below.' >> ${DASPECFILE}
374 COMMAND @echo "" >> ${DASPECFILE}
375 COMMAND @echo '\# description of the package' >> ${DASPECFILE}
376 COMMAND @echo "%description" >> ${DASPECFILE}
377 COMMAND @echo "This is the ${ONLINEDETECTORNAME} ${DANAME} DA for online calibration." >> ${DASPECFILE}
378 COMMAND @echo "It uses data from ${DAMODULE} detectors at run time." >> ${DASPECFILE}
379 COMMAND @echo "Build requires: daqDAlib, date, AliRoot ${DAALIROOTRELEASE},ROOT ${DAROOTRELEASE}." >> ${DASPECFILE}
380 COMMAND @echo "Runtime requires: date." >> ${DASPECFILE}
381 COMMAND @echo "Contact: ${DACONTACT}" >> ${DASPECFILE}
382 COMMAND @echo "Link: ${DALINKPAGE}" >> ${DASPECFILE}
383 COMMAND @echo "Reference Run: ${DAREFRUN}" >> ${DASPECFILE}
384 COMMAND @echo "Run type: ${DARUNTYPE}" >> ${DASPECFILE}
385 COMMAND @echo "DA type: ${DATYPE}" >> ${DASPECFILE}
386 COMMAND @echo "Number of events needed: ${DANUMBEROFEVENTS}" >> ${DASPECFILE}
387 COMMAND @echo "Input files: ${DAINPUTFILES}" >> ${DASPECFILE}
388 COMMAND @echo "Output files: ${DAOUTPUTFILES}" >> ${DASPECFILE}
389 COMMAND @echo "Trigger types used: ${DATRIGGERTYPE}" >> ${DASPECFILE}
390 COMMAND @echo "" >> ${DASPECFILE}
391 COMMAND @echo '\#*****************************************************************' >> ${DASPECFILE}
392 COMMAND @echo '\# Do not modify following scripts' >> ${DASPECFILE}
393 COMMAND @echo '\#*****************************************************************' >> ${DASPECFILE}
394 COMMAND @echo "" >> ${DASPECFILE}
395 COMMAND @echo "%define debug_package %{nil}" >> ${DASPECFILE}
396 COMMAND @echo "%define __os_install_post %{nil}" >> ${DASPECFILE}
397 COMMAND @echo "" >> ${DASPECFILE}
398 COMMAND @echo '\# here is defined the installation root directory' >> ${DASPECFILE}
399 COMMAND @echo "%define pkgname %{name}-%{version}" >> ${DASPECFILE}
400 COMMAND @echo "%define destdir %{prefix}" >> ${DASPECFILE}
401 COMMAND @echo "" >> ${DASPECFILE}
402 COMMAND @echo '\# pre-compilation script: extract from tarball' >> ${DASPECFILE}
403 COMMAND @echo "%prep" >> ${DASPECFILE}
404 COMMAND @echo '\# extract archive' >> ${DASPECFILE}
405 COMMAND @echo "%setup -n %{pkgname}" >> ${DASPECFILE}
406 COMMAND @echo "" >> ${DASPECFILE}
407 COMMAND @echo '\# compile' >> ${DASPECFILE}
408 COMMAND @echo "%build" >> ${DASPECFILE}
409 COMMAND @echo "export DATE_SITE=" >> ${DASPECFILE}
410 COMMAND @echo ". /date/setup.sh" >> ${DASPECFILE}
411 COMMAND @echo "gmake" >> ${DASPECFILE}
412 COMMAND @echo "" >> ${DASPECFILE}
413 COMMAND @echo '\# install runtime files' >> ${DASPECFILE}
414 COMMAND @echo "%install" >> ${DASPECFILE}
415 COMMAND @echo '\#remove install dir if existing' >> ${DASPECFILE}
416 COMMAND echo  '[ -d ''$$''RPM_BUILD_ROOT ] && rm -rf ''$$''RPM_BUILD_ROOT' >> ${DASPECFILE}
417 COMMAND @echo '\#make install in install root directory' >> ${DASPECFILE}
418 COMMAND @echo 'mkdir -p ''$$''RPM_BUILD_ROOT%{prefix}' >> ${DASPECFILE}
419 COMMAND @echo 'make install INSTALL_PATH=''$$''RPM_BUILD_ROOT%{prefix}' >> ${DASPECFILE}
420 COMMAND @echo "" >> ${DASPECFILE}
421 COMMAND @echo '\# clean RPM build files' >> ${DASPECFILE}
422 COMMAND @echo "%clean" >> ${DASPECFILE}
423 COMMAND @echo '\# remove installed files' >> ${DASPECFILE}
424 COMMAND @echo 'rm -rf ''$$''RPM_BUILD_ROOT' >> ${DASPECFILE}
425 COMMAND @echo '\# remove source files' >> ${DASPECFILE}
426 COMMAND @echo 'rm -rf ''$$''RPM_BUILD_DIR/%{pkgname}' >> ${DASPECFILE}
427 COMMAND @echo "" >> ${DASPECFILE}
428 COMMAND @echo '\# pre-install script' >> ${DASPECFILE}
429 COMMAND @echo "%pre" >> ${DASPECFILE}
430 COMMAND @echo "" >> ${DASPECFILE}
431 COMMAND @echo '\# list of files to be installed' >> ${DASPECFILE}
432 COMMAND @echo "%files" >> ${DASPECFILE}
433 COMMAND @echo '%defattr (-,root,root)' >> ${DASPECFILE}
434 COMMAND @echo "%{destdir}" >> ${DASPECFILE}
435 COMMAND @echo "" >> ${DASPECFILE}
436 COMMAND @echo '\# post-install script' >> ${DASPECFILE}
437 COMMAND @echo '\# launched after rpm installed' >> ${DASPECFILE}
438 COMMAND @echo "%post" >> ${DASPECFILE}
439 COMMAND @echo "" >> ${DASPECFILE}
440 COMMAND @echo '\# post-uninstall script' >> ${DASPECFILE}
441 COMMAND @echo '\# launched after rpm removed' >> ${DASPECFILE}
442 COMMAND @echo "%postun" >> ${DASPECFILE}
443 )
444
445
446 add_custom_target( ${DATARGETNAME}-rpm
447 )
448 add_dependencies(${DATARGETNAME}-rpm DATAR_${DAEXE}_ DASPECFILE_${DAEXE}_ ${LIBPATH} ${DALIB}.a DADEP_${DAEXE}_ ${ROOTLIB}     
449 )
450 add_custom_command(TARGET ${DATARGETNAME}-rpm
451 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
452 COMMAND cp ${DATAR} ${CMAKE_BINARY_DIR}/junk/SOURCES
453 COMMAND rpmbuild --verbose --define "_topdir ${CMAKE_BINARY_DIR}/junk" --nodeps -bb ${DASPECFILE}
454 COMMAND cp `find './junk/' -name '${DAARC}*.rpm'` ./ 
455 COMMAND rm -rf junk
456 COMMAND echo "***** RPMS created and put ${CMAKE_BINARY_DIR} folder *****"
457 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
458 )
459
460
461 add_custom_target(${DAEXE}
462 COMMAND echo "***** Making executable ${DAEXE} *****"
463 COMMAND g++ ${LDFLAGS} ${DAOBJ} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${DALIB}.a ${EXTRAROOTLIB} ${ROOTSYS}/lib/libRoot.a ${ROOTSYS}/lib/liblzma.a ${ROOTSYS}/lib/libfreetype.a ${ROOTSYS}/lib/libpcre.a  ${SYSLIBS} ${DAQDALIB} ${AMOREDALIBS} ${MONITORLIBS} -o ${DAEXE}
464 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
465 )
466
467
468 add_dependencies(${DAEXE} ${DASRC} DAOBJ_${DAEXE}_ ${BINPATH} ${LIBPATH} ${DALIB}.a ${DAQDALIB} ${ROOTLIB})
469
470 add_custom_target(DAOBJ_${DAEXE}_
471 )
472 add_custom_command(
473 TARGET DAOBJ_${DAEXE}_
474 COMMAND echo "***** Compiling ${DASRC} *****"
475 COMMAND echo "${DFLAGS}"
476         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}
477         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
478 )
479 add_dependencies(DAOBJ_${DAEXE}_ DADEP_${DAEXE}_ )
480
481
482 add_custom_target(DADEP_${DAEXE}_)
483 add_custom_command(
484 TARGET DADEP_${DAEXE}_
485 COMMAND echo "***** Making detector-algorithm dependencies ${DADEP} *****"
486         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}
487         WORKING_DIRECTORY ${CMAKE_BINARY_DIR}  
488 )
489
490
491 add_custom_command(TARGET clean
492 COMMAND rm -rf junk*.exe
493 WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
494   
495
496         endif(match)
497   endforeach(dafile)
498 endforeach(detector)