1 # - Config file for the Libevent package 2 # It defines the following variables 3 # LIBEVENT_FOUND - true if libevent and all required components found on the system 4 # LIBEVENT_xxx_FOUND - true if component xxx(see available components) found on the system 5 # LIBEVENT_VERSION - libevent version in format Major.Minor.Patch 6 # LIBEVENT_INCLUDE_DIRS - directories where libevent header is located. 7 # LIBEVENT_INCLUDE_DIR - same as DIRS 8 # LIBEVENT_LIBRARIES - libevent library to link against. 9 # LIBEVENT_LIBRARY - same as LIBRARIES 10 # 11 # These variables are deprecated, don't use them. 12 # LIBEVENT_STATIC_LIBRARIES - libraries to link against (archive/static) 13 # LIBEVENT_SHARED_LIBRARIES - libraries to link against (shared) 14 # 15 # When you try to locate the libevent libraries, you should specify which components you want to use. 16 # The following table lists all available components. If none is given, all imported targets will used. 17 # core - the core functons of libevent 18 # extra - extra functions, contains http, dns and rpc 19 # pthreads - multiple threads for libevent, not exists on Windows 20 # openssl - openssl support for libevent 21 # 22 # By default, the shared libraries of libevent will be found. To find the static ones instead, 23 # you must set the LIBEVENT_STATIC_LINK variable to TRUE before calling find_package(Libevent ...). 24 # If no component provided, all components will be used. 25 # example: 26 # set(LIBEVENT_STATIC_LINK TRUE) 27 # find_package(Libevent 2.2 REQUIRED COMPONENTS core) 28 # include_directories(${LIBEVENT_INCLUDE_DIRS}) # Can be omitted 29 # target_link_libraries(myapp ${LIBEVENT_LIBRARIES}) 30 # or target_link_libraries(myapp libevent::core) 31 # 32 # find_package() can handle dependencies automatically. For example, given the 'openssl' component, 33 # all dependencies (libevent_core, libssl, libcrypto and openssl include directories) will be found. 34 35 set(CONFIG_FOR_INSTALL_TREE @CONFIG_FOR_INSTALL_TREE@) 36 37 set(LIBEVENT_VERSION @EVENT_PACKAGE_VERSION@) 38 39 # IMPORTED targets from LibeventTargets.cmake 40 set(LIBEVENT_STATIC_LIBRARIES "@LIBEVENT_STATIC_LIBRARIES@") 41 set(LIBEVENT_SHARED_LIBRARIES "@LIBEVENT_SHARED_LIBRARIES@") 42 43 # Default to the same type as libevent was built: 44 if(NOT DEFINED LIBEVENT_STATIC_LINK) 45 set(LIBEVENT_STATIC_LINK NOT @EVENT_LIBRARY_SHARED@) 46 endif() 47 48 set(CMAKE_FIND_LIBRARY_SUFFIXES_SAVE "${CMAKE_FIND_LIBRARY_SUFFIXES}") 49 if(${LIBEVENT_STATIC_LINK}) 50 set(_LIB_TYPE static) 51 set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) 52 set(_AVAILABLE_LIBS "${LIBEVENT_STATIC_LIBRARIES}") 53 else() 54 set(_LIB_TYPE shared) 55 set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX}) 56 set(_AVAILABLE_LIBS "${LIBEVENT_SHARED_LIBRARIES}") 57 endif() 58 59 # Get the path of the current file. 60 get_filename_component(LIBEVENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) 61 get_filename_component(_INSTALL_PREFIX "${LIBEVENT_CMAKE_DIR}/../../.." ABSOLUTE) 62 63 macro(message_if_needed _flag _msg) 64 if (NOT ${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY) 65 message(${_flag} "${_msg}") 66 endif() 67 endmacro() 68 69 macro(no_component_msg _comp) 70 if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED_${_comp}) 71 set(pthreadlib) 72 if(NOT WIN32) 73 set(pthreadlib ", pthreads") 74 endif() 75 message(FATAL_ERROR "Your libevent library does not contain a ${_comp} component!\n" 76 "The valid components are core, extra${pthreadlib} and openssl.") 77 else() 78 message_if_needed(WARNING "Your libevent library does not contain a ${_comp} component!") 79 endif() 80 endmacro() 81 82 set(_EVENT_COMPONENTS) 83 if(${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) 84 list(REMOVE_DUPLICATES ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) 85 foreach(_comp ${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS}) 86 list(FIND _AVAILABLE_LIBS ${_comp} _INDEX) 87 if(_INDEX GREATER -1) 88 list(APPEND _EVENT_COMPONENTS ${_comp}) 89 else() 90 no_component_msg(${_comp}) 91 endif() 92 endforeach() 93 else() 94 set(_EVENT_COMPONENTS ${_AVAILABLE_LIBS}) 95 endif() 96 97 set(_POSSIBLE_PKG_NAMES) 98 list(APPEND _POSSIBLE_PKG_NAMES ${CMAKE_FIND_PACKAGE_NAME} LIBEVENT Libevent libevent) 99 list(REMOVE_DUPLICATES _POSSIBLE_PKG_NAMES) 100 101 macro(set_case_insensitive_found _comp) 102 foreach(name ${_POSSIBLE_PKG_NAMES}) 103 if("${_comp}" STREQUAL "") 104 set(${name}_FOUND TRUE) 105 set(${name}_NOTFOUND FALSE) 106 else() 107 set(${name}_${_comp}_FOUND TRUE) 108 set(${name}_${_comp}_NOTFOUND FALSE) 109 endif() 110 endforeach() 111 endmacro() 112 113 if(CONFIG_FOR_INSTALL_TREE) 114 ## Config for install tree ---------------------------------------- 115 # Find includes 116 unset(_event_h CACHE) 117 find_path(_event_h 118 NAMES event2/event.h 119 PATHS "${_INSTALL_PREFIX}/include" 120 NO_DEFAULT_PATH) 121 if(_event_h) 122 set(LIBEVENT_INCLUDE_DIRS "${_event_h}") 123 message_if_needed(STATUS "Found libevent include directory: ${_event_h}") 124 else() 125 message_if_needed(WARNING "Your libevent library does not contain header files!") 126 endif() 127 128 # Find libraries 129 macro(find_event_lib _comp) 130 unset(_event_lib CACHE) 131 find_library(_event_lib 132 NAMES "event_${_comp}" 133 PATHS "${_INSTALL_PREFIX}/lib" 134 NO_DEFAULT_PATH) 135 if(_event_lib) 136 list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}") 137 set_case_insensitive_found(${_comp}) 138 message_if_needed(STATUS "Found libevent component: ${_event_lib}") 139 else() 140 no_component_msg(${_comp}) 141 endif() 142 endmacro() 143 144 foreach(comp ${_EVENT_COMPONENTS}) 145 find_event_lib(${comp}) 146 endforeach() 147 else() 148 ## Config for build tree ---------------------------------------- 149 set(LIBEVENT_INCLUDE_DIRS "@EVENT__INCLUDE_DIRS@") 150 foreach(_comp ${_EVENT_COMPONENTS}) 151 list(APPEND LIBEVENT_LIBRARIES "libevent::${_comp}") 152 set_case_insensitive_found(${_comp}) 153 endforeach() 154 endif() 155 156 set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS}) 157 if(LIBEVENT_LIBRARIES) 158 set(LIBEVENT_LIBRARY ${LIBEVENT_LIBRARIES}) 159 if(CONFIG_FOR_INSTALL_TREE) 160 message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${_INSTALL_PREFIX}") 161 else() 162 message_if_needed(STATUS "Found libevent ${LIBEVENT_VERSION} in ${LIBEVENT_CMAKE_DIR}") 163 endif() 164 165 # Avoid including targets more than one times 166 if(NOT TARGET event_core_${_LIB_TYPE}) 167 # Include the project Targets file, this contains definitions for IMPORTED targets. 168 include(${LIBEVENT_CMAKE_DIR}/LibeventTargets-${_LIB_TYPE}.cmake) 169 endif() 170 else() 171 if(${CMAKE_FIND_PACKAGE_NAME}_FIND_REQUIRED) 172 message(FATAL_ERROR "Can not find any libraries for libevent.") 173 else() 174 message_if_needed(WARNING "Can not find any libraries for libevent.") 175 endif() 176 endif() 177 178 set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES_SAVE}") 179 unset(_LIB_TYPE) 180 unset(_AVAILABLE_LIBS) 181 unset(_EVENT_COMPONENTS) 182 unset(_POSSIBLE_PKG_NAMES) 183 unset(_INSTALL_PREFIX) 184