]> git.uio.no Git - u/mrichter/AliRoot.git/blob - cmake/ALICE_CMake.cmake
de3286d0808a4034c66e1e62ee4e04d1288a794f
[u/mrichter/AliRoot.git] / cmake / ALICE_CMake.cmake
1 # AliRoot Build System Utility Macro and Function definitions
2 #
3 # Author: Johny Jose (johny.jose@cern.ch)
4 #         Port of previous Makefile build to cmake
5
6 cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
7
8 macro(ALICE_DevFlagsOutput)
9
10   if(ALICEDEV STREQUAL "YES")
11     message(STATUS "FFLAGS    : ${FFLAGS}")
12     message(STATUS "CXXFLAGS  : ${CXXFLAGS}")
13     message(STATUS "CFLAGS    : ${CFLAGS}")
14     message(STATUS "SOFLAGS   : ${SOFLAGS}")
15     message(STATUS "LDFLAGS   : ${LDFLAGS}")
16     message(STATUS "SHLIB     : ${SHLIB}")
17     message(STATUS "SYSLIBS   : ${SYSLIBS}")
18     message(STATUS "CINTFLAGS : ${CINTFLAGS}")
19   endif(ALICEDEV STREQUAL "YES")
20
21 endmacro(ALICE_DevFlagsOutput)
22
23 function(ALICE_CleanOutput _output input)
24
25   string(REGEX REPLACE "\n" " " clean ${input})
26   set(${_output} ${clean} PARENT_SCOPE)
27
28 endfunction(ALICE_CleanOutput)
29
30 function(ALICE_CorrectPaths _output value )
31
32   set(corrected)
33   foreach(path ${value})
34     set(external)
35     string(REGEX MATCH "^/" external ${path})
36     if(NOT external)
37       list(APPEND corrected "${CMAKE_SOURCE_DIR}/${path}" )
38     else()
39       list(APPEND corrected ${path})
40     endif(NOT external)
41   endforeach(path)
42   set(${_output} ${corrected} PARENT_SCOPE)
43
44 endfunction(ALICE_CorrectPaths)
45
46 function(ALICE_Format _output prefix suffix input)
47
48 # DevNotes - input should be put in quotes or the complete list does not get passed to the function
49   set(format)
50   foreach(arg ${input})
51     set(item ${arg})
52     if(prefix)
53       string(REGEX MATCH "^${prefix}" pre ${arg})
54     endif(prefix)
55     if(suffix)
56       string(REGEX MATCH "${suffix}$" suf ${arg})
57     endif(suffix)
58     if(NOT pre)
59       set(item "${prefix}${item}")
60     endif(NOT pre)
61     if(NOT suf)
62       set(item "${item}${suffix}")
63     endif(NOT suf)
64     list(APPEND format ${item})
65   endforeach(arg)
66   set(${_output} ${format} PARENT_SCOPE)
67
68 endfunction(ALICE_Format)
69
70 function(ALICE_CheckLibraries _output input)
71
72   set(format)
73   foreach(arg ${input})
74     set(item ${arg})
75     string(REGEX MATCH "^(/|-)" preformatted ${item})
76     if(NOT preformatted)
77       set(item "-l${item}")
78     endif(NOT preformatted)
79     list(APPEND format ${item})
80   endforeach(arg)
81   set(${_output} ${format} PARENT_SCOPE)
82   
83 endfunction(ALICE_CheckLibraries)
84
85 function(ALICE_RootConfig _output parameters)
86
87   if(ROOT_CONFIG)
88     execute_process(COMMAND ${ROOT_CONFIG} ${parameters} OUTPUT_VARIABLE result ERROR_VARIABLE error OUTPUT_STRIP_TRAILING_WHITESPACE )
89     if(error)
90       message(FATAL_ERROR "root-config ERROR : ${error}")
91     endif(error)
92     ALICE_CleanOutput(result "${result}")
93     set(${_output} "${result}" PARENT_SCOPE)
94   else()
95     message(FATAL_ERROR "root-config not found")
96   endif(ROOT_CONFIG)
97
98 endfunction(ALICE_RootConfig)
99
100 macro(ALICE_CheckOutOfSourceBuild)
101   
102   #Check if previous in-source build failed
103   if(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles)
104     message(FATAL_ERROR "CMakeCache.txt or CMakeFiles exists in source directory! Please remove them before running cmake $ALICE_ROOT")
105   endif(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles)
106   
107   #Get Real Paths of the source and binary directories
108   get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
109   get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
110   
111   #Check for in-source builds
112   if(${srcdir} STREQUAL ${bindir})
113     message(FATAL_ERROR "AliRoot cannot be built in-source! Please run cmake $ALICE_ROOT outside the source directory")
114   endif(${srcdir} STREQUAL ${bindir})
115
116 endmacro(ALICE_CheckOutOfSourceBuild)
117
118 macro(ALICE_ConfigureCompiler)
119
120   if(ALIDEBUG STREQUAL "YES")
121     set(ALICE_TARGET ${ALICE_TARGET}DEBUG)
122     message("Befor ${CXXFLAGS}")
123     string(REGEX MATCHALL "-O[^ ]*" FFLAGS ${FFLAGS})
124     string(REGEX MATCHALL "-O[^ ]*" CXXFLAGS ${CXXFLAGS})
125     message("After ${CXXFLAGS}")
126     string(REGEX MATCHALL "-O[^ ]*" CFLAGS ${CFLAGS})
127     string(REGEX MATCHALL "-O[^ ]*" SOFLAGS ${SOFLAGS})
128     string(REGEX MATCHALL "-O[^ ]*" LDFLAGS ${LDFLAGS})
129     set(FFLAGS "-g ${FFLAGS}")
130     set(CXXFLAGS "-g ${CXXFLAGS}")
131     set(CFLAGS "-g ${CFLAGS}")
132     set(SOFLAGS "-g ${SOFLAGS}")
133     set(LDFLAGS "-g ${LDFLAGS}")
134   endif(ALIDEBUG STREQUAL "YES")
135
136   if(ALIPROFILE STREQUAL "YES")
137     set(ALICE_TARGET ${ALICE_TARGET}PROF)
138     set(FFLAGS "-pg ${FFLAGS}")
139     set(CXXFLAGS "-pg ${CXXFLAGS}")
140     set(CFLAGS "-pg ${CFLAGS}")
141     set(SOFLAGS "-pg ${SOFLAGS}")
142     set(LDFLAGS "-pg ${LDFLAGS}")
143   endif(ALIPROFILE STREQUAL "YES")
144
145   ALICE_RootConfig(RCFLAGS --auxcflags)
146   ALICE_RootConfig(RLFLAGS --ldflags)
147
148   set(CXXFLAGS "${CXXFLAGS} ${RCFLAGS}")
149   set(CFLAGS  "${CFLAGS} ${RCFLAGS}")
150   set(SOFLAGS "${SOFLAGS} ${RLFLAGS}")
151   set(LDFLAGS "${LDFLAGS} ${RLFLAGS}")
152
153   if(NOT ALICXXWARN STREQUAL "NO")
154     set(CXXFLAGS "${CXXFLAGS} ${CXXWARN}")
155   endif(NOT ALICXXWARN STREQUAL "NO")
156
157   set(CXXFLAGS "${DATEFLAGS} ${CXXFLAGS}")
158   set(CFLAGS "${DATEFLAGS} ${CFLAGS}")
159   set(CINTFLAGS "${DATEFLAGS}")
160
161 endmacro(ALICE_ConfigureCompiler)
162
163 macro(ALICE_ConfigurePlatform)
164   
165   ALICE_GetTarget()
166   include("CMake${ALICE_TARGET}")
167   
168 endmacro(ALICE_ConfigurePlatform)
169
170 macro(ALICE_GetTarget)
171   
172   #Set ALICE_TARGET if it has not been set yet
173   if(NOT ALICE_TARGET)  
174     set(ALICE_TARGET $ENV{ALICE_TARGET})
175     #If ALICE_TARGET is not defined assign default values
176     if(NOT ALICE_TARGET)
177       message(WARNING "Environment variable ALICE_TARGET is not set ! Setting to default value.")
178       ALICE_RootConfig(ALICE_TARGET --arch)
179       message("ALICE_TARGET set to ${ALICE_TARGET}")
180     endif(NOT ALICE_TARGET)
181   endif(NOT ALICE_TARGET)
182
183 endmacro(ALICE_GetTarget) 
184
185 macro(ALICE_ResetPackage)
186
187   set(MODDIR ${MODULE})
188   set(MODDIRI ${PROJECT_SOURCE_DIR}/${MODULE})
189
190   set(SRCS)
191   set(HDRS)
192   set(FSRCS)
193   set(DHDR)
194   set(CSRCS)
195   set(CHDRS)
196   set(EINCLUDE)
197   set(EDEFINE)
198   set(ELIBS)
199   set(ELIBSDIR)
200   set(PACKFFLAGS)
201   set(PACKCXXFLAGS)
202   set(PACKCFLAGS)
203   set(PACKDYFLAGS)
204   set(PACKSOFLAGS)
205   set(PACKLDFLAGS)
206   set(PACKBLIBS)
207   set(EXPORT)
208   set(EHDRS)
209   set(CINTHDRS)
210   set(CINTAUTOLINK)
211   set(ARLIBS)
212   set(SHLIBS)
213
214   #HLT Variables
215   set(MODULE_HDRS)
216   set(MODULE_SRCS)
217   set(MODULE_DHDR)
218   set(CLASS_HDRS)
219   set(LIBRARY_DEP)
220   set(HLTDEFS)
221   set(HLTSOFLAGS) 
222
223
224   set(PSRCS)
225   set(PHDRS)
226   set(PFSRCS)
227   set(PDHDR)
228   set(PCSRCS)
229   set(PCHDRS)
230   set(PEINCLUDE)
231   set(PEDEFINE)
232   set(PELIBS)
233   set(PELIBSDIR)
234   set(PPACKFFLAGS)
235   set(PPACKCXXFLAGS)
236   set(PPACKCFLAGS)
237   set(PPACKDYFLAGS)
238   set(PPACKSOFLAGS)
239   set(PPACKLDFLAGS)
240   set(PPACKBLIBS)
241   set(PEXPORT)
242   set(PEHDRS)
243   set(PCINTHDRS)
244   set(PCINTAUTOLINK)
245   set(PARLIBS)
246   set(PSHLIBS)
247   set(PDS)
248
249 endmacro(ALICE_ResetPackage)
250
251 function(ALICE_SetPackageVariable _var ext setvalue unsetvalue )
252
253 #DevNotes - setvalue and unsetcalue should both be put in quotes or cmake throws an error if they have undefined values
254   if(setvalue)
255     set(${_var} ${setvalue} PARENT_SCOPE)
256     set(${PACKAGE}${ext} ${setvalue} PARENT_SCOPE)
257   else()
258     set(${_var} ${unsetvalue} PARENT_SCOPE)
259     set(${PACKAGE}${ext} ${unsetvalue} PARENT_SCOPE)
260   endif(setvalue)
261
262 endfunction(ALICE_SetPackageVariable)
263
264 macro(ALICE_BuildPackage)
265  
266   list(APPEND EINCLUDE STEER) 
267
268   ALICE_SetPackageVariable(PFFLAGS "FFLAGS" "${PACKFFLAGS}" "${FFLAGS}")
269   ALICE_SetPackageVariable(PCFLAGS "CFLAGS" "${PACKCFLAGS}" "${CFLAGS}")
270   ALICE_SetPackageVariable(PCXXFLAGS "CXXFLAGS" "${PACKCXXFLAGS}" "${CXXFLAGS}")
271   ALICE_SetPackageVariable(PSOFLAGS "SOFLAGS" "${PACKSOFLAGS}" "${SOFLAGS}")
272   ALICE_SetPackageVariable(PLDFLAGS "LDFLAGS" "${PACKLDFLAGS}" "${LDFLAGS}")
273   ALICE_SetPackageVariable(PDCXXFLAGS "DCXXFLAGS" "${PACKDCXXFLAGS}" "${CXXFLAGSNO}")
274   ALICE_SetPackageVariable(PBLIBS "BLIBS" "${PACKBLIBS}" "${LIBS}")
275
276   set(WITHDICT)
277   if(DHDR OR CINTAUTOLINK)
278     set(WITHDICT TRUE)
279   endif(DHDR OR CINTAUTOLINK)
280
281   ALICE_SetPackageVariable(PEDEFINE "EDEFINE" "${EDEFINE}" "${EDEFINE}")
282   ALICE_SetPackageVariable(PEXPORT "EXPORT" "${EXPORT}" "${EXPORT}")
283   ALICE_SetPackageVariable(PEXPORTDEST "EXPORTDEST" "${CMAKE_INCLUDE_EXPORT_DIRECTORY}" "${CMAKE_INCLUDE_EXPORT_DIRECTORY}")
284   ALICE_SetPackageVariable(PINC "INC" "${EINCLUDE};${MODULE}" "${EINCLUDE};${MODULE}")
285   ALICE_SetPackageVariable(PELIBS "ELIBS" "${ELIBS}" "${ELIBS}")
286   ALICE_SetPackageVariable(PELIBSDIR "ELIBSDIR" "${ELIBSDIR}" "${ELIBSDIR}")
287   
288   ALICE_SetPackageVariable(PCS "CS" "${CSRCS}" "${CSRCS}")
289   ALICE_SetPackageVariable(PCH "CH" "${CHDRS}" "${CHDRS}")
290   
291   ALICE_SetPackageVariable(PFS "FS" "${FSRCS}" "${FSRCS}")
292
293   ALICE_SetPackageVariable(PS "S" "${SRCS}" "${SRCS}")
294   ALICE_SetPackageVariable(PH "H" "${HDRS} ${EHDRS}" "${HDRS} ${EHDRS}")
295   ALICE_SetPackageVariable(PCINTHDRS "CINTHDRS" "${CINTHDRS}" "${PH}")
296   
297   string( REPLACE ".h" "" PCINTCLASSES "${PCINTHDRS}")
298   set ( ${PACKAGE}CINTCLASSES ${PCINTCLASSES})
299
300   ALICE_SetPackageVariable(PDH "DH" "${DHDR}" "")
301
302   if(CINTAUTOLINK)
303     ALICE_SetPackageVariable(PDAL "DAL" "${CMAKE_CURRENT_BINARY_DIR}/G__${PACKAGE}AutoLinkDef.h" "${CMAKE_CURRENT_BINARY_DIR}/G__${PACKAGE}AutoLinkDef.h")
304     ALICE_SetPackageVariable(PDH "DH" "${PDAL}" "${PDAL}")
305     ALICE_GenerateLinkDef()
306   endif(CINTAUTOLINK)
307
308   if(lib)
309     list(APPEND PMLIBS ${PACKAGE})
310     list(APPEND ALLLIBS ${PACKAGE})
311     list(APPEND PMALIBS ${PACKAGE}_a)
312     list(APPEND ALLALIBS ${PACKAGE}_a)
313     list(APPEND BINLIBS ${PACKAGE})
314   else()
315     list(APPEND ALLEXECS ${PACKAGE})
316   endif(lib)
317   set(${MODULE}ALIBS "${PMALIBS}" PARENT_SCOPE)
318   set(${MODULE}LIBS "${PMLIBS}" PARENT_SCOPE)
319   set(${MODULE}INC "${EINCLUDE}" PARENT_SCOPE)
320   list(APPEND INCLUDEFILES ${PEXPORTDEST})
321   ALICE_CopyHeaders()
322   if(WITHDICT)  
323     ALICE_SetPackageVariable(PDS "DS" "G__${PACKAGE}.cxx" "G__${PACKAGE}.cxx")
324     ALICE_GenerateDictionary()
325   else()
326     if(lib)
327       message(STATUS "No dictionary generated for ${PACKAGE}")  
328     endif(lib)
329   endif(WITHDICT)
330   
331   if(PS OR PCS OR PFS)
332     if(lib)
333       ALICE_BuildLibrary()
334     elseif(bin)
335       ALICE_BuildExecutable()
336     endif(lib)
337   endif(PS OR PCS OR PFS)
338
339 endmacro(ALICE_BuildPackage)
340
341
342 macro(ALICE_BuildModule)
343
344   add_definitions(-D_MODULE="${MODULE}")
345   foreach(PACKAGEFILE ${PACKAGES})
346       set(lib)
347       set(bin)
348       string(REGEX MATCH "CMakelib" lib ${PACKAGEFILE})
349       string(REGEX MATCH "CMakebin" bin ${PACKAGEFILE})
350       get_filename_component(PACKAGE ${PACKAGEFILE} NAME)
351       string(REGEX REPLACE "^CMake(lib|bin)(.*)\\.pkg" "\\2" PACKAGE ${PACKAGE})
352       if(ALICEDEV)
353         message("Adding package ${PACKAGE} in ${MODULE}")
354       endif(ALICEDEV)
355       ALICE_ResetPackage()
356       include(${PACKAGEFILE})
357       ALICE_BuildPackage()
358      
359       get_property(EXCLUDEPACKAGE TARGET ${PACKAGE} PROPERTY EXCLUDE_FROM_ALL) 
360       if(NOT EXCLUDEPACKAGE)
361         install(TARGETS ${PACKAGE} 
362                 RUNTIME DESTINATION bin
363                 LIBRARY DESTINATION lib
364                 ARCHIVE DESTINATION bin)
365       endif(NOT EXCLUDEPACKAGE)
366   endforeach(PACKAGEFILE)
367
368 endmacro(ALICE_BuildModule)
369
370 macro(ALICE_GenerateDictionary)
371  
372   if(ALICEDEV STREQUAL "YES")
373     message("Generating Dictionary rule for ${PACKAGE}")
374     message("${ROOTCINT} -f ${PDS} -c ${PEDEFINE} ${CINTFLAGS} ${PINC} ${PCINTHDRS} ${PDH}")
375   endif(ALICEDEV STREQUAL "YES")
376  
377   # Split up all arguments
378
379   set(DEDEFINE ${PEDEFINE})
380   set(DCINTFLAGS ${CINTFLAGS})
381   set(DINC ${PINC})
382   set(DCINTHDRS ${PCINTHDRS})
383   set(DDH ${PDH})
384   separate_arguments(DEDEFINE)
385   separate_arguments(DCINTFLAGS)
386   separate_arguments(DINC)
387   separate_arguments(DCINTHDRS)
388   separate_arguments(DDH)
389   # Format neccesary arguments
390   ALICE_Format(DINC "-I" "" "${DINC};${CMAKE_INCLUDE_EXPORT_DIRECTORY}")
391   set_source_files_properties(${PDS} PROPERTIES GENERATED TRUE)
392   add_custom_command(OUTPUT  ${PDS}
393                      COMMAND cd ${PROJECT_SOURCE_DIR} && ${ROOTCINT} -f ${CMAKE_CURRENT_BINARY_DIR}/${PDS} -c -D_MODULE=\\\"${MODULE}\\\" ${DEDEFINE} ${DCINTFLAGS} ${DINC} ${DCINTHDRS} ${DDH}
394                      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
395                      DEPENDS ${DCINTHDRS} ${DDH}
396                      )
397   add_custom_target(G${PACKAGE})
398   add_dependencies(G${PACKAGE} ${PDS})
399
400 endmacro(ALICE_GenerateDictionary)
401
402 macro(ALICE_BuildLibrary)
403
404   ALICE_DevFlagsOutput()
405   set(CMAKE_CXX_FLAGS "${PEDEFINE} ${PCXXFLAGS}")
406   set(CMAKE_C_FLAGS "${PEDEFINE} ${PCFLAGS}")
407   set(CMAKE_Fortran_FLAGS ${PEDEFINE} ${PFFLAGS})
408   set(CMAKE_SHARED_LINKER_FLAGS ${PSOFLAGS}) 
409   set(CMAKE_MODULE_LINKER_FLAGS ${PLDFLAGS})
410   
411   
412   separate_arguments(PINC)
413   separate_arguments(EINCLUDE)
414   separate_arguments(PELIBSDIR)
415   separate_arguments(PBLIBS)
416   separate_arguments(PELIBS)
417   separate_arguments(SHLIB)
418
419   ALICE_Format(PELIBSDIR "-L" "" "${PELIBSDIR}")
420   ALICE_CheckLibraries(PBLIBS "${PBLIBS}")
421   ALICE_CheckLibraries(PELIBS "${PELIBS}")
422
423   ALICE_CorrectPaths(EINCLUDE "${EINCLUDE}")
424   ALICE_CorrectPaths(PINC "${PINC}")
425
426   include_directories(SYSTEM ${ROOTINCDIR})
427   include_directories(${PINC})  
428   include_directories(${EINCLUDE})
429   include_directories(${CMAKE_INCLUDE_EXPORT_DIRECTORY})
430   
431   add_library(${PACKAGE} SHARED ${PCS} ${PFS} ${PS} ${PDS})
432   
433
434   if(PELIBS OR SHLIB)
435     target_link_libraries(${PACKAGE} ${PELIBSDIR} ${PELIBS} ${SHLIB})
436   endif(PELIBS OR SHLIB)
437   
438   add_dependencies(${MODULE}-all ${PACKAGE})
439      
440   add_library(${PACKAGE}_a STATIC EXCLUDE_FROM_ALL ${PCS} ${PFS} ${PS} ${PDS})
441   if(PELIBS OR ALLIB)
442     target_link_libraries(${PACKAGE}_a ${PELIBSDIR} ${PELIBS} ${ALLIB})
443   endif(PELIBS OR ALLIB)
444
445   add_dependencies(${MODULE}-static ${PACKAGE}_a)
446   if(ALIPROFILE STREQUAL "YES")
447     add_dependencies(${MODULE}-all ${MODULE}-static)
448   endif(ALIPROFILE STREQUAL "YES")
449
450   list(FIND EXCLUDEMODULES ${MODULE} RESULT)
451   if(NOT RESULT STREQUAL "-1")
452     message(STATUS "${MODULE} will not be built by default. Type make ${MODULE}-all to build.")
453     set_property(TARGET ${PACKAGE} PROPERTY EXCLUDE_FROM_ALL TRUE)
454   endif(NOT RESULT STREQUAL "-1")
455
456 endmacro(ALICE_BuildLibrary)
457
458 macro(ALICE_BuildExecutable)
459
460   ALICE_DevFlagsOutput()
461   set(CMAKE_CXX_FLAGS "${PEDEFINE} ${PCXXFLAGS} ${EXEFLAGS}")
462   set(CMAKE_C_FLAGS "${PEDEFINE} ${PCFLAGS} ${EXEFLAGS}")
463   set(CMAKE_Fortran_FLAGS "${PEDEFINE} ${PFFLAGS} ${EXEFLAGS}")
464   set(CMAKE_SHARED_LINKER_FLAGS ${PSOFLAGS}) 
465   set(CMAKE_MODULE_LINKER_FLAGS ${PLDFLAGS})
466   
467   separate_arguments(PINC)
468   separate_arguments(EINCLUDE)
469   separate_arguments(PELIBSDIR)
470   separate_arguments(PBLIBS)
471   separate_arguments(PELIBS)
472   separate_arguments(SHLIB)
473
474   ALICE_Format(PELIBSDIR "-L" "" "${PELIBSDIR}")
475   ALICE_CheckLibraries(PBLIBS "${PBLIBS}")
476   #ALICE_CheckLibraries(PELIBS "${PELIBS}")
477
478   ALICE_CorrectPaths(EINCLUDE "${EINCLUDE}")
479   ALICE_CorrectPaths(PINC "${PINC}")
480
481   include_directories(SYSTEM ${ROOTINCDIR})
482   include_directories(${PINC})  
483   include_directories(${EINCLUDE})
484   include_directories(${CMAKE_INCLUDE_EXPORT_DIRECTORY})
485
486   if(ALIPROFILE STREQUAL "YES")
487     add_executable(${PACKAGE} ${PFS} ${PCS} ${PS} ${PDS})
488     if(ARLIBS OR SHLIBS OR PBLIBS OR EXEFLAGS)
489       target_link_libraries(${PACKAGE} ${ARLIBS} ${SHLIBS} ${PBLIBS} ${EXEFLAGS})
490     endif(ARLIBS OR SHLIBS OR PBLIBS OR EXEFLAGS)
491     add_dependencies(${MODULE}-all ${PACKAGE})
492   else()
493     add_executable(${PACKAGE} ${PFS} ${PCS} ${PS} ${PDS})
494     if(PELIBS OR PBLIBS OR EXEFLAGS)
495       target_link_libraries(${PACKAGE} ${BINLIBDIRS} ${PELIBSDIR} ${PELIBS} ${PBLIBS} ${EXEFLAGS})
496     endif(PELIBS OR PBLIBS OR EXEFLAGS)
497     add_dependencies(${MODULE}-all ${PACKAGE})
498   endif(ALIPROFILE STREQUAL "YES")
499
500   list(FIND EXCLUDEMODULES ${MODULE} RESULT)
501   if(NOT RESULT STREQUAL "-1")
502     set_property(TARGET ${PACKAGE} PROPERTY EXCLUDE_FROM_ALL TRUE)
503   endif(NOT RESULT STREQUAL "-1")
504
505 endmacro(ALICE_BuildExecutable)
506
507 macro(ALICE_CopyHeaders)
508   
509   if(NOT EXPORT )
510     set(HEADERS)
511   else()
512     set(HEADERS ${EXPORT})
513   endif(NOT EXPORT)
514   foreach(header ${HEADERS})
515       configure_file(${header} ${PEXPORTDEST} COPYONLY)
516       install(FILES ${header} DESTINATION include)
517   endforeach(header)
518
519 endmacro(ALICE_CopyHeaders)
520
521 macro(ALICE_GenerateLinkDef)
522
523   file (WRITE ${PDAL} "//--------------------------------------------------------------------------------\n")
524   file (APPEND ${PDAL} "// This is an automatically generated Root Dictionary Linkdef file for ${PACKAGE}\n")
525   file (APPEND ${PDAL} "// !!! DO NOT EDIT THIS FILE !!!\n")
526   file (APPEND ${PDAL} "#ifdef __CINT__\n")
527   file (APPEND ${PDAL} "#pragma link off all globals;\n")
528   file (APPEND ${PDAL} "#pragma link off all classes;\n")
529   file (APPEND ${PDAL} "#pragma link off all functions;\n")
530   foreach (class ${PCINTCLASSES})
531     get_filename_component(classname ${class} NAME)
532     file(APPEND ${PDAL} "#pragma link C++ class ${classname}+;\n")
533   endforeach(class)
534   file (APPEND ${PDAL} "#endif\n")
535 endmacro(ALICE_GenerateLinkDef)