mirror of
https://github.com/FairRootGroup/FairLogger.git
synced 2025-10-13 16:46:46 +00:00
parent
8e9d91c596
commit
bee04a260c
|
@ -28,7 +28,13 @@ option(USE_BOOST_PRETTY_FUNCTION "Use Boost BOOST_PRETTY_FUNCTION macro" OFF)
|
||||||
|
|
||||||
# Dependency ###################################################################
|
# Dependency ###################################################################
|
||||||
if(USE_BOOST_PRETTY_FUNCTION)
|
if(USE_BOOST_PRETTY_FUNCTION)
|
||||||
find_package(Boost REQUIRED)
|
if(NOT DEFINED Boost_NO_BOOST_CMAKE AND CMAKE_VERSION VERSION_LESS 3.15)
|
||||||
|
# Since Boost 1.70 a CMake package is shipped by default. Unfortunately, it has a number
|
||||||
|
# of problems that are only fixed in Boost 1.71 or CMake 3.15. By default we skip the
|
||||||
|
# BoostConfig lookup. This can be overridden on the command line via -DBoost_NO_BOOST_CMAKE=OFF
|
||||||
|
set(Boost_NO_BOOST_CMAKE ON)
|
||||||
|
endif()
|
||||||
|
find_package2(PUBLIC Boost REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
|
|
|
@ -212,3 +212,98 @@ macro(install_cmake_package)
|
||||||
DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
||||||
)
|
)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
|
#
|
||||||
|
# find_package2(PRIVATE|PUBLIC|INTERFACE <pkgname>
|
||||||
|
# [VERSION <version>]
|
||||||
|
# [COMPONENTS <list of components>]
|
||||||
|
# [ADD_REQUIREMENTS_OF <list of dep_pgkname>]
|
||||||
|
# [any other option the native find_package supports]...)
|
||||||
|
#
|
||||||
|
# Wrapper around CMake's native find_package command to add some features and bookkeeping.
|
||||||
|
#
|
||||||
|
# The qualifier (PRIVATE|PUBLIC|INTERFACE) to the package to populate
|
||||||
|
# the variables PROJECT_[INTERFACE]_<pkgname>_([VERSION]|[COMPONENTS]|PACKAGE_DEPENDENCIES)
|
||||||
|
# accordingly. This bookkeeping information is used to print our dependency found summary
|
||||||
|
# table and to generate a part of our CMake package.
|
||||||
|
#
|
||||||
|
# When a dependending package is listed with ADD_REQUIREMENTS_OF the variables
|
||||||
|
# <dep_pkgname>_<pkgname>_VERSION|COMPONENTS are looked up to and added to the native
|
||||||
|
# VERSION (selected highest version) and COMPONENTS (deduplicated) args.
|
||||||
|
#
|
||||||
|
# COMPONENTS and VERSION args are then just passed to the native find_package.
|
||||||
|
#
|
||||||
|
macro(find_package2 qualifier pkgname)
|
||||||
|
cmake_parse_arguments(ARGS "" "VERSION" "COMPONENTS;ADD_REQUIREMENTS_OF" ${ARGN})
|
||||||
|
|
||||||
|
string(TOUPPER ${pkgname} pkgname_upper)
|
||||||
|
set(__old_cpp__ ${CMAKE_PREFIX_PATH})
|
||||||
|
set(CMAKE_PREFIX_PATH ${${pkgname_upper}_ROOT} $ENV{${pkgname_upper}_ROOT} ${CMAKE_PREFIX_PATH})
|
||||||
|
|
||||||
|
# build lists of required versions and components
|
||||||
|
unset(__required_versions__)
|
||||||
|
unset(__components__)
|
||||||
|
if(ARGS_VERSION)
|
||||||
|
list(APPEND __required_versions__ ${ARGS_VERSION})
|
||||||
|
endif()
|
||||||
|
if(ARGS_COMPONENTS)
|
||||||
|
list(APPEND __components__ ${ARGS_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
if(ARGS_ADD_REQUIREMENTS_OF)
|
||||||
|
foreach(dep_pkgname IN LISTS ARGS_ADD_REQUIREMENTS_OF)
|
||||||
|
if(${dep_pkgname}_${pkgname}_VERSION)
|
||||||
|
list(APPEND __required_versions__ ${${dep_pkgname}_${pkgname}_VERSION})
|
||||||
|
endif()
|
||||||
|
if(${dep_pkgname}_${pkgname}_COMPONENTS)
|
||||||
|
list(APPEND __components__ ${${dep_pkgname}_${pkgname}_COMPONENTS})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# select highest required version
|
||||||
|
unset(__version__)
|
||||||
|
if(__required_versions__)
|
||||||
|
list(GET __required_versions__ 0 __version__)
|
||||||
|
foreach(v IN LISTS __required_versions__)
|
||||||
|
if(${v} VERSION_GREATER ${__version__})
|
||||||
|
set(__version__ ${v})
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
# deduplicate required component list
|
||||||
|
if(__components__)
|
||||||
|
list(REMOVE_DUPLICATES ARGS_COMPONENTS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# call native find_package
|
||||||
|
if(__components__)
|
||||||
|
find_package(${pkgname} ${__version__} QUIET COMPONENTS ${__components__} ${ARGS_UNPARSED_ARGUMENTS})
|
||||||
|
else()
|
||||||
|
find_package(${pkgname} ${__version__} QUIET ${ARGS_UNPARSED_ARGUMENTS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${pkgname}_FOUND)
|
||||||
|
if(${qualifier} STREQUAL PRIVATE)
|
||||||
|
set(PROJECT_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
elseif(${qualifier} STREQUAL PUBLIC)
|
||||||
|
set(PROJECT_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
elseif(${qualifier} STREQUAL INTERFACE)
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_VERSION ${__version__})
|
||||||
|
set(PROJECT_INTERFACE_${pkgname}_COMPONENTS ${ARGS_COMPONENTS})
|
||||||
|
set(PROJECT_INTERFACE_PACKAGE_DEPENDENCIES ${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES} ${pkgname})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
unset(__version__)
|
||||||
|
unset(__components__)
|
||||||
|
unset(__required_versions__)
|
||||||
|
set(CMAKE_PREFIX_PATH ${__old_cpp__})
|
||||||
|
unset(__old_cpp__)
|
||||||
|
endmacro()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user