Subject: [bug#53779] [PATCH 2/5] gnu: iwd: Build from Git sources.

From: Simon South <[email-masked]>
Date: Fri, 4 Feb 2022 10:43:33 -0500

* gnu/packages/networking.scm (iwd)[source]: Use "git-fetch" and
"git-file-name".
[inputs]: Add ell source code.
[native-inputs]: Add autoconf, automake, libtool.
[arguments]<#:phases>: Add "copy-ell-header-files" phase to copy shared header
files from ell source into source tree.
---
 gnu/packages/networking.scm | 38 ++++++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 9 deletions(-)

diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 064248600e..dc42ec4d73 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -47,6 +47,7 @@
 ;;; Copyright © 2021 Milkey Mouse <[email-masked]>
 ;;; Copyright © 2021 Guillaume Le Vaillant <[email-masked]>
 ;;; Copyright © 2021 Maxime Devos <[email-masked]>
+;;; Copyright © 2022 Simon South <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -3568,20 +3569,25 @@ (define-public iwd
     (name "iwd")
     (version "1.20")
     (source (origin
-              ;; FIXME: We're using the bootstrapped sources because
-              ;; otherwise using an external ell library is impossible.
-              ;; How to bootstrap with Guix?
-              (method url-fetch)
-              (uri (string-append "https://www.kernel.org/pub/linux/network"
-                                  "/wireless/iwd-" version ".tar.xz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://git.kernel.org/pub/scm/network/wireless/iwd.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "03q5scahyg86h4bdxqxm32shyssgpmfp5b3183j01ig7mg6f4lbx"))))
+                "0xlbnsgw9giakfj0xr526i7mcwyaryb18g66mv90njnrm8radjhr"))))
     (build-system gnu-build-system)
     (inputs
-     (list dbus ell readline))
+     (list dbus ell (package-source ell) readline))
     (native-inputs
-     (list pkg-config python python-docutils openssl))
+     (list autoconf
+           automake
+           libtool
+           pkg-config
+           python
+           python-docutils
+           openssl))
     (arguments
      `(#:configure-flags
        (let ((dbus (assoc-ref %outputs "out")))
@@ -3596,6 +3602,20 @@ (define-public iwd
                               dbus "/share/dbus-1/system-services")))
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'copy-ell-header-files
+           ;; Copy into the source tree two of ell's private header files that
+           ;; it shares with iwd, as is required to build with the
+           ;; "--enable-external-ell" configure option.
+           ;; See the definition of "ell_shared" in iwd's Makefile.am.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((ell-header-dir (search-input-directory inputs "/ell"))
+                   (target-dir "ell"))
+               (mkdir target-dir)
+               (for-each
+                (lambda (file-name)
+                  (copy-file (string-append ell-header-dir "/" file-name)
+                             (string-append target-dir "/" file-name)))
+                '("asn1-private.h" "useful.h")))))
          (add-after 'configure 'patch-Makefile
            (lambda _
              (substitute* "Makefile"
-- 
2.34.0