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 b8a45d226ba GH-51634: [C++][CI] Apply a google-cloud-cpp patch for 
OpenSSL 4.x compatibility (#51635)
b8a45d226ba is described below

commit b8a45d226badb1b876c3081e06f88d5f27cce1af
Author: Hiroyuki Sato <[email protected]>
AuthorDate: Wed Sep 30 14:51:19 2026 +0900

    GH-51634: [C++][CI] Apply a google-cloud-cpp patch for OpenSSL 4.x 
compatibility (#51635)
    
    ### Rationale for this change
    
    The current version of google-cloud-cpp used by Arrow does not build with 
OpenSSL 4.x
    
    ### What changes are included in this PR?
    
    This change applies a patch to google-cloud-cpp as a workaround for OpenSSL 
4.x compatibility.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    No.
    
    ### Was AI used for this PR?
    
    In accordance to the [AI generation 
guidelines](https://arrow.apache.org/docs/dev/developers/overview.html#ai-generated-code),
 please disclose below whether and how AI was used in this PR.
    
    **PR code and description written by:**
    
    - [x] Human
    - [ ] AI
    
    **Reviewed before submission by:**
    
    - [x] Human
    - [ ] AI
    - [ ] Not reviewed
    
    * GitHub Issue: #51634
    
    Lead-authored-by: Hiroyuki Sato <[email protected]>
    Co-authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 cpp/cmake_modules/ThirdpartyToolchain.cmake        | 19 ++++++++++++++
 .../google-cloud-cpp-openssl4-compatibility.patch  | 30 ++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 2b703a3e1ca..807387fa830 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -3715,6 +3715,25 @@ function(build_google_cloud_cpp_storage)
          ${CMAKE_CURRENT_LIST_DIR}/google-cloud-cpp-reproducible-builds.patch)
   endif()
 
+  # google-cloud-cpp, which depends on OpenSSL,
+  # does not yet support OpenSSL 4.x.
+  #
+  # TODO: Once google-cloud-cpp supports OpenSSL 4.x,
+  # remove this workaround and google-cloud-cpp-openssl4-compatibility.patch.
+  # https://github.com/googleapis/google-cloud-cpp/issues/16510
+  if(PATCH)
+    if(GOOGLE_CLOUD_CPP_PATCH_COMMAND)
+      list(APPEND GOOGLE_CLOUD_CPP_PATCH_COMMAND COMMAND)
+    endif()
+
+    list(APPEND
+         GOOGLE_CLOUD_CPP_PATCH_COMMAND
+         ${PATCH}
+         -p1
+         -i
+         
${CMAKE_CURRENT_LIST_DIR}/google-cloud-cpp-openssl4-compatibility.patch)
+  endif()
+
   fetchcontent_declare(google_cloud_cpp
                        ${FC_DECLARE_COMMON_OPTIONS}
                        PATCH_COMMAND ${GOOGLE_CLOUD_CPP_PATCH_COMMAND}
diff --git a/cpp/cmake_modules/google-cloud-cpp-openssl4-compatibility.patch 
b/cpp/cmake_modules/google-cloud-cpp-openssl4-compatibility.patch
new file mode 100644
index 00000000000..8a4dfae3a7b
--- /dev/null
+++ b/cpp/cmake_modules/google-cloud-cpp-openssl4-compatibility.patch
@@ -0,0 +1,30 @@
+# 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.
+
+diff --git a/google/cloud/internal/openssl/parse_service_account_p12_file.cc 
b/google/cloud/internal/openssl/parse_service_account_p12_file.cc
+index bb0462dcf0..9dfb59750b 100644
+--- a/google/cloud/internal/openssl/parse_service_account_p12_file.cc
++++ b/google/cloud/internal/openssl/parse_service_account_p12_file.cc
+@@ -85,7 +85,7 @@ StatusOr<ServiceAccountCredentialsInfo> 
ParseServiceAccountP12File(
+   }
+ 
+   // This is automatically deleted by `cert`.
+-  X509_NAME* name = X509_get_subject_name(cert.get());
++  auto* name = X509_get_subject_name(cert.get());
+ 
+   std::string service_account_id = [&name]() -> std::string {
+     auto openssl_free = [](void* addr) { OPENSSL_free(addr); };

Reply via email to