fix(macos): probe .dylib + guard bare load-shared-object calls
ober
2ac13b7547611d4cb40985ec496a6e9623f90155
--- a/lib/std/crypto/native-rust.ss +++ b/lib/std/crypto/native-rust.ss @@ -32,11 +32,16 @@ ;; Load the Rust native library (for dynamic builds). ;; In static builds, symbols are pre-registered via Sforeign_symbol — skip loading. + ;; Try .so (Linux/FreeBSD) and .dylib (macOS); CWD-relative and lib/ subdir. (def _native-loaded (or (try (begin (load-shared-object "libjerboa_native.so") #t) (catch (e) #f)) + (try (begin (load-shared-object "libjerboa_native.dylib") #t) + (catch (e) #f)) (try (begin (load-shared-object "lib/libjerboa_native.so") #t) (catch (e) #f)) + (try (begin (load-shared-object "lib/libjerboa_native.dylib") #t) + (catch (e) #f)) #t)) ;; Helper: extract sub-bytevector (avoids Chez extension warning) --- a/lib/std/os/temporaries.ss +++ b/lib/std/os/temporaries.ss @@ -19,7 +19,12 @@ (catch (e) #f)) (try (load-shared-object "libc.so.6") (catch (e) #f)) - (load-shared-object "libc.so"))))) + (try (load-shared-object "libc.so") + (catch (e) #f)) + (try (load-shared-object "libSystem.dylib") + (catch (e) #f)) + (try (load-shared-object "libSystem.B.dylib") + (catch (e) #f)))))) (def getpid (foreign-procedure "getpid" () int)) (def *temp-counter* 0) --- a/tests/test-ffi.ss +++ b/tests/test-ffi.ss @@ -28,10 +28,15 @@ ;; c-lambda creates a foreign-procedure ;; We can test that c-lambda expands and produces a procedure for libc functions -(load-shared-object - (case (machine-type) - [(a6fb ta6fb i3fb ti3fb arm64fb) "libc.so.7"] - [else "libc.so.6"])) +(case (machine-type) + [(a6fb ta6fb i3fb ti3fb arm64fb tarm64fb) + (load-shared-object "libc.so.7")] + [(a6osx ta6osx arm64osx tarm64osx) + (or (guard (_ [#t #f]) (load-shared-object "libSystem.dylib") #t) + (guard (_ [#t #f]) (load-shared-object "libSystem.B.dylib") #t) + (error 'test-ffi "could not load libSystem on macOS"))] + [else + (load-shared-object "libc.so.6")]) ;; Test c-lambda with a real C function (let ([my-getpid (c-lambda () int "getpid")])