Skip to content

Commit ead46a0

Browse files
committed
chore(cmake): overall improvements
1 parent 52597cf commit ead46a0

File tree

17 files changed

+535
-94
lines changed

17 files changed

+535
-94
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
/bazel-*
22
/.build/
3+
/build/
4+
/build-*/
35
/.coverage/
46

57
dist/

CMakeLists.txt

Lines changed: 136 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@
33
cmake_minimum_required(VERSION 3.24)
44
cmake_policy(SET CMP0077 NEW)
55

6-
project(dd-trace-cpp)
6+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
77

8-
set(CMAKE_CXX_STANDARD 17)
9-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
10-
set(CMAKE_CXX_EXTENSIONS OFF)
11-
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
12-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
8+
# Get the version of the lib
9+
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog/version.cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )")
10+
string(REGEX MATCH "#define DD_TRACE_VERSION \"[^\"]*" DD_TRACE_VERSION ${DD_TRACE_VERSION_CPP_CONTENTS})
11+
string(REGEX REPLACE "[^\"]+\"v" "" DD_TRACE_VERSION ${DD_TRACE_VERSION})
12+
13+
project(
14+
dd-trace-cpp
15+
VERSION ${DD_TRACE_VERSION}
16+
LANGUAGES CXX
17+
)
1318

1419
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
1520
option(BUILD_STATIC_LIBS "Build static libraries" ON)
@@ -44,18 +49,11 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
4449
option(DD_TRACE_ENABLE_SANITIZE "Build with address sanitizer and undefined behavior sanitizer" OFF)
4550
endif()
4651

47-
if (NOT CMAKE_BUILD_TYPE)
48-
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
49-
endif ()
50-
5152
# Linking this library requires threads.
5253
find_package(Threads REQUIRED)
5354
include(cmake/deps/json.cmake)
5455
include(cmake/utils.cmake)
5556

56-
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/src/datadog/version.cpp DD_TRACE_VERSION_CPP_CONTENTS REGEX "#define DD_TRACE_VERSION( |_NUM )")
57-
string(REGEX MATCH "#define DD_TRACE_VERSION \"[^\"]*" DD_TRACE_VERSION ${DD_TRACE_VERSION_CPP_CONTENTS})
58-
string(REGEX REPLACE "[^\"]+\"" "" DD_TRACE_VERSION ${DD_TRACE_VERSION})
5957
message(STATUS "dd-trace-cpp version=[${DD_TRACE_VERSION}]")
6058
unset(DD_TRACE_VERSION_CPP_CONTENTS)
6159

@@ -83,7 +81,10 @@ if (DD_TRACE_BUILD_FUZZERS)
8381
endif ()
8482

8583
if (DD_TRACE_BUILD_TESTING)
84+
include(Catch)
85+
enable_testing()
8686
add_subdirectory(test)
87+
add_subdirectory(test/system-tests)
8788
endif()
8889

8990
if (DD_TRACE_BUILD_EXAMPLES)
@@ -94,17 +95,68 @@ if (DD_TRACE_BUILD_BENCHMARK)
9495
add_subdirectory(benchmark)
9596
endif ()
9697

97-
add_library(dd_trace_cpp-objects OBJECT)
98-
add_library(dd_trace::obj ALIAS dd_trace_cpp-objects)
98+
add_library(dd-trace-cpp-objects OBJECT)
99+
add_library(dd-trace-cpp::obj ALIAS dd-trace-cpp-objects)
99100

100-
file(GLOB_RECURSE public_header_files ${CMAKE_SOURCE_DIR}/include/*.h)
101+
target_compile_features(dd-trace-cpp-objects
102+
PUBLIC
103+
cxx_std_17
104+
)
101105

102-
target_sources(dd_trace_cpp-objects
106+
# NOTE: Don't use glob:
107+
# - <https://stackoverflow.com/questions/32411963/why-is-cmake-file-glob-evil>
108+
# - <https://discourse.cmake.org/t/is-glob-still-considered-harmful-with-configure-depends/808>
109+
target_sources(dd-trace-cpp-objects
103110
PUBLIC
104111
FILE_SET public_headers
105112
TYPE HEADERS
106113
BASE_DIRS include
107-
FILES ${public_header_files}
114+
FILES
115+
include/datadog/remote_config/capability.h
116+
include/datadog/remote_config/listener.h
117+
include/datadog/remote_config/product.h
118+
include/datadog/telemetry/configuration.h
119+
include/datadog/telemetry/metrics.h
120+
include/datadog/telemetry/product.h
121+
include/datadog/telemetry/telemetry.h
122+
include/datadog/baggage.h
123+
include/datadog/cerr_logger.h
124+
include/datadog/clock.h
125+
include/datadog/collector.h
126+
include/datadog/config.h
127+
include/datadog/datadog_agent_config.h
128+
include/datadog/dict_reader.h
129+
include/datadog/dict_writer.h
130+
include/datadog/environment.h
131+
include/datadog/error.h
132+
include/datadog/event_scheduler.h
133+
include/datadog/expected.h
134+
include/datadog/http_client.h
135+
include/datadog/id_generator.h
136+
include/datadog/injection_options.h
137+
include/datadog/logger.h
138+
include/datadog/null_collector.h
139+
include/datadog/optional.h
140+
include/datadog/propagation_style.h
141+
include/datadog/rate.h
142+
include/datadog/runtime_id.h
143+
include/datadog/sampling_decision.h
144+
include/datadog/sampling_mechanism.h
145+
include/datadog/sampling_priority.h
146+
include/datadog/span.h
147+
include/datadog/span_config.h
148+
include/datadog/span_defaults.h
149+
include/datadog/span_matcher.h
150+
include/datadog/span_sampler_config.h
151+
include/datadog/string_view.h
152+
include/datadog/trace_id.h
153+
include/datadog/trace_sampler_config.h
154+
include/datadog/trace_segment.h
155+
include/datadog/trace_source.h
156+
include/datadog/tracer.h
157+
include/datadog/tracer_config.h
158+
include/datadog/tracer_signature.h
159+
include/datadog/version.h
108160
PRIVATE
109161
src/datadog/common/hash.cpp
110162
src/datadog/telemetry/configuration.cpp
@@ -155,106 +207,137 @@ target_sources(dd_trace_cpp-objects
155207
src/datadog/version.cpp
156208
src/datadog/w3c_propagation.cpp
157209
)
158-
159-
# Headers location are different depending of whether we are building
160-
# or installing the library.
161-
target_include_directories(dd_trace_cpp-objects
162-
PUBLIC
163-
$<INSTALL_INTERFACE:include>
164-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
210+
target_include_directories(dd-trace-cpp-objects
165211
PRIVATE
166212
${CMAKE_CURRENT_SOURCE_DIR}/src/datadog
167213
)
168214

169-
target_link_libraries(dd_trace_cpp-objects
215+
target_link_libraries(dd-trace-cpp-objects
170216
PUBLIC
171217
Threads::Threads
172218
PRIVATE
173-
dd_trace::specs
219+
dd-trace-cpp::specs
220+
)
221+
222+
install(
223+
TARGETS dd-trace-cpp-objects dd-trace-cpp-specs
224+
EXPORT dd-trace-cpp-targets
225+
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174226
)
175227

176228
# Produce both shared and static versions of the library.
177229
if (BUILD_SHARED_LIBS)
178-
add_library(dd_trace_cpp-shared SHARED $<TARGET_OBJECTS:dd_trace_cpp-objects>)
179-
add_library(dd_trace::shared ALIAS dd_trace_cpp-shared)
230+
add_library(dd-trace-cpp-shared SHARED $<TARGET_OBJECTS:dd-trace-cpp-objects>)
231+
add_library(dd-trace-cpp::shared ALIAS dd-trace-cpp-shared)
180232

181233
if (DD_TRACE_TRANSPORT STREQUAL "curl")
182-
add_dependencies(dd_trace_cpp-shared CURL::libcurl_shared)
234+
add_dependencies(dd-trace-cpp-shared CURL::libcurl_shared)
183235

184-
target_sources(dd_trace_cpp-shared
236+
target_sources(dd-trace-cpp-shared
185237
PRIVATE
186238
src/datadog/curl.cpp
187239
src/datadog/default_http_client_curl.cpp
188240
)
189241

190-
target_link_libraries(dd_trace_cpp-shared
242+
target_link_libraries(dd-trace-cpp-shared
191243
PRIVATE
192244
CURL::libcurl_shared
193245
)
194246
else()
195-
target_sources(dd_trace_cpp-shared
247+
target_sources(dd-trace-cpp-shared
196248
PRIVATE
197249
src/datadog/default_http_client_null.cpp
198250
)
199251
endif ()
200252

201-
add_dependencies(dd_trace_cpp-shared dd_trace_cpp-objects CURL::libcurl_shared)
253+
add_dependencies(dd-trace-cpp-shared dd-trace-cpp-objects CURL::libcurl_shared)
202254

203-
target_link_libraries(dd_trace_cpp-shared
255+
target_link_libraries(dd-trace-cpp-shared
204256
PUBLIC
205-
dd_trace::obj
257+
dd-trace-cpp::obj
206258
CURL::libcurl_shared
207259
PRIVATE
208-
dd_trace::specs
260+
dd-trace-cpp::specs
209261
)
210262

211-
install(TARGETS dd_trace_cpp-objects dd_trace_cpp-shared
212-
EXPORT dd_trace_cpp-export
213-
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
263+
install(
264+
TARGETS dd-trace-cpp-shared libcurl_shared
265+
EXPORT dd-trace-cpp-targets
214266
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
215267
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
216268
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
217269
)
218270
endif ()
219271

220272
if (BUILD_STATIC_LIBS)
221-
add_library(dd_trace_cpp-static STATIC $<TARGET_OBJECTS:dd_trace_cpp-objects>)
222-
add_library(dd_trace::static ALIAS dd_trace_cpp-static)
273+
add_library(dd-trace-cpp-static STATIC $<TARGET_OBJECTS:dd-trace-cpp-objects>)
274+
add_library(dd-trace-cpp::static ALIAS dd-trace-cpp-static)
223275

224276
if (DD_TRACE_TRANSPORT STREQUAL "curl")
225-
add_dependencies(dd_trace_cpp-static CURL::libcurl_static)
277+
add_dependencies(dd-trace-cpp-static CURL::libcurl_static)
226278

227-
target_sources(dd_trace_cpp-static
279+
target_sources(dd-trace-cpp-static
228280
PRIVATE
229281
src/datadog/curl.cpp
230282
src/datadog/default_http_client_curl.cpp
231283
)
232284

233-
target_link_libraries(dd_trace_cpp-static
285+
target_link_libraries(dd-trace-cpp-static
234286
PRIVATE
235287
CURL::libcurl_static
236288
)
237289
else()
238-
target_sources(dd_trace_cpp-static
290+
target_sources(dd-trace-cpp-static
239291
PRIVATE
240292
src/datadog/default_http_client_null.cpp
241293
)
242294
endif ()
243295

244-
add_dependencies(dd_trace_cpp-static dd_trace_cpp-objects)
296+
add_dependencies(dd-trace-cpp-static dd-trace-cpp-objects)
245297

246-
target_link_libraries(dd_trace_cpp-static
298+
target_link_libraries(dd-trace-cpp-static
247299
PUBLIC
248-
dd_trace::obj
300+
dd-trace-cpp::obj
249301
PRIVATE
250-
dd_trace::specs
302+
dd-trace-cpp::specs
251303
)
252304

253-
install(TARGETS dd_trace_cpp-objects dd_trace_cpp-static
254-
EXPORT dd_trace_cpp-export
255-
FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
305+
install(
306+
TARGETS dd-trace-cpp-static libcurl_static
307+
EXPORT dd-trace-cpp-targets
256308
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
257309
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
258310
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
259311
)
260312
endif ()
313+
314+
# install target
315+
include(CMakePackageConfigHelpers)
316+
317+
write_basic_package_version_file(
318+
"${PROJECT_NAME}-config-version.cmake"
319+
VERSION ${PROJECT_VERSION}
320+
COMPATIBILITY SameMajorVersion
321+
)
322+
323+
configure_package_config_file(
324+
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
325+
${PROJECT_NAME}-config.cmake
326+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
327+
NO_CHECK_REQUIRED_COMPONENTS_MACRO
328+
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
329+
)
330+
331+
install(
332+
EXPORT dd-trace-cpp-targets
333+
NAMESPACE dd-trace-cpp::
334+
FILE ${PROJECT_NAME}-targets.cmake
335+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
336+
)
337+
338+
install(
339+
FILES
340+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
341+
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
342+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
343+
)

CMakePresets.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"displayName": "Development",
2626
"cacheVariables": {
2727
"CMAKE_BUILD_TYPE": "Debug",
28+
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
2829
"DD_TRACE_ENABLE_SANITIZE": "OFF",
2930
"DD_TRACE_BUILD_TESTING": "ON",
3031
"DD_TRACE_BUILD_EXAMPLES": "ON",

0 commit comments

Comments
 (0)