mirror of
https://github.com/FairRootGroup/FairLogger.git
synced 2025-10-17 02:21:45 +00:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
13ebedca3d | ||
|
1c43450582 | ||
|
f9af3a7269 | ||
|
064e034d25 | ||
|
3f55a16850 |
@@ -12,6 +12,7 @@ cmake_policy(VERSION 3.9...3.19)
|
|||||||
# Project ######################################################################
|
# Project ######################################################################
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
||||||
include(FairLoggerLib)
|
include(FairLoggerLib)
|
||||||
|
include(FairFindPackage2)
|
||||||
|
|
||||||
get_git_version()
|
get_git_version()
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ add_library(FairLogger
|
|||||||
logger/Logger.cxx
|
logger/Logger.cxx
|
||||||
logger/Logger.h
|
logger/Logger.h
|
||||||
)
|
)
|
||||||
|
target_compile_features(FairLogger PUBLIC cxx_std_11)
|
||||||
|
|
||||||
if(USE_BOOST_PRETTY_FUNCTION)
|
if(USE_BOOST_PRETTY_FUNCTION)
|
||||||
target_link_libraries(FairLogger PUBLIC Boost::boost)
|
target_link_libraries(FairLogger PUBLIC Boost::boost)
|
||||||
@@ -67,6 +69,7 @@ else()
|
|||||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger/bundled>
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/logger/bundled>
|
||||||
$<INSTALL_INTERFACE:${PROJECT_INSTALL_BUNDLEDINCDIR}>
|
$<INSTALL_INTERFACE:${PROJECT_INSTALL_BUNDLEDINCDIR}>
|
||||||
)
|
)
|
||||||
|
target_compile_features(fmt INTERFACE cxx_std_11)
|
||||||
target_compile_definitions(fmt INTERFACE FMT_HEADER_ONLY)
|
target_compile_definitions(fmt INTERFACE FMT_HEADER_ONLY)
|
||||||
target_link_libraries(FairLogger PUBLIC fmt)
|
target_link_libraries(FairLogger PUBLIC fmt)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -234,4 +234,4 @@ Define an option `FAIR_NO_LOG*` to prevent the above unprefixed macros to be def
|
|||||||
|
|
||||||
GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE).
|
GNU Lesser General Public Licence (LGPL) version 3, see [LICENSE](LICENSE).
|
||||||
|
|
||||||
Copyright (C) 2017-2020 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
|
Copyright (C) 2017-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
|
||||||
|
102
cmake/FairFindPackage2.cmake
Normal file
102
cmake/FairFindPackage2.cmake
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
################################################################################
|
||||||
|
# Copyright (C) 2018-2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH #
|
||||||
|
# #
|
||||||
|
# This software is distributed under the terms of the #
|
||||||
|
# GNU Lesser General Public Licence (LGPL) version 3, #
|
||||||
|
# copied verbatim in the file "LICENSE" #
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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()
|
@@ -95,23 +95,21 @@ macro(set_fairlogger_defaults)
|
|||||||
|
|
||||||
# Handle C++ standard level
|
# Handle C++ standard level
|
||||||
set(PROJECT_MIN_CXX_STANDARD 11)
|
set(PROJECT_MIN_CXX_STANDARD 11)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
if(CMAKE_CXX_STANDARD LESS PROJECT_MIN_CXX_STANDARD)
|
||||||
if(NOT CMAKE_CXX_STANDARD)
|
|
||||||
set(CMAKE_CXX_STANDARD ${PROJECT_MIN_CXX_STANDARD})
|
|
||||||
elseif(${CMAKE_CXX_STANDARD} LESS ${PROJECT_MIN_CXX_STANDARD})
|
|
||||||
message(FATAL_ERROR "A minimum CMAKE_CXX_STANDARD of ${PROJECT_MIN_CXX_STANDARD} is required.")
|
message(FATAL_ERROR "A minimum CMAKE_CXX_STANDARD of ${PROJECT_MIN_CXX_STANDARD} is required.")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
||||||
|
|
||||||
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(NOT BUILD_SHARED_LIBS)
|
if(NOT DEFINED BUILD_SHARED_LIBS)
|
||||||
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
|
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set -fPIC as default for all library types
|
# Set -fPIC as default for all library types
|
||||||
if(NOT CMAKE_POSITION_INDEPENDENT_CODE)
|
if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -130,13 +128,13 @@ macro(set_fairlogger_defaults)
|
|||||||
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}" isSystemDir)
|
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}" isSystemDir)
|
||||||
if("${isSystemDir}" STREQUAL "-1")
|
if("${isSystemDir}" STREQUAL "-1")
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,--enable-new-dtags")
|
list(APPEND CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--enable-new-dtags")
|
list(APPEND CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags")
|
||||||
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${PROJECT_INSTALL_LIBDIR}")
|
list(APPEND CMAKE_INSTALL_RPATH "$ORIGIN/../${PROJECT_INSTALL_LIBDIR}")
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
set(CMAKE_INSTALL_RPATH "@loader_path/../${PROJECT_INSTALL_LIBDIR}")
|
list(APPEND CMAKE_INSTALL_RPATH "@loader_path/../${PROJECT_INSTALL_LIBDIR}")
|
||||||
else()
|
else()
|
||||||
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}")
|
list(APPEND CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -250,98 +248,3 @@ 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()
|
|
||||||
|
Reference in New Issue
Block a user