-
Notifications
You must be signed in to change notification settings - Fork 213
/
FindLibevent.cmake
148 lines (125 loc) · 4.19 KB
/
FindLibevent.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# Copyright 2019-2022, Collabora, Ltd.
#
# SPDX-License-Identifier: BSL-1.0
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
#
# Original Author:
# 2019, 2021, 2022 Rylie Pavlik <[email protected]>
#[[.rst:
FindLibevent
---------------
Find the libevent library.
Components
^^^^^^^^^^
The following components are supported:
* ``core`` - core functionality
* ``extra`` - extra functions (http, dns, rpc)
* ``pthreads`` - multithreading (not avail on windows)
* ``openssl` - OpenSSL support
If none are specified, the default is ``core``.
Targets
^^^^^^^
If successful, the following imported targets are created, based on selected/found components
* ``Libevent::core``
* ``Libevent::extra``
* ``Libevent::pthreads``
* ``Libevent::openssl``
Cache variables
^^^^^^^^^^^^^^^
The following cache variable may also be set to assist/control the operation of this module:
``Libevent_ROOT_DIR``
The root to search for libevent.
#]]
set(Libevent_ROOT_DIR
"${Libevent_ROOT_DIR}"
CACHE PATH "Root to search for libevent")
if(NOT Libevent_FIND_COMPONENTS)
set(Libevent_FIND_COMPONENTS core)
endif()
# Todo: handle in-tree/fetch-content builds?
if(NOT LIBEVENT_FOUND)
# Look for a CMake config file
find_package(Libevent QUIET NO_MODULE)
endif()
set(_known_components core extra openssl)
if(NOT WIN32)
list(APPEND _known_components pthreads)
endif()
set(_got_targets FALSE)
foreach(_component ${_known_components})
if(TARGET libevent::${_component})
set(Libevent_${_component}_FOUND TRUE)
set(Libevent_${_component}_LIBRARY libevent::${_component})
set(_got_targets TRUE)
endif()
endforeach()
if(NOT ANDROID)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
set(_old_prefix_path "${CMAKE_PREFIX_PATH}")
# So pkg-config uses Libevent_ROOT_DIR too.
if(Libevent_ROOT_DIR)
list(APPEND CMAKE_PREFIX_PATH ${Libevent_ROOT_DIR})
endif()
foreach(_component ${_known_components})
pkg_check_modules(PC_Libevent_${_component} QUIET
libevent_${_component})
endforeach()
# Restore
set(CMAKE_PREFIX_PATH "${_old_prefix_path}")
endif()
endif()
find_path(
Libevent_INCLUDE_DIR
NAMES event2/event.h
PATHS ${Libevent_ROOT_DIR}
HINTS ${PC_Libevent_INCLUDE_DIRS} ${LIBEVENT_INCLUDE_DIRS}
PATH_SUFFIXES include)
foreach(_component ${_known_components})
find_library(
Libevent_${_component}_LIBRARY
NAMES event_${_component}
PATHS ${Libevent_ROOT_DIR}
HINTS ${PC_Libevent_${_component}_LIBRARY_DIRS}
PATH_SUFFIXES lib)
if(Libevent_${_component}_LIBRARY)
set(Libevent_${_component}_FOUND TRUE)
endif()
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
Libevent
REQUIRED_VARS Libevent_INCLUDE_DIR
HANDLE_COMPONENTS)
if(Libevent_FOUND)
foreach(_component ${_known_components})
mark_as_advanced(Libevent_${_component}_LIBRARY)
if(Libevent_${_component}_FOUND AND NOT TARGET Libevent::${_component})
if(TARGET ${Libevent_${_component}_LIBRARY})
# we want an alias
add_library(Libevent::${_component} ALIAS
${Libevent_${_component}_LIBRARY})
else()
# we want an imported target
add_library(Libevent::${_component} UNKNOWN IMPORTED)
set_target_properties(
Libevent::${_component}
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
"${Libevent_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION
${Libevent_${_component}_LIBRARY})
endif()
endif()
endforeach()
mark_as_advanced(Libevent_INCLUDE_DIR)
endif()
mark_as_advanced(Libevent_ROOT_DIR Libevent_LIBRT Libevent_LIBM)
include(FeatureSummary)
set_package_properties(
Libevent PROPERTIES
URL "https://libevent.org/"
DESCRIPTION "An event-notification library.")