mirror of
https://github.com/FairRootGroup/FairLogger.git
synced 2025-10-13 00:31:12 +00:00
177 lines
6.4 KiB
CMake
177 lines
6.4 KiB
CMake
################################################################################
|
|
# 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, #
|
|
# copied verbatim in the file "LICENSE" #
|
|
################################################################################
|
|
|
|
### PUBLIC
|
|
|
|
# Defines some variables with console color escape sequences
|
|
if(NOT WIN32 AND NOT DISABLE_COLOR)
|
|
string(ASCII 27 Esc)
|
|
set(CR "${Esc}[m")
|
|
set(CB "${Esc}[1m")
|
|
set(Red "${Esc}[31m")
|
|
set(Green "${Esc}[32m")
|
|
set(Yellow "${Esc}[33m")
|
|
set(Blue "${Esc}[34m")
|
|
set(Magenta "${Esc}[35m")
|
|
set(Cyan "${Esc}[36m")
|
|
set(White "${Esc}[37m")
|
|
set(BRed "${Esc}[1;31m")
|
|
set(BGreen "${Esc}[1;32m")
|
|
set(BYellow "${Esc}[1;33m")
|
|
set(BBlue "${Esc}[1;34m")
|
|
set(BMagenta "${Esc}[1;35m")
|
|
set(BCyan "${Esc}[1;36m")
|
|
set(BWhite "${Esc}[1;37m")
|
|
endif()
|
|
|
|
find_package(Git)
|
|
# get_git_version([DEFAULT_VERSION version] [DEFAULT_DATE date] [OUTVAR_PREFIX prefix])
|
|
#
|
|
# Sets variables #prefix#_VERSION, #prefix#_GIT_VERSION, #prefix#_DATE, #prefix#_GIT_DATE
|
|
function(get_git_version)
|
|
cmake_parse_arguments(ARGS "" "DEFAULT_VERSION;DEFAULT_DATE;OUTVAR_PREFIX" "" ${ARGN})
|
|
|
|
if(NOT ARGS_OUTVAR_PREFIX)
|
|
set(ARGS_OUTVAR_PREFIX FairLogger)
|
|
endif()
|
|
|
|
if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git)
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --dirty --match "v*"
|
|
OUTPUT_VARIABLE ${ARGS_OUTVAR_PREFIX}_GIT_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
if(${ARGS_OUTVAR_PREFIX}_GIT_VERSION)
|
|
# cut first two characters "v-"
|
|
string(SUBSTRING ${${ARGS_OUTVAR_PREFIX}_GIT_VERSION} 1 -1 ${ARGS_OUTVAR_PREFIX}_GIT_VERSION)
|
|
endif()
|
|
execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%cd
|
|
OUTPUT_VARIABLE ${ARGS_OUTVAR_PREFIX}_GIT_DATE
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
endif()
|
|
|
|
if(NOT ${ARGS_OUTVAR_PREFIX}_GIT_VERSION)
|
|
if(ARGS_DEFAULT_VERSION)
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_VERSION ${ARGS_DEFAULT_VERSION})
|
|
else()
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_VERSION 0.0.0.0)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT ${ARGS_OUTVAR_PREFIX}_GIT_DATE)
|
|
if(ARGS_DEFAULT_DATE)
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_DATE ${ARGS_DEFAULT_DATE})
|
|
else()
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_DATE "Thu Jan 1 00:00:00 1970 +0000")
|
|
endif()
|
|
endif()
|
|
|
|
string(REGEX MATCH "^([^-]*)" blubb ${${ARGS_OUTVAR_PREFIX}_GIT_VERSION})
|
|
|
|
# return values
|
|
set(${ARGS_OUTVAR_PREFIX}_VERSION ${CMAKE_MATCH_0} PARENT_SCOPE)
|
|
set(${ARGS_OUTVAR_PREFIX}_DATE ${${ARGS_OUTVAR_PREFIX}_GIT_DATE} PARENT_SCOPE)
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_VERSION ${${ARGS_OUTVAR_PREFIX}_GIT_VERSION} PARENT_SCOPE)
|
|
set(${ARGS_OUTVAR_PREFIX}_GIT_DATE ${${ARGS_OUTVAR_PREFIX}_GIT_DATE} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
|
|
# Set defaults
|
|
macro(set_fairlogger_defaults)
|
|
string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
|
|
|
|
# Set a default build type
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE RelWithDebInfo)
|
|
endif()
|
|
|
|
# Handle C++ standard level
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
if(NOT CMAKE_CXX_STANDARD)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
elseif(${CMAKE_CXX_STANDARD} LESS 11)
|
|
message(FATAL_ERROR "A minimum CMAKE_CXX_STANDARD of 11 is required.")
|
|
endif()
|
|
if(NOT CMAKE_CXX_EXTENSIONS)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
endif()
|
|
|
|
# Generate compile_commands.json file (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
if(NOT BUILD_SHARED_LIBS)
|
|
set(BUILD_SHARED_LIBS ON CACHE BOOL "Whether to build shared libraries or static archives")
|
|
endif()
|
|
|
|
# Set -fPIC as default for all library types
|
|
if(NOT CMAKE_POSITION_INDEPENDENT_CODE)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
endif()
|
|
|
|
# Define CMAKE_INSTALL_*DIR family of variables
|
|
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})
|
|
|
|
# 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)
|
|
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}")
|
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|
set(CMAKE_INSTALL_RPATH "@loader_path/../${FairLogger_INSTALL_LIBDIR}")
|
|
else()
|
|
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${FairLogger_INSTALL_LIBDIR}")
|
|
endif()
|
|
endif()
|
|
|
|
# Define export set, only one for now
|
|
set(FairLogger_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()
|
|
|
|
|
|
# Configure/Install CMake package
|
|
macro(install_fairlogger_cmake_package)
|
|
include(CMakePackageConfigHelpers)
|
|
set(PACKAGE_INSTALL_DESTINATION
|
|
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${FairLogger_GIT_VERSION}
|
|
)
|
|
install(EXPORT ${FairLogger_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
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
configure_package_config_file(
|
|
${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
|
INSTALL_DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
|
PATH_VARS CMAKE_INSTALL_PREFIX
|
|
)
|
|
install(FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
|
DESTINATION ${PACKAGE_INSTALL_DESTINATION}
|
|
)
|
|
endmacro()
|