Skip to content

Commit 3d67ec4

Browse files
committed
Merge branch 'develop' of https://github.com/nlohmann/json into develop
2 parents 85c7680 + 67fb517 commit 3d67ec4

4 files changed

Lines changed: 361 additions & 104 deletions

File tree

CMakeLists.txt

Lines changed: 66 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,78 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.0.0)
22

3-
# define the project
4-
project(nlohmann_json VERSION 2.1.1 LANGUAGES CXX)
3+
##
4+
## PROJECT
5+
## name and version
6+
##
7+
project(nlohmann_json VERSION 2.1.1)
58

9+
##
10+
## OPTIONS
11+
##
612
option(JSON_BuildTests "Build the unit tests" ON)
713

8-
# define project variables
9-
set(JSON_TARGET_NAME ${PROJECT_NAME})
10-
set(JSON_PACKAGE_NAME ${JSON_TARGET_NAME})
11-
set(JSON_TARGETS_FILENAME "${JSON_PACKAGE_NAME}Targets.cmake")
12-
set(JSON_CONFIG_FILENAME "${JSON_PACKAGE_NAME}Config.cmake")
13-
set(JSON_CONFIGVERSION_FILENAME "${JSON_PACKAGE_NAME}ConfigVersion.cmake")
14-
set(JSON_CONFIG_DESTINATION "cmake")
15-
set(JSON_INCLUDE_DESTINATION "include/nlohmann")
14+
##
15+
## CONFIGURATION
16+
##
17+
set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME})
18+
set(NLOHMANN_JSON_SOURCE_DIR "src/")
19+
set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}")
20+
set(NLOHMANN_JSON_INCLUDE_INSTALL_DIR "include")
21+
set(NLOHMANN_JSON_HEADER_INSTALL_DIR "${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}/nlohmann")
22+
set(NLOHMANN_JSON_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets")
23+
set(NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE "cmake/config.cmake.in")
24+
set(NLOHMANN_JSON_CMAKE_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake_config")
25+
set(NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}ConfigVersion.cmake")
26+
set(NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE "${NLOHMANN_JSON_CMAKE_CONFIG_DIR}/${PROJECT_NAME}Config.cmake")
1627

17-
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
28+
##
29+
## TARGET
30+
## create target and add include path
31+
##
32+
add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
1833

19-
# create and configure the library target
20-
add_library(${JSON_TARGET_NAME} INTERFACE)
21-
target_include_directories(${JSON_TARGET_NAME} INTERFACE
22-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
23-
$<INSTALL_INTERFACE:${JSON_INCLUDE_DESTINATION}>)
24-
25-
# create and configure the unit test target
34+
target_include_directories(
35+
${NLOHMANN_JSON_TARGET_NAME}
36+
INTERFACE $<INSTALL_INTERFACE:include/>
37+
)
38+
39+
##
40+
## TESTS
41+
## create and configure the unit test target
42+
##
2643
if(JSON_BuildTests)
2744
enable_testing()
45+
include_directories(${NLOHMANN_JSON_SOURCE_DIR})
2846
add_subdirectory(test)
2947
endif()
3048

31-
# generate a config and config version file for the package
49+
##
50+
## INSTALL
51+
## install header files, generate and install cmake config files for find_package()
52+
##
3253
include(CMakePackageConfigHelpers)
33-
configure_package_config_file("cmake/config.cmake.in"
34-
"${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
35-
INSTALL_DESTINATION ${JSON_CONFIG_DESTINATION}
36-
PATH_VARS JSON_INCLUDE_DESTINATION)
37-
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
38-
VERSION ${PROJECT_VERSION}
39-
COMPATIBILITY SameMajorVersion)
40-
41-
# export the library target and store build directory in package registry
42-
export(TARGETS ${JSON_TARGET_NAME}
43-
FILE "${CMAKE_CURRENT_BINARY_DIR}/${JSON_TARGETS_FILENAME}")
44-
export(PACKAGE ${JSON_PACKAGE_NAME})
45-
46-
# install library target and config files
47-
install(TARGETS ${JSON_TARGET_NAME}
48-
EXPORT ${JSON_PACKAGE_NAME})
49-
install(FILES "src/json.hpp"
50-
DESTINATION ${JSON_INCLUDE_DESTINATION})
51-
install(EXPORT ${JSON_PACKAGE_NAME}
52-
FILE ${JSON_TARGETS_FILENAME}
53-
DESTINATION ${JSON_CONFIG_DESTINATION})
54-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIG_FILENAME}"
55-
"${CMAKE_CURRENT_BINARY_DIR}/${JSON_CONFIGVERSION_FILENAME}"
56-
DESTINATION ${JSON_CONFIG_DESTINATION})
54+
write_basic_package_version_file(
55+
${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion
56+
)
57+
configure_package_config_file(
58+
${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE}
59+
${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE}
60+
INSTALL_DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
61+
)
62+
install(
63+
DIRECTORY ${NLOHMANN_JSON_SOURCE_DIR}
64+
DESTINATION ${NLOHMANN_JSON_HEADER_INSTALL_DIR}
65+
)
66+
install(
67+
FILES ${NLOHMANN_JSON_CMAKE_PROJECT_CONFIG_FILE} ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE}
68+
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
69+
)
70+
install(
71+
TARGETS ${NLOHMANN_JSON_TARGET_NAME}
72+
EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
73+
INCLUDES DESTINATION ${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}
74+
)
75+
install(
76+
EXPORT ${NLOHMANN_JSON_TARGETS_EXPORT_NAME}
77+
DESTINATION ${NLOHMANN_JSON_CONFIG_INSTALL_DIR}
78+
)

cmake/config.cmake.in

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
@PACKAGE_INIT@
2-
set_and_check(JSON_INCLUDE_DIR "@PACKAGE_JSON_INCLUDE_DESTINATION@")
3-
4-
cmake_policy(PUSH)
5-
cmake_policy(SET CMP0024 OLD)
6-
include(${CMAKE_CURRENT_LIST_DIR}/@JSON_TARGETS_FILENAME@)
7-
cmake_policy(POP)
2+
include("${CMAKE_CURRENT_LIST_DIR}/@NLOHMANN_JSON_TARGETS_EXPORT_NAME@.cmake")
3+
check_required_components("@PROJECT_NAME@")

0 commit comments

Comments
 (0)