From 8e9d91c5966a9ea8f2115e23beab77c8d550ee29 Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Thu, 27 Jun 2019 11:41:41 +0200 Subject: [PATCH] CMake: Update CMake package * Adopt generate_package_dependencies Resolves #14 --- CMakeLists.txt | 12 +++---- cmake/FairLoggerConfig.cmake.in | 23 ++++++++----- cmake/FairLoggerLib.cmake | 60 +++++++++++++++++++++++++++------ 3 files changed, 70 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df5c215..67755eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,20 +75,20 @@ install(TARGETS FairLogger ${test_targets} - EXPORT ${FairLogger_EXPORT_SET} - LIBRARY DESTINATION ${FairLogger_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${FairLogger_INSTALL_LIBDIR} - RUNTIME DESTINATION ${FairLogger_INSTALL_BINDIR} + EXPORT ${PROJECT_EXPORT_SET} + LIBRARY DESTINATION ${PROJECT_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${PROJECT_INSTALL_LIBDIR} + RUNTIME DESTINATION ${PROJECT_INSTALL_BINDIR} ) install(FILES logger/Logger.h ${CMAKE_BINARY_DIR}/logger/Version.h - DESTINATION ${FairLogger_INSTALL_INCDIR} + DESTINATION ${PROJECT_INSTALL_INCDIR} ) -install_fairlogger_cmake_package() +install_cmake_package() ################################################################################ diff --git a/cmake/FairLoggerConfig.cmake.in b/cmake/FairLoggerConfig.cmake.in index 9a1f82b..0d08fb5 100644 --- a/cmake/FairLoggerConfig.cmake.in +++ b/cmake/FairLoggerConfig.cmake.in @@ -1,5 +1,5 @@ ################################################################################ -# Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # +# Copyright (C) 2018-2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH # # # # This software is distributed under the terms of the # # GNU Lesser General Public Licence (LGPL) version 3, # @@ -9,19 +9,26 @@ @PACKAGE_INIT@ ### General variables for project discovery/inspection -set(FairLogger_VERSION @PROJECT_VERSION@) -set(FairLogger_GIT_VERSION @FairLogger_GIT_VERSION@) +set(@PROJECT_NAME@_VERSION @PROJECT_VERSION@) +set(@PROJECT_NAME@_GIT_VERSION @PROJECT_GIT_VERSION@) +set(@PROJECT_NAME@_GIT_DATE @PROJECT_GIT_DATE@) -set_and_check(FairLogger_ROOT @PACKAGE_CMAKE_INSTALL_PREFIX@) -set_and_check(FairLogger_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairLogger_INSTALL_BINDIR@) -set_and_check(FairLogger_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@) -set_and_check(FairLogger_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairLogger_INSTALL_LIBDIR@) +set_and_check(@PROJECT_NAME@_PREFIX @PACKAGE_CMAKE_INSTALL_PREFIX@) +set(@PROJECT_NAME@_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_BINDIR@) +set_and_check(@PROJECT_NAME@_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@) +set_and_check(@PROJECT_NAME@_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_LIBDIR@) set(@PROJECT_NAME@_CXX_STANDARD_REQUIRED @CMAKE_CXX_STANDARD_REQUIRED@) set(@PROJECT_NAME@_CXX_STANDARD @CMAKE_CXX_STANDARD@) set(@PROJECT_NAME@_CXX_EXTENSIONS @CMAKE_CXX_EXTENSIONS@) +set(@PROJECT_NAME@_BUILD_TYPE @CMAKE_BUILD_TYPE@) +set(@PROJECT_NAME@_BUILD_TYPE_UPPER @PROJECT_BUILD_TYPE_UPPER@) +set(@PROJECT_NAME@_CXX_FLAGS @PROJECT_CXX_FLAGS@) + + +@PACKAGE_DEPENDENCIES@ ### Import targets -include(@PACKAGE_CMAKE_INSTALL_PREFIX@/@PACKAGE_INSTALL_DESTINATION@/FairLoggerTargets.cmake) +include(@PACKAGE_CMAKE_INSTALL_PREFIX@/@PACKAGE_INSTALL_DESTINATION@/@PROJECT_EXPORT_SET@.cmake) check_required_components(FairLogger) diff --git a/cmake/FairLoggerLib.cmake b/cmake/FairLoggerLib.cmake index c546ecb..37dcdf6 100644 --- a/cmake/FairLoggerLib.cmake +++ b/cmake/FairLoggerLib.cmake @@ -119,49 +119,87 @@ macro(set_fairlogger_defaults) include(GNUInstallDirs) # Define install dirs - set(FairLogger_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) - set(FairLogger_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - set(FairLogger_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER}) - set(FairLogger_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER}) + set(PROJECT_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) + set(PROJECT_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) + set(PROJECT_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER}) + set(PROJECT_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER}) # https://cmake.org/Wiki/CMake_RPATH_handling set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${FairLogger_INSTALL_LIBDIR}" isSystemDir) + list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}" isSystemDir) if("${isSystemDir}" STREQUAL "-1") if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-Wl,--enable-new-dtags") set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "-Wl,--enable-new-dtags") - set(CMAKE_INSTALL_RPATH "$ORIGIN/../${FairLogger_INSTALL_LIBDIR}") + set(CMAKE_INSTALL_RPATH "$ORIGIN/../${PROJECT_INSTALL_LIBDIR}") elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(CMAKE_INSTALL_RPATH "@loader_path/../${FairLogger_INSTALL_LIBDIR}") + set(CMAKE_INSTALL_RPATH "@loader_path/../${PROJECT_INSTALL_LIBDIR}") else() - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${FairLogger_INSTALL_LIBDIR}") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PROJECT_INSTALL_LIBDIR}") endif() endif() # Define export set, only one for now - set(FairLogger_EXPORT_SET ${PROJECT_NAME}Targets) + set(PROJECT_EXPORT_SET ${PROJECT_NAME}Targets) set(CMAKE_CXX_FLAGS_NIGHTLY "-O2 -g -Wshadow -Wall -Wextra") set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs -Wshadow -Wall -Wextra -Wunused-variable") endmacro() +function(join VALUES GLUE OUTPUT) + string(REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}") + string(REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping + set(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) +endfunction() + +function(generate_package_dependencies) + join("${PROJECT_INTERFACE_PACKAGE_DEPENDENCIES}" " " DEPS) + set(PACKAGE_DEPENDENCIES "\ +####### Expanded from @PACKAGE_DEPENDENCIES@ by configure_package_config_file() ####### + +set(${PROJECT_NAME}_PACKAGE_DEPENDENCIES ${DEPS}) + +") + foreach(dep IN LISTS PROJECT_INTERFACE_PACKAGE_DEPENDENCIES) + join("${PROJECT_INTERFACE_${dep}_COMPONENTS}" " " COMPS) + if(COMPS) + string(CONCAT PACKAGE_DEPENDENCIES ${PACKAGE_DEPENDENCIES} "\ +set(${PROJECT_NAME}_${dep}_COMPONENTS ${COMPS}) +") + endif() + if(PROJECT_INTERFACE_${dep}_VERSION) + string(CONCAT PACKAGE_DEPENDENCIES ${PACKAGE_DEPENDENCIES} "\ +set(${PROJECT_NAME}_${dep}_VERSION ${PROJECT_INTERFACE_${dep}_VERSION}) +") + endif() + endforeach() + string(CONCAT PACKAGE_DEPENDENCIES ${PACKAGE_DEPENDENCIES} "\ + +####################################################################################### +") +set(PACKAGE_DEPENDENCIES ${PACKAGE_DEPENDENCIES} PARENT_SCOPE) +endfunction() + # Configure/Install CMake package -macro(install_fairlogger_cmake_package) +macro(install_cmake_package) include(CMakePackageConfigHelpers) set(PACKAGE_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_GIT_VERSION} ) - install(EXPORT ${FairLogger_EXPORT_SET} + install(EXPORT ${PROJECT_EXPORT_SET} NAMESPACE ${PROJECT_NAME}:: DESTINATION ${PACKAGE_INSTALL_DESTINATION} EXPORT_LINK_INTERFACE_LIBRARIES ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) + generate_package_dependencies() # fills ${PACKAGE_DEPENDENCIES} + string(TOUPPER ${CMAKE_BUILD_TYPE} PROJECT_BUILD_TYPE_UPPER) + set(PROJECT_CXX_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${PROJECT_BUILD_TYPE_UPPER}}) configure_package_config_file( ${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake