diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake index 9a2f67bdec2952a8fa827f916c302795f224a65c..03c83bef6c5ace167b360d03d16148b910282776 100644 --- a/cmake/DD4hepBuild.cmake +++ b/cmake/DD4hepBuild.cmake @@ -129,26 +129,6 @@ function ( dd4hep_debug msg ) endif() endfunction( dd4hep_debug ) -#--------------------------------------------------------------------------------------------------- -# dd4hep_include_directories -# -# Same as include_directories but treat all external packages as SYSTEM -> no warnings -# -# \author A.Sailer -# \version 1.0 -# -#--------------------------------------------------------------------------------------------------- -function ( dd4hep_include_directories pkg_incs ) - FOREACH( INCDIR ${pkg_incs} ) - string(FIND "${INCDIR}" "${CMAKE_SOURCE_DIR}" out) - IF("${out}" EQUAL 0) - INCLUDE_DIRECTORIES( ${INCDIR} ) - ELSE() - INCLUDE_DIRECTORIES( SYSTEM ${INCDIR} ) - ENDIF() - ENDFOREACH() -endfunction( dd4hep_include_directories ) - #--------------------------------------------------------------------------------------------------- # dd4hep_print # @@ -342,171 +322,8 @@ function ( dd4hep_list_to_string result ) endfunction ( dd4hep_list_to_string ) #--------------------------------------------------------------------------------------------------- -# 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 ) - -#--------------------------------------------------------------------------------------------------- -# dd4hep_find_packageEx -# -# \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" ) - elseif ( "${pkg}" STREQUAL "GIT2" ) - set (pkg "git2" ) - elseif ( "${pkg}" STREQUAL "FMT" ) - set (pkg "fmt" ) - endif() - dd4hep_debug( "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" ) - ##MESSAGE(STATUS "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" ) - ##dd4hep_print ( "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} ${ARG_ARGS} ) - endif() - # Propagate values to caller - string ( TOUPPER "${pkg}" PKG ) - set ( libs ${${pkg}_LIBRARY} ${${pkg}_LIBRARIES} ${${pkg}_COMPONENT_LIBRARIES} ) - set ( incs ${${pkg}_INCLUDE_DIR} ${${pkg}_INCLUDE_DIRS} ) - if ( NOT "${pkg}" STREQUAL "${PKG}" ) - set ( libs ${libs} ${${PKG}_LIBRARIES} ${${PKG}_LIBRARY} ${${PKG}_COMPONENT_LIBRARIES} ) - set ( incs ${incs} ${${PKG}_INCLUDE_DIRS} ${${PKG}_INCLUDE_DIR} ) - endif() - ##MESSAGE(STATUS "Call find_package: ${pkg}/${PKG_NAME} -> ${libs}" ) - 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 "" ) - dd4hep_fatal ( "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 ( ( DEFINED DD4HEP_USE_${name} AND NOT "${DD4HEP_USE_${name}}" ) OR - ( DEFINED DD4HEP_USE_${NAME} AND NOT "${DD4HEP_USE_${NAME}}" ) ) - set ( ${found} "OFF" PARENT_SCOPE ) - elseif ( DEFINED use_pkg AND NOT "${use_pkg}" ) - 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}" ) - 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 +# dd4hep_install_dir: DEPRECATED, used in examples # # Install all directories as indicated by all unparsed arguments to the # output destination DESTINATION. @@ -526,458 +343,6 @@ function( dd4hep_install_dir ) endif() endfunction( dd4hep_install_dir ) -#--------------------------------------------------------------------------------------------------- -# 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 ) - dd4hep_print ( "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" "PROGRAMS" ${ARGN} ) - foreach ( f ${ARG_PROGRAMS} ) - file ( GLOB sources ${f} ) - install (PROGRAMS ${sources} DESTINATION ${ARG_DESTINATION} ) - endforeach() - 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 ( srcs_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} ) - unset ( act_pkg ) - elseif ( ${e} STREQUAL "REQUIRED" ) - set ( req_pkg ${e} ) - unset ( act_pkg ) - elseif ( ${e} STREQUAL "INTERNAL" ) - set ( typ_pkg ${e} ) - unset ( act_pkg ) - elseif ( ${e} STREQUAL "EXTERNAL" ) - set ( typ_pkg ${e} ) - unset ( act_pkg ) - elseif ( "${com_pkg}" STREQUAL "" AND ${e} STREQUAL "COMPONENTS" ) - set ( com_pkg ${e} ) - set ( act_pkg ${e} ) - elseif ( "${src_pkg}" STREQUAL "" AND ${e} STREQUAL "SOURCES" ) - set ( act_pkg ${e} ) - elseif ( "${def_pkg}" STREQUAL "" AND ${e} STREQUAL "DEFINITIONS" ) - set ( act_pkg ${e} ) - elseif ( "${act_pkg}" STREQUAL "COMPONENTS" ) - set ( comp_pkg ${comp_pkg} ${e} ) - elseif ( "${act_pkg}" STREQUAL "SOURCES" ) - set ( srcs_pkg ${srcs_pkg} ${e} ) - elseif ( "${act_pkg}" STREQUAL "DEFINITIONS" ) - 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 ( DEFINED pkg_found AND NOT "${pkg_found}" ) - dd4hep_print ( "| ${tag} ...optional: Skip sources ${USE_SOURCES} [requires ${USE_NAME}]" ) - elseif ( DEFINED pkg_found AND "${pkg_found}" ) - dd4hep_print ( "| ${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() - dd4hep_print ( "| ${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}" ) - dd4hep_debug ( "${print_prefix} package_libs: ${${use}_LIBRARIES}" ) - set ( use ${use} ) - elseif ( NOT "{pkg_found}" ) - dd4hep_print ( "|++> ${print_prefix} ...Missing package: ${use} [Ignored]" ) - unset ( use ) - elseif ( "${USE_REQUIRED}" STREQUAL "REQUIRED" ) - dd4hep_fatal ( "${print_prefix} ...Missing package: ${use} [Fatal REQUIRED]" ) - set ( missing ${missing} ${use} ) - unset ( use ) - else() - dd4hep_print ( "| ${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}" ) - dd4hep_print ( "| ${print_prefix} ...optional: Skip optional ${src} [${use} 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 "" ) - dd4hep_print ( "|++> ${print_prefix} Uses DEFAULTS" ) - elseif ( "${missing}" STREQUAL "" ) - dd4hep_print ( "|++> ${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() - -#--------------------------------------------------------------------------------------------------- -# -# \author M.Frank -# \version 1.0 -# -#--------------------------------------------------------------------------------------------------- -function ( dd4hep_package_properties name upper enabled ) - get_property(n DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME) - string ( TOUPPER "${n}" N ) - get_property(e GLOBAL PROPERTY DD4HEP_USE_${N} ) - set ( ${name} ${n} PARENT_SCOPE ) - set ( ${upper} ${N} PARENT_SCOPE ) - set ( ${enabled} ${e} PARENT_SCOPE ) -endfunction() - -#--------------------------------------------------------------------------------------------------- -# dd4hep_add_regular_library -# -# Arguments -> See function dd4hep_add_library -# -# \author M.Frank -# \version 1.0 -# -#--------------------------------------------------------------------------------------------------- -function( dd4hep_add_regular_library library ) - dd4hep_package_properties( pkg PKG enabled ) - set ( tag "Package library[${pkg}] -> ${library}" ) - if ( NOT "${enabled}" ) - dd4hep_skipmsg ( "${tag} DISBALED -- package is not built!" ) - else() - dd4hep_add_library( ${library} building ${ARGN} PRINT ${tag} ) - if ( "${building}" ) - dd4hep_debug ( "add_package_library -> ${library} ${PKG}_LIBRARIES:${pkg_libs}" ) - else() - dd4hep_fatal ( "Package library[${pkg}] -> ${binary} Cannot be built! This is an ERROR condition." ) - endif() - endif() -endfunction(dd4hep_add_regular_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 ) - dd4hep_package_properties( pkg PKG enabled ) - set ( tag "Package library[${pkg}] -> ${library}" ) - if ( NOT "${enabled}" ) - dd4hep_skipmsg ( "${tag} DISBALED -- package is not built!" ) - else() - dd4hep_add_library( ${library} building ${ARGN} PRINT ${tag} ) - if ( "${building}" ) - 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() - dd4hep_fatal ( "Package library[${pkg}] -> ${binary} Cannot be built! This is an ERROR condition." ) - endif() - endif() -endfunction(dd4hep_add_package_library) - -#--------------------------------------------------------------------------------------------------- -# 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 ) - #set ( DD4HEP_DEBUG_CMAKE "ON" ) - dd4hep_package_properties( pkg PKG enabled ) - set ( tag "Executable[${pkg}] -> ${binary}" ) - if ( NOT "${enabled}" ) - dd4hep_skipmsg ( "${tag} DISBALED -- package is not built!" ) - else() - cmake_parse_arguments ( ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL" ${ARGN}) - dd4hep_debug( "+------------------------------------------- <<<< EXECUTABLE ${pkg}:${binary} >>>> Version: ${${pkg}_VERSION}" ) - if ( NOT "${ARG_OPTIONAL}" STREQUAL "" ) - dd4hep_handle_optional_sources ( ${tag} "${ARG_OPTIONAL}" optional_missing optional_uses optional_sources ) - endif() - # - if ( NOT "${optional_missing}" STREQUAL "" ) - dd4hep_print ( "|++> ${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() - # Prepare flags for cint generated sources: - foreach ( f in ${ARG_GENERATED} ) - set_source_files_properties( ${f} PROPERTIES COMPILE_FLAGS "-Wno-unused-function -Wno-overlength-strings" GENERATED TRUE ) - endforeach() - # - set ( sources ${ARG_GENERATED} ${ARG_SOURCES} ${optional_sources} ) - # - if( NOT "${sources}" STREQUAL "") - set (incs ${LOCAL_INCLUDE_DIRS} ${ARG_INCLUDE_DIRS} ) - set (libs ${pkg_library} ${LOCAL_LINK_LIBRARIES} ${ARG_LINK_LIBRARIES} ) - dd4hep_make_unique_list ( incs VALUES ${incs} ) - dd4hep_make_unique_list ( libs VALUES ${libs} ) - dd4hep_make_unique_list ( sources VALUES ${sources} ) - # - dd4hep_debug ( "${tag} Libs:${libs}" ) - dd4hep_include_directories( "${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() - dd4hep_print ( "|++> ${tag} SKIPPED. No sources to build [Use constraint]" ) - endif() - else() - dd4hep_fatal ( "${tag} SKIPPED. Missing dependencies: ${LOCAL_MISSING}" ) - endif() - endif() - endif() -endfunction(dd4hep_add_executable) - #--------------------------------------------------------------------------------------------------- # # \author M.Frank @@ -1030,7 +395,6 @@ endmacro( dd4hep_configure_scripts ) # 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 @@ -1042,17 +406,13 @@ endmacro( dd4hep_configure_scripts ) # #--------------------------------------------------------------------------------------------------- function ( dd4hep_add_test_reg test_name ) - cmake_parse_arguments(ARG "BUILD_EXEC" "OUTPUT" "COMMAND;DEPENDS;EXEC_ARGS;REGEX_PASS;REGEX_PASSED;REGEX_FAIL;REGEX_FAILED" ${ARGN} ) + cmake_parse_arguments(ARG "" "OUTPUT" "COMMAND;DEPENDS;EXEC_ARGS;REGEX_PASS;REGEX_PASSED;REGEX_FAIL;REGEX_FAILED" ${ARGN} ) set ( missing ) set ( use_test 1 ) if ( "${use_test}" STREQUAL "" ) dd4hep_print ( "*** Will not build/execute test ${test_name}. Missing dependencies: ${missing} ") else() - if ( ${ARG_BUILD_EXEC} ) - #dd4hep_print ( "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 "" )