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()
 

Reply via email to