amoeba commented on code in PR #51765:
URL: https://github.com/apache/arrow/pull/51765#discussion_r4273494827
##########
.github/workflows/cpp_extra.yml:
##########
@@ -686,6 +693,112 @@ jobs:
sudo chown -R $USER /Library/ODBC
ci/scripts/cpp_test.sh $(pwd) $(pwd)/build
+ odbc-macos-universal:
+ needs: odbc-macos
+ if: needs.check-enabled.outputs.is_enabled == 'true'
+ name: ODBC universal macOS installer
+ runs-on: macos-14
+ timeout-minutes: 30
+ steps:
+ - name: Download ARM64 PKG
+ uses: actions/download-artifact@v8
+ with:
+ name: flight-sql-odbc-pkg-installer-ARM64
+ path: arm64-pkg
+ - name: Download AMD64 dylib
+ uses: actions/download-artifact@v8
+ with:
+ name: flight-sql-odbc-dylib-AMD64
+ path: amd64-dylib
+ - name: Build universal macOS installer
+ run: |
+ set -euo pipefail
+
+ pkg_path="$(ls arm64-pkg/ArrowFlightSQLODBC-*.pkg)"
+ pkg_name="$(basename "${pkg_path}" .pkg)"
+
+ # Use the ARM64 .pkg and swap in a universal ODBC dylib
+ # that works on ARM64 and AMD64.
+ pkgutil --expand-full "${pkg_path}" expanded
+
+ # The unversioned name libarrow_flight_sql_odbc.dylib is a symlink
+ # to the versioned dylib that the
+ # install name (@rpath/libarrow_flight_sql_odbc.<SOVERSION>.dylib)
+ # resolves to. Run lipo on the real file so the symlinks stay intact.
+ symlink_path="$(find expanded -name libarrow_flight_sql_odbc.dylib)"
+ lib_dir="$(dirname "${symlink_path}")"
+ dylib_path="$(realpath "${symlink_path}")"
+ echo "Merging into ${dylib_path} (via ${symlink_path})"
+ lipo -create "${dylib_path}"
amd64-dylib/libarrow_flight_sql_odbc.dylib \
+ -output "${dylib_path}"
+
+ for lib in "${lib_dir}"/libarrow_flight_sql_odbc*.dylib; do
+ dylib_archs="$(lipo -archs "${lib}")"
+ echo "${lib}: ${dylib_archs}"
+ for arch in arm64 x86_64; do
+ if ! grep -qw "${arch}" <<< "${dylib_archs}"; then
+ echo "${lib} is missing '${arch}' (got: ${dylib_archs})"
+ exit 1
+ fi
+ done
+ done
Review Comment:
I made a mistake here, I guess that's not how you call `lipo`. This fails,
```
$ lipo $LIB -verify_arch arm64 x86_86
lipo: -verify_arch requires exactly one input file
```
so I think what you had is fine.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]