X-Git-Url: http://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/43c082b3618f667ee163dfc6831e6afd1890bf63..01497dfe6c0a2ce69287d0fd0008747965a000df:/gnu/packages/package-management.scm diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm index d7dbb7a3b1..f3a1cda149 100644 --- a/gnu/packages/package-management.scm +++ b/gnu/packages/package-management.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015 Ludovic Courtès +;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès ;;; Copyright © 2015 Ricardo Wurmus ;;; ;;; This file is part of GNU Guix. @@ -21,9 +21,11 @@ #:use-module (guix packages) #:use-module (guix download) #:use-module (guix git-download) + #:use-module (guix gexp) #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system python) + #:use-module ((guix build utils) #:select (with-directory-excursion)) #:use-module ((guix licenses) #:select (gpl2+ gpl3+ lgpl2.1+ asl2.0)) #:use-module (gnu packages) #:use-module (gnu packages guile) @@ -48,7 +50,12 @@ #:use-module (gnu packages popt) #:use-module (gnu packages gnuzilla) #:use-module (gnu packages cpio) - #:use-module (gnu packages tls)) + #:use-module (gnu packages tls) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-26) + #:use-module (ice-9 popen) + #:use-module (ice-9 rdelim) + #:use-module (ice-9 match)) (define (boot-guile-uri arch) "Return the URI for the bootstrap Guile tarball for ARCH." @@ -60,17 +67,17 @@ arch "-linux" "/20131110/guile-2.0.9.tar.xz"))) -(define-public guix-0.9.0 +(define-public guix-0.10.0 (package (name "guix") - (version "0.9.0") + (version "0.10.0") (source (origin (method url-fetch) (uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-" version ".tar.gz")) (sha256 (base32 - "0h573z2br0bf43sxyzia9xlm03n3y43zg1snds3c2piq2m6kabrn")))) + "0d4afwy7bpqi4k4bzvwc4ga4shwssis1nrvdw53qjyg9bw1a8lbn")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list @@ -140,12 +147,19 @@ (path (string-append json "/share/guile/site/2.0:" gnutls "/share/guile/site/2.0"))) + + ;; Ignore user settings so that a bogus + ;; GUILE_LOAD_COMPILED_PATH does not prevent use of + ;; 'guix', notably when it contains entries pointing to + ;; incompatible .go files as reported at + ;; . (wrap-program (string-append out "/bin/guix") - `("GUILE_LOAD_PATH" ":" prefix (,path)) - `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,path))) + `("GUILE_LOAD_PATH" ":" = (,path)) + `("GUILE_LOAD_COMPILED_PATH" ":" = (,path))) + #t)))))) (native-inputs `(("pkg-config" ,pkg-config) - ("emacs" ,emacs-no-x))) ;for guix.el + ("emacs" ,emacs-minimal))) ;for guix.el (inputs (let ((boot-guile (lambda (arch hash) (origin @@ -188,27 +202,30 @@ also a distribution thereof. It includes a virtual machine image. Besides the usual package management features, it also supports transactional upgrades and roll-backs, per-user profiles, and much more. It is based on the Nix package manager.") - (license gpl3+))) + (license gpl3+) + (properties '((ftp-server . "alpha.gnu.org"))))) (define guix-devel ;; Development version of Guix. ;; - ;; 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 "b485f75")) - (package (inherit guix-0.9.0) - (version (string-append "0.9.0." commit)) + ;; Note: use a very short commit id; with a longer one, the limit on + ;; hash-bang lines would be exceeded while running the tests. + (let ((commit "e9017c98d61f305b624bacaa30e8891ec0100980")) + (package (inherit guix-0.10.0) + (version (string-append "0.10.0-0." (string-take commit 4))) (source (origin (method git-fetch) (uri (git-reference - (url "git://git.sv.gnu.org/guix.git") + ;; "git://git.sv.gnu.org/guix.git" temporarily + ;; unavailable (XXX). + (url "http://git.savannah.gnu.org/r/guix.git") (commit commit))) (sha256 (base32 - "1frn74y5c3n91qxs5b3sxbr8ai43s6svlb2djfnp7nqbr1ax3mph")) + "13mfk10cw6fk4diclzld56xwabshanxjcczdrjlj0wisaz32h3nl")) (file-name (string-append "guix-" version "-checkout")))) (arguments - (substitute-keyword-arguments (package-arguments guix-0.9.0) + (substitute-keyword-arguments (package-arguments guix-0.10.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 @@ -232,35 +249,115 @@ the Nix package manager.") ("texinfo" ,texinfo) ("graphviz" ,graphviz) ("help2man" ,help2man) - ,@(package-native-inputs guix-0.9.0)))))) + ,@(package-native-inputs guix-0.10.0)))))) + +(define-public guix guix-devel) + +(define (source-file? file stat) + "Return true if FILE is likely a source file, false if it is a typical +generated file." + (define (wrong-extension? file) + (or (string-suffix? "~" file) + (member (file-extension file) + '("o" "a" "lo" "so" "go")))) -(define-public guix guix-0.9.0) + (match (basename file) + ((or ".git" "autom4te.cache" "configure" "Makefile" "Makefile.in" ".libs") + #f) + ((? wrong-extension?) + #f) + (_ + #t))) + +(define (make-git-predicate directory) + "Return a predicate that returns true if a file is part of the Git checkout +living at DIRECTORY. Upon Git failure, return #f instead of a predicate." + (define (parent-directory? thing directory) + ;; Return #t if DIRECTORY is the parent of THING. + (or (string-suffix? thing directory) + (and (string-index thing #\/) + (parent-directory? (dirname thing) directory)))) + + (let* ((pipe (with-directory-excursion directory + (open-pipe* OPEN_READ "git" "ls-files"))) + (files (let loop ((lines '())) + (match (read-line pipe) + ((? eof-object?) + (reverse lines)) + (line + (loop (cons line lines)))))) + (status (close-pipe pipe))) + (and (zero? status) + (lambda (file stat) + (match (stat:type stat) + ('directory + ;; 'git ls-files' does not list directories, only regular files, + ;; so we need this special trick. + (any (cut parent-directory? <> file) files)) + ((or 'regular 'symlink) + (any (cut string-suffix? <> file) files)) + (_ + #f)))))) + +(define-public current-guix + (let ((select? (delay (or (make-git-predicate + (string-append (current-source-directory) + "/../..")) + source-file?)))) + (lambda () + "Return a package representing Guix built from the current source tree. +This works by adding the current source tree to the store (after filtering it +out) and returning a package that uses that as its 'source'." + (package + (inherit guix) + (version (string-append (package-version guix) "+")) + (source (local-file "../.." "guix-current" + #:recursive? #t + #:select? (force select?))))))) + + +;;; +;;; Other tools. +;;; (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) ("openssl" ,openssl) ("libgc" ,libgc) ("sqlite" ,sqlite) - ("bzip2" ,bzip2))) - (propagated-inputs `(("perl-www-curl" ,perl-www-curl) - ("perl-dbi" ,perl-dbi) - ("perl-dbd-sqlite" ,perl-dbd-sqlite))) + ("bzip2" ,bzip2) + ("perl-www-curl" ,perl-www-curl) + ("perl-dbi" ,perl-dbi) + ("perl-dbd-sqlite" ,perl-dbd-sqlite))) (home-page "http://nixos.org/nix/") (synopsis "The Nix package manager") (description @@ -275,21 +372,22 @@ sub-directory.") (define-public stow (package (name "stow") - (version "2.2.0") + (version "2.2.2") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/stow/stow-" version ".tar.gz")) (sha256 (base32 - "0arw1nsdlcvd7javkbk2bdvnc31d7dmb6fr25xyyi6ng76cxg2cb")))) + "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-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 @@ -303,14 +401,15 @@ symlinks to the files in a common directory such as /usr/local.") (define-public rpm (package (name "rpm") - (version "4.12.0") + (version "4.12.0.1") (source (origin (method url-fetch) (uri (string-append "http://rpm.org/releases/rpm-4.12.x/rpm-" version ".tar.bz2")) (sha256 (base32 - "18hk47hc755nslvb7xkq4jb095z7va0nlcyxdpxayc4lmb8mq3bp")))) + "0a82ym8phx7g0f3k6smvxnvzh7yv857l42xafk49689kzhld5pbp")) + (patches (search-patches "rpm-CVE-2014-8118.patch")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--with-external-db" ;use the system's bdb @@ -326,7 +425,7 @@ symlinks to the files in a common directory such as /usr/local.") (let ((nspr (assoc-ref inputs "nspr")) (nss (assoc-ref inputs "nss"))) (setenv "CPATH" - (string-append (getenv "CPATH") ":" + (string-append (getenv "C_INCLUDE_PATH") ":" nspr "/include/nspr:" nss "/include/nss")) (setenv "LIBRARY_PATH" @@ -375,21 +474,23 @@ transactions from C or Python.") (define-public diffoscope (package (name "diffoscope") - (version "34") + (version "51") (source (origin - (method git-fetch) - (uri (git-reference - (url - "https://anonscm.debian.org/cgit/reproducible/diffoscope.git") - (commit version))) + (method url-fetch) + (uri (pypi-uri name version)) (sha256 (base32 - "1g8b7bpkmns0355gkr3a244affwx4xzqwahwsl6ivw4z0qv7dih8")) - (file-name (string-append name "-" version "-checkout")))) + "18rn6rrwh586228vnaf1nq0wayh19zbvfc0qmnbys6ln2pv2v007")))) (build-system python-build-system) (arguments - `(#:python ,python-2 - #:phases (modify-phases %standard-phases + `(#: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. @@ -397,27 +498,16 @@ transactions from C or Python.") (display "\n[easy_install]\nzip_ok = 0\n" port) (close-port port) - #t))) - (add-before 'build 'dependency-on-rpm - (lambda _ - (substitute* "setup.py" - ;; Somehow this requirement is reported as not met, - ;; even though rpm.py is in the search path. So - ;; delete it. - (("'rpm-python',") "")) - #t))) - ;; FIXME: Some obscure test failures. - #:tests? #f)) + #t)))))) (inputs `(("rpm" ,rpm) ;for rpm-python - ("python-file" ,python2-file) - ("python-debian" ,python2-debian) - ("python-libarchive-c" ,python2-libarchive-c) - ("python-tlsh" ,python2-tlsh) + ("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" ,python2-pytest) - ("python-chardet" ,python2-chardet))) - (native-inputs `(("python-setuptools" ,python2-setuptools))) + ("python-pytest" ,python-pytest) + ("python-chardet" ,python-chardet))) (home-page "http://diffoscope.org/") (synopsis "Compare files, archives, and directories in depth") (description