Subject: [PATCH] gnu: glusterfs: Update to 7.0

From: Andrew Miloradovsky <[email-masked]>
Date: Thu, 28 Nov 2019 11:06:29 +0300

* gnu/packages/file-systems.scm (glusterfs): from 3.10.12 to 7.0
    [arguments]: run ./autogen.sh, fix python, force enable unit tests
    [native-inputs]: +libtirpc +rpcsvc-proto +auto{conf,make} +libtool
    [inputs]: -lvm2 -sqlite +fuse +libaio +rdma-core
---
 gnu/packages/file-systems.scm | 119 ++++++++++++++++------------------
 1 file changed, 56 insertions(+), 63 deletions(-)

diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 85bfd8dd38..019c39bd8b 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -41,6 +41,7 @@
   #:use-module (gnu packages flex)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages onc-rpc)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
@@ -145,73 +146,65 @@ non-determinism in the build process.")
 
 (define-public glusterfs
   (package
-    (name "glusterfs")
-    (version "3.10.12")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://download.gluster.org/pub/gluster/glusterfs/"
-                           (version-major+minor version) "/" version
-                           "/glusterfs-" version ".tar.gz"))
-       (sha256
-        (base32
-         "01ysvamvfv2l5pswa1rygpg8w0954h2wkh1ba97h3nx03m5n0prg"))
-       (patches
-        (search-patches "glusterfs-use-PATH-instead-of-hardcodes.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags
-       (let ((out (assoc-ref %outputs "out")))
-         (list (string-append "--with-initdir=" out "/etc/init.d")
-               (string-append "--with-mountutildir=" out "/sbin")))
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'replace-config.sub
-           (lambda* (#:key inputs #:allow-other-keys)
-             ;; The distributed config.sub is intentionally left empty and
-             ;; must be replaced.
-             (install-file (string-append (assoc-ref inputs "automake")
-                                          "/share/automake-"
-                                          ,(version-major+minor (package-version automake)) "/config.sub")
-                           ".")
-             #t))
-         ;; Fix flex error.  This has already been fixed with upstream commit
-         ;; db3fe245a9e8812829eae7d143e49d0bfdfef9a7, but is not available in
-         ;; current releases.
-         (add-before 'configure 'fix-lex
-           (lambda _
-             (substitute* "libglusterfs/src/Makefile.in"
-               (("libglusterfs_la_LIBADD = @LEXLIB@")
-                "libglusterfs_la_LIBADD ="))
-             #t)))))
-    (native-inputs
-     `(("cmocka" ,cmocka)
-       ("pkg-config" ,pkg-config)
-       ("python-2" ,python-2) ; must be version 2
-       ("flex" ,flex)
-       ("bison" ,bison)
-       ("automake" ,automake)))
-    (inputs
-     `(("acl" ,acl)
-       ;; GlusterFS fails to build with libressl because HMAC_CTX_new and
-       ;; HMAC_CTX_free are undefined.
-       ("openssl" ,openssl)
-       ("liburcu" ,liburcu)
-       ("libuuid" ,util-linux)
-       ("libxml2" ,libxml2)
-       ("lvm2" ,lvm2)
-       ("readline" ,readline)
-       ("sqlite" ,sqlite) ; for tiering
-       ("zlib" ,zlib)))
-    (home-page "https://www.gluster.org")
-    (synopsis "Distributed file system")
-    (description "GlusterFS is a distributed scalable network file system
+   (name "glusterfs")
+   (version "7.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (string-append "https://download.gluster.org/pub/gluster/glusterfs/"
+                         (version-major+minor version) "/"
+                         "glusterfs-" version ".tar.gz"))
+     (sha256
+      (base32
+       "0yzhx710ypj0j3m5dcgmmgvkp7p0rmmp2p7ld0axrm4vpwc2b1wa"))))
+   (build-system gnu-build-system)
+   (arguments
+    `(#:configure-flags
+      (let ((out (assoc-ref %outputs "out"))
+            (p2 (assoc-ref %build-inputs "python-2")))
+        (list (string-append "PYTHON=" p2 "/bin/python")
+              (string-append "--with-initdir=" out "/etc/init.d")
+              (string-append "--with-mountutildir=" out "/sbin")
+              "--enable-cmocka"  ; unit tests
+              ;; "--enable-debug"  ; debug build options
+              ;; "--enable-asan"  ; Address Sanitizer
+              ;; "--enable-tsan"  ; ThreadSanitizer
+              ))
+      #:phases
+      (modify-phases %standard-phases
+                     (add-before 'configure 'autogen
+                                 (lambda _ (invoke "./autogen.sh"))))))
+   (native-inputs
+    `(("pkg-config" ,pkg-config)
+      ("libtirpc", libtirpc)
+      ("rpcsvc-proto", rpcsvc-proto)
+      ("python-2" ,python-2) ; must be version 2
+      ("flex" ,flex)
+      ("bison" ,bison)
+      ("libtool" ,libtool)
+      ("autoconf" ,autoconf)
+      ("automake" ,automake)
+      ("cmocka" ,cmocka)))
+   (inputs
+    `(("acl" ,acl)
+      ("fuse", fuse)
+      ("openssl" ,openssl)
+      ("liburcu" ,liburcu)
+      ("libuuid" ,util-linux)
+      ("libxml2" ,libxml2)
+      ("readline" ,readline)
+      ("zlib" ,zlib)
+      ("libaio", libaio)
+      ("rdma-core", rdma-core)))
+   (home-page "https://www.gluster.org")
+   (synopsis "Distributed file system")
+   (description "GlusterFS is a distributed scalable network file system
 suitable for data-intensive tasks such as cloud storage and media streaming.
 It allows rapid provisioning of additional storage based on your storage
 consumption needs.  It incorporates automatic failover as a primary feature.
 All of this is accomplished without a centralized metadata server.")
-    ;; The user may choose either LGPLv3+ or GPLv2 only.
-    (license (list license:lgpl3+ license:gpl2+))))
+   ;; The user may choose either LGPLv3+ or GPLv2 only.
+   (license (list license:lgpl3+ license:gpl2+))))
 
 (define-public curlftpfs
   (package
-- 
2.23.0