mirror of
https://gitee.com/openharmony/third_party_nghttp2
synced 2024-11-23 07:50:02 +00:00
6c17ed7e61
On my x86_64 Gentoo Linux, the CMake build won't find libevent because Gentoo wraps include files via multilib-aware wrappers. This means that the "real" include file lives in /usr/include/x86_64-pc-linux-gnu/event2/event-config.h , and that there's a proxy file at /usr/include/event2/event-config.h which check the compile target's architecture and includes the real file from a correct directory. In other words, nghttp2's CMake FindLibevent.cmake reads a wrong file and ends up not detecting the libevent's version. This patch fixes it by simply using the version reported by pkg-config as the libevent's version if the original method fails. I will be happy to change this patch to always check version from pkg-config if you're OK with that. Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz>
98 lines
3.4 KiB
CMake
98 lines
3.4 KiB
CMake
# - Try to find libevent
|
|
#.rst
|
|
# FindLibevent
|
|
# ------------
|
|
#
|
|
# Find Libevent include directories and libraries. Invoke as::
|
|
#
|
|
# find_package(Libevent
|
|
# [version] [EXACT] # Minimum or exact version
|
|
# [REQUIRED] # Fail if Libevent is not found
|
|
# [COMPONENT <C>...]) # Libraries to look for
|
|
#
|
|
# Valid components are one or more of:: libevent core extra pthreads openssl.
|
|
# Note that 'libevent' contains both core and extra. You must specify one of
|
|
# them for the other components.
|
|
#
|
|
# This module will define the following variables::
|
|
#
|
|
# LIBEVENT_FOUND - True if headers and requested libraries were found
|
|
# LIBEVENT_INCLUDE_DIRS - Libevent include directories
|
|
# LIBEVENT_LIBRARIES - Libevent libraries to be linked
|
|
# LIBEVENT_<C>_FOUND - Component <C> was found (<C> is uppercase)
|
|
# LIBEVENT_<C>_LIBRARY - Library to be linked for Libevent component <C>.
|
|
|
|
find_package(PkgConfig QUIET)
|
|
pkg_check_modules(PC_LIBEVENT QUIET libevent)
|
|
|
|
# Look for the Libevent 2.0 or 1.4 headers
|
|
find_path(LIBEVENT_INCLUDE_DIR
|
|
NAMES
|
|
event2/event-config.h
|
|
event-config.h
|
|
HINTS
|
|
${PC_LIBEVENT_INCLUDE_DIRS}
|
|
)
|
|
|
|
if(LIBEVENT_INCLUDE_DIR)
|
|
set(_version_regex "^#define[ \t]+_EVENT_VERSION[ \t]+\"([^\"]+)\".*")
|
|
if(EXISTS "${LIBEVENT_INCLUDE_DIR}/event2/event-config.h")
|
|
# Libevent 2.0
|
|
file(STRINGS "${LIBEVENT_INCLUDE_DIR}/event2/event-config.h"
|
|
LIBEVENT_VERSION REGEX "${_version_regex}")
|
|
if("${LIBEVENT_VERSION}" STREQUAL "")
|
|
set(LIBEVENT_VERSION ${PC_LIBEVENT_VERSION})
|
|
endif()
|
|
else()
|
|
# Libevent 1.4
|
|
file(STRINGS "${LIBEVENT_INCLUDE_DIR}/event-config.h"
|
|
LIBEVENT_VERSION REGEX "${_version_regex}")
|
|
endif()
|
|
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
LIBEVENT_VERSION "${LIBEVENT_VERSION}")
|
|
unset(_version_regex)
|
|
endif()
|
|
|
|
set(_LIBEVENT_REQUIRED_VARS)
|
|
foreach(COMPONENT ${Libevent_FIND_COMPONENTS})
|
|
set(_LIBEVENT_LIBNAME libevent)
|
|
# Note: compare two variables to avoid a CMP0054 policy warning
|
|
if(COMPONENT STREQUAL _LIBEVENT_LIBNAME)
|
|
set(_LIBEVENT_LIBNAME event)
|
|
else()
|
|
set(_LIBEVENT_LIBNAME "event_${COMPONENT}")
|
|
endif()
|
|
string(TOUPPER "${COMPONENT}" COMPONENT_UPPER)
|
|
find_library(LIBEVENT_${COMPONENT_UPPER}_LIBRARY
|
|
NAMES ${_LIBEVENT_LIBNAME}
|
|
HINTS ${PC_LIBEVENT_LIBRARY_DIRS}
|
|
)
|
|
if(LIBEVENT_${COMPONENT_UPPER}_LIBRARY)
|
|
set(Libevent_${COMPONENT}_FOUND 1)
|
|
endif()
|
|
list(APPEND _LIBEVENT_REQUIRED_VARS LIBEVENT_${COMPONENT_UPPER}_LIBRARY)
|
|
endforeach()
|
|
unset(_LIBEVENT_LIBNAME)
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
# handle the QUIETLY and REQUIRED arguments and set LIBEVENT_FOUND to TRUE
|
|
# if all listed variables are TRUE and the requested version matches.
|
|
find_package_handle_standard_args(Libevent REQUIRED_VARS
|
|
${_LIBEVENT_REQUIRED_VARS}
|
|
LIBEVENT_INCLUDE_DIR
|
|
VERSION_VAR LIBEVENT_VERSION
|
|
HANDLE_COMPONENTS)
|
|
|
|
if(LIBEVENT_FOUND)
|
|
set(LIBEVENT_INCLUDE_DIRS ${LIBEVENT_INCLUDE_DIR})
|
|
set(LIBEVENT_LIBRARIES)
|
|
foreach(COMPONENT ${Libevent_FIND_COMPONENTS})
|
|
string(TOUPPER "${COMPONENT}" COMPONENT_UPPER)
|
|
list(APPEND LIBEVENT_LIBRARIES ${LIBEVENT_${COMPONENT_UPPER}_LIBRARY})
|
|
set(LIBEVENT_${COMPONENT_UPPER}_FOUND ${Libevent_${COMPONENT}_FOUND})
|
|
endforeach()
|
|
endif()
|
|
|
|
mark_as_advanced(LIBEVENT_INCLUDE_DIR ${_LIBEVENT_REQUIRED_VARS})
|
|
unset(_LIBEVENT_REQUIRED_VARS)
|