55f93686c Merge branch 'release/3.12.0' 34e46d76d 🔖 set version to 3.12.0 00ecc7ed7 ⬆️ Bump github/codeql-action from 3.28.13 to 3.28.14 (#4726) 4424a0fcc 📝 update documentation (#4723) 11aa5f944 Make std::filesystem::path conversion to/from UTF-8 encoded string explicit (#4631) 79587f896 ⬆️ Bump mkdocs-material from 9.6.10 to 9.6.11 in /docs/mkdocs (#4715) b67f8644e ⬆️ Bump actions/dependency-review-action from 4.5.0 to 4.6.0 (#4716) 71884486d ⬆️ Bump step-security/harden-runner from 2.11.0 to 2.11.1 (#4718) 9ef496738 ⬆️ Bump cpplint from 2.0.0 to 2.0.1 in /cmake/requirements (#4719) 9f40a7b45 ⬆️ Bump mkdocs-material from 9.6.9 to 9.6.10 in /docs/mkdocs (#4711) d41ca94fa Adjust CMake minimal version (#4709) 3a5703931 ⬆️ Bump cppcheck from 1.4.8 to 1.5.0 in /cmake/requirements (#4698) 4d216e0c3 ⬆️ Bump actions/upload-artifact from 4.6.1 to 4.6.2 (#4700) f971dd770 ⬆️ Bump github/codeql-action from 3.28.11 to 3.28.13 (#4707) cd92c09c1 tests: Fix ignored attributes warning during build (#4670) b477d2b95 Suppress clang-analyzer-webkit.NoUncountedMemberChecker (#4701) 11a835df8 ⬆️ Bump cppcheck from 1.4.7 to 1.4.8 in /cmake/requirements (#4697) b592b6f2d ⬆️ Bump mkdocs-material from 9.6.8 to 9.6.9 in /docs/mkdocs (#4695) e2c95baef ⬆️ Bump mkdocs-git-revision-date-localized-plugin (#4689) 7abcb5e9a fixes issue 4691 (#4693) 5474b2227 ⬆️ Bump mkdocs-material from 9.6.5 to 9.6.8 in /docs/mkdocs (#4688) 6e684350b ⬆️ Bump github/codeql-action from 3.28.10 to 3.28.11 (#4683) f506d8acc ⬆️ Bump jinja2 from 3.1.5 to 3.1.6 in /tools/generate_natvis (#4680) 34665ae64 Correct typo in sax_interface.md (#4679) f3dc4684b ⬆️ Bump github/codeql-action from 3.28.9 to 3.28.10 (#4661) 0b938993e ⬆️ Bump lukka/get-cmake from 3.31.5 to 3.31.6 (#4668) 543d8e417 ⬆️ Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#4665) f2e494686 ⬆️ Bump ossf/scorecard-action from 2.4.0 to 2.4.1 (#4664) 8215dbafb ⬆️ Bump mkdocs-material from 9.6.4 to 9.6.5 in /docs/mkdocs (#4659) a3143f5f2 ⬆️ Bump step-security/harden-runner from 2.10.4 to 2.11.0 (#4652) 0b6881a95 Add regression test for #3810 (#4608) a43350c4e Remove wsjcpp package manager (#4623) 8fb5d6f92 Some documentation updates (#4636) 2dc82053d ⬆️ Bump mkdocs-material from 9.5.50 to 9.6.4 in /docs/mkdocs (#4648) bf6b1e2f4 ⬆️ Bump github/codeql-action from 3.28.6 to 3.28.9 (#4646) 606b6347e ⬆️ Bump coverallsapp/github-action from 2.3.4 to 2.3.6 (#4634) c7d949f9f ⬆️ Bump github/codeql-action from 3.28.4 to 3.28.6 (#4635) e90c860d5 Add note on derived return type for value function (#4628) d0789e365 Bump lukka/get-cmake from 3.31.4 to 3.31.5 (#4625) 97dd60c22 Bump github/codeql-action from 3.28.3 to 3.28.4 (#4624) 666d06144 Bump github/codeql-action from 3.28.2 to 3.28.3 (#4620) bf8ccc20e fix compilation issue (#4613) 786c5040e Bump github/codeql-action from 3.28.1 to 3.28.2 (#4617) bd4fea39e Bump actions/stale from 9.0.0 to 9.1.0 (#4616) 8c7dcd3b4 Bump step-security/harden-runner from 2.10.3 to 2.10.4 (#4614) b23cdeac2 Bump mkdocs-material from 9.5.49 to 9.5.50 in /docs/mkdocs (#4615) 1b813519c Add VisionOS support to Swift Package Manager Package.swift definition file (#4611) f06604fce Bump the copyright years (#4606) d23291ba2 use diagnostic positions in exceptions (#4585) 0f9e6ae09 Fix broken links (#4605) 8a882f32e Generate template functions with NLOHMANN_DEFINE_TYPE macros (#4597) bdb8d2b7b Serialize empty tuple into '[]' instead of null (#4594) e72046ef9 Bump step-security/harden-runner from 2.10.2 to 2.10.3 (#4604) 4a0081a1c Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#4603) 52b261421 Bump srvaroa/labeler (#4602) f74e5c6a5 Bump github/codeql-action from 3.27.9 to 3.28.1 (#4601) e25a82461 Bump lukka/get-cmake from 3.31.2 to 3.31.4 (#4600) 26cfec34b Clean up and document project files (#4560) ad2ee1853 Fix coverage job (#4595) 2d42229f4 Support BSON uint64 de/serialization (#4590) 1809b3d80 Add note to Jetbrains support (#4592) 48e7b4c23 BJData Fixes (#4588) 0cb1241d5 Improve Bazel support: Switch to Bzlmod (#4584) 2e50d5b2f BJData optimized binary array type (#4513) git-subtree-dir: external/json git-subtree-split: 55f93686c01528224f448c19128836e7df245f72
226 lines
7.7 KiB
CMake
226 lines
7.7 KiB
CMake
cmake_minimum_required(VERSION 3.5...4.0)
|
|
|
|
##
|
|
## PROJECT
|
|
## name and version
|
|
##
|
|
project(nlohmann_json VERSION 3.12.0 LANGUAGES CXX)
|
|
|
|
##
|
|
## MAIN_PROJECT CHECK
|
|
## determine if nlohmann_json is built as a subproject (using add_subdirectory) or if it is the main project
|
|
##
|
|
set(MAIN_PROJECT OFF)
|
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
set(MAIN_PROJECT ON)
|
|
endif()
|
|
|
|
##
|
|
## INCLUDE
|
|
##
|
|
##
|
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
|
include(ExternalProject)
|
|
|
|
##
|
|
## OPTIONS
|
|
##
|
|
|
|
if (POLICY CMP0077)
|
|
# Allow CMake 3.13+ to override options when using FetchContent / add_subdirectory.
|
|
cmake_policy(SET CMP0077 NEW)
|
|
endif ()
|
|
|
|
# VERSION_GREATER_EQUAL is not available in CMake 3.1
|
|
if(${MAIN_PROJECT} AND (${CMAKE_VERSION} VERSION_EQUAL 3.13 OR ${CMAKE_VERSION} VERSION_GREATER 3.13))
|
|
set(JSON_BuildTests_INIT ON)
|
|
else()
|
|
set(JSON_BuildTests_INIT OFF)
|
|
endif()
|
|
option(JSON_BuildTests "Build the unit tests when BUILD_TESTING is enabled." ${JSON_BuildTests_INIT})
|
|
option(JSON_CI "Enable CI build targets." OFF)
|
|
option(JSON_Diagnostics "Use extended diagnostic messages." OFF)
|
|
option(JSON_Diagnostic_Positions "Enable diagnostic positions." OFF)
|
|
option(JSON_GlobalUDLs "Place user-defined string literals in the global namespace." ON)
|
|
option(JSON_ImplicitConversions "Enable implicit conversions." ON)
|
|
option(JSON_DisableEnumSerialization "Disable default integer enum serialization." OFF)
|
|
option(JSON_LegacyDiscardedValueComparison "Enable legacy discarded value comparison." OFF)
|
|
option(JSON_Install "Install CMake targets during install step." ${MAIN_PROJECT})
|
|
option(JSON_MultipleHeaders "Use non-amalgamated version of the library." ON)
|
|
option(JSON_SystemInclude "Include as system headers (skip for clang-tidy)." OFF)
|
|
|
|
if (JSON_CI)
|
|
include(ci)
|
|
endif ()
|
|
|
|
##
|
|
## CONFIGURATION
|
|
##
|
|
include(GNUInstallDirs)
|
|
|
|
if (NOT DEFINED NLOHMANN_JSON_TARGET_NAME)
|
|
# Allow overriding the target name when using FetchContent / add_subdirectory.
|
|
set(NLOHMANN_JSON_TARGET_NAME ${PROJECT_NAME})
|
|
endif()
|
|
|
|
set(NLOHMANN_JSON_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/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")
|
|
set(NLOHMANN_JSON_PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig")
|
|
|
|
if (JSON_MultipleHeaders)
|
|
set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/include/")
|
|
message(STATUS "Using the multi-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}")
|
|
else()
|
|
set(NLOHMANN_JSON_INCLUDE_BUILD_DIR "${PROJECT_SOURCE_DIR}/single_include/")
|
|
message(STATUS "Using the single-header code from ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}")
|
|
endif()
|
|
|
|
if (NOT JSON_ImplicitConversions)
|
|
message(STATUS "Implicit conversions are disabled (JSON_USE_IMPLICIT_CONVERSIONS=0)")
|
|
endif()
|
|
|
|
if (JSON_DisableEnumSerialization)
|
|
message(STATUS "Enum integer serialization is disabled (JSON_DISABLE_ENUM_SERIALIZATION=0)")
|
|
endif()
|
|
|
|
if (JSON_LegacyDiscardedValueComparison)
|
|
message(STATUS "Legacy discarded value comparison enabled (JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1)")
|
|
endif()
|
|
|
|
if (JSON_Diagnostics)
|
|
message(STATUS "Diagnostics enabled (JSON_DIAGNOSTICS=1)")
|
|
endif()
|
|
|
|
if (JSON_Diagnostic_Positions)
|
|
message(STATUS "Diagnostic positions enabled (JSON_DIAGNOSTIC_POSITIONS=1)")
|
|
endif()
|
|
|
|
if (NOT JSON_GlobalUDLs)
|
|
message(STATUS "User-defined string literals are not put in the global namespace (JSON_USE_GLOBAL_UDLS=0)")
|
|
endif()
|
|
|
|
if (JSON_SystemInclude)
|
|
set(NLOHMANN_JSON_SYSTEM_INCLUDE "SYSTEM")
|
|
endif()
|
|
|
|
##
|
|
## TARGET
|
|
## create target and add include path
|
|
##
|
|
add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
|
|
add_library(${PROJECT_NAME}::${NLOHMANN_JSON_TARGET_NAME} ALIAS ${NLOHMANN_JSON_TARGET_NAME})
|
|
if (${CMAKE_VERSION} VERSION_LESS "3.8.0")
|
|
target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_range_for)
|
|
else()
|
|
target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_std_11)
|
|
endif()
|
|
|
|
target_compile_definitions(
|
|
${NLOHMANN_JSON_TARGET_NAME}
|
|
INTERFACE
|
|
$<$<NOT:$<BOOL:${JSON_GlobalUDLs}>>:JSON_USE_GLOBAL_UDLS=0>
|
|
$<$<NOT:$<BOOL:${JSON_ImplicitConversions}>>:JSON_USE_IMPLICIT_CONVERSIONS=0>
|
|
$<$<BOOL:${JSON_DisableEnumSerialization}>:JSON_DISABLE_ENUM_SERIALIZATION=1>
|
|
$<$<BOOL:${JSON_Diagnostics}>:JSON_DIAGNOSTICS=1>
|
|
$<$<BOOL:${JSON_Diagnostic_Positions}>:JSON_DIAGNOSTIC_POSITIONS=1>
|
|
$<$<BOOL:${JSON_LegacyDiscardedValueComparison}>:JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON=1>
|
|
)
|
|
|
|
target_include_directories(
|
|
${NLOHMANN_JSON_TARGET_NAME}
|
|
${NLOHMANN_JSON_SYSTEM_INCLUDE} INTERFACE
|
|
$<BUILD_INTERFACE:${NLOHMANN_JSON_INCLUDE_BUILD_DIR}>
|
|
$<INSTALL_INTERFACE:${NLOHMANN_JSON_INCLUDE_INSTALL_DIR}>
|
|
)
|
|
|
|
## add debug view definition file for msvc (natvis)
|
|
if (MSVC)
|
|
set(NLOHMANN_ADD_NATVIS TRUE)
|
|
set(NLOHMANN_NATVIS_FILE "nlohmann_json.natvis")
|
|
target_sources(
|
|
${NLOHMANN_JSON_TARGET_NAME}
|
|
INTERFACE
|
|
$<INSTALL_INTERFACE:${NLOHMANN_NATVIS_FILE}>
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${NLOHMANN_NATVIS_FILE}>
|
|
)
|
|
endif()
|
|
|
|
# Install a pkg-config file, so other tools can find this.
|
|
CONFIGURE_FILE(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkg-config.pc.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
|
|
@ONLY
|
|
)
|
|
|
|
##
|
|
## TESTS
|
|
## create and configure the unit test target
|
|
##
|
|
if (JSON_BuildTests)
|
|
include(CTest)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
##
|
|
## 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
|
|
)
|
|
|
|
if(JSON_Install)
|
|
install(
|
|
DIRECTORY ${NLOHMANN_JSON_INCLUDE_BUILD_DIR}
|
|
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}
|
|
)
|
|
if (NLOHMANN_ADD_NATVIS)
|
|
install(
|
|
FILES ${NLOHMANN_NATVIS_FILE}
|
|
DESTINATION .
|
|
)
|
|
endif()
|
|
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}
|
|
)
|
|
install(
|
|
FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
|
|
DESTINATION ${NLOHMANN_JSON_PKGCONFIG_INSTALL_DIR}
|
|
)
|
|
include(CPack)
|
|
endif()
|