1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
8 Find libuv includes and library.
13 An :ref:`imported target <Imported targets>` named
14 ``LibUV::LibUV`` is provided if libuv has been found.
19 This module defines the following variables:
22 True if libuv was found, false otherwise.
23 ``LibUV_INCLUDE_DIRS``
24 Include directories needed to include libuv headers.
26 Libraries needed to link to libuv.
28 The version of libuv found.
29 ``LibUV_VERSION_MAJOR``
30 The major version of libuv.
31 ``LibUV_VERSION_MINOR``
32 The minor version of libuv.
33 ``LibUV_VERSION_PATCH``
34 The patch version of libuv.
39 This module uses the following cache variables:
42 The location of the libuv library file.
44 The location of the libuv include directory containing ``uv.h``.
46 The cache variables should not be used by project code.
47 They may be set by end users to point at libuv components.
48 #]=======================================================================]
50 #-----------------------------------------------------------------------------
51 find_library(LibUV_LIBRARY
54 mark_as_advanced(LibUV_LIBRARY)
56 find_path(LibUV_INCLUDE_DIR
59 mark_as_advanced(LibUV_INCLUDE_DIR)
61 #-----------------------------------------------------------------------------
62 # Extract version number if possible.
63 set(_LibUV_H_REGEX "#[ \t]*define[ \t]+UV_VERSION_(MAJOR|MINOR|PATCH)[ \t]+[0-9]+")
64 if(LibUV_INCLUDE_DIR AND EXISTS "${LibUV_INCLUDE_DIR}/uv-version.h")
65 file(STRINGS "${LibUV_INCLUDE_DIR}/uv-version.h" _LibUV_H REGEX "${_LibUV_H_REGEX}")
66 elseif(LibUV_INCLUDE_DIR AND EXISTS "${LibUV_INCLUDE_DIR}/uv/version.h")
67 file(STRINGS "${LibUV_INCLUDE_DIR}/uv/version.h" _LibUV_H REGEX "${_LibUV_H_REGEX}")
68 elseif(LibUV_INCLUDE_DIR AND EXISTS "${LibUV_INCLUDE_DIR}/uv.h")
69 file(STRINGS "${LibUV_INCLUDE_DIR}/uv.h" _LibUV_H REGEX "${_LibUV_H_REGEX}")
73 foreach(c MAJOR MINOR PATCH)
74 if(_LibUV_H MATCHES "#[ \t]*define[ \t]+UV_VERSION_${c}[ \t]+([0-9]+)")
75 set(_LibUV_VERSION_${c} "${CMAKE_MATCH_1}")
77 unset(_LibUV_VERSION_${c})
80 if(DEFINED _LibUV_VERSION_MAJOR AND DEFINED _LibUV_VERSION_MINOR)
81 set(LibUV_VERSION_MAJOR "${_LibUV_VERSION_MAJOR}")
82 set(LibUV_VERSION_MINOR "${_LibUV_VERSION_MINOR}")
83 set(LibUV_VERSION "${LibUV_VERSION_MAJOR}.${LibUV_VERSION_MINOR}")
84 if(DEFINED _LibUV_VERSION_PATCH)
85 set(LibUV_VERSION_PATCH "${_LibUV_VERSION_PATCH}")
86 set(LibUV_VERSION "${LibUV_VERSION}.${LibUV_VERSION_PATCH}")
88 unset(LibUV_VERSION_PATCH)
91 set(LibUV_VERSION_MAJOR "")
92 set(LibUV_VERSION_MINOR "")
93 set(LibUV_VERSION_PATCH "")
96 unset(_LibUV_VERSION_MAJOR)
97 unset(_LibUV_VERSION_MINOR)
98 unset(_LibUV_VERSION_PATCH)
102 #-----------------------------------------------------------------------------
103 include(${CMAKE_CURRENT_LIST_DIR}/../../Modules/FindPackageHandleStandardArgs.cmake)
104 FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibUV
105 FOUND_VAR LibUV_FOUND
106 REQUIRED_VARS LibUV_LIBRARY LibUV_INCLUDE_DIR
107 VERSION_VAR LibUV_VERSION
109 set(LIBUV_FOUND ${LibUV_FOUND})
111 #-----------------------------------------------------------------------------
112 # Provide documented result variables and targets.
114 set(LibUV_INCLUDE_DIRS ${LibUV_INCLUDE_DIR})
115 set(LibUV_LIBRARIES ${LibUV_LIBRARY})
116 if(NOT TARGET LibUV::LibUV)
117 add_library(LibUV::LibUV UNKNOWN IMPORTED)
118 set_target_properties(LibUV::LibUV PROPERTIES
119 IMPORTED_LOCATION "${LibUV_LIBRARY}"
120 INTERFACE_INCLUDE_DIRECTORIES "${LibUV_INCLUDE_DIRS}"