|
1 | 1 | # Copyright The OpenTelemetry Authors |
2 | 2 | # SPDX-License-Identifier: Apache-2.0 |
3 | 3 |
|
4 | | -# |
5 | | -# The dependency on nlohmann_json can be provided different ways. By order of |
6 | | -# decreasing priority, options are: |
7 | | -# |
8 | | -# 1 - Search for a nlohmann_json package |
9 | | -# |
10 | | -# Packages installed on the local machine are used if found. |
11 | | -# |
12 | | -# The nlohmann_json dependency is not installed, as it already is. |
13 | | -# |
14 | | -# 2 - Search for a nlohmann_json git submodule |
15 | | -# |
16 | | -# When git submodule is used, the nlohmann_json code is located in: |
17 | | -# third_party/nlohmann-json |
18 | | -# |
19 | | -# The nlohmann_json dependency is installed, by building the sub directory with |
20 | | -# JSON_Install=ON |
21 | | -# |
22 | | -# 3 - Download nlohmann_json from github |
23 | | -# |
24 | | -# Code from the development branch is used, unless a specific release tag is |
25 | | -# provided in variable ${nlohmann-json} |
26 | | -# |
27 | | -# The nlohmann_json dependency is installed, by building the downloaded code |
28 | | -# with JSON_Install=ON |
29 | | -# |
| 4 | +# Import nlohmann_json target (nlohmann_json::nlohmann_json). |
| 5 | +# 1. Find an installed nlohmann-json package |
| 6 | +# 2. Use FetchContent to build nlohmann-json from a git submodule |
| 7 | +# 3. Use FetchContent to fetch and build nlohmann-json from GitHub |
30 | 8 |
|
31 | | -# nlohmann_json package is required for most SDK build configurations |
32 | | -find_package(nlohmann_json QUIET) |
33 | | -set(nlohmann_json_clone FALSE) |
34 | | -if(nlohmann_json_FOUND) |
35 | | - message(STATUS "nlohmann::json dependency satisfied by: package") |
36 | | -elseif(TARGET nlohmann_json) |
37 | | - message(STATUS "nlohmann::json is already added as a CMake target!") |
38 | | -elseif(EXISTS ${PROJECT_SOURCE_DIR}/.git |
39 | | - AND EXISTS |
40 | | - ${PROJECT_SOURCE_DIR}/third_party/nlohmann-json/CMakeLists.txt) |
41 | | - message(STATUS "nlohmann::json dependency satisfied by: git submodule") |
42 | | - set(JSON_BuildTests |
43 | | - OFF |
44 | | - CACHE INTERNAL "") |
45 | | - set(JSON_Install |
46 | | - ON |
47 | | - CACHE INTERNAL "") |
48 | | - # This option allows to link nlohmann_json::nlohmann_json target |
49 | | - add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/nlohmann-json) |
50 | | - # This option allows to add header to include directories |
51 | | - include_directories( |
52 | | - ${PROJECT_SOURCE_DIR}/third_party/nlohmann-json/single_include) |
53 | | -else() |
54 | | - if("${nlohmann-json}" STREQUAL "") |
55 | | - set(nlohmann-json "develop") |
| 9 | +find_package(nlohmann_json CONFIG QUIET) |
| 10 | +set(nlohmann_json_PROVIDER "find_package") |
| 11 | + |
| 12 | +if(NOT nlohmann_json_FOUND) |
| 13 | + set(_NLOHMANN_JSON_SUBMODULE_DIR "${opentelemetry-cpp_SOURCE_DIR}/third_party/nlohmann-json") |
| 14 | + if(EXISTS "${_NLOHMANN_JSON_SUBMODULE_DIR}/.git") |
| 15 | + FetchContent_Declare( |
| 16 | + "nlohmann_json" |
| 17 | + SOURCE_DIR "${_NLOHMANN_JSON_SUBMODULE_DIR}" |
| 18 | + ) |
| 19 | + set(nlohmann_json_PROVIDER "fetch_source") |
| 20 | + else() |
| 21 | + FetchContent_Declare( |
| 22 | + "nlohmann_json" |
| 23 | + GIT_REPOSITORY "https://github.com/nlohmann/json.git" |
| 24 | + GIT_TAG "${nlohmann-json_GIT_TAG}" |
| 25 | + ) |
| 26 | + set(nlohmann_json_PROVIDER "fetch_repository") |
56 | 27 | endif() |
57 | | - message(STATUS "nlohmann::json dependency satisfied by: github download") |
58 | | - set(nlohmann_json_clone TRUE) |
59 | | - include(ExternalProject) |
60 | | - ExternalProject_Add( |
61 | | - nlohmann_json_download |
62 | | - PREFIX third_party |
63 | | - GIT_REPOSITORY https://github.com/nlohmann/json.git |
64 | | - GIT_TAG "${nlohmann-json_GIT_TAG}" |
65 | | - UPDATE_COMMAND "" |
66 | | - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} |
67 | | - -DJSON_BuildTests=OFF -DJSON_Install=ON |
68 | | - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} |
69 | | - TEST_AFTER_INSTALL 0 |
70 | | - DOWNLOAD_NO_PROGRESS 1 |
71 | | - LOG_CONFIGURE 1 |
72 | | - LOG_BUILD 1 |
73 | | - LOG_INSTALL 1) |
74 | 28 |
|
75 | | - ExternalProject_Get_Property(nlohmann_json_download INSTALL_DIR) |
76 | | - set(NLOHMANN_JSON_INCLUDE_DIR |
77 | | - ${INSTALL_DIR}/src/nlohmann_json_download/single_include) |
78 | | - add_library(nlohmann_json_ INTERFACE) |
79 | | - target_include_directories( |
80 | | - nlohmann_json_ INTERFACE "$<BUILD_INTERFACE:${NLOHMANN_JSON_INCLUDE_DIR}>" |
81 | | - "$<INSTALL_INTERFACE:include>") |
82 | | - add_dependencies(nlohmann_json_ nlohmann_json_download) |
83 | | - add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json_) |
| 29 | + set(JSON_BuildTests OFF CACHE BOOL "" FORCE) |
| 30 | + set(JSON_Install ${OPENTELEMETRY_INSTALL} CACHE BOOL "" FORCE) |
| 31 | + set(JSON_MultipleHeaders OFF CACHE BOOL "" FORCE) |
| 32 | + |
| 33 | + FetchContent_MakeAvailable(nlohmann_json) |
| 34 | + |
| 35 | + # Set the nlohmann_json_VERSION variable from the git tag. |
| 36 | + string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" nlohmann_json_VERSION "${nlohmann-json_GIT_TAG}") |
84 | 37 |
|
85 | | - if(OPENTELEMETRY_INSTALL) |
86 | | - install( |
87 | | - TARGETS nlohmann_json_ |
88 | | - EXPORT "${PROJECT_NAME}-third_party_nlohmann_json_target" |
89 | | - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
90 | | - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
91 | | - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
92 | | - COMPONENT third_party_nlohmann_json) |
| 38 | + #Disable iwyu and clang-tidy |
| 39 | + if(TARGET nlohmann_json) |
| 40 | + set_target_properties(nlohmann_json PROPERTIES CXX_INCLUDE_WHAT_YOU_USE "" |
| 41 | + CXX_CLANG_TIDY "") |
93 | 42 | endif() |
94 | 43 | endif() |
| 44 | + |
| 45 | +if(NOT TARGET nlohmann_json::nlohmann_json) |
| 46 | + message(FATAL_ERROR "A required nlohmann_json target (nlohmann_json::nlohmann_json) was not imported") |
| 47 | +endif() |
| 48 | + |
0 commit comments