CMAKE_MINIMUM_REQUIRED( VERSION 2.4.6 ) PROJECT(TPCCondData) IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) SET(TPC_COND_DATA_STAND_ALONE TRUE) ENDIF() MESSAGE(STATUS "\n-- >>> Processing CMakeLists.txt for ${PROJECT_NAME} ...") IF(TPC_COND_DATA_STAND_ALONE) MESSAGE(STATUS "TPCConddata is build stand-alone.") # Modules for FIND_PACKAGE command of cmake FIND_PACKAGE( ILCUTIL REQUIRED COMPONENTS ILCSOFT_CMAKE_MODULES ) # load default settings from ILCSOFT_CMAKE_MODULES INCLUDE( ilcsoft_default_settings ) ENDIF() # in MarlinTPC two libraries are built, which both should be versioned # so the version definition is swapped to a single file in the tpcconddata project directory INCLUDE ( "TPCCondData_Version" ) # library *nix style versioning SET( ${PROJECT_NAME}_SOVERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}" ) SET( ${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_SOVERSION}.${${PROJECT_NAME}_VERSION_PATCH}" ) # project options OPTION( BUILD_SHARED_LIBS "Set to OFF to build static libraries" ON ) OPTION( BUILD_32BIT_COMPATIBLE "Set to ON to build in 32 bit compatibility mode" OFF ) OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) # For debugging the build: # MESSAGE(STATUS "TPCCondData_INSTALL_PREFIX is ${TPCCondData_INSTALL_PREFIX}" ) # MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}" ) # MESSAGE(STATUS "PROJECT_SOURCE_DIR is ${PROJECT_SOURCE_DIR}" ) # MESSAGE(STATUS "CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}" ) # MESSAGE(STATUS "TPCCondData_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ${TPCCondData_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}" ) # Set the default installation directory to be the source directory. # ------------------------------------------------------------------ # We can't use CMAKE_INSTALL_PREFIX, as it will be modified by MarlinTPC # which causes problems in renewed cmake calls. # The CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT flag is unset in a second # cmake call, but we can test alternatively, if the install prefix was # already defined and set to the project source directory (default behaviour) # in a previous call. # If CMAKE_INSTALL_PREFIX was indeed specified on the command line, it will # be used for MarlinTPC and TPCCondData. IF(DEFINED TPCCondData_INSTALL_PREFIX) IF(TPCCondData_INSTALL_PREFIX STREQUAL PROJECT_SOURCE_DIR) SET(TPCCondData_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT TRUE) ENDIF() ENDIF() IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR TPCCondData_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) SET(TPCCondData_INSTALL_PREFIX ${PROJECT_SOURCE_DIR} CACHE PATH "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." FORCE ) # If we install into the project source directory, there is no need to # copy the include files of TPCCondData: SET(USE_PROJECT_SOURCE_INCLUDE_DIR TRUE) ELSE() SET(TPCCondData_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) ENDIF() MESSAGE(STATUS "TPCCondData_INSTALL_PREFIX is ${TPCCondData_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) #---------------- 32/64 bit issues --------------------------------------- IF( CMAKE_SIZEOF_VOID_P EQUAL 4 ) MESSAGE( STATUS "32 bit architecture detected" ) ENDIF() IF( CMAKE_SIZEOF_VOID_P EQUAL 8 ) MESSAGE( STATUS "64 bit architecture detected" ) IF( BUILD_32BIT_COMPATIBLE ) IF( COMMAND SET_PROPERTY ) SET_PROPERTY(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS 0) SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" ) #SET( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -m32" ) #SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32" ) SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32" ) SET( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32" ) SET( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32" ) ELSE() MESSAGE( FATAL_ERROR "to build in 32 bit compatibility mode you need cmake >= 2.6" ) ENDIF() MESSAGE( STATUS "Build in 32 bit compatibility mode" ) ELSE() MESSAGE( STATUS "Build in native 64 bit mode" ) ENDIF() ENDIF() # Documentation # ------------- FIND_PACKAGE( Doxygen ) IF( DOXYGEN_FOUND ) ADD_CUSTOM_COMMAND( OUTPUT "${PROJECT_SOURCE_DIR}/doc/html" COMMAND "${DOXYGEN_EXECUTABLE}" ARGS "Doxyfile" WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/doc" COMMENT "Building API Documentation..." VERBATIM ) # add doc target ADD_CUSTOM_TARGET( ${PROJECT_NAME}doc DEPENDS "${PROJECT_SOURCE_DIR}/doc/html" ) ELSE() MESSAGE( STATUS "Doxygen not found in your system!!" ) IF( INSTALL_DOC ) MESSAGE( STATUS "INSTALL_DOC forced to OFF" ) SET( INSTALL_DOC OFF ) ENDIF() ENDIF() # install documentation IF( INSTALL_DOC ) # make sure doxygen is executed (make TPCCondDatadoc) before make install INSTALL( CODE "EXEC_PROGRAM(${CMAKE_BUILD_TOOL} ${PROJECT_BINARY_DIR} ARGS ${PROJECT_NAME}doc)" ) # install documentation INSTALL( DIRECTORY "${PROJECT_SOURCE_DIR}/doc" DESTINATION . ) ENDIF() #------------------------------------------------------------------------- #Include LCIO dependency FIND_PACKAGE( LCIO REQUIRED ) include_directories( ${LCIO_INCLUDE_DIRS} ) #Include LCCD dependency FIND_PACKAGE( LCCD REQUIRED ) include_directories( ${LCCD_INCLUDE_DIRS} ) #Include CLHEP dependency FIND_PACKAGE( CLHEP REQUIRED ) include_directories( ${CLHEP_INCLUDE_DIRS} ) # activate relevant source code fractions by adding pre-processor definitions IF( LCCD_FOUND ) ADD_DEFINITIONS( "-DUSE_LCCD" ) ENDIF() # require proper c++ ADD_DEFINITIONS( "-Wall -g -ansi -pedantic" ) ADD_DEFINITIONS( "-Wno-long-long" ) # FIXME add debug definitions - is this still needed? #IF( CMAKE_BUILD_TYPE STREQUAL "Debug" OR # CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" ) # ADD_DEFINITIONS( "-DDEBUG" ) ##ENDIF() # ======================== TPCCondData library ============================== include_directories( ${PROJECT_SOURCE_DIR}/include ) file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) add_library(TPCCondData SHARED ${sources}) TARGET_LINK_LIBRARIES( TPCCondData ${LCIO_LIBRARIES} ) TARGET_LINK_LIBRARIES( TPCCondData ${LCCD_LIBRARIES} ) # only headers are used from CLHEP, so library doesn't need to be linked SET_TARGET_PROPERTIES( TPCCondData PROPERTIES VERSION ${TPCCondData_VERSION} SOVERSION ${TPCCondData_SOVERSION}) #if TPCCondData is build as part of MarlinTPC if( NOT TPC_COND_DATA_STAND_ALONE) MESSAGE (STATUS "TPCCondData being built as part of parent project in ${PROJECT_BINARY_DIR}, export variables ...") SET ( TPCCondData_LIBRARIES TPCCondData PARENT_SCOPE ) SET ( TPCCondData_INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/include PARENT_SCOPE ) SET ( TPCCondData_LIB_DIRS ${TPCCondData_INSTALL_PREFIX}/lib PARENT_SCOPE ) # Make install path of libTPCCondData.so known to other binaries # in the project SET(CMAKE_INSTALL_RPATH ${TPCCondData_INSTALL_PREFIX}/lib PARENT_SCOPE) # Put libraries in a separate lib directory tpcconddata/lib during build set_target_properties(TPCCondData PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) endif() # In case TPCCondData is installed to a different location, one can't use the # include files from the source directory if(NOT USE_PROJECT_SOURCE_INCLUDE_DIR) install(DIRECTORY include/ DESTINATION ${TPCCondData_INSTALL_PREFIX}/include/TPCCondData FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE) endif() # Install the library to lib directory # no binary targets, yet, but who knows ... install(TARGETS TPCCondData RUNTIME DESTINATION ${TPCCondData_INSTALL_PREFIX}/bin LIBRARY DESTINATION ${TPCCondData_INSTALL_PREFIX}/lib ) # Export the package for use from the build-tree # (this registers the build-tree with a global CMake-registry) export(PACKAGE TPCCondData) # Create the TPCCondDataConfig.cmake and TPCCondDataConfigVersion files CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/cmake/TPCCondDataConfig.cmake.in" "${PROJECT_BINARY_DIR}/TPCCondDataConfig.cmake" @ONLY) INSTALL( FILES "${PROJECT_BINARY_DIR}/TPCCondDataConfig.cmake" DESTINATION ${TPCCondData_INSTALL_PREFIX} ) CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/cmake/TPCCondDataConfigVersion.cmake.in" "${PROJECT_BINARY_DIR}/TPCCondDataConfigVersion.cmake" @ONLY) INSTALL( FILES "${PROJECT_BINARY_DIR}/TPCCondDataConfigVersion.cmake" DESTINATION ${TPCCondData_INSTALL_PREFIX} ) MESSAGE(STATUS "<<< Processing CMakeLists.txt for ${PROJECT_NAME} done.\n")