From 318631757917844d38dd3d8ca37c9745bfa8184a Mon Sep 17 00:00:00 2001 From: Tao He Date: Tue, 31 Jan 2023 12:30:13 +0800 Subject: [PATCH] Reliable macro condition to adapt to different version of gRPC. Signed-off-by: Tao He --- CMakeLists.txt | 18 ++++--------- etcd/Client.hpp | 30 +++++++++++----------- etcd/SyncClient.hpp | 18 ++++++------- src/Client.cpp | 46 +++++----------------------------- src/SyncClient.cpp | 61 +++++++++++---------------------------------- 5 files changed, 50 insertions(+), 123 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a735cb..04ee145 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,6 +122,7 @@ else() include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindGRPC.cmake) set(GRPC_LIBRARIES ${GPR_LIBRARY} ${GRPC_LIBRARY} ${GRPC_GRPC++_LIBRARY}) endif() +message("-- Found GRPC: ${GRPC_LIBRARIES} (found version: \"${gRPC_VERSION}\")") # avoid use the apt-get installed libgrpc-dev (version v1.13) on Ubuntu 18.04 if(gRPC_FOUND AND gRPC_VERSION VERSION_LESS "1.14") message(FATAL_ERROR "gRPC '${gRPC_VERSION}' is not supported, please install a newer gRPC library " @@ -131,6 +132,10 @@ if(gRPC_FOUND AND gRPC_VERSION VERSION_LESS "1.14") endif() include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateProtobufGRPC.cmake) +if(gRPC_VERSION VERSION_LESS "1.21" OR gRPC_VERSION VERSION_GREATER "1.31") + add_definitions(-DWITH_GRPC_CHANNEL_CLASS) +endif() + # will set `PROTOBUF_GENERATES`, indicates all generated .cc files, and a target `protobuf_generates`. include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateProtobuf.cmake) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/proto) @@ -153,19 +158,6 @@ if(W_NO_CPP17_EXTENSIONS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++17-extensions") endif() -set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11") -set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${GRPC_INCLUDE_DIR}") -set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${GRPC_LIBRARIES}") -set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") -check_cxx_source_compiles(" -#include -namespace grpc { class Channel; } -int main() {} -" GRPC_CHANNEL_CLASS_FOUND) -if(GRPC_CHANNEL_CLASS_FOUND) - add_definitions(-DWITH_GRPC_CHANNEL_CLASS) -endif() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) add_subdirectory(src) diff --git a/etcd/Client.hpp b/etcd/Client.hpp index 43e84d3..9c01d4e 100644 --- a/etcd/Client.hpp +++ b/etcd/Client.hpp @@ -81,11 +81,11 @@ namespace etcd */ static Client *WithUrl(std::string const & etcd_url, #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments + grpc::ChannelArguments const & arguments #else - grpc_impl::ChannelArguments const & arguments + grpc_impl::ChannelArguments const & arguments #endif - ); + ); /** * Constructs an etcd client object. @@ -153,15 +153,15 @@ namespace etcd * Default value should be 300. */ static Client *WithUser(std::string const & etcd_url, - std::string const & username, - std::string const & password, - int const auth_token_ttl, + std::string const & username, + std::string const & password, + int const auth_token_ttl, #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments + grpc::ChannelArguments const & arguments #else - grpc_impl::ChannelArguments const & arguments + grpc_impl::ChannelArguments const & arguments #endif - ); + ); /** * Constructs an etcd client object. @@ -237,14 +237,14 @@ namespace etcd */ static Client *WithSSL(std::string const & etcd_url, #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments, + grpc::ChannelArguments const & arguments, #else - grpc_impl::ChannelArguments const & arguments, + grpc_impl::ChannelArguments const & arguments, #endif - std::string const & ca, - std::string const & cert = "", - std::string const & privkey = "", - std::string const & target_name_override = ""); + std::string const & ca, + std::string const & cert = "", + std::string const & privkey = "", + std::string const & target_name_override = ""); ~Client(); diff --git a/etcd/SyncClient.hpp b/etcd/SyncClient.hpp index 121c2be..9d2712a 100644 --- a/etcd/SyncClient.hpp +++ b/etcd/SyncClient.hpp @@ -134,11 +134,11 @@ namespace etcd */ static SyncClient *WithUrl(std::string const & etcd_url, #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments + grpc::ChannelArguments const & arguments #else - grpc_impl::ChannelArguments const & arguments + grpc_impl::ChannelArguments const & arguments #endif - ); + ); /** * Constructs an etcd client object. @@ -293,14 +293,14 @@ namespace etcd */ static SyncClient *WithSSL(std::string const & etcd_url, #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments, + grpc::ChannelArguments const & arguments, #else - grpc_impl::ChannelArguments const & arguments, + grpc_impl::ChannelArguments const & arguments, #endif - std::string const & ca, - std::string const & cert = "", - std::string const & privkey = "", - std::string const & target_name_override = ""); + std::string const & ca, + std::string const & cert = "", + std::string const & privkey = "", + std::string const & target_name_override = ""); ~SyncClient(); diff --git a/src/Client.cpp b/src/Client.cpp index 028ad72..3894ad6 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -82,13 +82,7 @@ etcd::Client::Client(std::string const & address, } etcd::Client::Client(std::string const & address, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) + grpc::ChannelArguments const & arguments) { this->own_client = true; this->client = new SyncClient(address, arguments); @@ -100,13 +94,7 @@ etcd::Client *etcd::Client::WithUrl(std::string const & etcd_url, } etcd::Client *etcd::Client::WithUrl(std::string const & etcd_url, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) { + grpc::ChannelArguments const & arguments) { return new etcd::Client(etcd_url, arguments); } @@ -124,13 +112,7 @@ etcd::Client::Client(std::string const & address, std::string const & username, std::string const & password, int const auth_token_ttl, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) + grpc::ChannelArguments const & arguments) { this->own_client = true; this->client = new SyncClient(address, username, password, auth_token_ttl, arguments); @@ -148,13 +130,7 @@ etcd::Client *etcd::Client::WithUser(std::string const & etcd_url, std::string const & username, std::string const & password, int const auth_token_ttl, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) { + grpc::ChannelArguments const & arguments) { return new etcd::Client(etcd_url, username, password, auth_token_ttl, arguments); } @@ -175,13 +151,7 @@ etcd::Client::Client(std::string const & address, std::string const & cert, std::string const & privkey, std::string const & target_name_override, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) + grpc::ChannelArguments const & arguments) { this->own_client = true; this->client = new SyncClient(address, ca, cert, privkey, target_name_override, arguments); @@ -197,11 +167,7 @@ etcd::Client *etcd::Client::WithSSL(std::string const & etcd_url, } etcd::Client *etcd::Client::WithSSL(std::string const & etcd_url, -#if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments, -#else - grpc_impl::ChannelArguments const & arguments, -#endif + grpc::ChannelArguments const & arguments, std::string const & ca, std::string const & cert, std::string const & privkey, diff --git a/src/SyncClient.cpp b/src/SyncClient.cpp index 7114f1a..3e7d702 100644 --- a/src/SyncClient.cpp +++ b/src/SyncClient.cpp @@ -271,12 +271,7 @@ etcd::SyncClient::SyncClient(std::string const & address, } etcd::SyncClient::SyncClient(std::string const & address, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - ) + grpc::ChannelArguments const & arguments) { // create channels std::string const addresses = etcd::detail::strip_and_resolve_addresses(address); @@ -302,12 +297,7 @@ etcd::SyncClient *etcd::SyncClient::WithUrl(std::string const & etcd_url, } etcd::SyncClient *etcd::SyncClient::WithUrl(std::string const & etcd_url, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - ) { + grpc::ChannelArguments const & arguments) { return new etcd::SyncClient(etcd_url, arguments); } @@ -342,13 +332,7 @@ etcd::SyncClient::SyncClient(std::string const & address, std::string const & username, std::string const & password, int const auth_token_ttl, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) + grpc::ChannelArguments const & arguments) { // create channels std::string const addresses = etcd::detail::strip_and_resolve_addresses(address); @@ -382,12 +366,7 @@ etcd::SyncClient *etcd::SyncClient::WithUser(std::string const & etcd_url, std::string const & username, std::string const & password, int const auth_token_ttl, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - ) { + grpc::ChannelArguments const & arguments) { return new etcd::SyncClient(etcd_url, username, password, auth_token_ttl, arguments); } @@ -427,13 +406,7 @@ etcd::SyncClient::SyncClient(std::string const & address, std::string const & cert, std::string const & privkey, std::string const & target_name_override, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments -#else - grpc_impl::ChannelArguments const & arguments -#endif - - ) + grpc::ChannelArguments const & arguments) { // create channels std::string const addresses = etcd::detail::strip_and_resolve_addresses(address); @@ -458,24 +431,20 @@ etcd::SyncClient::SyncClient(std::string const & address, } etcd::SyncClient *etcd::SyncClient::WithSSL(std::string const & etcd_url, - std::string const & ca, - std::string const & cert, - std::string const & privkey, - std::string const & target_name_override, - std::string const & load_balancer) { + std::string const & ca, + std::string const & cert, + std::string const & privkey, + std::string const & target_name_override, + std::string const & load_balancer) { return new etcd::SyncClient(etcd_url, ca, cert, privkey, target_name_override, load_balancer); } etcd::SyncClient *etcd::SyncClient::WithSSL(std::string const & etcd_url, - #if defined(WITH_GRPC_CHANNEL_CLASS) - grpc::ChannelArguments const & arguments, -#else - grpc_impl::ChannelArguments const & arguments, -#endif - std::string const & ca, - std::string const & cert, - std::string const & privkey, - std::string const & target_name_override) { + grpc::ChannelArguments const & arguments, + std::string const & ca, + std::string const & cert, + std::string const & privkey, + std::string const & target_name_override) { return new etcd::SyncClient(etcd_url, ca, cert, privkey, target_name_override, arguments); }