mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
bcad7419bf
Summary: Initial commit to include the fbcode_builder sources in the eden github repository. fbshipit-source-id: 49098cecda04a7e9dd9dcc0b569fffc96f0f719b
78 lines
2.7 KiB
CMake
78 lines
2.7 KiB
CMake
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
# - Find LibEvent (a cross event library)
|
|
# This module defines
|
|
# LIBEVENT_INCLUDE_DIR, where to find LibEvent headers
|
|
# LIBEVENT_LIB, LibEvent libraries
|
|
# LibEvent_FOUND, If false, do not try to use libevent
|
|
|
|
set(LibEvent_EXTRA_PREFIXES /usr/local /opt/local "$ENV{HOME}")
|
|
foreach(prefix ${LibEvent_EXTRA_PREFIXES})
|
|
list(APPEND LibEvent_INCLUDE_PATHS "${prefix}/include")
|
|
list(APPEND LibEvent_LIB_PATHS "${prefix}/lib")
|
|
endforeach()
|
|
|
|
find_package(Libevent CONFIG QUIET)
|
|
if (TARGET event)
|
|
# Re-export the config under our own names
|
|
|
|
# Somewhat gross, but some vcpkg installed libevents have a relative
|
|
# `include` path exported into LIBEVENT_INCLUDE_DIRS, which triggers
|
|
# a cmake error because it resolves to the `include` dir within the
|
|
# folly repo, which is not something cmake allows to be in the
|
|
# INTERFACE_INCLUDE_DIRECTORIES. Thankfully on such a system the
|
|
# actual include directory is already part of the global include
|
|
# directories, so we can just skip it.
|
|
if (NOT "${LIBEVENT_INCLUDE_DIRS}" STREQUAL "include")
|
|
set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS})
|
|
else()
|
|
set(LIBEVENT_INCLUDE_DIR)
|
|
endif()
|
|
|
|
# Unfortunately, with a bare target name `event`, downstream consumers
|
|
# of the package that depends on `Libevent` located via CONFIG end
|
|
# up exporting just a bare `event` in their libraries. This is problematic
|
|
# because this in interpreted as just `-levent` with no library path.
|
|
# When libevent is not installed in the default installation prefix
|
|
# this results in linker errors.
|
|
# To resolve this, we ask cmake to lookup the full path to the library
|
|
# and use that instead.
|
|
cmake_policy(PUSH)
|
|
if(POLICY CMP0026)
|
|
# Allow reading the LOCATION property
|
|
cmake_policy(SET CMP0026 OLD)
|
|
endif()
|
|
get_target_property(LIBEVENT_LIB event LOCATION)
|
|
cmake_policy(POP)
|
|
|
|
set(LibEvent_FOUND ${Libevent_FOUND})
|
|
if (NOT LibEvent_FIND_QUIETLY)
|
|
message(STATUS "Found libevent from package config include=${LIBEVENT_INCLUDE_DIRS} lib=${LIBEVENT_LIB}")
|
|
endif()
|
|
else()
|
|
find_path(LIBEVENT_INCLUDE_DIR event.h PATHS ${LibEvent_INCLUDE_PATHS})
|
|
find_library(LIBEVENT_LIB NAMES event PATHS ${LibEvent_LIB_PATHS})
|
|
|
|
if (LIBEVENT_LIB AND LIBEVENT_INCLUDE_DIR)
|
|
set(LibEvent_FOUND TRUE)
|
|
set(LIBEVENT_LIB ${LIBEVENT_LIB})
|
|
else ()
|
|
set(LibEvent_FOUND FALSE)
|
|
endif ()
|
|
|
|
if (LibEvent_FOUND)
|
|
if (NOT LibEvent_FIND_QUIETLY)
|
|
message(STATUS "Found libevent: ${LIBEVENT_LIB}")
|
|
endif ()
|
|
else ()
|
|
if (LibEvent_FIND_REQUIRED)
|
|
message(FATAL_ERROR "Could NOT find libevent.")
|
|
endif ()
|
|
message(STATUS "libevent NOT found.")
|
|
endif ()
|
|
|
|
mark_as_advanced(
|
|
LIBEVENT_LIB
|
|
LIBEVENT_INCLUDE_DIR
|
|
)
|
|
endif()
|