gnu: guix: Update development snapshot to 71e2065.
[jackhill/guix/guix.git] / gnu / packages / package-management.scm
index acb72f6..7a7dec3 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
-  #:use-module ((guix licenses) #:select (gpl3+ lgpl2.1+))
+  #:use-module (guix build-system python)
+  #:use-module ((guix licenses) #:select (gpl2+ gpl3+ lgpl2.1+ asl2.0))
   #:use-module (gnu packages)
   #:use-module (gnu packages guile)
-  #:use-module ((gnu packages compression) #:select (bzip2 gzip))
+  #:use-module (gnu packages file)
+  #:use-module (gnu packages backup)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages nettle)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages man)
   #:use-module (gnu packages emacs)
-  #:use-module (gnu packages openssl)
-  #:use-module (gnu packages bdw-gc))
+  #:use-module (gnu packages bdw-gc)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages popt)
+  #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages cpio)
+  #:use-module (gnu packages tls))
 
 (define (boot-guile-uri arch)
   "Return the URI for the bootstrap Guile tarball for ARCH."
                      arch "-linux"
                      "/20131110/guile-2.0.9.tar.xz")))
 
-(define-public guix-0.8.1
+(define-public guix-0.9.0
   (package
     (name "guix")
-    (version "0.8.1")
+    (version "0.9.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "12h5ldj1yf0za6ladlr8h7nx2gqrv2dxcsiwyqayvrza93lijkf5"))))
+               "0h573z2br0bf43sxyzia9xlm03n3y43zg1snds3c2piq2m6kabrn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list
                           "--localstatedir=/var"
                           "--sysconfdir=/etc"
+                          (string-append "--with-bash-completion-dir="
+                                         (assoc-ref %outputs "out")
+                                         "/etc/bash_completion.d")
                           (string-append "--with-libgcrypt-prefix="
                                          (assoc-ref %build-inputs
                                                     "libgcrypt")))
-       #:phases (alist-cons-before
-                 'configure 'copy-bootstrap-guile
-                 (lambda* (#:key system inputs #:allow-other-keys)
-                   (define (boot-guile-version arch)
-                     (if (string=? "armhf" arch)
-                         "2.0.11"
-                         "2.0.9"))
-
-                   (define (copy arch)
-                     (let ((guile  (assoc-ref inputs
-                                              (string-append "boot-guile/"
-                                                             arch)))
-                           (target (string-append "gnu/packages/bootstrap/"
-                                                  arch "-linux/"
-                                                  "/guile-"
-                                                  (boot-guile-version arch)
-                                                  ".tar.xz")))
-                       (copy-file guile target)))
-
-                   (copy "i686")
-                   (copy "x86_64")
-                   (copy "mips64el")
-                   (copy "armhf")
-                   #t)
-                 %standard-phases)))
+       #:parallel-tests? #f           ;work around <http://bugs.gnu.org/21097>
+       #:phases (modify-phases %standard-phases
+                  (add-before
+                   'configure 'copy-bootstrap-guile
+                   (lambda* (#:key system inputs #:allow-other-keys)
+                     (define (boot-guile-version arch)
+                       (if (string=? "armhf" arch)
+                           "2.0.11"
+                           "2.0.9"))
+
+                     (define (copy arch)
+                       (let ((guile  (assoc-ref inputs
+                                                (string-append "boot-guile/"
+                                                               arch)))
+                             (target (string-append "gnu/packages/bootstrap/"
+                                                    arch "-linux/"
+                                                    "/guile-"
+                                                    (boot-guile-version arch)
+                                                    ".tar.xz")))
+                         (copy-file guile target)))
+
+                     (copy "i686")
+                     (copy "x86_64")
+                     (copy "mips64el")
+                     (copy "armhf")
+                     #t))
+                  (add-after
+                   'unpack 'disable-container-tests
+                   ;; XXX FIXME: These tests fail within the build container.
+                   (lambda _
+                     (substitute* "tests/syscalls.scm"
+                       (("^\\(test-assert \"(clone|setns|pivot-root)\"" all)
+                        (string-append "(test-skip 1)\n" all)))
+                     (substitute* "tests/containers.scm"
+                       (("^\\(test-assert" all)
+                        (string-append "(test-skip 1)\n" all)))
+                     (when (file-exists? "tests/guix-environment-container.sh")
+                       (substitute* "tests/guix-environment-container.sh"
+                         (("guix environment --version")
+                          "exit 77\n")))
+                     #t))
+                  (add-before 'check 'set-SHELL
+                    (lambda _
+                      ;; 'guix environment' tests rely on 'SHELL' having a
+                      ;; correct value, so set it.
+                      (setenv "SHELL" (which "sh"))
+                      #t))
+                  (add-after
+                   'install 'wrap-program
+                   (lambda* (#:key inputs outputs #:allow-other-keys)
+                     ;; Make sure the 'guix' command finds GnuTLS and
+                     ;; Guile-JSON automatically.
+                     (let* ((out    (assoc-ref outputs "out"))
+                            (json   (assoc-ref inputs "guile-json"))
+                            (gnutls (assoc-ref inputs "gnutls"))
+                            (path   (string-append
+                                     json "/share/guile/site/2.0:"
+                                     gnutls "/share/guile/site/2.0")))
+                       (wrap-program (string-append out "/bin/guix")
+                         `("GUILE_LOAD_PATH" ":" prefix (,path))
+                         `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,path)))
+                       #t))))))
     (native-inputs `(("pkg-config" ,pkg-config)
-                     ("emacs" ,emacs)))           ;for guix.el
+                     ("emacs" ,emacs-no-x)))      ;for guix.el
     (inputs
      (let ((boot-guile (lambda (arch hash)
                          (origin
                        (base32
                         "1mi3brl7l58aww34rawhvja84xc7l1b4hmwdmc36fp9q9mfx0lg5"))))))
     (propagated-inputs
-     `(("guile-json" ,guile-json)
+     `(("gnutls" ,gnutls)                         ;for 'guix download' & co.
+       ("guile-json" ,guile-json)
        ("geiser" ,geiser)))                       ;for guix.el
 
     (home-page "http://www.gnu.org/software/guix")
@@ -141,9 +192,12 @@ the Nix package manager.")
 
 (define guix-devel
   ;; Development version of Guix.
-  (let ((commit "f1082ec"))
-    (package (inherit guix-0.8.1)
-      (version (string-append "0.8.1." commit))
+  ;;
+  ;; Note: use a short commit id; when using the long one, the limit on socket
+  ;; file names is exceeded while running the tests.
+  (let ((commit "71e2065a38cf2641b7eb8c557b0f043f5a42a649"))
+    (package (inherit guix-0.9.0)
+      (version (string-append "0.9.0." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -151,45 +205,65 @@ the Nix package manager.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "0mmwmv3wbrgzs49gnxraj11fp1mxfry4r0n222l3p4yga27vzw6d"))))
+                  "0wrrywfdc27yxjns55qdz5si49c8zcb9q5557g2kx48dbm7p0dzw"))
+                (file-name (string-append "guix-" version "-checkout"))))
       (arguments
-       (substitute-keyword-arguments (package-arguments guix-0.8.1)
+       (substitute-keyword-arguments (package-arguments guix-0.9.0)
+         ((#:configure-flags flags)
+          ;; Set 'DOT_USER_PROGRAM' to the empty string so we don't keep a
+          ;; reference to Graphviz, whose closure is pretty big (too big for
+          ;; the GuixSD installation image.)
+          `(cons "ac_cv_path_DOT_USER_PROGRAM=dot" ,flags))
          ((#:phases phases)
-          `(alist-cons-before
-            'configure 'bootstrap
-            (lambda _
-              ;; Make sure 'msgmerge' can modify the PO files.
-              (for-each (lambda (po)
-                          (chmod po #o666))
-                        (find-files "." "\\.po$"))
-
-              (zero? (system* "./bootstrap")))
-            ,phases))))
+          `(modify-phases ,phases
+             (add-after
+              'unpack 'bootstrap
+              (lambda _
+                ;; Make sure 'msgmerge' can modify the PO files.
+                (for-each (lambda (po)
+                            (chmod po #o666))
+                          (find-files "." "\\.po$"))
+
+                (zero? (system* "sh" "bootstrap"))))))))
       (native-inputs
        `(("autoconf" ,(autoconf-wrapper))
          ("automake" ,automake)
          ("gettext" ,gnu-gettext)
          ("texinfo" ,texinfo)
          ("graphviz" ,graphviz)
-         ,@(package-native-inputs guix-0.8.1))))))
+         ("help2man" ,help2man)
+         ,@(package-native-inputs guix-0.9.0))))))
 
 (define-public guix guix-devel)
 
 (define-public nix
   (package
     (name "nix")
-    (version "1.8")
+    (version "1.11.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://nixos.org/releases/nix/nix-"
                                  version "/nix-" version ".tar.xz"))
              (sha256
               (base32
-               "077hircacgi9y4n6kf48qp4laz1h3ab6sif3rcci1jy13f05w2m3"))))
+               "1mk9z75gklxcv6kzwwz1h5r2ci5kjy6bh7qwk4m5lf5v9s0k64pw"))))
     (build-system gnu-build-system)
     ;; XXX: Should we pass '--with-store-dir=/gnu/store'?  But then we'd also
     ;; need '--localstatedir=/var'.  But then!  The thing would use /var/nix
     ;; instead of /var/guix.  So in the end, we do nothing special.
+    (arguments
+     '(#:configure-flags
+       ;; Set the prefixes of Perl libraries to avoid propagation.
+       (let ((perl-libdir (lambda (p)
+                            (string-append
+                             (assoc-ref %build-inputs p)
+                             "/lib/perl5/site_perl"))))
+         (list (string-append "--with-dbi="
+                              (perl-libdir "perl-dbi"))
+               (string-append "--with-dbd-sqlite="
+                              (perl-libdir "perl-dbd-sqlite"))
+               (string-append "--with-www-curl="
+                              (perl-libdir "perl-www-curl"))))))
     (native-inputs `(("perl" ,perl)
                      ("pkg-config" ,pkg-config)))
     (inputs `(("curl" ,curl)
@@ -210,3 +284,150 @@ never change after they have been built.  Nix stores packages in the Nix
 store, usually the directory /nix/store, where each package has its own unique
 sub-directory.")
     (license lgpl2.1+)))
+
+(define-public stow
+  (package
+    (name "stow")
+    (version "2.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/stow/stow-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1pvky9fayms4r6fhns8jd0vavszd7d979w62vfd5n88v614pdxz2"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("perl" ,perl)))
+    (native-inputs
+     `(("perl-test-simple" ,perl-test-simple)
+       ("perl-test-output" ,perl-test-output)
+       ("perl-capture-tiny" ,perl-capture-tiny)
+       ("perl-io-stringy" ,perl-io-stringy)))
+    (home-page "https://www.gnu.org/software/stow/")
+    (synopsis "Managing installed software packages")
+    (description
+     "GNU Stow is a symlink manager.  It generates symlinks to directories
+of data and makes them appear to be merged into the same directory.  It is
+typically used for managing software packages installed from source, by
+letting you install them apart in distinct directories and then create
+symlinks to the files in a common directory such as /usr/local.")
+    (license gpl2+)))
+
+(define-public rpm
+  (package
+    (name "rpm")
+    (version "4.12.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://rpm.org/releases/rpm-4.12.x/rpm-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "18hk47hc755nslvb7xkq4jb095z7va0nlcyxdpxayc4lmb8mq3bp"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--with-external-db"   ;use the system's bdb
+                           "--enable-python"
+                           "--without-lua")
+       #:phases (modify-phases %standard-phases
+                  (add-before 'configure 'set-nspr-search-path
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; nspr.pc contains the right -I flag pointing to
+                      ;; 'include/nspr', but unfortunately 'configure' doesn't
+                      ;; use 'pkg-config'.  Thus, augment CPATH.
+                      ;; Likewise for NSS.
+                      (let ((nspr (assoc-ref inputs "nspr"))
+                            (nss  (assoc-ref inputs "nss")))
+                        (setenv "CPATH"
+                                (string-append (getenv "C_INCLUDE_PATH") ":"
+                                               nspr "/include/nspr:"
+                                               nss "/include/nss"))
+                        (setenv "LIBRARY_PATH"
+                                (string-append (getenv "LIBRARY_PATH") ":"
+                                               nss "/lib/nss"))
+                        #t)))
+                  (add-after 'install 'fix-rpm-symlinks
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; 'make install' gets these symlinks wrong.  Fix them.
+                      (let* ((out (assoc-ref outputs "out"))
+                             (bin (string-append out "/bin")))
+                        (with-directory-excursion bin
+                          (for-each (lambda (file)
+                                      (delete-file file)
+                                      (symlink "rpm" file))
+                                    '("rpmquery" "rpmverify"))
+                          #t)))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("python" ,python-2)
+       ("xz" ,xz)
+       ("bdb" ,bdb)
+       ("popt" ,popt)
+       ("nss" ,nss)
+       ("nspr" ,nspr)
+       ("libarchive" ,libarchive)
+       ("nettle" ,nettle)            ;XXX: actually a dependency of libarchive
+       ("file" ,file)
+       ("bzip2" ,bzip2)
+       ("zlib" ,zlib)
+       ("cpio" ,cpio)))
+    (home-page "http://www.rpm.org/")
+    (synopsis "The RPM Package Manager")
+    (description
+     "The RPM Package Manager (RPM) is a command-line driven package
+management system capable of installing, uninstalling, verifying, querying,
+and updating computer software packages.  Each software package consists of an
+archive of files along with information about the package like its version, a
+description.  There is also a library permitting developers to manage such
+transactions from C or Python.")
+
+    ;; The whole is GPLv2+; librpm itself is dual-licensed LGPLv2+ | GPLv2+.
+    (license gpl2+)))
+
+(define-public diffoscope
+  (package
+    (name "diffoscope")
+    (version "49")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri name version))
+              (sha256
+               (base32
+                "1mf6b7j82ckn90ggz6bp6c2jydz87xj8r8jmfl4hg7jcmf7dxmim"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  ;; setup.py mistakenly requires python-magic from PyPi, even
+                  ;; though the Python bindings of `file` are sufficient.
+                  ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815844
+                  (add-after 'unpack 'dependency-on-python-magic
+                    (lambda _
+                      (substitute* "setup.py"
+                        (("'python-magic',") ""))))
+                  (add-before 'build 'disable-egg-zipping
+                    (lambda _
+                      ;; Leave the .egg file uncompressed.
+                      (let ((port (open-file "setup.cfg" "a")))
+                        (display "\n[easy_install]\nzip_ok = 0\n"
+                                 port)
+                        (close-port port)
+                        #t))))))
+    (inputs `(("rpm" ,rpm)                        ;for rpm-python
+              ("python-file" ,python-file)
+              ("python-debian" ,python-debian)
+              ("python-libarchive-c" ,python-libarchive-c)
+              ("python-tlsh" ,python-tlsh)
+
+              ;; Below are modules used for tests.
+              ("python-pytest" ,python-pytest)
+              ("python-chardet" ,python-chardet)))
+    (home-page "http://diffoscope.org/")
+    (synopsis "Compare files, archives, and directories in depth")
+    (description
+     "Diffoscope tries to get to the bottom of what makes files or directories
+different.  It recursively unpacks archives of many kinds and transforms
+various binary formats into more human readable forms to compare them.  It can
+compare two tarballs, ISO images, or PDFs just as easily.")
+    (license gpl3+)))