diff options
author | NicolasIRAGNE <nicoragne@hotmail.fr> | 2022-01-07 01:10:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-07 01:10:44 +0300 |
commit | f253e9664d6a0628fa779c858a05a5aaf05e9cb4 (patch) | |
tree | 22d60b52f6aec50fd4aa9c77bb18731e6f67a1ed | |
parent | b48095ee99aff048dc4760dd644b848bc1e6f0c3 (diff) |
Make the imported target installable (#7)
Import from the original nlohmann repository the parts about installing the library.
Co-authored-by: Nicolas IRAGNE <nicolas.iragne@alyce.fr>
Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
-rw-r--r-- | CMakeLists.txt | 65 | ||||
-rw-r--r-- | cmake/config.cmake.in | 15 | ||||
-rw-r--r-- | cmake/nlohmann_jsonConfigVersion.cmake.in | 20 |
3 files changed, 99 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d6a605..a30b398 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,9 @@ project(nlohmann_json LANGUAGES CXX) add_library(nlohmann_json INTERFACE) add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json) target_include_directories(nlohmann_json - INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include + INTERFACE + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include/nlohmann> ) if (${CMAKE_VERSION} VERSION_LESS "3.8.0") @@ -12,3 +14,64 @@ if (${CMAKE_VERSION} VERSION_LESS "3.8.0") else() target_compile_features(nlohmann_json INTERFACE cxx_std_11) endif() + +include(GNUInstallDirs) + +set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME}) +set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE INTERNAL "") +set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}") +set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in") +set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}") +set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake") +set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake") +set(NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Targets.cmake") + +## +## INSTALL +## install header files, generate and install cmake config files for find_package() +## +include(CMakePackageConfigHelpers) + +# use a custom package version config file instead of +# write_basic_package_version_file to ensure that it's architecture-independent +# https://github.com/nlohmann/json/issues/1697 +configure_file( + "cmake/nlohmann_jsonConfigVersion.cmake.in" + ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} + @ONLY +) + +configure_file( + ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} + ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} + @ONLY +) + +install( + DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/nlohmann + DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} +) + +install( + FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} + DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} +) + +export( + TARGETS ${NLOHMANN_JSON_TARGET_NAME} + NAMESPACE ${PROJECT_NAME}:: + FILE ${NLOHMANN_JSON_CMAKE_PROJECT_TARGETS_FILE} +) + +install( + TARGETS ${NLOHMANN_JSON_TARGET_NAME} + EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} + INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR} +) + +install( + EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME} + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR} +) diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in new file mode 100644 index 0000000..824412d --- /dev/null +++ b/cmake/config.cmake.in @@ -0,0 +1,15 @@ +include(FindPackageHandleStandardArgs) +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) +find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE) + +if(NOT TARGET @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@) + include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake") + if((NOT TARGET @NLOHMANN_JSON_TARGET_NAME@) AND + (NOT @PROJECT_NAME@_FIND_VERSION OR + @PROJECT_NAME@_FIND_VERSION VERSION_LESS 3.2.0)) + add_library(@NLOHMANN_JSON_TARGET_NAME@ INTERFACE IMPORTED) + set_target_properties(@NLOHMANN_JSON_TARGET_NAME@ PROPERTIES + INTERFACE_LINK_LIBRARIES @PROJECT_NAME@::@NLOHMANN_JSON_TARGET_NAME@ + ) + endif() +endif()
\ No newline at end of file diff --git a/cmake/nlohmann_jsonConfigVersion.cmake.in b/cmake/nlohmann_jsonConfigVersion.cmake.in new file mode 100644 index 0000000..38ab828 --- /dev/null +++ b/cmake/nlohmann_jsonConfigVersion.cmake.in @@ -0,0 +1,20 @@ +# This is essentially cmake's BasicConfigVersion-SameMajorVersion.cmake.in but +# without the 32/64-bit check. Since json is a header-only library, it doesn't +# matter if it was built on a different platform than what it is used on (see +# https://github.com/nlohmann/json/issues/1697). +set(PACKAGE_VERSION "@PROJECT_VERSION@") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL "@PROJECT_VERSION_MAJOR@") + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif()
\ No newline at end of file |