Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 16: [PATCH 16/17] fix(build): classify Homebrew libevent headers as system

cmake/module/FindLibevent.cmake

Before: cmake/module/FindLibevent.cmake · After: cmake/module/FindLibevent.cmake

File metadata
index c006b43d6040865db81e849a1ebb29bfad8091fa..c6f5d35a4f20ac7506d9ed907379b7b010b6e7f0 100644

Download original patch · Release notes

Diff rows 1–63 of 63. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.

cmake/module/FindLibevent.cmake CHANGED
@@ -14,6 +14,47 @@ This is a wrapper around find_package()/pkg_check_modules() commands that:
14
14
 
15
15
  #]=======================================================================]
16
16
 
17
+ function(add_homebrew_libevent_header_alias target)
18
+ if(NOT CMAKE_HOST_APPLE)
19
+ return()
20
+ endif()
21
+ find_program(HOMEBREW_EXECUTABLE brew)
22
+ if(NOT HOMEBREW_EXECUTABLE)
23
+ return()
24
+ endif()
25
+ execute_process(
26
+ COMMAND ${HOMEBREW_EXECUTABLE} --prefix
27
+ OUTPUT_VARIABLE _homebrew_prefix
28
+ RESULT_VARIABLE _homebrew_status
29
+ ERROR_QUIET
30
+ OUTPUT_STRIP_TRAILING_WHITESPACE
31
+ )
32
+ if(NOT _homebrew_status EQUAL 0 OR NOT IS_DIRECTORY "${_homebrew_prefix}/include/event2")
33
+ return()
34
+ endif()
35
+ get_target_property(_libevent_target ${target} ALIASED_TARGET)
36
+ if(NOT _libevent_target)
37
+ set(_libevent_target ${target})
38
+ endif()
39
+ file(REAL_PATH "${_homebrew_prefix}/include/event2" _linked_libevent_headers)
40
+ get_target_property(_libevent_include_dirs ${_libevent_target} INTERFACE_INCLUDE_DIRECTORIES)
41
+ foreach(_libevent_include_dir IN LISTS _libevent_include_dirs)
42
+ if(IS_DIRECTORY "${_libevent_include_dir}/event2")
43
+ file(REAL_PATH "${_libevent_include_dir}/event2" _configured_libevent_headers)
44
+ if(_linked_libevent_headers STREQUAL _configured_libevent_headers)
45
+ # The compiler can select the linked spelling before the Cellar path.
46
+ # Retain its system flag even when CMake filters implicit include paths.
47
+ target_include_directories(${_libevent_target} SYSTEM INTERFACE "${_homebrew_prefix}/include")
48
+ target_compile_options(${_libevent_target} INTERFACE
49
+ "$<$<COMPILE_LANGUAGE:CXX>:SHELL:-isystem \"${_homebrew_prefix}/include\">"
50
+ )
51
+ message(STATUS "Using matching Homebrew Libevent header alias for ${target}: ${_homebrew_prefix}/include")
52
+ break()
53
+ endif()
54
+ endif()
55
+ endforeach()
56
+ endfunction()
57
+
17
58
  # Check whether evhttp_connection_get_peer expects const char**.
18
59
  # See https://github.com/libevent/libevent/commit/a18301a2bb160ff7c3ffaf5b7653c39ffe27b385
19
60
  function(check_evhttp_connection_get_peer target)
@@ -59,6 +100,9 @@ if(Libevent_FOUND)
59
100
  REQUIRED_VARS Libevent_DIR
60
101
  VERSION_VAR Libevent_VERSION
61
102
  )
103
+ foreach(component IN LISTS _libevent_components)
104
+ add_homebrew_libevent_header_alias(libevent::${component})
105
+ endforeach()
62
106
  check_evhttp_connection_get_peer(libevent::extra)
63
107
  else()
64
108
  find_package(PkgConfig REQUIRED)
@@ -71,6 +115,7 @@ else()
71
115
  if(TARGET PkgConfig::libevent_${component} AND NOT TARGET libevent::${component})
72
116
  add_library(libevent::${component} ALIAS PkgConfig::libevent_${component})
73
117
  endif()
118
+ add_homebrew_libevent_header_alias(libevent::${component})
74
119
  endforeach()
75
120
  find_package_handle_standard_args(Libevent
76
121
  REQUIRED_VARS libevent_core_LIBRARY_DIRS