|
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