This is an automated email from the ASF dual-hosted git repository.
assignuser 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 093655c607 GH-44606: [C++] Add find module for abseil that handles
missing version (#44613)
093655c607 is described below
commit 093655c60783321c786a8e69632f185d37520f4d
Author: Jacob Wujciak-Jens <[email protected]>
AuthorDate: Fri Nov 8 02:25:29 2024 +0100
GH-44606: [C++] Add find module for abseil that handles missing version
(#44613)
### Rationale for this change
Abseil's recommended usage is to build from trunk, this version does not
provide a package version in CMake which breaks `resolve_dependency`.
### What changes are included in this PR?
Add `FindabslAlt.cmake` that adds a big version if it is missing to compare
against our minimal version requirements.
### Are these changes tested?
CI
### Are there any user-facing changes?
Abseil build from head should now work without workaround.
* GitHub Issue: #44606
Lead-authored-by: Jacob Wujciak-Jens <[email protected]>
Co-authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Jacob Wujciak-Jens <[email protected]>
---
cpp/cmake_modules/FindabslAlt.cmake | 46 +++++++++++++++++++++++++++++
cpp/cmake_modules/ThirdpartyToolchain.cmake | 2 +-
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/cpp/cmake_modules/FindabslAlt.cmake
b/cpp/cmake_modules/FindabslAlt.cmake
new file mode 100644
index 0000000000..a7ebe63f5e
--- /dev/null
+++ b/cpp/cmake_modules/FindabslAlt.cmake
@@ -0,0 +1,46 @@
+# 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.
+
+if(abslAlt_FOUND)
+ return()
+endif()
+
+set(find_package_args)
+
+if(abslAlt_FIND_QUIETLY)
+ list(APPEND find_package_args QUIET)
+endif()
+if(abslAlt_FIND_REQUIRED)
+ list(APPEND find_package_args REQUIRED)
+endif()
+
+find_package(absl ${find_package_args})
+
+if(NOT DEFINED absl_VERSION)
+ # Abseil does not define a version when build 'live at head'.
+ # As this is their recommended path we need to define a large version to
pass version checks.
+ # CMake removes the '_head' suffix for version comparison but it will show
up in the logs
+ # and matches the abseil-cpp.pc version of 'head'
+ set(absl_VERSION 99999999_head)
+endif()
+
+set(abslAlt_VERSION ${absl_VERSION})
+
+find_package_handle_standard_args(
+ abslAlt
+ REQUIRED_VARS absl_FOUND
+ VERSION_VAR abslAlt_VERSION)
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 0b215b5b25..e07e13cab5 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -4169,7 +4169,7 @@ if(ARROW_WITH_GOOGLE_CLOUD_CPP OR ARROW_WITH_GRPC)
ARROW_PC_PACKAGE_NAME
${ARROW_ABSL_PC_PACKAGE_NAME}
HAVE_ALT
- FALSE
+ TRUE
FORCE_ANY_NEWER_VERSION
TRUE
REQUIRED_VERSION