diff options
author | Niall Douglas (s [underscore] sourceforge {at} nedprod [dot] com) <spamtrap@nedprod.com> | 2019-10-04 15:41:41 +0300 |
---|---|---|
committer | Niall Douglas (s [underscore] sourceforge {at} nedprod [dot] com) <spamtrap@nedprod.com> | 2019-10-04 15:41:41 +0300 |
commit | 2a6d4d320ee3df3921d6fd3562f0fc593b1823f3 (patch) | |
tree | 7b6b1227f3491c1ed88b7fdd863212902ff4d6e9 | |
parent | d6b8e9a544792518613d98668277be29dc322274 (diff) |
Implement cmake install support.
-rw-r--r-- | CMakeLists.txt | 99 | ||||
-rw-r--r-- | FixupInstall.cmake.in | 6 | ||||
-rw-r--r-- | ProjectConfig.cmake.in | 4 | ||||
-rw-r--r-- | include/ntkernel-error-category/config.hpp (renamed from include/config.hpp) | 0 | ||||
-rw-r--r-- | include/ntkernel-error-category/detail/ntkernel-table.ipp (renamed from include/detail/ntkernel-table.ipp) | 0 | ||||
-rw-r--r-- | include/ntkernel-error-category/detail/ntkernel_category_impl.ipp (renamed from include/detail/ntkernel_category_impl.ipp) | 0 | ||||
-rw-r--r-- | include/ntkernel-error-category/ntkernel_category.hpp (renamed from include/ntkernel_category.hpp) | 0 | ||||
-rw-r--r-- | src/ntkernel_category.cpp | 2 | ||||
-rw-r--r-- | test/main.cpp | 2 |
9 files changed, 80 insertions, 33 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bf4ab41..fbfb983 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,10 +2,13 @@ cmake_minimum_required(VERSION 3.1 FATAL_ERROR) project(ntkernel-error-category VERSION 1.0 LANGUAGES CXX) enable_testing() -if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) - set(PROJECT_IS_DEPENDENCY OFF) -else() - set(PROJECT_IS_DEPENDENCY ON) +include(GNUInstallDirs) +if(NOT DEFINED PROJECT_IS_DEPENDENCY) + if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + set(PROJECT_IS_DEPENDENCY OFF) + else() + set(PROJECT_IS_DEPENDENCY ON) + endif() endif() if(WIN32) @@ -18,65 +21,99 @@ if(WIN32) ) endif() -add_library(ntkernel-error-category_dl SHARED "src/ntkernel_category.cpp") -target_compile_features(ntkernel-error-category_dl PUBLIC cxx_std_11) -target_include_directories(ntkernel-error-category_dl INTERFACE "include") -set_target_properties(ntkernel-error-category_dl PROPERTIES +install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/ntkernel-error-category" + DESTINATION "include" +) + +add_library(${PROJECT_NAME}_dl SHARED "src/ntkernel_category.cpp") +target_compile_features(${PROJECT_NAME}_dl PUBLIC cxx_std_11) +target_include_directories(${PROJECT_NAME}_dl PUBLIC + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>" +) +set_target_properties(${PROJECT_NAME}_dl PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) -add_library(ntkernel-error-category::dl ALIAS ntkernel-error-category_dl) -install(FILES ntkernel-error-category_dl} - DESTINATION "lib" +add_library(${PROJECT_NAME}::dl ALIAS ${PROJECT_NAME}_dl) +install(TARGETS ${PROJECT_NAME}_dl + EXPORT ${PROJECT_NAME}Exports + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) -add_library(ntkernel-error-category_sl STATIC "src/ntkernel_category.cpp") -target_compile_features(ntkernel-error-category_sl PUBLIC cxx_std_11) -target_include_directories(ntkernel-error-category_sl INTERFACE "include") -target_compile_definitions(ntkernel-error-category_sl PRIVATE NTKERNEL_ERROR_CATEGORY_STATIC) -set_target_properties(ntkernel-error-category_sl PROPERTIES +add_library(${PROJECT_NAME}_sl STATIC "src/ntkernel_category.cpp") +target_compile_features(${PROJECT_NAME}_sl PUBLIC cxx_std_11) +target_include_directories(${PROJECT_NAME}_sl PUBLIC + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>" +) +target_compile_definitions(${PROJECT_NAME}_sl PRIVATE NTKERNEL_ERROR_CATEGORY_STATIC) +set_target_properties(${PROJECT_NAME}_sl PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) -add_library(ntkernel-error-category::sl ALIAS ntkernel-error-category_sl) -install(FILES ntkernel-error-category_sl} - DESTINATION "lib" +add_library(${PROJECT_NAME}::sl ALIAS ${PROJECT_NAME}_sl) +install(TARGETS ${PROJECT_NAME}_sl + EXPORT ${PROJECT_NAME}Exports + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" ) -add_library(ntkernel-error-category_hl INTERFACE) -target_compile_features(ntkernel-error-category_hl INTERFACE cxx_std_11) -target_include_directories(ntkernel-error-category_hl INTERFACE "include") -target_compile_definitions(ntkernel-error-category_hl INTERFACE +add_library(${PROJECT_NAME}_hl INTERFACE) +target_compile_features(${PROJECT_NAME}_hl INTERFACE cxx_std_11) +target_include_directories(${PROJECT_NAME}_hl INTERFACE + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>" +) +target_compile_definitions(${PROJECT_NAME}_hl INTERFACE NTKERNEL_ERROR_CATEGORY_INLINE NTKERNEL_ERROR_CATEGORY_STATIC ) -add_library(ntkernel-error-category::hl ALIAS ntkernel-error-category_hl) +add_library(${PROJECT_NAME}::hl ALIAS ${PROJECT_NAME}_hl) +install(TARGETS ${PROJECT_NAME}_hl + EXPORT ${PROJECT_NAME}Exports + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) -export( - TARGETS ntkernel-error-category_dl ntkernel-error-category_sl ntkernel-error-category_hl - FILE "NtKernelErrorCategoryTargets.cmake" - EXPORT_LINK_INTERFACE_LIBRARIES +configure_file( + "${CMAKE_CURRENT_LIST_DIR}/ProjectConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + @ONLY +) +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" +) +install(EXPORT ${PROJECT_NAME}Exports + NAMESPACE ${PROJECT_NAME}:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" ) +configure_file( + "${CMAKE_CURRENT_LIST_DIR}/FixupInstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}FixupInstall.cmake" + @ONLY +) +install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}FixupInstall.cmake") + if(NOT PROJECT_IS_DEPENDENCY) add_executable(test-dl "test/main.cpp") - target_link_libraries(test-dl PRIVATE ntkernel-error-category::dl) + target_link_libraries(test-dl PRIVATE ${PROJECT_NAME}::dl) set_target_properties(test-dl PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) add_test(NAME test-dl COMMAND $<TARGET_FILE:test-dl>) add_executable(test-sl "test/main.cpp") - target_link_libraries(test-sl PRIVATE ntkernel-error-category::sl) + target_link_libraries(test-sl PRIVATE ${PROJECT_NAME}::sl) set_target_properties(test-sl PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) add_test(NAME test-sl COMMAND $<TARGET_FILE:test-sl>) add_executable(test-hl "test/main.cpp") - target_link_libraries(test-hl PRIVATE ntkernel-error-category::hl) + target_link_libraries(test-hl PRIVATE ${PROJECT_NAME}::hl) set_target_properties(test-hl PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" ) diff --git a/FixupInstall.cmake.in b/FixupInstall.cmake.in new file mode 100644 index 0000000..c784402 --- /dev/null +++ b/FixupInstall.cmake.in @@ -0,0 +1,6 @@ +file(READ "@CMAKE_BINARY_DIR@/CMakeFiles/Export/lib/cmake/@PROJECT_NAME@/@PROJECT_NAME@Exports.cmake" exportfile1) +string(REGEX REPLACE "[^ :\"(;]+::([^_]+)_(hl|sl|dl)" "\\1::\\2" exportfile2 "${exportfile1}") +if(NOT exportfile1 STREQUAL exportfile2) + file(WRITE "@CMAKE_BINARY_DIR@/CMakeFiles/Export/lib/cmake/@PROJECT_NAME@/@PROJECT_NAME@Exports.cmake" "${exportfile2}") + file(WRITE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/@PROJECT_NAME@/@PROJECT_NAME@Exports.cmake" "${exportfile2}") +endif() diff --git a/ProjectConfig.cmake.in b/ProjectConfig.cmake.in new file mode 100644 index 0000000..1e19007 --- /dev/null +++ b/ProjectConfig.cmake.in @@ -0,0 +1,4 @@ +include(FindPackageHandleStandardArgs) +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) +find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Exports.cmake") diff --git a/include/config.hpp b/include/ntkernel-error-category/config.hpp index be9cfd6..be9cfd6 100644 --- a/include/config.hpp +++ b/include/ntkernel-error-category/config.hpp diff --git a/include/detail/ntkernel-table.ipp b/include/ntkernel-error-category/detail/ntkernel-table.ipp index 7eba580..7eba580 100644 --- a/include/detail/ntkernel-table.ipp +++ b/include/ntkernel-error-category/detail/ntkernel-table.ipp diff --git a/include/detail/ntkernel_category_impl.ipp b/include/ntkernel-error-category/detail/ntkernel_category_impl.ipp index e9a7adf..e9a7adf 100644 --- a/include/detail/ntkernel_category_impl.ipp +++ b/include/ntkernel-error-category/detail/ntkernel_category_impl.ipp diff --git a/include/ntkernel_category.hpp b/include/ntkernel-error-category/ntkernel_category.hpp index 4d6abb8..4d6abb8 100644 --- a/include/ntkernel_category.hpp +++ b/include/ntkernel-error-category/ntkernel_category.hpp diff --git a/src/ntkernel_category.cpp b/src/ntkernel_category.cpp index dcf733b..3e41fdb 100644 --- a/src/ntkernel_category.cpp +++ b/src/ntkernel_category.cpp @@ -23,4 +23,4 @@ http://www.boost.org/LICENSE_1_0.txt) */ #define NTKERNEL_CATEGORY_SOURCE -#include "../include/detail/ntkernel_category_impl.ipp" +#include "ntkernel-error-category/detail/ntkernel_category_impl.ipp" diff --git a/test/main.cpp b/test/main.cpp index 101bb31..5916e58 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -22,7 +22,7 @@ Distributed under the Boost Software License, Version 1.0. http://www.boost.org/LICENSE_1_0.txt) */ -#include "ntkernel_category.hpp" +#include "ntkernel-error-category/ntkernel_category.hpp" #include <iostream> #include <string.h> |