diff --git a/CMakeLists.txt b/CMakeLists.txt index a8e2f2ea..57307b15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,15 +29,13 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCH add_compile_options("-Wfatal-errors") endif() -#--------------------------------------------------------------------------------------- -# address sanitizers check -#--------------------------------------------------------------------------------------- -include(cmake/sanitizers.cmake) + #--------------------------------------------------------------------------------------- # spdlog target #--------------------------------------------------------------------------------------- + # Check if spdlog is being used directly or via add_subdirectory, but allow overriding if (NOT DEFINED SPDLOG_MASTER_PROJECT) if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) @@ -47,10 +45,9 @@ else() endif() endif () -option(BUILD_SHARED_LIBS "Global flag to cause add_library to create shared libraries if on." ON) option(SPDLOG_BUILD_EXAMPLES "Build examples" ${SPDLOG_MASTER_PROJECT}) option(SPDLOG_BUILD_BENCH "Build benchmarks (Requires https://github.com/google/benchmark.git to be installed)" OFF) -option(SPDLOG_BUILD_TESTS "Build tests" ON) +option(SPDLOG_BUILD_TESTS "Build tests" OFF) option(SPDLOG_FMT_EXTERNAL "Use external fmt library instead of bundled" OFF) option(SPDLOG_INSTALL "Generate the install target." ${SPDLOG_MASTER_PROJECT}) @@ -60,11 +57,12 @@ find_package(Threads REQUIRED) # Build library add_library(spdlog src/spdlog.cpp) -target_compile_definitions(spdlog PUBLIC SPDLOG_COMPILED_LIB ) +target_compile_definitions(spdlog PUBLIC SPDLOG_COMPILED_LIB) target_include_directories(spdlog PUBLIC "$" "$" ) + target_link_libraries(spdlog PUBLIC Threads::Threads) # Header only @@ -73,6 +71,16 @@ target_include_directories(spdlog_header_only INTERFACE "${CMAKE_CURRENT_LIST_DI target_link_libraries(spdlog_header_only INTERFACE Threads::Threads) +#--------------------------------------------------------------------------------------- +# address sanitizers check +#--------------------------------------------------------------------------------------- +if(SPDLOG_MASTER_PROJECT) + include(cmake/sanitizers.cmake) +endif() + +#--------------------------------------------------------------------------------------- +# use fmt package if using exertnal fmt +#--------------------------------------------------------------------------------------- if(SPDLOG_FMT_EXTERNAL) if (NOT TARGET fmt::fmt) find_package(fmt REQUIRED) @@ -85,6 +93,9 @@ if(SPDLOG_FMT_EXTERNAL) target_link_libraries(spdlog_header_only INTERFACE fmt::fmt) endif() +#--------------------------------------------------------------------------------------- +# build binries +#--------------------------------------------------------------------------------------- if(SPDLOG_BUILD_EXAMPLES) add_subdirectory(example) endif() @@ -98,27 +109,49 @@ if(SPDLOG_BUILD_BENCH) add_subdirectory(bench) endif() +#--------------------------------------------------------------------------------------- +# install +#--------------------------------------------------------------------------------------- if (SPDLOG_INSTALL) + set(project_config_in "${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake.in") + set(project_config_out "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake") + set(config_targets_file "${PROJECT_NAME}ConfigTargets.cmake") + set(version_config_file "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake") + set(dest_dir lib/${PROJECT_NAME}/cmake) + #--------------------------------------------------------------------------------------- - # install + # lib in include files #--------------------------------------------------------------------------------------- install(DIRECTORY include/ DESTINATION include) install(TARGETS spdlog EXPORT ${PROJECT_NAME} DESTINATION lib) + + #--------------------------------------------------------------------------------------- + # package and version files + #--------------------------------------------------------------------------------------- install(EXPORT ${PROJECT_NAME} - DESTINATION lib/${PROJECT_NAME}/cmake - NAMESPACE ${PROJECT_NAME}:: - FILE ${PROJECT_NAME}Config.cmake - ) + DESTINATION ${dest_dir} + NAMESPACE ${PROJECT_NAME}:: + FILE ${config_targets_file}) + + include(CMakePackageConfigHelpers) + configure_file("${project_config_in}" "${project_config_out}" @ONLY) + write_basic_package_version_file("${version_config_file}" COMPATIBILITY SameMajorVersion) + install(FILES + "${project_config_out}" + "${version_config_file}" DESTINATION "${dest_dir}") #--------------------------------------------------------------------------------------- # Support creation of installable packages #--------------------------------------------------------------------------------------- - include(SpdlogCPack.cmake) + include(cmake/SpdlogCPack.cmake) + + #--------------------------------------------------------------------------------------- + # register project in CMake user registry - disabled by default since the + # installed/packaged version of the project is preferred. + #--------------------------------------------------------------------------------------- + option(CMAKE_EXPORT_NO_PACKAGE_REGISTRY "Disable registration of CMake's build directory." ON) + export(PACKAGE ${PROJECT_NAME}) + endif () -#--------------------------------------------------------------------------------------- -# register project in CMake user registry - disabled by default since the -# installed/packaged version of the project is preferred. -#--------------------------------------------------------------------------------------- -option(CMAKE_EXPORT_NO_PACKAGE_REGISTRY "Disable registration of CMake's build directory." ON) -export(PACKAGE ${PROJECT_NAME}) + diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in deleted file mode 100644 index 0b0fd119..00000000 --- a/cmake/Config.cmake.in +++ /dev/null @@ -1,31 +0,0 @@ -# *************************************************************************/ -# * Copyright (c) 2015 Ruslan Baratov. */ -# * */ -# * Permission is hereby granted, free of charge, to any person obtaining */ -# * a copy of this software and associated documentation files (the */ -# * "Software"), to deal in the Software without restriction, including */ -# * without limitation the rights to use, copy, modify, merge, publish, */ -# * distribute, sublicense, and/or sell copies of the Software, and to */ -# * permit persons to whom the Software is furnished to do so, subject to */ -# * the following conditions: */ -# * */ -# * The above copyright notice and this permission notice shall be */ -# * included in all copies or substantial portions of the Software. */ -# * */ -# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -# * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -# * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -# * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -# * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -# * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -# * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -# *************************************************************************/ - -set(SPDLOG_FMT_EXTERNAL @SPDLOG_FMT_EXTERNAL@) - -include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake") - -if(SPDLOG_FMT_EXTERNAL) - include(CMakeFindDependencyMacro) - find_dependency(fmt CONFIG) -endif() diff --git a/SpdlogCPack.cmake b/cmake/SpdlogCPack.cmake similarity index 100% rename from SpdlogCPack.cmake rename to cmake/SpdlogCPack.cmake diff --git a/cmake/spdlog.pc.in b/cmake/spdlog.pc.in deleted file mode 100644 index 262248a7..00000000 --- a/cmake/spdlog.pc.in +++ /dev/null @@ -1,6 +0,0 @@ -prefix=@CMAKE_INSTALL_PREFIX@ -includedir=${prefix}/include - -Name: @PROJECT_NAME@ -Description: Super fast C++ logging library. -Version: @PROJECT_VERSION@ diff --git a/cmake/spdlogConfig.cmake.in b/cmake/spdlogConfig.cmake.in new file mode 100644 index 00000000..43ffcf7e --- /dev/null +++ b/cmake/spdlogConfig.cmake.in @@ -0,0 +1,15 @@ +# Copyright(c) 2019 spdlog authors +# Distributed under the MIT License (http://opensource.org/licenses/MIT) + +find_package(Threads REQUIRED) + +set(SPDLOG_FMT_EXTERNAL @SPDLOG_FMT_EXTERNAL@) +set(config_targets_file @config_targets_file@) + +if(SPDLOG_FMT_EXTERNAL) + include(CMakeFindDependencyMacro) + find_dependency(fmt CONFIG) +endif() + + +include("${CMAKE_CURRENT_LIST_DIR}/${config_targets_file}") diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 033e7af6..6907b7ae 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -29,12 +29,12 @@ if(TARGET spdlog) # then add an alias. This allows us to use the same "spdlog::spdlog" # below that a user would use (with the namespace) add_library(spdlog::spdlog ALIAS spdlog) + find_package(Threads REQUIRED) else() # Stand-alone build find_package(spdlog REQUIRED) endif() -find_package(Threads REQUIRED) # Example of using pre-compiled library add_executable(example example.cpp) @@ -50,7 +50,7 @@ get_target_property(SPDLOG_INCLUDE_DIRS spdlog::spdlog INTERFACE_INCLUDE_DIRECTO target_include_directories(example_header_only PRIVATE ${SPDLOG_INCLUDE_DIRS}) target_link_libraries(example_header_only Threads::Threads) if(CMAKE_SYSTEM_NAME STREQUAL "Android") - target_link_libraries(example_header_only log) + target_link_libraries(example_header_only log Threads::Threads) endif () add_executable(multisink multisink.cpp) diff --git a/example/logs/.gitignore b/example/logs/.gitignore deleted file mode 100644 index 20325135..00000000 --- a/example/logs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.txt