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,158 @@ 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+ POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS}
230+ )
231+
232+ install (
233+ TARGETS dd-trace-cpp-objects dd-trace-cpp-specs
234+ EXPORT dd-trace-cpp-targets
235+ FILE_SET public_headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174236)
175237
176238# Produce both shared and static versions of the library.
177239if (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)
240+ add_library (dd-trace-cpp- shared SHARED $<TARGET_OBJECTS:dd-trace-cpp -objects>)
241+ add_library (dd-trace-cpp ::shared ALIAS dd-trace-cpp -shared)
180242
181- if (DD_TRACE_TRANSPORT STREQUAL "curl" )
182- add_dependencies (dd_trace_cpp -shared CURL::libcurl_shared)
243+ if (DD_TRACE_TRANSPORT STREQUAL "curl" )
244+ add_dependencies (dd-trace-cpp -shared CURL::libcurl_shared)
183245
184- target_sources (dd_trace_cpp -shared
246+ target_sources (dd-trace-cpp -shared
185247 PRIVATE
186248 src/datadog/curl.cpp
187249 src/datadog/default_http_client_curl.cpp
188250 )
189251
190- target_link_libraries (dd_trace_cpp -shared
252+ target_link_libraries (dd-trace-cpp -shared
191253 PRIVATE
192254 CURL::libcurl_shared
193255 )
256+
257+ install (
258+ TARGETS libcurl_shared
259+ EXPORT dd-trace-cpp-targets
260+ )
194261 else ()
195- target_sources (dd_trace_cpp -shared
262+ target_sources (dd-trace-cpp -shared
196263 PRIVATE
197264 src/datadog/default_http_client_null.cpp
198265 )
199- endif ()
266+ endif ()
200267
201- target_link_libraries (dd_trace_cpp -shared
268+ target_link_libraries (dd-trace-cpp -shared
202269 PUBLIC
203- dd_trace ::obj
270+ dd-trace-cpp ::obj
204271 PRIVATE
205- dd_trace::specs
272+ dd-trace-cpp::specs
273+ )
274+
275+ set_target_properties (dd-trace-cpp-shared
276+ PROPERTIES
277+ OUTPUT_NAME "dd-trace-cpp"
206278 )
207279
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}
280+ install (
281+ TARGETS dd-trace-cpp-shared
282+ EXPORT dd-trace-cpp-targets
211283 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212284 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
213285 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
214286 )
215287endif ()
216288
217289if (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 )
290+ add_library (dd-trace-cpp- static STATIC $<TARGET_OBJECTS:dd-trace-cpp -objects>)
291+ add_library (dd-trace-cpp ::static ALIAS dd-trace-cpp -static )
220292
221- add_dependencies (dd_trace_cpp- static dd_trace_cpp -objects)
293+ add_dependencies (dd-trace-cpp- static dd-trace-cpp -objects)
222294
223295 if (DD_TRACE_TRANSPORT STREQUAL "curl" )
224- add_dependencies (dd_trace_cpp -static CURL::libcurl_static)
296+ add_dependencies (dd-trace-cpp -static CURL::libcurl_static)
225297
226- target_sources (dd_trace_cpp -static
298+ target_sources (dd-trace-cpp -static
227299 PRIVATE
228300 src/datadog/curl.cpp
229301 src/datadog/default_http_client_curl.cpp
230302 )
231303
232- target_link_libraries (dd_trace_cpp -static
304+ target_link_libraries (dd-trace-cpp -static
233305 PRIVATE
234306 CURL::libcurl_static
235307 )
308+
309+ install (
310+ TARGETS libcurl_static
311+ EXPORT dd-trace-cpp-targets
312+ )
236313 else ()
237- target_sources (dd_trace_cpp -static
314+ target_sources (dd-trace-cpp -static
238315 PRIVATE
239316 src/datadog/default_http_client_null.cpp
240317 )
241318 endif ()
242319
243- target_link_libraries (dd_trace_cpp -static
320+ target_link_libraries (dd-trace-cpp -static
244321 PUBLIC
245- dd_trace ::obj
322+ dd-trace-cpp ::obj
246323 PRIVATE
247- dd_trace::specs
324+ dd-trace-cpp::specs
325+ )
326+
327+ set_target_properties (dd-trace-cpp-static
328+ PROPERTIES
329+ OUTPUT_NAME "dd-trace-cpp"
248330 )
249331
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}
332+ install (
333+ TARGETS dd-trace-cpp- static
334+ EXPORT dd-trace-cpp-targets
253335 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
254336 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
255337 RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}
256338 )
257339endif ()
340+
341+ # install target
342+ write_basic_package_version_file(
343+ "${PROJECT_NAME} -config-version.cmake"
344+ VERSION ${PROJECT_VERSION}
345+ COMPATIBILITY SameMajorVersion
346+ )
347+
348+ configure_package_config_file(
349+ "${CMAKE_CURRENT_SOURCE_DIR} /cmake/${PROJECT_NAME} -config.cmake.in"
350+ ${PROJECT_NAME} -config.cmake
351+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
352+ NO_CHECK_REQUIRED_COMPONENTS_MACRO
353+ PATH_VARS CMAKE_INSTALL_INCLUDEDIR
354+ )
355+
356+ install (
357+ EXPORT dd-trace-cpp-targets
358+ NAMESPACE dd-trace-cpp::
359+ FILE ${PROJECT_NAME} -targets.cmake
360+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
361+ )
362+
363+ install (
364+ FILES
365+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config.cmake"
366+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} -config-version.cmake"
367+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} "
368+ )
0 commit comments