1# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2# file Copyright.txt or https://cmake.org/licensing for details.
3
4#[=======================================================================[.rst:
5FindLTTngUST
6------------
7
8.. versionadded:: 3.6
9
10Find
11`Linux Trace Toolkit Next Generation (LTTng-UST) <http://lttng.org/>`__ library.
12
13Imported target
14^^^^^^^^^^^^^^^
15
16This module defines the following :prop_tgt:`IMPORTED` target:
17
18``LTTng::UST``
19  The LTTng-UST library, if found
20
21Result variables
22^^^^^^^^^^^^^^^^
23
24This module sets the following
25
26``LTTNGUST_FOUND``
27  ``TRUE`` if system has LTTng-UST
28``LTTNGUST_INCLUDE_DIRS``
29  The LTTng-UST include directories
30``LTTNGUST_LIBRARIES``
31  The libraries needed to use LTTng-UST
32``LTTNGUST_VERSION_STRING``
33  The LTTng-UST version
34``LTTNGUST_HAS_TRACEF``
35  ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST
36``LTTNGUST_HAS_TRACELOG``
37  ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST
38#]=======================================================================]
39
40find_path(LTTNGUST_INCLUDE_DIRS NAMES lttng/tracepoint.h)
41find_library(LTTNGUST_LIBRARIES NAMES lttng-ust)
42
43if(LTTNGUST_INCLUDE_DIRS AND LTTNGUST_LIBRARIES)
44  # find tracef() and tracelog() support
45  set(LTTNGUST_HAS_TRACEF 0)
46  set(LTTNGUST_HAS_TRACELOG 0)
47
48  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracef.h")
49    set(LTTNGUST_HAS_TRACEF TRUE)
50  endif()
51
52  if(EXISTS "${LTTNGUST_INCLUDE_DIRS}/lttng/tracelog.h")
53    set(LTTNGUST_HAS_TRACELOG TRUE)
54  endif()
55
56  # get version
57  set(lttngust_version_file "${LTTNGUST_INCLUDE_DIRS}/lttng/ust-version.h")
58
59  if(EXISTS "${lttngust_version_file}")
60    file(STRINGS "${lttngust_version_file}" lttngust_version_major_string
61         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MAJOR_VERSION[\t ]+[0-9]+[\t ]*$")
62    file(STRINGS "${lttngust_version_file}" lttngust_version_minor_string
63         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_MINOR_VERSION[\t ]+[0-9]+[\t ]*$")
64    file(STRINGS "${lttngust_version_file}" lttngust_version_patch_string
65         REGEX "^[\t ]*#define[\t ]+LTTNG_UST_PATCHLEVEL_VERSION[\t ]+[0-9]+[\t ]*$")
66    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
67           lttngust_v_major "${lttngust_version_major_string}")
68    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
69           lttngust_v_minor "${lttngust_version_minor_string}")
70    string(REGEX REPLACE ".*([0-9]+).*" "\\1"
71           lttngust_v_patch "${lttngust_version_patch_string}")
72    set(LTTNGUST_VERSION_STRING
73        "${lttngust_v_major}.${lttngust_v_minor}.${lttngust_v_patch}")
74    unset(lttngust_version_major_string)
75    unset(lttngust_version_minor_string)
76    unset(lttngust_version_patch_string)
77    unset(lttngust_v_major)
78    unset(lttngust_v_minor)
79    unset(lttngust_v_patch)
80  endif()
81
82  unset(lttngust_version_file)
83
84  if(NOT TARGET LTTng::UST)
85    add_library(LTTng::UST UNKNOWN IMPORTED)
86    set_target_properties(LTTng::UST PROPERTIES
87      INTERFACE_INCLUDE_DIRECTORIES "${LTTNGUST_INCLUDE_DIRS}"
88      INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}
89      IMPORTED_LINK_INTERFACE_LANGUAGES "C"
90      IMPORTED_LOCATION "${LTTNGUST_LIBRARIES}")
91  endif()
92
93  # add libdl to required libraries
94  set(LTTNGUST_LIBRARIES ${LTTNGUST_LIBRARIES} ${CMAKE_DL_LIBS})
95endif()
96
97include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
98find_package_handle_standard_args(LTTngUST FOUND_VAR LTTNGUST_FOUND
99                                  REQUIRED_VARS LTTNGUST_LIBRARIES
100                                                LTTNGUST_INCLUDE_DIRS
101                                  VERSION_VAR LTTNGUST_VERSION_STRING)
102mark_as_advanced(LTTNGUST_LIBRARIES LTTNGUST_INCLUDE_DIRS)
103