Merge branch 'master' into dbus-update
This commit is contained in:
		
						commit
						d3365d4866
					
				
					 34 changed files with 4940 additions and 418 deletions
				
			
		|  | @ -48,6 +48,7 @@ MODULES =					\ | |||
|   guix/nar.scm					\ | ||||
|   guix/derivations.scm				\ | ||||
|   guix/gnu-maintenance.scm			\ | ||||
|   guix/upstream.scm				\ | ||||
|   guix/licenses.scm				\ | ||||
|   guix/build-system.scm				\ | ||||
|   guix/build-system/cmake.scm			\ | ||||
|  |  | |||
|  | @ -4211,8 +4211,12 @@ gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0 | |||
| @end example | ||||
| 
 | ||||
| It does so by browsing each package's FTP directory and determining the | ||||
| highest version number of the source tarballs | ||||
| therein@footnote{Currently, this only works for GNU packages.}. | ||||
| highest version number of the source tarballs therein.  The command | ||||
| knows how to update specific types of packages: GNU packages, ELPA | ||||
| packages, etc.---see the documentation for @option{--type} below.  The | ||||
| are many packages, though, for which it lacks a method to determine | ||||
| whether a new upstream release is available.  However, the mechanism is | ||||
| extensible, so feel free to get in touch with us to add a new method! | ||||
| 
 | ||||
| When passed @code{--update}, it modifies distribution source files to | ||||
| update the version numbers and source tarball hashes of those packages' | ||||
|  | @ -4257,6 +4261,29 @@ The @code{non-core} subset refers to the remaining packages.  It is | |||
| typically useful in cases where an update of the core packages would be | ||||
| inconvenient. | ||||
| 
 | ||||
| @item --type=@var{updater} | ||||
| @itemx -t @var{updater} | ||||
| Select only packages handled by @var{updater}.  Currently, @var{updater} | ||||
| may be one of: | ||||
| 
 | ||||
| @table @code | ||||
| @item gnu | ||||
| the updater for GNU packages; | ||||
| @item elpa | ||||
| the updater for @uref{http://elpa.gnu.org/, ELPA} packages; | ||||
| @item cran | ||||
| the updater fro @uref{http://cran.r-project.org/, CRAN} packages. | ||||
| @end table | ||||
| 
 | ||||
| For instance, the following commands only checks for updates of Emacs | ||||
| packages hosted at @code{elpa.gnu.org} and updates of CRAN packages: | ||||
| 
 | ||||
| @example | ||||
| $ guix refresh -t elpa -t cran | ||||
| gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0 | ||||
| gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9 | ||||
| @end example | ||||
| 
 | ||||
| @end table | ||||
| 
 | ||||
| In addition, @command{guix refresh} can be passed one or more package | ||||
|  |  | |||
|  | @ -439,6 +439,7 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/elfutils-tests-ptrace.patch		\ | ||||
|   gnu/packages/patches/emacs-exec-path.patch			\ | ||||
|   gnu/packages/patches/eudev-rules-directory.patch		\ | ||||
|   gnu/packages/patches/evilwm-lost-focus-bug.patch		\ | ||||
|   gnu/packages/patches/expat-CVE-2015-1283.patch		\ | ||||
|   gnu/packages/patches/fastcap-mulGlobal.patch			\ | ||||
|   gnu/packages/patches/fastcap-mulSetup.patch			\ | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ | |||
|   #:use-module (guix utils) | ||||
|   #:use-module ((guix ftp-client) #:select (ftp-open)) | ||||
|   #:use-module (guix gnu-maintenance) | ||||
|   #:use-module (guix upstream) | ||||
|   #:use-module (ice-9 ftw) | ||||
|   #:use-module (ice-9 vlist) | ||||
|   #:use-module (ice-9 match) | ||||
|  | @ -377,14 +378,18 @@ it." | |||
|       (when (false-if-exception (gnu-package? package)) | ||||
|         (let ((name      (package-name package)) | ||||
|               (full-name (package-full-name package))) | ||||
|           ;; XXX: This could work with non-GNU packages as well.  However, | ||||
|           ;; GNU's FTP-based updater would be too slow if it weren't memoized, | ||||
|           ;; and the generic interface in (guix upstream) doesn't support | ||||
|           ;; that. | ||||
|           (match (waiting (latest-release name | ||||
|                                           #:ftp-open ftp-open* | ||||
|                                           #:ftp-close (const #f)) | ||||
|                           (_ "looking for the latest release of GNU ~a...") name) | ||||
|             ((? gnu-release? release) | ||||
|             ((? upstream-source? source) | ||||
|              (let ((latest-version | ||||
|                     (string-append (gnu-release-package release) "-" | ||||
|                                    (gnu-release-version release)))) | ||||
|                     (string-append (upstream-source-package source) "-" | ||||
|                                    (upstream-source-version source)))) | ||||
|               (when (version>? latest-version full-name) | ||||
|                 (format (current-error-port) | ||||
|                         (_ "~a: note: using ~a \ | ||||
|  |  | |||
|  | @ -2149,6 +2149,52 @@ viewer.") | |||
|                                    (string-append bin "/samtools"))))) | ||||
|            (delete 'patch-tests))))))) | ||||
| 
 | ||||
| (define-public mosaik | ||||
|   (let ((commit "5c25216d")) | ||||
|     (package | ||||
|       (name "mosaik") | ||||
|       (version "2.2.30") | ||||
|       (source (origin | ||||
|                 ;; There are no release tarballs nor tags. | ||||
|                 (method git-fetch) | ||||
|                 (uri (git-reference | ||||
|                       (url "https://github.com/wanpinglee/MOSAIK.git") | ||||
|                       (commit commit))) | ||||
|                 (file-name (string-append name "-" version)) | ||||
|                 (sha256 | ||||
|                  (base32 | ||||
|                   "17gj3s07cm77r41z92awh0bim7w7q7fbn0sf5nkqmcm1vw052qgw")))) | ||||
|       (build-system gnu-build-system) | ||||
|       (arguments | ||||
|        `(#:tests? #f ; no tests | ||||
|          #:make-flags (list "CC=gcc") | ||||
|          #:phases | ||||
|          (modify-phases %standard-phases | ||||
|            (replace 'configure | ||||
|                     (lambda _ (chdir "src") #t)) | ||||
|            (replace 'install | ||||
|                     (lambda* (#:key outputs #:allow-other-keys) | ||||
|                       (let ((bin (string-append (assoc-ref outputs "out") | ||||
|                                                 "/bin"))) | ||||
|                         (mkdir-p bin) | ||||
|                         (copy-recursively "../bin" bin) | ||||
|                         #t)))))) | ||||
|       (inputs | ||||
|        `(("perl" ,perl) | ||||
|          ("zlib" ,zlib))) | ||||
|       (home-page "https://code.google.com/p/mosaik-aligner/") | ||||
|       (synopsis "Map nucleotide sequence reads to reference genomes") | ||||
|       (description | ||||
|        "MOSAIK is a program for mapping second and third-generation sequencing | ||||
| reads to a reference genome.  MOSAIK can align reads generated by all the | ||||
| major sequencing technologies, including Illumina, Applied Biosystems SOLiD, | ||||
| Roche 454, Ion Torrent and Pacific BioSciences SMRT.") | ||||
|       ;; MOSAIK is released under the GPLv2+ with the exception of third-party | ||||
|       ;; code released into the public domain: | ||||
|       ;; 1. fastlz by Ariya Hidayat - http://www.fastlz.org/ | ||||
|       ;; 2. MD5 implementation - RSA Data Security, RFC 1321 | ||||
|       (license (list license:gpl2+ license:public-domain))))) | ||||
| 
 | ||||
| (define-public ngs-sdk | ||||
|   (package | ||||
|     (name "ngs-sdk") | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> | ||||
| ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -231,6 +232,25 @@ depend on the file system of the medium.  The maximum error correction | |||
| capacity is user-selectable.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public libcue | ||||
|   (package | ||||
|     (name "libcue") | ||||
|     (version "1.4.0") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://sourceforge/libcue/libcue-" | ||||
|                                  version ".tar.bz2")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "17kjd7rjz1bvfn44n3n2bjb7a1ywd0yc0g4sqp5ihf9b5bn7cwlb")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (home-page "http://libcue.sourceforge.net/") | ||||
|     (synopsis "C library to parse cue sheets") | ||||
|     (description "Libcue is a C library to parse so-called @dfn{cue sheets} | ||||
| which contain meta-data for CD/DVD tracks.  It provides an API to manipulate | ||||
| the data.") | ||||
|     (license gpl2+))) | ||||
| 
 | ||||
| (define-public cd-discid | ||||
|   (package | ||||
|     (name "cd-discid") | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
| ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> | ||||
| ;;; Copyright © 2015 Leo Famulari <leo@famulari.name> | ||||
| ;;; Copyright © 2015 Jeff Mickey <j@codemac.net> | ||||
| ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -25,6 +26,7 @@ | |||
| 
 | ||||
| (define-module (gnu packages compression) | ||||
|   #:use-module ((guix licenses) #:prefix license:) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix git-download) | ||||
|  | @ -225,6 +227,36 @@ decompression.") | |||
|                                   "See LICENSE in the distribution.")) | ||||
|       (home-page "http://www.bzip.org/")))) | ||||
| 
 | ||||
| (define-public pbzip2 | ||||
|   (package | ||||
|     (name "pbzip2") | ||||
|     (version "1.1.12") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "https://launchpad.net/pbzip2/" | ||||
|                                  (version-major+minor version) "/" version | ||||
|                                  "/+download/" name "-" version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1vk6065dv3a47p86vmp8hv3n1ygd9hraz0gq89gvzlx7lmcb6fsp")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("bzip2", bzip2))) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; no tests | ||||
|        #:phases (modify-phases %standard-phases | ||||
|                   (delete 'configure)) | ||||
|        #:make-flags (list (string-append "PREFIX=" %output)))) | ||||
|     (home-page "http://compression.ca/pbzip2/") | ||||
|     (synopsis "Parallel bzip2 implementation") | ||||
|     (description | ||||
|      "Pbzip2 is a parallel implementation of the bzip2 block-sorting file | ||||
| compressor that uses pthreads and achieves near-linear speedup on SMP machines. | ||||
| The output of this version is fully compatible with bzip2 v1.0.2 (i.e. anything | ||||
| compressed with pbzip2 can be decompressed with bzip2).") | ||||
|     (license (license:non-copyleft "file://COPYING" | ||||
|                                    "See COPYING in the distribution.")))) | ||||
| 
 | ||||
| (define-public xz | ||||
|   (package | ||||
|    (name "xz") | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com> | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -28,46 +28,42 @@ | |||
| (define-public conkeror | ||||
|   (package | ||||
|     (name "conkeror") | ||||
|     (version "1.0pre1") | ||||
|     (version "1.0pre1.20150730") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri | ||||
|                (string-append "http://repo.or.cz/w/conkeror.git/snapshot/" | ||||
|                               "8a26fff5896a3360549e2adfbf06b1d57e909266" | ||||
|                               ".tar.gz")) ; tag: debian-1.0--pre-1+git140616-1 | ||||
|                               "a1f7e879b129df5cf14ea4ce80a9c1407380ed58" | ||||
|                               ".tar.gz")) ; tag: debian-1.0--pre-1+git150730-1 | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1cgjzi7g3g22zcx6bpfnid4i12sb45w6icmxdzjn8d3c0m8qsyp1")))) | ||||
|                 "1q45hc30733gz3ca2ixvw0rzzcbi7rlay7gx7kvzjv17a030nyk0")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("icecat" ,icecat))) | ||||
|     (arguments | ||||
|      `(#:tests? #f                      ;no tests | ||||
|        #:make-flags '("CC=gcc") | ||||
|        #:make-flags `("CC=gcc" | ||||
|                       ,(string-append "PREFIX=" (assoc-ref %outputs "out"))) | ||||
|        #:phases | ||||
|        (alist-delete | ||||
|         'configure | ||||
|         (alist-replace | ||||
|          'install | ||||
|          (lambda _ | ||||
|            (begin | ||||
|              (use-modules (guix build utils)) | ||||
|              (let* ((datadir  (string-append %output "/share/conkeror")) | ||||
|                     (bindir   (string-append %output "/bin")) | ||||
|                     (launcher (string-append bindir  "/conkeror")) | ||||
|                     (spawn    (string-append bindir  "/conkeror-spawn-helper"))) | ||||
|                (copy-recursively "." datadir) | ||||
|                (mkdir-p bindir) | ||||
|                (copy-file "conkeror-spawn-helper" spawn) | ||||
|        (modify-phases %standard-phases | ||||
|          (delete 'configure) | ||||
|          (add-after | ||||
|           'install 'install-app-launcher | ||||
|           (lambda* (#:key inputs outputs #:allow-other-keys) | ||||
|             ;; This overwrites the installed launcher, which execs xulrunner, | ||||
|             ;; with one that execs 'icecat --app' | ||||
|             (let* ((out      (assoc-ref outputs "out")) | ||||
|                    (datadir  (string-append out "/share/conkeror")) | ||||
|                    (launcher (string-append out "/bin/conkeror"))) | ||||
|               (call-with-output-file launcher | ||||
|                 (lambda (p) | ||||
|                   (format p "#!~a/bin/bash | ||||
| exec ~a/bin/icecat --app ~a \"$@\"~%" | ||||
|                            (assoc-ref %build-inputs "bash") ;implicit input | ||||
|                            (assoc-ref %build-inputs "icecat") | ||||
|                           (assoc-ref inputs "bash") ;implicit input | ||||
|                           (assoc-ref inputs "icecat") | ||||
|                           (string-append datadir | ||||
|                                          "/application.ini")))) | ||||
|                (chmod launcher #o555)))) | ||||
|          %standard-phases)))) | ||||
|               (chmod launcher #o555))))))) | ||||
|     (synopsis "Keyboard focused web browser with Emacs look and feel") | ||||
|     (description "Conkeror is a highly-programmable web browser based on | ||||
| Mozilla XULRunner which is the base of all Mozilla products including Firefox. | ||||
|  |  | |||
|  | @ -27,14 +27,14 @@ | |||
| (define-public freeipmi | ||||
|   (package | ||||
|     (name "freeipmi") | ||||
|     (version "1.4.9") | ||||
|     (version "1.4.10") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append "mirror://gnu/freeipmi/freeipmi-" | ||||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0v2xfwik2mv6z8066raiypc4xymjvr8pb0mv3mc3g4ym4km132qp")))) | ||||
|                "1l98l8g8lha85q1d288wr7dyx00x36smh9g5wza15n4wm35c9wqs")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("readline" ,readline) ("libgcrypt" ,libgcrypt))) | ||||
|  |  | |||
|  | @ -6,12 +6,13 @@ | |||
| ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net> | ||||
| ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2014, 2015 Sou Bunnbu <iyzsong@gmail.com> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com> | ||||
| ;;; Copyright © 2015 Christopher Allan Webber <cwebber@dustycloud.org> | ||||
| ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> | ||||
| ;;; Copyright © 2015 Alex Kost <alezost@gmail.com> | ||||
| ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -34,7 +35,9 @@ | |||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix git-download) | ||||
|   #:use-module (guix svn-download) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages autotools) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages admin) | ||||
|   #:use-module (gnu packages audio) | ||||
|  | @ -49,6 +52,7 @@ | |||
|   #:use-module (gnu packages guile) | ||||
|   #:use-module (gnu packages libcanberra) | ||||
|   #:use-module (gnu packages libunwind) | ||||
|   #:use-module (gnu packages haskell) | ||||
|   #:use-module (gnu packages mp3) | ||||
|   #:use-module (gnu packages image) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|  | @ -78,6 +82,7 @@ | |||
|   #:use-module (gnu packages fribidi) | ||||
|   #:use-module (guix build-system trivial) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system haskell) | ||||
|   #:use-module (guix build-system cmake) | ||||
|   #:use-module (guix build-system trivial)) | ||||
| 
 | ||||
|  | @ -1048,6 +1053,48 @@ experience and advance levels, and are carried over from one scenario to the | |||
| next campaign.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public dosbox | ||||
|   (package | ||||
|     (name "dosbox") | ||||
|     (version "0.74.svn3947") | ||||
|     (source (origin | ||||
|               (method svn-fetch) | ||||
|               (uri (svn-reference | ||||
|                     (url "http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk/") | ||||
|                     (revision 3947))) | ||||
|               (file-name (string-append name "-" version "-checkout")) | ||||
|               ;; Use SVN head, since the last release (2010) is incompatible | ||||
|               ;; with GCC 4.8+ (see | ||||
|               ;; <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624976>). | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1p918j6090d1nkvgq7ifvmn506zrdmyi32y7p3ms40d5ssqjg8fj")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:phases (modify-phases %standard-phases | ||||
|                   (add-after | ||||
|                    'unpack 'autogen.sh | ||||
|                    (lambda _ | ||||
|                      (zero? (system* "sh" "autogen.sh"))))))) | ||||
|     (native-inputs | ||||
|      `(("autoconf" ,autoconf) | ||||
|        ("automake" ,automake))) | ||||
|     (inputs | ||||
|      `(("sdl" ,sdl) | ||||
|        ("libpng" ,libpng) | ||||
|        ("zlib" ,zlib) | ||||
|        ("alsa-lib" ,alsa-lib) | ||||
|        ("glu" ,glu) | ||||
|        ("mesa" ,mesa))) | ||||
|     (home-page "http://www.dosbox.com") | ||||
|     (synopsis "x86 emulator with CGA/EGA/VGA/etc. graphics and sound") | ||||
|     (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox | ||||
| also emulates CPU:286/386 realmode/protected mode, Directory | ||||
| FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a | ||||
| SoundBlaster/Gravis Ultra Sound card for excellent sound compatibility with | ||||
| older games.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public gamine | ||||
|   (package | ||||
|     (name "gamine") | ||||
|  | @ -1094,6 +1141,39 @@ on the screen and keyboard to display letters.") | |||
|     ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3 | ||||
|     (license license:gpl3))) | ||||
| 
 | ||||
| (define-public raincat | ||||
|   (package | ||||
|     (name "raincat") | ||||
|     (version "1.1.1.3") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append | ||||
|              "http://hackage.haskell.org/package/Raincat/Raincat-" | ||||
|              version | ||||
|              ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1aalh68h6799mv4vyg30zpskl5jkn6x2j1jza7p4lrflyifxzar8")))) | ||||
|     (build-system haskell-build-system) | ||||
|     (inputs | ||||
|      `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions) | ||||
|        ("ghc-mtl" ,ghc-mtl) | ||||
|        ("ghc-random" ,ghc-random) | ||||
|        ("ghc-glut" ,ghc-glut) | ||||
|        ("ghc-opengl" ,ghc-opengl) | ||||
|        ("ghc-sdl" ,ghc-sdl) | ||||
|        ("ghc-sdl-image" ,ghc-sdl-image) | ||||
|        ("ghc-sdl-mixer" ,ghc-sdl-mixer))) | ||||
|     (home-page "http://raincat.bysusanlin.com/") | ||||
|     (synopsis "Puzzle game with a cat in lead role") | ||||
|     (description "Project Raincat is a game developed by Carnegie Mellon | ||||
| students through GCS during the Fall 2008 semester.  Raincat features game | ||||
| play inspired from classics Lemmings and The Incredible Machine.  The project | ||||
| proved to be an excellent learning experience for the programmers.  Everything | ||||
| is programmed in Haskell.") | ||||
|     (license license:bsd-3))) | ||||
| 
 | ||||
| (define-public manaplus | ||||
|   (package | ||||
|     (name "manaplus") | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ | |||
| (define-public gnu-pw-mgr | ||||
|   (package | ||||
|     (name "gnu-pw-mgr") | ||||
|     (version "1.5") | ||||
|     (version "1.6") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -37,7 +37,7 @@ | |||
|                           version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "1winmckl4h8lypg57hd3nd7jscpdr7f1v8zi432k5h648izkf2dg")))) | ||||
|         "141wfm4w420ygrl7qvrc84drzv34jym0d2bxqcgi7n1vimql0slp")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs | ||||
|      `(("which" ,which) | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -26,7 +26,7 @@ | |||
| (define-public less | ||||
|   (package | ||||
|     (name "less") | ||||
|     (version "451") | ||||
|     (version "481") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -34,7 +34,7 @@ | |||
|                           version ".tar.gz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "0mszdd9m1dsbg59pav62swg9f87xmjpfspcw2jsazzksciy2is4z")))) | ||||
|         "19fxj0h10y5bhr3a1xa7kqvnwl44db3sdypz8jxl1q79yln8z8rz")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs `(("ncurses" ,ncurses))) | ||||
|     (home-page "https://www.gnu.org/software/less/") | ||||
|  |  | |||
|  | @ -210,7 +210,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM." | |||
|      #f))) | ||||
| 
 | ||||
| (define-public linux-libre | ||||
|   (let* ((version "4.2.3") | ||||
|   (let* ((version "4.2.4") | ||||
|          (build-phase | ||||
|           '(lambda* (#:key system inputs #:allow-other-keys #:rest args) | ||||
|              ;; Apply the neat patch. | ||||
|  | @ -283,7 +283,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM." | |||
|              (uri (linux-libre-urls version)) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "1xpx32k6bzxqg5y8lyaana97jjcli00iyqklh5fdhirfvjb9dimd")))) | ||||
|                "11r9yhi4c2zwfb8i21zk014gcm1kvnabq410wjy6g6a015d5v37w")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("perl" ,perl) | ||||
|                      ("bc" ,bc) | ||||
|  |  | |||
|  | @ -162,7 +162,7 @@ Linux kernel and C library interfaces employed by user-space programs.") | |||
| (define-public help2man | ||||
|   (package | ||||
|     (name "help2man") | ||||
|     (version "1.47.1") | ||||
|     (version "1.47.2") | ||||
|     (source | ||||
|      (origin | ||||
|       (method url-fetch) | ||||
|  | @ -170,7 +170,7 @@ Linux kernel and C library interfaces employed by user-space programs.") | |||
|                           version ".tar.xz")) | ||||
|       (sha256 | ||||
|        (base32 | ||||
|         "01ib718afwc28bmh1n0p5h7245vs3rrfm7bj1sq4avmh1kv2d6y5")))) | ||||
|         "0z1zgw6k1fba59fii6ksfi1g2gci6i4ysa3kdfh3j475fdkn1if4")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments `(;; There's no `check' target. | ||||
|                  #:tests? #f)) | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> | ||||
| ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -33,6 +34,7 @@ | |||
|   #:use-module (gnu packages base) ;libbdf | ||||
|   #:use-module (gnu packages boost) | ||||
|   #:use-module (gnu packages bison) | ||||
|   #:use-module (gnu packages cdrom) | ||||
|   #:use-module (gnu packages code) | ||||
|   #:use-module (gnu packages check) | ||||
|   #:use-module (gnu packages compression) | ||||
|  | @ -55,6 +57,7 @@ | |||
|   #:use-module (gnu packages linux) ; for alsa-utils | ||||
|   #:use-module (gnu packages man) | ||||
|   #:use-module (gnu packages mp3) | ||||
|   #:use-module (gnu packages ncurses) | ||||
|   #:use-module (gnu packages netpbm) | ||||
|   #:use-module (gnu packages pdf) | ||||
|   #:use-module (gnu packages perl) | ||||
|  | @ -67,6 +70,7 @@ | |||
|   #:use-module (gnu packages tcl) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages texlive) | ||||
|   #:use-module (gnu packages video) | ||||
|   #:use-module (gnu packages web) | ||||
|   #:use-module (gnu packages xml) | ||||
|   #:use-module (gnu packages xorg) | ||||
|  | @ -74,6 +78,67 @@ | |||
|   #:use-module (gnu packages zip) | ||||
|   #:use-module ((srfi srfi-1) #:select (last))) | ||||
| 
 | ||||
| (define-public cmus | ||||
|   (package | ||||
|     (name "cmus") | ||||
|     (version "2.7.1") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "https://github.com/" name "/" name "/archive/v" | ||||
|                     version ".tar.gz")) | ||||
|               (file-name (string-append name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "0raixgjavkm7hxppzsc5zqbfbh2bhjcmbiplhnsxsmyj8flafyc1")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; cmus does not include tests | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (replace | ||||
|           'configure | ||||
|           (lambda* (#:key outputs #:allow-other-keys) | ||||
|             (let ((out (assoc-ref outputs "out"))) | ||||
| 
 | ||||
|               ;; It's an idiosyncratic configure script that doesn't | ||||
|               ;; understand --prefix=..; it wants prefix=.. instead. | ||||
|               (zero? | ||||
|                (system* "./configure" | ||||
|                         (string-append "prefix=" out))))))))) | ||||
|     ;; TODO: cmus optionally supports the following formats, which haven't yet | ||||
|     ;; been added to Guix: | ||||
|     ;; | ||||
|     ;; - Roar, libroar | ||||
|     ;; | ||||
|     ;; - DISCID_LIBS, apparently different from cd-discid which is included in | ||||
|     ;;   Guix.  See <http://sourceforge.net/projects/discid/> | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("alsa-lib" ,alsa-lib) | ||||
|        ("ao" ,ao) | ||||
|        ("ffmpeg" ,ffmpeg) | ||||
|        ("flac" ,flac) | ||||
|        ("jack" ,jack-1) | ||||
|        ("libcddb" ,libcddb) | ||||
|        ("libcdio-paranoia" ,libcdio-paranoia) | ||||
|        ("libcue" ,libcue) | ||||
|        ("libmad" ,libmad) | ||||
|        ("libmodplug" ,libmodplug) | ||||
|        ("libmpcdec" ,libmpcdec) | ||||
|        ("libsamplerate" ,libsamplerate) | ||||
|        ("libvorbis" ,libvorbis) | ||||
|        ("ncurses" ,ncurses) | ||||
|        ("opusfile" ,opusfile) | ||||
|        ("pulseaudio" ,pulseaudio) | ||||
|        ("wavpack" ,wavpack))) | ||||
|      (home-page "https://cmus.github.io/") | ||||
|      (synopsis "Small console music player") | ||||
|      (description "Cmus is a small and fast console music player.  It supports | ||||
| many input formats and provides a customisable Vi-style user interface.") | ||||
|      (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public hydrogen | ||||
|   (package | ||||
|     (name "hydrogen") | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ | |||
| (define-public ntp | ||||
|   (package | ||||
|    (name "ntp") | ||||
|    (version "4.2.8p3") | ||||
|    (version "4.2.8p4") | ||||
|    (source (origin | ||||
| 	    (method url-fetch) | ||||
| 	    (uri (string-append | ||||
|  | @ -44,7 +44,7 @@ | |||
|                   "/ntp-" version ".tar.gz")) | ||||
| 	    (sha256 | ||||
| 	     (base32 | ||||
| 	      "13zkzcvjm5kbxl4xbcmaq07slplhmpkgahzcqnqlba3cxpra9341")) | ||||
| 	      "1fgxbhv0wyiivi6kh5zpzrd0yqmc48z7d3zmjspw9lj84mbn2s8d")) | ||||
|             (modules '((guix build utils))) | ||||
|             (snippet | ||||
|              '(begin | ||||
|  |  | |||
							
								
								
									
										18
									
								
								gnu/packages/patches/evilwm-lost-focus-bug.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								gnu/packages/patches/evilwm-lost-focus-bug.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| evilwm may sometimes lose focus after closing a window.  This means that | ||||
| evilwm stops responding to keyboard shortcuts, and if no other window is open | ||||
| which the mouse can be moved over to regain focus evilwm becomes unusable and | ||||
| has to be restarted. | ||||
| 
 | ||||
| Patch derived from discussion at | ||||
| https://wiki.archlinux.org/index.php/Evilwm#Lost_focus_bug_fix | ||||
| 
 | ||||
| --- evilwm-1.1.1/client.c
 | ||||
| +++ evilwm-1.1.1/client.c
 | ||||
| @@ -172,6 +172,7 @@
 | ||||
|  	 *  _NET_WM_STATE) */ | ||||
|  	if (c->remove) { | ||||
|  		LOG_DEBUG("setting WithdrawnState\n"); | ||||
| +		XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
 | ||||
|  		set_wm_state(c, WithdrawnState); | ||||
|  		ewmh_withdraw_client(c); | ||||
|  	} else { | ||||
|  | @ -3060,6 +3060,43 @@ that client code uses to construct the grammar directly in Python code.") | |||
| (define-public python2-numpydoc | ||||
|   (package-with-python2 python-numpydoc)) | ||||
| 
 | ||||
| (define-public python-numexpr | ||||
|   (package | ||||
|     (name "python-numexpr") | ||||
|     (version "2.4.4") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "https://pypi.python.org/packages/source/" | ||||
|                            "n/numexpr/numexpr-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0nsnff5312fm38w6dm34bw7ghfqqy8vl9gig0al963h4mz8zm8nz")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments `(#:tests? #f))          ; no tests included | ||||
|     (propagated-inputs | ||||
|      `(("python-numpy" ,python-numpy))) | ||||
|     (home-page "https://github.com/pydata/numexpr") | ||||
|     (synopsis "Fast numerical expression evaluator for NumPy") | ||||
|     (description | ||||
|      "Numexpr is a fast numerical expression evaluator for NumPy.  With it, | ||||
| expressions that operate on arrays are accelerated and use less memory than | ||||
| doing the same calculation in Python.  In addition, its multi-threaded | ||||
| capabilities can make use of all your cores, which may accelerate | ||||
| computations, most specially if they are not memory-bounded (e.g. those using | ||||
| transcendental functions).") | ||||
|     (license license:expat))) | ||||
| 
 | ||||
| (define-public python2-numexpr | ||||
|   (let ((numexpr (package-with-python2 python-numexpr))) | ||||
|     (package (inherit numexpr) | ||||
|       ;; Make sure to use special packages for Python 2 instead | ||||
|       ;; of those automatically rewritten by package-with-python2. | ||||
|       (propagated-inputs | ||||
|        `(("python2-numpy" ,python2-numpy) | ||||
|          ,@(alist-delete "python-numpy" | ||||
|                          (package-propagated-inputs numexpr))))))) | ||||
| 
 | ||||
| (define-public python-matplotlib | ||||
|   (package | ||||
|     (name "python-matplotlib") | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ | |||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system r) | ||||
|   #:use-module (guix build-system python) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages compression) | ||||
|   #:use-module (gnu packages gcc) | ||||
|  | @ -35,11 +36,14 @@ | |||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages readline) | ||||
|   #:use-module (gnu packages texlive) | ||||
|   #:use-module (gnu packages texinfo) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages xorg)) | ||||
|   #:use-module (gnu packages xorg) | ||||
|   #:use-module (gnu packages zip) | ||||
|   #:use-module (srfi srfi-1)) | ||||
| 
 | ||||
| (define-public r | ||||
|   (package | ||||
|  | @ -933,3 +937,119 @@ times.") | |||
| large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of | ||||
| columns by group, column listing and fast file reading.") | ||||
|     (license license:gpl2+))) | ||||
| 
 | ||||
| (define-public python-patsy | ||||
|   (package | ||||
|     (name "python-patsy") | ||||
|     (version "0.4.0") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://pypi.python.org/packages/source/" | ||||
|                                   "p/patsy/patsy-" version ".zip")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1kbs996xc2haxalmhd19rr1wh5fa4gbbxf81czkf5w4kam7h7wz4")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (replace 'check (lambda _ (zero? (system* "nosetests" "-v")))) | ||||
|          (add-after 'unpack 'prevent-generation-of-egg-archive | ||||
|           (lambda _ | ||||
|             (substitute* "setup.py" | ||||
|               (("from setuptools import setup") | ||||
|                "from distutils.core import setup")) | ||||
|             #t))))) | ||||
|     (propagated-inputs | ||||
|      `(("python-numpy" ,python-numpy) | ||||
|        ("python-scipy" ,python-scipy) | ||||
|        ("python-six" ,python-six))) | ||||
|     (native-inputs | ||||
|      `(("python-nose" ,python-nose) | ||||
|        ("unzip" ,unzip))) | ||||
|     (home-page "https://github.com/pydata/patsy") | ||||
|     (synopsis "Describe statistical models and build design matrices") | ||||
|     (description | ||||
|      "Patsy is a Python package for describing statistical models and for | ||||
| building design matrices.") | ||||
|     ;; The majority of the code is distributed under BSD-2.  The module | ||||
|     ;; patsy.compat contains code derived from the Python standard library, | ||||
|     ;; and is covered by the PSFL. | ||||
|     (license (list license:bsd-2 license:psfl)))) | ||||
| 
 | ||||
| (define-public python2-patsy | ||||
|   (let ((patsy (package-with-python2 python-patsy))) | ||||
|     (package (inherit patsy) | ||||
|       (native-inputs | ||||
|        `(("python2-setuptools" ,python2-setuptools) | ||||
|          ,@(package-native-inputs patsy))) | ||||
|       (propagated-inputs | ||||
|        `(("python2-numpy" ,python2-numpy) | ||||
|          ("python2-scipy" ,python2-scipy) | ||||
|          ,@(alist-delete "python-numpy" | ||||
|                          (alist-delete "python-scipy" | ||||
|                                        (package-propagated-inputs patsy)))))))) | ||||
| 
 | ||||
| (define-public python-statsmodels | ||||
|   (package | ||||
|     (name "python-statsmodels") | ||||
|     (version "0.6.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "https://pypi.python.org/packages/source/" | ||||
|                            "s/statsmodels/statsmodels-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0xn67sqr0cc1lmlhzm71352hrb4hw7g318p5ff5q97pc98vl8kmy")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      `(#:phases | ||||
|        (modify-phases %standard-phases | ||||
|          ;; tests must be run after installation | ||||
|          (delete 'check) | ||||
|          (add-after 'unpack 'set-matplotlib-backend-to-agg | ||||
|           (lambda _ | ||||
|             ;; Set the matplotlib backend to Agg to avoid problems using the | ||||
|             ;; GTK backend without a display. | ||||
|             (substitute* (find-files "statsmodels/graphics/tests" "\\.py") | ||||
|               (("import matplotlib\\.pyplot as plt" line) | ||||
|                (string-append "import matplotlib;matplotlib.use('Agg');" | ||||
|                               line))) | ||||
|             #t)) | ||||
|          (add-after 'install 'check | ||||
|           (lambda _ | ||||
|             (with-directory-excursion "/tmp" | ||||
|               (zero? (system* "nosetests" | ||||
|                               "--stop" | ||||
|                               "-v" "statsmodels")))))))) | ||||
|     (propagated-inputs | ||||
|      `(("python-numpy" ,python-numpy) | ||||
|        ("python-scipy" ,python-scipy) | ||||
|        ("python-pandas" ,python-pandas) | ||||
|        ("python-patsy" ,python-patsy) | ||||
|        ("python-matplotlib" ,python-matplotlib))) | ||||
|     (native-inputs | ||||
|      `(("python-cython" ,python-cython) | ||||
|        ("python-nose" ,python-nose) | ||||
|        ("python-sphinx" ,python-sphinx))) | ||||
|     (home-page "http://statsmodels.sourceforge.net/") | ||||
|     (synopsis "Statistical modeling and econometrics in Python") | ||||
|     (description | ||||
|      "Statsmodels is a Python package that provides a complement to scipy for | ||||
| statistical computations including descriptive statistics and estimation and | ||||
| inference for statistical models.") | ||||
|     (license license:bsd-3))) | ||||
| 
 | ||||
| (define-public python2-statsmodels | ||||
|   (let ((stats (package-with-python2 python-statsmodels))) | ||||
|     (package (inherit stats) | ||||
|       (propagated-inputs | ||||
|        `(("python2-numpy" ,python2-numpy) | ||||
|          ("python2-scipy" ,python2-scipy) | ||||
|          ("python2-pandas" ,python2-pandas) | ||||
|          ("python2-patsy" ,python2-patsy) | ||||
|          ("python2-matplotlib" ,python2-matplotlib))) | ||||
|       (native-inputs | ||||
|        `(("python2-setuptools" ,python2-setuptools) | ||||
|          ,@(package-native-inputs stats)))))) | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| ;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org> | ||||
| ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com> | ||||
| ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -584,7 +585,7 @@ treaming protocols.") | |||
| (define-public mplayer | ||||
|   (package | ||||
|     (name "mplayer") | ||||
|     (version "1.1.1") | ||||
|     (version "1.2") | ||||
|     (source (origin | ||||
|              (method url-fetch) | ||||
|              (uri (string-append | ||||
|  | @ -592,7 +593,7 @@ treaming protocols.") | |||
|                    version ".tar.xz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "0xlcg7rszrwmw29wqr0plsw5d1rq0hb7vjsq7bmmfsly2z1wg3yf")))) | ||||
|                "1dp2lbxyhgjr8sn91kf6xw3w6d7dsgq08v4dgrq20afz1bqzdrzz")))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; FIXME: Add additional inputs once available. | ||||
|     (native-inputs | ||||
|  | @ -601,8 +602,11 @@ treaming protocols.") | |||
|      `(("alsa-lib" ,alsa-lib) | ||||
|        ("cdparanoia" ,cdparanoia) | ||||
|        ("fontconfig" ,fontconfig) | ||||
|        ("ffmpeg", ffmpeg) | ||||
|        ("freetype" ,freetype) | ||||
|        ("lame" ,lame) | ||||
|        ("libdvdcss", libdvdcss) | ||||
|        ("libdvdnav", libdvdnav) | ||||
|        ("libmpg123" ,mpg123)                      ; audio codec for MP3 | ||||
| ;;        ("giflib" ,giflib) ; uses QuantizeBuffer, requires version >= 5 | ||||
|        ("libjpeg" ,libjpeg) | ||||
|  | @ -639,7 +643,7 @@ treaming protocols.") | |||
|                       "./configure" | ||||
|                       (string-append "--extra-cflags=-I" | ||||
|                                      libx11 "/include") ; to detect libx11 | ||||
|                       "--disable-tremor-internal" ; forces external libvorbis | ||||
| 		       "--disable-ffmpeg_a" ; disables bundled ffmpeg | ||||
|                       (string-append "--prefix=" out) | ||||
|                       ;; Enable runtime cpu detection where supported, | ||||
|                       ;; and choose a suitable target. | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| ;;; Copyright © 2015 Siniša Biđin <sinisa@bidin.eu> | ||||
| ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2015 xd1le <elisp.vim@gmail.com> | ||||
| ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -22,6 +23,7 @@ | |||
| (define-module (gnu packages wm) | ||||
|   #:use-module (guix licenses) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages linux) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix build-system haskell) | ||||
|  | @ -190,10 +192,19 @@ developers.") | |||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "http://hackage.haskell.org/package/xmonad/" | ||||
|                                   "xmonad-" version ".tar.gz")) | ||||
|                                   name "-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1pfjssamiwpwjp1qqkm9m9p9s35pv381m0cwg6jxg0ppglibzq1r")))) | ||||
|                 "1pfjssamiwpwjp1qqkm9m9p9s35pv381m0cwg6jxg0ppglibzq1r")) | ||||
|               (modules '((guix build utils))) | ||||
|               (snippet | ||||
|                ;; Here we update the constraints on the utf8-string package in | ||||
|                ;; the Cabal file.  We allow a newer version which is compatible | ||||
|                ;; with GHC 7.10.2.  The same change is applied on Hackage.  See | ||||
|                ;; <https://hackage.haskell.org/package/xmonad-0.11.1/revisions/>. | ||||
|                '(substitute* "xmonad.cabal" | ||||
|                   (("utf8-string >= 0.3 && < 0.4") | ||||
|                    "utf8-string >= 0.3 && < 1.1"))))) | ||||
|     (build-system haskell-build-system) | ||||
|     (inputs | ||||
|      `(("ghc-mtl" ,ghc-mtl) | ||||
|  | @ -232,7 +243,7 @@ tiled on several screens.") | |||
| (define-public ghc-xmonad-contrib | ||||
|   (package | ||||
|     (name "ghc-xmonad-contrib") | ||||
|     (version "0.11.3") | ||||
|     (version "0.11.4") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|  | @ -240,10 +251,11 @@ tiled on several screens.") | |||
|                            "xmonad-contrib-" version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "14h9vr33yljymswj50wbimav263y9abdcgi07mvfis0zd08rxqxa")))) | ||||
|          "1g5cw9vvnfbiyi599fngk02zlmdhrf82x0bndhypkn6kybab6yd3")))) | ||||
|     (build-system haskell-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("ghc-mtl" ,ghc-mtl) | ||||
|        ("ghc-old-time" ,ghc-old-time) | ||||
|        ("ghc-random" ,ghc-random) | ||||
|        ("ghc-utf8-string" ,ghc-utf8-string) | ||||
|        ("ghc-extensible-exceptions" ,ghc-extensible-exceptions) | ||||
|  | @ -256,3 +268,46 @@ tiled on several screens.") | |||
|      "Third party tiling algorithms, configurations, and scripts to Xmonad, a | ||||
| tiling window manager for X.") | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public evilwm | ||||
|   (package | ||||
|     (name "evilwm") | ||||
|     (version "1.1.1") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append "http://www.6809.org.uk/evilwm/evilwm-" | ||||
|                            version ".tar.gz")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "0ak0yajzk3v4dg5wmaghv6acf7v02a4iw8qxmq5yw5ard8lrqn3r")) | ||||
|        (patches (map search-patch '("evilwm-lost-focus-bug.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("libx11" ,libx11) | ||||
|        ("libxext" ,libxext) | ||||
|        ("libxrandr" ,libxrandr))) | ||||
|     (arguments | ||||
|      `(#:modules ((srfi srfi-26) | ||||
|                   (guix build utils) | ||||
|                   (guix build gnu-build-system)) | ||||
|        #:make-flags (let ((inputs (map (cut assoc-ref %build-inputs <>) | ||||
|                                        '("libx11" "libxext" "libxrandr"))) | ||||
|                           (join (lambda (proc strs) | ||||
|                                   (string-join (map proc strs) " "))) | ||||
|                           (dash-I (cut string-append "-I" <> "/include")) | ||||
|                           (dash-L (cut string-append "-L" <> "/lib"))) | ||||
|                       `("desktopfilesdir=$(prefix)/share/xsessions" | ||||
|                         ,(string-append "prefix=" (assoc-ref %outputs "out")) | ||||
|                         ,(string-append "CPPFLAGS=" (join dash-I inputs)) | ||||
|                         ,(string-append "LDFLAGS=" (join dash-L inputs)))) | ||||
|        #:tests? #f                      ;no tests | ||||
|        #:phases (modify-phases %standard-phases | ||||
|                   (delete 'configure)))) ;no configure script | ||||
|     (home-page "http://www.6809.org.uk/evilwm/") | ||||
|     (synopsis "Minimalist window manager for the X Window System") | ||||
|     (description | ||||
|      "evilwm is a minimalist window manager based on aewm, extended to feature | ||||
| many keyboard controls with repositioning and maximize toggles, solid window | ||||
| drags, snap-to-border support, and virtual desktops.") | ||||
|     (license (x11-style "file:///README")))) | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ | |||
| ;;; Copyright © 2013 David Thompson <dthompson2@worcester.edu> | ||||
| ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in> | ||||
| ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -46,6 +47,7 @@ | |||
|             libkate | ||||
|             vorbis-tools | ||||
|             opus | ||||
|             opusfile | ||||
|             opus-tools)) | ||||
| 
 | ||||
| (define libogg | ||||
|  | @ -341,6 +343,34 @@ decoding .opus files.") | |||
|     (license license:bsd-3) | ||||
|     (home-page "http://www.opus-codec.org"))) | ||||
| 
 | ||||
| (define opusfile | ||||
|   (package | ||||
|     (name "opusfile") | ||||
|     (version "0.6") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "http://downloads.xiph.org/releases/opus/opusfile-" version | ||||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "19iys2kld75k0210b807i4illrdmj3cmmnrgxlc9y4vf6mxp2a14")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (propagated-inputs | ||||
|      `(("opus" ,opus))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (inputs | ||||
|      `(("libogg" ,libogg) | ||||
|        ("openssl" ,openssl))) | ||||
|     (synopsis "Versatile audio codec") | ||||
|     (description | ||||
|      "The opusfile library provides seeking, decode, and playback of Opus | ||||
| streams in the Ogg container (.opus files) including over http(s) on posix and | ||||
| windows systems.") | ||||
|     (license license:bsd-3) | ||||
|     (home-page "http://www.opus-codec.org"))) | ||||
| 
 | ||||
| (define-public icecast | ||||
|   (package | ||||
|     (name "icecast") | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr> | ||||
| ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org> | ||||
| ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org> | ||||
| ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr> | ||||
| ;;; | ||||
|  | @ -413,6 +413,23 @@ provided.") | |||
|             "16ic8wfwwr3jicaml7b5a0sk6plcgc1kg84w02881yhwmqm3nicb")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("pkg-config" ,pkg-config))) | ||||
|     (arguments | ||||
|      `(#:phases (modify-phases %standard-phases | ||||
|                   (add-after | ||||
|                    'install 'install-fonts-dir | ||||
|                    ;; The X font server will not add directories to the font | ||||
|                    ;; path unless they contain a "fonts.dir" file, so add some | ||||
|                    ;; dummy files. | ||||
|                    (lambda* (#:key outputs #:allow-other-keys) | ||||
|                      (let ((out (assoc-ref outputs "out"))) | ||||
|                        (for-each (lambda (d) | ||||
|                                    (call-with-output-file | ||||
|                                        (string-append out "/share/fonts/X11" | ||||
|                                                       "/" d "/fonts.dir") | ||||
|                                      (lambda (p) | ||||
|                                        (format p "0~%")))) | ||||
|                                  '("75dpi" "100dpi" "misc" "cyrillic")) | ||||
|                        #t)))))) | ||||
|     (home-page "http://www.x.org/wiki/") | ||||
|     (synopsis "Xorg font aliases") | ||||
|     (description | ||||
|  | @ -3826,6 +3843,34 @@ running on X server.") | |||
|     (license license:x11))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public xlsfonts | ||||
|   (package | ||||
|     (name "xlsfonts") | ||||
|     (version "1.0.5") | ||||
|     (source | ||||
|      (origin | ||||
|        (method url-fetch) | ||||
|        (uri (string-append | ||||
|              "mirror://xorg/individual/app/xlsfonts-" | ||||
|              version | ||||
|              ".tar.bz2")) | ||||
|        (sha256 | ||||
|         (base32 | ||||
|          "1yi774g6r1kafsbnxbkrwyndd3i60362ck1fps9ywz076pn5naa0")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|      `(("xproto" ,xproto) | ||||
|        ("libx11" ,libx11))) | ||||
|     (native-inputs | ||||
|      `(("pkg-config" ,pkg-config))) | ||||
|     (home-page "http://www.x.org/wiki/") | ||||
|     (synopsis "List fonts available from an X server") | ||||
|     (description | ||||
|      "xlsfonts lists fonts available from an X server via the X11 core | ||||
| protocol.") | ||||
|     (license license:x11))) | ||||
| 
 | ||||
| 
 | ||||
| (define-public xmodmap | ||||
|   (package | ||||
|     (name "xmodmap") | ||||
|  |  | |||
|  | @ -89,6 +89,10 @@ EndSection")) | |||
| 
 | ||||
|   (apply mixed-text-file "xserver.conf" " | ||||
| Section \"Files\" | ||||
|   FontPath \"" font-alias "/share/fonts/X11/75dpi\" | ||||
|   FontPath \"" font-alias "/share/fonts/X11/100dpi\" | ||||
|   FontPath \"" font-alias "/share/fonts/X11/misc\" | ||||
|   FontPath \"" font-alias "/share/fonts/X11/cyrillic\" | ||||
|   FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\" | ||||
|   ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\" | ||||
|   ModulePath \"" xf86-video-fbdev "/lib/xorg/modules/drivers\" | ||||
|  |  | |||
|  | @ -29,16 +29,10 @@ | |||
|   #:use-module (system foreign) | ||||
|   #:use-module (guix http-client) | ||||
|   #:use-module (guix ftp-client) | ||||
|   #:use-module (guix ui) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix upstream) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module ((guix download) #:select (download-to-store)) | ||||
|   #:use-module (guix gnupg) | ||||
|   #:use-module (rnrs io ports) | ||||
|   #:use-module (guix base32) | ||||
|   #:use-module ((guix build utils) | ||||
|                 #:select (substitute)) | ||||
|   #:export (gnu-package-name | ||||
|             gnu-package-mundane-name | ||||
|             gnu-package-copyright-holder | ||||
|  | @ -56,21 +50,12 @@ | |||
|             find-packages | ||||
|             gnu-package? | ||||
| 
 | ||||
|             gnu-release? | ||||
|             gnu-release-package | ||||
|             gnu-release-version | ||||
|             gnu-release-directory | ||||
|             gnu-release-files | ||||
| 
 | ||||
|             releases | ||||
|             latest-release | ||||
|             gnu-release-archive-types | ||||
|             gnu-package-name->name+version | ||||
| 
 | ||||
|             download-tarball | ||||
|             package-update-path | ||||
|             package-update | ||||
|             update-package-source)) | ||||
|             %gnu-updater)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -218,13 +203,6 @@ network to check in GNU's database." | |||
| ;;; Latest release. | ||||
| ;;; | ||||
| 
 | ||||
| (define-record-type* <gnu-release> gnu-release make-gnu-release | ||||
|   gnu-release? | ||||
|   (package    gnu-release-package) | ||||
|   (version    gnu-release-version) | ||||
|   (directory  gnu-release-directory) | ||||
|   (files      gnu-release-files)) | ||||
| 
 | ||||
| (define (ftp-server/directory project) | ||||
|   "Return the FTP server and directory where PROJECT's tarball are | ||||
| stored." | ||||
|  | @ -284,29 +262,6 @@ true." | |||
|                 (gnu-package-name->name+version (sans-extension tarball)))) | ||||
|     version)) | ||||
| 
 | ||||
| (define (coalesce-releases releases) | ||||
|   "Coalesce the elements of RELEASES that correspond to the same version." | ||||
|   (define (same-version? r1 r2) | ||||
|     (string=? (gnu-release-version r1) (gnu-release-version r2))) | ||||
| 
 | ||||
|   (define (release>? r1 r2) | ||||
|     (version>? (gnu-release-version r1) (gnu-release-version r2))) | ||||
| 
 | ||||
|   (fold (lambda (release result) | ||||
|           (match result | ||||
|             ((head . tail) | ||||
|              (if (same-version? release head) | ||||
|                  (cons (gnu-release | ||||
|                         (inherit release) | ||||
|                         (files (append (gnu-release-files release) | ||||
|                                        (gnu-release-files head)))) | ||||
|                        tail) | ||||
|                  (cons release result))) | ||||
|             (() | ||||
|              (list release)))) | ||||
|         '() | ||||
|         (sort releases release>?))) | ||||
| 
 | ||||
| (define (releases project) | ||||
|   "Return the list of releases of PROJECT as a list of release name/directory | ||||
| pairs.  Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\"). " | ||||
|  | @ -319,13 +274,24 @@ pairs.  Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\"). | |||
|       (match directories | ||||
|         (() | ||||
|          (ftp-close conn) | ||||
|          (coalesce-releases result)) | ||||
|          (coalesce-sources result)) | ||||
|         ((directory rest ...) | ||||
|          (let* ((files   (ftp-list conn directory)) | ||||
|                 (subdirs (filter-map (match-lambda | ||||
|                                        ((name 'directory . _) name) | ||||
|                                        (_ #f)) | ||||
|                                      files))) | ||||
|            (define (file->url file) | ||||
|              (string-append "ftp://" server directory "/" file)) | ||||
| 
 | ||||
|            (define (file->source file) | ||||
|              (let ((url (file->url file))) | ||||
|                (upstream-source | ||||
|                 (package project) | ||||
|                 (version (tarball->version file)) | ||||
|                 (urls (list url)) | ||||
|                 (signature-urls (list (string-append url ".sig")))))) | ||||
| 
 | ||||
|            (loop (append (map (cut string-append directory "/" <>) | ||||
|                               subdirs) | ||||
|                          rest) | ||||
|  | @ -336,13 +302,8 @@ pairs.  Example: (\"mit-scheme-9.0.1\" . \"/gnu/mit-scheme/stable.pkg/9.0.1\"). | |||
|                   ;; guile-www; in mit-scheme, filter out binaries. | ||||
|                   (filter-map (match-lambda | ||||
|                                 ((file 'file . _) | ||||
|                                 (if (release-file? project file) | ||||
|                                     (gnu-release | ||||
|                                      (package project) | ||||
|                                      (version (tarball->version file)) | ||||
|                                      (directory directory) | ||||
|                                      (files (list file))) | ||||
|                                     #f)) | ||||
|                                  (and (release-file? project file) | ||||
|                                       (file->source file))) | ||||
|                                 (_ #f)) | ||||
|                               files) | ||||
|                   result)))))))) | ||||
|  | @ -355,7 +316,7 @@ open (resp. close) FTP connections; this can be useful to reuse connections." | |||
|     (if (version>? a b) a b)) | ||||
| 
 | ||||
|   (define (latest-release a b) | ||||
|     (if (version>? (gnu-release-version a) (gnu-release-version b)) | ||||
|     (if (version>? (upstream-source-version a) (upstream-source-version b)) | ||||
|         a b)) | ||||
| 
 | ||||
|   (define contains-digit? | ||||
|  | @ -368,6 +329,17 @@ open (resp. close) FTP connections; this can be useful to reuse connections." | |||
|   (let-values (((server directory) (ftp-server/directory project))) | ||||
|     (define conn (ftp-open server)) | ||||
| 
 | ||||
|     (define (file->url file) | ||||
|       (string-append "ftp://" server directory "/" file)) | ||||
| 
 | ||||
|     (define (file->source file) | ||||
|       (let ((url (file->url file))) | ||||
|         (upstream-source | ||||
|          (package project) | ||||
|          (version (tarball->version file)) | ||||
|          (urls (list url)) | ||||
|          (signature-urls (list (string-append url ".sig")))))) | ||||
| 
 | ||||
|     (let loop ((directory directory) | ||||
|                (result    #f)) | ||||
|       (let* ((entries (ftp-list conn directory)) | ||||
|  | @ -390,19 +362,14 @@ open (resp. close) FTP connections; this can be useful to reuse connections." | |||
|              (releases (filter-map (match-lambda | ||||
|                                      ((file 'file . _) | ||||
|                                       (and (release-file? project file) | ||||
|                                            (gnu-release | ||||
|                                             (package project) | ||||
|                                             (version | ||||
|                                              (tarball->version file)) | ||||
|                                             (directory directory) | ||||
|                                             (files (list file))))) | ||||
|                                            (file->source file))) | ||||
|                                      (_ #f)) | ||||
|                                    entries))) | ||||
| 
 | ||||
|         ;; Assume that SUBDIRS correspond to versions, and jump into the | ||||
|         ;; one with the highest version number. | ||||
|         (let* ((release  (reduce latest-release #f | ||||
|                                  (coalesce-releases releases))) | ||||
|                                  (coalesce-sources releases))) | ||||
|                (result   (if (and result release) | ||||
|                              (latest-release release result) | ||||
|                              (or release result))) | ||||
|  | @ -414,10 +381,18 @@ open (resp. close) FTP connections; this can be useful to reuse connections." | |||
|                 (ftp-close conn) | ||||
|                 result))))))) | ||||
| 
 | ||||
| (define (gnu-release-archive-types release) | ||||
|   "Return the available types of archives for RELEASE---a list of strings such | ||||
| as \"gz\" or \"xz\"." | ||||
|   (map file-extension (gnu-release-files release))) | ||||
| (define (latest-release* package) | ||||
|   "Like 'latest-release', but ignore FTP errors that might occur when PACKAGE | ||||
| is not actually a GNU package, or not hosted on ftp.gnu.org, or not under that | ||||
| name (this is the case for \"emacs-auctex\", for instance.)" | ||||
|   (catch 'ftp-error | ||||
|     (lambda () | ||||
|       (latest-release package)) | ||||
|     (lambda (key port . rest) | ||||
|       (if (ftp-connection? port) | ||||
|           (ftp-close port) | ||||
|           (close-port port)) | ||||
|       #f))) | ||||
| 
 | ||||
| (define %package-name-rx | ||||
|   ;; Regexp for a package name, e.g., "foo-X.Y".  Since TeXmacs uses | ||||
|  | @ -431,121 +406,15 @@ as \"gz\" or \"xz\"." | |||
|         (values name+version #f) | ||||
|         (values (match:substring match 1) (match:substring match 2))))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Auto-update. | ||||
| ;;; | ||||
| (define (non-emacs-gnu-package? package) | ||||
|   "Return true if PACKAGE is a non-Emacs GNU package.  This excludes AucTeX, | ||||
| for instance, whose releases are now uploaded to elpa.gnu.org." | ||||
|   (and (not (string-prefix? "emacs-" (package-name package))) | ||||
|        (gnu-package? package))) | ||||
| 
 | ||||
| (define (package-update-path package) | ||||
|   "Return an update path for PACKAGE, or #f if no update is needed." | ||||
|   (and (gnu-package? package) | ||||
|        (match (latest-release (package-name package)) | ||||
|          (($ <gnu-release> name version directory) | ||||
|           (and (version>? version (package-version package)) | ||||
|                `(,version . ,directory))) | ||||
|          (_ #f)))) | ||||
| 
 | ||||
| (define* (download-tarball store project directory version | ||||
|                            #:key (archive-type "gz") | ||||
|                                  (key-download 'interactive)) | ||||
|   "Download PROJECT's tarball over FTP and check its OpenPGP signature.  On | ||||
| success, return the tarball file name.  KEY-DOWNLOAD specifies a download | ||||
| policy for missing OpenPGP keys; allowed values: 'interactive' (default), | ||||
| 'always', and 'never'." | ||||
|   (let* ((server  (ftp-server/directory project)) | ||||
|          (base    (string-append project "-" version ".tar." archive-type)) | ||||
|          (url     (string-append "ftp://" server "/" directory "/" base)) | ||||
|          (sig-url (string-append url ".sig")) | ||||
|          (tarball (download-to-store store url)) | ||||
|          (sig     (download-to-store store sig-url))) | ||||
|     (let ((ret (gnupg-verify* sig tarball #:key-download key-download))) | ||||
|       (if ret | ||||
|           tarball | ||||
|           (begin | ||||
|             (warning (_ "signature verification failed for `~a'~%") | ||||
|                      base) | ||||
|             (warning (_ "(could be because the public key is not in your keyring)~%")) | ||||
|             #f))))) | ||||
| 
 | ||||
| (define* (package-update store package #:key (key-download 'interactive)) | ||||
|   "Return the new version and the file name of the new version tarball for | ||||
| PACKAGE, or #f and #f when PACKAGE is up-to-date.  KEY-DOWNLOAD specifies a | ||||
| download policy for missing OpenPGP keys; allowed values: 'always', 'never', | ||||
| and 'interactive' (default)." | ||||
|   (match (package-update-path package) | ||||
|     ((version . directory) | ||||
|      (let-values (((name) | ||||
|                    (package-name package)) | ||||
|                   ((archive-type) | ||||
|                    (let ((source (package-source package))) | ||||
|                      (or (and (origin? source) | ||||
|                               (file-extension (origin-uri source))) | ||||
|                          "gz")))) | ||||
|        (let ((tarball (download-tarball store name directory version | ||||
|                                         #:archive-type archive-type | ||||
|                                         #:key-download key-download))) | ||||
|          (values version tarball)))) | ||||
|     (_ | ||||
|      (values #f #f)))) | ||||
| 
 | ||||
| (define (update-package-source package version hash) | ||||
|   "Modify the source file that defines PACKAGE to refer to VERSION, | ||||
| whose tarball has SHA256 HASH (a bytevector).  Return the new version string | ||||
| if an update was made, and #f otherwise." | ||||
|   (define (new-line line matches replacement) | ||||
|     ;; Iterate over MATCHES and return the modified line based on LINE. | ||||
|     ;; Replace each match with REPLACEMENT. | ||||
|     (let loop ((m* matches)                       ; matches | ||||
|                (o  0)                             ; offset in L | ||||
|                (r  '()))                          ; result | ||||
|       (match m* | ||||
|         (() | ||||
|          (let ((r (cons (substring line o) r))) | ||||
|            (string-concatenate-reverse r))) | ||||
|         ((m . rest) | ||||
|          (loop rest | ||||
|                (match:end m) | ||||
|                (cons* replacement | ||||
|                       (substring line o (match:start m)) | ||||
|                       r)))))) | ||||
| 
 | ||||
|   (define (update-source file old-version version | ||||
|                          old-hash hash) | ||||
|     ;; Update source file FILE, replacing occurrences OLD-VERSION by VERSION | ||||
|     ;; and occurrences of OLD-HASH by HASH (base32 representation thereof). | ||||
| 
 | ||||
|     ;; TODO: Currently this is a bit of a sledgehammer: if VERSION occurs in | ||||
|     ;; different unrelated places, we may modify it more than needed, for | ||||
|     ;; instance.  We should try to make changes only within the sexp that | ||||
|     ;; corresponds to the definition of PACKAGE. | ||||
|     (let ((old-hash (bytevector->nix-base32-string old-hash)) | ||||
|           (hash     (bytevector->nix-base32-string hash))) | ||||
|       (substitute file | ||||
|                   `((,(regexp-quote old-version) | ||||
|                      . ,(cut new-line <> <> version)) | ||||
|                     (,(regexp-quote old-hash) | ||||
|                      . ,(cut new-line <> <> hash)))) | ||||
|       version)) | ||||
| 
 | ||||
|   (let ((name (package-name package)) | ||||
|         (loc  (package-field-location package 'version))) | ||||
|     (if loc | ||||
|         (let ((old-version (package-version package)) | ||||
|               (old-hash    (origin-sha256 (package-source package))) | ||||
|               (file        (and=> (location-file loc) | ||||
|                                   (cut search-path %load-path <>)))) | ||||
|           (if file | ||||
|               (update-source file | ||||
|                              old-version version | ||||
|                              old-hash hash) | ||||
|               (begin | ||||
|                 (warning (_ "~a: could not locate source file") | ||||
|                          (location-file loc)) | ||||
|                 #f))) | ||||
|         (begin | ||||
|           (format (current-error-port) | ||||
|                   (_ "~a: ~a: no `version' field in source; skipping~%") | ||||
|                   (location->string (package-location package)) | ||||
|                   name))))) | ||||
| (define %gnu-updater | ||||
|   (upstream-updater 'gnu | ||||
|                     non-emacs-gnu-package? | ||||
|                     latest-release*)) | ||||
| 
 | ||||
| ;;; gnu-maintenance.scm ends here | ||||
|  |  | |||
|  | @ -241,7 +241,7 @@ Raise an '&http-get-error' condition if downloading fails." | |||
| ;;; Caching. | ||||
| ;;; | ||||
| 
 | ||||
| (define (%http-cache-ttl) | ||||
| (define %http-cache-ttl | ||||
|   ;; Time-to-live in seconds of the HTTP cache of in ~/.cache/guix. | ||||
|   (make-parameter | ||||
|    (* 3600 (or (and=> (getenv "GUIX_HTTP_CACHE_TTL") | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> | ||||
| ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -20,6 +21,7 @@ | |||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (sxml simple) | ||||
|   #:use-module (sxml match) | ||||
|   #:use-module (sxml xpath) | ||||
|  | @ -29,7 +31,10 @@ | |||
|   #:use-module (guix base32) | ||||
|   #:use-module ((guix download) #:select (download-to-store)) | ||||
|   #:use-module (guix import utils) | ||||
|   #:export (cran->guix-package)) | ||||
|   #:use-module (guix upstream) | ||||
|   #:use-module (guix packages) | ||||
|   #:export (cran->guix-package | ||||
|             %cran-updater)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
|  | @ -89,7 +94,7 @@ first cell of a table row is considered a label cell." | |||
|   "Return an sxml representation of the CRAN page for the R package NAME, | ||||
| or #f on failure.  NAME is case-sensitive." | ||||
|   ;; This API always returns the latest release of the module. | ||||
|   (let ((cran-url (string-append %cran-url name))) | ||||
|   (let ((cran-url (string-append %cran-url name "/"))) | ||||
|     (false-if-exception | ||||
|      (xml->sxml (http-fetch cran-url) | ||||
|                 #:trim-whitespace? #t | ||||
|  | @ -108,12 +113,25 @@ or #f on failure.  NAME is case-sensitive." | |||
|                              name) | ||||
|                      (symbol->string name)))))))) | ||||
| 
 | ||||
| (define (downloads->url downloads) | ||||
|   "Extract from DOWNLOADS, the downloads item of the CRAN sxml tree, the | ||||
| download URL." | ||||
|   (string-append "mirror://cran/" | ||||
|                  ;; Remove double dots, because we want an | ||||
|                  ;; absolute path. | ||||
|                  (regexp-substitute/global | ||||
|                   #f "\\.\\./" | ||||
|                   (string-join ((sxpath '((xhtml:a 1) @ href *text*)) | ||||
|                                 (table-datum downloads " Package source: "))) | ||||
|                   'pre 'post))) | ||||
| 
 | ||||
| (define (nodes->text nodeset) | ||||
|   "Return the concatenation of the text nodes among NODESET." | ||||
|   (string-join ((sxpath '(// *text*)) nodeset) " ")) | ||||
| 
 | ||||
| (define (cran-sxml->sexp sxml) | ||||
|   "Return the `package' s-expression for a CRAN package from the SXML | ||||
| representation of the package page." | ||||
|   (define (nodes->text nodeset) | ||||
|     (string-join ((sxpath '(// *text*)) nodeset) " ")) | ||||
| 
 | ||||
|   (define (guix-name name) | ||||
|     (if (string-prefix? "r-" name) | ||||
|         (string-downcase name) | ||||
|  | @ -136,16 +154,7 @@ representation of the package page." | |||
|                        (table-datum summary "License:"))) | ||||
|           (home-page  (nodes->text ((sxpath '((xhtml:a 1))) | ||||
|                                     (table-datum summary "URL:")))) | ||||
|           (source-url (string-append "mirror://cran/" | ||||
|                                      ;; Remove double dots, because we want an | ||||
|                                      ;; absolute path. | ||||
|                                      (regexp-substitute/global | ||||
|                                       #f "\\.\\./" | ||||
|                                       (string-join | ||||
|                                        ((sxpath '((xhtml:a 1) @ href *text*)) | ||||
|                                         (table-datum downloads | ||||
|                                                      " Package source: "))) | ||||
|                                       'pre 'post))) | ||||
|           (source-url (downloads->url downloads)) | ||||
|           (tarball    (with-store store (download-to-store store source-url))) | ||||
|           (sysdepends (map match:substring | ||||
|                            (list-matches | ||||
|  | @ -186,3 +195,49 @@ representation of the package page." | |||
| `package' s-expression corresponding to that package, or #f on failure." | ||||
|   (let ((module-meta (cran-fetch package-name))) | ||||
|     (and=> module-meta cran-sxml->sexp))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Updater. | ||||
| ;;; | ||||
| 
 | ||||
| (define (latest-release package) | ||||
|   "Return an <upstream-source> for the latest release of PACKAGE." | ||||
|   (define name | ||||
|     (if (string-prefix? "r-" package) | ||||
|         (string-drop package 2) | ||||
|         package)) | ||||
| 
 | ||||
|   (define sxml | ||||
|     (cran-fetch name)) | ||||
| 
 | ||||
|   (and sxml | ||||
|        (sxml-match-let* | ||||
|         (((*TOP* (xhtml:html | ||||
|                   ,head | ||||
|                   (xhtml:body | ||||
|                    (xhtml:h2 ,name-and-synopsis) | ||||
|                    (xhtml:p ,description) | ||||
|                    ,summary | ||||
|                    (xhtml:h4 "Downloads:") ,downloads | ||||
|                    . ,rest))) | ||||
|           sxml)) | ||||
|         (let ((version (nodes->text (table-datum summary "Version:"))) | ||||
|               (url     (downloads->url downloads))) | ||||
|           ;; CRAN does not provide signatures. | ||||
|           (upstream-source | ||||
|            (package package) | ||||
|            (version version) | ||||
|            (urls (list url))))))) | ||||
| 
 | ||||
| (define (cran-package? package) | ||||
|   "Return true if PACKAGE is an R package from CRAN." | ||||
|   ;; Assume all R packages are available on CRAN. | ||||
|   (string-prefix? "r-" (package-name package))) | ||||
| 
 | ||||
| (define %cran-updater | ||||
|   (upstream-updater 'cran | ||||
|                     cran-package? | ||||
|                     latest-release)) | ||||
| 
 | ||||
| ;;; cran.scm ends here | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch> | ||||
| ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -19,6 +20,7 @@ | |||
| (define-module (guix import elpa) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 rdelim) | ||||
|   #:use-module (web uri) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-9) | ||||
|   #:use-module (srfi srfi-9 gnu) | ||||
|  | @ -26,13 +28,17 @@ | |||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module ((guix download) #:select (download-to-store)) | ||||
|   #:use-module (guix import utils) | ||||
|   #:use-module (guix http-client) | ||||
|   #:use-module (guix store) | ||||
|   #:use-module (guix ui) | ||||
|   #:use-module (guix hash) | ||||
|   #:use-module (guix base32) | ||||
|   #:use-module (guix upstream) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module ((guix utils) #:select (call-with-temporary-output-file | ||||
|                                        memoize)) | ||||
|   #:export (elpa->guix-package)) | ||||
|   #:export (elpa->guix-package | ||||
|             %elpa-updater)) | ||||
| 
 | ||||
| (define (elpa-dependencies->names deps) | ||||
|   "Convert DEPS, a list of symbol/version pairs à la ELPA, to a list of | ||||
|  | @ -74,20 +80,16 @@ NAMES (strings)." | |||
|   (let ((url (and=> (elpa-url repo) | ||||
|                     (cut string-append <> "/archive-contents")))) | ||||
|     (if url | ||||
|         (call-with-downloaded-file url read) | ||||
|         ;; Use a relatively small TTL for the archive itself. | ||||
|         (parameterize ((%http-cache-ttl (* 6 3600))) | ||||
|           (call-with-downloaded-file url read)) | ||||
|         (leave (_ "~A: currently not supported~%") repo)))) | ||||
| 
 | ||||
| (define* (call-with-downloaded-file url proc #:optional (error-thunk #f)) | ||||
|   "Fetch URL, store the content in a temporary file and call PROC with that | ||||
| file.  Returns the value returned by PROC.  On error call ERROR-THUNK and | ||||
| return its value or leave if it's false." | ||||
|   (call-with-temporary-output-file | ||||
|    (lambda (temp port) | ||||
|      (or (and (url-fetch url temp) | ||||
|               (call-with-input-file temp proc)) | ||||
|          (if error-thunk | ||||
|              (error-thunk) | ||||
|              (leave (_ "~A: download failed~%") url)))))) | ||||
|   (proc (http-fetch/cached (string->uri url)))) | ||||
| 
 | ||||
| (define (is-elpa-package? name elpa-pkg-spec) | ||||
|   "Return true if the string NAME corresponds to the name of the package | ||||
|  | @ -231,4 +233,47 @@ type '<elpa-package>'." | |||
|   (let ((pkg (fetch-elpa-package name repo))) | ||||
|     (and=> pkg elpa-package->sexp))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Updates. | ||||
| ;;; | ||||
| 
 | ||||
| (define (latest-release package) | ||||
|   "Return an <upstream-release> for the latest release of PACKAGE.  PACKAGE | ||||
| may be a Guix package name such as \"emacs-debbugs\" or an upstream name such | ||||
| as \"debbugs\"." | ||||
|   (define name | ||||
|     (if (string-prefix? "emacs-" package) | ||||
|         (string-drop package 6) | ||||
|         package)) | ||||
| 
 | ||||
|   (let* ((repo    'gnu) | ||||
|          (info    (elpa-package-info name repo)) | ||||
|          (version (match info | ||||
|                     ((name raw-version . _) | ||||
|                      (elpa-version->string raw-version)))) | ||||
|          (url     (match info | ||||
|                     ((_ raw-version reqs synopsis kind . rest) | ||||
|                      (package-source-url kind name version repo))))) | ||||
|     (upstream-source | ||||
|      (package package) | ||||
|      (version version) | ||||
|      (urls (list url)) | ||||
|      (signature-urls (list (string-append url ".sig")))))) | ||||
| 
 | ||||
| (define (package-from-gnu.org? package) | ||||
|   "Return true if PACKAGE is from elpa.gnu.org." | ||||
|   (match (and=> (package-source package) origin-uri) | ||||
|     ((? string? uri) | ||||
|      (let ((uri (string->uri uri))) | ||||
|        (and uri (string=? (uri-host uri) "elpa.gnu.org")))) | ||||
|     (_ #f))) | ||||
| 
 | ||||
| (define %elpa-updater | ||||
|   ;; The ELPA updater.  We restrict it to packages hosted on elpa.gnu.org | ||||
|   ;; because for other repositories, we typically grab the source elsewhere. | ||||
|   (upstream-updater 'elpa | ||||
|                     package-from-gnu.org? | ||||
|                     latest-release)) | ||||
| 
 | ||||
| ;;; elpa.scm ends here | ||||
|  |  | |||
|  | @ -32,37 +32,35 @@ | |||
|   #:export (hackage->guix-package)) | ||||
| 
 | ||||
| (define ghc-standard-libraries | ||||
|   ;; List of libraries distributed with ghc (7.8.4). We include GHC itself as | ||||
|   ;; List of libraries distributed with ghc (7.10.2). We include GHC itself as | ||||
|   ;; some packages list it. | ||||
|   '("ghc" | ||||
|     "haskell98" | ||||
|     "hoopl" | ||||
|   '("array" | ||||
|     "base" | ||||
|     "transformers" | ||||
|     "deepseq" | ||||
|     "array" | ||||
|     "bin-package-db" | ||||
|     "binary" | ||||
|     "bytestring" | ||||
|     "cabal" ;; in the output of `ghc-pkg list` Cabal is uppercased, but | ||||
|             ;; hackage-name->package-name takes this into account. | ||||
|     "containers" | ||||
|     "time" | ||||
|     "cabal" | ||||
|     "bin-package-db" | ||||
|     "ghc-prim" | ||||
|     "integer-gmp" | ||||
|     "integer-simple" | ||||
|     "win32" | ||||
|     "template-haskell" | ||||
|     "process" | ||||
|     "haskeline" | ||||
|     "terminfo" | ||||
|     "deepseq" | ||||
|     "directory" | ||||
|     "filepath" | ||||
|     "old-locale" | ||||
|     "unix" | ||||
|     "old-time" | ||||
|     "ghc" | ||||
|     "ghc-prim" | ||||
|     "haskeline" | ||||
|     "hoopl" | ||||
|     "hpc" | ||||
|     "integer-gmp" | ||||
|     "pretty" | ||||
|     "xhtml" | ||||
|     "hpc")) | ||||
|     "process" | ||||
|     "rts" | ||||
|     "template-haskell" | ||||
|     "terminfo" | ||||
|     "time" | ||||
|     "transformers" | ||||
|     "unix" | ||||
|     "win32" | ||||
|     "xhtml")) | ||||
| 
 | ||||
| (define package-name-prefix "ghc-") | ||||
| 
 | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ version.\n")) | |||
|   (display (_ " | ||||
|   -s, --stdin                  read from standard input")) | ||||
|   (display (_ " | ||||
|   -t, --no-test-dependencies   don't include test only dependencies")) | ||||
|   -t, --no-test-dependencies   don't include test-only dependencies")) | ||||
|   (display (_ " | ||||
|   -V, --version                display version information and exit")) | ||||
|   (newline) | ||||
|  |  | |||
|  | @ -25,7 +25,10 @@ | |||
|   #:use-module (guix store) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix gnu-maintenance) | ||||
|   #:use-module (guix upstream) | ||||
|   #:use-module ((guix gnu-maintenance) #:select (%gnu-updater)) | ||||
|   #:use-module (guix import elpa) | ||||
|   #:use-module (guix import cran) | ||||
|   #:use-module (guix gnupg) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module ((gnu packages commencement) #:select (%final-inputs)) | ||||
|  | @ -63,6 +66,9 @@ | |||
|                     (x | ||||
|                      (leave (_ "~a: invalid selection; expected `core' or `non-core'~%") | ||||
|                             arg))))) | ||||
|         (option '(#\t "type") #t #f | ||||
|                 (lambda (opt name arg result) | ||||
|                   (alist-cons 'updater (string->symbol arg) result))) | ||||
|         (option '(#\l "list-dependent") #f #f | ||||
|                 (lambda (opt name arg result) | ||||
|                   (alist-cons 'list-dependent? #t result))) | ||||
|  | @ -104,6 +110,8 @@ specified with `--select'.\n")) | |||
|   -s, --select=SUBSET    select all the packages in SUBSET, one of | ||||
|                          `core' or `non-core'")) | ||||
|   (display (_ " | ||||
|   -t, --type=UPDATER     restrict to updates from UPDATER--e.g., 'gnu'")) | ||||
|   (display (_ " | ||||
|   -l, --list-dependent   list top-level dependent packages that would need to | ||||
|                          be rebuilt as a result of upgrading PACKAGE...")) | ||||
|   (newline) | ||||
|  | @ -124,19 +132,33 @@ specified with `--select'.\n")) | |||
|   (newline) | ||||
|   (show-bug-report-information)) | ||||
| 
 | ||||
| (define* (update-package store package #:key (key-download 'interactive)) | ||||
|  | ||||
| ;;; | ||||
| ;;; Updates. | ||||
| ;;; | ||||
| 
 | ||||
| (define %updaters | ||||
|   ;; List of "updaters" used by default.  They are consulted in this order. | ||||
|   (list %gnu-updater | ||||
|         %elpa-updater | ||||
|         %cran-updater)) | ||||
| 
 | ||||
| (define (lookup-updater name) | ||||
|   "Return the updater called NAME." | ||||
|   (find (lambda (updater) | ||||
|           (eq? name (upstream-updater-name updater))) | ||||
|         %updaters)) | ||||
| 
 | ||||
| (define* (update-package store package updaters | ||||
|                          #:key (key-download 'interactive)) | ||||
|   "Update the source file that defines PACKAGE with the new version. | ||||
| KEY-DOWNLOAD specifies a download policy for missing OpenPGP keys; allowed | ||||
| values: 'interactive' (default), 'always', and 'never'." | ||||
|   (let-values (((version tarball) | ||||
|                 (catch #t | ||||
|                   (lambda () | ||||
|                     (package-update store package #:key-download key-download)) | ||||
|                   (lambda _ | ||||
|                     (values #f #f)))) | ||||
|                 (package-update store package updaters | ||||
|                                 #:key-download key-download)) | ||||
|                ((loc) | ||||
|                 (or (package-field-location package | ||||
|                                             'version) | ||||
|                 (or (package-field-location package 'version) | ||||
|                     (package-location package)))) | ||||
|     (when version | ||||
|       (if (and=> tarball file-exists?) | ||||
|  | @ -153,7 +175,6 @@ values: 'interactive' (default), 'always', and 'never'." | |||
| downloaded and authenticated; not updating~%") | ||||
|                    (package-name package) version))))) | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Entry point. | ||||
|  | @ -169,6 +190,19 @@ downloaded and authenticated; not updating~%") | |||
|                   (alist-cons 'argument arg result)) | ||||
|                 %default-options)) | ||||
| 
 | ||||
|   (define (options->updaters opts) | ||||
|     ;; Return the list of updaters to use. | ||||
|     (match (filter-map (match-lambda | ||||
|                          (('updater . name) | ||||
|                           (lookup-updater name)) | ||||
|                          (_ #f)) | ||||
|                        opts) | ||||
|       (() | ||||
|        ;; Use the default updaters. | ||||
|        %updaters) | ||||
|       (lst | ||||
|        lst))) | ||||
| 
 | ||||
|   (define (keep-newest package lst) | ||||
|     ;; If a newer version of PACKAGE is already in LST, return LST; otherwise | ||||
|     ;; return LST minus the other version of PACKAGE in it, plus PACKAGE. | ||||
|  | @ -205,6 +239,7 @@ update would trigger a complete rebuild." | |||
| 
 | ||||
|   (let* ((opts            (parse-options)) | ||||
|          (update?         (assoc-ref opts 'update?)) | ||||
|          (updaters        (options->updaters opts)) | ||||
|          (list-dependent? (assoc-ref opts 'list-dependent?)) | ||||
|          (key-download    (assoc-ref opts 'key-download)) | ||||
|          (packages | ||||
|  | @ -258,18 +293,19 @@ dependent packages are rebuilt: ~{~a~^ ~}~%" | |||
|                           (or (assoc-ref opts 'gpg-command) | ||||
|                               (%gpg-command)))) | ||||
|             (for-each | ||||
|              (cut update-package store <> #:key-download key-download) | ||||
|              (cut update-package store <> updaters | ||||
|                   #:key-download key-download) | ||||
|              packages)))) | ||||
|        (else | ||||
|         (for-each (lambda (package) | ||||
|                     (match (false-if-exception (package-update-path package)) | ||||
|                       ((new-version . directory) | ||||
|                     (match (package-update-path package updaters) | ||||
|                       ((? upstream-source? source) | ||||
|                        (let ((loc (or (package-field-location package 'version) | ||||
|                                       (package-location package)))) | ||||
|                          (format (current-error-port) | ||||
|                                  (_ "~a: ~a would be upgraded from ~a to ~a~%") | ||||
|                                  (location->string loc) | ||||
|                                  (package-name package) (package-version package) | ||||
|                                  new-version))) | ||||
|                       (_ #f))) | ||||
|                                  (upstream-source-version source)))) | ||||
|                       (#f #f))) | ||||
|                   packages)))))) | ||||
|  |  | |||
							
								
								
									
										259
									
								
								guix/upstream.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								guix/upstream.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,259 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2010, 2011, 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
| ;;; GNU Guix is free software; you can redistribute it and/or modify it | ||||
| ;;; under the terms of the GNU General Public License as published by | ||||
| ;;; the Free Software Foundation; either version 3 of the License, or (at | ||||
| ;;; your option) any later version. | ||||
| ;;; | ||||
| ;;; GNU Guix is distributed in the hope that it will be useful, but | ||||
| ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| ;;; GNU General Public License for more details. | ||||
| ;;; | ||||
| ;;; You should have received a copy of the GNU General Public License | ||||
| ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| (define-module (guix upstream) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (guix utils) | ||||
|   #:use-module ((guix download) | ||||
|                 #:select (download-to-store)) | ||||
|   #:use-module ((guix build utils) | ||||
|                 #:select (substitute)) | ||||
|   #:use-module (guix gnupg) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix ui) | ||||
|   #:use-module (guix base32) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:use-module (srfi srfi-9) | ||||
|   #:use-module (srfi srfi-11) | ||||
|   #:use-module (srfi srfi-26) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (ice-9 regex) | ||||
|   #:export (upstream-source | ||||
|             upstream-source? | ||||
|             upstream-source-package | ||||
|             upstream-source-version | ||||
|             upstream-source-urls | ||||
|             upstream-source-signature-urls | ||||
| 
 | ||||
|             coalesce-sources | ||||
| 
 | ||||
|             upstream-updater | ||||
|             upstream-updater? | ||||
|             upstream-updater-name | ||||
|             upstream-updater-predicate | ||||
|             upstream-updater-latest | ||||
| 
 | ||||
|             download-tarball | ||||
|             package-update-path | ||||
|             package-update | ||||
|             update-package-source)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module provides tools to represent and manipulate a upstream source | ||||
| ;;; code, and to auto-update package recipes. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| ;; Representation of upstream's source.  There can be several URLs--e.g., | ||||
| ;; tar.gz, tar.gz, etc.  There can be correspond signature URLs, one per | ||||
| ;; source URL. | ||||
| (define-record-type* <upstream-source> | ||||
|   upstream-source make-upstream-source | ||||
|   upstream-source? | ||||
|   (package        upstream-source-package)        ;string | ||||
|   (version        upstream-source-version)        ;string | ||||
|   (urls           upstream-source-urls)           ;list of strings | ||||
|   (signature-urls upstream-source-signature-urls  ;#f | list of strings | ||||
|                   (default #f))) | ||||
| 
 | ||||
| (define (upstream-source-archive-types release) | ||||
|   "Return the available types of archives for RELEASE---a list of strings such | ||||
| as \"gz\" or \"xz\"." | ||||
|   (map file-extension (upstream-source-urls release))) | ||||
| 
 | ||||
| (define (coalesce-sources sources) | ||||
|   "Coalesce the elements of SOURCES, a list of <upstream-source>, that | ||||
| correspond to the same version." | ||||
|   (define (same-version? r1 r2) | ||||
|     (string=? (upstream-source-version r1) (upstream-source-version r2))) | ||||
| 
 | ||||
|   (define (release>? r1 r2) | ||||
|     (version>? (upstream-source-version r1) (upstream-source-version r2))) | ||||
| 
 | ||||
|   (fold (lambda (release result) | ||||
|           (match result | ||||
|             ((head . tail) | ||||
|              (if (same-version? release head) | ||||
|                  (cons (upstream-source | ||||
|                         (inherit release) | ||||
|                         (urls (append (upstream-source-urls release) | ||||
|                                       (upstream-source-urls head))) | ||||
|                         (signature-urls | ||||
|                          (append (upstream-source-signature-urls release) | ||||
|                                  (upstream-source-signature-urls head)))) | ||||
|                        tail) | ||||
|                  (cons release result))) | ||||
|             (() | ||||
|              (list release)))) | ||||
|         '() | ||||
|         (sort sources release>?))) | ||||
| 
 | ||||
|  | ||||
| ;;; | ||||
| ;;; Auto-update. | ||||
| ;;; | ||||
| 
 | ||||
| (define-record-type <upstream-updater> | ||||
|   (upstream-updater name pred latest) | ||||
|   upstream-updater? | ||||
|   (name      upstream-updater-name) | ||||
|   (pred      upstream-updater-predicate) | ||||
|   (latest    upstream-updater-latest)) | ||||
| 
 | ||||
| (define (lookup-updater package updaters) | ||||
|   "Return an updater among UPDATERS that matches PACKAGE, or #f if none of | ||||
| them matches." | ||||
|   (any (match-lambda | ||||
|          (($ <upstream-updater> _ pred latest) | ||||
|           (and (pred package) latest))) | ||||
|        updaters)) | ||||
| 
 | ||||
| (define (package-update-path package updaters) | ||||
|   "Return an upstream source to update PACKAGE to, or #f if no update is | ||||
| needed or known." | ||||
|   (match (lookup-updater package updaters) | ||||
|     ((? procedure? latest-release) | ||||
|      (match (latest-release (package-name package)) | ||||
|        ((and source ($ <upstream-source> name version)) | ||||
|         (and (version>? version (package-version package)) | ||||
|              source)) | ||||
|        (_ #f))) | ||||
|     (#f #f))) | ||||
| 
 | ||||
| (define* (download-tarball store url signature-url | ||||
|                            #:key (key-download 'interactive)) | ||||
|   "Download the tarball at URL to the store; check its OpenPGP signature at | ||||
| SIGNATURE-URL, unless SIGNATURE-URL is false.  On success, return the tarball | ||||
| file name.  KEY-DOWNLOAD specifies a download policy for missing OpenPGP keys; | ||||
| allowed values: 'interactive' (default), 'always', and 'never'." | ||||
|   (let ((tarball (download-to-store store url))) | ||||
|     (if (not signature-url) | ||||
|         tarball | ||||
|         (let* ((sig (download-to-store store signature-url)) | ||||
|                (ret (gnupg-verify* sig tarball #:key-download key-download))) | ||||
|           (if ret | ||||
|               tarball | ||||
|               (begin | ||||
|                 (warning (_ "signature verification failed for `~a'~%") | ||||
|                          url) | ||||
|                 (warning (_ "(could be because the public key is not in your keyring)~%")) | ||||
|                 #f)))))) | ||||
| 
 | ||||
| (define (find2 pred lst1 lst2) | ||||
|   "Like 'find', but operate on items from both LST1 and LST2.  Return two | ||||
| values: the item from LST1 and the item from LST2 that match PRED." | ||||
|   (let loop ((lst1 lst1) (lst2 lst2)) | ||||
|     (match lst1 | ||||
|       ((head1 . tail1) | ||||
|        (match lst2 | ||||
|          ((head2 . tail2) | ||||
|           (if (pred head1 head2) | ||||
|               (values head1 head2) | ||||
|               (loop tail1 tail2))))) | ||||
|       (() | ||||
|        (values #f #f))))) | ||||
| 
 | ||||
| (define* (package-update store package updaters | ||||
|                          #:key (key-download 'interactive)) | ||||
|   "Return the new version and the file name of the new version tarball for | ||||
| PACKAGE, or #f and #f when PACKAGE is up-to-date.  KEY-DOWNLOAD specifies a | ||||
| download policy for missing OpenPGP keys; allowed values: 'always', 'never', | ||||
| and 'interactive' (default)." | ||||
|   (match (package-update-path package updaters) | ||||
|     (($ <upstream-source> _ version urls signature-urls) | ||||
|      (let*-values (((name) | ||||
|                     (package-name package)) | ||||
|                    ((archive-type) | ||||
|                     (match (and=> (package-source package) origin-uri) | ||||
|                       ((? string? uri) | ||||
|                        (or (file-extension uri) "gz")) | ||||
|                       (_ | ||||
|                        "gz"))) | ||||
|                    ((url signature-url) | ||||
|                     (find2 (lambda (url sig-url) | ||||
|                              (string-suffix? archive-type url)) | ||||
|                            urls | ||||
|                            (or signature-urls (circular-list #f))))) | ||||
|        (let ((tarball (download-tarball store url signature-url | ||||
|                                         #:key-download key-download))) | ||||
|          (values version tarball)))) | ||||
|     (#f | ||||
|      (values #f #f)))) | ||||
| 
 | ||||
| (define (update-package-source package version hash) | ||||
|   "Modify the source file that defines PACKAGE to refer to VERSION, | ||||
| whose tarball has SHA256 HASH (a bytevector).  Return the new version string | ||||
| if an update was made, and #f otherwise." | ||||
|   (define (new-line line matches replacement) | ||||
|     ;; Iterate over MATCHES and return the modified line based on LINE. | ||||
|     ;; Replace each match with REPLACEMENT. | ||||
|     (let loop ((m* matches)                       ; matches | ||||
|                (o  0)                             ; offset in L | ||||
|                (r  '()))                          ; result | ||||
|       (match m* | ||||
|         (() | ||||
|          (let ((r (cons (substring line o) r))) | ||||
|            (string-concatenate-reverse r))) | ||||
|         ((m . rest) | ||||
|          (loop rest | ||||
|                (match:end m) | ||||
|                (cons* replacement | ||||
|                       (substring line o (match:start m)) | ||||
|                       r)))))) | ||||
| 
 | ||||
|   (define (update-source file old-version version | ||||
|                          old-hash hash) | ||||
|     ;; Update source file FILE, replacing occurrences OLD-VERSION by VERSION | ||||
|     ;; and occurrences of OLD-HASH by HASH (base32 representation thereof). | ||||
| 
 | ||||
|     ;; TODO: Currently this is a bit of a sledgehammer: if VERSION occurs in | ||||
|     ;; different unrelated places, we may modify it more than needed, for | ||||
|     ;; instance.  We should try to make changes only within the sexp that | ||||
|     ;; corresponds to the definition of PACKAGE. | ||||
|     (let ((old-hash (bytevector->nix-base32-string old-hash)) | ||||
|           (hash     (bytevector->nix-base32-string hash))) | ||||
|       (substitute file | ||||
|                   `((,(regexp-quote old-version) | ||||
|                      . ,(cut new-line <> <> version)) | ||||
|                     (,(regexp-quote old-hash) | ||||
|                      . ,(cut new-line <> <> hash)))) | ||||
|       version)) | ||||
| 
 | ||||
|   (let ((name (package-name package)) | ||||
|         (loc  (package-field-location package 'version))) | ||||
|     (if loc | ||||
|         (let ((old-version (package-version package)) | ||||
|               (old-hash    (origin-sha256 (package-source package))) | ||||
|               (file        (and=> (location-file loc) | ||||
|                                   (cut search-path %load-path <>)))) | ||||
|           (if file | ||||
|               (update-source file | ||||
|                              old-version version | ||||
|                              old-hash hash) | ||||
|               (begin | ||||
|                 (warning (_ "~a: could not locate source file") | ||||
|                          (location-file loc)) | ||||
|                 #f))) | ||||
|         (begin | ||||
|           (format (current-error-port) | ||||
|                   (_ "~a: ~a: no `version' field in source; skipping~%") | ||||
|                   (location->string (package-location package)) | ||||
|                   name))))) | ||||
| 
 | ||||
| ;;; upstream.scm ends here | ||||
|  | @ -23,7 +23,7 @@ guix/scripts/edit.scm | |||
| guix/scripts/size.scm | ||||
| guix/scripts/graph.scm | ||||
| guix/scripts/challenge.scm | ||||
| guix/gnu-maintenance.scm | ||||
| guix/upstream.scm | ||||
| guix/ui.scm | ||||
| guix/http-client.scm | ||||
| guix/nar.scm | ||||
|  |  | |||
		Reference in a new issue