33cmake_minimum_required (VERSION 3.24)
44cmake_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
1419option (BUILD_SHARED_LIBS "Build shared libraries" ON )
1520option (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 )
4550endif ()
4651
47- if (NOT CMAKE_BUILD_TYPE )
48- set (CMAKE_BUILD_TYPE "RelWithDebInfo" )
49- endif ()
50-
5152# Linking this library requires threads.
5253find_package (Threads REQUIRED)
5354include (cmake/deps/json.cmake)
5455include (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} )
5957message (STATUS "dd-trace-cpp version=[${DD_TRACE_VERSION} ]" )
6058unset (DD_TRACE_VERSION_CPP_CONTENTS)
6159
@@ -83,7 +81,10 @@ if (DD_TRACE_BUILD_FUZZERS)
8381endif ()
8482
8583if (DD_TRACE_BUILD_TESTING)
84+ include (Catch)
85+ enable_testing ()
8686 add_subdirectory (test )
87+ add_subdirectory (test /system -tests)
8788endif ()
8889
8990if (DD_TRACE_BUILD_EXAMPLES)
@@ -94,17 +95,68 @@ if (DD_TRACE_BUILD_BENCHMARK)
9495 add_subdirectory (benchmark)
9596endif ()
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.
177229if (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 )
218270endif ()
219271
220272if (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 )
260312endif ()
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+ )
0 commit comments