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

brycemecum pushed a commit to branch maint-18.1.0
in repository https://gitbox.apache.org/repos/asf/arrow.git

commit abd021c85542b77ad61a033c6dbaaac3603f6eef
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

Reply via email to