From 5504630e46c7f6cae9ddcac54f6c89ce9a536acb Mon Sep 17 00:00:00 2001 From: Adrian Antonana Date: Thu, 24 Aug 2017 16:55:06 +0200 Subject: [PATCH 1/4] cmake: improve CMakeLists.txt * support CMake user registry package registration * use GNUInstallDirs to set installation firectories * use spdlog namespace in both build and install interfaces --- CMakeLists.txt | 186 ++++++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 89 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ff75bd27..a02384e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,91 +1,99 @@ -# -# Copyright(c) 2015 Ruslan Baratov. -# Distributed under the MIT License (http://opensource.org/licenses/MIT) -# - -cmake_minimum_required(VERSION 3.1) -project(spdlog VERSION 1.0.0) -include(CTest) -include(CMakeDependentOption) - -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}") -endif() - -add_library(spdlog INTERFACE) - -option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF) -cmake_dependent_option(SPDLOG_BUILD_TESTING - "Build spdlog tests" ON - "BUILD_TESTING" OFF -) - -target_include_directories( - spdlog - INTERFACE - "$" - "$" -) - -set(HEADER_BASE "${CMAKE_CURRENT_SOURCE_DIR}/include") - -if(SPDLOG_BUILD_EXAMPLES) - add_subdirectory(example) -endif() - -if(SPDLOG_BUILD_TESTING) - add_subdirectory(tests) -endif() - ### Install ### -# * https://github.com/forexample/package-example -set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") - -set(config_install_dir "lib/cmake/${PROJECT_NAME}") -set(include_install_dir "include") -set(pkgconfig_install_dir "lib/pkgconfig") - -set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") -set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") -set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc") -set(targets_export_name "${PROJECT_NAME}Targets") -set(namespace "${PROJECT_NAME}::") - -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - "${version_config}" COMPATIBILITY SameMajorVersion -) - # Note: use 'targets_export_name' -configure_file("cmake/Config.cmake.in" "${project_config}" @ONLY) -configure_file("cmake/spdlog.pc.in" "${pkg_config}" @ONLY) - -install( - TARGETS spdlog - EXPORT "${targets_export_name}" - INCLUDES DESTINATION "${include_install_dir}" -) - -install(DIRECTORY "include/spdlog" DESTINATION "${include_install_dir}") - -install( - FILES "${project_config}" "${version_config}" - DESTINATION "${config_install_dir}" -) - -install( - FILES "${pkg_config}" - DESTINATION "${pkgconfig_install_dir}" -) - -install( - EXPORT "${targets_export_name}" - NAMESPACE "${namespace}" - DESTINATION "${config_install_dir}" -) - -file(GLOB_RECURSE spdlog_include_SRCS "${HEADER_BASE}/*.h") -add_custom_target(spdlog_headers_for_ide SOURCES ${spdlog_include_SRCS}) +# +# Copyright(c) 2015 Ruslan Baratov. +# Distributed under the MIT License (http://opensource.org/licenses/MIT) +# + +cmake_minimum_required(VERSION 3.1) +project(spdlog VERSION 1.0.0) +include(CTest) +include(CMakeDependentOption) +include(GNUInstallDirs) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}") +endif() + +add_library(spdlog INTERFACE) + +option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF) +cmake_dependent_option(SPDLOG_BUILD_TESTING + "Build spdlog tests" ON + "BUILD_TESTING" OFF +) + +target_include_directories( + spdlog + INTERFACE + "$" + "$" +) + +set(HEADER_BASE "${CMAKE_CURRENT_SOURCE_DIR}/include") + +if(SPDLOG_BUILD_EXAMPLES) + add_subdirectory(example) +endif() + +if(SPDLOG_BUILD_TESTING) + add_subdirectory(tests) +endif() + +set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") +set(include_install_dir "${CMAKE_INSTALL_INCLUDEDIR}") +set(pkgconfig_install_dir "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +set(version_config "${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake") +set(project_config "${PROJECT_NAME}Config.cmake") +set(pkg_config "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc") +set(targets_export_name "${PROJECT_NAME}Targets") +set(namespace "${PROJECT_NAME}::") + +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${version_config}" COMPATIBILITY SameMajorVersion +) + +configure_file("cmake/spdlog.pc.in" "${pkg_config}" @ONLY) + +install( + TARGETS spdlog + EXPORT "${targets_export_name}" + INCLUDES DESTINATION "${include_install_dir}" +) + +install( + DIRECTORY "${HEADER_BASE}/${PROJECT_NAME}" + DESTINATION "${include_install_dir}" +) + +install( + FILES "${version_config}" + DESTINATION "${config_install_dir}" +) + +install( + FILES "${pkg_config}" + DESTINATION "${pkgconfig_install_dir}" +) + +install( + EXPORT "${targets_export_name}" + NAMESPACE "${namespace}" + DESTINATION "${config_install_dir}" + FILE ${project_config} +) + +export( + EXPORT ${targets_export_name} + NAMESPACE "${namespace}" + FILE ${project_config} +) + +export(PACKAGE ${PROJECT_NAME}) + +file(GLOB_RECURSE spdlog_include_SRCS "${HEADER_BASE}/*.h") +add_custom_target(spdlog_headers_for_ide SOURCES ${spdlog_include_SRCS}) From ab25004242c50ec5dbfae545a70931e499809b88 Mon Sep 17 00:00:00 2001 From: Adrian Antonana Date: Thu, 24 Aug 2017 16:55:55 +0200 Subject: [PATCH 2/4] cmake: add some commend blocks to clearly differentiate CMakeLists file sections --- CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a02384e6..64ed8e3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,9 @@ include(CTest) include(CMakeDependentOption) include(GNUInstallDirs) +#--------------------------------------------------------------------------------------- +# compiler config +#--------------------------------------------------------------------------------------- set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -18,6 +21,9 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" MATCH set(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}") endif() +#--------------------------------------------------------------------------------------- +# spdlog target +#--------------------------------------------------------------------------------------- add_library(spdlog INTERFACE) option(SPDLOG_BUILD_EXAMPLES "Build examples" OFF) @@ -43,6 +49,9 @@ if(SPDLOG_BUILD_TESTING) add_subdirectory(tests) endif() +#--------------------------------------------------------------------------------------- +# Install/export targets and files +#--------------------------------------------------------------------------------------- set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") set(include_install_dir "${CMAKE_INSTALL_INCLUDEDIR}") set(pkgconfig_install_dir "${CMAKE_INSTALL_LIBDIR}/pkgconfig") From fe2fa4087dda05a681d92b9e21cf60a69b0c299b Mon Sep 17 00:00:00 2001 From: Adrian Antonana Date: Thu, 24 Aug 2017 16:57:07 +0200 Subject: [PATCH 3/4] cmake: add some small comments to point out whats being done --- CMakeLists.txt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 64ed8e3e..3a4047df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,3 @@ -### Install ### -# Note: use 'targets_export_name' # # Copyright(c) 2015 Ruslan Baratov. # Distributed under the MIT License (http://opensource.org/licenses/MIT) @@ -52,6 +50,7 @@ endif() #--------------------------------------------------------------------------------------- # Install/export targets and files #--------------------------------------------------------------------------------------- +# set files and directories set(config_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") set(include_install_dir "${CMAKE_INSTALL_INCLUDEDIR}") set(pkgconfig_install_dir "${CMAKE_INSTALL_LIBDIR}/pkgconfig") @@ -61,34 +60,41 @@ set(pkg_config "${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc") set(targets_export_name "${PROJECT_NAME}Targets") set(namespace "${PROJECT_NAME}::") +# generate package version file include(CMakePackageConfigHelpers) write_basic_package_version_file( "${version_config}" COMPATIBILITY SameMajorVersion ) +# configure pkg config file configure_file("cmake/spdlog.pc.in" "${pkg_config}" @ONLY) +# install targets install( TARGETS spdlog EXPORT "${targets_export_name}" INCLUDES DESTINATION "${include_install_dir}" ) +# install headers install( DIRECTORY "${HEADER_BASE}/${PROJECT_NAME}" DESTINATION "${include_install_dir}" ) +# install project version file install( FILES "${version_config}" DESTINATION "${config_install_dir}" ) +# install pkg config file install( FILES "${pkg_config}" DESTINATION "${pkgconfig_install_dir}" ) +# install project config file install( EXPORT "${targets_export_name}" NAMESPACE "${namespace}" @@ -96,12 +102,14 @@ install( FILE ${project_config} ) +# export build directory config file export( EXPORT ${targets_export_name} NAMESPACE "${namespace}" FILE ${project_config} ) +# register project in CMake user registry export(PACKAGE ${PROJECT_NAME}) file(GLOB_RECURSE spdlog_include_SRCS "${HEADER_BASE}/*.h") From e6b9fa577de852fd7b78a0a3d2837875e4425990 Mon Sep 17 00:00:00 2001 From: Adrian Antonana Date: Fri, 25 Aug 2017 09:12:15 +0200 Subject: [PATCH 4/4] cmake: set project version to 0.14.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a4047df..ad8062ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # cmake_minimum_required(VERSION 3.1) -project(spdlog VERSION 1.0.0) +project(spdlog VERSION 0.14.0) include(CTest) include(CMakeDependentOption) include(GNUInstallDirs)