Subject: [bug#62307] [PATCH core-updates 02/15] gnu-build-system: Sneak fixed glibc when cross-building for Hurd.

From: Josselin Poiret <[email-masked]>
Date: Mon, 20 Mar 2023 23:10:37 +0100

* guix/build-system/gnu.scm (standard-cross-packages): Do it.
---
 guix/build-system/gnu.scm | 48 +++++++++++++++++++++++----------------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm
index 3308302472..98cf272726 100644
--- a/guix/build-system/gnu.scm
+++ b/guix/build-system/gnu.scm
@@ -442,30 +442,38 @@ (define standard-cross-packages
   (mlambda (target kind)
     "Return the list of name/package tuples to cross-build for TARGET.  KIND
 is one of `host' or `target'."
-    (let* ((cross     (resolve-interface '(gnu packages cross-base)))
-           (gcc       (module-ref cross 'cross-gcc))
-           (binutils  (module-ref cross 'cross-binutils))
-           (libc      (module-ref cross 'cross-libc)))
+    (let* ((cross           (resolve-interface '(gnu packages cross-base)))
+           (cross-gcc       (module-ref cross 'cross-gcc))
+           (cross-binutils  (module-ref cross 'cross-binutils))
+           (cross-libc      (module-ref cross 'cross-libc))
+           (libc (match target
+                   ;; FIXME Remove this once the fix is in our glibc
+                   ("i586-pc-gnu"
+                    (cross-libc target
+                                #:libc
+                                (module-ref
+                                 (resolve-interface '(gnu packages base))
+                                 'glibc/fix-for-hurd-cross)))
+                   (_ (cross-libc target)))))
       (case kind
         ((host)
          ;; Cross-GCC appears once here, so that it's in $PATH...
-         `(("cross-gcc" ,(gcc target
-                              #:xbinutils (binutils target)
-                              #:libc (libc target)))
-           ("cross-binutils" ,(binutils target))))
+         `(("cross-gcc" ,(cross-gcc target
+                              #:xbinutils (cross-binutils target)
+                              #:libc libc))
+           ("cross-binutils" ,(cross-binutils target))))
         ((target)
-         (let ((libc (libc target)))
-           ;; ... and once here, so that libstdc++ & co. are in
-           ;; CROSS_CPLUS_INCLUDE_PATH, etc.
-           `(("cross-gcc" ,(gcc target
-                                #:xbinutils (binutils target)
-                                #:libc libc))
-             ("cross-libc" ,libc)
-
-             ;; MinGW's libc doesn't have a "static" output.
-             ,@(if (member "static" (package-outputs libc))
-                   `(("cross-libc:static" ,libc "static"))
-                   '()))))))))
+         ;; ... and once here, so that libstdc++ & co. are in
+         ;; CROSS_CPLUS_INCLUDE_PATH, etc.
+         `(("cross-gcc" ,(cross-gcc target
+                                    #:xbinutils (cross-binutils target)
+                                    #:libc libc))
+           ("cross-libc" ,libc)
+
+           ;; MinGW's libc doesn't have a "static" output.
+           ,@(if (member "static" (package-outputs libc))
+                 `(("cross-libc:static" ,libc "static"))
+                 '())))))))
 
 (define* (gnu-cross-build name
                           #:key
-- 
2.39.2