From 6a4b5633d8a636ea5f2e797f4feb3bb8a09c6fec Mon Sep 17 00:00:00 2001 From: Tao He Date: Fri, 29 Jul 2022 19:20:45 +0800 Subject: [PATCH] Reject lower version of gRPC. Signed-off-by: Tao He --- CMakeLists.txt | 7 ++++++- cmake/FindGRPC.cmake | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca3eb7c..537112b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,7 +87,12 @@ else() include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGRPC.cmake) set(GRPC_LIBRARIES ${GPR_LIBRARY} ${GRPC_LIBRARY} ${GRPC_GRPC++_LIBRARY}) endif() - +if(gRPC_FOUND AND gRPC_VERSION VERSION_LESS "1.13") + message(FATAL_ERROR "gRPC '${gRPC_VERSION}' is not supported, please install a newer gRPC library " + "by following the example below" + "\n" + " https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3/blob/master/.github/workflows/build-test.yml#L50-L75") +endif() include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateProtobufGRPC.cmake) # will set `PROTOBUF_GENERATES`, indicates all generated .cc files, and a target `protobuf_generates`. diff --git a/cmake/FindGRPC.cmake b/cmake/FindGRPC.cmake index f2e9132..887558e 100644 --- a/cmake/FindGRPC.cmake +++ b/cmake/FindGRPC.cmake @@ -67,6 +67,32 @@ set_target_properties(gRPC::grpc_cpp_plugin PROPERTIES IMPORTED_LOCATION ${GRPC_CPP_PLUGIN} ) +file( + WRITE "${CMAKE_BINARY_DIR}/get_gRPC_version.cc" +[====[ +#include +#include +int main() { + std::cout << grpc::Version(); // no newline to simplify CMake module + return 0; +} +]====]) + +try_run( + _gRPC_GET_VERSION_STATUS + _gRPC_GET_VERSION_COMPILE_STATUS + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/get_gRPC_version.cc" + LINK_LIBRARIES + gRPC::grpc++ + gRPC::grpc + COMPILE_OUTPUT_VARIABLE _gRPC_GET_VERSION_COMPILE_OUTPUT + RUN_OUTPUT_VARIABLE gRPC_VERSION) + +file(REMOVE "${CMAKE_BINARY_DIR}/get_gRPC_version.cc") + include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(gRPC DEFAULT_MSG - GPR_LIBRARY GRPC_LIBRARY GRPC_INCLUDE_DIR GRPC_GRPC++_REFLECTION_LIBRARY GRPC_CPP_PLUGIN) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(gRPC + FOUND_VAR gRPC_FOUND + REQUIRED_VARS GRPC_LIBRARY GPR_LIBRARY GRPC_INCLUDE_DIR GRPC_GRPC++_REFLECTION_LIBRARY GRPC_CPP_PLUGIN + VERSION_VAR gRPC_VERSION)