11# Note: Make sure that this version is the same as that in
22# "./CheckRequiredCMakeVersion.cmake".
3- cmake_minimum_required (VERSION 3.24 )
3+ cmake_minimum_required (VERSION 3.28...4.0 )
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 )
@@ -26,7 +31,6 @@ set(DD_TRACE_TRANSPORT "curl" CACHE STRING "HTTP transport that dd-trace-cpp use
2631
2732if (DD_TRACE_TRANSPORT STREQUAL "curl" )
2833 include (cmake/deps/curl.cmake)
29- message (STATUS "DD_TRACE_TRANSPORT is set to 'curl', including curl" )
3034elseif (DD_TRACE_TRANSPORT STREQUAL "none" )
3135 message (STATUS "DD_TRACE_TRANSPORT is set to 'none', no default transport will be included" )
3236else ()
@@ -44,18 +48,15 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
4448 option (DD_TRACE_ENABLE_SANITIZE "Build with address sanitizer and undefined behavior sanitizer" OFF )
4549endif ()
4650
47- if ( NOT CMAKE_BUILD_TYPE )
48- set ( CMAKE_BUILD_TYPE "RelWithDebInfo" )
49- endif ( )
51+ # Include mandatory files
52+ include (GNUInstallDirs )
53+ include (CMakePackageConfigHelpers )
5054
5155# Linking this library requires threads.
5256find_package (Threads REQUIRED)
5357include (cmake/deps/json.cmake)
5458include (cmake/utils.cmake)
5559
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} )
5960message (STATUS "dd-trace-cpp version=[${DD_TRACE_VERSION} ]" )
6061unset (DD_TRACE_VERSION_CPP_CONTENTS)
6162
@@ -83,7 +84,10 @@ if (DD_TRACE_BUILD_FUZZERS)
8384endif ()
8485
8586if (DD_TRACE_BUILD_TESTING)
87+ include (Catch)
88+ enable_testing ()
8689 add_subdirectory (test )
90+ add_subdirectory (test /system -tests)
8791endif ()
8892
8993if (DD_TRACE_BUILD_EXAMPLES)
@@ -94,17 +98,68 @@ if (DD_TRACE_BUILD_BENCHMARK)
9498 add_subdirectory (benchmark)
9599endif ()
96100
97- add_library (dd_trace_cpp -objects OBJECT)
98- add_library (dd_trace ::obj ALIAS dd_trace_cpp -objects)
101+ add_library (dd-trace-cpp -objects OBJECT)
102+ add_library (dd-trace-cpp ::obj ALIAS dd-trace-cpp -objects)
99103
100- file (GLOB_RECURSE public_header_files ${CMAKE_SOURCE_DIR} /include /*.h)
104+ target_compile_features (dd-trace-cpp-objects
105+ PUBLIC
106+ cxx_std_17
107+ )
101108
102- target_sources (dd_trace_cpp-objects
109+ # NOTE: Don't use glob:
110+ # - <https://stackoverflow.com/questions/32411963/why-is-cmake-file-glob-evil>
111+ # - <https://discourse.cmake.org/t/is-glob-still-considered-harmful-with-configure-depends/808>
112+ target_sources (dd-trace-cpp-objects
103113 PUBLIC
104114 FILE_SET public_headers
105115 TYPE HEADERS
106116 BASE_DIRS include
107- FILES ${public_header_files}
117+ FILES
118+ include /datadog/remote_config/capability.h
119+ include /datadog/remote_config/listener.h
120+ include /datadog/remote_config/product.h
121+ include /datadog/telemetry/configuration .h
122+ include /datadog/telemetry/metrics.h
123+ include /datadog/telemetry/product.h
124+ include /datadog/telemetry/telemetry.h
125+ include /datadog/baggage.h
126+ include /datadog/cerr_logger.h
127+ include /datadog/clock.h
128+ include /datadog/collector.h
129+ include /datadog/config.h
130+ include /datadog/datadog_agent_config.h
131+ include /datadog/dict_reader.h
132+ include /datadog/dict_writer.h
133+ include /datadog/environment .h
134+ include /datadog/error.h
135+ include /datadog/event_scheduler.h
136+ include /datadog/expected.h
137+ include /datadog/http_client.h
138+ include /datadog/id_generator.h
139+ include /datadog/injection_options.h
140+ include /datadog/logger.h
141+ include /datadog/null_collector.h
142+ include /datadog/optional .h
143+ include /datadog/propagation_style.h
144+ include /datadog/rate.h
145+ include /datadog/runtime_id.h
146+ include /datadog/sampling_decision.h
147+ include /datadog/sampling_mechanism.h
148+ include /datadog/sampling_priority.h
149+ include /datadog/span.h
150+ include /datadog/span_config.h
151+ include /datadog/span_defaults.h
152+ include /datadog/span_matcher.h
153+ include /datadog/span_sampler_config.h
154+ include /datadog/string_view.h
155+ include /datadog/trace_id.h
156+ include /datadog/trace_sampler_config.h
157+ include /datadog/trace_segment.h
158+ include /datadog/trace_source.h
159+ include /datadog/tracer.h
160+ include /datadog/tracer_config.h
161+ include /datadog/tracer_signature.h
162+ include /datadog/version .h
108163 PRIVATE
109164 src/datadog/common/hash.cpp
110165 src/datadog/telemetry/configuration .cpp
@@ -156,102 +211,157 @@ target_sources(dd_trace_cpp-objects
156211 src/datadog/w3c_propagation.cpp
157212)
158213
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 >
214+ target_include_directories (dd-trace-cpp-objects
165215 PRIVATE
166216 ${CMAKE_CURRENT_SOURCE_DIR} /src/datadog
167217)
168218
169- target_link_libraries (dd_trace_cpp -objects
219+ target_link_libraries (dd-trace-cpp -objects
170220 PUBLIC
171221 Threads::Threads
172222 PRIVATE
173- dd_trace::specs
223+ dd-trace-cpp::specs
224+ )
225+
226+ set_target_properties (dd-trace-cpp-objects
227+ PROPERTIES
228+ VERIFY_INTERFACE_HEADER_SETS ON
229+ )
230+
231+ install (
232+ TARGETS dd-trace-cpp-objects dd-trace-cpp-specs
233+ EXPORT dd-trace-cpp-targets
234+ FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174235)
175236
176237# Produce both shared and static versions of the library.
177238if (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)
239+ add_library (dd-trace-cpp- shared SHARED $<TARGET_OBJECTS:dd-trace-cpp -objects>)
240+ add_library (dd-trace-cpp ::shared ALIAS dd-trace-cpp -shared)
180241
181- if (DD_TRACE_TRANSPORT STREQUAL "curl" )
182- add_dependencies (dd_trace_cpp -shared CURL::libcurl_shared)
242+ if (DD_TRACE_TRANSPORT STREQUAL "curl" )
243+ add_dependencies (dd-trace-cpp -shared CURL::libcurl_shared)
183244
184- target_sources (dd_trace_cpp -shared
245+ target_sources (dd-trace-cpp -shared
185246 PRIVATE
186247 src/datadog/curl.cpp
187248 src/datadog/default_http_client_curl.cpp
188249 )
189250
190- target_link_libraries (dd_trace_cpp -shared
251+ target_link_libraries (dd-trace-cpp -shared
191252 PRIVATE
192253 CURL::libcurl_shared
193254 )
255+
256+ install (
257+ TARGETS libcurl_shared
258+ EXPORT dd-trace-cpp-targets
259+ )
194260 else ()
195- target_sources (dd_trace_cpp -shared
261+ target_sources (dd-trace-cpp -shared
196262 PRIVATE
197263 src/datadog/default_http_client_null.cpp
198264 )
199- endif ()
265+ endif ()
200266
201- target_link_libraries (dd_trace_cpp -shared
267+ target_link_libraries (dd-trace-cpp -shared
202268 PUBLIC
203- dd_trace ::obj
269+ dd-trace-cpp ::obj
204270 PRIVATE
205- dd_trace::specs
271+ dd-trace-cpp::specs
272+ )
273+
274+ set_target_properties (dd-trace-cpp-shared
275+ PROPERTIES
276+ OUTPUT_NAME "dd-trace-cpp"
206277 )
207278
208- install (TARGETS dd_trace_cpp-objects dd_trace_cpp-shared
209- EXPORT dd_trace_cpp-export
210- FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
279+ install (
280+ TARGETS dd-trace-cpp-shared libcurl_shared
281+ EXPORT dd-trace-cpp-targets
211282 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212283 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
213284 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
214285 )
215286endif ()
216287
217288if (BUILD_STATIC_LIBS)
218- add_library (dd_trace_cpp- static STATIC $<TARGET_OBJECTS:dd_trace_cpp -objects>)
219- add_library (dd_trace ::static ALIAS dd_trace_cpp -static )
289+ add_library (dd-trace-cpp- static STATIC $<TARGET_OBJECTS:dd-trace-cpp -objects>)
290+ add_library (dd-trace-cpp ::static ALIAS dd-trace-cpp -static )
220291
221- add_dependencies (dd_trace_cpp- static dd_trace_cpp -objects)
292+ add_dependencies (dd-trace-cpp- static dd-trace-cpp -objects)
222293
223294 if (DD_TRACE_TRANSPORT STREQUAL "curl" )
224- add_dependencies (dd_trace_cpp -static CURL::libcurl_static)
295+ add_dependencies (dd-trace-cpp -static CURL::libcurl_static)
225296
226- target_sources (dd_trace_cpp -static
297+ target_sources (dd-trace-cpp -static
227298 PRIVATE
228299 src/datadog/curl.cpp
229300 src/datadog/default_http_client_curl.cpp
230301 )
231302
232- target_link_libraries (dd_trace_cpp -static
303+ target_link_libraries (dd-trace-cpp -static
233304 PRIVATE
234305 CURL::libcurl_static
235306 )
307+
308+ install (
309+ TARGETS libcurl_static
310+ EXPORT dd-trace-cpp-targets
311+ )
236312 else ()
237- target_sources (dd_trace_cpp -static
313+ target_sources (dd-trace-cpp -static
238314 PRIVATE
239315 src/datadog/default_http_client_null.cpp
240316 )
241317 endif ()
242318
243- target_link_libraries (dd_trace_cpp -static
319+ target_link_libraries (dd-trace-cpp -static
244320 PUBLIC
245- dd_trace ::obj
321+ dd-trace-cpp ::obj
246322 PRIVATE
247- dd_trace::specs
323+ dd-trace-cpp::specs
324+ )
325+
326+ set_target_properties (dd-trace-cpp-static
327+ PROPERTIES
328+ OUTPUT_NAME "dd-trace-cpp"
248329 )
249330
250- install (TARGETS dd_trace_cpp-objects dd_trace_cpp- static
251- EXPORT dd_trace_cpp-export
252- FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
331+ install (
332+ TARGETS dd-trace-cpp- static
333+ EXPORT dd-trace-cpp-targets
253334 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
254335 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
255336 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
256337 )
257338endif ()
339+
340+ # install target
341+ write_basic_package_version_file(
342+ "${PROJECT_NAME} -config-version.cmake"
343+ VERSION ${PROJECT_VERSION}
344+ COMPATIBILITY SameMajorVersion
345+ )
346+
347+ configure_package_config_file(
348+ "${CMAKE_CURRENT_SOURCE_DIR} /cmake/${PROJECT_NAME} -config.cmake.in"
349+ ${PROJECT_NAME} -config.cmake
350+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
351+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
352+ PATH_VARS CMAKE_INSTALL_INCLUDEDIR
353+ )
354+
355+ install (
356+ EXPORT dd-trace-cpp-targets
357+ NAMESPACE dd-trace-cpp::
358+ FILE ${PROJECT_NAME} -targets.cmake
359+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
360+ )
361+
362+ install (
363+ FILES
364+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
365+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
366+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
367+ )
0 commit comments