5 # This module finds the `LTTng-UST <http://lttng.org/>`__ library.
10 # This module defines the following :prop_tgt:`IMPORTED` target:
13 # The LTTng-UST library, if found
18 # This module sets the following
21 # ``TRUE`` if system has LTTng-UST
22 # ``LTTNGUST_INCLUDE_DIRS``
23 # The LTTng-UST include directories
24 # ``LTTNGUST_LIBRARIES``
25 # The libraries needed to use LTTng-UST
26 # ``LTTNGUST_VERSION_STRING``
27 # The LTTng-UST version
28 # ``LTTNGUST_HAS_TRACEF``
29 # ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST
30 # ``LTTNGUST_HAS_TRACELOG``
31 # ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST
33 # SPDX-FileCopyrightText: 2016 Kitware, Inc.
34 # SPDX-FileCopyrightText: 2016 Philippe Proulx <pproulx@efficios.com>
36 # SPDX-License-Identifier: BSD-3-Clause
38 find_path(LTTNGUST_INCLUDE_DIRS NAMES lttng/tracepoint.h)
39 # Must also check for the path of generated header files since out-of-tree
40 # build is a possibility (Yocto).
41 find_path(LTTNGUST_INCLUDE_DIRS_GENERATED NAMES lttng/ust-config.h)
42 find_library(LTTNGUST_LIBRARIES NAMES lttng-ust)
44 if(LTTNGUST_INCLUDE_DIRS AND LTTNGUST_INCLUDE_DIRS_GENERATED AND LTTNGUST_LIBRARIES)
45 # find tracef() and tracelog() support
46 set(LTTNGUST_HAS_TRACEF 0)
47 set(LTTNGUST_HAS_TRACELOG 0)
49 if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracef.h")
50 set(LTTNGUST_HAS_TRACEF TRUE)
53 if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracelog.h")
54 set(LTTNGUST_HAS_TRACELOG TRUE)
58 set(lttngust_version_file "${LTTNGUST_INCLUDE_DIRS_GENERATED}/lttng/ust-version.h")
60 if(EXISTS "${lttngust_version_file}")
61 file(STRINGS "${lttngust_version_file}" lttngust_version_major_string
62 REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MAJOR_VERSION[\t ]+[0-9]+[\t ]*$")
63 file(STRINGS "${lttngust_version_file}" lttngust_version_minor_string
64 REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MINOR_VERSION[\t ]+[0-9]+[\t ]*$")
65 file(STRINGS "${lttngust_version_file}" lttngust_version_patch_string
66 REGEX "^[\t ]*#define[\t ]+LTTNG_UST_PATCHLEVEL_VERSION[\t ]+[0-9]+[\t ]*$")
67 string(REGEX REPLACE ".*([0-9]+).*" "\\1"
68 lttngust_v_major "${lttngust_version_major_string}")
69 string(REGEX REPLACE ".*([0-9]+).*" "\\1"
70 lttngust_v_minor "${lttngust_version_minor_string}")
71 string(REGEX REPLACE ".*([0-9]+).*" "\\1"
72 lttngust_v_patch "${lttngust_version_patch_string}")
73 set(LTTNGUST_VERSION_STRING
74 "${lttngust_v_major}.${lttngust_v_minor}.${lttngust_v_patch}")
75 unset(lttngust_version_major_string)
76 unset(lttngust_version_minor_string)
77 unset(lttngust_version_patch_string)
78 unset(lttngust_v_major)
79 unset(lttngust_v_minor)
80 unset(lttngust_v_patch)
82 message(FATAL_ERROR "Missing version header")
85 unset(lttngust_version_file)
87 if(NOT TARGET LTTng::UST)
88 add_library(LTTng::UST UNKNOWN IMPORTED)
89 set_target_properties(LTTng::UST PROPERTIES
90 INTERFACE_INCLUDE_DIRECTORIES "${LTTNGUST_INCLUDE_DIRS};${LTTNGUST_INCLUDE_DIRS_GENERATED}"
91 INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}
92 IMPORTED_LINK_INTERFACE_LANGUAGES "C"
93 IMPORTED_LOCATION "${LTTNGUST_LIBRARIES}")
96 # add libdl to required libraries
97 set(LTTNGUST_LIBRARIES ${LTTNGUST_LIBRARIES} ${CMAKE_DL_LIBS})
100 # handle the QUIETLY and REQUIRED arguments and set LTTNGUST_FOUND to
101 # TRUE if all listed variables are TRUE
102 include(FindPackageHandleStandardArgs)
103 find_package_handle_standard_args(LTTngUST FOUND_VAR LTTNGUST_FOUND
104 REQUIRED_VARS LTTNGUST_LIBRARIES
105 LTTNGUST_INCLUDE_DIRS
106 VERSION_VAR LTTNGUST_VERSION_STRING)
107 mark_as_advanced(LTTNGUST_LIBRARIES LTTNGUST_INCLUDE_DIRS)