1 Macro(CreateHLTSubCMakeFiles)
5 # Check if ROOT was compile with xml and alien support
6 # This is needed later to set properly the definitions during
9 COMMAND root-config --has-xml
10 OUTPUT_VARIABLE ROOT_HAS_XML
11 OUTPUT_STRIP_TRAILING_WHITESPACE)
14 COMMAND root-config --has-alien
15 OUTPUT_VARIABLE ROOT_HAS_ALIEN
16 OUTPUT_STRIP_TRAILING_WHITESPACE)
18 # Loop over the subdirectories, extract the package files and
19 # call for each of the package files a macro which creates the
20 # corresponding CMake input files in the subdirectory
22 file(GLOB Package RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/${_dir}/*.pkg)
23 get_filename_component(__path ${_dir} NAME)
24 set(EINCLUDE_SUBDIR ${__path} STEER)
25 set(PACKCXXFLAGS_SUBDIR)
28 ParseHLTPackageFile(HLT/hlt.conf)
29 set(PACKCXXFLAGS_SUBDIR ${PACKCXXFLAGS_SUBDIR} ${PACKCXXFLAGS_PACKAGE})
30 # MESSAGE("${Package}")
32 # set(Package HLT/libHLTrec.pkg)
33 Foreach(_pack ${Package})
34 GenerateHLTInputFiles(${_pack})
35 set(EINCLUDE_SUBDIR ${EINCLUDE_SUBDIR} ${EINCLUDE_PACKAGE})
36 set(PACKCXXFLAGS_SUBDIR ${PACKCXXFLAGS_SUBDIR} ${PACKCXXFLAGS_PACKAGE})
37 EndForeach(_pack ${Package})
38 list(REMOVE_DUPLICATES EINCLUDE_SUBDIR)
39 CreateHLTMainCMakeFile(${__path})
41 EndMacro(CreateHLTSubCMakeFiles)
43 Macro(GenerateHLTInputFiles Package)
45 get_filename_component(_path ${Package} PATH)
46 get_filename_component(_name ${Package} NAME)
48 STRING(REGEX REPLACE "^(lib.*).pkg$" "\\1" _lib "${_name}")
49 STRING(REGEX REPLACE "^(bin.*).pkg$" "\\1" _bin "${_name}")
51 ParseHLTPackageFile(${Package})
53 If(_name MATCHES "^lib.*$")
54 Set(PACKAGES ${PACKAGES} ${_lib})
55 # SpecialHLTSettingsMadeByHand(${_lib}) # Correct the Parser
56 CreateHLTLibPackageFile(${_path} ${_lib})
57 # Message("Would create ${_lib}")
58 Else(_name MATCHES "^lib.*$")
59 Set(PACKAGES ${PACKAGES} ${_bin})
60 CreateHLTBinPackageFile(${_path} ${_bin})
61 # Message("Would create ${_bin}")
62 EndIf(_name MATCHES "^lib.*$")
64 EndMacro(GenerateHLTInputFiles Package)
66 Macro(ParseHLTPackageFile Package)
75 Set(PACKCXXFLAGS_PACKAGE)
76 Set(PACKFFLAGS_PACKAGE)
78 Set(EXCLUDE_PART FALSE)
84 # Read the complete text file into variable contents
86 FILE(READ "${Package}" contents)
88 # Convert file contents into a CMake list (where each element in the list
89 # is one line of the file)
90 # Replace as first step ";" to "\". One "\" in a regex must be "\\\\"
91 # After that replace line breaks by a semicolon, which is in cmake the
92 # separator between list elements. The nice feature is that if there is a
93 # follow up line this is indicated with an "\" at the end of the line
94 # directly before the line break. In the generated string this two letters
95 # together becomes "\;" which is not the separator between two list elements
96 # but a single ";" in a liste element. With this trick one gets all
97 # follow up lines in one list element which can be parsed
99 STRING(REGEX REPLACE ";" "\\\\;" contents "${contents}")
100 STRING(REGEX REPLACE "\n" ";" contents "${contents}")
102 # Iterate over the lines of the input file
103 Foreach(line ${contents})
106 # Simple technique to handle if statements in the package files
107 # If you hit an endif or an else at the begining of a line read
108 # again lines below this point. In case of else check if it is a
109 # nested "if else if else endif endif" structure. If the correct
110 # case is already found don't read the following lines
112 STRING(REGEX REPLACE "\t" "" line "${line}")
114 If(line MATCHES "^[#].*$")
115 Set(EXCLUDE_COMMENT TRUE)
116 # MESSAGE("This is a comment")
117 Else(line MATCHES "^[#].*$")
118 Set(EXCLUDE_COMMENT FALSE)
119 # MESSAGE("This is not a comment")
120 EndIf(line MATCHES "^[#].*$")
122 If(line MATCHES "^endif.*$")
123 Set(EXCLUDE_PART FALSE)
124 EndIf(line MATCHES "^endif.*$")
126 If(line MATCHES "^else.*$")
128 Set(EXCLUDE_PART FALSE)
130 Set(EXCLUDE_PART TRUE)
132 EndIf(line MATCHES "^else.*$")
134 # Special handling in case ther is a if statement
136 If(line MATCHES "^if.*$")
138 # Special handling in case ther is a ifeq statement
140 If(line MATCHES "^ifeq.*$")
142 Set(EXCLUDE_PART TRUE)
144 # Remove ifeq from text. The rest is the interesting part of
147 STRING(REGEX REPLACE "ifeq" "" statement "${line}")
149 # check if "ifeq" compares for ALICE_TARGET. If required target is
150 # equal to ALICE_TARGET, then read the following lines until endif
152 # Since only one target is possible mark that a target was already
153 # found. A short summary of regular expressions can be found at the
156 If(line MATCHES "^.*ALICE_TARGET.*$")
157 STRING(REGEX REPLACE "^.*[(](.*),[$][(]ALICE_TARGET[)][)].*$" "\\1" _result "${line}")
158 If(_result STREQUAL ${ALICE_TARGET})
160 Set(EXCLUDE_PART FALSE)
161 Else(_result STREQUAL ${ALICE_TARGET})
162 Set(EXCLUDE_PART TRUE)
163 EndIf(_result STREQUAL ${ALICE_TARGET})
164 EndIf(line MATCHES "^.*ALICE_TARGET.*$")
167 # check if "if" statement checks for Alien or XML installation.
168 # If ROOT is installed with Alien or XML switch on the compile
171 If(line MATCHES "^.*CHECK.*$")
172 STRING(REGEX REPLACE "^.*[(](.*),[$][(]CHECKXML[)][)].*$" "\\1" _result_xml "${line}")
173 STRING(REGEX REPLACE "^.*[(](.*),[$][(]CHECKALIEN[)][)].*$" "\\1" _result_alien "${line}")
174 If(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
175 Set(EXCLUDE_PART FALSE)
176 Else(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
177 Set(EXCLUDE_PART TRUE)
178 EndIf(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
180 EndIf(line MATCHES "^.*CHECK.*$")
182 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
184 If(line MATCHES "^.*CCM.*$")
185 STRING(REGEX REPLACE "^.*[(][$][(]CCMAJORV[)],(.*)[)].*$" "\\1" _result_maj "${line}")
186 STRING(REGEX REPLACE "^.*[(][$][(]CCMINORV[)],(.*)[)].*$" "\\1" _result_min "${line}")
187 If(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
188 Set(EXCLUDE_PART FALSE)
189 Else(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
190 Set(EXCLUDE_PART TRUE)
191 EndIf(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
192 EndIf(line MATCHES "^.*CCM.*$")
194 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
196 If(line MATCHES "^.*F77.*$")
197 STRING(REGEX REPLACE "^.*[(](.*),[$][(]F77[)][)].*$" "\\1" _result_f77 "${line}")
198 If(${_result_f77} STREQUAL g95)
199 Set(EXCLUDE_PART FALSE)
200 Else(${_result_f77} STREQUAL g95)
201 Set(EXCLUDE_PART TRUE)
202 EndIf(${_result_f77} STREQUAL g95)
203 EndIf(line MATCHES "^.*F77.*$")
206 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
208 If(line MATCHES "^.*MACOSX_MINOR.*$")
209 STRING(REGEX REPLACE "^.*[(](.*),[$][(]MACOSX_MINOR[)][)].*$" "\\1" _result_mac "${line}")
210 If(${_result_mac} EQUAL 5)
211 Set(EXCLUDE_PART FALSE)
212 Else(${_result_mac} EQUAL 5)
213 Set(EXCLUDE_PART TRUE)
214 EndIf(${_result_mac} EQUAL 5)
215 EndIf(line MATCHES "^.*MACOSX_MINOR.*$")
217 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
219 Else(line MATCHES "^ifeq.*$")
221 If(line MATCHES "^ifdef.*$")
223 Set(EXCLUDE_PART TRUE)
225 # line starts with if but not ifeq
226 STRING(REGEX REPLACE "ifdef" "" statement "${line}")
228 # Parse DATE dependent part of if statements
229 If(line MATCHES "^.*DATE_ROOT.*$")
230 STRING(REGEX REPLACE "^.*(DATE_ROOT).*$" "\\1" _result_date "${statement}")
231 If(${_result_date} STREQUAL DATE_ROOT)
233 Set(EXCLUDE_PART FALSE)
235 Set(EXCLUDE_PART TRUE)
237 EndIf(${_result_date} STREQUAL DATE_ROOT)
238 EndIf(line MATCHES "^.*DATE_ROOT.*$")
240 # MESSAGE("EXCLUDE1: ${EXCLUDE_PART}")
243 If(line MATCHES "^.*ALIDEBUG.*$")
245 Set(EXCLUDE_PART FALSE)
247 Set(EXCLUDE_PART TRUE)
248 EndIf($ENV{ALIDEBUG})
249 EndIf(line MATCHES "^.*ALIDEBUG.*$")
251 # MESSAGE("EXCLUDE2: ${EXCLUDE_PART}")
253 If(line MATCHES "^.*ALIHLT_MLUCDIR.*$")
254 If($ENV{ALIHLT_MLUCDIR})
255 Set(EXCLUDE_PART FALSE)
256 Else(STREQUAL $ENV{ALIHLT_MLUCDIR})
257 Set(EXCLUDE_PART TRUE)
258 EndIf($ENV{ALIHLT_MLUCDIR})
259 EndIf(line MATCHES "^.*ALIHLT_MLUCDIR.*$")
261 # MESSAGE("EXCLUDE3: ${EXCLUDE_PART}")
264 Else(line MATCHES "^ifdef.*$")
265 If(line MATCHES "^ifneq.*$")
267 If(line MATCHES "^.*FASTJET_ROOT.*$")
268 STRING(REGEX REPLACE "^.*[(][$][(]FASTJET_ROOT[)],(.*)[)].*$" "\\1" _result_fastjet "${line}")
269 If(NOT ${_length_fastjet})
270 Set(EXCLUDE_PART FALSE)
271 Else(NOT ${_length_fastjet})
272 Set(EXCLUDE_PART TRUE)
273 EndIf(NOT ${_length_fastjet})
275 Else(line MATCHES "^.*FASTJET_ROOT.*$")
276 If(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
277 STRING(REGEX REPLACE "^.*findstring[ ](,*),[$][(]ALICE_TARGET[)].*$" "\\1" _result_macox "${line}")
278 If(${_result_macox} MATCHES ".*macosx.*")
279 Set(EXCLUDE_PART FALSE)
280 Else(${_result_macox} MATCHES ".*macosx.*")
281 Set(EXCLUDE_PART FALSE)
282 EndIf(${_result_macox} MATCHES ".*macosx.*")
284 Else(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
286 MESSAGE(FATAL_ERROR "There is no rule how to handle ifneq statement in ${line}")
288 EndIf(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
289 EndIf(line MATCHES "^.*FASTJET_ROOT.*$")
293 Else(line MATCHES "^ifneq.*$")
294 Set(EXCLUDE_PART TRUE)
295 MESSAGE(FATAL_ERROR "There is no rule how to handle if statement in ${line}")
296 EndIf(line MATCHES "^ifneq.*$")
298 EndIf(line MATCHES "^ifdef.*$")
299 EndIf(line MATCHES "^ifeq.*$")
300 EndIf(line MATCHES "^if.*$")
302 # If the lines are inside an if statement which is not true exclude this
303 # part. In other words read only interesting part of of the file
305 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}, ${EXCLUDE_COMMENT}")
307 if(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
309 If(line MATCHES "^ORGSRCS.*$")
310 STRING(REGEX REPLACE "^.*[$][(]wildcard[ ](.*)[*].*$" "\\1" orgsrc "${line}")
311 Set(_file_glob_dir ${_file_glob_dir} ${orgsrc})
312 EndIf(line MATCHES "^ORGSRCS.*$")
314 If(line MATCHES "^MODULE_SRCS.*$")
315 STRING(REGEX REPLACE "MODULE_SRCS" "" CXXSRCS "${line}")
316 # Check if list of source files should be build from
317 # list of header files. Add additional source files to
318 # the list if they are defined. The parser does not
319 If("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
320 set(ADD_CXXSRCS TRUE)
321 Else("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
323 set(ADD_CXXSRCS TRUE)
325 set(ADD_CXXSRCS FALSE)
327 EndIf("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
330 STRING(REGEX REPLACE "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]" "" CXXSRCS "${CXXSRCS}")
331 STRING(REGEX REPLACE ":=" "" CXXSRCS "${CXXSRCS}")
332 STRING(REGEX REPLACE "[+]=" "" CXXSRCS "${CXXSRCS}")
333 STRING(REGEX REPLACE "=" "" CXXSRCS "${CXXSRCS}")
334 STRING(REGEX REPLACE "[ ]+" ";" CXXSRCS "${CXXSRCS}")
335 STRING(REGEX REPLACE "^;" "" CXXSRCS "${CXXSRCS}")
336 SET(CXXSRCS_PACKAGE ${CXXSRCS_PACKAGE} ${CXXSRCS})
337 EndIf(line MATCHES "^MODULE_SRCS.*$")
339 If(line MATCHES "^SRCS.*$")
340 If(line MATCHES patsubst)
341 STRING(REGEX REPLACE "^.*[%][,](.*)[/][%][,].*$" "\\1" PACKAGE_DIR "${line}")
342 Else(line MATCHES patsubst)
343 STRING(REGEX REPLACE "SRCS" "" SRCS "${line}")
344 STRING(REGEX REPLACE ":=" "" SRCS "${SRCS}")
345 STRING(REGEX REPLACE "[+]=" "" SRCS "${SRCS}")
346 STRING(REGEX REPLACE "=" "" SRCS "${SRCS}")
347 STRING(REGEX REPLACE "[ ]+" ";" SRCS "${SRCS}")
348 STRING(REGEX REPLACE "^;" "" SRCS "${SRCS}")
349 SET(SRCS_PACKAGE ${SRCS_PACKAGE} ${SRCS})
350 EndIf(line MATCHES patsubst)
351 EndIf(line MATCHES "^SRCS.*$")
353 If(line MATCHES "^CSRCS.*$")
354 STRING(REGEX REPLACE "CSRCS" "" CSRCS "${line}")
355 STRING(REGEX REPLACE ":=" "" CSRCS "${CSRCS}")
356 STRING(REGEX REPLACE "[+]=" "" CSRCS "${CSRCS}")
357 STRING(REGEX REPLACE "=" "" CSRCS "${CSRCS}")
358 STRING(REGEX REPLACE "[ ]+" ";" CSRCS "${CSRCS}")
359 STRING(REGEX REPLACE "^;" "" CSRCS "${CSRCS}")
360 SET(CSRCS_PACKAGE ${CSRCS_PACKAGE} ${CSRCS})
361 EndIf(line MATCHES "^CSRCS.*$")
363 If(line MATCHES "^FSRCS.*$")
364 STRING(REGEX REPLACE "FSRCS" "" FSRCS "${line}")
365 STRING(REGEX REPLACE ":=" "" FSRCS "${FSRCS}")
366 STRING(REGEX REPLACE "[+]=" "" FSRCS "${FSRCS}")
367 STRING(REGEX REPLACE "=" "" FSRCS "${FSRCS}")
368 STRING(REGEX REPLACE "[ ]+" ";" FSRCS "${FSRCS}")
369 STRING(REGEX REPLACE "^;" "" FSRCS "${FSRCS}")
370 SET(FSRCS_PACKAGE ${FSRCS_PACKAGE} ${FSRCS})
371 EndIf(line MATCHES "^FSRCS.*$")
373 If(line MATCHES "^EINCLUDE.*$")
374 # MESSAGE("BLA: ${line}")
375 STRING(REGEX REPLACE "EINCLUDE" "" EINCLUDE "${line}")
376 STRING(REGEX REPLACE ":=" "" EINCLUDE "${EINCLUDE}")
377 STRING(REGEX REPLACE "[+]=" "" EINCLUDE "${EINCLUDE}")
378 STRING(REGEX REPLACE "=" "" EINCLUDE "${EINCLUDE}")
379 STRING(REGEX REPLACE "[ ]+" ";" EINCLUDE "${EINCLUDE}")
380 STRING(REGEX REPLACE "^;" "" EINCLUDE "${EINCLUDE}")
381 SET(EINCLUDE_PACKAGE ${EINCLUDE_PACKAGE} ${EINCLUDE})
382 # MESSAGE("EINCLUDE_PACKAGE: ${EINCLUDE_PACKAGE}")
383 EndIf(line MATCHES "^EINCLUDE.*$")
385 If(line MATCHES "^MODULE_DHDR.*$")
386 STRING(REGEX REPLACE "MODULE_DHDR" "" DHDR "${line}")
387 STRING(REGEX REPLACE "\t" "" DHDR "${DHDR}")
388 STRING(STRIP ${DHDR} DHDR)
389 STRING(REGEX REPLACE ":=" "" DHDR "${DHDR}")
390 STRING(REGEX REPLACE "[+]=" "" DHDR "${DHDR}")
391 STRING(REGEX REPLACE "=" "" DHDR "${DHDR}")
392 STRING(REGEX REPLACE "[ ]+" ";" DHDR "${DHDR}")
393 STRING(REGEX REPLACE "^;" "" DHDR "${DHDR}")
394 SET(DHDR_PACKAGE ${DHDR_PACKAGE} ${DHDR})
395 # MESSAGE("DHDR_PACKAGE: ${DHDR_PACKAGE}")
396 EndIf(line MATCHES "^MODULE_DHDR.*$")
398 If(line MATCHES "^LIBHLT.*$")
399 STRING(REGEX REPLACE "^.*LIBHLT(.*)[_]VERSION.*$" "\\1" _result_library "${line}")
400 STRING(REGEX REPLACE "^.*LIBHLT.*VERSION" "" LIBHLT "${line}")
401 STRING(REGEX REPLACE ":=" "" LIBHLT "${LIBHLT}")
402 STRING(STRIP ${LIBHLT} LIBHLT)
403 set(LIBHLT_LIB_VERSION ${LIBHLT})
404 EndIf(line MATCHES "^LIBHLT.*$")
406 If(line MATCHES "^PACKCXXFLAGS.*$")
407 STRING(REGEX REPLACE "PACKCXXFLAGS" "" PACKCXXFLAGS "${line}")
408 STRING(REGEX REPLACE ":=" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
409 STRING(REGEX REPLACE "[+]=" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
410 STRING(REGEX REPLACE "^[ ]+[=]" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
411 STRING(REGEX REPLACE "[ ]+" ";" PACKCXXFLAGS "${PACKCXXFLAGS}")
412 STRING(REGEX REPLACE "^;" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
413 foreach(elem ${PACKCXXFLAGS})
414 STRING(REGEX MATCH "^[-]D.*$" _match_result ${elem})
415 if(${elem} STREQUAL "${_match_result}")
416 # STRING(REGEX REPLACE "\"" "\\\\\"" PACKCXXFLAGS "${PACKCXXFLAGS}")
417 If(${elem} MATCHES LIBHLT)
418 # STRING(REGEX REPLACE "[$][(].*[)]" "\\\\\"${LIBHLT_LIB_VERSION}\\\\\"" elem "${elem}")
419 STRING(REGEX REPLACE "[$][(].*[)]" "${LIBHLT_LIB_VERSION}" elem "${elem}")
420 EndIf(${elem} MATCHES LIBHLT)
421 SET(PACKCXXFLAGS_PACKAGE ${PACKCXXFLAGS_PACKAGE} ${elem})
422 endif(${elem} STREQUAL "${_match_result}")
423 endforeach(elem ${PACKCXXFLAGS})
424 # MESSAGE("DEFINITIONS: ${PACKCXXFLAGS_PACKAGE}")
425 EndIf(line MATCHES "^PACKCXXFLAGS.*$")
427 If(line MATCHES "^HLTDEFS.*$")
428 STRING(REGEX REPLACE "HLTDEFS" "" HLTDEFS "${line}")
429 STRING(REGEX REPLACE ":=" "" HLTDEFS "${HLTDEFS}")
430 STRING(REGEX REPLACE "[+]=" "" HLTDEFS "${HLTDEFS}")
431 STRING(REGEX REPLACE "=" "" HLTDEFS "${HLTDEFS}")
432 STRING(REGEX REPLACE "[ ]+" ";" HLTDEFS "${HLTDEFS}")
433 STRING(REGEX REPLACE "^;" "" HLTDEFS "${HLTDEFS}")
434 foreach(elem ${HLTDEFS})
435 STRING(REGEX MATCH "^[-]D.*$" _match_result ${elem})
436 If(${elem} STREQUAL "${_match_result}")
437 STRING(REGEX REPLACE "VERSION" "VERSION=" elem "${elem}")
438 If(${elem} MATCHES LIBHLT)
439 STRING(REGEX REPLACE "[$][(].*[)]" "${LIBHLT_LIB_VERSION}" elem "${elem}")
440 EndIf(${elem} MATCHES LIBHLT)
441 SET(PACKCXXFLAGS_PACKAGE ${PACKCXXFLAGS_PACKAGE} ${elem})
442 endif(${elem} STREQUAL "${_match_result}")
443 endforeach(elem ${HLTDEFS})
444 # MESSAGE("DEFINITIONS: ${PACKCXXFLAGS_PACKAGE}")
445 EndIf(line MATCHES "^HLTDEFS.*$")
447 If(line MATCHES "^PACKFFLAGS.*$")
448 STRING(REGEX REPLACE "PACKFFLAGS" "" PACKFFLAGS "${line}")
449 STRING(REGEX REPLACE ":=" "" PACKFFLAGS "${PACKFFLAGS}")
450 STRING(REGEX REPLACE "[+]=" "" PACKFFLAGS "${PACKFFLAGS}")
451 STRING(REGEX REPLACE "^[ ]+[=]" "" PACKFFLAGS "${PACKFFLAGS}")
452 STRING(REGEX REPLACE "[ ]+" ";" PACKFFLAGS "${PACKFFLAGS}")
453 STRING(REGEX REPLACE "^;" "" PACKFFLAGS "${PACKFFLAGS}")
454 foreach(elem ${PACKFFLAGS})
455 STRING(REGEX MATCH "[-]O[%]" _match_result ${elem})
456 if("${_match_result}" STREQUAL "-O%")
458 endif("${_match_result}" STREQUAL "-O%")
459 STRING(REGEX MATCH "^[-].*$" _match_result ${elem})
460 if(${elem} STREQUAL "${_match_result}")
461 SET(PACKFFLAGS_PACKAGE ${PACKFFLAGS_PACKAGE} ${elem})
462 endif(${elem} STREQUAL "${_match_result}")
463 endforeach(elem ${PACKFFLAGS})
464 # MESSAGE("FDEFINITIONS: ${PACKFFLAGS_PACKAGE}")
465 EndIf(line MATCHES "^PACKFFLAGS.*$")
467 If(line MATCHES "^ELIBS.*$")
468 If(NOT line MATCHES "^ELIBSCPP.*$")
469 If(NOT line MATCHES "^ELIBSDIR.*$")
470 STRING(REGEX REPLACE "ELIBS" "" ELIBS "${line}")
471 STRING(REGEX REPLACE ":=" "" ELIBS "${ELIBS}")
472 STRING(REGEX REPLACE "[+]=" "" ELIBS "${ELIBS}")
473 STRING(REGEX REPLACE "=" "" ELIBS "${ELIBS}")
474 STRING(REGEX REPLACE "[ ]+" ";" ELIBS "${ELIBS}")
475 STRING(REGEX REPLACE "^;" "" ELIBS "${ELIBS}")
476 SET(ELIBS_PACKAGE ${ELIBS_PACKAGE} ${ELIBS})
477 EndIf(NOT line MATCHES "^ELIBSDIR.*$")
478 EndIf(NOT line MATCHES "^ELIBSCPP.*$")
479 EndIf(line MATCHES "^ELIBS.*$")
481 If(line MATCHES "^CLASS_HDRS.*$")
483 If(NOT line MATCHES "^CLASS_HDRS_FJ.*$")
484 # MESSAGE("Auch HIER")
485 STRING(REGEX REPLACE "CLASS_HDRS" "" HDRS "${line}")
486 STRING(REGEX REPLACE "\t" "" HDRS "${HDRS}")
487 STRING(REGEX REPLACE ":=" "" HDRS "${HDRS}")
488 STRING(REGEX REPLACE "[+]=" "" HDRS "${HDRS}")
489 STRING(REGEX REPLACE "=" "" HDRS "${HDRS}")
490 STRING(REGEX REPLACE "[ ]+" ";" HDRS "${HDRS}")
491 STRING(REGEX REPLACE "^;" "" HDRS "${HDRS}")
492 SET(HDRS_PACKAGE ${HDRS_PACKAGE} ${HDRS})
493 EndIf(NOT line MATCHES "^CLASS_HDRS_FJ.*$")
494 EndIf(line MATCHES "^CLASS_HDRS.*$")
496 # MESSAGE("Parsed: ${line}")
497 Else(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
498 # MESSAGE("Not parsed: ${line}")
499 EndIf(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
501 EndForeach(line ${contents})
502 EndMacro(ParseHLTPackageFile Package)
504 Macro(CreateHLTMainCMakeFile path)
505 set(FileName ${path}/CMakeLists.txt)
506 file(WRITE ${FileName} "# -*- mode: cmake -*-\n")
507 file(APPEND ${FileName} "# Create a library called \"lib<name>\" which includes the source files given in\n")
508 file(APPEND ${FileName} "# the array .\n")
509 file(APPEND ${FileName} "# The extension is already found. Any number of sources could be listed here.\n\n")
510 file(APPEND ${FileName} "set(INCLUDE_DIRECTORIES\n")
511 foreach(file ${EINCLUDE_SUBDIR})
512 If(file MATCHES "^.*[$].*$")
513 STRING(REGEX REPLACE "[(]" "ENV{" file "${file}")
514 STRING(REGEX REPLACE "[)]" "}" file "${file}")
515 file(APPEND ${FileName} "${file}\n")
516 Else(file MATCHES "^.*[$].*$")
517 file(APPEND ${FileName} "\${CMAKE_SOURCE_DIR}/${file}\n")
518 EndIf(file MATCHES "^.*[$].*$")
519 endforeach(file ${EINCLUDE_SUBDIR})
522 if(${_dir} STREQUAL STEER OR ${_dir} STREQUAL TPC OR ${_dir} STREQUAL ALIROOT)
523 file(APPEND ${FileName} "\${CMAKE_BINARY_DIR}/STEER\n")
524 endif(${_dir} STREQUAL STEER OR ${_dir} STREQUAL TPC OR ${_dir} STREQUAL ALIROOT)
525 if(${_dir} STREQUAL RAW)
526 file(APPEND ${FileName} "\${CMAKE_SOURCE_DIR}\n")
527 endif(${_dir} STREQUAL RAW)
530 file(APPEND ${FileName} ")\n\n")
531 file(APPEND ${FileName} "include_directories(\${INCLUDE_DIRECTORIES})\n\n")
532 file(APPEND ${FileName} "include_directories(SYSTEM \${ROOT_INCLUDE_DIR})\n\n")
533 file(APPEND ${FileName} "set(LINK_DIRECTORIES\n")
534 file(APPEND ${FileName} "\${ROOT_LIBRARY_DIR}\n")
535 file(APPEND ${FileName} ")\n\n")
536 file(APPEND ${FileName} "link_directories(\${LINK_DIRECTORIES})\n\n")
538 list(LENGTH PACKCXXFLAGS_SUBDIR definition_length)
539 if(${definition_length} GREATER 0)
540 list(REMOVE_DUPLICATES PACKCXXFLAGS_SUBDIR)
541 file(APPEND ${FileName} "Add_Definitions(\n")
542 foreach(file ${PACKCXXFLAGS_SUBDIR})
543 # If(${file} MATCHES LIBHLT)
544 # STRING(REGEX REPLACE "[(]" "{" file "${file}")
545 # STRING(REGEX REPLACE "[)]" "}" file "${file}")
546 # MESSAGE("BLA: ${file}")
547 # file(APPEND ${FileName} "${${file}}\n")
549 # Else(${file} MATCHES LIBHLT)
552 file(APPEND ${FileName} "${file}\n")
553 # EndIf(${file} MATCHES LIBHLT)
554 endforeach(file ${CXXSRCS_SUBDIR})
555 file(APPEND ${FileName} ")\n\n")
556 endif(${definition_length} GREATER 0)
558 file(APPEND ${FileName} "SetModule()\n\n")
559 foreach(file ${PACKAGES})
560 file(APPEND ${FileName} "include (CMake_${file}.txt)\n\n")
561 endforeach(file ${PACKAGES})
562 EndMacro(CreateHLTMainCMakeFile path)
564 Macro(CreateHLTLibPackageFile path lib)
566 set(FileName ${path}/CMake_${lib}.txt)
567 set(AddCSource FALSE)
568 set(AddFortranSource FALSE)
570 STRING(REGEX REPLACE "^lib(.*)" "\\1" _lib "${lib}")
572 file(WRITE ${FileName} "# -*- mode: cmake -*-\n\n")
574 file(APPEND ${FileName} "set(SRCS)\n\n")
576 list(LENGTH HDRS_PACKAGE hdrs_length)
577 if(${hdrs_length} GREATER 0)
578 file(APPEND ${FileName} "set(HDRS\n")
579 foreach(file ${HDRS_PACKAGE})
580 String(STRIP ${file} file)
581 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
582 endforeach(file ${HDRS_PACKAGE})
583 file(APPEND ${FileName} ")\n\n")
584 endif(${hdrs_length} GREATER 0)
587 # list(LENGTH CSRCS_PACKAGE c_length)
588 # if(${c_length} GREATER 0)
589 # set(AddCSource TRUE)
590 # file(APPEND ${FileName} "set(CSRCS\n")
591 # foreach(file ${CSRCS_PACKAGE})
592 # file(APPEND ${FileName} "${file}\n")
593 # endforeach(file ${CSRCS_PACKAGE})
594 # file(APPEND ${FileName} ")\n\n")
595 # endif(${c_length} GREATER 0)
597 # list(LENGTH FSRCS_PACKAGE f_length)
598 # if(${f_length} GREATER 0)
599 # set(AddFortranSource TRUE)
600 # file(APPEND ${FileName} "set(FSRCS\n")
601 # foreach(file ${FSRCS_PACKAGE})
602 # file(APPEND ${FileName} "${file}\n")
603 # endforeach(file ${FSRCS_PACKAGE})
604 # file(APPEND ${FileName} ")\n\n")
605 # endif(${f_length} GREATER 0)
609 file(APPEND ${FileName} "# fill list of header files from list of source files\n")
610 file(APPEND ${FileName} "# by exchanging the file extension\n")
612 file(APPEND ${FileName} "String(REPLACE \".h\" \".cxx\" SRCS \"\${HDRS}\")\n\n")
613 list(LENGTH CXXSRCS_PACKAGE _length)
614 if(${_length} GREATER 0)
615 file(APPEND ${FileName} "set(SRCS \${SRCS}\n")
616 foreach(file ${CXXSRCS_PACKAGE})
617 String(STRIP ${file} file)
618 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
619 endforeach(file ${CXXSRCS_PACKAGE})
620 file(APPEND ${FileName} ")\n\n")
621 endif(${_length} GREATER 0)
623 list(LENGTH CXXSRCS_PACKAGE _length)
624 if(${_length} GREATER 0)
625 file(APPEND ${FileName} "set(SRCS\n")
626 foreach(file ${CXXSRCS_PACKAGE})
627 String(STRIP ${file} file)
628 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
629 endforeach(file ${CXXSRCS_PACKAGE})
630 file(APPEND ${FileName} ")\n\n")
631 endif(${_length} GREATER 0)
635 # file(APPEND ${FileName} "Set(SRCS \${SRCS} \${CSRCS})\n\n")
637 # If(AddFortranSource)
638 # file(APPEND ${FileName} "Set(SRCS \${SRCS} \${FSRCS})\n\n")
639 # EndIf(AddFortranSource)
641 # list(LENGTH PACKFFLAGS_PACKAGE packf_length)
642 # if(${packf_length} GREATER 0)
643 # file(APPEND ${FileName} "SET_SOURCE_FILES_PROPERTIES(\n")
644 # file(APPEND ${FileName} "${FSRCS} PROPERTIES COMPILE_FLAGS\n")
645 # file(APPEND ${FileName} "${PACKFFLAGS_PACKAGE}\n")
646 # file(APPEND ${FileName} ")\n\n")
647 # endif(${packf_length} GREATER 0)
650 # file(APPEND ${FileName} "AddHLTLibrary(${_lib} \"\${SRCS}\" \"\${HDRS}\" \"\${DHDR_PACKAGE}\")\n")
651 file(APPEND ${FileName} "AddHLTLibrary(${_lib} \"\${SRCS}\" \"\${HDRS}\")\n")
653 # Message("DHDR: ${_lib}, ${DHDR_PACKAGE}")
654 list(LENGTH DHDR_PACKAGE _length)
655 If(${_length} EQUAL 0)
656 # STRING(REGEX REPLACE "^lib(.*)" "\\1" _lib "${lib}")
657 set(LinkDefFileName ${CMAKE_CURRENT_BINARY_DIR}/${path}/${_lib}LinkDef.h)
658 # MESSAGE("LINKDEF: ${LinkDefFileName}")
659 GenerateLinkDefFile(${LinkDefFileName} "${HDRS}")
660 EndIf(${_length} EQUAL 0)
662 EndMacro(CreateHLTLibPackageFile path lib)
664 Macro(CreateHLTBinPackageFile path bin)
666 set(FileName ${path}/CMake_${bin}.txt)
667 STRING(REGEX REPLACE "^bin(.*)" "\\1" _bin "${bin}")
669 file(WRITE ${FileName} "# -*- mode: cmake -*-\n\n")
671 file(APPEND ${FileName} "set(SRCS)\n\n")
673 list(LENGTH SRCS_PACKAGE _length)
674 if(${_length} GREATER 0)
675 file(APPEND ${FileName} "set(SRCS\n")
676 foreach(file ${SRCS_PACKAGE})
677 file(APPEND ${FileName} "${file}\n")
678 endforeach(file ${SRCS_PACKAGE})
679 file(APPEND ${FileName} ")\n\n")
680 endif(${_length} GREATER 0)
682 list(LENGTH ELIBS_PACKAGE _length)
683 if(${_length} GREATER 0)
684 file(APPEND ${FileName} "set(LIBS\n")
685 foreach(file ${ELIBS_PACKAGE})
686 file(APPEND ${FileName} "${file}\n")
687 endforeach(file ${ELIBS_PACKAGE})
688 file(APPEND ${FileName} ")\n\n")
689 endif(${_length} GREATER 0)
691 file(APPEND ${FileName} "AddExecutable(${_bin}exe \"\${SRCS}\" \"\${LIBS}\")\n")
692 EndMacro(CreateHLTBinPackageFile path bin)
694 Macro(SpecialHLTSettingsMadeByHand lib)
695 If(${lib} STREQUAL libAliengui)
696 list(REMOVE_ITEM CXXSRCS_PACKAGE Aliengui/AliAnalysisGUIdummy.cxx)
697 EndIf(${lib} STREQUAL libAliengui)
698 # If(${lib} STREQUAL libTPCmon)
699 # list(REMOVE_ITEM CXXSRCS_PACKAGE AliTPCMonitorDateMonitor.cxx)
700 # list(REMOVE_ITEM HDRS_PACKAGE AliTPCMonitorDateMonitor.h)
701 # EndIf(${lib} STREQUAL libTPCmon)
702 If(${lib} STREQUAL libRAWDatabase)
703 list(APPEND HDRS_PACKAGE \${ROOT_INCLUDE_DIR}/TH1F.h)
704 list(APPEND H_PACKAGE \${ROOT_INCLUDE_DIR}/TH1F.h)
705 EndIf(${lib} STREQUAL libRAWDatabase)
706 If(${lib} STREQUAL liblhapdf)
707 # STRING(REGEX REPLACE "[=]" "\\\\=" PACKCXXFLAGS "${PACKCXXFLAGS}")
708 # STRING(REGEX REPLACE "[$][(]ALICE_ROOT[)]" "\$ENV{ALICE_ROOT}" PACKCXXFLAGS "${PACKCXXFLAGS}")
709 EndIf(${lib} STREQUAL liblhapdf)
710 EndMacro(SpecialHLTSettingsMadeByHand lib)
712 Macro(GenerateLinkDefFile FileName HDRS)
713 file(WRITE ${FileName} "//automatically generated ROOT DICT definition\n")
714 file(APPEND ${FileName} "//!!! DO NOT EDIT THIS FILE !!!\n")
715 file(APPEND ${FileName} "#ifdef __CINT__\n")
716 file(APPEND ${FileName} "#pragma link off all globals;\n")
717 file(APPEND ${FileName} "#pragma link off all classes;\n")
718 file(APPEND ${FileName} "#pragma link off all functions;\n")
719 ForEach(file ${HDRS})
720 String(STRIP ${file} file)
722 get_filename_component(_file ${file} NAME_WE)
723 file(APPEND ${FileName} "#pragma link C++ class ${_file}+;\n")
724 EndForEach(file ${HDRS})
725 file(APPEND ${FileName} "#endif\n")
726 EndMacro(GenerateLinkDefFile FileName HDRS)
727 Macro(CreateHLTSubCMakeFiles)
731 # Check if ROOT was compile with xml and alien support
732 # This is needed later to set properly the definitions during
735 COMMAND root-config --has-xml
736 OUTPUT_VARIABLE ROOT_HAS_XML
737 OUTPUT_STRIP_TRAILING_WHITESPACE)
740 COMMAND root-config --has-alien
741 OUTPUT_VARIABLE ROOT_HAS_ALIEN
742 OUTPUT_STRIP_TRAILING_WHITESPACE)
744 # Loop over the subdirectories, extract the package files and
745 # call for each of the package files a macro which creates the
746 # corresponding CMake input files in the subdirectory
748 file(GLOB Package RELATIVE ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/${_dir}/*.pkg)
749 get_filename_component(__path ${_dir} NAME)
750 set(EINCLUDE_SUBDIR ${__path} STEER)
751 set(PACKCXXFLAGS_SUBDIR)
754 ParseHLTPackageFile(HLT/hlt.conf)
755 set(PACKCXXFLAGS_SUBDIR ${PACKCXXFLAGS_SUBDIR} ${PACKCXXFLAGS_PACKAGE})
756 # MESSAGE("${Package}")
758 # set(Package HLT/libHLTrec.pkg)
759 Foreach(_pack ${Package})
760 GenerateHLTInputFiles(${_pack})
761 set(EINCLUDE_SUBDIR ${EINCLUDE_SUBDIR} ${EINCLUDE_PACKAGE})
762 set(PACKCXXFLAGS_SUBDIR ${PACKCXXFLAGS_SUBDIR} ${PACKCXXFLAGS_PACKAGE})
763 EndForeach(_pack ${Package})
764 list(REMOVE_DUPLICATES EINCLUDE_SUBDIR)
765 CreateHLTMainCMakeFile(${__path})
767 EndMacro(CreateHLTSubCMakeFiles)
769 Macro(GenerateHLTInputFiles Package)
771 get_filename_component(_path ${Package} PATH)
772 get_filename_component(_name ${Package} NAME)
774 STRING(REGEX REPLACE "^(lib.*).pkg$" "\\1" _lib "${_name}")
775 STRING(REGEX REPLACE "^(bin.*).pkg$" "\\1" _bin "${_name}")
777 ParseHLTPackageFile(${Package})
779 If(_name MATCHES "^lib.*$")
780 Set(PACKAGES ${PACKAGES} ${_lib})
781 # SpecialHLTSettingsMadeByHand(${_lib}) # Correct the Parser
782 CreateHLTLibPackageFile(${_path} ${_lib})
783 # Message("Would create ${_lib}")
784 Else(_name MATCHES "^lib.*$")
785 Set(PACKAGES ${PACKAGES} ${_bin})
786 CreateHLTBinPackageFile(${_path} ${_bin})
787 # Message("Would create ${_bin}")
788 EndIf(_name MATCHES "^lib.*$")
790 EndMacro(GenerateHLTInputFiles Package)
792 Macro(ParseHLTPackageFile Package)
797 Set(EINCLUDE_PACKAGE)
801 Set(PACKCXXFLAGS_PACKAGE)
802 Set(PACKFFLAGS_PACKAGE)
804 Set(EXCLUDE_PART FALSE)
806 Set(_file_glob FALSE)
810 # Read the complete text file into variable contents
812 FILE(READ "${Package}" contents)
814 # Convert file contents into a CMake list (where each element in the list
815 # is one line of the file)
816 # Replace as first step ";" to "\". One "\" in a regex must be "\\\\"
817 # After that replace line breaks by a semicolon, which is in cmake the
818 # separator between list elements. The nice feature is that if there is a
819 # follow up line this is indicated with an "\" at the end of the line
820 # directly before the line break. In the generated string this two letters
821 # together becomes "\;" which is not the separator between two list elements
822 # but a single ";" in a liste element. With this trick one gets all
823 # follow up lines in one list element which can be parsed
825 STRING(REGEX REPLACE ";" "\\\\;" contents "${contents}")
826 STRING(REGEX REPLACE "\n" ";" contents "${contents}")
828 # Iterate over the lines of the input file
829 Foreach(line ${contents})
832 # Simple technique to handle if statements in the package files
833 # If you hit an endif or an else at the begining of a line read
834 # again lines below this point. In case of else check if it is a
835 # nested "if else if else endif endif" structure. If the correct
836 # case is already found don't read the following lines
838 STRING(REGEX REPLACE "\t" "" line "${line}")
840 If(line MATCHES "^[#].*$")
841 Set(EXCLUDE_COMMENT TRUE)
842 # MESSAGE("This is a comment")
843 Else(line MATCHES "^[#].*$")
844 Set(EXCLUDE_COMMENT FALSE)
845 # MESSAGE("This is not a comment")
846 EndIf(line MATCHES "^[#].*$")
848 If(line MATCHES "^endif.*$")
849 Set(EXCLUDE_PART FALSE)
850 EndIf(line MATCHES "^endif.*$")
852 If(line MATCHES "^else.*$")
854 Set(EXCLUDE_PART FALSE)
856 Set(EXCLUDE_PART TRUE)
858 EndIf(line MATCHES "^else.*$")
860 # Special handling in case ther is a if statement
862 If(line MATCHES "^if.*$")
864 # Special handling in case ther is a ifeq statement
866 If(line MATCHES "^ifeq.*$")
868 Set(EXCLUDE_PART TRUE)
870 # Remove ifeq from text. The rest is the interesting part of
873 STRING(REGEX REPLACE "ifeq" "" statement "${line}")
875 # check if "ifeq" compares for ALICE_TARGET. If required target is
876 # equal to ALICE_TARGET, then read the following lines until endif
878 # Since only one target is possible mark that a target was already
879 # found. A short summary of regular expressions can be found at the
882 If(line MATCHES "^.*ALICE_TARGET.*$")
883 STRING(REGEX REPLACE "^.*[(](.*),[$][(]ALICE_TARGET[)][)].*$" "\\1" _result "${line}")
884 If(_result STREQUAL ${ALICE_TARGET})
886 Set(EXCLUDE_PART FALSE)
887 Else(_result STREQUAL ${ALICE_TARGET})
888 Set(EXCLUDE_PART TRUE)
889 EndIf(_result STREQUAL ${ALICE_TARGET})
890 EndIf(line MATCHES "^.*ALICE_TARGET.*$")
893 # check if "if" statement checks for Alien or XML installation.
894 # If ROOT is installed with Alien or XML switch on the compile
897 If(line MATCHES "^.*CHECK.*$")
898 STRING(REGEX REPLACE "^.*[(](.*),[$][(]CHECKXML[)][)].*$" "\\1" _result_xml "${line}")
899 STRING(REGEX REPLACE "^.*[(](.*),[$][(]CHECKALIEN[)][)].*$" "\\1" _result_alien "${line}")
900 If(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
901 Set(EXCLUDE_PART FALSE)
902 Else(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
903 Set(EXCLUDE_PART TRUE)
904 EndIf(${_result_xml} STREQUAL ${ROOT_HAS_XML} OR ${_result_alien} STREQUAL ${ROOT_HAS_ALIEN})
906 EndIf(line MATCHES "^.*CHECK.*$")
908 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
910 If(line MATCHES "^.*CCM.*$")
911 STRING(REGEX REPLACE "^.*[(][$][(]CCMAJORV[)],(.*)[)].*$" "\\1" _result_maj "${line}")
912 STRING(REGEX REPLACE "^.*[(][$][(]CCMINORV[)],(.*)[)].*$" "\\1" _result_min "${line}")
913 If(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
914 Set(EXCLUDE_PART FALSE)
915 Else(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
916 Set(EXCLUDE_PART TRUE)
917 EndIf(${_result_maj} EQUAL 4 OR ${_result_min} EQUAL 3)
918 EndIf(line MATCHES "^.*CCM.*$")
920 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
922 If(line MATCHES "^.*F77.*$")
923 STRING(REGEX REPLACE "^.*[(](.*),[$][(]F77[)][)].*$" "\\1" _result_f77 "${line}")
924 If(${_result_f77} STREQUAL g95)
925 Set(EXCLUDE_PART FALSE)
926 Else(${_result_f77} STREQUAL g95)
927 Set(EXCLUDE_PART TRUE)
928 EndIf(${_result_f77} STREQUAL g95)
929 EndIf(line MATCHES "^.*F77.*$")
932 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
934 If(line MATCHES "^.*MACOSX_MINOR.*$")
935 STRING(REGEX REPLACE "^.*[(](.*),[$][(]MACOSX_MINOR[)][)].*$" "\\1" _result_mac "${line}")
936 If(${_result_mac} EQUAL 5)
937 Set(EXCLUDE_PART FALSE)
938 Else(${_result_mac} EQUAL 5)
939 Set(EXCLUDE_PART TRUE)
940 EndIf(${_result_mac} EQUAL 5)
941 EndIf(line MATCHES "^.*MACOSX_MINOR.*$")
943 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}")
945 Else(line MATCHES "^ifeq.*$")
947 If(line MATCHES "^ifdef.*$")
949 Set(EXCLUDE_PART TRUE)
951 # line starts with if but not ifeq
952 STRING(REGEX REPLACE "ifdef" "" statement "${line}")
954 # Parse DATE dependent part of if statements
955 If(line MATCHES "^.*DATE_ROOT.*$")
956 STRING(REGEX REPLACE "^.*(DATE_ROOT).*$" "\\1" _result_date "${statement}")
957 If(${_result_date} STREQUAL DATE_ROOT)
959 Set(EXCLUDE_PART FALSE)
961 Set(EXCLUDE_PART TRUE)
963 EndIf(${_result_date} STREQUAL DATE_ROOT)
964 EndIf(line MATCHES "^.*DATE_ROOT.*$")
966 # MESSAGE("EXCLUDE1: ${EXCLUDE_PART}")
969 If(line MATCHES "^.*ALIDEBUG.*$")
971 Set(EXCLUDE_PART FALSE)
973 Set(EXCLUDE_PART TRUE)
974 EndIf($ENV{ALIDEBUG})
975 EndIf(line MATCHES "^.*ALIDEBUG.*$")
977 # MESSAGE("EXCLUDE2: ${EXCLUDE_PART}")
979 If(line MATCHES "^.*ALIHLT_MLUCDIR.*$")
980 If($ENV{ALIHLT_MLUCDIR})
981 Set(EXCLUDE_PART FALSE)
982 Else(STREQUAL $ENV{ALIHLT_MLUCDIR})
983 Set(EXCLUDE_PART TRUE)
984 EndIf($ENV{ALIHLT_MLUCDIR})
985 EndIf(line MATCHES "^.*ALIHLT_MLUCDIR.*$")
987 # MESSAGE("EXCLUDE3: ${EXCLUDE_PART}")
990 Else(line MATCHES "^ifdef.*$")
991 If(line MATCHES "^ifneq.*$")
993 If(line MATCHES "^.*FASTJET_ROOT.*$")
994 STRING(REGEX REPLACE "^.*[(][$][(]FASTJET_ROOT[)],(.*)[)].*$" "\\1" _result_fastjet "${line}")
995 If(NOT ${_length_fastjet})
996 Set(EXCLUDE_PART FALSE)
997 Else(NOT ${_length_fastjet})
998 Set(EXCLUDE_PART TRUE)
999 EndIf(NOT ${_length_fastjet})
1001 Else(line MATCHES "^.*FASTJET_ROOT.*$")
1002 If(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
1003 STRING(REGEX REPLACE "^.*findstring[ ](,*),[$][(]ALICE_TARGET[)].*$" "\\1" _result_macox "${line}")
1004 If(${_result_macox} MATCHES ".*macosx.*")
1005 Set(EXCLUDE_PART FALSE)
1006 Else(${_result_macox} MATCHES ".*macosx.*")
1007 Set(EXCLUDE_PART FALSE)
1008 EndIf(${_result_macox} MATCHES ".*macosx.*")
1010 Else(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
1012 MESSAGE(FATAL_ERROR "There is no rule how to handle ifneq statement in ${line}")
1014 EndIf(line MATCHES "^.*findstring macosx,[$][(]ALICE_TARGET[)].*$")
1015 EndIf(line MATCHES "^.*FASTJET_ROOT.*$")
1019 Else(line MATCHES "^ifneq.*$")
1020 Set(EXCLUDE_PART TRUE)
1021 MESSAGE(FATAL_ERROR "There is no rule how to handle if statement in ${line}")
1022 EndIf(line MATCHES "^ifneq.*$")
1024 EndIf(line MATCHES "^ifdef.*$")
1025 EndIf(line MATCHES "^ifeq.*$")
1026 EndIf(line MATCHES "^if.*$")
1028 # If the lines are inside an if statement which is not true exclude this
1029 # part. In other words read only interesting part of of the file
1031 # MESSAGE("EXCLUDE: ${EXCLUDE_PART}, ${EXCLUDE_COMMENT}")
1033 if(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
1035 If(line MATCHES "^ORGSRCS.*$")
1036 STRING(REGEX REPLACE "^.*[$][(]wildcard[ ](.*)[*].*$" "\\1" orgsrc "${line}")
1037 Set(_file_glob_dir ${_file_glob_dir} ${orgsrc})
1038 EndIf(line MATCHES "^ORGSRCS.*$")
1040 If(line MATCHES "^MODULE_SRCS.*$")
1041 STRING(REGEX REPLACE "MODULE_SRCS" "" CXXSRCS "${line}")
1042 # Check if list of source files should be build from
1043 # list of header files. Add additional source files to
1044 # the list if they are defined. The parser does not
1045 If("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
1046 set(ADD_CXXSRCS TRUE)
1047 Else("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
1049 set(ADD_CXXSRCS TRUE)
1051 set(ADD_CXXSRCS FALSE)
1053 EndIf("${CXXSRCS}" MATCHES "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]")
1056 STRING(REGEX REPLACE "[$][(]CLASS_HDRS:[.]h=[.]cxx[)]" "" CXXSRCS "${CXXSRCS}")
1057 STRING(REGEX REPLACE ":=" "" CXXSRCS "${CXXSRCS}")
1058 STRING(REGEX REPLACE "[+]=" "" CXXSRCS "${CXXSRCS}")
1059 STRING(REGEX REPLACE "=" "" CXXSRCS "${CXXSRCS}")
1060 STRING(REGEX REPLACE "[ ]+" ";" CXXSRCS "${CXXSRCS}")
1061 STRING(REGEX REPLACE "^;" "" CXXSRCS "${CXXSRCS}")
1062 SET(CXXSRCS_PACKAGE ${CXXSRCS_PACKAGE} ${CXXSRCS})
1063 EndIf(line MATCHES "^MODULE_SRCS.*$")
1065 If(line MATCHES "^SRCS.*$")
1066 If(line MATCHES patsubst)
1067 STRING(REGEX REPLACE "^.*[%][,](.*)[/][%][,].*$" "\\1" PACKAGE_DIR "${line}")
1068 Else(line MATCHES patsubst)
1069 STRING(REGEX REPLACE "SRCS" "" SRCS "${line}")
1070 STRING(REGEX REPLACE ":=" "" SRCS "${SRCS}")
1071 STRING(REGEX REPLACE "[+]=" "" SRCS "${SRCS}")
1072 STRING(REGEX REPLACE "=" "" SRCS "${SRCS}")
1073 STRING(REGEX REPLACE "[ ]+" ";" SRCS "${SRCS}")
1074 STRING(REGEX REPLACE "^;" "" SRCS "${SRCS}")
1075 SET(SRCS_PACKAGE ${SRCS_PACKAGE} ${SRCS})
1076 EndIf(line MATCHES patsubst)
1077 EndIf(line MATCHES "^SRCS.*$")
1079 If(line MATCHES "^CSRCS.*$")
1080 STRING(REGEX REPLACE "CSRCS" "" CSRCS "${line}")
1081 STRING(REGEX REPLACE ":=" "" CSRCS "${CSRCS}")
1082 STRING(REGEX REPLACE "[+]=" "" CSRCS "${CSRCS}")
1083 STRING(REGEX REPLACE "=" "" CSRCS "${CSRCS}")
1084 STRING(REGEX REPLACE "[ ]+" ";" CSRCS "${CSRCS}")
1085 STRING(REGEX REPLACE "^;" "" CSRCS "${CSRCS}")
1086 SET(CSRCS_PACKAGE ${CSRCS_PACKAGE} ${CSRCS})
1087 EndIf(line MATCHES "^CSRCS.*$")
1089 If(line MATCHES "^FSRCS.*$")
1090 STRING(REGEX REPLACE "FSRCS" "" FSRCS "${line}")
1091 STRING(REGEX REPLACE ":=" "" FSRCS "${FSRCS}")
1092 STRING(REGEX REPLACE "[+]=" "" FSRCS "${FSRCS}")
1093 STRING(REGEX REPLACE "=" "" FSRCS "${FSRCS}")
1094 STRING(REGEX REPLACE "[ ]+" ";" FSRCS "${FSRCS}")
1095 STRING(REGEX REPLACE "^;" "" FSRCS "${FSRCS}")
1096 SET(FSRCS_PACKAGE ${FSRCS_PACKAGE} ${FSRCS})
1097 EndIf(line MATCHES "^FSRCS.*$")
1099 If(line MATCHES "^EINCLUDE.*$")
1100 # MESSAGE("BLA: ${line}")
1101 STRING(REGEX REPLACE "EINCLUDE" "" EINCLUDE "${line}")
1102 STRING(REGEX REPLACE ":=" "" EINCLUDE "${EINCLUDE}")
1103 STRING(REGEX REPLACE "[+]=" "" EINCLUDE "${EINCLUDE}")
1104 STRING(REGEX REPLACE "=" "" EINCLUDE "${EINCLUDE}")
1105 STRING(REGEX REPLACE "[ ]+" ";" EINCLUDE "${EINCLUDE}")
1106 STRING(REGEX REPLACE "^;" "" EINCLUDE "${EINCLUDE}")
1107 SET(EINCLUDE_PACKAGE ${EINCLUDE_PACKAGE} ${EINCLUDE})
1108 # MESSAGE("EINCLUDE_PACKAGE: ${EINCLUDE_PACKAGE}")
1109 EndIf(line MATCHES "^EINCLUDE.*$")
1111 If(line MATCHES "^MODULE_DHDR.*$")
1112 STRING(REGEX REPLACE "MODULE_DHDR" "" DHDR "${line}")
1113 STRING(REGEX REPLACE "\t" "" DHDR "${DHDR}")
1114 STRING(STRIP ${DHDR} DHDR)
1115 STRING(REGEX REPLACE ":=" "" DHDR "${DHDR}")
1116 STRING(REGEX REPLACE "[+]=" "" DHDR "${DHDR}")
1117 STRING(REGEX REPLACE "=" "" DHDR "${DHDR}")
1118 STRING(REGEX REPLACE "[ ]+" ";" DHDR "${DHDR}")
1119 STRING(REGEX REPLACE "^;" "" DHDR "${DHDR}")
1120 SET(DHDR_PACKAGE ${DHDR_PACKAGE} ${DHDR})
1121 # MESSAGE("DHDR_PACKAGE: ${DHDR_PACKAGE}")
1122 EndIf(line MATCHES "^MODULE_DHDR.*$")
1124 If(line MATCHES "^LIBHLT.*$")
1125 STRING(REGEX REPLACE "^.*LIBHLT(.*)[_]VERSION.*$" "\\1" _result_library "${line}")
1126 STRING(REGEX REPLACE "^.*LIBHLT.*VERSION" "" LIBHLT "${line}")
1127 STRING(REGEX REPLACE ":=" "" LIBHLT "${LIBHLT}")
1128 STRING(STRIP ${LIBHLT} LIBHLT)
1129 set(LIBHLT_LIB_VERSION ${LIBHLT})
1130 EndIf(line MATCHES "^LIBHLT.*$")
1132 If(line MATCHES "^PACKCXXFLAGS.*$")
1133 STRING(REGEX REPLACE "PACKCXXFLAGS" "" PACKCXXFLAGS "${line}")
1134 STRING(REGEX REPLACE ":=" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
1135 STRING(REGEX REPLACE "[+]=" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
1136 STRING(REGEX REPLACE "^[ ]+[=]" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
1137 STRING(REGEX REPLACE "[ ]+" ";" PACKCXXFLAGS "${PACKCXXFLAGS}")
1138 STRING(REGEX REPLACE "^;" "" PACKCXXFLAGS "${PACKCXXFLAGS}")
1139 foreach(elem ${PACKCXXFLAGS})
1140 STRING(REGEX MATCH "^[-]D.*$" _match_result ${elem})
1141 if(${elem} STREQUAL "${_match_result}")
1142 # STRING(REGEX REPLACE "\"" "\\\\\"" PACKCXXFLAGS "${PACKCXXFLAGS}")
1143 If(${elem} MATCHES LIBHLT)
1144 # STRING(REGEX REPLACE "[$][(].*[)]" "\\\\\"${LIBHLT_LIB_VERSION}\\\\\"" elem "${elem}")
1145 STRING(REGEX REPLACE "[$][(].*[)]" "${LIBHLT_LIB_VERSION}" elem "${elem}")
1146 EndIf(${elem} MATCHES LIBHLT)
1147 SET(PACKCXXFLAGS_PACKAGE ${PACKCXXFLAGS_PACKAGE} ${elem})
1148 endif(${elem} STREQUAL "${_match_result}")
1149 endforeach(elem ${PACKCXXFLAGS})
1150 # MESSAGE("DEFINITIONS: ${PACKCXXFLAGS_PACKAGE}")
1151 EndIf(line MATCHES "^PACKCXXFLAGS.*$")
1153 If(line MATCHES "^HLTDEFS.*$")
1154 STRING(REGEX REPLACE "HLTDEFS" "" HLTDEFS "${line}")
1155 STRING(REGEX REPLACE ":=" "" HLTDEFS "${HLTDEFS}")
1156 STRING(REGEX REPLACE "[+]=" "" HLTDEFS "${HLTDEFS}")
1157 STRING(REGEX REPLACE "=" "" HLTDEFS "${HLTDEFS}")
1158 STRING(REGEX REPLACE "[ ]+" ";" HLTDEFS "${HLTDEFS}")
1159 STRING(REGEX REPLACE "^;" "" HLTDEFS "${HLTDEFS}")
1160 foreach(elem ${HLTDEFS})
1161 STRING(REGEX MATCH "^[-]D.*$" _match_result ${elem})
1162 If(${elem} STREQUAL "${_match_result}")
1163 STRING(REGEX REPLACE "VERSION" "VERSION=" elem "${elem}")
1164 If(${elem} MATCHES LIBHLT)
1165 STRING(REGEX REPLACE "[$][(].*[)]" "${LIBHLT_LIB_VERSION}" elem "${elem}")
1166 EndIf(${elem} MATCHES LIBHLT)
1167 SET(PACKCXXFLAGS_PACKAGE ${PACKCXXFLAGS_PACKAGE} ${elem})
1168 endif(${elem} STREQUAL "${_match_result}")
1169 endforeach(elem ${HLTDEFS})
1170 # MESSAGE("DEFINITIONS: ${PACKCXXFLAGS_PACKAGE}")
1171 EndIf(line MATCHES "^HLTDEFS.*$")
1173 If(line MATCHES "^PACKFFLAGS.*$")
1174 STRING(REGEX REPLACE "PACKFFLAGS" "" PACKFFLAGS "${line}")
1175 STRING(REGEX REPLACE ":=" "" PACKFFLAGS "${PACKFFLAGS}")
1176 STRING(REGEX REPLACE "[+]=" "" PACKFFLAGS "${PACKFFLAGS}")
1177 STRING(REGEX REPLACE "^[ ]+[=]" "" PACKFFLAGS "${PACKFFLAGS}")
1178 STRING(REGEX REPLACE "[ ]+" ";" PACKFFLAGS "${PACKFFLAGS}")
1179 STRING(REGEX REPLACE "^;" "" PACKFFLAGS "${PACKFFLAGS}")
1180 foreach(elem ${PACKFFLAGS})
1181 STRING(REGEX MATCH "[-]O[%]" _match_result ${elem})
1182 if("${_match_result}" STREQUAL "-O%")
1184 endif("${_match_result}" STREQUAL "-O%")
1185 STRING(REGEX MATCH "^[-].*$" _match_result ${elem})
1186 if(${elem} STREQUAL "${_match_result}")
1187 SET(PACKFFLAGS_PACKAGE ${PACKFFLAGS_PACKAGE} ${elem})
1188 endif(${elem} STREQUAL "${_match_result}")
1189 endforeach(elem ${PACKFFLAGS})
1190 # MESSAGE("FDEFINITIONS: ${PACKFFLAGS_PACKAGE}")
1191 EndIf(line MATCHES "^PACKFFLAGS.*$")
1193 If(line MATCHES "^ELIBS.*$")
1194 If(NOT line MATCHES "^ELIBSCPP.*$")
1195 If(NOT line MATCHES "^ELIBSDIR.*$")
1196 STRING(REGEX REPLACE "ELIBS" "" ELIBS "${line}")
1197 STRING(REGEX REPLACE ":=" "" ELIBS "${ELIBS}")
1198 STRING(REGEX REPLACE "[+]=" "" ELIBS "${ELIBS}")
1199 STRING(REGEX REPLACE "=" "" ELIBS "${ELIBS}")
1200 STRING(REGEX REPLACE "[ ]+" ";" ELIBS "${ELIBS}")
1201 STRING(REGEX REPLACE "^;" "" ELIBS "${ELIBS}")
1202 SET(ELIBS_PACKAGE ${ELIBS_PACKAGE} ${ELIBS})
1203 EndIf(NOT line MATCHES "^ELIBSDIR.*$")
1204 EndIf(NOT line MATCHES "^ELIBSCPP.*$")
1205 EndIf(line MATCHES "^ELIBS.*$")
1207 If(line MATCHES "^CLASS_HDRS.*$")
1209 If(NOT line MATCHES "^CLASS_HDRS_FJ.*$")
1210 # MESSAGE("Auch HIER")
1211 STRING(REGEX REPLACE "CLASS_HDRS" "" HDRS "${line}")
1212 STRING(REGEX REPLACE "\t" "" HDRS "${HDRS}")
1213 STRING(REGEX REPLACE ":=" "" HDRS "${HDRS}")
1214 STRING(REGEX REPLACE "[+]=" "" HDRS "${HDRS}")
1215 STRING(REGEX REPLACE "=" "" HDRS "${HDRS}")
1216 STRING(REGEX REPLACE "[ ]+" ";" HDRS "${HDRS}")
1217 STRING(REGEX REPLACE "^;" "" HDRS "${HDRS}")
1218 SET(HDRS_PACKAGE ${HDRS_PACKAGE} ${HDRS})
1219 EndIf(NOT line MATCHES "^CLASS_HDRS_FJ.*$")
1220 EndIf(line MATCHES "^CLASS_HDRS.*$")
1222 # MESSAGE("Parsed: ${line}")
1223 Else(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
1224 # MESSAGE("Not parsed: ${line}")
1225 EndIf(NOT EXCLUDE_PART AND NOT EXCLUDE_COMMENT)
1227 EndForeach(line ${contents})
1228 EndMacro(ParseHLTPackageFile Package)
1230 Macro(CreateHLTMainCMakeFile path)
1231 set(FileName ${path}/CMakeLists.txt)
1232 file(WRITE ${FileName} "# -*- mode: cmake -*-\n")
1233 file(APPEND ${FileName} "# Create a library called \"lib<name>\" which includes the source files given in\n")
1234 file(APPEND ${FileName} "# the array .\n")
1235 file(APPEND ${FileName} "# The extension is already found. Any number of sources could be listed here.\n\n")
1236 file(APPEND ${FileName} "set(INCLUDE_DIRECTORIES\n")
1237 foreach(file ${EINCLUDE_SUBDIR})
1238 If(file MATCHES "^.*[$].*$")
1239 STRING(REGEX REPLACE "[(]" "ENV{" file "${file}")
1240 STRING(REGEX REPLACE "[)]" "}" file "${file}")
1241 file(APPEND ${FileName} "${file}\n")
1242 Else(file MATCHES "^.*[$].*$")
1243 file(APPEND ${FileName} "\${CMAKE_SOURCE_DIR}/${file}\n")
1244 EndIf(file MATCHES "^.*[$].*$")
1245 endforeach(file ${EINCLUDE_SUBDIR})
1246 if(${_dir} STREQUAL STEER OR ${_dir} STREQUAL TPC OR ${_dir} STREQUAL ALIROOT)
1247 file(APPEND ${FileName} "\${CMAKE_BINARY_DIR}/STEER\n")
1248 endif(${_dir} STREQUAL STEER OR ${_dir} STREQUAL TPC OR ${_dir} STREQUAL ALIROOT)
1249 if(${_dir} STREQUAL RAW)
1250 file(APPEND ${FileName} "\${CMAKE_SOURCE_DIR}\n")
1251 endif(${_dir} STREQUAL RAW)
1254 file(APPEND ${FileName} ")\n\n")
1255 file(APPEND ${FileName} "include_directories(\${INCLUDE_DIRECTORIES})\n\n")
1256 file(APPEND ${FileName} "include_directories(SYSTEM \${ROOT_INCLUDE_DIR})\n\n")
1257 file(APPEND ${FileName} "set(LINK_DIRECTORIES\n")
1258 file(APPEND ${FileName} "\${ROOT_LIBRARY_DIR}\n")
1259 file(APPEND ${FileName} ")\n\n")
1260 file(APPEND ${FileName} "link_directories(\${LINK_DIRECTORIES})\n\n")
1262 list(LENGTH PACKCXXFLAGS_SUBDIR definition_length)
1263 if(${definition_length} GREATER 0)
1264 list(REMOVE_DUPLICATES PACKCXXFLAGS_SUBDIR)
1265 file(APPEND ${FileName} "Add_Definitions(\n")
1266 foreach(file ${PACKCXXFLAGS_SUBDIR})
1267 # If(${file} MATCHES LIBHLT)
1268 # STRING(REGEX REPLACE "[(]" "{" file "${file}")
1269 # STRING(REGEX REPLACE "[)]" "}" file "${file}")
1270 # MESSAGE("BLA: ${file}")
1271 # file(APPEND ${FileName} "${${file}}\n")
1273 # Else(${file} MATCHES LIBHLT)
1276 file(APPEND ${FileName} "${file}\n")
1277 # EndIf(${file} MATCHES LIBHLT)
1278 endforeach(file ${CXXSRCS_SUBDIR})
1279 file(APPEND ${FileName} ")\n\n")
1280 endif(${definition_length} GREATER 0)
1282 file(APPEND ${FileName} "SetModule()\n\n")
1283 foreach(file ${PACKAGES})
1284 file(APPEND ${FileName} "include (CMake_${file}.txt)\n\n")
1285 endforeach(file ${PACKAGES})
1286 EndMacro(CreateHLTMainCMakeFile path)
1288 Macro(CreateHLTLibPackageFile path lib)
1290 set(FileName ${path}/CMake_${lib}.txt)
1291 set(AddCSource FALSE)
1292 set(AddFortranSource FALSE)
1294 STRING(REGEX REPLACE "^lib(.*)" "\\1" _lib "${lib}")
1296 file(WRITE ${FileName} "# -*- mode: cmake -*-\n\n")
1298 file(APPEND ${FileName} "set(SRCS)\n\n")
1300 list(LENGTH HDRS_PACKAGE hdrs_length)
1301 if(${hdrs_length} GREATER 0)
1302 file(APPEND ${FileName} "set(HDRS\n")
1303 foreach(file ${HDRS_PACKAGE})
1304 String(STRIP ${file} file)
1305 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
1306 endforeach(file ${HDRS_PACKAGE})
1307 file(APPEND ${FileName} ")\n\n")
1308 endif(${hdrs_length} GREATER 0)
1311 # list(LENGTH CSRCS_PACKAGE c_length)
1312 # if(${c_length} GREATER 0)
1313 # set(AddCSource TRUE)
1314 # file(APPEND ${FileName} "set(CSRCS\n")
1315 # foreach(file ${CSRCS_PACKAGE})
1316 # file(APPEND ${FileName} "${file}\n")
1317 # endforeach(file ${CSRCS_PACKAGE})
1318 # file(APPEND ${FileName} ")\n\n")
1319 # endif(${c_length} GREATER 0)
1321 # list(LENGTH FSRCS_PACKAGE f_length)
1322 # if(${f_length} GREATER 0)
1323 # set(AddFortranSource TRUE)
1324 # file(APPEND ${FileName} "set(FSRCS\n")
1325 # foreach(file ${FSRCS_PACKAGE})
1326 # file(APPEND ${FileName} "${file}\n")
1327 # endforeach(file ${FSRCS_PACKAGE})
1328 # file(APPEND ${FileName} ")\n\n")
1329 # endif(${f_length} GREATER 0)
1333 file(APPEND ${FileName} "# fill list of header files from list of source files\n")
1334 file(APPEND ${FileName} "# by exchanging the file extension\n")
1336 file(APPEND ${FileName} "String(REPLACE \".h\" \".cxx\" SRCS \"\${HDRS}\")\n\n")
1337 list(LENGTH CXXSRCS_PACKAGE _length)
1338 if(${_length} GREATER 0)
1339 file(APPEND ${FileName} "set(SRCS \${SRCS}\n")
1340 foreach(file ${CXXSRCS_PACKAGE})
1341 String(STRIP ${file} file)
1342 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
1343 endforeach(file ${CXXSRCS_PACKAGE})
1344 file(APPEND ${FileName} ")\n\n")
1345 endif(${_length} GREATER 0)
1347 list(LENGTH CXXSRCS_PACKAGE _length)
1348 if(${_length} GREATER 0)
1349 file(APPEND ${FileName} "set(SRCS\n")
1350 foreach(file ${CXXSRCS_PACKAGE})
1351 String(STRIP ${file} file)
1352 file(APPEND ${FileName} "${PACKAGE_DIR}/${file}\n")
1353 endforeach(file ${CXXSRCS_PACKAGE})
1354 file(APPEND ${FileName} ")\n\n")
1355 endif(${_length} GREATER 0)
1359 # file(APPEND ${FileName} "Set(SRCS \${SRCS} \${CSRCS})\n\n")
1361 # If(AddFortranSource)
1362 # file(APPEND ${FileName} "Set(SRCS \${SRCS} \${FSRCS})\n\n")
1363 # EndIf(AddFortranSource)
1365 # list(LENGTH PACKFFLAGS_PACKAGE packf_length)
1366 # if(${packf_length} GREATER 0)
1367 # file(APPEND ${FileName} "SET_SOURCE_FILES_PROPERTIES(\n")
1368 # file(APPEND ${FileName} "${FSRCS} PROPERTIES COMPILE_FLAGS\n")
1369 # file(APPEND ${FileName} "${PACKFFLAGS_PACKAGE}\n")
1370 # file(APPEND ${FileName} ")\n\n")
1371 # endif(${packf_length} GREATER 0)
1374 # file(APPEND ${FileName} "AddHLTLibrary(${_lib} \"\${SRCS}\" \"\${HDRS}\" \"\${DHDR_PACKAGE}\")\n")
1375 file(APPEND ${FileName} "AddHLTLibrary(${_lib} \"\${SRCS}\" \"\${HDRS}\")\n")
1377 # Message("DHDR: ${_lib}, ${DHDR_PACKAGE}")
1378 list(LENGTH DHDR_PACKAGE _length)
1379 If(${_length} EQUAL 0)
1380 # STRING(REGEX REPLACE "^lib(.*)" "\\1" _lib "${lib}")
1381 set(LinkDefFileName ${CMAKE_CURRENT_BINARY_DIR}/${path}/${_lib}LinkDef.h)
1382 # MESSAGE("LINKDEF: ${LinkDefFileName}")
1383 GenerateLinkDefFile(${LinkDefFileName} "${HDRS}")
1384 EndIf(${_length} EQUAL 0)
1386 EndMacro(CreateHLTLibPackageFile path lib)
1388 Macro(CreateHLTBinPackageFile path bin)
1390 set(FileName ${path}/CMake_${bin}.txt)
1391 STRING(REGEX REPLACE "^bin(.*)" "\\1" _bin "${bin}")
1393 file(WRITE ${FileName} "# -*- mode: cmake -*-\n\n")
1395 file(APPEND ${FileName} "set(SRCS)\n\n")
1397 list(LENGTH SRCS_PACKAGE _length)
1398 if(${_length} GREATER 0)
1399 file(APPEND ${FileName} "set(SRCS\n")
1400 foreach(file ${SRCS_PACKAGE})
1401 file(APPEND ${FileName} "${file}\n")
1402 endforeach(file ${SRCS_PACKAGE})
1403 file(APPEND ${FileName} ")\n\n")
1404 endif(${_length} GREATER 0)
1406 list(LENGTH ELIBS_PACKAGE _length)
1407 if(${_length} GREATER 0)
1408 file(APPEND ${FileName} "set(LIBS\n")
1409 foreach(file ${ELIBS_PACKAGE})
1410 file(APPEND ${FileName} "${file}\n")
1411 endforeach(file ${ELIBS_PACKAGE})
1412 file(APPEND ${FileName} ")\n\n")
1413 endif(${_length} GREATER 0)
1415 file(APPEND ${FileName} "AddExecutable(${_bin}exe \"\${SRCS}\" \"\${LIBS}\")\n")
1416 EndMacro(CreateHLTBinPackageFile path bin)
1418 Macro(SpecialHLTSettingsMadeByHand lib)
1419 If(${lib} STREQUAL libAliengui)
1420 list(REMOVE_ITEM CXXSRCS_PACKAGE Aliengui/AliAnalysisGUIdummy.cxx)
1421 EndIf(${lib} STREQUAL libAliengui)
1422 # If(${lib} STREQUAL libTPCmon)
1423 # list(REMOVE_ITEM CXXSRCS_PACKAGE AliTPCMonitorDateMonitor.cxx)
1424 # list(REMOVE_ITEM HDRS_PACKAGE AliTPCMonitorDateMonitor.h)
1425 # EndIf(${lib} STREQUAL libTPCmon)
1426 If(${lib} STREQUAL libRAWDatabase)
1427 list(APPEND HDRS_PACKAGE \${ROOT_INCLUDE_DIR}/TH1F.h)
1428 list(APPEND H_PACKAGE \${ROOT_INCLUDE_DIR}/TH1F.h)
1429 EndIf(${lib} STREQUAL libRAWDatabase)
1430 If(${lib} STREQUAL liblhapdf)
1431 # STRING(REGEX REPLACE "[=]" "\\\\=" PACKCXXFLAGS "${PACKCXXFLAGS}")
1432 # STRING(REGEX REPLACE "[$][(]ALICE_ROOT[)]" "\$ENV{ALICE_ROOT}" PACKCXXFLAGS "${PACKCXXFLAGS}")
1433 EndIf(${lib} STREQUAL liblhapdf)
1434 EndMacro(SpecialHLTSettingsMadeByHand lib)
1436 Macro(GenerateLinkDefFile FileName HDRS)
1437 file(WRITE ${FileName} "//automatically generated ROOT DICT definition\n")
1438 file(APPEND ${FileName} "//!!! DO NOT EDIT THIS FILE !!!\n")
1439 file(APPEND ${FileName} "#ifdef __CINT__\n")
1440 file(APPEND ${FileName} "#pragma link off all globals;\n")
1441 file(APPEND ${FileName} "#pragma link off all classes;\n")
1442 file(APPEND ${FileName} "#pragma link off all functions;\n")
1443 ForEach(file ${HDRS})
1444 String(STRIP ${file} file)
1445 # MESSAGE("${file}")
1446 get_filename_component(_file ${file} NAME_WE)
1447 file(APPEND ${FileName} "#pragma link C++ class ${_file}+;\n")
1448 EndForEach(file ${HDRS})
1449 file(APPEND ${FileName} "#endif\n")
1450 EndMacro(GenerateLinkDefFile FileName HDRS)