@@ -3,21 +3,23 @@ option(ENABLE_GRPC_REFLECTION "Link to gRPC Reflection library" OFF)
33# FIXME(kirillbobyrev): Check if gRPC and Protobuf headers can be included at 
44# configure time. 
55find_package (Threads REQUIRED)
6- if  (GRPC_INSTALL_PATH)
7-   # This setup requires gRPC to be built from sources using CMake and installed 
8-   # to ${GRPC_INSTALL_PATH} via -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH}. 
9-   # Libraries will be linked according to gRPC build policy which generates 
10-   # static libraries when BUILD_SHARED_LIBS is Off and dynamic libraries when 
11-   # it's On (NOTE: This is a variable passed to gRPC CMake build invocation, 
12-   # LLVM's BUILD_SHARED_LIBS has no effect). 
13-   set (protobuf_MODULE_COMPATIBLE TRUE )
14-   find_package (Protobuf CONFIG REQUIRED HINTS  ${GRPC_INSTALL_PATH} )
15-   message (STATUS  "Using protobuf ${Protobuf_VERSION} " )
16-   find_package (gRPC CONFIG REQUIRED HINTS  ${GRPC_INSTALL_PATH} )
17-   message (STATUS  "Using gRPC ${gRPC_VERSION} " )
186
19-   include_directories (${Protobuf_INCLUDE_DIRS} )
7+ # Prefer finding gPRC through CMakeConfig and a hint can be provided via 
8+ # GRPC_INSTALL_PATH. This requires gRPC to be built and installed 
9+ # to ${GRPC_INSTALL_PATH} via -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH}. 
10+ # Libraries will be linked according to gRPC build policy which generates 
11+ # static libraries when BUILD_SHARED_LIBS is Off and dynamic libraries when 
12+ # it's On (NOTE: This is a variable passed to gRPC CMake build invocation, 
13+ # LLVM's BUILD_SHARED_LIBS has no effect). 
14+ # Package managers like Homebrew will also install Config.cmake and user can 
15+ # specify GRPC_INSTALL_PATH or CMAKE_PREFIX_PATH to locate installed package. 
16+ set (protobuf_MODULE_COMPATIBLE TRUE )
17+ find_package (Protobuf CONFIG HINTS  ${GRPC_INSTALL_PATH} )
18+ message (STATUS  "Using protobuf ${Protobuf_VERSION} " )
19+ find_package (gRPC CONFIG HINTS  ${GRPC_INSTALL_PATH} )
20+ message (STATUS  "Using gRPC ${gRPC_VERSION} " )
2021
22+ if  (Protobuf_FOUND AND  gRPC_FOUND)
2123  # gRPC CMake CONFIG gives the libraries slightly odd names, make them match 
2224  # the conventional system-installed names. 
2325  set_target_properties (protobuf::libprotobuf PROPERTIES IMPORTED_GLOBAL TRUE )
@@ -32,10 +34,12 @@ if (GRPC_INSTALL_PATH)
3234  set (GRPC_CPP_PLUGIN $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
3335  set (PROTOC ${Protobuf_PROTOC_EXECUTABLE} )
3436else ()
35-   # This setup requires  system-installed gRPC and Protobuf . 
37+   # Now fallback to  system-installed gRPC and ProtoBuf . 
3638  # We always link dynamically in this mode. While the static libraries are 
3739  # usually installed, the CMake files telling us *which* static libraries to 
3840  # link are not. 
41+   # FIXME: this path should not work on newer grpc versions and should be 
42+   # removed in favor of `find_package` implementation. 
3943  if  (NOT  BUILD_SHARED_LIBS )
4044    message (NOTICE "gRPC and Protobuf will be linked dynamically. If you want static linking, build gRPC from sources with -DBUILD_SHARED_LIBS=Off." )
4145  endif ()
@@ -44,55 +48,17 @@ else()
4448  if  (NOT  GRPC_CPP_PLUGIN OR  NOT  PROTOC)
4549    message (FATAL_ERROR "gRPC C++ Plugin and Protoc must be on $PATH for gRPC-enabled build." )
4650  endif ()
47-   # On macOS the libraries are typically installed via Homebrew and are not on 
48-   # the system path. 
49-   set (GRPC_OPTS "" )
50-   set (PROTOBUF_OPTS "" )
51-   set (GRPC_INCLUDE_PATHS "" )
52-   if  (${APPLE} )
53-     find_program (HOMEBREW brew)
54-     # If Homebrew is not found, the user might have installed libraries 
55-     # manually. Fall back to the system path. 
56-     if  (HOMEBREW)
57-       execute_process (COMMAND  ${HOMEBREW}  --prefix  grpc
58-         OUTPUT_VARIABLE  GRPC_HOMEBREW_PATH
59-         RESULT_VARIABLE  GRPC_HOMEBREW_RETURN_CODE
60-         OUTPUT_STRIP_TRAILING_WHITESPACE)
61-       execute_process (COMMAND  ${HOMEBREW}  --prefix  protobuf
62-         OUTPUT_VARIABLE  PROTOBUF_HOMEBREW_PATH
63-         RESULT_VARIABLE  PROTOBUF_HOMEBREW_RETURN_CODE
64-         OUTPUT_STRIP_TRAILING_WHITESPACE)
65-       execute_process (COMMAND  ${HOMEBREW}  --prefix  abseil
66-         OUTPUT_VARIABLE  ABSL_HOMEBREW_PATH
67-         RESULT_VARIABLE  ABSL_HOMEBREW_RETURN_CODE
68-         OUTPUT_STRIP_TRAILING_WHITESPACE)
69-       # If either library is not installed via Homebrew, fall back to the 
70-       # system path. 
71-       if  (GRPC_HOMEBREW_RETURN_CODE EQUAL  "0" )
72-         list (APPEND  GRPC_INCLUDE_PATHS ${GRPC_HOMEBREW_PATH} /include )
73-         list (APPEND  GRPC_OPTS PATHS  ${GRPC_HOMEBREW_PATH} /lib NO_DEFAULT_PATH)
74-       endif ()
75-       if  (PROTOBUF_HOMEBREW_RETURN_CODE EQUAL  "0" )
76-         list (APPEND  GRPC_INCLUDE_PATHS ${PROTOBUF_HOMEBREW_PATH} /include )
77-         list (APPEND  PROTOBUF_OPTS PATHS  ${PROTOBUF_HOMEBREW_PATH} /lib NO_DEFAULT_PATH)
78-       endif ()
79-       if  (ABSL_HOMEBREW_RETURN_CODE EQUAL  "0" )
80-         list (APPEND  GRPC_INCLUDE_PATHS ${ABSL_HOMEBREW_PATH} /include )
81-       endif ()
82-     endif ()
83-   endif ()
8451  if (NOT  TARGET  grpc++)
85-     find_library (GRPC_LIBRARY grpc++ ${GRPC_OPTS}   REQUIRED)
52+     find_library (GRPC_LIBRARY grpc++ REQUIRED)
8653    add_library (grpc++ UNKNOWN IMPORTED  GLOBAL )
8754    message (STATUS  "Using grpc++: "  ${GRPC_LIBRARY} )
8855    set_target_properties (grpc++ PROPERTIES IMPORTED_LOCATION  ${GRPC_LIBRARY} )
89-     target_include_directories (grpc++ INTERFACE  ${GRPC_INCLUDE_PATHS} )
9056    if  (ENABLE_GRPC_REFLECTION)
91-       find_library (GRPC_REFLECTION_LIBRARY grpc++_reflection ${GRPC_OPTS}   REQUIRED)
57+       find_library (GRPC_REFLECTION_LIBRARY grpc++_reflection REQUIRED)
9258      add_library (grpc++_reflection UNKNOWN IMPORTED  GLOBAL )
9359      set_target_properties (grpc++_reflection PROPERTIES IMPORTED_LOCATION  ${GRPC_REFLECTION_LIBRARY} )
9460    endif ()
95-     find_library (PROTOBUF_LIBRARY protobuf ${PROTOBUF_OPTS}   REQUIRED)
61+     find_library (PROTOBUF_LIBRARY protobuf REQUIRED)
9662    message (STATUS  "Using protobuf: "  ${PROTOBUF_LIBRARY} )
9763    add_library (protobuf UNKNOWN IMPORTED  GLOBAL )
9864    set_target_properties (protobuf PROPERTIES IMPORTED_LOCATION  ${PROTOBUF_LIBRARY} )
0 commit comments