Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ArthurSonzogni/nlohmann_json_cmake_fetchcontent.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolasIRAGNE <nicoragne@hotmail.fr>2022-01-07 01:10:44 +0300
committerGitHub <noreply@github.com>2022-01-07 01:10:44 +0300
commitf253e9664d6a0628fa779c858a05a5aaf05e9cb4 (patch)
tree22d60b52f6aec50fd4aa9c77bb18731e6f67a1ed
parentb48095ee99aff048dc4760dd644b848bc1e6f0c3 (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.txt65
-rw-r--r--cmake/config.cmake.in15
-rw-r--r--cmake/nlohmann_jsonConfigVersion.cmake.in20
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