summaryrefslogtreecommitdiff
path: root/cmake/LibeventConfig.cmake.in
blob: 582739fadc0609a0a781eb8add9da67efc2ad2d8 (plain)
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# - Config file for the Libevent package
# It defines the following variables
#  LIBEVENT_FOUND            - true if libevent and all required components found on the system
#  LIBEVENT_xxx_FOUND        - true if component xxx(see available components) found on the system
#  LIBEVENT_VERSION          - libevent version in format Major.Minor.Patch
#  LIBEVENT_INCLUDE_DIRS     - directories where libevent header is located.
#  LIBEVENT_INCLUDE_DIR      - same as DIRS
#  LIBEVENT_LIBRARIES        - libevent library to link against.
#  LIBEVENT_LIBRARY          - same as LIBRARIES
#
# These variables are deprecated, don't use them.
#  LIBEVENT_STATIC_LIBRARIES - libraries to link against (archive/static)
#  LIBEVENT_SHARED_LIBRARIES - libraries to link against (shared)
#
# When you try to locate the libevent libraries, you should specify which components you want to use.
# The following table lists all available components. If none is given, all imported targets will used.
#  core        - the core functons of libevent
#  extra       - extra functions, contains http, dns and rpc
#  pthreads    - multiple threads for libevent, not exists on Windows
#  openssl     - openssl support for libevent
#
# By default, the shared libraries of libevent will be found. To find the static ones instead,
# you must set the LIBEVENT_STATIC_LINK variable to TRUE before calling find_package(Libevent ...).
# If no component provided, all components will be used.
# example:
#  set(LIBEVENT_STATIC_LINK TRUE)
#  find_package(Libevent 2.2 REQUIRED COMPONENTS core)
#  include_directories(${LIBEVENT_INCLUDE_DIRS})  # Can be omitted
#  target_link_libraries(myapp ${LIBEVENT_LIBRARIES})
#    or target_link_libraries(myapp libevent::core)
#
# find_package() can handle dependencies automatically. For example, given the 'openssl' component,
# all dependencies (libevent_core, libssl, libcrypto and openssl include directories) will be found.

set(CONFIG_FOR_INSTALL_TREE @CONFIG_FOR_INSTALL_TREE@)

set(LIBEVENT_VERSION @EVENT_PACKAGE_VERSION@)

# IMPORTED targets from LibeventTargets.cmake
set(LIBEVENT_STATIC_LIBRARIES "@LIBEVENT_STATIC_LIBRARIES@")
set(LIBEVENT_SHARED_LIBRARIES "@LIBEVENT_SHARED_LIBRARIES@")

# Default to the same type as libevent was built:
if(NOT DEFINED LIBEVENT_STATIC_LINK)
    set(LIBEVENT_STATIC_LINK NOT @EVENT_LIBRARY_SHARED@)
endif()

set(CMAKE_FIND_LIBRARY_SUFFIXES_SAVE "${CMAKE_FIND_LIBRARY_SUFFIXES}")
if(${LIBEVENT_STATIC_LINK})
    set(_LIB_TYPE static)
    set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
    set(_AVAILABLE_LIBS "${LIBEVENT_STATIC_LIBRARIES}")
else()
    set(_LIB_TYPE shared)
    set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
    set(_AVAILABLE_LIBS "${LIBEVENT_SHARED_LIBRARIES}")
endif()

# Get the path of the current file.
get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)

macro(message_if_needed _flag _msg)
    if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
        message(${_flag} "${_msg}")
    endif()
endmacro()

macro(no_component_msg _comp)
    if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED_${_comp})
        set(pthreadlib)
        if(NOT WIN32)
            set(pthreadlib ", pthreads")
        endif()
        message(FATAL_ERROR "Your libevent library does not contain a ${_comp} component!\n"
                "The valid components are core, extra${pthreadlib} and openssl.")
    else()
        message_if_needed(WARNING "Your libevent library does not contain a ${_comp} component!")
    endif()
endmacro()

set(_EVENT_COMPONENTS)
if(${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
    list(REMOVE_DUPLICATES ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS)
    foreach(_comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS})
        list(FIND _AVAILABLE_LIBS ${_comp} _INDEX)
        if(_INDEX GREATER -1)
            list(APPEND _EVENT_COMPONENTS ${_comp})
        else()
            no_component_msg(${_comp})
        endif()
    endforeach()
else()
    set(_EVENT_COMPONENTS ${_AVAILABLE_LIBS})
endif()

set(_POSSIBLE_PKG_NAMES)
list(APPEND _POSSIBLE_PKG_NAMES ${CMAKE_FIND_PACKAGE_NAME} LIBEVENT Libevent libevent)
list(REMOVE_DUPLICATES _POSSIBLE_PKG_NAMES)

macro(set_case_insensitive_found _comp)
    foreach(name ${_POSSIBLE_PKG_NAMES})
        if("${_comp}" STREQUAL "")
            set(${name}_FOUND TRUE)
            set(${name}_NOTFOUND FALSE)
        else()
            set(${name}_${_comp}_FOUND TRUE)
            set(${name}_${_comp}_NOTFOUND FALSE)
        endif()
    endforeach()
endmacro()

if(CONFIG_FOR_INSTALL_TREE)
    ## Config for install tree ----------------------------------------
    # Find includes
    unset(_event_h CACHE)
    find_path(_event_h
              NAMES event2/event.h
              PATHS "@CMAKE_INSTALL_INCLUDEDIR@"
              NO_DEFAULT_PATH)
    if(_event_h)
        set(LIBEVENT_INCLUDE_DIRS "${_event_h}")
        message_if_needed(STATUS "Found libevent include directory: ${_event_h}")
    else()
        message_if_needed(WARNING "Your libevent library does not contain header files!")
    endif()

    # Find libraries
    macro(find_event_lib _comp)
        unset(_event_lib_dbg CACHE)
        unset(_event_lib_rel CACHE)
        find_library(_event_lib_dbg
                    NAMES "event_${_comp}d"
                    PATHS "${_INSTALL_PREFIX}/lib"
                    NO_DEFAULT_PATH)
        find_library(_event_lib_rel
                    NAMES "event_${_comp}"
                    PATHS "@CMAKE_INSTALL_LIBDIR@"
                    NO_DEFAULT_PATH)
        if(_event_lib_rel OR _event_lib_dbg)
            list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}")
            set_case_insensitive_found(${_comp})
            if(_event_lib_dbg)
                message_if_needed(STATUS "Found libevent component: ${_event_lib_dbg}")
            endif()
            if(_event_lib_rel)
                message_if_needed(STATUS "Found libevent component: ${_event_lib_rel}")
            endif()
        else()
            no_component_msg(${_comp})
        endif()
    endmacro()

    foreach(comp ${_EVENT_COMPONENTS})
        find_event_lib(${comp})
    endforeach()
else()
    ## Config for build tree ----------------------------------------
    set(LIBEVENT_INCLUDE_DIRS "@EVENT__INCLUDE_DIRS@")
    foreach(_comp ${_EVENT_COMPONENTS})
        list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}")
        set_case_insensitive_found(${_comp})
    endforeach()
endif()

set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS})
if(LIBEVENT_LIBRARIES)
    set(LIBEVENT_LIBRARY ${LIBEVENT_LIBRARIES})
    if(CONFIG_FOR_INSTALL_TREE)
        message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in @CMAKE_INSTALL_LIBDIR@")
    else()
        message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${LIBEVENT_CMAKE_DIR}")
    endif()

    # Avoid including targets more than one times
    if(NOT TARGET event_core_${_LIB_TYPE})
        # Include the project Targets file, this contains definitions for IMPORTED targets.
        include(${LIBEVENT_CMAKE_DIR}/LibeventTargets-${_LIB_TYPE}.cmake)
    endif()
else()
    if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED)
        message(FATAL_ERROR "Can not find any libraries for libevent.")
    else()
        message_if_needed(WARNING "Can not find any libraries for libevent.")
    endif()
endif()

set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES_SAVE}")
unset(_LIB_TYPE)
unset(_AVAILABLE_LIBS)
unset(_EVENT_COMPONENTS)
unset(_POSSIBLE_PKG_NAMES)