Subject: [PATCH] Update gnunet to version 0.14.0
From: Maxime Devos <[email-masked]>
To: [email-masked]
Date: Thu, 14 Jan 2021 22:21:27 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello Guix!

I've updated GNUnet to v0.14.0 (see attached patch).
Due to some issues (see patch), I built gnunet from
git instead of from the release tarball.
-- 
Maxime Devos <[email-masked]>
PGP Key: C1F3 3EE2 0C52 8FDB 7DD7  011F 49E3 EE22 1917 25EE
Freenode handle: mdevos
From 89cba03868c07d10d3133d738164b1822553a4f6 Mon Sep 17 00:00:00 2001
From: Maxime Devos <[email-masked]>
Date: Thu, 14 Jan 2021 21:55:33 +0000
Subject: [PATCH] gnu: gnunet: Update to 0.14.0.

The v0.14.0 tarball doesn't build from source,
so build from git instead. This requires some additional
inputs.

* gnu/packages/gnunet.scm (gnunet): Update to 0.14.0.
  [arguments]{phases}: Add phase `add-build-common-submodule`,
    `fixup-pofile-writability' and `remove-ftbfs-tests'.
  [native-inputs]: add libtool, autoconf, automake, gettext, texinfo and build-common.
* gnu/packages/gnunet.scm (build-common): New variable.
---
 gnu/packages/gnunet.scm | 225 ++++++++++++++++++++++++----------------
 1 file changed, 136 insertions(+), 89 deletions(-)

diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 80e4aba29b..6a3b827dea 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2019 Brett Gilio <[email-masked]>
 ;;; Copyright © 2020 Tanguy Le Carrour <[email-masked]>
 ;;; Copyright © 2020 Michael Rohleder <[email-masked]>
+;;; Copyright © 2021 Maxime Devos <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,6 +59,7 @@
   #:use-module (gnu packages pulseaudio)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages video)
@@ -253,103 +255,148 @@ supports HTTP, HTTPS and GnuTLS.")
                  (ftp-directory . "/gnunet")))
    (home-page "https://gnunet.org/en/gnurl.html")))
 
-(define-public gnunet
-  (package
-   (name "gnunet")
-   (version "0.13.1")
-   (source
+(define build-common
+  (let ((commit "1915a74bbb4cd2ae9bc541a382dfebc37064a2fd"))
     (origin
-      (method url-fetch)
-      (uri (string-append "mirror://gnu/gnunet/gnunet-" version
-                          ".tar.gz"))
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://git.taler.net/build-common.git")
+            (commit commit)))
+      (file-name (git-file-name "build-common" commit))
       (sha256
        (base32
-        "15jnca5zxng7r6m3qzq9lr73xxq0v6mvcp0lny3zrlkz5s2nmmq3"))))
-   (build-system gnu-build-system)
-   (inputs
-    `(("bluez" ,bluez)
-      ("glpk" ,glpk)
-      ("gnurl" ,gnurl)
-      ("gnutls" ,gnutls/dane)
-      ("gstreamer" ,gstreamer)
-      ("jansson" ,jansson)
-      ("libextractor" ,libextractor)
-      ("libidn" ,libidn2)
-      ("libgcrypt" ,libgcrypt)
-      ("libjpeg" ,libjpeg-turbo)
-      ("libltdl" ,libltdl)
-      ("libmicrohttpd" ,libmicrohttpd)
-      ("libogg" ,libogg)
-      ("libsodium" ,libsodium)
-      ("libunistring" ,libunistring)
-      ("miniupnpc" ,miniupnpc)
-      ("opus" ,opus)
-      ("pulseaudio" ,pulseaudio)
-      ("sqlite" ,sqlite)
-      ("zbar" ,zbar)
-      ("zlib" ,zlib)))
-   (native-inputs
-    `(("curl" ,curl)
-      ("pkg-config" ,pkg-config)
-      ("python" ,python)
-      ("xxd" ,xxd)
-      ("which" ,(@ (gnu packages base) which))))
-   (arguments
-    '(#:parallel-tests? #f ; Parallel tests aren't supported.
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'configure 'remove-failing-tests
-          ;; These tests fail in Guix's building environment.
-          (lambda _
-            (substitute* "src/transport/Makefile"
-              (("\\$\\(am__EXEEXT_15\\)") "") ; test_transport_api_https
-              (("test_transport_api_manipulation_cfg\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_transport_api_udp_nat\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_transport_blacklisting_multiple_plugins\\$\\(EXEEXT\\) \\\\\n") ""))
-            (substitute* "src/testbed/Makefile"
-              (("test_testbed_api_2peers_1controller\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_testbed_api_statistics\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_testbed_api_test\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_testbed_api_test_timeout\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_testbed_api_topology\\$\\(EXEEXT\\) \\\\\n") "")
-              (("test_testbed_api_topology_clique\\$\\(EXEEXT\\) \\\\\n") ""))
-            (substitute* "src/topology/Makefile"
-              (("^check_PROGRAMS.*") "\n")
-              (("test_gnunet_daemon_topology\\$\\(EXEEXT\\)\n") ""))
-            (substitute* "src/namestore/Makefile"
-              (("\\$\\(am__append_2\\)") ""))
-            (substitute* "src/gns/Makefile"
-              (("\\$\\(am__append_4\\)") ""))
-            (substitute* "contrib/Makefile"
-              (("^check_PROGRAMS.*") "\n"))
-            ;; 'test' from coreutils doesn't behave as the test expects.
-            (substitute* '("src/gns/gnunet-gns-proxy-setup-ca.in"
-                           "src/transport/gnunet-transport-certificate-creation.in")
-              (("gnutls-certtool") "certtool"))
-            #t))
-        (add-before 'check 'set-env-var-for-tests
-          (lambda _
-            (setenv "LANG" "en_US.UTF-8")))
-        ;; Swap 'check and 'install phases and add installed binaries to $PATH.
-        (add-before 'check 'set-path-for-check
-          (lambda* (#:key outputs #:allow-other-keys)
-           (let ((out (assoc-ref outputs "out")))
-             (setenv "GNUNET_PREFIX" (string-append out "/lib"))
-             (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")))
-           #t))
-        (delete 'check)
-        (add-after 'install 'check
-          (assoc-ref %standard-phases 'check)))))
-   (synopsis "Secure, decentralized, peer-to-peer networking framework")
-   (description
-     "GNUnet is a framework for secure peer-to-peer networking.  The
+        "18a44qf8hdq5hqb9ygi45k0zxlhy5d764kan0cz72ir7p0lxcj2h")))))
+
+(define-public gnunet
+  (let ((commit "d36019fe48ff1e4e56754ef3e689bd67445a38f6"))
+    (package
+      (name "gnunet")
+      (version "0.14.0")
+      ;; 'test_proxy.sh' is missing from the tarball
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.gnunet.org/gnunet.git/")
+                      (commit commit)))
+                (file-name (string-append name "-" version))
+                (sha256
+                 (base32
+                  "0llwz6ng5hl2bmv4yyb8l39frj9kkzdd1x8wx63dy988hkv8l1w1"))))
+      (build-system gnu-build-system)
+      (inputs
+       `(("bluez" ,bluez)
+         ("glpk" ,glpk)
+         ("gnurl" ,gnurl)
+         ("gnutls" ,gnutls/dane)
+         ("gstreamer" ,gstreamer)
+         ("jansson" ,jansson)
+         ("libextractor" ,libextractor)
+         ("libidn" ,libidn2)
+         ("libgcrypt" ,libgcrypt)
+         ("libjpeg" ,libjpeg-turbo)
+         ("libltdl" ,libltdl)
+         ("libmicrohttpd" ,libmicrohttpd)
+         ("libogg" ,libogg)
+         ("libsodium" ,libsodium)
+         ("libunistring" ,libunistring)
+         ("miniupnpc" ,miniupnpc)
+         ("opus" ,opus)
+         ("pulseaudio" ,pulseaudio)
+         ("sqlite" ,sqlite)
+         ("zbar" ,zbar)
+         ("zlib" ,zlib)))
+      (native-inputs
+       `(("curl" ,curl)
+         ("libtool" ,libtool)
+         ("autoconf" ,autoconf-wrapper)
+         ("automake" ,automake)
+         ("gettext" ,gettext-minimal)
+         ("texinfo" ,texinfo)
+         ("pkg-config" ,pkg-config)
+         ("python" ,python)
+         ("xxd" ,xxd)
+         ("build-common" ,build-common)
+         ("which" ,(@ (gnu packages base) which))))
+      (arguments
+       '(#:parallel-tests? #f ; Parallel tests aren't supported.
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'bootstrap 'add-build-common-submodule
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               (let ((build-common (assoc-ref (or native-inputs inputs)
+                                              "build-common")))
+                 ;; When building from git, include the contrib/build-common
+                 ;; submodule.
+                 (when build-common
+                   (delete-file-recursively "contrib/build-common")
+                   (symlink build-common "contrib/build-common")
+                   ;; bootstrap expects this to be writable
+                   ;; or non-existent, which isn't the case.
+                   (delete-file "contrib/Makefile.inc")))
+               #t))
+           (add-after 'unpack 'fixup-pofile-writability
+             (lambda _
+               ;; bootstrap expects this to be writable
+               (chmod "po/POTFILES.in" #o700)
+               #t))
+           (add-after 'configure 'remove-ftbfs-tests
+             ;; These tests fail to compile
+             (lambda _
+               (substitute* "src/conversation/Makefile"
+                 (("test_conversation_api\\$\\(EXEEXT\\) \\\\\n") ""))
+               #t))
+           (add-after 'configure 'remove-failing-tests
+             ;; These tests fail in Guix's building environment.
+             (lambda _
+               (substitute* "src/transport/Makefile"
+                 (("\\$\\(am__EXEEXT_15\\)") "") ; test_transport_api_https
+                 (("test_transport_api_manipulation_cfg\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_transport_api_udp_nat\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_transport_blacklisting_multiple_plugins\\$\\(EXEEXT\\) \\\\\n") ""))
+               (substitute* "src/testbed/Makefile"
+                 (("test_testbed_api_2peers_1controller\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_testbed_api_statistics\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_testbed_api_test\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_testbed_api_test_timeout\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_testbed_api_topology\\$\\(EXEEXT\\) \\\\\n") "")
+                 (("test_testbed_api_topology_clique\\$\\(EXEEXT\\) \\\\\n") ""))
+               (substitute* "src/topology/Makefile"
+                 (("^check_PROGRAMS.*") "\n")
+                 (("test_gnunet_daemon_topology\\$\\(EXEEXT\\)\n") ""))
+               (substitute* "src/namestore/Makefile"
+                 (("\\$\\(am__append_2\\)") ""))
+               (substitute* "src/gns/Makefile"
+                 (("\\$\\(am__append_4\\)") ""))
+               (substitute* "contrib/Makefile"
+                 (("^check_PROGRAMS.*") "\n"))
+               ;; 'test' from coreutils doesn't behave as the test expects.
+               (substitute* '("src/gns/gnunet-gns-proxy-setup-ca.in"
+                              "src/transport/gnunet-transport-certificate-creation.in")
+                 (("gnutls-certtool") "certtool"))
+               #t))
+           (add-before 'check 'set-env-var-for-tests
+             (lambda _
+               (setenv "LANG" "en_US.UTF-8")))
+           ;; Swap 'check and 'install phases and add installed binaries to $PATH.
+           (add-before 'check 'set-path-for-check
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (setenv "GNUNET_PREFIX" (string-append out "/lib"))
+                 (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")))
+               #t))
+           (delete 'check)
+           (add-after 'install 'check
+             (assoc-ref %standard-phases 'check)))))
+      (synopsis "Secure, decentralized, peer-to-peer networking framework")
+      (description
+       "GNUnet is a framework for secure peer-to-peer networking.  The
 high-level goal is to provide a strong foundation of free software for a
 global, distributed network that provides security and privacy.  GNUnet in
 that sense aims to replace the current internet protocol stack.  Along with
 an application for secure publication of files, it has grown to include all
 kinds of basic applications for the foundation of a GNU internet.")
-   (license license:agpl3+)
-   (home-page "https://gnunet.org/")))
+      (license license:agpl3+)
+      (home-page "https://gnunet.org/"))))
 
 (define-public guile-gnunet                       ;GSoC 2015!
   (let ((commit "d12167ab3c8d7d6caffd9c606e389ef043760602")
-- 
2.30.0