Subject: [bug#74290] [PATCH v3 23/51] gnu: guile-lzlib: Support [cross-]build with gcc-14 and the 64bit Hurd.

From: Janneke Nieuwenhuizen <[email-masked]>
Date: Tue, 19 Nov 2024 07:54:53 +0100

* gnu/packages/patches/guile-lzlib-hurd64.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/guile.scm (guile-lzlib)[arguments]: Use G-expressions.  When
building for the 64bit Hurd, or cross-compiling, use it in new
"apply-hurd64-patch" stage.

Change-Id: Id03f71baa80e2f4f967f54037ce7d9f1c5dc4bb6
---
 gnu/local.mk                                  |  1 +
 gnu/packages/guile.scm                        | 16 ++++++++--
 gnu/packages/patches/guile-lzlib-hurd64.patch | 32 +++++++++++++++++++
 3 files changed, 46 insertions(+), 3 deletions(-)
 create mode 100644 gnu/packages/patches/guile-lzlib-hurd64.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index eb50df6e13..be6befb921 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1516,6 +1516,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-fix-invalid-unicode-handling.patch \
   %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch	\
   %D%/packages/patches/guile-hurd-posix-spawn.patch		\
+  %D%/packages/patches/guile-lzlib-hurd64.patch			\
   %D%/packages/patches/guile-present-coding.patch		\
   %D%/packages/patches/guile-rsvg-pkgconfig.patch		\
   %D%/packages/patches/guile-ssh-rename-bool.patch		\
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 8dabbb2c5e..69dff9211f 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014, 2016, 2018 David Thompson <[email-masked]>
 ;;; Copyright © 2014, 2017, 2018 Mark H Weaver <[email-masked]>
 ;;; Copyright © 2015, 2017 Christine Lemmer-Webber <[email-masked]>
-;;; Copyright © 2016, 2023 Janneke Nieuwenhuizen <[email-masked]>
+;;; Copyright © 2016, 2023, 2024 Janneke Nieuwenhuizen <[email-masked]>
 ;;; Copyright © 2016, 2017 Leo Famulari <[email-masked]>
 ;;; Copyright © 2016, 2019, 2020 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2017 Andy Wingo <[email-masked]>
@@ -962,8 +962,18 @@ (define-public guile-lzlib
          "1whgmwkr1v8m63p4aaqn8blwl9vcrswwhbfv4bm0aghl5a6rryd7"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags
-       '("GUILE_AUTO_COMPILE=0"))) ;to prevent guild warnings
+     (list
+      #:make-flags #~'("GUILE_AUTO_COMPILE=0") ;prevent guild warnings
+      #:phases (if (or (%current-target-system) (target-hurd64?))
+                   #~(modify-phases %standard-phases
+                       (add-after 'unpack 'apply-hurd64-patch
+                         (lambda _
+                           (let ((patch
+                                  #$(local-file
+                                     (search-patch
+                                      "guile-lzlib-hurd64.patch"))))
+                             (invoke "patch" "--force" "-p1" "-i" patch)))))
+                   #~%standard-phases)))
     (native-inputs (list autoconf automake pkg-config guile-3.0))
     (inputs (list guile-3.0 lzlib))
     (synopsis "Guile bindings to lzlib")
diff --git a/gnu/packages/patches/guile-lzlib-hurd64.patch b/gnu/packages/patches/guile-lzlib-hurd64.patch
new file mode 100644
index 0000000000..12e8c3617d
--- /dev/null
+++ b/gnu/packages/patches/guile-lzlib-hurd64.patch
@@ -0,0 +1,32 @@
+Upstream-status: Presented upstream.
+
+From 80dcd31562827f4b6d085affe9d9f22164f7ed34 Mon Sep 17 00:00:00 2001
+From: Janneke Nieuwenhuizen <[email-masked]>
+Date: Fri, 15 Nov 2024 16:18:29 +0100
+Subject: [PATCH] build: Support the 64bit Hurd.
+
+* configure.ac: When cross-compiling declare LZ_decompress_open before
+using it in conftest.c.
+---
+ configure.ac | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 50dc5ac..4c56768 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -32,7 +32,10 @@ AC_DEFUN([GUILE_LIBLZ_FILE_NAME], [
+     [if test "$cross_compiling" = yes; then
+        # When cross-compiling, we cannot rely on 'ldd'.  Instead, look
+        # the output of 'ld --verbose', assuming we're using GNU ld.
+-       echo 'int main () { return LZ_decompress_open(); }' > conftest.c
++       cat > conftest.c <<EOF
++int LZ_decompress_open ();
++int main () { return LZ_decompress_open(); }
++EOF
+        guile_cv_liblz_libdir="\
+           `$CC conftest.c -o conftest$EXEEXT -llz -Wl,--verbose 2>/dev/null \
+           | grep -E '^/.*/liblz\.(a|so)'`"
+-- 
+2.46.0
+
-- 
2.46.0