This is an automated email from the ASF dual-hosted git repository.
lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git
The following commit(s) were added to refs/heads/main by this push:
new 190b36b51 build(c): use .dylib for Go driver versioned shared
libraries (#4126)
190b36b51 is described below
commit 190b36b51f46351f6d5e7e5a50f56d5869a62c4a
Author: Bryce Mecum <[email protected]>
AuthorDate: Fri Mar 20 00:20:51 2026 -0700
build(c): use .dylib for Go driver versioned shared libraries (#4126)
Changes the CMake build for Go-based drivers to follow the macOS
convention of always using the `.dylib` extension even for versioned
DLLs, unlike the Linux convention. i.e., this PR changes
`libadbc_driver_bigquery.dylib.111` to
`libadbc_driver_bigquery.111.dylib`.
I ran into this while working on
https://github.com/apache/arrow-adbc/issues/338 (brew audit catches
this) and I also noticed it in our conda-forge package.
May relate to or close https://github.com/apache/arrow-adbc/issues/472.
I used an LLM to produce the base patch and then reviewed and tested
that it at least fixes the issue on macOS.
---
c/cmake_modules/GoUtils.cmake | 69 ++++++++++++++++++++++++++++++++-----------
1 file changed, 51 insertions(+), 18 deletions(-)
diff --git a/c/cmake_modules/GoUtils.cmake b/c/cmake_modules/GoUtils.cmake
index 314760a45..567dd75ff 100644
--- a/c/cmake_modules/GoUtils.cmake
+++ b/c/cmake_modules/GoUtils.cmake
@@ -36,18 +36,30 @@ if(_IMPORT_PREFIX STREQUAL "/")
endif()
function(adbc_add_shared_library target_name base_name)
- set(shared_base_name
- "${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(prefix "${_IMPORT_PREFIX}/${ADBC_INSTALL_LIBDIR}")
add_library(${target_name} SHARED IMPORTED)
if(WINDOWS)
+ set(shared_base_name
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(import_base_name
"${CMAKE_IMPORT_LIBRARY_PREFIX}${base_name}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
set_target_properties(${target_name}
PROPERTIES
IMPORTED_IMPLIB "${prefix}/${import_base_name}"
IMPORTED_LOCATION "${_IMPORT_PREFIX}/bin/${shared_base_name}")
+ elseif(APPLE)
+ # Follow libname.version.dylib convention on macOS
+ set(shared_versioned_name
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}.${ADBC_FULL_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ set(shared_soname
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}.${ADBC_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ set_target_properties(${target_name}
+ PROPERTIES
+ IMPORTED_LOCATION "${prefix}/${shared_versioned_name}"
+ IMPORTED_SONAME "${prefix}/${shared_soname}")
else()
+ set(shared_base_name
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${base_name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
set_target_properties(${target_name}
PROPERTIES
IMPORTED_LOCATION "${prefix}/${shared_base_name}.${ADBC_FULL_SO_VERSION}"
@@ -247,35 +259,56 @@ function(add_go_lib GO_MOD_DIR GO_LIBNAME)
"${LIBOUT_IMPORT_LIB}")
endif()
else()
- add_custom_command(OUTPUT "${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}"
+ # Follow libname.version.dylib convention on macOS
+ if(APPLE)
+ set(LIBOUT_VERSIONED
+
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}.${ADBC_FULL_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ set(LIBOUT_SOVERSION
+
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}.${ADBC_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ set(LIBOUT_SHARED
+
"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ set(LIB_NAME_VERSIONED
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}.${ADBC_FULL_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ set(LIB_NAME_SOVERSION
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}.${ADBC_SO_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ )
+ set(LIB_NAME_SHARED
+
"${CMAKE_SHARED_LIBRARY_PREFIX}${GO_LIBNAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+ else()
+ set(LIBOUT_VERSIONED "${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}")
+ set(LIBOUT_SOVERSION "${LIBOUT_SHARED}.${ADBC_SO_VERSION}")
+ set(LIB_NAME_VERSIONED "${LIB_NAME_SHARED}.${ADBC_FULL_SO_VERSION}")
+ set(LIB_NAME_SOVERSION "${LIB_NAME_SHARED}.${ADBC_SO_VERSION}")
+ endif()
+
+ add_custom_command(OUTPUT "${LIBOUT_VERSIONED}"
WORKING_DIRECTORY ${GO_MOD_DIR}
DEPENDS ${ARG_SOURCES}
COMMAND ${CMAKE_COMMAND} -E env ${GO_ENV_VARS}
${GO_BIN} build
${GO_BUILD_TAGS} "${GO_BUILD_FLAGS}" -o
- ${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}
- -buildmode=c-shared ${GO_LDFLAGS} .
- COMMAND ${CMAKE_COMMAND} -E remove -f
- "${LIBOUT_SHARED}.${ADBC_SO_VERSION}.0.h"
+ ${LIBOUT_VERSIONED} -buildmode=c-shared
${GO_LDFLAGS} .
+ COMMAND ${CMAKE_COMMAND} -E remove -f
"${LIBOUT_VERSIONED}.h"
COMMENT "Building Go Shared lib ${GO_LIBNAME}"
COMMAND_EXPAND_LISTS)
- add_custom_command(OUTPUT "${LIBOUT_SHARED}.${ADBC_SO_VERSION}"
"${LIBOUT_SHARED}"
- DEPENDS "${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}"
+ add_custom_command(OUTPUT "${LIBOUT_SOVERSION}" "${LIBOUT_SHARED}"
+ DEPENDS "${LIBOUT_VERSIONED}"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E create_symlink
- "${LIB_NAME_SHARED}.${ADBC_FULL_SO_VERSION}"
- "${LIB_NAME_SHARED}.${ADBC_SO_VERSION}"
+ "${LIB_NAME_VERSIONED}"
"${LIB_NAME_SOVERSION}"
COMMAND ${CMAKE_COMMAND} -E create_symlink
- "${LIB_NAME_SHARED}.${ADBC_SO_VERSION}"
- "${LIB_NAME_SHARED}")
+ "${LIB_NAME_SOVERSION}" "${LIB_NAME_SHARED}")
add_custom_target(${GO_LIBNAME}_target ALL
- DEPENDS "${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}"
- "${LIBOUT_SHARED}.${ADBC_SO_VERSION}"
"${LIBOUT_SHARED}")
+ DEPENDS "${LIBOUT_VERSIONED}" "${LIBOUT_SOVERSION}"
+ "${LIBOUT_SHARED}")
add_library(${GO_LIBNAME}_shared SHARED IMPORTED GLOBAL)
set_target_properties(${GO_LIBNAME}_shared
- PROPERTIES IMPORTED_LOCATION
-
"${LIBOUT_SHARED}.${ADBC_FULL_SO_VERSION}"
+ PROPERTIES IMPORTED_LOCATION "${LIBOUT_VERSIONED}"
IMPORTED_SONAME "${LIB_NAME_SHARED}")
endif()
add_dependencies(${GO_LIBNAME}_shared ${GO_LIBNAME}_target)
@@ -331,7 +364,7 @@ function(add_go_lib GO_MOD_DIR GO_LIBNAME)
install(FILES "${LIBOUT_IMPORT_LIB}" TYPE LIB)
endif()
else()
- install(FILES "${LIBOUT_SHARED}" "${LIBOUT_SHARED}.${ADBC_SO_VERSION}"
TYPE LIB)
+ install(FILES "${LIBOUT_SHARED}" "${LIBOUT_SOVERSION}" TYPE LIB)
endif()
endif()