Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13114975
D5393.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
D5393.diff
View Options
diff --git a/cmake/modules/FindEvent.cmake b/cmake/modules/FindEvent.cmake
--- a/cmake/modules/FindEvent.cmake
+++ b/cmake/modules/FindEvent.cmake
@@ -1,42 +1,87 @@
-# Try to find libevent
-# EVENT_FOUND - system has libevent
-# EVENT_INCLUDE_DIR - the libevent include directory
-# EVENT_LIBRARY - Library needed to use libevent
-# EVENT_PTHREAD_LIBRARY - Library needed to use libevent_pthread
-
-if(EVENT_INCLUDE_DIR AND EVENT_LIBRARY)
- # Already in cache, be silent
- set(EVENT_FIND_QUIETLY TRUE)
+# Copyright (c) 2017-2020 The Bitcoin developers
+# Distributed under the MIT software license, see the accompanying
+# file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#.rst
+# FindEvent
+# -------------
+#
+# Find the Event library. The following components are available::
+#
+# event
+# pthreads
+#
+# This will define the following variables::
+#
+# Event_FOUND - system has Event lib
+# Event_INCLUDE_DIRS - the Event include directories
+# Event_LIBRARIES - Libraries needed to use Event
+# Event_VERSION - The library version MAJOR.MINOR.PATCH
+#
+# And the following imported target::
+#
+# Event::event
+# Event::pthreads
+
+find_package(PkgConfig)
+pkg_check_modules(PC_Event QUIET libevent)
+
+include(BrewHelper)
+find_brew_prefix(BREW_HINT berkeley-db)
+
+find_path(Event_INCLUDE_DIR
+ NAMES event.h
+ PATHS ${PC_Event_INCLUDE_DIRS}
+ HINTS ${BREW_HINT}
+)
+
+set(Event_INCLUDE_DIRS ${Event_INCLUDE_DIR})
+mark_as_advanced(Event_INCLUDE_DIR)
+
+if(Event_INCLUDE_DIR)
+ include(ExternalLibraryHelper)
+
+ find_component(Event event
+ NAMES event
+ HINTS "${BREW_HINT}"
+ INCLUDE_DIRS ${Event_INCLUDE_DIRS}
+ PATHS ${PC_Event_LIBRARY_DIRS}
+ )
+
+ pkg_check_modules(PC_Event_pthreads QUIET event_pthreads libevent_pthreads)
+ find_component(Event pthreads
+ NAMES event_pthreads
+ INCLUDE_DIRS ${Event_INCLUDE_DIRS}
+ PATHS ${PC_Event_pthreads_LIBRARY_DIRS}
+ )
endif()
-find_path(EVENT_INCLUDE_DIR NAMES event.h)
-find_library(EVENT_LIBRARY NAMES event libevent)
-
-if(NOT TARGET Event)
- # Create a library to be used
- add_library(Event STATIC IMPORTED)
- set_target_properties(Event PROPERTIES
- IMPORTED_LOCATION ${EVENT_LIBRARY}
- INTERFACE_INCLUDE_DIRECTORIES ${EVENT_INCLUDE_DIR})
-
- # On windows, libevent depends on ws2_32
- if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
- find_library(WS2_32_LIBRARY NAMES ws2_32)
- set_target_properties(Event PROPERTIES
- IMPORTED_LINK_INTERFACE_LIBRARIES ${WS2_32_LIBRARY})
+if(NOT Event_VERSION)
+ # If pkgconfig found a version number, use it.
+ if(PC_Event_VERSION)
+ set(_Event_VERSION ${PC_Event_VERSION})
+ elseif(NOT CMAKE_CROSSCOMPILING)
+ try_run(_Event_CheckVersion_RESULT _Event_CheckVersion_BUILD
+ "${CMAKE_BINARY_DIR}"
+ "${CMAKE_SOURCE_DIR}/cmake/utils/EventCheckVersion.cpp"
+ CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${Event_INCLUDE_DIRS}"
+ LINK_LIBRARIES "${Event_event_LIBRARY}"
+ RUN_OUTPUT_VARIABLE _Event_VERSION
+ )
else()
- find_library(EVENT_PTHREAD_LIBRARY event_pthreads)
- set_target_properties(Event PROPERTIES
- IMPORTED_LINK_INTERFACE_LIBRARIES ${EVENT_PTHREAD_LIBRARY})
+ # There is no way to determine the version.
+ # Let's assume the user read the doc.
+ set(_Event_VERSION 99.99.99)
endif()
-endif()
-message(STATUS "libevent: " ${EVENT_LIBRARY})
+ set(Event_VERSION ${_Event_VERSION}
+ CACHE INTERNAL "Event library full version"
+ )
+endif()
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Event DEFAULT_MSG EVENT_INCLUDE_DIR EVENT_LIBRARY)
-
-mark_as_advanced(EVENT_INCLUDE_DIR EVENT_LIBRARY)
-
-set(Event_LIBRARIES ${EVENT_LIBRARY})
-set(Event_INCLUDE_DIRS ${EVENT_INCLUDE_DIR})
+find_package_handle_standard_args(Event
+ REQUIRED_VARS Event_INCLUDE_DIR
+ VERSION_VAR Event_VERSION
+ HANDLE_COMPONENTS
+)
diff --git a/cmake/utils/EventCheckVersion.cpp b/cmake/utils/EventCheckVersion.cpp
new file mode 100644
--- /dev/null
+++ b/cmake/utils/EventCheckVersion.cpp
@@ -0,0 +1,12 @@
+#include <event2/event.h>
+#include <cstdint>
+#include <iostream>
+
+int main(int argc, char** argv) {
+ uint32_t version = event_get_version_number();
+ std::cout <<
+ ((version & 0xff000000) >> 24) << "." <<
+ ((version & 0x00ff0000) >> 16) << "." <<
+ ((version & 0x0000ff00) >> 8);
+ return 0;
+}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -489,18 +489,24 @@
versionbits.cpp
)
-# This require libevent
-find_package(Event REQUIRED)
-
target_include_directories(server PRIVATE leveldb/helpers/memenv)
+# This require libevent
+set(EVENT_MIN_VERSION 2.0.22)
+find_package(Event ${EVENT_MIN_VERSION} REQUIRED COMPONENTS event)
+
target_link_libraries(server
- Event
+ Event::event
bitcoinconsensus
leveldb
memenv
)
+if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+ find_package(Event ${EVENT_MIN_VERSION} REQUIRED COMPONENTS pthreads)
+ target_link_libraries(server Event::pthreads)
+endif()
+
if(ENABLE_UPNP)
target_include_directories(server PUBLIC ${MINIUPNPC_INCLUDE_DIR})
target_link_libraries(server ${MINIUPNPC_LIBRARY})
@@ -560,7 +566,7 @@
target_sources(bitcoin-cli PRIVATE bitcoin-cli-res.rc)
endif()
- target_link_libraries(bitcoin-cli common rpcclient Event)
+ target_link_libraries(bitcoin-cli common rpcclient Event::event)
add_to_symbols_check(bitcoin-cli)
add_to_security_check(bitcoin-cli)
diff --git a/src/wallet/CMakeLists.txt b/src/wallet/CMakeLists.txt
--- a/src/wallet/CMakeLists.txt
+++ b/src/wallet/CMakeLists.txt
@@ -7,7 +7,7 @@
# Add event dependency. This is only required for evhttp_uridecode
# in rpcwallet.cpp so it may be worth considering using an alternative.
-find_package(Event REQUIRED)
+find_package(Event 2.0.22 REQUIRED COMPONENTS event)
add_library(wallet
../interfaces/wallet.cpp
@@ -25,4 +25,4 @@
walletutil.cpp
)
-target_link_libraries(wallet script univalue Event BerkeleyDB::CXX)
+target_link_libraries(wallet script univalue Event::event BerkeleyDB::CXX)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 1, 09:00 (1 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187150
Default Alt Text
D5393.diff (5 KB)
Attached To
D5393: [CMAKE] Improve FindEvent
Event Timeline
Log In to Comment