From ea18c72c3167b56988892b765dd0d89164707a91 Mon Sep 17 00:00:00 2001 From: bergmann Date: Wed, 6 Nov 2019 23:34:45 +0100 Subject: [PATCH] * Updated project structure --- .gitmodules | 2 +- CMakeLists.txt | 98 ++++++------ README.md | 3 + cmake/FindGTest.cmake | 282 +++++++++++++++++++++++++++++++++ cmake/cpplogging-const.cmake | 34 ++-- cmake/cpplogging-options.cmake | 42 ++--- cmake/cpplogging-var.cmake | 48 +++--- cmake/modules | 2 +- src/CMakeLists.txt | 196 ++++++++++++----------- test/CMakeLists.txt | 87 +++++----- 10 files changed, 553 insertions(+), 241 deletions(-) create mode 100644 README.md create mode 100644 cmake/FindGTest.cmake diff --git a/.gitmodules b/.gitmodules index a89889c..37e8830 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "cmake/modules"] path = cmake/modules - url = b3rgmann@git.bergmann89.de:cpp/CmakeModules.git + url = b3rgmann@git.bergmann89.de:cpp/CMakeModules.git diff --git a/CMakeLists.txt b/CMakeLists.txt index fa290c6..8b94d50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,63 +1,63 @@ # Initialize CMake ################################################################################ -CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) +CMake_Minimum_Required ( VERSION 3.12.0 FATAL_ERROR ) # Set CMAKE_BUILD_TYPE -If ( NOT CMAKE_BUILD_TYPE ) - Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) -EndIf ( NOT CMAKE_BUILD_TYPE ) -Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) +If ( NOT CMAKE_BUILD_TYPE ) + Set ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE ) +EndIf ( NOT CMAKE_BUILD_TYPE ) +Set_Property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel ) # Set CMAKE_MODULE_PATH -If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) - Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) -EndIf ( ) -If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) - Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" ) -EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" ) +EndIf ( ) +If ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) + Set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" ) +EndIf ( ) # Project ######################################################################################### -Include ( CTest ) -Include ( GNUInstallDirs ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-options.cmake ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-const.cmake ) -Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-var.cmake ) -Project ( ${CPPLOGGING_PROJECT_NAME} - DESCRIPTION "${CPPLOGGING_PROJECT_DESCRIPTION}" - VERSION "${CPPLOGGING_VERSION}" ) +Include ( GNUInstallDirs ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-options.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-const.cmake ) +Include ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-var.cmake ) +Project ( ${CPPLOGGING_PROJECT_NAME} + DESCRIPTION "${CPPLOGGING_PROJECT_DESCRIPTION}" + VERSION "${CPPLOGGING_VERSION}" ) +Include ( CTest ) # Subdirectories -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) -Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/src ) +Add_SubDirectory ( ${CMAKE_CURRENT_SOURCE_DIR}/test ) # Install -If ( NOT CPPLOGGING_HAS_EXPORT - OR NOT CPPLOGGING_INSTALL_PACKAGE ) - Return ( ) -EndIf ( ) - -Include ( CMakePackageConfigHelpers ) -Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config-version.cmake" - VERSION ${CPPLOGGING_VERSION} - COMPATIBILITY AnyNewerVersion ) -Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config.cmake" - @ONLY ) - -Set ( ConfigPackageLocation "${CPPLOGGING_INSTALL_DIR_SHARE}/cmake" ) -Install ( EXPORT - cpplogging - NAMESPACE - cpplogging:: - DESTINATION - ${ConfigPackageLocation} ) -Install ( FILES +If ( NOT CPPLOGGING_HAS_EXPORT + OR NOT CPPLOGGING_INSTALL_PACKAGE ) + Return ( ) +EndIf ( ) + +Include ( CMakePackageConfigHelpers ) +Write_Basic_Package_Version_File ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config-version.cmake" + VERSION ${CPPLOGGING_VERSION} + COMPATIBILITY AnyNewerVersion ) +Configure_File ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cpplogging-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config-version.cmake" - DESTINATION - ${ConfigPackageLocation} - COMPONENT - Devel ) + @ONLY ) + +Set ( ConfigPackageLocation "${CPPLOGGING_INSTALL_DIR_SHARE}/cmake" ) +Install ( EXPORT + cpplogging + NAMESPACE + cpplogging:: + DESTINATION + ${ConfigPackageLocation} ) +Install ( FILES + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/cmake/cpplogging-config-version.cmake" + DESTINATION + ${ConfigPackageLocation} + COMPONENT + Devel ) diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef5ffce --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# cpplogging + +C++ logging library. diff --git a/cmake/FindGTest.cmake b/cmake/FindGTest.cmake new file mode 100644 index 0000000..470b9e8 --- /dev/null +++ b/cmake/FindGTest.cmake @@ -0,0 +1,282 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindGTest +--------- + +Locate the Google C++ Testing Framework. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``GTest::GTest`` + The Google Test ``gtest`` library, if found; adds Thread::Thread + automatically +``GTest::Main`` + The Google Test ``gtest_main`` library, if found + + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GTEST_FOUND`` + Found the Google Testing framework +``GTEST_INCLUDE_DIRS`` + the directory containing the Google Test headers + +The library variables below are set as normal variables. These +contain debug/optimized keywords when a debugging library is found. + +``GTEST_LIBRARIES`` + The Google Test ``gtest`` library; note it also requires linking + with an appropriate thread library +``GTEST_MAIN_LIBRARIES`` + The Google Test ``gtest_main`` library +``GTEST_BOTH_LIBRARIES`` + Both ``gtest`` and ``gtest_main`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GTEST_ROOT`` + The root directory of the Google Test installation (may also be + set as an environment variable) +``GTEST_MSVC_SEARCH`` + If compiling with MSVC, this variable can be set to ``MT`` or + ``MD`` (the default) to enable searching a GTest build tree + + +Example usage +^^^^^^^^^^^^^ + +:: + + enable_testing() + find_package(GTest REQUIRED) + + add_executable(foo foo.cc) + target_link_libraries(foo GTest::GTest GTest::Main) + + add_test(AllTestsInFoo foo) + + +Deeper integration with CTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See :module:`GoogleTest` for information on the :command:`gtest_add_tests` +and :command:`gtest_discover_tests` commands. +#]=======================================================================] + +include(GoogleTest) + +function(__gtest_append_debugs _endvar _library) + if(${_library} AND ${_library}_DEBUG) + set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) + else() + set(_output ${${_library}}) + endif() + set(${_endvar} ${_output} PARENT_SCOPE) +endfunction() + +function(__gtest_find_library _name) + find_library(${_name} + NAMES ${ARGN} + HINTS + ENV GTEST_ROOT + ${GTEST_ROOT} + PATH_SUFFIXES ${_gtest_libpath_suffixes} + ) + mark_as_advanced(${_name}) +endfunction() + +macro(__gtest_determine_windows_library_type _var) + if(EXISTS "${${_var}}") + file(TO_NATIVE_PATH "${${_var}}" _lib_path) + get_filename_component(_name "${${_var}}" NAME_WE) + file(STRINGS "${${_var}}" _match REGEX "${_name}\\.dll" LIMIT_COUNT 1) + if(NOT _match STREQUAL "") + set(${_var}_TYPE SHARED PARENT_SCOPE) + else() + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) + endif() + return() + endif() +endmacro() + +function(__gtest_determine_library_type _var) + if(WIN32) + # For now, at least, only Windows really needs to know the library type + __gtest_determine_windows_library_type(${_var}) + __gtest_determine_windows_library_type(${_var}_RELEASE) + __gtest_determine_windows_library_type(${_var}_DEBUG) + endif() + # If we get here, no determination was made from the above checks + set(${_var}_TYPE UNKNOWN PARENT_SCOPE) +endfunction() + +function(__gtest_import_library _target _var _config) + if(_config) + set(_config_suffix "_${_config}") + else() + set(_config_suffix "") + endif() + + set(_lib "${${_var}${_config_suffix}}") + if(EXISTS "${_lib}") + if(_config) + set_property(TARGET ${_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS ${_config}) + endif() + set_target_properties(${_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES${_config_suffix} "CXX") + if(WIN32 AND ${_var}_TYPE STREQUAL SHARED) + set_target_properties(${_target} PROPERTIES + IMPORTED_IMPLIB${_config_suffix} "${_lib}") + else() + set_target_properties(${_target} PROPERTIES + IMPORTED_LOCATION${_config_suffix} "${_lib}") + endif() + endif() +endfunction() + +# + +if(NOT DEFINED GTEST_MSVC_SEARCH) + set(GTEST_MSVC_SEARCH MD) +endif() + +set(_gtest_libpath_suffixes lib) +if(MSVC) + if(GTEST_MSVC_SEARCH STREQUAL "MD") + list(APPEND _gtest_libpath_suffixes + msvc/gtest-md/Debug + msvc/gtest-md/Release + msvc/x64/Debug + msvc/x64/Release + ) + elseif(GTEST_MSVC_SEARCH STREQUAL "MT") + list(APPEND _gtest_libpath_suffixes + msvc/gtest/Debug + msvc/gtest/Release + msvc/x64/Debug + msvc/x64/Release + ) + endif() +endif() + + +find_path(GTEST_INCLUDE_DIR gtest/gtest.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include +) +mark_as_advanced(GTEST_INCLUDE_DIR) + +find_path(GMOCK_INCLUDE_DIR gmock/gmock.h + HINTS + $ENV{GTEST_ROOT}/include + ${GTEST_ROOT}/include +) +mark_as_advanced(GMOCK_INCLUDE_DIR) + +if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") + # The provided /MD project files for Google Test add -md suffixes to the + # library names. + __gtest_find_library(GTEST_LIBRARY gtest-md gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) +else() + __gtest_find_library(GTEST_LIBRARY gtest) + __gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) + __gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) + __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) + + __gtest_find_library(GMOCK_LIBRARY gmock) + __gtest_find_library(GMOCK_LIBRARY_DEBUG gmockd) + __gtest_find_library(GMOCK_MAIN_LIBRARY gmock_main) + __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind) +endif() + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG + GTEST_LIBRARY + GTEST_INCLUDE_DIR + GTEST_MAIN_LIBRARY + GMOCK_LIBRARY + GMOCK_INCLUDE_DIR + GMOCK_MAIN_LIBRARY) + +if(GTEST_FOUND) + set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) + __gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) + __gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) + set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) + + find_package(Threads QUIET) + + if(NOT TARGET GTest::GTest) + __gtest_determine_library_type(GTEST_LIBRARY) + add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GTEST_INCLUDE_DIRS) + set_target_properties(GTest::GTest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}") + endif() + __gtest_import_library(GTest::GTest GTEST_LIBRARY "") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE") + __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG") + endif() + if(NOT TARGET GTest::Main) + __gtest_determine_library_type(GTEST_MAIN_LIBRARY) + add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GTest::Main PROPERTIES + INTERFACE_LINK_LIBRARIES "GTest::GTest") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG") + endif() + + if(NOT TARGET GMock::GMock) + __gtest_determine_library_type(GMOCK_LIBRARY) + add_library(GMock::GMock ${GMOCK_LIBRARY_TYPE} IMPORTED) + if(TARGET Threads::Threads) + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_LINK_LIBRARIES GTest::GTest) + endif() + if(GTEST_LIBRARY_TYPE STREQUAL "SHARED") + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "GMOCK_LINKED_AS_SHARED_LIBRARY=1") + endif() + if(GMOCK_INCLUDE_DIRS) + set_target_properties(GMock::GMock PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIRS}") + endif() + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "") + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "RELEASE") + __gtest_import_library(GMock::GMock GMOCK_LIBRARY "DEBUG") + endif() + if(NOT TARGET GMock::Main) + __gtest_determine_library_type(GMOCK_MAIN_LIBRARY) + add_library(GMock::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED) + set_target_properties(GMock::Main PROPERTIES + INTERFACE_LINK_LIBRARIES GMock::GMock) + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "") + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "RELEASE") + __gtest_import_library(GMock::Main GMOCK_MAIN_LIBRARY "DEBUG") + endif() +endif() diff --git a/cmake/cpplogging-const.cmake b/cmake/cpplogging-const.cmake index f52cc2a..25c2a0b 100644 --- a/cmake/cpplogging-const.cmake +++ b/cmake/cpplogging-const.cmake @@ -1,28 +1,28 @@ # This file contains constant variables that are fixed to this project # Version -Set ( CPPLOGGING_VERSION_MAJOR 1 ) -Set ( CPPLOGGING_VERSION_MINOR 0 ) -Set ( CPPLOGGING_VERSION_PATCH 0 ) -Set ( CPPLOGGING_VERSION_BUILD 0 ) -Set ( CPPLOGGING_VERSION_HASH "" ) -Set ( CPPLOGGING_VERSION_BEHIND 0 ) -Set ( CPPLOGGING_VERSION_DIRTY 0 ) +Set ( CPPLOGGING_VERSION_MAJOR 1 ) +Set ( CPPLOGGING_VERSION_MINOR 0 ) +Set ( CPPLOGGING_VERSION_PATCH 0 ) +Set ( CPPLOGGING_VERSION_BUILD 0 ) +Set ( CPPLOGGING_VERSION_HASH "" ) +Set ( CPPLOGGING_VERSION_BEHIND 0 ) +Set ( CPPLOGGING_VERSION_DIRTY 0 ) # Names -Set ( CPPLOGGING_PROJECT_NAME "cpplogging" ) -Set ( CPPLOGGING_PROJECT_DESCRIPTION "A simple hello world library" ) +Set ( CPPLOGGING_PROJECT_NAME "cpplogging" ) +Set ( CPPLOGGING_PROJECT_DESCRIPTION "C++ logging library" ) # Include generated variables for further usage -Include ( ${CMAKE_CURRENT_LIST_DIR}/cpplogging-var.cmake ) +Include ( ${CMAKE_CURRENT_LIST_DIR}/cpplogging-var.cmake ) # Install directories -Set ( CPPLOGGING_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${CPPLOGGING_NAME}" ) -Set ( CPPLOGGING_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) -Set ( CPPLOGGING_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${CPPLOGGING_NAME}" ) +Set ( CPPLOGGING_INSTALL_DIR_INCLUDE "${CMAKE_INSTALL_INCLUDEDIR}/${CPPLOGGING_NAME}" ) +Set ( CPPLOGGING_INSTALL_DIR_LIB "${CMAKE_INSTALL_LIBDIR}" ) +Set ( CPPLOGGING_INSTALL_DIR_SHARE "${CMAKE_INSTALL_DATAROOTDIR}/${CPPLOGGING_NAME}" ) # C Standard -Set ( CMAKE_C_STANDARD 11 ) -Set ( CMAKE_CXX_STANDARD 17 ) -Set ( CMAKE_C_STANDARD_REQUIRED ON ) -Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) +Set ( CMAKE_C_STANDARD 11 ) +Set ( CMAKE_CXX_STANDARD 17 ) +Set ( CMAKE_C_STANDARD_REQUIRED ON ) +Set ( CMAKE_CXX_STANDARD_REQUIRED ON ) diff --git a/cmake/cpplogging-options.cmake b/cmake/cpplogging-options.cmake index 78bc915..880b93e 100644 --- a/cmake/cpplogging-options.cmake +++ b/cmake/cpplogging-options.cmake @@ -1,23 +1,23 @@ # This file contains options that can be passed to the cmake command -Option ( CPPLOGGING_INSTALL_HEADER - "Install headers of cpplogging." - ON ) -Option ( CPPLOGGING_INSTALL_STATIC - "Install static library of cpplogging." - ON ) -Option ( CPPLOGGING_INSTALL_SHARED - "Install shared library of cpplogging." - ON ) -Option ( CPPLOGGING_INSTALL_DEBUG - "Install the stripped debug informations of cpplogging." - OFF ) -Option ( CPPLOGGING_INSTALL_PACKAGE - "Install the cmake package of cpplogging." - ON ) -Option ( CPPLOGGING_NO_STRIP - "Do not strip debug symbols from binary." - OFF ) -Option ( CPPLOGGING_USE_GIT_VERSION - "Read the git tags to get the version of cpplogging" - ON ) +Option ( CPPLOGGING_INSTALL_HEADER + "Install headers of cpplogging." + ON ) +Option ( CPPLOGGING_INSTALL_STATIC + "Install static library of cpplogging." + ON ) +Option ( CPPLOGGING_INSTALL_SHARED + "Install shared library of cpplogging." + ON ) +Option ( CPPLOGGING_INSTALL_DEBUG + "Install the stripped debug informations of cpplogging." + OFF ) +Option ( CPPLOGGING_INSTALL_PACKAGE + "Install the cmake package of cpplogging." + ON ) +Option ( CPPLOGGING_NO_STRIP + "Do not strip debug symbols from binary." + OFF ) +Option ( CPPLOGGING_USE_GIT_VERSION + "Read the git tags to get the version of cpplogging" + ON ) diff --git a/cmake/cpplogging-var.cmake b/cmake/cpplogging-var.cmake index 8e3f806..64fb0bb 100644 --- a/cmake/cpplogging-var.cmake +++ b/cmake/cpplogging-var.cmake @@ -1,26 +1,32 @@ # This file contains generated variables that are needed for the project # Git Version -If ( CPPLOGGING_USE_GIT_VERSION ) - Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) - If ( HAS_GIT_HELPER ) - GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. - CPPLOGGING_VERSION_MAJOR - CPPLOGGING_VERSION_MINOR - CPPLOGGING_VERSION_PATCH - CPPLOGGING_VERSION_BUILD - CPPLOGGING_VERSION_HASH - CPPLOGGING_VERSION_BEHIND - CPPLOGGING_VERSION_DIRTY ) - EndIf ( ) -EndIf ( ) +If ( CPPLOGGING_USE_GIT_VERSION ) + Include ( git_helper OPTIONAL RESULT_VARIABLE HAS_GIT_HELPER ) + If ( HAS_GIT_HELPER ) + GitGetVersion ( ${CMAKE_CURRENT_LIST_DIR}/.. + CPPLOGGING_VERSION_MAJOR + CPPLOGGING_VERSION_MINOR + CPPLOGGING_VERSION_PATCH + CPPLOGGING_VERSION_BUILD + CPPLOGGING_VERSION_HASH + CPPLOGGING_VERSION_BEHIND + CPPLOGGING_VERSION_DIRTY ) + EndIf ( ) +EndIf ( ) # Strings -Set ( CPPLOGGING_VERSION_SHORT "${CPPLOGGING_VERSION_MAJOR}.${CPPLOGGING_VERSION_MINOR}" ) -Set ( CPPLOGGING_VERSION "${CPPLOGGING_VERSION_SHORT}.${CPPLOGGING_VERSION_PATCH}.${CPPLOGGING_VERSION_BUILD}" ) -Set ( CPPLOGGING_VERSION_COMPLETE "${CPPLOGGING_VERSION}" ) -Set ( CPPLOGGING_NAME "${CPPLOGGING_PROJECT_NAME}-${CPPLOGGING_VERSION_SHORT}" ) -Set ( CPPLOGGING_OUTPUTNAME "${CPPLOGGING_PROJECT_NAME}" ) -If ( CPPLOGGING_VERSION_BEHIND ) - Set ( CPPLOGGING_VERSION_COMPLETE "${CPPLOGGING_VERSION_COMPLETE}+${CPPLOGGING_VERSION_BEHIND}" ) -EndIf ( ) +Set ( CPPLOGGING_VERSION_SHORT + "${CPPLOGGING_VERSION_MAJOR}.${CPPLOGGING_VERSION_MINOR}" ) +Set ( CPPLOGGING_VERSION + "${CPPLOGGING_VERSION_SHORT}.${CPPLOGGING_VERSION_PATCH}.${CPPLOGGING_VERSION_BUILD}" ) +Set ( CPPLOGGING_VERSION_COMPLETE + "${CPPLOGGING_VERSION}" ) +Set ( CPPLOGGING_NAME + "${CPPLOGGING_PROJECT_NAME}-${CPPLOGGING_VERSION_SHORT}" ) +Set ( CPPLOGGING_OUTPUTNAME + "${CPPLOGGING_PROJECT_NAME}" ) +If ( CPPLOGGING_VERSION_BEHIND ) + Set ( CPPLOGGING_VERSION_COMPLETE + "${CPPLOGGING_VERSION_COMPLETE}+${CPPLOGGING_VERSION_BEHIND}" ) +EndIf ( ) diff --git a/cmake/modules b/cmake/modules index ebbae4f..94b9877 160000 --- a/cmake/modules +++ b/cmake/modules @@ -1 +1 @@ -Subproject commit ebbae4fbb42d671331b4c6e9d1d142f41dcacc1b +Subproject commit 94b9877d65e46c9d8169ebc46f163d02e4d9dcf3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fc2ef72..eb57ed2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,121 +1,135 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) -Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) -Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS ) -Find_Package ( cppcore QUIET ) -If ( cppcore ) - Set ( CPPLOGGING_HAS_CPPCORE true ) -EndIf ( ) +Find_Package ( Sanitizers QUIET ) + +Find_Package ( cppcore QUIET ) +If ( cppcore ) + Set ( CPPLOGGING_HAS_CPPCORE true ) +EndIf ( ) + +Find_Package ( nlohmann_json QUIET ) +If ( nlohmann_json_FOUND ) + Set ( CPPLOGGING_HAS_NLOHMANN_JSON true ) +EndIf ( ) -Find_Package ( nlohmann_json QUIET ) -If ( nlohmann_json_FOUND ) - Set ( CPPLOGGING_HAS_NLOHMANN_JSON true ) -EndIf ( ) # Object Library ################################################################################## -Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) -Set ( CPPLOGGING_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) -Set ( CPPLOGGING_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include ) -Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in - ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging/config.h ) -File ( GLOB_RECURSE CPPLOGGING_HEADER_FILES ${CPPLOGGING_INCLUDE_DIR}/*.h ) -File ( GLOB_RECURSE CPPLOGGING_INLINE_FILES ${CPPLOGGING_INCLUDE_DIR}/*.inl ) -File ( GLOB_RECURSE CPPLOGGING_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) -Add_Library ( cpplogging-objects - OBJECT - ${CPPLOGGING_HEADER_FILES} - ${CPPLOGGING_INLINE_FILES} - ${CPPLOGGING_SOURCE_FILES} ) -If ( CPPLOGGING_HAS_NLOHMANN_JSON ) - Target_Link_Libraries ( cpplogging-objects - PRIVATE - nlohmann_json::nlohmann_json ) -EndIf ( ) -Target_Include_Directories ( cpplogging-objects - PUBLIC - $ - $ - $ ) +Set ( CPPLOGGING_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated/include ) +Configure_File ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in + ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging/config.h ) + +Set ( CMAKE_POSITION_INDEPENDENT_CODE ON ) +Set ( CPPLOGGING_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include ) +File ( GLOB_RECURSE CPPLOGGING_HEADER_FILES ${CPPLOGGING_INCLUDE_DIR}/*.h ) +File ( GLOB_RECURSE CPPLOGGING_INLINE_FILES ${CPPLOGGING_INCLUDE_DIR}/*.inl ) +File ( GLOB_RECURSE CPPLOGGING_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) +Add_Library ( cpplogging-objects + OBJECT + ${CPPLOGGING_HEADER_FILES} + ${CPPLOGGING_INLINE_FILES} + ${CPPLOGGING_SOURCE_FILES} ) +If ( CPPLOGGING_HAS_CPPCORE ) + Target_Link_Libraries ( cpplogging-objects + PRIVATE + cppcore::cppcore ) +EndIf ( ) +If ( CPPLOGGING_HAS_NLOHMANN_JSON ) + Target_Link_Libraries ( cpplogging-objects + PRIVATE + nlohmann_json::nlohmann_json ) +EndIf ( ) +Target_Include_Directories ( cpplogging-objects + PUBLIC + $ + $ + $ ) # Static Library ################################################################################## -Add_Library ( cpplogging-static STATIC $ ) -Set_Target_Properties ( cpplogging-static - PROPERTIES - OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}" - VERSION ${CPPLOGGING_VERSION} ) -Target_Include_Directories ( cpplogging-static - PUBLIC - $ - $ - $ ) +Add_Library ( cpplogging-static STATIC $ ) +Set_Target_Properties ( cpplogging-static + PROPERTIES + OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}" + VERSION ${CPPLOGGING_VERSION} ) +Target_Include_Directories ( cpplogging-static + PUBLIC + $ + $ + $ ) # Shared Library ################################################################################## -Add_Library ( cpplogging-shared SHARED $ ) -Set_Target_Properties ( cpplogging-shared - PROPERTIES - OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}" - VERSION ${CPPLOGGING_VERSION} - SOVERSION ${CPPLOGGING_VERSION_SHORT} ) -Target_Include_Directories ( cpplogging-shared - PUBLIC - $ - $ - $ ) +Add_Library ( cpplogging-shared SHARED $ ) +Set_Target_Properties ( cpplogging-shared + PROPERTIES + OUTPUT_NAME "${CPPLOGGING_OUTPUTNAME}" + VERSION ${CPPLOGGING_VERSION} + SOVERSION ${CPPLOGGING_VERSION_SHORT} ) +Target_Include_Directories ( cpplogging-shared + PUBLIC + $ + $ + $ ) # Optimization #################################################################################### +# sanitizers +If ( Sanitizers_FOUND ) + Add_Sanitizers ( cpplogging-objects ) +EndIf ( ) + # pedantic -If ( HAS_PEDANTIC ) - Pedantic_Apply_Flags_Target ( cpplogging-objects ALL ) - Pedantic_Apply_Flags_Target ( cpplogging-static ALL ) - Pedantic_Apply_Flags_Target ( cpplogging-shared ALL ) -EndIf ( ) +If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( cpplogging-objects ALL ) + Pedantic_Apply_Flags_Target ( cpplogging-static ALL ) + Pedantic_Apply_Flags_Target ( cpplogging-shared ALL ) +EndIf ( ) # cotire -If ( HAS_COTIRE ) - Cotire ( cpplogging-objects ) - Cotire ( cpplogging-static ) - Cotire ( cpplogging-shared ) -EndIf ( ) +If ( HAS_COTIRE ) + Cotire ( cpplogging-objects ) + Cotire ( cpplogging-static ) + Cotire ( cpplogging-shared ) +EndIf ( ) # Install ######################################################################################### -Set ( CPPLOGGING_HAS_EXPORT False PARENT_SCOPE ) +Set ( CPPLOGGING_HAS_EXPORT False PARENT_SCOPE ) # Header -If ( CPPLOGGING_INSTALL_HEADER ) - Install ( DIRECTORY ${CPPLOGGING_INCLUDE_DIR}/cpplogging - DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} ) - Install ( DIRECTORY ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging - DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} ) -EndIf ( ) +If ( CPPLOGGING_INSTALL_HEADER ) + Install ( DIRECTORY ${CPPLOGGING_INCLUDE_DIR}/cpplogging + DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} ) + Install ( DIRECTORY ${CPPLOGGING_GENERATED_INCLUDE_DIR}/cpplogging + DESTINATION ${CPPLOGGING_INSTALL_DIR_INCLUDE} ) +EndIf ( ) # Static -If ( CPPLOGGING_INSTALL_STATIC ) - Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE ) - Install ( TARGETS cpplogging-static - EXPORT cpplogging - DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) -EndIf ( ) +If ( CPPLOGGING_INSTALL_STATIC ) + Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE ) + Install ( TARGETS cpplogging-static + EXPORT cpplogging + DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) +EndIf ( ) # Shared -If ( CPPLOGGING_INSTALL_SHARED ) - Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE ) - Install ( TARGETS cpplogging-shared - EXPORT cpplogging - DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) -EndIf ( ) +If ( CPPLOGGING_INSTALL_SHARED ) + Set ( CPPLOGGING_HAS_EXPORT True PARENT_SCOPE ) + Install ( TARGETS cpplogging-shared + EXPORT cpplogging + DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) +EndIf ( ) # Debug -If ( HAS_STRIP_SYMBOLS AND NOT CPPLOGGING_NO_STRIP ) - Strip_Symbols ( cpplogging-shared CPPLOGGING_DBG_FILE ) - If ( CPPLOGGING_INSTALL_DEBUG ) - Install ( FILES ${CPPLOGGING_DBG_FILE} - DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) - EndIf ( ) -EndIf ( ) +If ( HAS_STRIP_SYMBOLS AND NOT CPPLOGGING_NO_STRIP ) + Strip_Symbols ( cpplogging-shared CPPLOGGING_DBG_FILE ) + If ( CPPLOGGING_INSTALL_DEBUG ) + Install ( FILES ${CPPLOGGING_DBG_FILE} + DESTINATION ${CPPLOGGING_INSTALL_DIR_LIB} ) + EndIf ( ) +EndIf ( ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index aa7abc8..f5337a4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,52 +1,59 @@ # Initialize ###################################################################################### -Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) -Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) -Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) +Include ( cotire OPTIONAL RESULT_VARIABLE HAS_COTIRE ) +Include ( pedantic OPTIONAL RESULT_VARIABLE HAS_PEDANTIC ) +Include ( cmake_tests OPTIONAL RESULT_VARIABLE HAS_CMAKE_TESTS ) + +Find_Package ( Sanitizers QUIET ) # Test ############################################################################################ -Find_Package ( GTest ) -If ( NOT "${GTest_FOUND}" ) - Return ( ) -EndIf ( ) +Find_Package ( GTest ) +If ( NOT "${GTest_FOUND}" ) + Return ( ) +EndIf ( ) -File ( GLOB_RECURSE CPPLOGGING_TEST_HEADER_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) -File ( GLOB_RECURSE CPPLOGGING_TEST_INLINE_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) -File ( GLOB_RECURSE CPPLOGGING_TEST_SOURCE_FILES - RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) +File ( GLOB_RECURSE CPPLOGGING_TEST_HEADER_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.h ) +File ( GLOB_RECURSE CPPLOGGING_TEST_INLINE_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/*.inl ) +File ( GLOB_RECURSE CPPLOGGING_TEST_SOURCE_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ) -ForEach ( FILE IN LISTS CPPLOGGING_TEST_SOURCE_FILES ) +ForEach ( FILE IN LISTS CPPLOGGING_TEST_SOURCE_FILES ) # add test - Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) - Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) - Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) - String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) - String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) - String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) - Set ( TEST_NAME "test-${TEST_NAME}" ) - Add_Executable ( ${TEST_NAME} - EXCLUDE_FROM_ALL - ${CPPLOGGING_TEST_HEADER_FILES} - ${CPPLOGGING_TEST_INLINE_FILES} - ${FILE} ) - Target_Link_Libraries ( ${TEST_NAME} - PUBLIC - cpplogging-objects - GMock::Main ) + Get_Filename_Component ( TEST_DIR ${FILE} DIRECTORY ) + Get_Filename_Component ( TEST_NAME ${FILE} NAME_WE ) + Set ( TEST_NAME "${TEST_DIR}/${TEST_NAME}" ) + String ( REPLACE "\\" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "/" "-" TEST_NAME "${TEST_NAME}" ) + String ( REPLACE "_" "-" TEST_NAME "${TEST_NAME}" ) + Set ( TEST_NAME "test-${TEST_NAME}" ) + Add_Executable ( ${TEST_NAME} + EXCLUDE_FROM_ALL + ${CPPLOGGING_TEST_HEADER_FILES} + ${CPPLOGGING_TEST_INLINE_FILES} + ${FILE} ) + Target_Link_Libraries ( ${TEST_NAME} + PUBLIC + cpplogging-objects + GMock::Main ) + + # Sanitizers + If ( Sanitizers_FOUND ) + Add_Sanitizers ( ${TEST_NAME} ) + EndIf ( ) # pedantic - If ( HAS_PEDANTIC ) - Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) - EndIf ( ) + If ( HAS_PEDANTIC ) + Pedantic_Apply_Flags_Target ( ${TEST_NAME} ALL ) + EndIf ( ) # test - If ( HAS_CMAKE_TESTS ) - Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP cpplogging ) - Else ( ) - Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) - EndIf ( ) -EndForEach ( ) + If ( HAS_CMAKE_TESTS ) + Add_CMake_Test ( NAME ${TEST_NAME} TARGET ${TEST_NAME} GROUP cpplogging ) + Else ( ) + Add_Test ( NAME ${TEST_NAME} COMMAND ${TEST_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) + EndIf ( ) +EndForEach ( )