From 047425a662608f56ba530052e21106028c5d6eeb Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 7 Nov 2022 22:26:54 +0100 Subject: syscalls: Adjust for lack of 'libutil.so' on glibc >= 2.34. This is a re-implementation of 3c8b6fd94ceb1e898216929e8768fb518dbf1de9 done in a way that works for both glibc >= 2.34 and earlier versions. * guix/build/syscalls.scm (syscall->procedure): When LIBRARY is true, fall back to global symbols if (dynamic-link library) fails. (cherry picked from commit 3f6c32a88fc7a4d707ae1ed8ef3f7bd995461aff) --- guix/build/syscalls.scm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 2a12567b15..0358960ff5 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -447,9 +447,14 @@ If an error occurs while creating the binding, defer the error report until the returned procedure is called." (catch #t (lambda () + ;; Note: When #:library is set, try it first and fall back to libc + ;; proper. This is because libraries like libutil.so have been subsumed + ;; by libc.so with glibc >= 2.34. (let ((ptr (dynamic-func name (if library - (dynamic-link library) + (or (false-if-exception + (dynamic-link library)) + (dynamic-link)) (dynamic-link))))) ;; The #:return-errno? facility was introduced in Guile 2.0.12. (pointer->procedure return-type ptr argument-types -- cgit 1.4.1