CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / Modules / FindLibUV.cmake
blob0554d62c23b0cf6f1a29e94f8e7ca0d61524f769
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:
5 FindLibUV
6 ---------
8 Find libuv includes and library.
10 Imported Targets
11 ^^^^^^^^^^^^^^^^
13 An :ref:`imported target <Imported targets>` named
14 ``LibUV::LibUV`` is provided if libuv has been found.
16 Result Variables
17 ^^^^^^^^^^^^^^^^
19 This module defines the following variables:
21 ``LibUV_FOUND``
22   True if libuv was found, false otherwise.
23 ``LibUV_INCLUDE_DIRS``
24   Include directories needed to include libuv headers.
25 ``LibUV_LIBRARIES``
26   Libraries needed to link to libuv.
27 ``LibUV_VERSION``
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.
36 Cache Variables
37 ^^^^^^^^^^^^^^^
39 This module uses the following cache variables:
41 ``LibUV_LIBRARY``
42   The location of the libuv library file.
43 ``LibUV_INCLUDE_DIR``
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
52   NAMES uv libuv
53   )
54 mark_as_advanced(LibUV_LIBRARY)
56 find_path(LibUV_INCLUDE_DIR
57   NAMES uv.h
58   )
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}")
70 else()
71   set(_LibUV_H "")
72 endif()
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}")
76   else()
77     unset(_LibUV_VERSION_${c})
78   endif()
79 endforeach()
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}")
87   else()
88     unset(LibUV_VERSION_PATCH)
89   endif()
90 else()
91   set(LibUV_VERSION_MAJOR "")
92   set(LibUV_VERSION_MINOR "")
93   set(LibUV_VERSION_PATCH "")
94   set(LibUV_VERSION "")
95 endif()
96 unset(_LibUV_VERSION_MAJOR)
97 unset(_LibUV_VERSION_MINOR)
98 unset(_LibUV_VERSION_PATCH)
99 unset(_LibUV_H_REGEX)
100 unset(_LibUV_H)
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
108   )
109 set(LIBUV_FOUND ${LibUV_FOUND})
111 #-----------------------------------------------------------------------------
112 # Provide documented result variables and targets.
113 if(LibUV_FOUND)
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}"
121       )
122   endif()
123 endif()