CMakeLists.txt 4.07 KB
Newer Older
Stezowski Olivier's avatar
Stezowski Olivier committed
1 2 3
# CMake for GammaWare/GEM
# O. Stezowski
#
4 5 6 7 8
# To add a file, add it in the with_dictionnary list or in the without_dictionnary list depending
#  whether or not the ROOT dictionnary is to be generated.
#  !! Do not forget to fill the LinkDef file !!
#  !! Do not forget to add EXTRA_INTERNAL_LIBRARIES and EXTRA_EXTERNAL_LIBRARIES with the names of the libraries this one relies on !!
#
Stezowski Olivier's avatar
Stezowski Olivier committed
9 10 11 12 13 14
project (gem)
#
MESSAGE("[GW]  + root/${PROJECT_NAME}")
#
#
set(GWLIBNAME GWGEM)
15

Stezowski Olivier's avatar
Stezowski Olivier committed
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#
# headers / dictionnary / sources 
# 
# so far no automatic methods for computing which class has a dictionnary or not
# manual method : base file name separated in two lists with different treatment.
#
set( with_dictionnaries
	BaseFilter
	BaseGEM
	GEM
	GammaFilter
)
set( without_dictionnaries
	EvapLMOF
	GeantLMOF
	TestFeeding
)	
# add includes : root + current (before to have the latest) + all gw includes copied in CMAKE_BINARY_DIR/include 
#
include_directories(${ROOT_INCLUDES})
include_directories(${CMAKE_BINARY_DIR}/include)
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR})
#
set (ALL_GW_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR}/include ${ROOT_INCLUDES}) 
#
link_directories(${ROOT_LIBRARY_DIR})
link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
#
# headers / linkdef etc ... 
#
set(headers "")
set(all_headers "")
set(sources "")
#
# set headers/ etc and generate dictionnary for the files which require it 
#
foreach( f ${with_dictionnaries} )
53 54
	set(sources ${sources} ${CMAKE_CURRENT_SOURCE_DIR}/${f}.cpp)	
	set(headers ${headers} ${CMAKE_CURRENT_SOURCE_DIR}/${f}.h)
Stezowski Olivier's avatar
Stezowski Olivier committed
55
endforeach()
56 57 58 59

#
# Dictionnary from one file only 'a la ROOT' + internal and external dependencies
#
60 61 62 63 64 65 66
ROOT_GENERATE_DICTIONARY(G__${GWLIBNAME} ${headers} MODULE ${GWLIBNAME} LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/LinkDef.h OPTIONS "")
find_library(ISMATHMORE MathMore PATHS $ENV{ROOTSYS}/lib)
if(NOT ISMATHMORE)
    MESSAGE("[GW-GEM] Compiled without MathMore")
else()
set( EXTRA_EXTERNAL_LIBRARIES MathMore )
    MESSAGE("[GW-GEM] Compiled with MathMore")
67
endif()
68
set(EXTRA_INTERNAL_LIBRARIES GWTOOLS GWSYSTEM )
69

Stezowski Olivier's avatar
Stezowski Olivier committed
70 71
#
foreach( f ${without_dictionnaries} )
72 73
    set(sources ${sources} ${CMAKE_CURRENT_SOURCE_DIR}/${f}.cpp)
    set(headers ${headers} ${CMAKE_CURRENT_SOURCE_DIR}/${f}.h)
Stezowski Olivier's avatar
Stezowski Olivier committed
74 75 76 77 78 79 80
endforeach()


#----------------------------------------------------------------------------
#
# Use root functions to generate the library and the root map file 
#
81 82 83 84 85 86
if ( with_dictionnaries )
    ROOT_LINKER_LIBRARY(${GWLIBNAME} ${sources} G__${GWLIBNAME}.cxx DEPENDENCIES ${EXTRA_INTERNAL_LIBRARIES} ${EXTRA_EXTERNAL_LIBRARIES})
    ROOT_GENERATE_ROOTMAP(${GWLIBNAME} LINKDEF ${CMAKE_CURRENT_SOURCE_DIR}/LinkDef.h DEPENDENCIES ${EXTRA_INTERNAL_LIBRARIES} ${EXTRA_EXTERNAL_LIBRARIES})
else ()
    ROOT_LINKER_LIBRARY(${GWLIBNAME} ${sources} DEPENDENCIES ${EXTRA_INTERNAL_LIBRARIES} ${EXTRA_EXTERNAL_LIBRARIES})
endif()
Stezowski Olivier's avatar
Stezowski Olivier committed
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#
# copy headers file in a single directory	so that is becomes available for ohers sub-projects
#	 	
# because cmake2.6 does not provide COPY in file, do it another way
if( ${CMAKE_VERSION} VERSION_GREATER "2.8.0" )
  file(COPY ${headers} DESTINATION ${CMAKE_BINARY_DIR}/include)	
else()
  if ( EXISTS ${CMAKE_BINARY_DIR}/include )
  else()
    execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/ )
  endif()
  foreach ( f ${headers} )
    execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${f} ${CMAKE_BINARY_DIR}/include/ )
  endforeach()
endif()	
#		
# Install lib and headers 
#
install(TARGETS ${GWLIBNAME} RUNTIME DESTINATION bin
								LIBRARY DESTINATION lib
								ARCHIVE DESTINATION lib
								COMPONENT libraries)
#
110 111
install(FILES ${headers} DESTINATION ${GW_INCLUDE_DIR} COMPONENT headers )
if ( with_dictionnaries )
112
    install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${GWLIBNAME}_rdict.pcm DESTINATION lib COMPONENT libraries )
113 114 115
    install(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/lib${GWLIBNAME}.rootmap DESTINATION lib COMPONENT libraries )
endif()

Stezowski Olivier's avatar
Stezowski Olivier committed
116 117 118 119 120 121 122 123 124