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); };