From 83315b2951f01c93650be3c075a1cfe058957700 Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Mon, 16 Apr 2018 01:36:51 +0200 Subject: [PATCH] Generate package dependencies and install Version.h. --- CMakeLists.txt | 75 ++++++++++++++++++++++++++----------- cmake/FairMQConfig.cmake.in | 57 ++++++++-------------------- cmake/FairMQLib.cmake | 61 ++++++++++++++++++++++++------ cmake/FindMsgpack.cmake | 39 ------------------- 4 files changed, 119 insertions(+), 113 deletions(-) delete mode 100644 cmake/FindMsgpack.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f8a73b60..4bb575ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ set_fairmq_cmake_policies() get_git_version(OUTVAR_PREFIX FairMQ) project(FairMQ VERSION ${FairMQ_VERSION} LANGUAGES CXX) -message(STATUS "${BWhite}${PROJECT_NAME}${CR} ${FairMQ_GIT_VERSION} from ${FairMQ_DATE}") +message(STATUS "${BWhite}${PROJECT_NAME}${CR} ${${PROJECT_NAME}_GIT_VERSION} from ${${PROJECT_NAME}_DATE}") set_fairmq_defaults() @@ -33,40 +33,69 @@ option(BUILD_DDS_PLUGIN "Build DDS plugin." OFF) # Dependencies ################################################################# +set(dep Boost) +set(PROJECT_${dep}_VERSION 1.64) +set(PROJECT_${dep}_COMPONENTS program_options thread system filesystem regex date_time signals) if(Boost_INCLUDE_DIR) # Silence output, if Boost was found already set(SILENCE_BOOST QUIET) endif() -find_package(Boost 1.64 ${SILENCE_BOOST} REQUIRED - COMPONENTS program_options thread system filesystem regex date_time signals -) +find_package(${dep} ${PROJECT_${dep}_VERSION} ${SILENCE_BOOST} REQUIRED COMPONENTS ${PROJECT_${dep}_COMPONENTS}) +list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) -set(CMAKE_PREFIX_PATH ${FAIRLOGGER_ROOT} $ENV{FAIRLOGGER_ROOT} ${CMAKE_PREFIX_PATH}) -find_package(FairLogger 1.0.1 REQUIRED) +set(dep FairLogger) +set(PROJECT_${dep}_VERSION 1.0.2) +string(TOUPPER ${dep} upper_dep) +set(old ${CMAKE_PREFIX_PATH}) +set(CMAKE_PREFIX_PATH ${${upper_dep}_ROOT} $ENV{${upper_dep}_ROOT} ${CMAKE_PREFIX_PATH}) +find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED) +list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) +set(CMAKE_PREFIX_PATH ${old}) -find_package(ZeroMQ 4.2.2 REQUIRED) +set(dep ZeroMQ) +set(PROJECT_${dep}_VERSION 4.2.2) +find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED) +list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) if(BUILD_NANOMSG_TRANSPORT) - find_package(nanomsg REQUIRED) - set(CMAKE_PREFIX_PATH ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT} ${CMAKE_PREFIX_PATH}) - find_package(msgpack 2.1.5 REQUIRED) + set(dep nanomsg) + find_package(${dep} REQUIRED) + list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) + + set(dep msgpack) + set(PROJECT_${dep}_VERSION 2.1.5) + string(TOUPPER ${dep} upper_dep) + set(old ${CMAKE_PREFIX_PATH}) + set(CMAKE_PREFIX_PATH ${${upper_dep}_ROOT} $ENV{${upper_dep}_ROOT} ${CMAKE_PREFIX_PATH}) + find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED) + list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) + set(CMAKE_PREFIX_PATH ${old}) endif() if(BUILD_OFI_TRANSPORT) - find_package(OFI 1.6.0 REQUIRED COMPONENTS fi_sockets) + set(dep OFI) + set(PROJECT_${dep}_VERSION 1.6.0) + set(PROJECT_${dep}_COMPONENTS fi_sockets) + find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED COMPONENTS ${PROJECT_${dep}_COMPONENTS}) + list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) endif() if(BUILD_DDS_PLUGIN) - find_package(DDS 2.0 REQUIRED) + set(dep DDS) + set(PROJECT_${dep}_VERSION 2.0) + find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED) + list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) endif() if(BUILD_TESTING) - find_package(GTest REQUIRED) + set(dep GTest) + set(PROJECT_${dep}_VERSION 1.7.0) + find_package(${dep} ${PROJECT_${dep}_VERSION} REQUIRED) + list(APPEND PROJECT_PACKAGE_DEPENDENCIES ${dep}) endif() ################################################################################ # Targets ###################################################################### -# Configure Version.hpp configure_file(${PROJECT_NAME_LOWER}/Version.h.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME_LOWER}/Version.h @ONLY @@ -81,7 +110,11 @@ endif() # Installation ################################################################# -install_fairmq_cmake_package() +install(FILE ${CMAKE_BINARY_DIR}/${PROJECT_NAME_LOWER}/Version.h + DESTINATION ${PROJECT_INSTALL_INCDIR} +) + +install_cmake_package() ################################################################################ @@ -95,18 +128,18 @@ else() set(tests_summary "${BRed} NO${CR} (enable with ${BMagenta}-DBUILD_TESTING=ON${CR})") endif() message(STATUS " ${BWhite}tests${CR} ${tests_summary}") -if(BUILD_OFI_TRANSPORT) - set(ofi_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_OFI_TRANSPORT=OFF${CR})") -else() - set(ofi_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_OFI_TRANSPORT=ON${CR})") -endif() -message(STATUS " ${BWhite}OFI transport${CR} ${ofi_summary} Experimental") if(BUILD_NANOMSG_TRANSPORT) set(nn_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_NANOMSG_TRANSPORT=OFF${CR})") else() set(nn_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_NANOMSG_TRANSPORT=ON${CR})") endif() message(STATUS " ${BWhite}nanomsg transport${CR} ${nn_summary}") +if(BUILD_OFI_TRANSPORT) + set(ofi_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_OFI_TRANSPORT=OFF${CR})") +else() + set(ofi_summary "${BRed} NO${CR} (default, enable with ${BMagenta}-DBUILD_OFI_TRANSPORT=ON${CR})") +endif() +message(STATUS " ${BWhite}OFI transport${CR} ${ofi_summary} Experimental") if(BUILD_DDS_PLUGIN) set(dds_summary "${BGreen}YES${CR} (disable with ${BMagenta}-DBUILD_DDS_PLUGIN=OFF${CR})") else() diff --git a/cmake/FairMQConfig.cmake.in b/cmake/FairMQConfig.cmake.in index fcaac6d6..f8e895ee 100644 --- a/cmake/FairMQConfig.cmake.in +++ b/cmake/FairMQConfig.cmake.in @@ -11,55 +11,28 @@ cmake_minimum_required(VERSION 3.9.4 FATAL_ERROR) @PACKAGE_INIT@ ### General variables for project discovery/inspection -set(FAIRMQ_VERSION @PROJECT_VERSION@) -set(FAIRMQ_GIT_VERSION @FAIRMQ_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(FairMQ_ROOT @PACKAGE_CMAKE_INSTALL_PREFIX@) -set_and_check(FairMQ_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairMQ_INSTALL_BINDIR@) -set_and_check(FairMQ_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairMQ_INSTALL_INCDIR@) -set_and_check(FairMQ_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairMQ_INSTALL_LIBDIR@) -set_and_check(FairMQ_DATADIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairMQ_INSTALL_DATADIR@) -set_and_check(FairMQ_CMAKEMODDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@FairMQ_INSTALL_CMAKEMODDIR@) +set_and_check(@PROJECT_NAME@_ROOT @PACKAGE_CMAKE_INSTALL_PREFIX@) +set_and_check(@PROJECT_NAME@_BINDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_BINDIR@) +set_and_check(@PROJECT_NAME@_INCDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_INCDIR@) +set_and_check(@PROJECT_NAME@_LIBDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_LIBDIR@) +set_and_check(@PROJECT_NAME@_DATADIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_DATADIR@) +set_and_check(@PROJECT_NAME@_CMAKEMODDIR @PACKAGE_CMAKE_INSTALL_PREFIX@/@PROJECT_INSTALL_CMAKEMODDIR@) ### Import cmake modules -set(CMAKE_MODULE_PATH ${FairMQ_CMAKEMODDIR} ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH ${@PROJECT_NAME@_CMAKEMODDIR} ${CMAKE_MODULE_PATH}) -### Package dependencies -include(CMakeFindDependencyMacro) - -if( NOT (FairMQ_BOOST_DISABLED OR FairMQ_PACKAGE_DEPENDENCIES_DISABLED) - AND (@Boost_FOUND@ OR FairMQ_Boost_REQUIRED)) - set(FairMQ_Boost_COMPONENTS system) - if(FairMQ_ADDITIONAL_Boost_COMPONENTS) - list(APPEND FairMQ_Boost_COMPONENTS ${FairMQ_ADDITIONAL_Boost_COMPONENTS}) - list(REMOVE_DUPLICATES FairMQ_Boost_COMPONENTS) - endif() - if(Boost_INCLUDE_DIR) # checks for cached boost variable which indicates if Boost is already found - set(SILENCE_BOOST QUIET) - endif() - find_dependency(Boost 1.64 ${SILENCE_BOOST} - COMPONENTS ${FairMQ_Boost_COMPONENTS} - ) -endif() - -if( NOT (FairMQ_OFI_DISABLED OR FairMQ_PACKAGE_DEPENDENCIES_DISABLED) - AND (@OFI_FOUND@ OR FairMQ_OFI_REQUIRED)) - set(FairMQ_OFI_COMPONENTS fi_sockets) - if(FairMQ_ADDITIONAL_OFI_COMPONENTS) - list(APPEND FairMQ_OFI_COMPONENTS ${FairMQ_ADDITIONAL_OFI_COMPONENTS}) - list(REMOVE_DUPLICATES FairMQ_OFI_COMPONENTS) - endif() - find_dependency(OFI 1.6.0 - COMPONENTS ${FairMQ_OFI_COMPONENTS} - ) -endif() +@PACKAGE_DEPENDENCIES@ ### Import targets -include(@PACKAGE_CMAKE_INSTALL_PREFIX@/@PACKAGE_INSTALL_DESTINATION@/FairMQTargets.cmake) +include(@PACKAGE_CMAKE_INSTALL_PREFIX@/@PACKAGE_INSTALL_DESTINATION@/@PROJECT_NAME@Targets.cmake) ### Alias target for backwards compat (DEPRECATED) -if(NOT TARGET FairRoot::FairMQ) - add_library(FairRoot::FairMQ ALIAS FairMQ::FairMQ) +if(NOT TARGET FairRoot::@PROJECT_NAME@) + add_library(FairRoot::@PROJECT_NAME@ ALIAS @PROJECT_NAME@::@PROJECT_NAME@) endif() -check_required_components(FairMQ) +check_required_components(@PROJECT_NAME@) diff --git a/cmake/FairMQLib.cmake b/cmake/FairMQLib.cmake index de02b832..9fbbba08 100644 --- a/cmake/FairMQLib.cmake +++ b/cmake/FairMQLib.cmake @@ -54,7 +54,7 @@ function(get_git_version) cmake_parse_arguments(ARGS "" "DEFAULT_VERSION;DEFAULT_DATE;OUTVAR_PREFIX" "" ${ARGN}) if(NOT ARGS_OUTVAR_PREFIX) - set(ARGS_OUTVAR_PREFIX FairMQ) + set(ARGS_OUTVAR_PREFIX PROJECT) endif() if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) @@ -127,29 +127,67 @@ macro(set_fairmq_defaults) include(GNUInstallDirs) # Define install dirs - set(FairMQ_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) - set(FairMQ_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME_LOWER}) - set(FairMQ_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER}) - set(FairMQ_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER}) - set(FairMQ_INSTALL_CMAKEMODDIR ${FairMQ_INSTALL_DATADIR}/cmake) + set(PROJECT_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR}) + set(PROJECT_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME_LOWER}) + set(PROJECT_INSTALL_INCDIR ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME_LOWER}) + set(PROJECT_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME_LOWER}) + set(PROJECT_INSTALL_CMAKEMODDIR ${${PROJECT_NAME}_INSTALL_DATADIR}/cmake) # Define export set, only one for now - set(FairMQ_EXPORT_SET ${PROJECT_NAME}Targets) + set(PROJECT_EXPORT_SET ${PROJECT_NAME}Targets) endmacro() +macro(generate_package_dependencies) + set(PACKAGE_DEPENDENCIES "\ +include(CMakeFindDependencyMacro) + +set(${PROJECT_NAME}_PACKAGE_DEPENDENCIES ${PROJECT_PACKAGE_DEPENDENCIES}) + +") + foreach(dep IN LISTS PROJECT_PACKAGE_DEPENDENCIES) + string(CONCAT ${PACKAGE_DEPENDENCIES} "\ +set(${PROJECT_NAME}_${dep}_COMPONENTS ${PROJECT_${dep}_COMPONENTS}) +set(${PROJECT_NAME}_${dep}_VERSION ${PROJECT_${dep}_VERSION}) +set(${PROJECT_NAME}_${dep}_FOUND ${${dep}_FOUND}) + +") + endforeach() + string(CONCAT ${PACKAGE_DEPENDENCIES} "\ +if(Boost_INCLUDE_DIR) # checks for cached boost variable which indicates if Boost is already found + set(${PROJECT_NAME}_Boost_QUIET QUIET) +endif() + +foreach(dep IN LISTS ${PROJECT_NAME}_PACKAGE_DEPENDENCIES) + if( NOT (${PROJECT_NAME}_\${dep}_DISABLED OR ${PROJECT_NAME}_PACKAGE_DEPENDENCIES_DISABLED) + AND (${PROJECT_NAME}_\${dep}_FOUND OR ${PROJECT_NAME}_\${dep}_REQUIRED)) + if(${PROJECT_NAME}_ADDITIONAL_\${dep}_COMPONENTS) + list(APPEND ${PROJECT_NAME}_\${dep}_COMPONENTS \${${PROJECT_NAME}_ADDITIONAL_\${dep}_COMPONENTS}) + list(REMOVE_DUPLICATES ${PROJECT_NAME}_\${dep}_COMPONENTS) + endif() + if(${PROJECT_NAME}_\${dep}_COMPONENTS) + set(components COMPONENTS \${${PROJECT_NAME}_\${dep}_COMPONENTS}) + else() + set(components) + endif() + find_dependency(\${dep} \${${PROJECT_NAME}_\${dep}_VERSION} \${${PROJECT_NAME}_\${dep}_QUIET} \${components}) + endif() +endforeach() +") +endmacro() # Configure/Install CMake package -macro(install_fairmq_cmake_package) +macro(install_cmake_package) # Install cmake modules - install( FILES cmake/FindOFI.cmake - DESTINATION ${FairMQ_INSTALL_CMAKEMODDIR} + install(DIRECTORY cmake + PATTERN "cmake/Find*.cmake" + DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKEMODDIR} ) include(CMakePackageConfigHelpers) set(PACKAGE_INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} ) - install(EXPORT ${FairMQ_EXPORT_SET} + install(EXPORT ${${PROJECT_NAME}_EXPORT_SET} NAMESPACE ${PROJECT_NAME}:: DESTINATION ${PACKAGE_INSTALL_DESTINATION} EXPORT_LINK_INTERFACE_LIBRARIES @@ -158,6 +196,7 @@ macro(install_fairmq_cmake_package) ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake COMPATIBILITY AnyNewerVersion ) + generate_package_dependencies() # fills ${PACKAGE_DEPENDENCIES} configure_package_config_file( ${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake diff --git a/cmake/FindMsgpack.cmake b/cmake/FindMsgpack.cmake deleted file mode 100644 index 27b69498..00000000 --- a/cmake/FindMsgpack.cmake +++ /dev/null @@ -1,39 +0,0 @@ -################################################################################ -# Copyright (C) 2014-2018 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_path(MSGPACK_INCLUDE_DIR - NAMES msgpack.hpp - HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT} - PATH_SUFFIXES include -) - -find_path(MSGPACK_LIBRARY_DIR - NAMES libmsgpackc.dylib libmsgpackc.so - HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT} - PATH_SUFFIXES lib -) - -find_library(MSGPACK_LIBRARY_SHARED - NAMES libmsgpackc.dylib libmsgpackc.so - HINTS ${MSGPACK_ROOT} $ENV{MSGPACK_ROOT} - PATH_SUFFIXES lib -) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Msgpack - REQUIRED_VARS MSGPACK_INCLUDE_DIR MSGPACK_LIBRARY_DIR MSGPACK_LIBRARY_SHARED -) - -# idempotently import targets -if(NOT TARGET Msgpack AND Msgpack_FOUND) - add_library(Msgpack SHARED IMPORTED) - set_target_properties(Msgpack PROPERTIES - IMPORTED_LOCATION ${MSGPACK_LIBRARY_SHARED} - INTERFACE_INCLUDE_DIRECTORIES ${MSGPACK_INCLUDE_DIR} - ) -endif()