This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 2a2c253c57 GH-36479: [C++][FlightRPC] Use gRPC version detected by 
find_package() (#36581)
2a2c253c57 is described below

commit 2a2c253c57b4299a98ee3c7ad84b1d9479e39b8b
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Jul 10 11:18:39 2023 +0900

    GH-36479: [C++][FlightRPC] Use gRPC version detected by find_package() 
(#36581)
    
    ### Rationale for this change
    
    We don't need to use `try_compile()` by using gRPC version detected by 
`find_package()`.
    
    ### What changes are included in this PR?
    
    Use  gRPC version detected by `find_package()`.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    No.
    * Closes: #36479
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 ci/scripts/cpp_build.sh                            |  1 -
 cpp/cmake_modules/FindgRPCAlt.cmake                |  5 +-
 cpp/cmake_modules/ThirdpartyToolchain.cmake        |  9 ++-
 cpp/src/arrow/flight/CMakeLists.txt                | 83 +++-------------------
 .../arrow/flight/try_compile/check_tls_opts_127.cc | 36 ----------
 .../arrow/flight/try_compile/check_tls_opts_132.cc | 36 ----------
 .../arrow/flight/try_compile/check_tls_opts_134.cc | 44 ------------
 .../arrow/flight/try_compile/check_tls_opts_136.cc | 38 ----------
 .../arrow/flight/try_compile/check_tls_opts_143.cc | 37 ----------
 9 files changed, 22 insertions(+), 267 deletions(-)

diff --git a/ci/scripts/cpp_build.sh b/ci/scripts/cpp_build.sh
index 9854c5ff16..91a570be97 100755
--- a/ci/scripts/cpp_build.sh
+++ b/ci/scripts/cpp_build.sh
@@ -109,7 +109,6 @@ cmake \
   -DARROW_EXTRA_ERROR_CONTEXT=${ARROW_EXTRA_ERROR_CONTEXT:-OFF} \
   -DARROW_FILESYSTEM=${ARROW_FILESYSTEM:-ON} \
   -DARROW_FLIGHT=${ARROW_FLIGHT:-OFF} \
-  
-DARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS=${ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS:-OFF}
 \
   -DARROW_FLIGHT_SQL=${ARROW_FLIGHT_SQL:-OFF} \
   -DARROW_FUZZING=${ARROW_FUZZING:-OFF} \
   -DARROW_GANDIVA_PC_CXX_FLAGS=${ARROW_GANDIVA_PC_CXX_FLAGS:-} \
diff --git a/cpp/cmake_modules/FindgRPCAlt.cmake 
b/cpp/cmake_modules/FindgRPCAlt.cmake
index 4e38605235..c5d8c8a812 100644
--- a/cpp/cmake_modules/FindgRPCAlt.cmake
+++ b/cpp/cmake_modules/FindgRPCAlt.cmake
@@ -33,8 +33,10 @@ pkg_check_modules(GRPCPP_PC grpc++)
 if(GRPCPP_PC_FOUND)
   set(gRPCAlt_VERSION "${GRPCPP_PC_VERSION}")
   set(GRPCPP_INCLUDE_DIRECTORIES ${GRPCPP_PC_INCLUDEDIR})
+  # gRPC's pkg-config file neglects to specify pthreads.
+  find_package(Threads REQUIRED)
   if(ARROW_GRPC_USE_SHARED)
-    set(GRPCPP_LINK_LIBRARIES ${GRPCPP_PC_LINK_LIBRARIES})
+    set(GRPCPP_LINK_LIBRARIES ${GRPCPP_PC_LINK_LIBRARIES} Threads::Threads)
     set(GRPCPP_LINK_OPTIONS ${GRPCPP_PC_LDFLAGS_OTHER})
     set(GRPCPP_COMPILE_OPTIONS ${GRPCPP_PC_CFLAGS_OTHER})
   else()
@@ -45,6 +47,7 @@ if(GRPCPP_PC_FOUND)
                    HINTS ${GRPCPP_PC_STATIC_LIBRARY_DIRS})
       list(APPEND GRPCPP_LINK_LIBRARIES 
"${GRPCPP_LIBRARY_${GRPCPP_LIBRARY_NAME}}")
     endforeach()
+    list(APPEND GRPCPP_LINK_LIBRARIES Threads::Threads)
     set(GRPCPP_LINK_OPTIONS ${GRPCPP_PC_STATIC_LDFLAGS_OTHER})
     set(GRPCPP_COMPILE_OPTIONS ${GRPCPP_PC_STATIC_CFLAGS_OTHER})
   endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 4a19e226f7..c9ad4f665b 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -3971,7 +3971,7 @@ macro(build_grpc)
 endmacro()
 
 if(ARROW_WITH_GRPC)
-  set(ARROW_GRPC_REQUIRED_VERSION "1.17.0")
+  set(ARROW_GRPC_REQUIRED_VERSION "1.30.0")
   if(NOT Protobuf_SOURCE STREQUAL gRPC_SOURCE)
     # ARROW-15495: Protobuf/gRPC must come from the same source
     message(STATUS "Forcing gRPC_SOURCE to Protobuf_SOURCE 
(${Protobuf_SOURCE})")
@@ -3986,10 +3986,17 @@ if(ARROW_WITH_GRPC)
                      grpc++)
 
   if(GRPC_VENDORED)
+    # Remove "v" from "vX.Y.Z"
+    string(SUBSTRING ${ARROW_GRPC_BUILD_VERSION} 1 -1 ARROW_GRPC_VERSION)
     set(GRPCPP_PP_INCLUDE TRUE)
     # Examples need to link to static Arrow if we're using static gRPC
     set(ARROW_GRPC_USE_SHARED OFF)
   else()
+    if(gRPCAlt_VERSION)
+      set(ARROW_GRPC_VERSION ${gRPCAlt_VERSION})
+    else()
+      set(ARROW_GRPC_VERSION ${gRPC_VERSION})
+    endif()
     # grpc++ headers may reside in ${GRPC_INCLUDE_DIR}/grpc++ or 
${GRPC_INCLUDE_DIR}/grpcpp
     # depending on the gRPC version.
     get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++ 
INTERFACE_INCLUDE_DIRECTORIES)
diff --git a/cpp/src/arrow/flight/CMakeLists.txt 
b/cpp/src/arrow/flight/CMakeLists.txt
index 917c0c3321..7383a7eec9 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -102,84 +102,21 @@ set(CMAKE_CXX_FLAGS_BACKUP "${CMAKE_CXX_FLAGS}")
 string(REPLACE "/WX" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 string(REPLACE "-Werror " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 
-# Probe the version of gRPC being used to see if it supports disabling server
-# verification when using TLS.
-# gRPC's pkg-config file neglects to specify pthreads.
-find_package(Threads REQUIRED)
-function(test_grpc_version DST_VAR DETECT_VERSION TEST_FILE)
-  if(NOT DEFINED ${DST_VAR})
-    message(STATUS "Checking support for TlsCredentialsOptions (gRPC >= 
${DETECT_VERSION})..."
-    )
-    get_property(CURRENT_INCLUDE_DIRECTORIES
-                 DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                 PROPERTY INCLUDE_DIRECTORIES)
-    # ARROW-13881: when detecting support, avoid mismatch between
-    # debug flags of gRPC and our probe (which results in LNK2038)
-    set(CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
-    try_compile(HAS_GRPC_VERSION ${CMAKE_CURRENT_BINARY_DIR}/try_compile
-                SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/try_compile/${TEST_FILE}"
-                CMAKE_FLAGS 
"-DINCLUDE_DIRECTORIES=${CURRENT_INCLUDE_DIRECTORIES}"
-                LINK_LIBRARIES gRPC::grpc++ Threads::Threads
-                OUTPUT_VARIABLE TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT 
CXX_STANDARD 11)
-    if(HAS_GRPC_VERSION)
-      set(${DST_VAR}
-          "${DETECT_VERSION}"
-          CACHE INTERNAL "The detected (approximate) gRPC version.")
-    else()
-      message(STATUS "TlsCredentialsOptions (for gRPC ${DETECT_VERSION}) not 
found in grpc::experimental."
-      )
-      if(ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS)
-        message(WARNING "Build output:")
-        list(APPEND CMAKE_MESSAGE_INDENT "${TEST_FILE}: ")
-        message(WARNING ${TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT})
-        list(REMOVE_AT CMAKE_MESSAGE_INDENT -1)
-      else()
-        message(DEBUG "Build output:")
-        list(APPEND CMAKE_MESSAGE_INDENT "${TEST_FILE}: ")
-        message(DEBUG ${TLS_CREDENTIALS_OPTIONS_CHECK_OUTPUT})
-        list(REMOVE_AT CMAKE_MESSAGE_INDENT -1)
-      endif()
-    endif()
-  endif()
-endfunction()
-
-if(GRPC_VENDORED)
-  # v1.35.0 -> 1.35
-  string(REGEX MATCH "[0-9]+\\.[0-9]+" GRPC_VERSION 
"${ARROW_GRPC_BUILD_VERSION}")
-else()
-  test_grpc_version(GRPC_VERSION "1.43" "check_tls_opts_143.cc")
-  test_grpc_version(GRPC_VERSION "1.36" "check_tls_opts_136.cc")
-  test_grpc_version(GRPC_VERSION "1.34" "check_tls_opts_134.cc")
-  test_grpc_version(GRPC_VERSION "1.32" "check_tls_opts_132.cc")
-  test_grpc_version(GRPC_VERSION "1.27" "check_tls_opts_127.cc")
-  message(STATUS "Found approximate gRPC version: ${GRPC_VERSION} 
(ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS=${ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS})"
-  )
-endif()
-if(GRPC_VERSION EQUAL "1.27")
-  
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc_impl::experimental)
-elseif(GRPC_VERSION EQUAL "1.32")
-  
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
-elseif(GRPC_VERSION EQUAL "1.34" OR GRPC_VERSION EQUAL "1.35")
+if(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.43")
   add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
-                  -DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS
-                  
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
-elseif(GRPC_VERSION EQUAL "1.36")
+                  
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental
+                  -DGRPC_USE_CERTIFICATE_VERIFIER)
+elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.36")
   add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
                   
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
-elseif((GRPC_VERSION EQUAL "1.43") OR (GRPC_VERSION EQUAL "1.46"))
-  # 1.46 is the bundled version
+elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.34")
   add_definitions(-DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS
-                  
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental
-                  -DGRPC_USE_CERTIFICATE_VERIFIER)
+                  -DGRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS
+                  
-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
+elseif(ARROW_GRPC_VERSION VERSION_GREATER_EQUAL "1.32")
+  
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc::experimental)
 else()
-  message(STATUS "A proper version of gRPC could not be found to support 
TlsCredentialsOptions in Arrow Flight."
-  )
-  message(STATUS "You may need a newer version of gRPC (>= 1.27), or the gRPC 
API has changed and Flight must be updated to match."
-  )
-  if(ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS)
-    message(FATAL_ERROR "Halting build since 
ARROW_FLIGHT_REQUIRE_TLSCREDENTIALSOPTIONS is set."
-    )
-  endif()
+  
add_definitions(-DGRPC_NAMESPACE_FOR_TLS_CREDENTIALS_OPTIONS=grpc_impl::experimental)
 endif()
 
 # </KLUDGE> Restore the CXXFLAGS that were modified above
diff --git a/cpp/src/arrow/flight/try_compile/check_tls_opts_127.cc 
b/cpp/src/arrow/flight/try_compile/check_tls_opts_127.cc
deleted file mode 100644
index 11de498991..0000000000
--- a/cpp/src/arrow/flight/try_compile/check_tls_opts_127.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// Dummy file for checking if TlsCredentialsOptions exists in
-// the grpc_impl::experimental namespace. gRPC versions 1.27-1.31
-// put it here. This is for supporting disabling server
-// validation when using TLS.
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/grpcpp.h>
-#include <grpcpp/security/tls_credentials_options.h>
-
-static grpc_tls_server_verification_option check(
-    const grpc_impl::experimental::TlsCredentialsOptions* options) {
-  grpc_tls_server_verification_option server_opt = 
options->server_verification_option();
-  return server_opt;
-}
-
-int main(int argc, const char** argv) {
-  [[maybe_unused]] grpc_tls_server_verification_option opt = check(nullptr);
-  return 0;
-}
diff --git a/cpp/src/arrow/flight/try_compile/check_tls_opts_132.cc 
b/cpp/src/arrow/flight/try_compile/check_tls_opts_132.cc
deleted file mode 100644
index fa5ba0f43d..0000000000
--- a/cpp/src/arrow/flight/try_compile/check_tls_opts_132.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// Dummy file for checking if TlsCredentialsOptions exists in
-// the grpc::experimental namespace. gRPC versions 1.32 and higher
-// put it here. This is for supporting disabling server
-// validation when using TLS.
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/grpcpp.h>
-#include <grpcpp/security/tls_credentials_options.h>
-
-static grpc_tls_server_verification_option check(
-    const grpc::experimental::TlsCredentialsOptions* options) {
-  grpc_tls_server_verification_option server_opt = 
options->server_verification_option();
-  return server_opt;
-}
-
-int main(int argc, const char** argv) {
-  [[maybe_unused]] grpc_tls_server_verification_option opt = check(nullptr);
-  return 0;
-}
diff --git a/cpp/src/arrow/flight/try_compile/check_tls_opts_134.cc 
b/cpp/src/arrow/flight/try_compile/check_tls_opts_134.cc
deleted file mode 100644
index 4ee2122ef5..0000000000
--- a/cpp/src/arrow/flight/try_compile/check_tls_opts_134.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// Dummy file for checking if TlsCredentialsOptions exists in
-// the grpc::experimental namespace. gRPC starting from 1.34
-// put it here. This is for supporting disabling server
-// validation when using TLS.
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/grpcpp.h>
-#include <grpcpp/security/tls_credentials_options.h>
-
-// Dummy file for checking if TlsCredentialsOptions exists in
-// the grpc::experimental namespace. gRPC starting from 1.34
-// puts it here. This is for supporting disabling server
-// validation when using TLS.
-
-static void check() {
-  // In 1.34, there's no parameterless constructor; in 1.36, there's
-  // only a parameterless constructor
-  auto options =
-      
std::make_shared<grpc::experimental::TlsChannelCredentialsOptions>(nullptr);
-  options->set_server_verification_option(
-      grpc_tls_server_verification_option::GRPC_TLS_SERVER_VERIFICATION);
-}
-
-int main(int argc, const char** argv) {
-  check();
-  return 0;
-}
diff --git a/cpp/src/arrow/flight/try_compile/check_tls_opts_136.cc 
b/cpp/src/arrow/flight/try_compile/check_tls_opts_136.cc
deleted file mode 100644
index 638eec67ba..0000000000
--- a/cpp/src/arrow/flight/try_compile/check_tls_opts_136.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// Dummy file for checking if TlsCredentialsOptions exists in
-// the grpc::experimental namespace. gRPC starting from 1.36
-// puts it here. This is for supporting disabling server
-// validation when using TLS.
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/grpcpp.h>
-#include <grpcpp/security/tls_credentials_options.h>
-
-static void check() {
-  // In 1.34, there's no parameterless constructor; in 1.36, there's
-  // only a parameterless constructor
-  auto options = 
std::make_shared<grpc::experimental::TlsChannelCredentialsOptions>();
-  options->set_server_verification_option(
-      grpc_tls_server_verification_option::GRPC_TLS_SERVER_VERIFICATION);
-}
-
-int main(int argc, const char** argv) {
-  check();
-  return 0;
-}
diff --git a/cpp/src/arrow/flight/try_compile/check_tls_opts_143.cc 
b/cpp/src/arrow/flight/try_compile/check_tls_opts_143.cc
deleted file mode 100644
index 2fdaac9d6e..0000000000
--- a/cpp/src/arrow/flight/try_compile/check_tls_opts_143.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-// Dummy file for checking if TlsCredentialsOptions supports
-// set_verify_server_certs. gRPC starting from 1.43 added this boolean
-// flag as opposed to prior versions which used an enum. This is for
-// supporting disabling server validation when using TLS.
-
-#include <grpc/grpc_security_constants.h>
-#include <grpcpp/grpcpp.h>
-#include <grpcpp/security/tls_credentials_options.h>
-
-static void check() {
-  // 1.36 uses an enum; 1.43 uses booleans
-  auto options = 
std::make_shared<grpc::experimental::TlsChannelCredentialsOptions>();
-  options->set_check_call_host(false);
-  options->set_verify_server_certs(false);
-}
-
-int main(int argc, const char** argv) {
-  check();
-  return 0;
-}

Reply via email to