From f2b12a311d1a14ab5d9f67428201e1389748a9c1 Mon Sep 17 00:00:00 2001
From: Tom Jakubowski <tom@prospective.dev>
Date: Fri, 11 Oct 2024 12:23:29 -0700
Subject: [PATCH] GH-44384: [C++] Use CMAKE_LIBTOOL on macOS
When a builder sets `CMAKE_LIBTOOL`, use that as the program to bundle
dependencies. This matches the behavior of the Windows build.
Also make a nitpicky minor update to the error message when a non-Apple
libtool is detected.
---
cpp/cmake_modules/BuildUtils.cmake | 30 +++++++++++++++++-------------
1 file changed, 17 insertions(+), 13 deletions(-)
diff --git a/cpp/cmake_modules/BuildUtils.cmake b/cpp/cmake_modules/BuildUtils.cmake
index 692efa78376f4..eb94563afcf77 100644
@@ -97,23 +97,27 @@ function(arrow_create_merged_static_lib output_target)
endforeach()
if(APPLE)
- # The apple-distributed libtool is what we want for bundling, but there is
- # a GNU libtool that has a namecollision (and happens to be bundled with R, too).
- # We are not compatible with GNU libtool, so we need to avoid it.
-
- # check in the obvious places first to find Apple's libtool
- # HINTS is used before system paths and before PATHS, so we use that
- # even though hard coded paths should go in PATHS
- # TODO: use a VALIDATOR when we require cmake >= 3.25
- find_program(LIBTOOL_MACOS libtool HINTS /usr/bin
- /Library/Developer/CommandLineTools/usr/bin)
-
- # confirm that the libtool we found is not GNU libtool
+ if(CMAKE_LIBTOOL)
+ set(LIBTOOL_MACOS ${CMAKE_LIBTOOL})
+ else()
+ # The apple-distributed libtool is what we want for bundling, but there is
+ # a GNU libtool that has a namecollision (and happens to be bundled with R, too).
+ # We are not compatible with GNU libtool, so we need to avoid it.
+
+ # check in the obvious places first to find Apple's libtool
+ # HINTS is used before system paths and before PATHS, so we use that
+ # even though hard coded paths should go in PATHS
+ # TODO: use a VALIDATOR when we require cmake >= 3.25
+ find_program(LIBTOOL_MACOS libtool
+ HINTS /usr/bin /Library/Developer/CommandLineTools/usr/bin)
+ endif()
+
+ # confirm that the libtool we found is Apple's libtool
execute_process(COMMAND ${LIBTOOL_MACOS} -V
OUTPUT_VARIABLE LIBTOOL_V_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT "${LIBTOOL_V_OUTPUT}" MATCHES ".*cctools-([0-9.]+).*")
- message(FATAL_ERROR "libtool found appears to be the incompatible GNU libtool: ${LIBTOOL_MACOS}"
+ message(FATAL_ERROR "libtool found appears not to be Apple's libtool: ${LIBTOOL_MACOS}"
)
endif()