From 3843f02dc8a23b063cda3df036017490038beffc Mon Sep 17 00:00:00 2001 From: Markus Frank <markus.frank@cern.ch> Date: Wed, 29 Jul 2015 15:30:52 +0000 Subject: [PATCH] New build scripts. BE CAREFUL before updating. --- CMakeLists.txt | 180 ++-- DDAlign/CMakeLists.txt | 47 +- DDAlign/include/DDAlign/AlignmentStack.h | 7 +- DDAlign/src/AlignmentCache.cpp | 10 +- DDAlign/src/AlignmentOperators.cpp | 4 +- DDAlign/src/AlignmentStack.cpp | 7 +- DDCond/CMakeLists.txt | 49 +- DDCond/include/DDCond/ConditionsStack.h | 7 +- DDCond/src/ConditionsParser.cpp | 7 +- DDCond/src/ConditionsStack.cpp | 9 +- DDCore/CMakeLists.txt | 96 +- DDCore/include/DD4hep/Memory.h | 39 +- DDDetectors/CMakeLists.txt | 40 +- DDEve/CMakeLists.txt | 82 +- DDEve/include/DDEve/ElementList.h | 4 +- DDEve/include/DDEve/View.h | 4 +- DDEve/src/Display.cpp | 2 +- DDEve/src/ElementList.cpp | 2 +- DDEve/src/MultiView.cpp | 4 +- DDEve/src/View.cpp | 4 +- DDEve/src/ViewMenu.cpp | 4 +- DDG4/CMakeLists.txt | 124 +-- DDG4/lcio/LCIOSDTestActions.cpp | 1 + DDRec/CMakeLists.txt | 91 +- DDSegmentation/CMakeLists.txt | 4 +- DDSegmentation/src/CartesianGridXY.cpp | 2 +- DDSegmentation/src/CartesianGridXYZ.cpp | 12 +- DDSegmentation/src/CartesianGridXZ.cpp | 10 +- DDSegmentation/src/CartesianGridYZ.cpp | 10 +- DDSegmentation/src/PolarGridRPhi.cpp | 2 +- DDSegmentation/src/PolarGridRPhi2.cpp | 2 +- DDSurfaces/CMakeLists.txt | 63 +- DDTest/CMakeLists.txt | 118 +-- UtilityApps/CMakeLists.txt | 76 +- cmake/DD4hep.cmake | 72 +- cmake/DD4hepBuild.cmake | 1158 ++++++++++++++++++++++ cmake/DD4hepConfig.cmake.in | 36 +- cmake/FindROOT.cmake | 48 +- cmake/run_test_package.sh | 4 +- cmake/thisdd4hep_package.sh.in | 30 +- doc/CompileAllOptionPermutations.sh | 61 ++ doc/release.notes | 12 +- examples/AlignDet/CMakeLists.txt | 150 +-- examples/CLICSiD/CMakeLists.txt | 130 +-- examples/CMakeLists.txt | 49 +- examples/ClientTests/CMakeLists.txt | 148 +-- examples/SimpleDetector/CMakeLists.txt | 26 +- 47 files changed, 1796 insertions(+), 1251 deletions(-) create mode 100644 cmake/DD4hepBuild.cmake create mode 100755 doc/CompileAllOptionPermutations.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index a9b516ed4..ba15aea2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,141 +1,89 @@ cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -project(DD4hep) - -# project version +set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) +# +include ( DD4hepBuild ) # +# project version (Major,minor,patch) # Use the same version numbers in DDSegmentaion/CmakeLists.txt # -SET( DD4hep_VERSION_MAJOR 0 ) -SET( DD4hep_VERSION_MINOR 14 ) -SET( DD4hep_VERSION_PATCH 0 ) - -SET( DD4hep_VERSION "${DD4hep_VERSION_MAJOR}.${DD4hep_VERSION_MINOR}" ) -SET( DD4hep_SOVERSION "${DD4hep_VERSION_MAJOR}.${DD4hep_VERSION_MINOR}" ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - -#------------- set the default installation directory to be the source directory - -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH - "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." - FORCE ) - MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - +dd4hep_set_version(DD4hep MAJOR 0 MINOR 14 PATCH 0) +dd4hep_configure_output( OUTPUT "${PROJECT_BINARY_DIR}" INSTALL "${CMAKE_INSTALL_PREFIX}" ) #---Options------------------------------------------------------------------------- - -option(DD4HEP_USE_XERCESC "Enable 'Detector Builders' based on XercesC" OFF) -option(DD4HEP_USE_PYROOT "Enable 'Detector Builders' based on PyROOT" OFF) # does not work (compile error) -option(DD4HEP_USE_GEANT4 "Enable the simulation part based on Geant4" OFF) -option(DD4HEP_USE_GEAR "Build gear wrapper for backward compatibility" OFF) -option(DD4HEP_USE_LCIO "Build lcio extensions" OFF) -option(BUILD_TESTING "Enable and build tests" ON) -option(DD4HEP_USE_CXX11 "Build DD4hep using c++11" OFF) - +option(DD4HEP_USE_XERCESC "Enable 'Detector Builders' based on XercesC" OFF) +option(DD4HEP_USE_PYROOT "Enable 'Detector Builders' based on PyROOT" OFF) # does not work (compile error) +option(DD4HEP_USE_GEANT4 "Enable the simulation part based on Geant4" OFF) +option(DD4HEP_USE_GEAR "Build gear wrapper for backward compatibility" OFF) +option(DD4HEP_USE_LCIO "Build lcio extensions" OFF) +option(BUILD_TESTING "Enable and build tests" ON) +option(DD4HEP_USE_CXX11 "Build DD4hep using c++11" OFF) #--------------------------------------------------------------------------------------------------- #fg: moved to here from DD4hep.cmake to not force CMAKE_CXX_FLAGS upon dependent packages if(DD4HEP_USE_CXX11) - SET( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic -Wno-long-long -Wdeprecated -Wformat-security -Wshadow") + SET( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated") ADD_DEFINITIONs(-DDD4HEP_USE_CXX11) else() - SET( CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wno-long-long") + SET( CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated") endif() - -add_definitions(-DBOOST_SPIRIT_USE_PHOENIX_V3) - +# #----------------------------------------------------------------------------------------------------- - -#For backward compatibility for now -IF( DEFINED DD4HEP_WITH_GEANT4 ) - SET ( DD4HEP_USE_GEANT4 ${DD4HEP_WITH_GEANT4} ) -ENDIF() - -IF( DEFINED DD4HEP_WITH_GEAR ) - SET ( DD4HEP_USE_GEAR ${DD4HEP_WITH_GEAR} ) -ENDIF() - - -#--------------------------------------------------------------------------------------- +# if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set (CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() +# +# No Relex library present for ROOT 6 +# +find_package(ROOT REQUIRED) +message(STATUS "ROOT_VERSION_MAJOR: ${ROOT_VERSION_MAJOR}" ) +if ( ${ROOT_VERSION_MAJOR} GREATER 5 ) + set(DD4HEP_NO_REFLEX ON) + add_subdirectory(GaudiPluginService) +endif() #---DD4hep functions and macros ------------------------------------------------------- include(DD4hep) -include( DD4hepMacros ) +include(DD4hepMacros) -#----------------------------- - -find_package(ROOT REQUIRED) -include_directories( SYSTEM ${ROOT_INCLUDE_DIR} ) +IF( DEFINED DD4HEP_WITH_GEANT4 OR DEFINED DD4HEP_WITH_GEAR ) + dd4hep_print_cmake_options( OPTIONAL "Obsolete options: only the following are allowed:" ERROR 1 ) +ENDIF() +#----------------------------- ##checks for xercesc or not and sets up the include_directories include(DD4hep_XML_setup) -if(DD4HEP_USE_GEANT4) - set( DD4HEP_USE_BOOST On) - message( STATUS " *** finding BOOST .... " ) - find_package( Boost REQUIRED ) - include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ) - add_definitions( -DDD4HEP_USE_BOOST ) -endif() - -if(DD4HEP_USE_LCIO) - find_package( LCIO REQUIRED ) - include_directories( SYSTEM ${LCIO_INCLUDE_DIRS} ) -endif() - -#---Testing------------------------------------------------------------------------- -if(BUILD_TESTING) - - include(CTest) - enable_testing() - add_subdirectory(DDTest) - - set(BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash") - -endif(BUILD_TESTING) - -#---Documentation------------------------------------------------------------------- - -OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) -IF( INSTALL_DOC ) - INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} doc)" ) - include(GlobalSVNRevision) - include(DD4hepDoxygen) -ENDIF() - +#if(DD4HEP_USE_GEANT4) +# set( DD4HEP_USE_BOOST ON) +# message( STATUS " *** finding BOOST .... " ) +# find_package( Boost REQUIRED ) +# include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ) +# add_definitions( -DDD4HEP_USE_BOOST ) +#endif() +#if(DD4HEP_USE_LCIO) +# find_package( LCIO REQUIRED ) +# include_directories( SYSTEM ${LCIO_INCLUDE_DIRS} ) +#endif() #---Packages------------------------------------------------------------------------ - - ##------ don't allow to use a pre-built DDSegmentation ---------------------------- #find_package( DDSegmentation QUIET ) #if( NOT DDSegmentation_FOUND ) # add_subdirectory(DDSegmentation) #endif() -if(DD4HEP_NO_REFLEX) - add_subdirectory(GaudiPluginService) -endif() add_subdirectory(DDSegmentation) + add_subdirectory(DDCore) add_subdirectory(DDSurfaces) add_subdirectory(DDRec) -add_subdirectory(DDEve) add_subdirectory(DDDetectors) - if(DD4HEP_USE_GEANT4) - + set ( DD4HEP_USE_CLHEP "OFF" ) #--- create a geant4 variables for the thisdd4hep.sh script find_package( Geant4 9.6 REQUIRED gdml ui_all vis_all) @@ -146,11 +94,8 @@ if(DD4HEP_USE_GEANT4) string(FIND "${Geant4_THIRD_PARTY_INCLUDE_DIRS}" "CLHEP" CLHEP_POS ) if( NOT "${CLHEP_POS}" STREQUAL "-1" ) - set( GEANT4_USE_CLHEP 1 ) - get_filename_component(Geant4_ROOT "${Geant4_INCLUDE_DIR}/../../" ABSOLUTE) - #---- use FindCLHEP shipped with geant4 ----------- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${Geant4_ROOT}/cmake/Modules ) @@ -160,9 +105,9 @@ if(DD4HEP_USE_GEANT4) find_package( CLHEP REQUIRED ) include_directories( SYSTEM ${CLHEP_INCLUDE_DIRS} ) + set ( DD4HEP_USE_CLHEP ON ) get_filename_component(CLHEP_LIBRARY_PATH "${CLHEP_LIBRARIES}" PATH) - message( STATUS " *** geant4 was build with external CLHEP *** CLHEP_LIBRARY_PATH = ${CLHEP_LIBRARY_PATH}" ) else() set( GEANT4_USE_CLHEP 0 ) @@ -170,17 +115,26 @@ if(DD4HEP_USE_GEANT4) set(Geant4_INCLUDE_DIRS ${Geant4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}) set(Geant4_LIBRARIES ${Geant4_LIBRARIES} ${CLHEP_LIBRARIES}) - - -#------- now configure DDG4 ------- + #------- now configure DDG4 ------- add_subdirectory(DDG4) endif() - +add_subdirectory(DDCond) +add_subdirectory(DDAlign) +add_subdirectory(DDEve) add_subdirectory(UtilityApps) +#---Testing------------------------------------------------------------------------- +dd4hep_enable_tests( DDTest ) +#---Documentation------------------------------------------------------------------- +OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF ) +IF( INSTALL_DOC ) + INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} doc)" ) + include ( GlobalSVNRevision ) + include ( DD4hepDoxygen ) +ENDIF() #---Configuration------------------------------------------------------------------- # ----for APPLE scripts have to set the DYLD_LIBRARY_PATH @@ -192,12 +146,8 @@ configure_file(cmake/thisdd4hep.csh thisdd4hep.csh @ONLY) configure_file(cmake/thisdd4hep.sh thisdd4hep.sh @ONLY) configure_file(cmake/run_test.sh run_test.sh @ONLY) -install(FILES ${CMAKE_BINARY_DIR}/thisdd4hep.csh ${CMAKE_BINARY_DIR}/thisdd4hep.sh - DESTINATION bin - ) -install(PROGRAMS ${CMAKE_BINARY_DIR}/run_test.sh - DESTINATION bin - ) +install(FILES ${CMAKE_BINARY_DIR}/thisdd4hep.csh ${CMAKE_BINARY_DIR}/thisdd4hep.sh DESTINATION bin ) +install(PROGRAMS ${CMAKE_BINARY_DIR}/run_test.sh DESTINATION bin ) install(DIRECTORY cmake DESTINATION ${CMAKE_INSTALL_PREFIX} @@ -208,16 +158,6 @@ install(DIRECTORY cmake #----------------------------------------------------------------------------------- display_std_variables() -IF( DEFINED DD4HEP_WITH_GEANT4) - MESSAGE ( WARNING "DD4HEP_WITH_GEANT4 is deprecated use DD4HEP_USE_GEANT4") -ENDIF() - -IF( DEFINED DD4HEP_WITH_GEAR ) - MESSAGE (WARNING "DD4HEP_WITH_GEAR is deprecated use DD4HEP_USE_GEAR") -ENDIF() - - ############################################################################## # generate and install following configuration files - generate_package_configuration_files( DD4hepConfig.cmake DD4hepConfigVersion.cmake DD4hepLibDeps.cmake ) diff --git a/DDAlign/CMakeLists.txt b/DDAlign/CMakeLists.txt index d8dc97e93..e2e11e0d4 100644 --- a/DDAlign/CMakeLists.txt +++ b/DDAlign/CMakeLists.txt @@ -9,47 +9,10 @@ # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # #========================================================================== - -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) -#--------------------------- -set( PackageName DDAlign ) - -#---add additional packages here-------------------------------------------------- -find_package( DD4hep ) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -find_package( ROOT REQUIRED ) -#---Includedirs ------------------------------------------------------------------ -include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} ) +dd4hep_package( DDAlign + USES DDCore + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDAlign) #---DDAlign library -------------------------------------------------------------- -file(GLOB sources src/*.cpp) -add_library(DDAlign SHARED ${sources}) -target_link_libraries(DDAlign DDCore ${ROOT_LIBRARIES}) -# -# -if(DD4HEP_USE_XERCESC) - add_definitions(-DDD4HEP_USE_XERCESC) -else() - add_definitions(-DDD4HEP_USE_TINYXML) -endif() -SET_TARGET_PROPERTIES( DDAlign PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) -# -#---DDAlign rootmap -------------------------------------------------------------- -dd4hep_generate_rootmap(DDAlign) -# -install(DIRECTORY include/DDAlign - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(TARGETS DDAlign - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -# to do: add corresponding uninstall... -#------------------------------------------------------- +dd4hep_add_plugin ( DDAlign SOURCES src/*.cpp ) diff --git a/DDAlign/include/DDAlign/AlignmentStack.h b/DDAlign/include/DDAlign/AlignmentStack.h index 785cd6962..72dc476ff 100644 --- a/DDAlign/include/DDAlign/AlignmentStack.h +++ b/DDAlign/include/DDAlign/AlignmentStack.h @@ -34,9 +34,6 @@ namespace DD4hep { */ class AlignmentStack { public: - - friend class dd4hep_ptr<AlignmentStack>; - enum { OVERLAP_DEFINED = 1<<0, MATRIX_DEFINED = 1<<1, @@ -121,11 +118,11 @@ namespace DD4hep { /// Default constructor AlignmentStack(); + public: + /// Default destructor. Careful with this one: virtual ~AlignmentStack(); - public: - /// Static client accessor static AlignmentStack& get(); /// Create an alignment stack instance. The creation of a second instance will be refused. diff --git a/DDAlign/src/AlignmentCache.cpp b/DDAlign/src/AlignmentCache.cpp index c711a2669..3694b2798 100644 --- a/DDAlign/src/AlignmentCache.cpp +++ b/DDAlign/src/AlignmentCache.cpp @@ -194,11 +194,11 @@ void AlignmentCache::uninstall(LCDD& lcdd) { } /// Retrieve branch cache by name. If not present it will be created -AlignmentCache* AlignmentCache::subdetectorAlignments(const string& name) { - SubdetectorAlignments::const_iterator i = m_detectors.find(name); +AlignmentCache* AlignmentCache::subdetectorAlignments(const string& nam) { + SubdetectorAlignments::const_iterator i = m_detectors.find(nam); if ( i == m_detectors.end() ) { - AlignmentCache* ptr = new AlignmentCache(m_lcdd,name,false); - m_detectors.insert(make_pair(name,ptr)); + AlignmentCache* ptr = new AlignmentCache(m_lcdd,nam,false); + m_detectors.insert(make_pair(nam,ptr)); return ptr; } return (*i).second; @@ -260,9 +260,7 @@ void AlignmentCache::apply(AlignmentStack& stack) { /// Apply a vector of SD entries of ordered alignments to the geometry structure void AlignmentCache::apply(const vector<Entry*>& changes) { typedef map<string,pair<TGeoPhysicalNode*,Entry*> > Nodes; - typedef vector<Entry*> Changes; Nodes nodes; - AlignmentSelector selector(*this,nodes,changes); for_each(m_cache.begin(),m_cache.end(),selector.reset()); for_each(nodes.begin(),nodes.end(),AlignmentActor<node_print>(*this,nodes)); diff --git a/DDAlign/src/AlignmentOperators.cpp b/DDAlign/src/AlignmentOperators.cpp index 952bdf971..adc758b2a 100644 --- a/DDAlign/src/AlignmentOperators.cpp +++ b/DDAlign/src/AlignmentOperators.cpp @@ -36,8 +36,8 @@ void AlignmentSelector::operator()(Entries::value_type e) const { nodes.insert(make_pair(e->path,make_pair(pn,e))); } -void AlignmentSelector::operator()(const Cache::value_type& e) const { - TGeoPhysicalNode* pn = e.second; +void AlignmentSelector::operator()(const Cache::value_type& entry) const { + TGeoPhysicalNode* pn = entry.second; for(Entries::const_iterator j=entries.begin(); j != entries.end(); ++j) { Entries::value_type e = (*j); if ( e->needsReset() || e->hasMatrix() ) { diff --git a/DDAlign/src/AlignmentStack.cpp b/DDAlign/src/AlignmentStack.cpp index 8ecf50f4c..a48418516 100644 --- a/DDAlign/src/AlignmentStack.cpp +++ b/DDAlign/src/AlignmentStack.cpp @@ -29,7 +29,8 @@ static dd4hep_ptr<AlignmentStack>& _stack() { } static dd4hep_ptr<AlignmentStack>& _stack(AlignmentStack* obj) { dd4hep_ptr<AlignmentStack>& s = _stack(); - s = dd4hep_ptr<AlignmentStack>(obj); + dd4hep_ptr<AlignmentStack> n(obj); + s = n; return s; } @@ -244,9 +245,9 @@ bool AlignmentStack::add(dd4hep_ptr<StackEntry>& entry) { dd4hep_ptr<AlignmentStack::StackEntry> AlignmentStack::pop() { Stack::iterator i = m_stack.begin(); if ( i != m_stack.end() ) { - StackEntry* e = (*i).second; + dd4hep_ptr<StackEntry> e((*i).second); m_stack.erase(i); - return dd4hep_ptr<StackEntry>(e); + return e; } throw runtime_error("AlignmentStack> Alignment stack is empty. " "Cannot pop entries - check size first!"); diff --git a/DDCond/CMakeLists.txt b/DDCond/CMakeLists.txt index 30b5f560b..6d0d8bba3 100644 --- a/DDCond/CMakeLists.txt +++ b/DDCond/CMakeLists.txt @@ -9,47 +9,10 @@ # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # #========================================================================== +dd4hep_package( DDCond + USES DDCore + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDCond) -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) -#--------------------------- -set( PackageName DDCond ) - -#---add additional packages here-------------------------------------------------- -if(NOT DD4HEP_BUILD_ALL) -find_package( DD4hep ) -endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -find_package( ROOT REQUIRED ) -#---Includedirs ------------------------------------------------------------------ -include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} ) - -#---DD4hepCond library -------------------------------------------------------------- -file(GLOB sources src/*.cpp) -add_library(DD4hepCond SHARED ${sources}) -target_link_libraries(DD4hepCond DDCore ${ROOT_LIBRARIES}) - -if(DD4HEP_USE_XERCESC) - add_definitions(-DDD4HEP_USE_XERCESC) -else() - add_definitions(-DDD4HEP_USE_TINYXML) -endif() -SET_TARGET_PROPERTIES( DD4hepCond PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) -#---DD4hepCond rootmap -------------------------------------------------------------- -dd4hep_generate_rootmap(DD4hepCond) - -install(DIRECTORY include/DDCond - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(TARGETS DD4hepCond - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -# to do: add corresponding uninstall... -#------------------------------------------------------- +#---DDCond library -------------------------------------------------------------- +dd4hep_add_plugin ( DDCond SOURCES src/*.cpp ) diff --git a/DDCond/include/DDCond/ConditionsStack.h b/DDCond/include/DDCond/ConditionsStack.h index e9dc9ee49..09722b7d8 100644 --- a/DDCond/include/DDCond/ConditionsStack.h +++ b/DDCond/include/DDCond/ConditionsStack.h @@ -37,9 +37,7 @@ namespace DD4hep { */ class ConditionsStack { public: - friend class dd4hep_ptr<ConditionsStack>; - - typedef ConditionsInterna::Entry Entry; + typedef ConditionsInterna::Entry Entry; typedef std::map<std::string,Entry*> Stack; protected: @@ -48,10 +46,11 @@ namespace DD4hep { /// Standard constructor ConditionsStack(); + + public: /// Standard destructor virtual ~ConditionsStack(); - public: /// Static client accessor static ConditionsStack& get(); /// Create an conditions stack instance. The creation of a second instance will be refused. diff --git a/DDCond/src/ConditionsParser.cpp b/DDCond/src/ConditionsParser.cpp index 8da8c373c..96b87c365 100644 --- a/DDCond/src/ConditionsParser.cpp +++ b/DDCond/src/ConditionsParser.cpp @@ -68,12 +68,11 @@ DetElement _getDetector(void* param, xml_h e) { } /// Helper: Extract the string value from the xml element -dd4hep_ptr<Entry> _getStackEntry(void* param, xml_h element) { +Entry* _createStackEntry(void* param, xml_h element) { xml_comp_t e(element); DetElement elt = _getDetector(param, element); string name = e.hasAttr(_U(name)) ? e.nameStr() : e.tag(); - dd4hep_ptr<Entry> result(new Entry(elt,name,e.tag(),_getValidity(element))); - return result; + return new Entry(elt,name,e.tag(),_getValidity(element)); } /** Convert arbitrary conditon objects containing standard tags @@ -125,7 +124,7 @@ template <> void Converter<arbitrary>::operator()(xml_h e) const { else if ( tag == "detelements" ) xml_coll_t(e,_U(star)).for_each(Converter<conditions>(lcdd,param)); else { - dd4hep_ptr<Entry> val(_getStackEntry(param,e)); + dd4hep_ptr<Entry> val(_createStackEntry(param,e)); val->value = elt.hasAttr(_U(value)) ? elt.valueStr() : e.text(); ConditionsStack::get().insert(val); } diff --git a/DDCond/src/ConditionsStack.cpp b/DDCond/src/ConditionsStack.cpp index d174b0f29..6e75c3808 100644 --- a/DDCond/src/ConditionsStack.cpp +++ b/DDCond/src/ConditionsStack.cpp @@ -28,7 +28,8 @@ static dd4hep_ptr<ConditionsStack>& _stack() { } static dd4hep_ptr<ConditionsStack>& _stack(ConditionsStack* obj) { dd4hep_ptr<ConditionsStack>& s = _stack(); - s = dd4hep_ptr<ConditionsStack>(obj); + dd4hep_ptr<ConditionsStack> n(obj); + s = n; return s; } @@ -75,16 +76,16 @@ void ConditionsStack::release() { dd4hep_ptr<ConditionsStack::Entry> ConditionsStack::pop() { Stack::iterator i = m_stack.begin(); if ( i != m_stack.end() ) { - Entry* e = (*i).second; + dd4hep_ptr<ConditionsStack::Entry> e((*i).second); m_stack.erase(i); - return dd4hep_ptr<Entry>(e); + return e; } throw runtime_error("ConditionsStack> pop: Conditions stack is empty. Check size first!"); } /// Get all pathes to be aligned vector<const ConditionsStack::Entry*> ConditionsStack::entries() const { - vector<const Entry*> result; + vector<const ConditionsStack::Entry*> result; result.reserve(m_stack.size()); for(Stack::const_iterator i=m_stack.begin(); i != m_stack.end(); ++i) result.push_back((*i).second); diff --git a/DDCore/CMakeLists.txt b/DDCore/CMakeLists.txt index 8fcf570ae..c569cefe1 100644 --- a/DDCore/CMakeLists.txt +++ b/DDCore/CMakeLists.txt @@ -1,71 +1,43 @@ -# $Id: $ -#========================================================================== +#================================================================================= +# $Id: $ +# # AIDA Detector description implementation for LCD -#-------------------------------------------------------------------------- +#--------------------------------------------------------------------------------- # Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) # All rights reserved. # # For the licensing terms see $DD4hepINSTALL/LICENSE. # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # -#========================================================================== - -cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -project(DDCore) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${DDSegmentation_INCLUDE_DIRS} - ${GaudiPluginService_INCLUDE_DIRS}) - -file(GLOB sources src/*.cpp src/Evaluator/*.cpp src/XML/*.cpp) -file(GLOB plugin_sources src/plugins/*.cpp) - -#---Add Library------------------------------------------------------------------- -if(DD4HEP_USE_BOOST) - file(GLOB parser_sources src/parsers/*.cpp ) - add_definitions(-DDD4HEP_USE_BOOST) -else() - file(GLOB parser_sources) -endif() - -file(GLOB headers include/DD4hep/*.h) -file(GLOB internal_headers include/DD4hep/objects/*.h) -list(APPEND headers ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/BitField64.h) -list(APPEND headers ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/Segmentation.h) -list(REMOVE_ITEM headers ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/DetFactoryHelper.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/Factories.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/Plugins.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/IoStreams.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/SurfaceInstaller.h - ) -root_generate_dictionary( G__DD4hep ${headers} ${internal_headers} LINKDEF include/ROOT/LinkDef.h) -list(APPEND sources G__DD4hep.cxx) - -if(DD4HEP_USE_PYROOT) - add_definitions(-DDD4HEP_USE_PYROOT) - set(libraries ${libraries} PyROOT) -endif() - -add_library(DDCore SHARED ${sources} ${parser_sources} ) - -target_link_libraries(DDCore ${ROOT_LIBRARIES} ${XML_LIBRARIES} ${GaudiPluginService_LIBRARIES} ${DDSegmentation_LIBRARIES} Geom ${libraries}) - -## generates rootmap and installs the library -add_dd4hep_plugin(DDCorePlugins SHARED ${plugin_sources}) -target_link_libraries(DDCorePlugins ${ROOT_LIBRARIES} ${XML_LIBRARIES} DDCore Geom ${libraries}) - -SET_TARGET_PROPERTIES( DDCore DDCorePlugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) - -#--- install target------------------------------------- -install(DIRECTORY include/DD4hep include/XML - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(TARGETS DDCore - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib +#================================================================================= +dd4hep_package( DDCore + USES [ROOT REQUIRED COMPONENTS Geom GenVector] + DDSegmentation + OPTIONAL XERCESC + INCLUDE_DIRS include + INSTALL_INCLUDES include/DD4hep include/XML) + +#---Generate ROOT dictionary------------------------------------------------------ +dd4hep_add_dictionary( G__DD4hep + SOURCES include/DD4hep/*.h + include/DD4hep/objects/*.h + ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/BitField64.h + ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/Segmentation.h + EXCLUDE include/DD4hep/DetFactoryHelper.h + include/DD4hep/Factories.h + include/DD4hep/Plugins.h + include/DD4hep/IoStreams.h + include/DD4hep/SurfaceInstaller.h + LINKDEF include/ROOT/LinkDef.h ) + +#---Generate DDCore Library------------------------------------------------------- +dd4hep_add_package_library ( DDCore + SOURCES src/*.cpp src/Evaluator/*.cpp src/XML/*.cpp + GENERATED G__DD4hep.cxx + INCLUDE_DIRS ${GaudiPluginService_INCLUDE_DIRS} + LINK_LIBRARIES ${GaudiPluginService_LIBRARIES} + OPTIONAL [BOOST SOURCES src/parsers/*.cpp] ) -# to do: add corresponding uninstall... -#------------------------------------------------------- +# Generate DDCore plugins--------------------------------------------------------- +dd4hep_add_plugin ( DDCorePlugins SOURCES src/plugins/*.cpp ) diff --git a/DDCore/include/DD4hep/Memory.h b/DDCore/include/DD4hep/Memory.h index acded026a..8eb461411 100644 --- a/DDCore/include/DD4hep/Memory.h +++ b/DDCore/include/DD4hep/Memory.h @@ -39,27 +39,28 @@ namespace DD4hep { public: typedef std::unique_ptr<T> base_t; #else - : public std::auto_ptr<T> { + : public std::auto_ptr<T> { public: - typedef std::auto_ptr<T> base_t; - void swap(base_t& c) { - this->base_t::operator=(base_t(c.release())); - } + typedef std::auto_ptr<T> base_t; + void swap(base_t& c) { + this->base_t::operator=(base_t(c.release())); + } #endif - /// Default Constructor. - dd4hep_ptr() : base_t() {} - /// Constructor from pointer - dd4hep_ptr(T* p) : base_t(p) {} - /// Constructor from copy - dd4hep_ptr(base_t& c) : base_t(c) {} - /// Assignment operator - dd4hep_ptr& operator=(base_t& c) { - if ( this != &c ) { - this->swap(c); - } - return *this; - } - }; + public: + /// Default Constructor. + dd4hep_ptr() : base_t() {} + /// Constructor from pointer + dd4hep_ptr(T* p) : base_t(p) {} + /// Constructor from copy + dd4hep_ptr(base_t& c) : base_t(c) {} + /// Assignment operator + dd4hep_ptr& operator=(base_t& c) { + if ( this != &c ) { + this->swap(c); + } + return *this; + } + }; } #endif // DD4HEP_MEMORY_H diff --git a/DDDetectors/CMakeLists.txt b/DDDetectors/CMakeLists.txt index b9be1e243..c0e0c65af 100644 --- a/DDDetectors/CMakeLists.txt +++ b/DDDetectors/CMakeLists.txt @@ -1,5 +1,6 @@ -# $Id: $ #========================================================================== +# $Id: $ +# # AIDA Detector description implementation for LCD #-------------------------------------------------------------------------- # Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) @@ -16,35 +17,8 @@ # Date: 13/11/2014 # #-------------------------------------------------------------------------- -# -#---Find ROOT-------------------------------------------------------------- -find_package( ROOT REQUIRED COMPONENTS Geom ) -#---Find and configure DD4hep basics--------------------------------------- -include(DD4hep) -#---Find and configure Xerces---------------------------------------------- -include(DD4hep_XML_setup) -# -#---Includedirs------------------------------------------------------------ -include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDRec/include - ${CMAKE_SOURCE_DIR}/DDSurfaces/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${ROOT_INCLUDE_DIR} ) -#---Add Library------------------------------------------------------------ -file(GLOB sources src/*.cpp ) - -add_dd4hep_plugin( DDDetectors SHARED ${sources}) -target_link_libraries( DDDetectors DDCore DDRec ${ROOT_LIBRARIES} ) -SET_TARGET_PROPERTIES(DDDetectors PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) - - -# -#--- install target-------------------------------------------------------- -install( TARGETS DDDetectors LIBRARY DESTINATION lib ) - -install( DIRECTORY compact - DESTINATION DDDetectors - PATTERN ".svn" EXCLUDE ) - -# to do: add corresponding uninstall... -#-------------------------------------------------------------------------- +dd4hep_package( DDDetectors USES DDRec ) +#---Add Plugin Library----------------------------------------------------- +dd4hep_add_plugin ( DDDetectors SOURCES src/*.cpp ) +#---Package installation procedure(s) ------------------------------------- +dd4hep_install_dir ( compact DESTINATION DDDetectors ) diff --git a/DDEve/CMakeLists.txt b/DDEve/CMakeLists.txt index cf95262ef..54baebba9 100644 --- a/DDEve/CMakeLists.txt +++ b/DDEve/CMakeLists.txt @@ -9,74 +9,18 @@ # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # #========================================================================== +dd4hep_package( DDEve + USES DDCore [ROOT REQUIRED COMPONENTS TEve] + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDEve) +# +#---Add Plugin Library----------------------------------------------------- +dd4hep_add_dictionary ( G__DDEve SOURCES include/DDEve/*.h ) +# +dd4hep_add_plugin ( DDEve SOURCES src/*.cpp + GENERATED G__DDEve.cxx + OPTIONAL [DDG4 INTERNAL SOURCES G__DDG4IO.cxx] + [LCIO EXTERNAL SOURCES lcio/LCIOEventHandler.cpp] ) -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) -#--------------------------- -set( PackageName DDEve ) - -#---add additional packages here------------------------------------------- -if(DD4HEP_BUILD_ALL) - find_package( DD4hep ) -endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -find_package( ROOT REQUIRED ) -#---Includedirs ----------------------------------------------------------- -if(DD4HEP_USE_GEANT4) - include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_SOURCE_DIR}/DDG4/include - ${CMAKE_CURRENT_SOURCE_DIR}/include -# ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} ) -else() - include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_CURRENT_SOURCE_DIR}/include -# ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} ) -endif() -#---DDEve library --------------------------------------------------------- -file(GLOB headers include/DDEve/*.h) -file(GLOB sources src/*.cpp) -set( eve_link_libraries DDCore ${ROOT_EVE_LIBRARIES} -lFTGL ) -#--------------------------- Support for the LCIO data I/O --------------- -if(DD4HEP_USE_LCIO) - find_package(LCIO REQUIRED) - include_directories( ${LCIO_INCLUDE_DIRS} ) - list(APPEND sources lcio/LCIOEventHandler.cpp) - list(APPEND eve_link_libraries ${LCIO_LIBRARIES} ) -endif() -#--------------------------- Support for the DDG4 data I/O --------------- -if(DD4HEP_USE_GEANT4) - root_generate_dictionary( G__DDG4IO ${CMAKE_CURRENT_SOURCE_DIR}/DDEve/DDG4IO.C LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h ) - list(APPEND sources G__DDG4IO.cxx) - list(APPEND eve_link_libraries DDG4 ) -endif() -#--------------------------- Add DDEve dictionary for interactive ROOT sessions --- -root_generate_dictionary( G__DDEve ${headers} LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h) -list(APPEND sources G__DDEve.cxx) - -add_library(DDEve SHARED ${sources}) -target_link_libraries(DDEve ${eve_link_libraries}) - -SET_TARGET_PROPERTIES(DDEve PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) - -#---DDEve rootmap --------------------------------------------------------- -dd4hep_generate_rootmap(DDEve) #---Package installation procedure(s) ------------------------------------- -install(DIRECTORY include/DDEve - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(DIRECTORY ${PackageName} - DESTINATION examples - PATTERN ".svn" EXCLUDE ) - -install(TARGETS DDEve - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -# to do: add corresponding uninstall... -#------------------------------------------------------- +dd4hep_install_dir ( DDEve DESTINATION examples ) diff --git a/DDEve/include/DDEve/ElementList.h b/DDEve/include/DDEve/ElementList.h index 626277859..cc5357862 100644 --- a/DDEve/include/DDEve/ElementList.h +++ b/DDEve/include/DDEve/ElementList.h @@ -43,8 +43,8 @@ namespace DD4hep { ElementList(const ElementList& l); /// Default destructor virtual ~ElementList(); - /// Clone object - TEveElement* CloneElement(); + /// Clone object: Overload from TEveElementList + virtual TEveElementList* CloneElement() const; /// Root implementation macro ClassDef(ElementList,0); }; diff --git a/DDEve/include/DDEve/View.h b/DDEve/include/DDEve/View.h index 374fd321c..89a6f0cb9 100644 --- a/DDEve/include/DDEve/View.h +++ b/DDEve/include/DDEve/View.h @@ -110,7 +110,7 @@ namespace DD4hep { virtual View& CreateGeoScene(); /// Configure a view with geo info. Used configuration if present. - virtual void ConfigureGeometry(); + virtual void ConfigureGeometryFromInfo(); /// Configure a single geometry view by default from the global geometry scene with all subdetectors virtual void ConfigureGeometryFromGlobal(); /// Configure a single geometry view @@ -143,7 +143,7 @@ namespace DD4hep { /// Create the event scene virtual View& CreateEventScene(); /// Configure a view with event info. Used configuration if present. - virtual void ConfigureEvent(); + virtual void ConfigureEventFromInfo(); /// Configure an event view by default from the global event scene virtual void ConfigureEventFromGlobal(); /// Configure a single event scene view diff --git a/DDEve/src/Display.cpp b/DDEve/src/Display.cpp index 9114fc14e..71a0256ae 100644 --- a/DDEve/src/Display.cpp +++ b/DDEve/src/Display.cpp @@ -450,7 +450,7 @@ void Display::OnNewEvent(EventHandler* handler ) { ImportEvent(particles); } for(Views::iterator i = m_eveViews.begin(); i != m_eveViews.end(); ++i) - (*i)->ConfigureEvent(); + (*i)->ConfigureEventFromInfo(); manager().Redraw3D(); } diff --git a/DDEve/src/ElementList.cpp b/DDEve/src/ElementList.cpp index a9925bcf7..7fd8220e5 100644 --- a/DDEve/src/ElementList.cpp +++ b/DDEve/src/ElementList.cpp @@ -51,7 +51,7 @@ ElementList::~ElementList() { } /// Clone object -TEveElement* ElementList::CloneElement() { +TEveElementList* ElementList::CloneElement() const { return new ElementList(*this); } diff --git a/DDEve/src/MultiView.cpp b/DDEve/src/MultiView.cpp index 33e845f71..10945371e 100644 --- a/DDEve/src/MultiView.cpp +++ b/DDEve/src/MultiView.cpp @@ -30,8 +30,8 @@ DECLARE_VIEW_FACTORY(MultiView) static void _build(Display* display, View* v, TEveWindowSlot* slot) { v->Build(slot); display->RegisterEvents(v); - v->ConfigureGeometry(); - v->ConfigureEvent(); + v->ConfigureGeometryFromInfo(); + v->ConfigureEventFromInfo(); v->Initialize(); } diff --git a/DDEve/src/View.cpp b/DDEve/src/View.cpp index a129293d0..22cd107a0 100644 --- a/DDEve/src/View.cpp +++ b/DDEve/src/View.cpp @@ -137,7 +137,7 @@ View::CreateGeometry(DetElement de, const DisplayConfiguration::Config& cfg) { } /// Configure a view using the view's name and a proper ViewConfiguration if present -void View::ConfigureGeometry() { +void View::ConfigureGeometryFromInfo() { printout(INFO,"View","+++ Configure Geometry for view %s Config=%p.",c_name(),m_config); (m_config) ? ConfigureGeometry(*m_config) : ConfigureGeometryFromGlobal(); ImportGeoTopics(name()); @@ -228,7 +228,7 @@ void View::ImportGeo(TEveElement* el) { } /// Configure the adding of event data -void View::ConfigureEvent() { +void View::ConfigureEventFromInfo() { printout(INFO,"View","+++ Import event data into view %s Config=%p.",c_name(),m_config); (m_config) ? ConfigureEvent(*m_config) : ConfigureEventFromGlobal(); ImportEventTopics(); diff --git a/DDEve/src/ViewMenu.cpp b/DDEve/src/ViewMenu.cpp index 1e2849319..5588cfd57 100644 --- a/DDEve/src/ViewMenu.cpp +++ b/DDEve/src/ViewMenu.cpp @@ -102,8 +102,8 @@ void ViewMenu::BuildView(View* v) const { TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(right); v->Build(slot); m_display->RegisterEvents(v); - v->ConfigureGeometry(); - v->ConfigureEvent(); + v->ConfigureGeometryFromInfo(); + v->ConfigureEventFromInfo(); v->Initialize(); right->SetTab(right->GetNumberOfTabs()-1); } diff --git a/DDG4/CMakeLists.txt b/DDG4/CMakeLists.txt index 4b130e9ac..bcf919f48 100644 --- a/DDG4/CMakeLists.txt +++ b/DDG4/CMakeLists.txt @@ -9,109 +9,31 @@ # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # #========================================================================== - -#---Find Geant4------------------------------------------------------------------- -find_package(Geant4 REQUIRED gdml ui_all vis_all) -INCLUDE(${Geant4_USE_FILE}) # this also takes care of geant 4 definitions and include dirs -#---DD4hep functions and macros ------------------------------------------------------- -include( DD4hep ) -#---Includedirs------------------------------------------------------------------- -include_directories(${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${ROOT_INCLUDE_DIR} - ${CLHEP_INCLUDE_DIR} - ${Geant4_INCLUDE_DIRS} ) - -#---Add Library------------------------------------------------------------------- -file(GLOB sources src/*.cpp) - -if(NOT DD4HEP_USE_XERCESC) - list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/src/Geant4XML.cpp) -endif() -# -add_library(DDG4 SHARED ${sources}) -target_link_libraries(DDG4 DDCore ${ROOT_LIBRARIES} ${Geant4_LIBRARIES}) -SET_TARGET_PROPERTIES( DDG4 PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) -#----------------------------------------------------------------------------------- -# No rootmap for link libraries! +dd4hep_package( DDG4 + USES [GEANT4 REQUIRED COMPONENTS gdml ui_all vis_all] + DDCore + OPTIONAL CLHEP [XercesC QUIET] + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDG4) +#---Add Library--------------------------------------------------------------------- +dd4hep_add_package_library(DDG4 SOURCES src/*.cpp ) #--------------------------- Legacy libraries (for Frank) ------------------------- -file(GLOB legacy_sources legacy/*.cpp) -add_library(DDG4Legacy SHARED ${legacy_sources}) -target_link_libraries(DDG4Legacy DDCore DDG4 ${ROOT_LIBRARIES} ${Geant4_LIBRARIES}) - -SET_TARGET_PROPERTIES(DDG4Legacy PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) -dd4hep_generate_rootmap(DDG4Legacy) - -#--------------------------- Main geant4 interface library (no plugins!)----------- -root_generate_dictionary( G__DDG4 ${CMAKE_CURRENT_SOURCE_DIR}/python/DDG4Dict.C LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h) -#--------------------------- New Plugin library for new simulation framework ----- -file(GLOB plugins_sources plugins/*.cpp) -list(APPEND plugins_sources G__DDG4.cxx) -add_library(DDG4Plugins SHARED ${plugins_sources}) -target_link_libraries(DDG4Plugins DDCore DDG4 ${ROOT_LIBRARIES} ${Geant4_LIBRARIES}) - -SET_TARGET_PROPERTIES(DDG4Plugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) -dd4hep_generate_rootmap(DDG4Plugins) - +dd4hep_add_plugin(DDG4Legacy SOURCES legacy/*.cpp) +#----------------------------------------------------------------------------------- +dd4hep_add_dictionary( G__DDG4 SOURCES python/DDG4Dict.C ) +#--------------------------- Plugin library for the simulation framework --------- +dd4hep_add_plugin(DDG4Plugins + GENERATED G__DDG4.cxx + SOURCES plugins/*.cpp) #--------------------------- LCIO Plugins for new simulation framework ----------- -if(DD4HEP_USE_LCIO) - find_package(LCIO REQUIRED) - include_directories( ${LCIO_INCLUDE_DIRS} ) - file(GLOB lcio_sources lcio/*.cpp) - add_library(DDG4LCIO SHARED ${lcio_sources}) - target_link_libraries(DDG4LCIO DDCore DDG4 ${Geant4_LIBRARIES} ${LCIO_LIBRARIES} ${ROOT_LIBRARIES} EG) - SET_TARGET_PROPERTIES(DDG4LCIO PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) - dd4hep_generate_rootmap(DDG4LCIO) -endif() - +dd4hep_add_plugin(DDG4LCIO + OPTIONAL [LCIO REQUIRED SOURCES lcio/*.cpp] ) #----------------------------------------------------------------------------------- -add_executable(g4gdmlDisplay g4gdmlDisplay.cpp) -target_link_libraries(g4gdmlDisplay DDG4 DDCore) +dd4hep_add_executable(g4gdmlDisplay SOURCES g4gdmlDisplay.cpp) #----------------------------------------------------------------------------------- -add_executable(g4FromXML g4FromXML.cpp) -target_link_libraries(g4FromXML DDG4 DDCore) +dd4hep_add_executable(g4FromXML SOURCES g4FromXML.cpp) #----------------------------------------------------------------------------------- -add_executable( dd_sim ddsim.cpp) -target_link_libraries(dd_sim DDCore DDG4) - -#--- install target------------------------------------- -install(DIRECTORY include/DDG4 - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(DIRECTORY examples - DESTINATION examples/DDG4 - PATTERN ".svn" EXCLUDE ) - -install(FILES - python/DD4hep.py - python/DDG4.py - python/DDG4Dict.C - python/SystemOfUnits.py - DESTINATION python) - -install(FILES - python/checkOverlaps.py - python/checkGeometry.py - DESTINATION python) - -install(TARGETS DDG4 DDG4Plugins DDG4Legacy g4gdmlDisplay dd_sim - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) - -install(TARGETS DDG4 g4FromXML - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) - -if(DD4HEP_USE_LCIO) -install(TARGETS DDG4LCIO - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -endif() - -# to do: add corresponding uninstall... -#------------------------------------------------------- +dd4hep_add_executable(dd_sim SOURCES ddsim.cpp) +#---Package installation procedure(s) ------------------------------------- +dd4hep_install_dir(examples DESTINATION examples/DDG4) +dd4hep_install_files(FILES python/*.py python/*.C DESTINATION python) diff --git a/DDG4/lcio/LCIOSDTestActions.cpp b/DDG4/lcio/LCIOSDTestActions.cpp index 510e80373..0377f7b94 100644 --- a/DDG4/lcio/LCIOSDTestActions.cpp +++ b/DDG4/lcio/LCIOSDTestActions.cpp @@ -13,6 +13,7 @@ //========================================================================== // Framework include files +#include "Exceptions.h" #include "IMPL/LCCollectionVec.h" #include "IMPL/SimTrackerHitImpl.h" #include "IMPL/SimCalorimeterHitImpl.h" diff --git a/DDRec/CMakeLists.txt b/DDRec/CMakeLists.txt index c6c1825d4..0a8daffd0 100644 --- a/DDRec/CMakeLists.txt +++ b/DDRec/CMakeLists.txt @@ -1,63 +1,38 @@ -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +# Author: F.Gaede (Desy) +# +#========================================================================== +dd4hep_package(DDRec + USES DDCore DDSurfaces + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDRec) + +#---Add Library------------------------------------------------------------- +dd4hep_add_package_library(DDRec + SOURCES src/*.cpp + OPTIONAL [GEAR COMPONENTS geartgeo SOURCES src/gear/DDGear.cpp DEFINITIONS DD4HEP_USE_GEAR ] +) +dd4hep_add_plugin(DDRecPlugins + SOURCES src/plugins/*.cpp + OPTIONAL [GEAR SOURCES src/gear/createGearForILD.cpp src/gear/createGearForCLIC.cpp DEFINITIONS DD4HEP_USE_GEAR] +) -project(DDRec) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include - ${DDSegmentation_INCLUDE_DIRS} - ${CMAKE_SOURCE_DIR}/DDSurfaces/include - ${CMAKE_SOURCE_DIR}/DDCore/include) - -file(GLOB sources src/*.cpp) -file(GLOB plugin_sources src/plugins/*.cpp) - -set(rec_link_libraries DDCore ${DDSegmentation_LIBRARIES} ${ROOT_LIBRARIES} Geom) - -#--------------------------- GEAR wrappers for backward compatibility ----------- if(DD4HEP_USE_GEAR) - - find_package(GEAR REQUIRED COMPONENTS geartgeo) - include_directories(SYSTEM ${GEAR_INCLUDE_DIRS}) - add_definitions("-D DD4HEP_USE_GEAR") - - list(APPEND sources src/gear/DDGear.cpp) - list(APPEND plugin_sources src/gear/createGearForILD.cpp src/gear/createGearForCLIC.cpp) - list(APPEND rec_link_libraries ${GEAR_LIBRARIES} ${GEAR_COMPONENT_LIBRARIES}) - - add_executable(convertToGear src/convertToGear.cc) - - target_link_libraries(convertToGear ${PackageName} ${DD4hep_LIBRARIES} DDRec - ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} ${GEAR_LIBRARIES} - ) - - install(TARGETS convertToGear - RUNTIME DESTINATION bin - ) - -endif() -#------------------------------------------------------------------------------------- - -add_library(DDRec SHARED ${sources}) -target_link_libraries(DDRec ${rec_link_libraries}) - -# Add the DDRecPlugin, as there are currently only gear plugins, we need to check if we want to create the plugin -if( plugin_sources ) - add_dd4hep_plugin(DDRecPlugins SHARED ${plugin_sources}) - target_link_libraries(DDRecPlugins ${rec_link_libraries} DDRec) - SET_TARGET_PROPERTIES(DDRecPlugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) + dd4hep_add_executable( convertToGear + SOURCES src/convertToGear.cc + USES [GEAR REQUIRED COMPONENTS geartgeo] ) +else() + dd4hep_add_executable( convertToGear + OPTIONAL [GEAR COMPONENTS geartgeo SOURCES src/convertToGear.cc DEFINITIONS DD4HEP_USE_GEAR] ) endif() -#SET(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wno-long-long") -SET_TARGET_PROPERTIES(DDRec PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION}) - -#--- install target------------------------------------- -install(DIRECTORY include/DDRec - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -install(TARGETS DDRec - LIBRARY DESTINATION lib - ) - -# to do: add corresponding uninstall... -#------------------------------------------------------- diff --git a/DDSegmentation/CMakeLists.txt b/DDSegmentation/CMakeLists.txt index 09f27104b..70e5363cc 100644 --- a/DDSegmentation/CMakeLists.txt +++ b/DDSegmentation/CMakeLists.txt @@ -27,7 +27,9 @@ SET_TARGET_PROPERTIES( DDSegmentation PROPERTIES VERSION ${DDSegmentation_VERSIO #if DDSegmentation is build as part of dd4hep if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) SET ( DDSegmentation_LIBRARIES DDSegmentation PARENT_SCOPE ) - SET ( DDSegmentation_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE ) + SET ( DDSegmentation_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/DDSegmentation/include PARENT_SCOPE ) + SET ( DDSEGMENTATION_LIBRARIES DDSegmentation PARENT_SCOPE ) + SET ( DDSEGMENTATION_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/DDSegmentation/include PARENT_SCOPE ) endif() install(DIRECTORY include/DDSegmentation diff --git a/DDSegmentation/src/CartesianGridXY.cpp b/DDSegmentation/src/CartesianGridXY.cpp index 66741c20c..7be3cdf18 100644 --- a/DDSegmentation/src/CartesianGridXY.cpp +++ b/DDSegmentation/src/CartesianGridXY.cpp @@ -49,7 +49,7 @@ Vector3D CartesianGridXY::position(const CellID& cID) const { } std::vector<double> CartesianGridXY::cellDimensions(const CellID&) const { -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {_gridSizeX, _gridSizeY}; #else std::vector<double> cellDims(2,0.0); diff --git a/DDSegmentation/src/CartesianGridXYZ.cpp b/DDSegmentation/src/CartesianGridXYZ.cpp index 629df9311..626b5065d 100644 --- a/DDSegmentation/src/CartesianGridXYZ.cpp +++ b/DDSegmentation/src/CartesianGridXYZ.cpp @@ -48,14 +48,14 @@ Vector3D CartesianGridXYZ::position(const CellID& cID) const { } std::vector<double> CartesianGridXYZ::cellDimensions(const CellID&) const { -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {_gridSizeX, _gridSizeY, _gridSizeZ}; #else - std::vector<double> cellDimensions(3,0.0); - cellDimensions[0] = _gridSizeX; - cellDimensions[1] = _gridSizeY; - cellDimensions[2] = _gridSizeZ; - return cellDimensions; + std::vector<double> cellDims(3,0.0); + cellDims[0] = _gridSizeX; + cellDims[1] = _gridSizeY; + cellDims[2] = _gridSizeZ; + return cellDims; #endif } diff --git a/DDSegmentation/src/CartesianGridXZ.cpp b/DDSegmentation/src/CartesianGridXZ.cpp index 88cc3147d..13afe2204 100644 --- a/DDSegmentation/src/CartesianGridXZ.cpp +++ b/DDSegmentation/src/CartesianGridXZ.cpp @@ -53,13 +53,13 @@ Vector3D CartesianGridXZ::position(const CellID& cID) const { } std::vector<double> CartesianGridXZ::cellDimensions(const CellID&) const { -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {_gridSizeX, _gridSizeZ}; #else - std::vector<double> cellDimensions(2,0.0); - cellDimensions[0] = _gridSizeX; - cellDimensions[1] = _gridSizeZ; - return cellDimensions; + std::vector<double> cellDims(2,0.0); + cellDims[0] = _gridSizeX; + cellDims[1] = _gridSizeZ; + return cellDims; #endif } diff --git a/DDSegmentation/src/CartesianGridYZ.cpp b/DDSegmentation/src/CartesianGridYZ.cpp index 82db02bbd..7e07065fa 100644 --- a/DDSegmentation/src/CartesianGridYZ.cpp +++ b/DDSegmentation/src/CartesianGridYZ.cpp @@ -50,13 +50,13 @@ Vector3D CartesianGridYZ::position(const CellID& cID) const { } std::vector<double> CartesianGridYZ::cellDimensions(const CellID&) const { -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {_gridSizeY, _gridSizeZ}; #else - std::vector<double> cellDimensions(2,0.0); - cellDimensions[0] = _gridSizeY; - cellDimensions[1] = _gridSizeZ; - return cellDimensions; + std::vector<double> cellDims(2,0.0); + cellDims[0] = _gridSizeY; + cellDims[1] = _gridSizeZ; + return cellDims; #endif } diff --git a/DDSegmentation/src/PolarGridRPhi.cpp b/DDSegmentation/src/PolarGridRPhi.cpp index 5ef8cae4c..0b2a1058a 100644 --- a/DDSegmentation/src/PolarGridRPhi.cpp +++ b/DDSegmentation/src/PolarGridRPhi.cpp @@ -58,7 +58,7 @@ Vector3D PolarGridRPhi::position(const CellID& cID) const { std::vector<double> PolarGridRPhi::cellDimensions(const CellID& cID) const { _decoder->setValue(cID); const double rPhiSize = binToPosition((*_decoder)[_rId].value(), _gridSizeR, _offsetR)*_gridSizePhi; -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {_gridSizeR, rPhiSize}; #else std::vector<double> cellDims(2,0.0); diff --git a/DDSegmentation/src/PolarGridRPhi2.cpp b/DDSegmentation/src/PolarGridRPhi2.cpp index 71e648cef..f776d9102 100644 --- a/DDSegmentation/src/PolarGridRPhi2.cpp +++ b/DDSegmentation/src/PolarGridRPhi2.cpp @@ -78,7 +78,7 @@ std::vector<double> PolarGridRPhi2::cellDimensions(const CellID& cID) const { const double rPhiSize = _gridPhiValues[rBin]*rCenter; const double rSize = _gridRValues[rBin+1]-_gridRValues[rBin]; -#ifdef DD4HEP_USE_CXX11 +#if __cplusplus >= 201103L return {rSize, rPhiSize}; #else std::vector<double> cellDims(2,0.0); diff --git a/DDSurfaces/CMakeLists.txt b/DDSurfaces/CMakeLists.txt index 686837af4..a29c5cc60 100644 --- a/DDSurfaces/CMakeLists.txt +++ b/DDSurfaces/CMakeLists.txt @@ -1,47 +1,16 @@ -cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR) - -#--------------------------- -set( PackageName DDSurfaces ) -#--------------------------- - -project(${PackageName}) - -# project version -SET( DDSurfaces_VERSION_MAJOR 0 ) -SET( DDSurfaces_VERSION_MINOR 1 ) -SET( DDSurfaces_VERSION_PATCH 0 ) - -SET( DDSurfaces_VERSION "${DDSurfaces_VERSION_MAJOR}.${DDSurfaces_VERSION_MINOR}" ) -SET( DDSurfaces_SOVERSION "${DDSurfaces_VERSION_MAJOR}.${DDSurfaces_VERSION_MINOR}" ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) -#set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -#set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH - "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." - FORCE ) - MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) - -#file(GLOB sources src/*.cpp) - -#add_library(${PackageName} SHARED ${sources} ) - -#SET_TARGET_PROPERTIES( ${PackageName} PROPERTIES VERSION ${DDSurfaces_VERSION} SOVERSION ${DDSurfaces_SOVERSION}) - -#--- install target------------------------------------- -install(DIRECTORY include/${PackageName} - DESTINATION include - PATTERN ".svn" EXCLUDE ) - -#install(TARGETS ${PackageName} -# RUNTIME DESTINATION bin -# LIBRARY DESTINATION lib -#) - -# to do: add corresponding uninstall... -#------------------------------------------------------- +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +# Author: F.Gaede (Desy) +# +#========================================================================== +dd4hep_package(DDSurfaces + INCLUDE_DIRS include + INSTALL_INCLUDES include/DDSurfaces) diff --git a/DDTest/CMakeLists.txt b/DDTest/CMakeLists.txt index 9570cc953..581126a9e 100644 --- a/DDTest/CMakeLists.txt +++ b/DDTest/CMakeLists.txt @@ -1,89 +1,29 @@ - -#-------------------------------------------------- - -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/DDCore/include - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_SOURCE_DIR}/DDSurfaces/include - ${CMAKE_SOURCE_DIR}/DDRec/include - ${CMAKE_SOURCE_DIR}/include - ${ROOT_INCLUDE_DIR} - ) -if(DD4HEP_USE_GEANT4) - include_directories( ${CMAKE_SOURCE_DIR}/DDG4/include ) -endif() - -SET(test_link_libraries DDCore DDRec DDSegmentation ${ROOT_LIBRARIES} Reflex ) - -if(DD4HEP_USE_GEANT4) - list(APPEND test_link_libraries DDG4 ${Geant4_LIBRARIES}) -endif() - -#-------------------------------------------------- -#ADD_TEST( t_init source "${CMAKE_CURRENT_WORK_DIR}/thisdd4hep.sh" ) - -SET( test_name "test_example" ) -ADD_EXECUTABLE(${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" ${EXECUTABLE_OUTPUT_PATH}/${test_name} ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - -SET( test_name "test_units" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - -SET( test_name "test_surface" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - -SET( test_name "test_bitfield64" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - -SET( test_name "test_PolarGridRPhi2" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - - -SET( test_name "test_cellDimensions" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - - -SET( test_name "test_cellDimensionsRPhi2" ) -ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc ) -TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries}) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" - ${EXECUTABLE_OUTPUT_PATH}/${test_name} ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" ) -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) - -#-------------------------------------------------- - - -install(FILES ./include/DD4hep/DDTest.h - DESTINATION include/DD4hep - ) - +#================================================================================= +# $Id: $ +# +# AIDA Detector description implementation for LCD +#--------------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#================================================================================= +dd4hep_package( DDTest + USES DDCore DDRec + OPTIONAL DDG4 + INCLUDE_DIRS include + INSTALL_INCLUDES include ) + +dd4hep_add_test_reg ( test_example BUILD_EXEC REGEX_FAIL "TEST_FAILED" ) +dd4hep_add_test_reg ( test_units BUILD_EXEC REGEX_FAIL "TEST_FAILED" + EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) +dd4hep_add_test_reg ( test_surface BUILD_EXEC REGEX_FAIL "TEST_FAILED" + EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) +dd4hep_add_test_reg ( test_bitfield64 BUILD_EXEC REGEX_FAIL "TEST_FAILED" + EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml ) + +dd4hep_add_test_reg ( test_PolarGridRPhi2 BUILD_EXEC REGEX_FAIL "TEST_FAILED" ) +dd4hep_add_test_reg ( test_cellDimensions BUILD_EXEC REGEX_FAIL "TEST_FAILED" ) +dd4hep_add_test_reg ( test_cellDimensionsRPhi2 BUILD_EXEC REGEX_FAIL "TEST_FAILED" ) diff --git a/UtilityApps/CMakeLists.txt b/UtilityApps/CMakeLists.txt index 4f2e162ae..d8e7654cf 100644 --- a/UtilityApps/CMakeLists.txt +++ b/UtilityApps/CMakeLists.txt @@ -9,63 +9,33 @@ # For the list of contributors see $DD4hepINSTALL/doc/CREDITS. # #========================================================================== - -cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -include_directories( ${CMAKE_SOURCE_DIR}/DDCore/include - ${ROOT_INCLUDE_DIR} - ${CMAKE_SOURCE_DIR}/DDSegmentation/include - ${CMAKE_SOURCE_DIR}/DDSurfaces/include - ${CMAKE_SOURCE_DIR}/DDRec/include - ${CMAKE_SOURCE_DIR}/DDTest/include ) - +dd4hep_package(UtilityApps USES DDCore) #----------------------------------------------------------------------------------- -add_executable(geoDisplay src/display.cpp) -target_link_libraries(geoDisplay DDCore ${ROOT_LIBRARIES}) +dd4hep_add_executable( geoDisplay src/display.cpp ) #----------------------------------------------------------------------------------- -add_executable(geoConverter src/converter.cpp) -target_link_libraries(geoConverter DDCore ${ROOT_LIBRARIES}) +dd4hep_add_executable( geoConverter src/converter.cpp ) #----------------------------------------------------------------------------------- -add_executable(geoPluginRun src/plugin_runner.cpp) -target_link_libraries(geoPluginRun DDCore ${ROOT_LIBRARIES}) +dd4hep_add_executable( geoPluginRun src/plugin_runner.cpp ) #----------------------------------------------------------------------------------- -add_executable( print_materials src/print_materials.cpp) -target_link_libraries(print_materials DDCore DDRec ${ROOT_LIBRARIES}) +dd4hep_add_executable( print_materials src/print_materials.cpp USES DDRec ) #----------------------------------------------------------------------------------- -add_executable( materialScan src/materialScan.cpp) -target_link_libraries(materialScan DDCore DDRec ${ROOT_LIBRARIES}) +dd4hep_add_executable( materialScan src/materialScan.cpp USES DDRec ) #----------------------------------------------------------------------------------- -add_executable( dumpdetector src/dumpdetector.cpp) -target_link_libraries(dumpdetector DDCore DDRec ${ROOT_LIBRARIES}) +dd4hep_add_executable( dumpdetector + USES DDRec + OPTIONAL [GEANT4 REQUIRED SOURCES src/dumpdetector.cpp]) #----------------------------------------------------------------------------------- - - -root_generate_dictionary( G__teve src/EvNavHandler.h LINKDEF src/LinkDef.h) -if(DD4HEP_USE_LCIO) - find_package(LCIO REQUIRED) - include_directories( ${LCIO_INCLUDE_DIRS} ) - add_executable(teveDisplay src/teve_display.cpp G__teve.cxx src/next_event_lcio.cpp) - - add_executable(test_surfaces src/test_surfaces.cpp ) - target_link_libraries(test_surfaces DDCore DDRec ${LCIO_LIBRARIES} ${ROOT_LIBRARIES}) -else() - add_executable(teveDisplay src/teve_display.cpp G__teve.cxx src/next_event_dummy.cpp) -endif() -target_link_libraries( teveDisplay DDCore ${ROOT_EVE_LIBRARIES} DDRec ${LCIO_LIBRARIES} ) - -#--- install target------------------------------------- - -if(DD4HEP_USE_LCIO) - install(TARGETS geoDisplay geoConverter geoPluginRun teveDisplay print_materials materialScan dumpdetector test_surfaces - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -else() - install(TARGETS geoDisplay geoConverter geoPluginRun teveDisplay print_materials materialScan dumpdetector - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -endif() - -# to do: add corresponding uninstall... -#------------------------------------------------------- +dd4hep_add_executable(test_surfaces + USES DDRec + OPTIONAL [LCIO REQUIRED SOURCES src/test_surfaces.cpp]) +#----------------------------------------------------------------------------------- +dd4hep_add_dictionary( G__teve SOURCES src/EvNavHandler.h LINKDEF src/LinkDef.h ) +#----------------------------------------------------------------------------------- +dd4hep_add_executable( teveLCIO + USES [ROOT REQUIRED COMPONENTS TEve] DDRec + OPTIONAL [LCIO REQUIRED SOURCES src/teve_display.cpp src/next_event_lcio.cpp G__teve.cxx] ) +#----------------------------------------------------------------------------------- +dd4hep_add_executable( teveDisplay + USES [ROOT REQUIRED COMPONENTS TEve] DDRec + SOURCES src/teve_display.cpp src/next_event_dummy.cpp + GENERATED G__teve.cxx ) diff --git a/cmake/DD4hep.cmake b/cmake/DD4hep.cmake index ab19d1fb0..e562ecec2 100644 --- a/cmake/DD4hep.cmake +++ b/cmake/DD4hep.cmake @@ -1,4 +1,46 @@ +#================================================================================= +# $Id: $ +# +# AIDA Detector description implementation for LCD +#--------------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#================================================================================= + +#--------------------------------------------------------------------------------------------------- +if ( DD4hep_DIR ) + set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_DIR}/cmake ) +endif() +if(CMAKE_INSTALL_PREFIX) + set ( CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} ) +endif() +#--------------------------------------------------------------------------------------------------- +# Need this fix, since the cmake name is Geant4 and on GEANT4 +if(DD4HEP_USE_GEANT4) + set ( DD4HEP_USE_BOOST ON ) # Boost is required ! +endif() +#--------------------------------------------------------------------------------------------------- +if(DD4HEP_USE_BOOST) + if ( "${Boost_INCLUDE_DIRS}" STREQUAL "" ) + find_package( Boost REQUIRED ) + ##include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ) + endif() + add_definitions( -DDD4HEP_USE_BOOST ) + add_definitions( -DBOOST_SPIRIT_USE_PHOENIX_V3 ) +endif() +# Main functional include file +include ( DD4hepBuild ) +include ( DD4hep_XML_setup ) + +##--------------------------------------------------------------------------------------------------- +## +## OLDER STUFF: To be kept for backwards compatibility .... +## #--------------------------------------------------------------------------------------------------- # add_dd4hep_plugin ( libraryName ) # @@ -15,10 +57,7 @@ function( add_dd4hep_plugin libraryName ) dd4hep_generate_rootmap( ${libraryName} ) endif() - install( TARGETS ${libraryName} - LIBRARY DESTINATION lib - ) - + install( TARGETS ${libraryName} LIBRARY DESTINATION lib ) endfunction() #--------------------------------------------------------------------------------------------------- @@ -35,7 +74,7 @@ function ( dd4hep_instantiate_package PackageName ) INCLUDE( DD4hepMacros ) #---- configure run environment --------------- - configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) + configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh DESTINATION bin @@ -43,8 +82,6 @@ function ( dd4hep_instantiate_package PackageName ) endfunction() - - #--------------------------------------------------------------------------------------------------- # dd4hep_generate_rootmap(library) # @@ -57,13 +94,11 @@ function(dd4hep_generate_rootmap library) dd4hep_generate_rootmap_notapple( ${library} ) endif() endfunction() - +#--------------------------------------------------------------------------------------------------- function(dd4hep_generate_rootmap_notapple library) - - if ( NOT DD4hep_ROOT ) - SET ( DD4hep_ROOT ${CMAKE_SOURCE_DIR} ) + if ( NOT DD4hep_DIR ) + SET ( DD4hep_DIR ${CMAKE_SOURCE_DIR} ) endif() - find_package(ROOT QUIET) if(DD4HEP_NO_REFLEX) set(rootmapfile ${CMAKE_SHARED_MODULE_PREFIX}${library}.components) @@ -76,7 +111,7 @@ endif() add_custom_command(OUTPUT ${rootmapfile} COMMAND ${CMAKE_COMMAND} -Dlibname=${libname} -Drootmapfile=${rootmapfile} -Dgenmap_install_dir=${LIBRARY_OUTPUT_PATH} - -P ${DD4hep_ROOT}/cmake/MakeRootMap.cmake + -P ${DD4hep_DIR}/cmake/MakeRootMap.cmake DEPENDS ${library}) add_custom_target(${library}Rootmap ALL DEPENDS ${rootmapfile}) @@ -85,22 +120,13 @@ endif() DESTINATION lib ) endfunction() - - - # # +#--------------------------------------------------------------------------------------------------- function(dd4hep_generate_rootmap_apple library) - # for now do the same for apple that is done for the rest dd4hep_generate_rootmap_notapple( ${library} ) - endfunction() - - - - - #--------------------------------------------------------------------------------------------------- # dd4hep_install_library(library) # diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake new file mode 100644 index 000000000..a5a02ee02 --- /dev/null +++ b/cmake/DD4hepBuild.cmake @@ -0,0 +1,1158 @@ +#================================================================================= +# $Id: $ +# +# AIDA Detector description implementation for LCD +#--------------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#================================================================================= +cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) +###set(DD4HEP_DEBUG_CMAKE 1) +message ( STATUS "INCLUDING DD4hep...." ) +include ( CMakeParseArguments ) + +#--------------------------------------------------------------------------------------------------- +macro(dd4hep_to_parent_scope val) + set ( ${val} ${${val}} PARENT_SCOPE ) +endmacro(dd4hep_to_parent_scope) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_debug +# +# Print messages if debug flag is enabled +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_debug msg ) + if( NOT "${DD4HEP_DEBUG_CMAKE}" STREQUAL "" ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + #message( STATUS "DEBUG **** ${msg}" ) + string ( LENGTH "${msg}" lmsg ) + if ( ${lmsg} GREATER 1024 ) + string ( SUBSTRING "${msg}" 0 132 pmsg ) + message( STATUS "D++> [${pkg}] ${pmsg}" ) + else() + message( STATUS "D++> [${pkg}] ${msg}" ) + endif() + endif() +endfunction( dd4hep_debug ) + + +#--------------------------------------------------------------------------------------------------- +# dd4hep_set_version +# +# Set version structure for building the DD4hep software +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_set_version packageName ) + cmake_parse_arguments ( ARG "" "MAJOR;MINOR;PATCH" "" ${ARGN} ) + if ( NOT "${packageName}" STREQUAL "" ) + project ( ${packageName} ) + else() + message(FATAL_ERROR " !!! Attempt to define a DD4hep project without a name !!!") + endif() + set ( major ${ARG_MAJOR} ) + set ( minor ${ARG_MINOR} ) + set ( patch ${ARG_PATCH} ) + + if ( "${major}" STREQUAL "" ) + set ( major ${DD4hep_VERSION_MAJOR} ) + endif() + if ( "${minor}" STREQUAL "" ) + set ( minor ${DD4hep_VERSION_MINOR} ) + endif() + if ( "${patch}" STREQUAL "" ) + set ( patch ${DD4hep_VERSION_PATCH} ) + endif() + + if ( NOT ("${major}" STREQUAL "" OR "${minor}" STREQUAL "" OR "${patch}" STREQUAL "") ) + #message ( STATUS "dd4hep_set_version(${packageName} MAJOR ${major} MINOR ${minor} PATCH ${patch})" ) + set( ${packageName}_VERSION_MAJOR ${major} PARENT_SCOPE ) + set( ${packageName}_VERSION_MINOR ${minor} PARENT_SCOPE ) + set( ${packageName}_VERSION_PATCH ${patch} PARENT_SCOPE ) + set( ${packageName}_VERSION "${major}.${minor}" PARENT_SCOPE ) + set( ${packageName}_SOVERSION "${major}.${minor}" PARENT_SCOPE ) + else() + message( FATAL_ERROR "|++> ${packageName}: No Package versions specified.....-> ( ${major}.${minor}.${patch} )" ) + endif() +endfunction( dd4hep_set_version ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_print_options +# +# Print the current option setup for informational purposes +# +# \author M.Frank +# \version 1.0 +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_print_options ) + message ( STATUS "+-------------------------------------------------------------------------------" ) + message ( STATUS "| DD4hep build setup: " ) + message ( STATUS "| " ) + message ( STATUS "| CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH} " ) + message ( STATUS "| DD4HEP_USE_BOOST: ${DD4HEP_USE_BOOST} DD4HEP_USE_Boost:${DD4HEP_USE_Boost}" ) + message ( STATUS "| DD4HEP_USE_XERCESC: ${DD4HEP_USE_XERCESC} " ) + message ( STATUS "| XERCESC_ROOT_DIR: ${XERCESC_ROOT_DIR} " ) + message ( STATUS "| DD4HEP_USE_LCIO: ${DD4HEP_USE_LCIO} " ) + message ( STATUS "| LCIO_DIR: ${LCIO_DIR} " ) + message ( STATUS "| DD4HEP_USE_GEANT4: ${DD4HEP_USE_GEANT4} " ) + message ( STATUS "| Geant4_DIR: ${Geant4_DIR} " ) + message ( STATUS "| DD4HEP_USE_PYROOT: ${DD4HEP_USE_PYROOT} " ) + message ( STATUS "| BUILD_TESTING: ${BUILD_TESTING} " ) + message ( STATUS "| " ) + message ( STATUS "+-------------------------------------------------------------------------------" ) +endfunction ( dd4hep_print_options ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_print_cmake_options +# +# usage() like function to be called if bad cmake arguments are supplied.... +# +# \author M.Frank +# \version 1.0 +#--------------------------------------------------------------------------------------------------- +function( dd4hep_print_cmake_options ) + cmake_parse_arguments ( ARG "" "ERROR" "OPTIONAL" ${ARGN} ) + if ( NOT "${ARG_OPTIONAL}" STREQUAL "" ) + message ( STATUS "+---------------------------------------------------------------------------+") + foreach ( opt ${ARG_OPTIONAL} ) + message ( STATUS "| ${opt}" ) + endforeach() + endif() + message ( STATUS "+--Option name ------Description ----------------------------------Default-+") + message ( STATUS "| DD4HEP_USE_XERCESC Enable 'Detector Builders' based on XercesC OFF |") + message ( STATUS "| Requires XERCESC_ROOT_DIR to be set |") + message ( STATUS "| or XercesC in CMAKE_MODULE_PATH |") + message ( STATUS "| DD4HEP_USE_GEANT4 Enable the simulation part based on Geant4 OFF |") + message ( STATUS "| Requires Geant_DIR to be set |") + message ( STATUS "| or Geant4 in CMAKE_MODULE_PATH |") + message ( STATUS "| DD4HEP_USE_LCIO Build lcio extensions OFF |") + message ( STATUS "| Requires LCIO_DIR to be set |") + message ( STATUS "| or LCIO in CMAKE_MODULE_PATH |") + message ( STATUS "| DD4HEP_USE_GEAR Build gear wrapper for backward compatibility OFF |") + message ( STATUS "| DD4HEP_USE_CXX11 Build DD4hep using c++11 OFF |") + message ( STATUS "| BUILD_TESTING Enable and build tests ON |") + message ( STATUS "| DD4HEP_USE_PYROOT Enable 'Detector Builders' based on PyROOT OFF |") + message ( STATUS "+---------------------------------------------------------------------------+") + if ( NOT "${ARG_ERROR}" STREQUAL "" ) + message ( FATAL_ERROR "Invalid cmake options supplied!" ) + endif() +endfunction( dd4hep_print_cmake_options ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_configure_output +# +# Setup build and install target directories +# +# \author M.Frank +# \version 1.0 +#--------------------------------------------------------------------------------------------------- +macro ( dd4hep_configure_output ) + cmake_parse_arguments ( ARG "" "OUTPUT;INSTALL" "" ${ARGN} ) + if ( NOT "${ARG_OUTPUT}" STREQUAL "" ) + set ( LIBRARY_OUTPUT_PATH ${ARG_OUTPUT}/lib ) + set ( EXECUTABLE_OUTPUT_PATH ${ARG_OUTPUT}/bin ) + else() + set ( LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/lib ) + set ( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin ) + endif() + #------------- set the default installation directory to be the source directory + if ( NOT "${ARG_INSTALL}" STREQUAL "" ) + set ( CMAKE_INSTALL_PREFIX ${ARG_INSTALL} CACHE PATH "Set install prefix path." FORCE ) + elseif ( CMAKE_INSTALL_PREFIX ) + set ( CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} ) + elseif ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH + "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." FORCE ) + message(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) + endif() + dd4hep_debug("|++> Installation goes to: ${CMAKE_INSTALL_PREFIX} <${ARG_INSTALL}>" ) +endmacro ( dd4hep_configure_output ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_make_unique_list +# +# Create clean list without duplicate entries. +# +# \author M.Frank +# \version 1.0 +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_make_unique_list name ) + cmake_parse_arguments ( ARG "" "" "VALUES" ${ARGN} ) + set ( vals ) + foreach( v ${ARG_VALUES} ) + set ( vals "${vals} ${v}" ) + endforeach() + string( REGEX REPLACE " " ";" vals "${vals}" ) + if( NOT "${vals}" STREQUAL "" ) + list ( REMOVE_DUPLICATES vals ) + endif() + set( ${name} ${vals} PARENT_SCOPE ) +endfunction( dd4hep_make_unique_list ) + +# +# \author M.Frank +# \version 1.0 +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_find_packageEx PKG_NAME ) + set ( pkg ${PKG_NAME} ) + string ( TOUPPER "${pkg}" pkg ) + if ( "${pkg}" STREQUAL "GEANT4" ) + set (pkg "Geant4" ) + elseif ( "${pkg}" STREQUAL "BOOST" ) + set (pkg "Boost" ) + elseif ( "${pkg}" STREQUAL "LCIO" ) + set (pkg "LCIO" ) + elseif ( "${pkg}" STREQUAL "XERCESC" ) + set (pkg "XercesC" ) + elseif ( "${pkg}" STREQUAL "DD4HEP" ) + set (pkg "DD4hep" ) + endif() + dd4hep_debug( "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" ) + ##message(STATUS "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" ) + if ( "${${pkg}_LIBRARIES}" STREQUAL "" ) + cmake_parse_arguments(ARG "" "" "ARGS" ${ARGN} ) + find_package( ${pkg} ${ARG_ARGS} ) + else() + cmake_parse_arguments(ARG "" "" "ARGS" ${ARGN} ) + find_package( ${pkg} QUIET ${ARG_ARGS} ) + endif() + # Propagate values to caller + string ( TOUPPER "${pkg}" PKG ) + if ( "${pkg}" STREQUAL "${PKG}" ) + set ( libs ${${PKG}_LIBRARIES} ${${pkg}_LIBRARY} ${${pkg}_LIBRARIES} ) + set ( incs ${${PKG}_INCLUDE_DIRS} ${${pkg}_INCLUDE_DIR} ${${pkg}_INCLUDE_DIRS} ) + else() + set ( libs ${${PKG}_LIBRARIES} ${${pkg}_LIBRARY} ${${pkg}_LIBRARIES} ${${PKG}_LIBRARY} ${${PKG}_LIBRARIES} ) + set ( incs ${${PKG}_INCLUDE_DIRS} ${${pkg}_INCLUDE_DIR} ${${pkg}_INCLUDE_DIRS} ${${PKG}_INCLUDE_DIR} ${${PKG}_INCLUDE_DIRS} ) + endif() + dd4hep_make_unique_list ( libs VALUES ${libs} ) + dd4hep_make_unique_list ( incs VALUES ${incs} ) + + set ( ${PKG}_EXISTS "ON" PARENT_SCOPE ) + set ( ${PKG}_LIBRARIES ${libs} PARENT_SCOPE ) + set ( ${PKG}_INCLUDE_DIRS ${incs} PARENT_SCOPE ) + if ( "${incs}" STREQUAL "" ) + message(FATAL_ERROR "Unknown package ${pkg}") + endif() +endfunction( dd4hep_find_packageEx ) + + +#--------------------------------------------------------------------------------------------------- +# dd4hep_find_package +# +# Find dependent packages. +# +# - Allows to also find internal packages like e.g. DDCore, DDG4 using the internal +# libarary cache stored in DD4HEP_ALL_PACKAGES. +# - If a libary is not explicitly mentioned therein, and the package is not explicitly +# switched OFF by a global property of the name "DD4HEP_USE_${name}" or a global +# variable "DD4HEP_USE_${name}", dd4hep_find_packageEx is called. +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_find_package name found ) + cmake_parse_arguments(ARG "" "TYPE" "" ${ARGN} ) + string ( TOUPPER ${name} NAME ) + get_property ( all_packages GLOBAL PROPERTY DD4HEP_ALL_PACKAGES ) + set ( found_package -1 ) + + if ( NOT "${all_packages}" STREQUAL "" ) + list ( FIND all_packages "${NAME}" found_package ) + endif() + + get_property( use_pkg GLOBAL PROPERTY DD4HEP_USE_${NAME} ) + + # For internal dependencies we rely on the correct order of the included directories + if ( NOT found_package EQUAL -1 ) + # Resolve dependency from local packages + get_property(used GLOBAL PROPERTY DD4HEP_USE_${NAME} ) + get_property(incs GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS ) + get_property(libs GLOBAL PROPERTY ${NAME}_LIBRARIES ) + set ( DD4HEP_USE_${NAME} "ON" PARENT_SCOPE ) + set ( ${NAME}_LIBRARIES ${libs} PARENT_SCOPE ) + set ( ${NAME}_INCLUDE_DIRS ${incs} PARENT_SCOPE ) + set ( ${found} "ON" PARENT_SCOPE ) + elseif ( found_package EQUAL -1 AND "${ARG_TYPE}" STREQUAL "INTERNAL" ) + set_property( GLOBAL PROPERTY DD4HEP_USE_${NAME} "OFF" ) + set ( ${found} "OFF" PARENT_SCOPE ) + elseif ( "${DD4HEP_USE_${name}}" STREQUAL "OFF" OR "${DD4HEP_USE_${NAME}}" STREQUAL "OFF" ) + set ( ${found} "OFF" PARENT_SCOPE ) + elseif ( "${use_pkg}" STREQUAL "OFF" ) + set ( ${found} "OFF" PARENT_SCOPE ) + else() + # + # 3 possibilities left: + # 1) Either use external package cache from previous call (same call args!) or + # 2) call findPackage again/first time....or + # 3) package does not exist! + # + get_property( pkg_setup GLOBAL PROPERTY ${NAME}_COMPONENTS ) + set ( ARGN ${ARG_UNPARSED_ARGUMENTS} ) + set ( arguments ${NAME} ${ARGN} ) + list ( REMOVE_DUPLICATES arguments ) + list ( REMOVE_ITEM arguments "REQUIRED" "QUIET" ) + + if ( "${pkg_setup}" STREQUAL "${arguments}" ) + get_property ( incs GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS ) + get_property ( libs GLOBAL PROPERTY ${NAME}_LIBRARIES ) + get_property ( exists GLOBAL PROPERTY ${NAME}_EXISTS ) + set ( DD4HEP_USE_${NAME} "ON" PARENT_SCOPE ) + set ( ${NAME}_EXISTS ${exists} PARENT_SCOPE ) + set ( ${NAME}_LIBRARIES ${libs} PARENT_SCOPE ) + set ( ${NAME}_INCLUDE_DIRS ${incs} PARENT_SCOPE ) + set ( ${found} "ON" PARENT_SCOPE ) + else() + dd4hep_find_packageEx( ${name} ${ARGN} ) + dd4hep_debug("dd4hep_find_package: DD4HEP_USE_${name}: ${DD4HEP_USE_${NAME}} Exists: ${${NAME}_EXISTS} ARGS:${arguments}") + if ( "${${NAME}_EXISTS}" STREQUAL "ON" ) + dd4hep_debug( "dd4hep_find_package ${NAME} Incs: ${incs}" ) + dd4hep_debug( "dd4hep_find_package ${NAME} Libs: ${libs}" ) + set_property ( GLOBAL PROPERTY ${NAME}_COMPONENTS ${arguments} ) + set_property ( GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS ${${NAME}_INCLUDE_DIRS} ) + set_property ( GLOBAL PROPERTY ${NAME}_LIBRARIES ${${NAME}_LIBRARIES} ) + set_property ( GLOBAL PROPERTY ${NAME}_EXISTS ${${NAME}_EXISTS} ) + dd4hep_to_parent_scope ( DD4HEP_USE_${NAME} ) + dd4hep_to_parent_scope ( ${NAME}_EXISTS ) + dd4hep_to_parent_scope ( ${NAME}_LIBRARIES ) + dd4hep_to_parent_scope ( ${NAME}_INCLUDE_DIRS ) + set ( ${found} "ON" PARENT_SCOPE ) + else() + set ( ${found} "OFF" PARENT_SCOPE ) + endif() + endif() + endif() +endfunction( dd4hep_find_package ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_install_dir +# +# Install all directories as indicated by all unparsed arguments to the +# output destination DESTINATION. +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_install_dir ) + cmake_parse_arguments ( ARG "" "DESTINATION" "" ${ARGN} ) + if( NOT "${ARG_UNPARSED_ARGUMENTS}" STREQUAL "" ) + foreach ( d ${ARG_UNPARSED_ARGUMENTS} ) + install ( DIRECTORY ${d} + DESTINATION ${ARG_DESTINATION} + PATTERN ".svn" EXCLUDE ) + endforeach() + endif() +endfunction( dd4hep_install_dir ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_install_examples +# +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function(dd4hep_install_examples dir_names) + cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN} ) + dd4hep_install_dir( ${dir_names} DESTINATION ${ARG_DESTINATION} ) +endfunction(dd4hep_install_examples) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_install_includes +# +# Install all include directories as indicated by all unparsed arguments to the +# output destination DESTINATION. +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_install_includes package ) + message( STATUS "dd4hep_install_includes[${package}]: ${ARGN}" ) + dd4hep_install_dir( ${ARGN} DESTINATION include ) +endfunction() + +#--------------------------------------------------------------------------------------------------- +# dd4hep_install_files +# +# Install all files as indicated by the FILES argument or all unparsed arguments to the +# output destination DESTINATION. +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function(dd4hep_install_files) + cmake_parse_arguments ( ARG "" "DESTINATION" "FILES" ${ARGN} ) + foreach ( f ${ARG_UNPARSED_ARGUMENTS} ${ARG_FILES} ) + file ( GLOB sources ${f} ) + install (FILES ${sources} DESTINATION ${ARG_DESTINATION} ) + endforeach() +endfunction( dd4hep_install_files ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_unpack_package_opts +# +# INTERNAL routine not to be used directly by clients +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_unpack_package_opts name opt ) + set ( nam_pkg ) + set ( req_pkg ) + set ( typ_pkg ) + set ( com_pkg ) + set ( comp_pkg ) + set ( src_pkg ) + set ( srcs_pkg ) + set ( def_pkg ) + set ( defs_pkg ) + if ( "${opt}" MATCHES "\\[" ) + string ( REGEX REPLACE "\\[;" "" opt "${opt}" ) + string ( REGEX REPLACE "\\[" "" opt "${opt}" ) + string ( REGEX REPLACE ";\\]" "" opt "${opt}" ) + string ( REGEX REPLACE "\\]" "" opt "${opt}" ) + string ( REPLACE ";" ";" all_opt "${opt}") + dd4hep_debug ( "unpack ${name} : ${opt}" ) + foreach( e ${all_opt} ) + if( "${nam_pkg}" STREQUAL "") + set ( nam_pkg ${e} ) + elseif ( "${e}" STREQUAL "REQUIRED") + set ( req_pkg ${e} ) + elseif ( "${e}" STREQUAL "INTERNAL") + set ( typ_pkg ${e} ) + elseif ( "${e}" STREQUAL "EXTERNAL") + set ( typ_pkg ${e} ) + elseif ( "${com_pkg}" STREQUAL "" AND "${e}" STREQUAL "COMPONENTS") + set ( com_pkg ${e} ) + elseif ( "${src_pkg}" STREQUAL "" AND "${e}" STREQUAL "SOURCES") + set ( src_pkg ${e} ) + elseif ( "${def_pkg}" STREQUAL "" AND "${e}" STREQUAL "DEFINITIONS") + set ( def_pkg ${e} ) + elseif ( "${src_pkg}" STREQUAL "" ) + set ( comp_pkg ${comp_pkg} ${e} ) + elseif ( NOT "${src_pkg}" STREQUAL "" ) + set ( srcs_pkg ${srcs_pkg} ${e} ) + elseif ( NOT "${def_pkg}" STREQUAL "" ) + set ( defs_pkg ${defs_pkg} ${e} ) + endif() + endforeach() + else() + set ( nam_pkg ${opt} ) + set ( req_pkg REQUIRED ) + endif() + string ( TOUPPER "${nam_pkg}" nam_pkg ) + set ( ${name}_NAME ${nam_pkg} PARENT_SCOPE ) + set ( ${name}_REQUIRED ${req_pkg} PARENT_SCOPE ) + set ( ${name}_TYPE ${typ_pkg} PARENT_SCOPE ) + set ( ${name}_COMPONENT ${com_pkg} PARENT_SCOPE ) + set ( ${name}_COMPONENTS ${comp_pkg} PARENT_SCOPE ) + set ( ${name}_SOURCES ${srcs_pkg} PARENT_SCOPE ) + set ( ${name}_DEFINITIONS ${defs_pkg} PARENT_SCOPE ) + dd4hep_debug ( "unpack ${name} : ${nam_pkg} ${req_pkg} ${com_pkg} comp: ${comp_pkg} src: ${srcs_pkg}" ) +endfunction ( dd4hep_unpack_package_opts ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_get_dependency_opts +# +# INTERNAL routine not to be used directly by clients +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_get_dependency_opts local_incs local_libs local_uses pkg ) + # + # If the variables <package>_INCLUDE_DIRS and <package>_LIBRARIES were not set + # at the parent level, check if a corresponding property exists.... + # + string ( TOUPPER "${pkg}" pkg ) + if ( "${${pkg}_INCLUDE_DIRS}" STREQUAL "" ) + get_property(${pkg}_INCLUDE_DIRS GLOBAL PROPERTY ${pkg}_INCLUDE_DIRS ) + endif() + if ( "${${pkg}_LIBRARIES}" STREQUAL "" ) + get_property(${pkg}_LIBRARIES GLOBAL PROPERTY ${pkg}_LIBRARIES ) + endif() + set(libs "${${pkg}_LIBRARIES}" ) + string(REGEX REPLACE " " " " libs "${libs}" ) + string(REGEX REPLACE " " ";" libs "${libs}" ) + + set(incs "${${pkg}_INCLUDE_DIRS}" ) + string(REGEX REPLACE " " " " incs "${incs}" ) + string(REGEX REPLACE " " ";" incs "${incs}" ) + + set(uses "${${pkg}_USES}" ) + string(REGEX REPLACE " " " " uses "${uses}" ) + string(REGEX REPLACE " " ";" uses "${uses}" ) + + set ( ${local_incs} ${incs} PARENT_SCOPE ) + set ( ${local_libs} ${libs} PARENT_SCOPE ) + set ( ${local_uses} ${uses} PARENT_SCOPE ) +endfunction ( dd4hep_get_dependency_opts ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_handle_optional_sources +# +# INTERNAL routine not to be used directly by clients +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function (dd4hep_handle_optional_sources tag optionals missing uses sources ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + set (miss) + set (src) + set (use) + foreach(opt ${optionals} ) + dd4hep_unpack_package_opts ( USE ${opt} ) + dd4hep_debug("unpack DD4HEP_USE_${USE_NAME}=${DD4HEP_USE_${USE_NAME}} <> ${use_pkg} -- ${opt}" ) + dd4hep_debug("|++> ${tag} find_package( ${USE_NAME} ARGS: ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} ${USE_TYPE} )") + dd4hep_find_package( ${USE_NAME} pkg_found + ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} + TYPE ${USE_TYPE} ) + if ( "{pkg_found}" STREQUAL "OFF" ) + message( STATUS "| ${tag} ...optional: Skip sources ${USE_SOURCES} [requires ${USE_NAME}]" ) + elseif ( "${pkg_found}" STREQUAL "ON" ) + message( STATUS "| ${tag} ...optional: ADD sources ${USE_SOURCES} [dependent on ${USE_NAME}]" ) + file ( GLOB opt_sources ${USE_SOURCES} ) + set ( src ${src} ${opt_sources} ) + set ( use ${use} ${opt} ) + elseif ( "${USE_REQUIRED}" STREQUAL "REQUIRED" ) + set (miss ${miss} ${USE_NAME} ) + else() + message( STATUS "| ${tag} ...optional: Skip sources ${USE_SOURCES} [requires ${USE_NAME}]" ) + endif() + endforeach() + set ( ${missing} ${miss} PARENT_SCOPE ) + set ( ${uses} ${use} PARENT_SCOPE ) + set ( ${sources} ${src} PARENT_SCOPE ) +endfunction(dd4hep_handle_optional_sources) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_use_package +# +# INTERNAL routine not to be used directly by clients +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_use_package print_prefix inName outName ) + cmake_parse_arguments( ARG "" "NAME" "USES;OPTIONAL" ${ARGN} ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + # + get_property(pkg_incs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_INCLUDE_DIRS ) + get_property(pkg_libs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_LINK_LIBRARIES ) + get_property(pkg_uses DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_USES ) + # + set ( missing ) + set ( used_uses ${pkg_uses} ) + set ( used_incs ${pkg_incs} ) + set ( used_libs ${pkg_libs} ) + # + foreach( use ${ARG_USES} ) + if( "${use}" MATCHES "\\[" ) + dd4hep_unpack_package_opts ( USE ${use} ) + dd4hep_find_package( ${USE_NAME} pkg_found ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} ) + set ( use ${USE_NAME} ) + else() + dd4hep_find_package( ${use} pkg_found ) + endif() + if ( "${pkg_found}" STREQUAL "ON" ) + dd4hep_debug ( "${print_prefix} package_libs: ${${use}_LIBRARIES}" ) + set ( use ${use} ) + elseif ( "{pkg_found}" STREQUAL "OFF" ) + message ( STATUS "|++> ${print_prefix} ...Missing package: ${use} [Ignored]" ) + unset ( use ) + elseif ( "${USE_REQUIRED}" STREQUAL "REQUIRED" ) + message ( FATAL_ERROR "|++> ${print_prefix} ...Missing package: ${use} [Fatal REQUIRED]" ) + set ( missing ${missing} ${use} ) + unset ( use ) + else() + message( STATUS "| ${print_prefix} ...optional: Skip sources ${USE_SOURCES} [Usage ${use} not defined]" ) + unset ( use ) + endif() + set ( used_uses ${used_uses} ${use} ) + endforeach() + # + # + # + foreach(use ${ARG_UNPARSED_ARGUMENTS} ${ARG_OPTIONAL} ) + if ( "${use}" MATCHES "\\[" ) + dd4hep_unpack_package_opts ( USE ${use} ) + dd4hep_find_package( ${USE_NAME} pkg_found ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} ) + set ( use ${USE_NAME} ) + set ( src "sources ${USE_SOURCES}" ) + else() + dd4hep_find_package( ${use} pkg_found ) + set ( src ${use} ) + endif() + if ( NOT "${pkg_found}" STREQUAL "ON" ) + message ( STATUS "| ${print_prefix} ...optional: Skip optional ${src} [Not defined]" ) + unset ( use ) + endif() + set ( used_uses ${used_uses} ${use} ) + endforeach() + # + set (all_used ${used_uses} ) + foreach ( use ${used_uses} ) + get_property ( dependent_uses GLOBAL PROPERTY ${use}_USES ) + foreach ( dependent ${dependent_uses} ) + list ( FIND used_uses ${dependent} already_used ) + if ( ${already_used} EQUAL -1 ) + dd4hep_debug ( "${print_prefix} ADD DEPENDENCY: ${use} --> ${dependent}" ) + set ( all_used ${all_used} ${dependent} ) + else() + dd4hep_debug( "${print_prefix} ALREADY DEPENDS: ${use} --> ${dependent}") + set ( all_used ${all_used} ${dependent} ) + endif() + endforeach() + endforeach() + # + set ( used_uses ${all_used} ) + foreach ( use ${used_uses} ) + dd4hep_get_dependency_opts( local_incs local_libs local_uses ${use} ) + set ( used_incs ${used_incs} ${local_incs} ) + set ( used_libs ${used_libs} ${local_libs} ) + dd4hep_make_unique_list ( used_incs VALUES ${used_incs} ) + dd4hep_make_unique_list ( used_libs VALUES ${used_libs} ) + dd4hep_debug ( "${print_prefix} DEPENDENCY: ${use} Lib: ${local_libs} " ) + dd4hep_debug ( "${print_prefix} DEPENDENCY: ${use} Inc: ${local_incs} " ) + endforeach() + # + dd4hep_make_unique_list ( used_incs VALUES ${used_incs} ) + dd4hep_make_unique_list ( used_libs VALUES ${used_libs} ) + dd4hep_make_unique_list ( used_uses VALUES ${used_uses} ) + dd4hep_make_unique_list ( missing VALUES ${missing} ) + # + if ( "${used_uses}" STREQUAL "" AND "${missing}" STREQUAL "" ) + message(STATUS "|++> ${print_prefix} Uses DEFAULTS" ) + elseif ( "${missing}" STREQUAL "" ) + message(STATUS "|++> ${print_prefix} Uses: ${used_uses}" ) + else() + dd4hep_debug ( "${print_prefix} Uses: ${used_uses} " ) + dd4hep_debug ( "${print_prefix} Missing:${missing} " ) + endif() + dd4hep_debug ( "${print_prefix} Dep.Incs:${used_incs} " ) + dd4hep_debug ( "${print_prefix} Dep.Libs:${used_libs} " ) + # + set ( ${outName}_MISSING ${missing} PARENT_SCOPE ) + set ( ${outName}_INCLUDE_DIRS ${used_incs} PARENT_SCOPE ) + set ( ${outName}_LINK_LIBRARIES ${used_libs} PARENT_SCOPE ) + set ( ${outName}_USES ${used_uses} PARENT_SCOPE ) +endfunction() + +#--------------------------------------------------------------------------------------------------- +# dd4hep_package +# +# Arguments +# --------- +# packageName -> name of the package +# INCLUDE_DIRS -> Include directories needed to compile package binaries +# INSTALL_INCLUDES -> Installation directive for header files +# LINK_LIBRARIES -> Libraries needed to link the binary +# USES -> Required package dependencies +# OPTIONAL -> Optional package dependency e.g. [LCIO REQUIRED COMPONENTS] +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_package packageName ) + #cmake_parse_arguments(ARG "" "LIBRARY;MAJOR;MINOR;PATCH;OUTPUT;INSTALL" "USES;OPTIONAL;LINK_LIBRARIES;INCLUDE_DIRS;INSTALL_INCLUDES" ${ARGN}) + cmake_parse_arguments(ARG "" "LIBRARY;MAJOR;MINOR;PATCH" "USES;OPTIONAL;LINK_LIBRARIES;INCLUDE_DIRS;INSTALL_INCLUDES" ${ARGN}) + set_property( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME ${packageName} ) + string ( TOUPPER "${packageName}" PKG_NAME ) + dd4hep_set_version ( ${packageName} MAJOR ${ARG_MAJOR} MINOR ${ARG_MINOR} PATCH ${ARG_PATCH} ) + dd4hep_to_parent_scope ( ${packageName}_VERSION_MAJOR ) + dd4hep_to_parent_scope ( ${packageName}_VERSION_MINOR ) + dd4hep_to_parent_scope ( ${packageName}_VERSION_PATCH ) + dd4hep_to_parent_scope ( ${packageName}_VERSION ) + dd4hep_to_parent_scope ( ${packageName}_SOVERSION ) + set ( vsn "Version: ( ${${packageName}_VERSION_MAJOR}.${${packageName}_VERSION_MINOR}.${${packageName}_VERSION_PATCH} )" ) + message(STATUS "+------------------------------------------- <<<< PACKAGE ${packageName} >>>> ${vsn}" ) + + dd4hep_use_package ( "Package[${packageName}]" PACKAGE PACKAGE + USES ${ARG_USES} + OPTIONAL ${ARG_OPTIONAL} ) + if ( "${PACKAGE_MISSING}" STREQUAL "" ) + # + # + # + #dd4hep_configure_output ( OUTPUT "${ARG_OUTPUT}" INSTALL "${ARG_INSTALL}" ) + # + # + set (used_incs ${PACKAGE_INCLUDE_DIRS} ) + set (used_libs ${PACKAGE_LINK_LIBRARIES} ) + # + # Define the include directories including dependent packages + # + list(APPEND used_incs ${CMAKE_CURRENT_SOURCE_DIR}/include ) + foreach( inc ${ARG_INCLUDE_DIRS} ) + list( APPEND used_incs ${CMAKE_CURRENT_SOURCE_DIR}/${inc} ) + endforeach() + # + # Build the list of link libraries required to build the package library and plugins etc. + # + dd4hep_make_unique_list ( used_libs VALUES ${used_libs} ${ARG_LINK_LIBRARIES} ) + dd4hep_make_unique_list ( used_incs VALUES ${used_incs} ) + # + # Save the variables in the context of the current source directory (ie. THIS package) + # + set ( use "ON" ) + set_property ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_INCLUDE_DIRS ${used_incs} ) + set_property ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_LINK_LIBRARIES ${used_libs} ) + + set_property ( GLOBAL PROPERTY ${PKG_NAME}_LIBRARIES ${used_libs} ) + set_property ( GLOBAL PROPERTY DD4HEP_USE_${PKG_NAME} ${use} ) + set_property ( GLOBAL PROPERTY ${PKG_NAME}_INCLUDE_DIRS ${used_incs} ) + set_property ( GLOBAL PROPERTY ${PKG_NAME}_USES ${PACKAGE_USES} ) + # + # Add package to 'internal' package list + # + get_property ( all_packages GLOBAL PROPERTY DD4HEP_ALL_PACKAGES ) + set ( all_packages ${PKG_NAME} ${all_packages} ) + set_property ( GLOBAL PROPERTY DD4HEP_ALL_PACKAGES ${all_packages} ) + get_property ( use GLOBAL PROPERTY DD4HEP_USE_${PKG_NAME} ) + # + # Some debugging: + # + dd4hep_debug ( "Property: DD4HEP_USE_${PKG_NAME}=${use}" ) + dd4hep_debug ( "Used Libs: ${used_libs}" ) + dd4hep_debug ( "Used Incs: ${used_incs}" ) + # + # Define the installation pathes of the headers. + # + dd4hep_install_dir ( ${ARG_INSTALL_INCLUDES} DESTINATION include ) + else() + message (FATAL_ERROR "Missing package dependencies: ${PACKAGE_MISSING}" ) + endif() + # +endfunction() + +#--------------------------------------------------------------------------------------------------- +# dd4hep_add_library +# +# Arguments +# --------- +# binary -> plugin name +# SOURCES -> list of source files. Will be expanded to absolute names +# +# The following variables EXTEND the package defaults +# INCLUDE_DIRS -> Additional include directories need to compile the binary +# LINK_LIBRARIES -> Additional libraries needed to link the binary +# USES -> Required package dependencies +# OPTIONAL -> Optional package dependency +# if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built +# else e.g. [LCIO SOURCES aaa.cpp] the plugin will be built, but +# the source files will be omitted. +# DEFINITIONS -> Optional compiler definitions to compile the sources +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_add_library binary building ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + cmake_parse_arguments ( ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL;DEFINITIONS;PRINT" ${ARGN} ) + dd4hep_debug( "+------------------------------------------- <<<< LIBRARY ${pkg}:${binary} >>>> Version: ${${pkg}_VERSION}" ) + + set ( tag "Library[${pkg}] -> ${binary}" ) + if ( NOT "${ARG_PRINT}" STREQUAL "" ) + set ( tag ${ARG_PRINT} ) + endif() + set ( building_binary "OFF" ) + + if ( NOT "${ARG_OPTIONAL}" STREQUAL "" ) + dd4hep_handle_optional_sources ( ${tag} "${ARG_OPTIONAL}" optional_missing optional_uses optional_sources ) + endif() + + if ( NOT "${optional_missing}" STREQUAL "" ) + message( STATUS "|++> ${tag} (optional) skipped. Missing dependency: ${optional_missing}" ) + else() + dd4hep_use_package( "${tag}" PACKAGE LOCAL + USES ${ARG_USES} ${optional_uses} + OPTIONAL ${ARG_OPTIONAL} ) + + if ( NOT "${LOCAL_MISSING}" STREQUAL "" ) + message( STATUS "|++> ${tag} skipped. Missing dependency: ${missing}" ) + endif() + set (pkg_incs ${LOCAL_INCLUDE_DIRS} ) + set (pkg_libs ${LOCAL_LINK_LIBRARIES} ) + # + dd4hep_make_unique_list( pkg_incs VALUES ${pkg_incs} ${ARG_INCLUDE_DIRS} ) + # + dd4hep_make_unique_list( pkg_libs VALUES ${pkg_libs} ${ARG_LINK_LIBRARIES} ) + # + dd4hep_make_unique_list( pkg_defs VALUES ${COMPILE_DEFINITIONS} ${ARG_DEFINITIONS} ) + # + file ( GLOB sources ${ARG_SOURCES} ) + list ( APPEND sources ${optional_sources} ) + if ( NOT "${ARG_GENERATED}" STREQUAL "" ) + # + # root-cint produces warnings of type 'unused-function' disable them on generated files + foreach ( f in ${ARG_GENERATED} ) + set_source_files_properties( ${f} PROPERTIES COMPILE_FLAGS -Wno-unused-function ) + endforeach() + list ( APPEND sources ${ARG_GENERATED} ) + endif() + # + # + if ( NOT "${sources}" STREQUAL "" ) + dd4hep_make_unique_list ( sources VALUES ${sources} ) + dd4hep_debug( "${tag} ${sources}") + # + include_directories ( ${pkg_incs} ) + add_definitions ( ${pkg_defs} ) + # + add_library ( ${binary} SHARED ${sources} ) + target_link_libraries ( ${binary} ${pkg_libs} ) + if ( "${${pkg}_VERSION}" STREQUAL "" OR "${${pkg}_SOVERSION}" STREQUAL "" ) + message(FATAL_ERROR " BAD Package versions: VERSION[${pkg}_VERSION] ${${pkg}_VERSION} SOVERSION[${pkg}_SOVERSION] ${${pkg}_SOVERSION} " ) + endif() + ##message(STATUS "set_target_properties ( ${binary} PROPERTIES VERSION ${${pkg}_VERSION} SOVERSION ${${pkg}_SOVERSION})") + set_target_properties ( ${binary} PROPERTIES VERSION ${${pkg}_VERSION} SOVERSION ${${pkg}_SOVERSION}) + # + install ( TARGETS ${binary} + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) + set ( building_binary "ON" ) + else() + message( STATUS "|++> ${tag} Skipped. No sources to be compiled [Use constraint]" ) + endif() + endif() + set ( ${building} ${building_binary} PARENT_SCOPE ) +endfunction(dd4hep_add_library) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_add_package_library +# +# Package libraries are automatically added to the package's link libraries. +# Package plugins and plugins depending on a package automically link against +# these libraries. +# +# Arguments -> See function dd4hep_add_library +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_add_package_library library ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + string ( TOUPPER "${pkg}" PKG ) + dd4hep_add_library( ${library} building ${ARGN} PRINT "Package library[${pkg}] -> ${library}" ) + if ( "${building}" STREQUAL "ON" ) + get_property(pkg_libs GLOBAL PROPERTY PROPERTY ${PKG}_LIBRARIES ) + dd4hep_make_unique_list ( pkg_libs VALUES ${pkg_libs} ${library} ) + set_property(GLOBAL PROPERTY ${PKG}_LIBRARIES ${pkg_libs} ) + # Test and print if correct + get_property(pkg_libs GLOBAL PROPERTY PROPERTY ${PKG}_LIBRARIES ) + dd4hep_debug ( "add_package_library -> ${library} ${PKG}_LIBRARIES:${pkg_libs}" ) + else() + message( FATAL_ERROR "|++> Package library[${pkg}] -> ${binary} Cannot be built! This is an ERROR condition." ) + endif() +endfunction(dd4hep_add_package_library) + +#--------------------------------------------------------------------------------------------------- +# +# dd4hep_add_plugin +# +# Arguments +# --------- +# binary -> plugin name +# SOURCES -> list of source files. Will be expanded to absolute names +# +# The following variables EXTEND the package defaults +# INCLUDE_DIRS -> Additional include directories need to compile the binary +# LINK_LIBRARIES -> Additional libraries needed to link the binary +# USES -> Required package dependencies +# OPTIONAL -> Optional package dependency +# if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built +# else e.g. [LCIO SOURCES aaa.cpp] the plugin will be built, but +# the source files will be omitted. +# DEFINITIONS -> Optional compiler definitions to compile the sources +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_add_plugin binary ) + cmake_parse_arguments(ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL;DEFINITIONS" ${ARGN}) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + string ( TOUPPER "${pkg}" PKG ) + get_property(pkg_lib GLOBAL PROPERTY ${PKG}_LIBRARIES ) + dd4hep_add_library( ${binary} building + PRINT "Plugin[${pkg}] -> ${binary}" + SOURCES ${ARG_SOURCES} + GENERATED ${ARG_GENERATED} + LINK_LIBRARIES ${ARG_LINK_LIBRARIES} ${pkg_lib} + INCLUDE_DIRS ${ARG_INCLUDE_DIRS} + USES ${ARG_USES} + OPTIONAL "${ARG_OPTIONAL}" + DEFINITIONS ${ARG_DEFINITIONS} ) + # + # Generate ROOTMAP if the plugin will be built: + if ( "${building}" STREQUAL "ON" ) + dd4hep_generate_rootmap( ${binary} ) + endif() +endfunction(dd4hep_add_plugin) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_add_executable +# +# Arguments +# --------- +# binary -> plugin name +# SOURCES -> list of source files. Will be expanded to absolute names +# +# The following variables EXTEND the package defaults +# INCLUDE_DIRS -> Additional include directories need to compile the binary +# LINK_LIBRARIES -> Additional libraries needed to link the binary +# USES -> Required package dependencies +# OPTIONAL -> Optional package dependency +# if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built +# else e.g. [LCIO SOURCES aaa.cpp] the plugin will be built, but +# the source files will be omitted. +# DEFINITIONS -> Optional compiler definitions to compile the sources +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_add_executable binary ) + cmake_parse_arguments ( ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL" ${ARGN}) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + dd4hep_debug( "+------------------------------------------- <<<< EXECUTABLE ${pkg}:${binary} >>>> Version: ${${pkg}_VERSION}" ) + set ( tag "Executable[${pkg}] -> ${binary}" ) + + if ( NOT "${ARG_OPTIONAL}" STREQUAL "" ) + dd4hep_handle_optional_sources ( ${tag} "${ARG_OPTIONAL}" optional_missing optional_uses optional_sources ) + endif() + # + if ( NOT "${optional_missing}" STREQUAL "" ) + message( STATUS "|++> ${tag} SKIPPED. Missing optional dependencies: ${optional_missing}" ) + else() + set ( uses ${ARG_USES} ${optional_uses} ) + dd4hep_use_package ( ${tag} PACKAGE LOCAL + USES "${uses}" + OPTIONAL "${ARG_OPTIONAL}" ) + if ( "${LOCAL_MISSING}" STREQUAL "" ) + dd4hep_debug ( "${tag} Executable uses: ${ARG_USES} -- ${uses}" ) + dd4hep_debug ( "${tag} Executable optional: ${ARG_OPTIONAL}" ) + # + get_property ( pkg_library GLOBAL PROPERTY ${pkg}_LIBRARIES ) + # + # Sources may also be supplied without argument tag: + # + if( "${ARG_SOURCES}" STREQUAL "") + set ( ARG_SOURCES ${ARG_UNPARSED_ARGUMENTS} ) + endif() + set ( sources ${GENERATED} ${ARG_SOURCES} ${optional_sources} ) + # + if( NOT "${ARG_SOURCES}" STREQUAL "") + set (incs ${LOCAL_INCLUDE_DIRS} ) + set (libs ${pkg_library} ${LOCAL_LINK_LIBRARIES} ${ARG_LINK_LIBRARIES} ) + dd4hep_make_unique_list ( libs VALUES ${libs} ) + dd4hep_make_unique_list ( sources VALUES ${sources} ) + # + dd4hep_debug ( "${tag} Libs:${libs}" ) + include_directories( ${ARG_INCLUDE_DIRS} ${incs} ) + add_executable( ${binary} ${sources} ) + target_link_libraries( ${binary} ${libs} ) + # + # Install the binary to the destination directory + # + install(TARGETS ${binary} + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin ) + else() + message( STATUS "|++> ${tag} SKIPPED. No sources to build [Use constraint]" ) + endif() + else() + message( FATAL_ERROR "|++> ${tag} SKIPPED. Missing dependencies: ${LOCAL_MISSING}" ) + endif() + endif() +endfunction(dd4hep_add_executable) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_add_dictionary +# +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function( dd4hep_add_dictionary dictionary ) + cmake_parse_arguments(ARG "" "" "SOURCES;EXCLUDE;LINKDEF;OPTIONS" ${ARGN} ) + get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) + set ( tag "Dictionary[${pkg}] -> ${dictionary}" ) + message( STATUS "|++> ${tag} Building dictionary ..." ) + if("${ARG_LINKDEF}" STREQUAL "") + set(ARG_LINKDEF "${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h") + endif() + # + file( GLOB headers ${ARG_SOURCES} ) + file( GLOB excl_headers ${ARG_EXCLUDE} ) + foreach( f ${excl_headers} ) + list( REMOVE_ITEM headers ${f} ) + message( STATUS "|++ exclude: ${f}" ) + endforeach() + # + get_property(incs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_INCLUDE_DIRS) + get_property(defs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY COMPILE_DEFINITIONS) + get_property(opts DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY COMPILE_OPTIONS) + # + set ( inc_dirs -I${CMAKE_CURRENT_SOURCE_DIR}/include ) + foreach ( inc ${incs} ) + file ( GLOB inc ${inc} ) + set ( inc_dirs ${inc_dirs} -I${inc} ) + endforeach() + # + file ( GLOB linkdefs ${ARG_LINKDEF} ) + # + set ( comp_defs ) + foreach ( def ${defs} ) + set ( comp_defs ${comp_defs} -D${def} ) + endforeach() + # + dd4hep_make_unique_list ( sources VALUES ${headers} ) + dd4hep_make_unique_list ( linkdefs VALUES ${linkdefs} ) + dd4hep_make_unique_list ( inc_dirs VALUES ${inc_dirs} ) + dd4hep_make_unique_list ( comp_defs VALUES ${comp_defs} ) + # + dd4hep_debug ( "${tag} Linkdef: '${linkdefs}'" ) + dd4hep_debug ( "${tag} Compile: '${comp_defs};${inc_dirs}'" ) + dd4hep_debug ( "${tag} Files: '${headers}'" ) + dd4hep_debug ( "${tag} Unparsed:'${ARG_UNPARSED_ARGUMENTS}'" ) + dd4hep_debug ( "${tag} Sources: '${CMAKE_CURRENT_SOURCE_DIR}'" ) + # + add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h + COMMAND ${ROOTCINT_EXECUTABLE} -f ${dictionary}.cxx + -c -p ${ARG_OPTIONS} ${comp_defs} ${inc_dirs} ${headers} ${linkdefs} + DEPENDS ${headers} ${linkdefs} ) +endfunction() + + +#--------------------------------------------------------------------------------------------------- +macro ( dd4hep_configure_scripts _pkg ) + cmake_parse_arguments(MACRO_ARG "DEFAULT_SETUP;WITH_TESTS" "RUN_SCRIPT" "" ${ARGV} ) + message ( STATUS "|++> Setting up test environment: ${ARGV}" ) + set( PackageName ${_pkg} ) + if ( ${MACRO_ARG_DEFAULT_SETUP} ) + configure_file( ${DD4hep_DIR}/cmake/run_test_package.sh ${EXECUTABLE_OUTPUT_PATH}/run_test_${_pkg}.sh @ONLY) + INSTALL(PROGRAMS ${EXECUTABLE_OUTPUT_PATH}/run_test_${_pkg}.sh DESTINATION bin ) + #---- configure run environment --------------- + configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in ${EXECUTABLE_OUTPUT_PATH}/this${_pkg}.sh @ONLY) + install(PROGRAMS ${EXECUTABLE_OUTPUT_PATH}/this${_pkg}.sh DESTINATION bin ) + #--- install target------------------------------------- + if ( IS_DIRECTORY scripts ) + dd4hep_install_dir ( compact scripts DESTINATION examples/${_pkg} ) + endif() + if (IS_DIRECTORY compact ) + dd4hep_install_dir ( compact DESTINATION examples/${_pkg} ) + endif() + endif() + if ( ${MACRO_ARG_WITH_TESTS} ) + if ( BUILD_TESTING ) + include(CTest) + enable_testing () + if ( NOT "${MACRO_ARG_UPARSED_ARGUMENTS}" STREQUAL "" ) + foreach ( dir ${MACRO_ARG_UPARSED_ARGUMENTS} ) + add_subdirectory ( ${dir} ) + endforeach() + endif() + endif(BUILD_TESTING) + set ( BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash") + endif() + unset( PackageName ) +endmacro( dd4hep_configure_scripts ) + +#--------------------------------------------------------------------------------------------------- +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +macro( dd4hep_enable_tests ) + cmake_parse_arguments(MACRO_ARG "" "" "" ${ARGV} ) + #message ( "***|++> Test environment: BUILD_TESTING:${BUILD_TESTING} DIRS:${MACRO_ARG_UNPARSED_ARGUMENTS}" ) + if (BUILD_TESTING) + message ( "***|++> Enable CTest environment....BUILD:${BUILD_TESTING} DIRS:${MACRO_ARG_UNPARSED_ARGUMENTS}" ) + include(CTest) + enable_testing () + if ( NOT "${MACRO_ARG_UNPARSED_ARGUMENTS}" STREQUAL "" ) + foreach ( _dir ${MACRO_ARG_UNPARSED_ARGUMENTS} ) + add_subdirectory ( ${_dir} ) + endforeach() + endif() + endif() + set ( BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash") +endmacro( dd4hep_enable_tests ) + +#--------------------------------------------------------------------------------------------------- +# dd4hep_add_test_reg +# +# Add test with regular expression output parsing. +# BUILD_EXEC: Add and build executable with the same name as the test (Default NONE) +# OUTPUT Output file of the test (Default: empty) +# COMMAND Command to execute +# EXEC_ARGS Arguments to the command +# REGEX_PASS Regular expression to indicate that the test succeeded +# REGEX_FAIL Regular expression to indicate that the test failed +# +# \author M.Frank +# \version 1.0 +# +#--------------------------------------------------------------------------------------------------- +function ( dd4hep_add_test_reg test_name ) + cmake_parse_arguments(ARG "BUILD_EXEC" "OUTPUT" "COMMAND;EXEC_ARGS;REGEX_PASS;REGEX_PASSED;REGEX_FAIL;REGEX_FAILED" ${ARGN} ) + if ( ${ARG_BUILD_EXEC} ) + #message(STATUS "Building executable: ${test_name} SOURCES src/${test_name}.cc") + dd4hep_add_executable ( ${test_name} SOURCES src/${test_name}.cc ) + endif() + + set ( cmd ${ARG_COMMAND} ) + if ( "${cmd}" STREQUAL "" ) + set ( cmd ${CMAKE_INSTALL_PREFIX}/bin/run_test.sh ${test_name} ) + endif() + + set ( passed ${ARG_REGEX_PASS} ${ARG_REGEX_PASSED} ) + if ( "${passed}" STREQUAL "NONE" ) + unset ( passed ) + elseif ( "${passed}" STREQUAL "" ) + set ( passed "TEST_PASSED" ) + endif() + + set ( failed ${ARG_REGEX_FAIL} ${ARG_REGEX_FAILED} ) + if ( "${failed}" STREQUAL "NONE" ) + unset ( failed ) + endif() + set ( output ${ARG_OUTPUT} ) + + set ( args ${ARG_EXEC_ARGS} ) + if ( "${args}" STREQUAL "" ) + set ( args ${test_name} ) + endif() + add_test(NAME t_${test_name} COMMAND ${cmd} ${output} ${args} ${output} ) + if ( NOT "${passed}" STREQUAL "" ) + set_tests_properties( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "${passed}" ) + endif() + if ( NOT "${failed}" STREQUAL "" ) + set_tests_properties( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "${failed}" ) + endif() +endfunction() diff --git a/cmake/DD4hepConfig.cmake.in b/cmake/DD4hepConfig.cmake.in index 405eb343b..6150d6cd3 100644 --- a/cmake/DD4hepConfig.cmake.in +++ b/cmake/DD4hepConfig.cmake.in @@ -13,13 +13,12 @@ # @author Jan Engels, Desy ############################################################################## -SET( DD4hep_ROOT "@CMAKE_INSTALL_PREFIX@" ) +SET( DD4hep_DIR "@CMAKE_INSTALL_PREFIX@" ) SET( DD4hep_VERSION "@DD4hep_VERSION@" ) -INCLUDE( ${DD4hep_ROOT}/cmake/DD4hep.cmake ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake/ ) +INCLUDE( ${DD4hep_DIR}/cmake/DD4hep.cmake ) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_DIR}/cmake/ ) # ---------- include dirs ----------------------------------------------------- # do not store find results in cache @@ -27,9 +26,9 @@ SET( DD4hep_INCLUDE_DIRS DD4hep_INCLUDE_DIRS-NOTFOUND ) MARK_AS_ADVANCED( DD4hep_INCLUDE_DIRS ) FIND_PATH( DD4hep_INCLUDE_DIRS - NAMES DD4hep/Detector.h - PATHS ${DD4hep_ROOT}/include - NO_DEFAULT_PATH + NAMES DD4hep/Detector.h + PATHS ${DD4hep_DIR}/include + NO_DEFAULT_PATH ) # ---------- default build type -------------------------------------------------------- @@ -39,12 +38,11 @@ endif() # ---------- libraries -------------------------------------------------------- # do not store find results in cache -SET( DD4hep_LIBRARY_DIRS ${DD4hep_ROOT}/lib ) +SET( DD4hep_LIBRARY_DIRS ${DD4hep_DIR}/lib ) SET( DD4hep_LIBRARIES DD4hep_LIBRARIES-NOTFOUND ) MARK_AS_ADVANCED( DD4hep_LIBRARY_DIRS DD4hep_LIBRARIES ) - -INCLUDE( ${DD4hep_ROOT}/cmake/DD4hepMacros.cmake ) +INCLUDE( ${DD4hep_DIR}/cmake/DD4hepMacros.cmake ) # only standard libraries should be passed as arguments to CHECK_PACKAGE_LIBS # additional components are set by cmake in variable PKG_FIND_COMPONENTS @@ -54,9 +52,7 @@ if(@DD4HEP_USE_GEANT4@) if( @GEANT4_USE_CLHEP@) set(GEANT4_USE_CLHEP 1 ) endif() - set(Geant4_DIR @Geant4_DIR@) - endif() CHECK_PACKAGE_LIBS(DD4hep DDCore) @@ -73,22 +69,11 @@ IF(DD4hep_FIND_COMPONENTS) ENDFOREACH() ENDIF() - - -##---- build with Boost ? -#if(@DD4HEP_USE_BOOST@) -# set( DD4HEP_USE_BOOST True ) -# find_package( Boost REQUIRED ) -# include_directories( SYSTEM ${Boost_INCLUDE_DIRS} ) -# add_definitions( -DDD4HEP_USE_BOOST ) -#endif() - - #---- build with xercesc or tinyxml ? if( @DD4HEP_USE_XERCESC@ ) set( DD4HEP_USE_XERCESC True ) endif() -INCLUDE( ${DD4hep_ROOT}/cmake/DD4hep_XML_setup.cmake ) +INCLUDE( ${DD4hep_DIR}/cmake/DD4hep_XML_setup.cmake ) #----- APPLE ? ------- @@ -98,7 +83,6 @@ MARK_AS_ADVANCED( USE_DYLD ) # ---------- final checking --------------------------------------------------- INCLUDE( FindPackageHandleStandardArgs ) # set DD4HEP_FOUND to TRUE if all listed variables are TRUE and not empty -FIND_PACKAGE_HANDLE_STANDARD_ARGS( DD4hep DEFAULT_MSG DD4hep_ROOT DD4hep_INCLUDE_DIRS DD4hep_LIBRARIES ) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( DD4hep DEFAULT_MSG DD4hep_DIR DD4hep_INCLUDE_DIRS DD4hep_LIBRARIES ) SET( DD4hep_FOUND ${DD4HEP_FOUND} ) - diff --git a/cmake/FindROOT.cmake b/cmake/FindROOT.cmake index c42cf3364..aa45db526 100644 --- a/cmake/FindROOT.cmake +++ b/cmake/FindROOT.cmake @@ -38,33 +38,50 @@ if(ROOT_CONFIG_EXECUTABLE) OUTPUT_STRIP_TRAILING_WHITESPACE) set(ROOT_LIBRARY_DIR ${ROOTSYS}/lib) - - set(ROOT_ROOT ${ROOTSYS}) + set(ROOT_VERSION ${ROOT_VERSION}) + set(ROOT_ROOT ${ROOTSYS}) # Make variables changeble to the advanced user mark_as_advanced(ROOT_CONFIG_EXECUTABLE) - endif() -set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lGenVector) -# -# No Relex library present for ROOT 6 -# -if(NOT DD4HEP_NO_REFLEX) - set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lReflex) -endif() +###set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lGenVector) -set(ROOT_EVE_LIBRARIES ${ROOT_EVE_LIBRARIES} ) +set(ROOT_EVE_LIBRARIES ${ROOT_EVE_LIBRARIES} ) # handle the QUIETLY and REQUIRED arguments and set ROOT_FOUND to TRUE if # all listed variables are TRUE -INCLUDE(FindPackageHandleStandardArgs) +INCLUDE ( FindPackageHandleStandardArgs ) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ROOT DEFAULT_MSG ROOTSYS ROOT_INCLUDE_DIR) mark_as_advanced(ROOT_FOUND ROOT_INCLUDE_DIR) -include(CMakeParseArguments) +include ( CMakeParseArguments) find_program(ROOTCINT_EXECUTABLE rootcint PATHS ${ROOTSYS}/bin $ENV{ROOTSYS}/bin) +if(NOT ROOT_VERSION_STRING) + file(STRINGS ${ROOT_INCLUDE_DIR}/RVersion.h _RVersion REGEX "define *ROOT_RELEASE ") + string(REGEX MATCH "\"(([0-9]+)\\.([0-9]+)/([0-9]+)([a-z]*|-rc[0-9]+))\"" _RVersion ${_RVersion}) + set(ROOT_VERSION_STRING ${CMAKE_MATCH_1} CACHE INTERNAL "Version of ROOT") + set(ROOT_VERSION_MAJOR ${CMAKE_MATCH_2} CACHE INTERNAL "Major version of ROOT") + set(ROOT_VERSION_MINOR ${CMAKE_MATCH_3} CACHE INTERNAL "Minor version of ROOT") + set(ROOT_VERSION_PATCH ${CMAKE_MATCH_4} CACHE INTERNAL "Patch version of ROOT") +endif() +##message(WARNING "ROOT ${ROOT_VERSION_MAJOR} ${ROOT_VERSION_MINOR} ${ROOT_VERSION_PATCH}") +IF ( ${ROOT_VERSION_MAJOR} LESS 6 ) + set ( ROOT_LIBRARIES ${ROOT_LIBRARIES} -lReflex ) +ENDIF() +IF(ROOT_FIND_COMPONENTS) + MESSAGE( STATUS "ROOT: Looking for Components: ${ROOT_FIND_COMPONENTS}" ) + FOREACH(comp ${ROOT_FIND_COMPONENTS}) + if ( "${comp}" STREQUAL "TEve" ) + set(ROOT_LIBRARIES ${ROOT_LIBRARIES} ${ROOT_EVE_LIBRARIES} ) + else() + set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -l${comp} ) + endif() + ENDFOREACH() +ENDIF() + + #---------------------------------------------------------------------------- # function root_generate_dictionary( dictionary # header1 header2 ... @@ -106,11 +123,12 @@ function(root_generate_dictionary dictionary) endif() endforeach() #---call rootcint------------------------------------------ + message(STATUS "ROOT Dictionary output: ${dictionary}.cxx ${dictionary}.h") add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h COMMAND echo ${ROOTCINT_EXECUTABLE} -cint -f ${dictionary}.cxx - -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} + -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} COMMAND ${ROOTCINT_EXECUTABLE} -f ${dictionary}.cxx - -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} + -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} DEPENDS ${headerfiles} ${linkdefs}) endfunction() diff --git a/cmake/run_test_package.sh b/cmake/run_test_package.sh index d108c97e0..9ba93c42a 100755 --- a/cmake/run_test_package.sh +++ b/cmake/run_test_package.sh @@ -7,9 +7,7 @@ # with all following arguments # - #----- initialize environment for this package - including DD4hep - source @CMAKE_INSTALL_PREFIX@/bin/this@PackageName@.sh #----- parse command line - first argument is the @@ -25,5 +23,5 @@ done #echo " #### LD_LIBRARY_PATH = : ${LD_LIBRARY_PATH}" -echo " ### running test : '" ${command} ${theargs} "'" +echo " ### running test : '${command} ${theargs}'" ${command} ${theargs} diff --git a/cmake/thisdd4hep_package.sh.in b/cmake/thisdd4hep_package.sh.in index 2a56cea4a..1ac6f0ba7 100644 --- a/cmake/thisdd4hep_package.sh.in +++ b/cmake/thisdd4hep_package.sh.in @@ -7,7 +7,7 @@ ################################################################################# -source @DD4hep_ROOT@/bin/thisdd4hep.sh +source @DD4hep_DIR@/bin/thisdd4hep.sh export PATH=$PATH:@CMAKE_INSTALL_PREFIX@/bin @@ -20,17 +20,17 @@ fi # -- need to extend dynamic search path for all external libraries: - -for lp in @External_LIBRARY_DIRS@ -do - - - if [ @USE_DYLD@ ] - then - # echo " ### export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:${lp} " - export DYLD_LIBRARY_PATH=${lp}:$DYLD_LIBRARY_PATH - else - # echo " ### export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lp} " - export LD_LIBRARY_PATH=${lp}:$LD_LIBRARY_PATH - fi -done +if [ @External_LIBRARY_DIRS@ ] +then + for lp in @External_LIBRARY_DIRS@ + do + if [ @USE_DYLD@ ] + then + # echo " ### export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:${lp} " + export DYLD_LIBRARY_PATH=${lp}:$DYLD_LIBRARY_PATH + else + # echo " ### export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lp} " + export LD_LIBRARY_PATH=${lp}:$LD_LIBRARY_PATH + fi + done +fi; diff --git a/doc/CompileAllOptionPermutations.sh b/doc/CompileAllOptionPermutations.sh new file mode 100755 index 000000000..d7a7d317a --- /dev/null +++ b/doc/CompileAllOptionPermutations.sh @@ -0,0 +1,61 @@ +dir_name=`pwd`; +INSTALL_G4=/home/frankm/SW/g4_10.01.p02_dbg/lib/Geant4-10.1.2; +INSTALL_LCIO=/home/frankm/SW/lcio/v02-04-03; +INSTALL_XERCESC=/home/frankm/SW/xercesc; + +# +# +make_opt() +{ + if test "$1" = "ON"; then + echo $*; + else + echo ${1}; + fi; +} +LINE="===================================================================================================" +for DOGEANT4 in OFF ON; do + for DOXERCESC in OFF ON; do + for DOGEAR in OFF; do + for DOLCIO in OFF ON; do + folder=build_Xer${DOXERCESC}_Geant${DOGEANT4}_Gear${DOGEAR}_Lcio${DOLCIO} + mkdir ${dir_name}/$folder + cd ${dir_name}/$folder + echo "${LINE}"; + echo "${LINE}"; + echo "=============================== ${folder} "; + echo "${LINE}"; + echo "${LINE}"; + #-DDD4HEP_DEBUG_CMAKE=ON \ + CMD="cd ${dir_name}/$folder ; cmake -D DD4HEP_USE_XERCESC=${DOXERCESC} \ + -DDD4HEP_USE_GEANT4=`make_opt ${DOGEANT4} -DGeant4_DIR=${INSTALL_G4}`\ + -DDD4HEP_USE_LCIO=`make_opt ${DOLCIO} -DLCIO_DIR=${INSTALL_LCIO}` \ + -DBoost_NO_BOOST_CMAKE=ON \ + -DDD4HEP_USE_XERCESC=`make_opt ${DOXERCESC} -DXERCESC_ROOT_DIR=${INSTALL_XERCESC}` \ + ../../../DD4hep.trunk/checkout;"; + echo ${CMD}; + eval ${CMD}; + if [ $? -ne 0 ]; then + echo "DANGER WILL ROBINSON DANGER!" + echo "${LINE}"; + echo "=============================== ${folder} "; + echo "${LINE}"; + echo "++++ Failed CMAKE command:" + echo ${CMD}; + exit 1 + fi + make -j5 + if [ $? -ne 0 ]; then + echo "DANGER WILL ROBINSON DANGER!" + echo "${LINE}"; + echo "=============================== ${folder} "; + echo "${LINE}"; + echo "++++ Failed BUILD:" + echo ${CMD}; + exit 1 + fi + cd .. + done + done + done +done diff --git a/doc/release.notes b/doc/release.notes index 1008d0911..dcda4a9c1 100644 --- a/doc/release.notes +++ b/doc/release.notes @@ -3,6 +3,16 @@ DD4hep ---- Release Notes ================================= + +2015-07-25 M.Frank +------------------ + - DDSegmentation: Remove several 'shadow' warnings. + + - New build system for the DD4hep core, which greatly simplyfies the cmake files + for the various sub-packages. + Tested with Andre's build script doc/CompileAllOptionPermutations.sh. + (GEAR usage not tested though) + -------- | v00-14 | -------- @@ -18,7 +28,7 @@ F.Gaede: 2015-07-15 - added methods length_along_u/v() to ISurface - moved setting of CMAKE_CXX_FLAGS (if DD4HEP_USE_CXX11) from DD4hep.cmake to CMakeLists.txt -2015-07-11n M.Frank +2015-07-11 M.Frank ------------------- - added starter docs DD4hepStartersGuide.pdf diff --git a/examples/AlignDet/CMakeLists.txt b/examples/AlignDet/CMakeLists.txt index 4bc593eaa..ba44f6587 100644 --- a/examples/AlignDet/CMakeLists.txt +++ b/examples/AlignDet/CMakeLists.txt @@ -1,130 +1,28 @@ +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -#--------------------------- -set( PackageName AlignDet ) -#--------------------------- - -project(${PackageName}) - -# project version -SET( ${PackageName}_VERSION_MAJOR 0 ) -SET( ${PackageName}_VERSION_MINOR 0 ) -SET( ${PackageName}_VERSION_PATCH 1 ) - -SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) -SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - -#------------- set the default installation directory to be the source directory - -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH - "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." - FORCE ) - MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - -#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -find_package( DD4hep ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -#find_package( ROOT REQUIRED ) -find_package( ROOT REQUIRED COMPONENTS Geom) -set( ROOT_COMPONENT_LIBRARIES Geom) - -#------------------------------------------------------------- -# add additional packages here -#------------------------------------------------------------- - -include(DD4hep_XML_setup) - -#---Testing------------------------------------------------------------------------- -if(BUILD_TESTING) - include(CTest) - enable_testing() -endif(BUILD_TESTING) - -configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY) -INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh - DESTINATION bin ) - -#------------------------------------------------------------- -include_directories( ${CMAKE_SOURCE_DIR}/include - include - ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} - ) - -file(GLOB sources src/*.cpp ) -include(DD4hep_XML_setup) - -add_library(${PackageName} SHARED ${sources}) - -target_link_libraries(${PackageName} ${DD4hep_LIBRARIES} ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} ) - -#---Rootmap generation-------------------------------------------------------------- -if(APPLE) - dd4hep_generate_rootmap_apple(${PackageName} ) -else() - dd4hep_generate_rootmap(${PackageName} ) -endif() - - -#---- configure run environment --------------- -configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh - DESTINATION bin - ) - - -#--- install target------------------------------------- -install(TARGETS ${PackageName} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib +include ( ${DD4hep_DIR}/cmake/DD4hep.cmake ) +#----------------------------------------------------------------------------------- +dd4hep_configure_output() +dd4hep_package ( AlignDet MAJOR 0 MINOR 0 PATCH 1 + USES [ROOT REQUIRED COMPONENTS Geom] + [DD4hep REQUIRED COMPONENTS DDCore] + OPTIONAL XERCESC + INCLUDE_DIRS include ) -install(DIRECTORY compact - DESTINATION examples/${PackageName} - PATTERN ".svn" EXCLUDE ) - -#install(DIRECTORY scripts -# DESTINATION examples/${PackageName} -# PATTERN ".svn" EXCLUDE ) -# to do: add corresponding uninstall... -#------------------------------------------------------- - -#################################### +dd4hep_add_plugin( AlignDet SOURCES src/*.cpp ) +dd4hep_configure_scripts( AlignDet DEFAULT_SETUP ) +dd4hep_install_dir( compact DESTINATION examples/AlignDet ) # -# Add Tests foir AlignDet here -# -#################################### - -##SET( test_name "test_converter_clic_lcdd" ) -##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" -## geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.lcdd ) -###----- here we simply require that at least 100 volumes have been converted -##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) -## -##SET( test_name "test_converter_clic_gdml" ) -##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" -## geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.gdml ) -###----- here we simply require that at least 100 volumes have been converted -##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) -## -##SET( test_name "test_converter_clic_vis" ) -##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" -## geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.vis ) -###----- here we simply require that at least 100 volumes have been converted -##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) - - - -# no explicit failed condition -#SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) +#---Testing------------------------------------------------------------------------- +dd4hep_enable_tests() diff --git a/examples/CLICSiD/CMakeLists.txt b/examples/CLICSiD/CMakeLists.txt index ec1eb2eee..450770f22 100644 --- a/examples/CLICSiD/CMakeLists.txt +++ b/examples/CLICSiD/CMakeLists.txt @@ -1,103 +1,31 @@ +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -#--------------------------- -set( PackageName CLICSiD ) -#--------------------------- - -project(${PackageName}) - -# project version -SET( ${PackageName}_VERSION_MAJOR 0 ) -SET( ${PackageName}_VERSION_MINOR 0 ) -SET( ${PackageName}_VERSION_PATCH 1 ) - -SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) -SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - -#------------- set the default installation directory to be the source directory - -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH - "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." - FORCE ) - MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - -#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -find_package( DD4hep ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -#find_package( ROOT REQUIRED ) -find_package( ROOT REQUIRED COMPONENTS Geom) -set( ROOT_COMPONENT_LIBRARIES Geom) - -#------------------------------------------------------------- -# add additional packages here -#------------------------------------------------------------- - -include(DD4hep_XML_setup) - +include ( ${DD4hep_DIR}/cmake/DD4hep.cmake ) + +#----------------------------------------------------------------------------------- +dd4hep_configure_output () +dd4hep_package ( CLICSiD MAJOR 0 MINOR 0 PATCH 1 + USES [ROOT REQUIRED COMPONENTS Geom] + [DD4hep REQUIRED COMPONENTS DDCore] +) +dd4hep_configure_scripts ( CLICSiD DEFAULT_SETUP ) +dd4hep_install_dir( compact DESTINATION examples/CLICSiD ) #---Testing------------------------------------------------------------------------- -if(BUILD_TESTING) - include(CTest) - enable_testing() -endif(BUILD_TESTING) - -configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY) -INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh - DESTINATION bin ) - -#---- configure run environment --------------- -configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh - DESTINATION bin - ) - - -#--- install target------------------------------------- -install(DIRECTORY compact - DESTINATION examples/${PackageName} - PATTERN ".svn" EXCLUDE ) -install(DIRECTORY eve - DESTINATION examples/${PackageName} - PATTERN ".svn" EXCLUDE ) - -# to do: add corresponding uninstall... -#------------------------------------------------------- - -#################################### -# -# Add Tests foir CLICSid here -# -#################################### - -SET( test_name "test_converter_clic_lcdd" ) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.lcdd ) -#----- here we simply require that at least 100 volumes have been converted -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) - -SET( test_name "test_converter_clic_gdml" ) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.gdml ) -#----- here we simply require that at least 100 volumes have been converted -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) - -SET( test_name "test_converter_clic_vis" ) -ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.vis ) -#----- here we simply require that at least 100 volumes have been converted -SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9][0-9]+ volumes" ) - - - -# no explicit failed condition -#SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" ) +dd4hep_enable_tests() +#----- Tests for CLICSid: here we simply require that at least 100 volumes have been converted +foreach ( typ lcdd gdml vis ) + dd4hep_add_test_reg ( "test_converter_CLICSiD_${typ}" + COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_CLICSiD.sh" + EXEC_ARGS geoConverter -compact2${typ} -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output file:CLICSiD.${typ} + REGEX_PASS " Handled [1-9][0-9][0-9]+ volumes" ) +endforeach() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6f13bab24..31e3bd371 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,4 +1,14 @@ -################################################### +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== # # Simple CMakeList.txt file that allows to # build all DD4hep examples in one go, e.g. @@ -10,33 +20,14 @@ # # F.Gaede, DESY, 2013 # -################################################## +#========================================================================== cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) - -project(DD4hepExample) - option(BUILD_TESTING "Enable and build tests" ON) - -#---Testing------------------------------------------------------------------------- -if(BUILD_TESTING) -include(CTest) -enable_testing() - -set(BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash") - -endif(BUILD_TESTING) - -#---------------------------------------------------------------------------------- -# -# (un)comment as needed -# - -add_subdirectory(AlignDet) - -add_subdirectory(CLICSiD) - -add_subdirectory(ClientTests) - -add_subdirectory(SimpleDetector) - - +# +include ( ${DD4hep_DIR}/cmake/DD4hep.cmake ) +# +dd4hep_package ( DD4hepExample MAJOR 0 MINOR 0 PATCH 1 ) +# +dd4hep_enable_tests ( + AlignDet CLICSiD ClientTests SimpleDetector +) diff --git a/examples/ClientTests/CMakeLists.txt b/examples/ClientTests/CMakeLists.txt index 737c000b3..5676a6918 100644 --- a/examples/ClientTests/CMakeLists.txt +++ b/examples/ClientTests/CMakeLists.txt @@ -1,114 +1,46 @@ +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) -#--------------------------- -set( PackageName ClientTests ) -#--------------------------- -project(${PackageName}) - -# project version -SET( ${PackageName}_VERSION_MAJOR 0 ) -SET( ${PackageName}_VERSION_MINOR 0 ) -SET( ${PackageName}_VERSION_PATCH 1 ) - -SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) -SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" ) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) - -#------------- set the default installation directory to be the source directory -IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH - "install prefix path - overwrite with -D CMAKE_INSTALL_PREFIX = ..." - FORCE ) - MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" ) -ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) -#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -find_package( DD4hep REQUIRED) - -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) -include( DD4hep ) - -find_package( ROOT REQUIRED ) -set( ROOT_COMPONENT_LIBRARIES Geom) -#------------------------------------------------------------- -# add additional packages here -#------------------------------------------------------------- - -#---Testing------------------------------------------------------------------------- -if(BUILD_TESTING) - include(CTest) - enable_testing() -endif(BUILD_TESTING) - -configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY) -INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh - DESTINATION bin ) - -#------------------------------------------------------------- -include_directories( ${CMAKE_SOURCE_DIR}/include - include - ${DD4hep_INCLUDE_DIRS} - ${ROOT_INCLUDE_DIR} - ) - -file(GLOB sources src/*.cpp ) -include(DD4hep_XML_setup) - -add_library(${PackageName} SHARED ${sources}) - -target_link_libraries(${PackageName} ${DD4hep_LIBRARIES} ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} ) - -#---Rootmap generation-------------------------------------------------------------- -if(APPLE) - dd4hep_generate_rootmap_apple(${PackageName} ) -else() - dd4hep_generate_rootmap(${PackageName} ) -endif() - -#---- configure run environment --------------- -configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh - DESTINATION bin - ) -#--- install target------------------------------------- -install(TARGETS ${PackageName} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ) -install(DIRECTORY compact - DESTINATION examples/${PackageName} - PATTERN ".svn" EXCLUDE ) - -install(DIRECTORY scripts - DESTINATION examples/${PackageName} - PATTERN ".svn" EXCLUDE ) - -# to do: add corresponding uninstall... -#------------------------------------------------------- - - -foreach (file Assemblies BoxTrafos FCC_HcalBarrel IronCylinder LheD_tracker MagnetFields MaterialTester MiniTel SectorBarrelCalorimeter SiliconBlock NestedDetectors ) - +include ( ${DD4hep_DIR}/cmake/DD4hep.cmake ) + +#----------------------------------------------------------------------------------- +dd4hep_configure_output() +dd4hep_package (ClientTests MAJOR 0 MINOR 0 PATCH 1 + USES [ROOT REQUIRED COMPONENTS Geom] + [DD4hep REQUIRED COMPONENTS DDCore] + OPTIONAL XERCESC + INCLUDE_DIRS include ) +#----------------------------------------------------------------------------------- +dd4hep_add_plugin( ClientTests SOURCES src/*.cpp ) +dd4hep_install_dir( compact scripts DESTINATION ${DD4hep_DIR}/examples/ClientTests ) +#----------------------------------------------------------------------------------- +dd4hep_configure_scripts( ClientTests DEFAULT_SETUP ) + +#*** Testing ********************************************************************* +dd4hep_enable_tests() +#----------------------------------------------------------------------------------- +foreach (test Assemblies BoxTrafos IronCylinder LheD_tracker MagnetFields MaterialTester MiniTel SectorBarrelCalorimeter SiliconBlock NestedDetectors ) foreach( type lcdd gdml vis ) - - SET( test_name "${PackageName}_converter_simple_${type}_${file}" ) - ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2${type} -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/${file}.xml -output ${file}_out.${type} ) - #----- here we simply require that at least 1 volume have been converted - SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [1-9][0-9]* volumes" ) - + dd4hep_add_test_reg( ClientTests_converter_simple_${type}_${test} + COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh" + EXEC_ARGS geoConverter -compact2${type} -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/${test}.xml -output file:${test}.${type} + REGEX_PASS " Handled [1-9][0-9]* volumes" ) endforeach(type) - endforeach() - - +# foreach(script MiniTel LheD_tracker ) - SET( test_name "${PackageName}_sim_${script}" ) - ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - python ${CMAKE_CURRENT_SOURCE_DIR}/scripts/${script}.py batch) - #----- here we simply require that at least 1 volume have been converted - SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "Exception;EXCEPTION;ERROR;Error" ) + dd4hep_add_test_reg( ClientTests_sim_${script} + COMMAND "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh" + EXEC_ARGS python ${CMAKE_CURRENT_SOURCE_DIR}/scripts/${script}.py batch + REGEX_PASS NONE + REGEX_FAIL "Exception;EXCEPTION;ERROR;Error" ) endforeach(script) diff --git a/examples/SimpleDetector/CMakeLists.txt b/examples/SimpleDetector/CMakeLists.txt index c6d64197e..e255d8e80 100644 --- a/examples/SimpleDetector/CMakeLists.txt +++ b/examples/SimpleDetector/CMakeLists.txt @@ -1,3 +1,14 @@ +# $Id: $ +#========================================================================== +# AIDA Detector description implementation for LCD +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR) #--------------------------- set( PackageName SimpleDetector ) @@ -27,14 +38,13 @@ ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) find_package( DD4hep REQUIRED COMPONENTS DDRec ) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake ) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_DIR}/cmake ) include( DD4hep ) find_package( ROOT REQUIRED ) set( ROOT_COMPONENT_LIBRARIES Geom Reflex) #------------------------------------------------------------- # add additional packages here -#------------------------------------------------------------- #---Testing------------------------------------------------------------------------- if(BUILD_TESTING) @@ -42,7 +52,7 @@ if(BUILD_TESTING) enable_testing() endif(BUILD_TESTING) -configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY) +configure_file( ${DD4hep_DIR}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY) INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh DESTINATION bin ) @@ -68,7 +78,7 @@ else() endif() #---- configure run environment --------------- -configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) +configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in this${PackageName}.sh @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh DESTINATION bin @@ -98,26 +108,26 @@ install(DIRECTORY compact SET( test_name "test_converter_simple_lcdd" ) ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.lcdd ) + geoConverter -compact2lcdd -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.lcdd ) #----- here we simply require that at least 100 volumes have been converted SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [0-9]?[0-9][0-9]+ volumes" ) SET( test_name "test_converter_simple_gdml" ) ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.gdml ) + geoConverter -compact2gdml -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.gdml ) #----- here we simply require that at least 100 volumes have been converted SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [0-9]?[0-9][0-9]+ volumes" ) SET( test_name "test_converter_simple_vis" ) ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.vis ) + geoConverter -compact2vis -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.vis ) #----- here we simply require that at least 100 volumes have been converted SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION " Handled [0-9]?[0-9][0-9]+ volumes" ) SET( test_name "test_simulation_simple" ) ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" - dd_sim ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml ${CMAKE_CURRENT_SOURCE_DIR}/examples/sequences.xml ) + dd_sim file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml file:${CMAKE_CURRENT_SOURCE_DIR}/examples/sequences.xml ) #----- here we simply require that at least 100 volumes have been converted SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "Event 9 Begin event action") -- GitLab