summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2016-01-19 00:18:37 -0500
committerMark H Weaver <mhw@netris.org>2016-01-19 00:18:37 -0500
commitafe9f409491a055e5d058c8f747e80d1506391e5 (patch)
tree3b3747c9d2df32019a46b283b94f0a7af05ebf1d /gnu
parentbb8afbf5a1fbc85f700c0e07ce5581637e3674dc (diff)
parent1348185ac2bb48b373495830267cff8ddc6b1fa5 (diff)
downloadguix-afe9f409491a055e5d058c8f747e80d1506391e5.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu')
-rw-r--r--gnu/build/linux-modules.scm78
-rw-r--r--gnu/packages/admin.scm61
-rw-r--r--gnu/packages/bioinformatics.scm77
-rw-r--r--gnu/packages/calendar.scm77
-rw-r--r--gnu/packages/databases.scm6
-rw-r--r--gnu/packages/datamash.scm5
-rw-r--r--gnu/packages/dav.scm108
-rw-r--r--gnu/packages/docker.scm107
-rw-r--r--gnu/packages/emacs.scm6
-rw-r--r--gnu/packages/games.scm6
-rw-r--r--gnu/packages/gnome.scm27
-rw-r--r--gnu/packages/gnupg.scm6
-rw-r--r--gnu/packages/linux.scm17
-rw-r--r--gnu/packages/music.scm29
-rw-r--r--gnu/packages/ocaml.scm105
-rw-r--r--gnu/packages/openstack.scm155
-rw-r--r--gnu/packages/patches/bowtie-fix-makefile.patch31
-rw-r--r--gnu/packages/python.scm756
-rw-r--r--gnu/packages/rsync.scm5
-rw-r--r--gnu/packages/ruby.scm64
-rw-r--r--gnu/packages/ssh.scm6
-rw-r--r--gnu/packages/statistics.scm4
-rw-r--r--gnu/packages/sxiv.scm6
-rw-r--r--gnu/packages/version-control.scm31
-rw-r--r--gnu/packages/video.scm60
-rw-r--r--gnu/system.scm41
-rw-r--r--gnu/system/linux-initrd.scm4
27 files changed, 1663 insertions, 215 deletions
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index e6552fdb67..bbe1a74d85 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -96,6 +96,11 @@ contains module names, not actual file names."
       name
       (dot-ko name)))
 
+(define (file-name->module-name file)
+  "Return the module name corresponding to FILE, stripping the trailing '.ko',
+etc."
+  (basename file ".ko"))
+
 (define* (recursive-module-dependencies files
                                         #:key (lookup-module dot-ko))
   "Return the topologically-sorted list of file names of the modules depended
@@ -130,6 +135,22 @@ LOOKUP-MODULE to the module name."
       (((modules . _) ...)
        modules))))
 
+(define (module-black-list)
+  "Return the black list of modules that must not be loaded.  This black list
+is specified using 'modprobe.blacklist=MODULE1,MODULE2,...' on the kernel
+command line; it is honored by libkmod."
+  (define parameter
+    "modprobe.blacklist=")
+
+  (let ((command (call-with-input-file "/proc/cmdline"
+                   get-string-all)))
+    (append-map (lambda (arg)
+                  (if (string-prefix? parameter arg)
+                      (string-tokenize (string-drop arg (string-length parameter))
+                                       %not-comma)
+                      '()))
+                (string-tokenize command))))
+
 (define (module-loaded? module)
   "Return #t if MODULE is already loaded.  MODULE must be a Linux module name,
 not a file name."
@@ -138,29 +159,44 @@ not a file name."
 (define* (load-linux-module* file
                              #:key
                              (recursive? #t)
-                             (lookup-module dot-ko))
-  "Load Linux module from FILE, the name of a `.ko' file.  When RECURSIVE? is
-true, load its dependencies first (à la 'modprobe'.)  The actual files
-containing modules depended on are obtained by calling LOOKUP-MODULE with the
-module name."
+                             (lookup-module dot-ko)
+                             (black-list (module-black-list)))
+  "Load Linux module from FILE, the name of a '.ko' file; return true on
+success, false otherwise.  When RECURSIVE? is true, load its dependencies
+first (à la 'modprobe'.)  The actual files containing modules depended on are
+obtained by calling LOOKUP-MODULE with the module name.  Modules whose name
+appears in BLACK-LIST are not loaded."
   (define (slurp module)
     ;; TODO: Use 'finit_module' to reduce memory usage.
     (call-with-input-file file get-bytevector-all))
 
-  (when recursive?
-    (for-each (cut load-linux-module* <> #:lookup-module lookup-module)
-              (map lookup-module (module-dependencies file))))
-
-  (format (current-module-debugging-port)
-          "loading Linux module from '~a'...~%" file)
-
-  (catch 'system-error
-    (lambda ()
-      (load-linux-module (slurp file)))
-    (lambda args
-      ;; If this module was already loaded and we're in modprobe style, ignore
-      ;; the error.
-      (unless (and recursive? (= EEXIST (system-error-errno args)))
-        (apply throw args)))))
+  (define (black-listed? module)
+    (let ((result (member module black-list)))
+      (when result
+        (format (current-module-debugging-port)
+                "not loading module '~a' because it's black-listed~%"
+                module))
+      result))
+
+  (define (load-dependencies file)
+    (let ((dependencies (module-dependencies file)))
+      (every (cut load-linux-module* <> #:lookup-module lookup-module)
+             (map lookup-module dependencies))))
+
+  (and (not (black-listed? (file-name->module-name file)))
+       (or (not recursive?)
+           (load-dependencies file))
+       (begin
+         (format (current-module-debugging-port)
+                 "loading Linux module from '~a'...~%" file)
+
+         (catch 'system-error
+           (lambda ()
+             (load-linux-module (slurp file)))
+           (lambda args
+             ;; If this module was already loaded and we're in modprobe style, ignore
+             ;; the error.
+             (or (and recursive? (= EEXIST (system-error-errno args)))
+                 (apply throw args)))))))
 
 ;;; linux-modules.scm ends here
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 6e3024dffd..1f2d0fbf95 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
@@ -1318,3 +1318,62 @@ able to adapt itself dynamically to the overall system load.  Children
 processes and threads of the specified process may optionally share the same
 limits.")
     (license license:gpl2+)))
+
+(define-public autojump
+  (package
+    (name "autojump")
+    (version "22.2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/wting/autojump/archive/"
+                           "release-v" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0xglj7nb8xczaqy2dhn78drqdwqj64rqpymxhqmmwwqzfaqassw1"))))
+    (build-system gnu-build-system)
+    (native-inputs                      ;for tests
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)))
+    (inputs
+     `(("python" ,python-wrapper)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (delete 'build)
+                  (replace 'check
+                    (lambda _
+                      (zero?
+                       (system* "python" "tests/autojump_utils_test.py"))))
+                  (replace 'install
+                    ;; The install.py script doesn't allow system installation
+                    ;; into an arbitrary prefix, so do our own install.
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (bin (string-append out "/bin"))
+                             (share (string-append out "/share/autojump"))
+                             (py (string-append out "/lib/python"
+                                                ,(version-major+minor
+                                                  (package-version python-wrapper))
+                                                "/site-packages"))
+                             (man (string-append out "/share/man/man1")))
+                        (install-file "bin/autojump" bin)
+                        (for-each (λ (f) (install-file f py))
+                                  (find-files "bin" "\\.py$"))
+                        (for-each (λ (f) (install-file f share))
+                                  (find-files "bin" "autojump\\..*$"))
+                        (substitute* (string-append share "/autojump.sh")
+                          (("/usr/local") out))
+                        (install-file "docs/autojump.1" man)
+                        (wrap-program (string-append bin "/autojump")
+                          `("PYTHONPATH" ":" prefix (,py)))
+                        #t))))))
+    (home-page "https://github.com/wting/autojump")
+    (synopsis "Shell extension for filesystem navigation")
+    (description
+     "Autojump provides a faster way to navigate your filesystem, with a \"cd
+command that learns\".  It works by maintaining a database of the directories
+you use the most from the command line and allows you to \"jump\" to
+frequently used directories by typing only a small pattern.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index c6531d669f..314d0ad322 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
@@ -603,7 +603,7 @@ errors at the end of reads.")
 (define-public bowtie
   (package
     (name "bowtie")
-    (version "2.2.4")
+    (version "2.2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BenLangmead/bowtie2/archive/v"
@@ -611,42 +611,36 @@ errors at the end of reads.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "15dnbqippwvhyh9zqjhaxkabk7lm1xbh1nvar1x4b5kwm117zijn"))
+                "1ssfvymxfrap6f9pf86s9bvsbqdgka4abr2r7j3mgr4w1l289m86"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "Makefile"
-                  (("^CC = .*$") "CC = gcc")
-                  (("^CPP = .*$") "CPP = g++")
                   ;; replace BUILD_HOST and BUILD_TIME for deterministic build
                   (("-DBUILD_HOST=.*") "-DBUILD_HOST=\"\\\"guix\\\"\"")
-                  (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\"")))
-              (patches (list (search-patch "bowtie-fix-makefile.patch")))))
+                  (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\"")))))
     (build-system gnu-build-system)
     (inputs `(("perl" ,perl)
               ("perl-clone" ,perl-clone)
               ("perl-test-deep" ,perl-test-deep)
               ("perl-test-simple" ,perl-test-simple)
-              ("python" ,python-2)))
+              ("python" ,python-2)
+              ("tbb" ,tbb)))
     (arguments
-     '(#:make-flags '("allall")
+     '(#:make-flags
+       (list "allall"
+             "WITH_TBB=1"
+             (string-append "prefix=" (assoc-ref %outputs "out")))
        #:phases
        (alist-delete
         'configure
         (alist-replace
-         'install
+         'check
          (lambda* (#:key outputs #:allow-other-keys)
-           (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
-             (for-each (lambda (file)
-                         (install-file file bin))
-                       (find-files "." "bowtie2.*"))))
-         (alist-replace
-          'check
-          (lambda* (#:key outputs #:allow-other-keys)
-            (system* "perl"
-                     "scripts/test/simple_tests.pl"
-                     "--bowtie2=./bowtie2"
-                     "--bowtie2-build=./bowtie2-build"))
-          %standard-phases)))))
+           (system* "perl"
+                    "scripts/test/simple_tests.pl"
+                    "--bowtie2=./bowtie2"
+                    "--bowtie2-build=./bowtie2-build"))
+         %standard-phases))))
     (home-page "http://bowtie-bio.sourceforge.net/bowtie2/index.shtml")
     (synopsis "Fast and sensitive nucleotide sequence read aligner")
     (description
@@ -2079,7 +2073,7 @@ that a read originated from a particular isoform.")
 (define-public orfm
   (package
     (name "orfm")
-    (version "0.4.1")
+    (version "0.5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2087,12 +2081,16 @@ that a read originated from a particular isoform.")
                     version "/orfm-" version ".tar.gz"))
               (sha256
                (base32
-                "05fmw145snk646ly076zby0fjav0k7ysbclck5d4s9pmgcfpijc2"))))
+                "0vb6d771gl4mix8bwx919x5ayy9pkj44n7ki336nz3rz2rx4c7gk"))))
     (build-system gnu-build-system)
     (inputs `(("zlib" ,zlib)))
+    (native-inputs
+     `(("ruby-bio-commandeer" ,ruby-bio-commandeer)
+       ("ruby-rspec" ,ruby-rspec)
+       ("ruby" ,ruby)))
     (synopsis "Simple and not slow open reading frame (ORF) caller")
     (description
-     "An ORF caller finds stretches of DNA that when translated are not
+     "An ORF caller finds stretches of DNA that, when translated, are not
 interrupted by stop codons.  OrfM finds and prints these ORFs.")
     (home-page "https://github.com/wwood/OrfM")
     (license license:lgpl3+)))
@@ -2458,18 +2456,21 @@ viewer.")
        (sha256
         (base32 "1m33xsfwz0s8qi45lylagfllqg7fphf4dr0780rsvw75av9wk06h"))))
     (arguments
-     (substitute-keyword-arguments (package-arguments samtools)
-       ((#:tests? tests) #f) ;no "check" target
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'install
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (let ((bin (string-append
-                                  (assoc-ref outputs "out") "/bin")))
-                        (mkdir-p bin)
-                        (copy-file "samtools"
-                                   (string-append bin "/samtools")))))
-           (delete 'patch-tests)))))))
+     `(#:tests? #f ;no "check" target
+       ,@(substitute-keyword-arguments (package-arguments samtools)
+           ((#:make-flags flags)
+            `(cons "LIBCURSES=-lncurses" ,flags))
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let ((bin (string-append
+                               (assoc-ref outputs "out") "/bin")))
+                     (mkdir-p bin)
+                     (copy-file "samtools"
+                                (string-append bin "/samtools")))))
+               (delete 'patch-tests)
+               (delete 'configure))))))))
 
 (define-public mosaik
   (let ((commit "5c25216d"))
@@ -3841,6 +3842,8 @@ extracting the desired features in a convenient format.")
     (properties
      `((upstream-name . "GO.db")))
     (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotationdbi" ,r-annotationdbi)))
     (home-page "http://bioconductor.org/packages/GO.db")
     (synopsis "Annotation maps describing the entire Gene Ontology")
     (description
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 7e87fbbfe4..2e4481f94b 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,9 +22,16 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build utils)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system python)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages dav)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages icu4c)
-  #:use-module (gnu packages perl))
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages python))
 
 (define-public libical
   (package
@@ -50,3 +58,70 @@
      "Libical is an implementation of the iCalendar protocols and protocol
 data units.")
     (license lgpl2.1)))
+
+(define-public khal
+  (package
+    (name "khal")
+    (version "0.7.0")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "khal" version))
+             (sha256
+              (base32
+               "00llxj7cv31mjsx0j6zxmyi9s1q20yvfkn025xcy8cv1ylfwic66"))
+             (modules '((guix build utils)))
+             ;; Patch broken path in 'doc' Makefile.
+             ;; Patch sent upstream: https://github.com/geier/khal/pull/307
+             (snippet
+               '(substitute* "doc/source/Makefile"
+                 (("../../../khal/khal/settings/khal.spec")
+                  "../../khal/settings/khal.spec" )))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+        ;; Bug reported: https://github.com/geier/khal/issues/309
+        (add-after 'unpack 'disable-test
+          (lambda _
+            (substitute* "tests/khalendar_test.py"
+                         (("test_only_update_old_event")
+                          "disabled_only_update_old_event"))))
+        ;; Building the manpage requires khal to be installed.
+        (add-after 'install 'manpage
+          (lambda* (#:key outputs #:allow-other-keys)
+            (setenv "PYTHONPATH"
+                    (string-append
+                      (getenv "PYTHONPATH") ":" (assoc-ref outputs "out")))
+            (zero? (system* "make" "--directory=doc/" "man"))
+            (install-file
+              "doc/build/man/khal.1"
+              (string-append (assoc-ref outputs "out") "/share/man/man1"))))
+        ;; The tests require us to choose a timezone.
+        (replace 'check
+          (lambda* (#:key inputs #:allow-other-keys)
+            (setenv "TZ"
+                    (string-append (assoc-ref inputs "tzdata")
+                                   "/share/zoneinfo/Zulu"))
+            (zero? (system* "py.test" "tests")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ;; Required for tests
+       ("tzdata" ,tzdata)
+       ;; Required to build manpage
+       ("python-sphinxcontrib-newsfeed" ,python-sphinxcontrib-newsfeed)
+       ("python-sphinx" ,python-sphinx)))
+    (inputs
+     `(("sqlite" ,sqlite)))
+    (propagated-inputs
+     `(("python-configobj" ,python-configobj)
+       ("python-dateutil-2" ,python-dateutil-2)
+       ("python-icalendar" ,python-icalendar)
+       ("python-tzlocal" ,python-tzlocal)
+       ("python-urwid" ,python-urwid)
+       ("python-pyxdg" ,python-pyxdg)
+       ("vdirsyncer" ,vdirsyncer)))
+    (synopsis "Console calendar program")
+    (description "Khal is a standards based console calendar program,
+able to synchronize with CalDAV servers through vdirsyncer.")
+    (home-page "http://lostpackets.de/khal/")
+    (license expat)))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 4bb3b4d1e2..b36f5d8c16 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2012, 2014, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
@@ -205,7 +205,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.0.20")
+    (version "10.0.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.org/f/"
@@ -213,7 +213,7 @@ Language.")
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0ywb730l68mxvmpik1x2ndbdaaks6dmc17pxspspm5wlqxinjkrs"))))
+                "0x52gfxk7zr84al83x62s4gh7mbngahy1svafdkbwd18i5lysvhm"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm
index 4f8ded1d66..9889f16646 100644
--- a/gnu/packages/datamash.scm
+++ b/gnu/packages/datamash.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,7 +28,7 @@
 (define-public datamash
   (package
     (name "datamash")
-    (version "1.0.7")
+    (version "1.1.0")
     (source
      (origin
       (method url-fetch)
@@ -35,7 +36,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0y49zaadzirghy4xfajvsv1f5x805cjp61z212ggipx5243302qs"))))
+        "1c2bj0jrm4fxkf0ykxkzgyk1l9s0idqm8rbzmk3n9pgldb4arrd9"))))
     (native-inputs
      `(("which" ,which)                 ;for tests
        ("perl" ,perl)))                 ;for help2man
diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm
new file mode 100644
index 0000000000..f13d013d50
--- /dev/null
+++ b/gnu/packages/dav.scm
@@ -0,0 +1,108 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
+;;;
+;;; 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 (gnu packages dav)
+  #:use-module (guix build-system python)
+  #:use-module (guix download)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (gnu packages python))
+
+(define-public radicale
+  (package
+    (name "radicale")
+    (version "1.1.1")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "Radicale" version))
+             (sha256
+              (base32
+               "1c5lv8qca21mndkx350wxv34qypqh6gb4rhzms4anr642clq3jg2"))))
+    (build-system python-build-system)
+    (propagated-inputs
+      ;; TODO: Add python-pam
+     `(("python-requests" ,python-requests)))
+    (synopsis "Basic CalDAV and CardDAV server")
+    (description "Radicale is a CalDAV and CardDAV server for UNIX-like
+platforms.  Calendars and address books are available for both local and remote
+access, possibly limited through authentication policies.  They can be viewed
+and edited by calendar and contact clients on mobile phones or computers.
+
+Radicale intentionally does not fully comply with the CalDAV and CardDAV RFCs.
+Instead, it supports the CalDAV and CardDAV implementations of popular
+clients.")
+    (home-page "http://radicale.org/")
+    (license gpl3+)))
+
+(define-public vdirsyncer
+  (package
+    (name "vdirsyncer")
+    (version "0.7.5")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "vdirsyncer" version))
+             (sha256
+              (base32
+               "0dvar4k95n689fgw5gy19mb7ggaw32c8j2gbglr33wn7pbxc2l9z"))))
+    (build-system python-build-system)
+    (arguments
+      `(#:phases (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (setenv "DAV_SERVER" "radicale")
+             (setenv "REMOTESTORAGE_SERVER" "skip")
+             (zero? (system* "py.test"))))
+         ;; vdirsyncer requires itself to be installed in order to build
+         ;; the manpage.
+         (add-after 'install 'manpage
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "PYTHONPATH"
+                     (string-append
+                       (getenv "PYTHONPATH")
+                       ":" (assoc-ref outputs "out")))
+             (zero? (system* "make" "--directory=docs/" "man"))
+             (install-file
+               "docs/_build/man/vdirsyncer.1"
+               (string-append
+                 (assoc-ref outputs "out")
+                 "/share/man/man1")))))))
+    (native-inputs
+     `(("python-oauthlib" ,python-oauthlib)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-sphinx" ,python-sphinx)
+       ;; Required for testing
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-localserver" ,python-pytest-localserver)
+       ("python-pytest-xprocess" ,python-pytest-xprocess)
+       ("python-wsgi-intercept" ,python-wsgi-intercept)
+       ("radicale" ,radicale)))
+    (propagated-inputs
+     `(("python-atomicwrites" ,python-atomicwrites)
+       ("python-click" ,python-click)
+       ("python-click-log" ,python-click-log)
+       ("python-click-threading" ,python-click-threading)
+       ("python-lxml" ,python-lxml) ; which one?
+       ("python-requests-toolbelt" ,python-requests-toolbelt)))
+    (synopsis "Synchronize calendars and contacts")
+    (description "Vdirsyncer synchronizes your calendars and addressbooks
+between two storage locations.  The most popular purpose is to
+synchronize a CalDAV or CardDAV server with a local folder or file.  The
+local data can then be accessed via a variety of programs, none of which
+have to know or worry about syncing to a server.")
+    (home-page "https://github.com/untitaker/vdirsyncer")
+    (license expat)))
diff --git a/gnu/packages/docker.scm b/gnu/packages/docker.scm
new file mode 100644
index 0000000000..06b72ee376
--- /dev/null
+++ b/gnu/packages/docker.scm
@@ -0,0 +1,107 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 David Thompson <davet@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 (gnu packages docker)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system python)
+  #:use-module (guix utils)
+  #:use-module (gnu packages python))
+
+(define-public python-docker-py
+  (package
+    (name "python-docker-py")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "docker-py" version))
+       (sha256
+        (base32
+         "16ba4xyd46hkj9nkfpz15r8kskl7ljx1afjzchyrhdsrklvzgzim"))))
+    (build-system python-build-system)
+    ;; TODO: Tests require a running Docker daemon.
+    (arguments '(#:tests? #f))
+    (inputs
+     `(("python-requests" ,python-requests)
+       ("python-setuptools" ,python-setuptools)
+       ("python-six" ,python-six)
+       ("python-websocket-client" ,python-websocket-client)))
+    (home-page "https://github.com/docker/docker-py/")
+    (synopsis "Python client for Docker")
+    (description "Docker-Py is a Python client for the Docker container
+management tool.")
+    (license license:asl2.0)))
+
+(define-public python-dockerpty
+  (package
+    (name "python-dockerpty")
+    (version "0.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "dockerpty" version))
+       (sha256
+        (base32
+         "0za6rr349641wv76ww9l3zcic2xyxrirlxpnzl4296h897648455"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-six" ,python-six)))
+    (home-page "https://github.com/d11wtq/dockerpty")
+    (synopsis "Python library to use the pseudo-TTY of a Docker container")
+    (description "Docker PTY provides the functionality needed to operate the
+pseudo-terminal (PTY) allocated to a Docker container using the Python
+client.")
+    (license license:asl2.0)))
+
+(define-public docker-compose
+  (package
+    (name "docker-compose")
+    (version "1.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "docker-compose" version))
+       (sha256
+        (base32
+         "0ksg7hm2yvc977968dixxisrhcmvskzpcx3pz0v1kazrdqp7xakr"))))
+    (build-system python-build-system)
+    ;; TODO: Tests require running Docker daemon.
+    (arguments '(#:tests? #f))
+    (inputs
+     `(("python-docker-py" ,python-docker-py)
+       ("python-dockerpty" ,python-dockerpty)
+       ("python-docopt" ,python-docopt)
+       ("python-enum34" ,python-enum34)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-requests" ,python-requests-2.7)
+       ("python-setuptools" ,python-setuptools)
+       ("python-six" ,python-six)
+       ("python-texttable" ,python-texttable)
+       ("python-websocket-client" ,python-websocket-client)))
+    (home-page "https://www.docker.com/")
+    (synopsis "Multi-container orchestration for Docker")
+    (description "Docker Compose is a tool for defining and running
+multi-container Docker applications.  A Compose file is used to configure an
+application’s services.  Then, using a single command, the containers are
+created and all the services are started as specified in the configuration.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index ba7bd49901..2b1152a54d 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -324,7 +324,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
 (define-public magit
   (package
     (name "magit")
-    (version "2.3.1")
+    (version "2.4.0")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -332,7 +332,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
                    version "/" name "-" version ".tar.gz"))
              (sha256
               (base32
-               "1wnx034adkwhbsydd10il2099hpzz351kp39sri8s1yd43f795gf"))))
+               "1wbam4l36061mj79qlgzrv4xbzhk2dk6gnv45610zwfnf24ikdsp"))))
     (build-system gnu-build-system)
     (native-inputs `(("texinfo" ,texinfo)
                      ("emacs" ,emacs-no-x)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index f7a7636a86..3fcda40ba4 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -11,7 +11,7 @@
 ;;; 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, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;;
@@ -1180,7 +1180,7 @@ is programmed in Haskell.")
 (define-public manaplus
   (package
     (name "manaplus")
-    (version "1.5.12.5")
+    (version "1.6.1.16")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1188,7 +1188,7 @@ is programmed in Haskell.")
                     version "/manaplus-" version ".tar.xz"))
               (sha256
                (base32
-                "0kmd743q40v82221wj8b09n30lqiwl7096v3m7ki3ynsgszkm326"))))
+                "1vrsjvdbdzbnqmr8sp110b2d93kp5yfnifsn6zjm60kdvvbphdir"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 5d14550e8a..05efe0ba97 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -751,22 +751,39 @@ API add-ons to make GTK+ widgets OpenGL-capable.")
 (define-public glade3
   (package
     (name "glade")
-    (version "3.8.5")
+    (version "3.18.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
                                   (version-major+minor version)  "/"
-                                  name "3-" version ".tar.xz"))
+                                  name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0d97df5pfkrh5670a98r3d3w8zlbh1jcax6cvq6j6a20vzjgd9aq"))))
+                "0lk4nvd5s8px9i0pbq7bncikgn2lpx7vjh787d3cvzpvwx3cxnzc"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; needs X, GL, and software rendering
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'fix-docbook
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "man/Makefile.in"
+               (("http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl")
+                (string-append (assoc-ref inputs "docbook-xsl")
+                               "/xml/xsl/docbook-xsl-"
+                               ,(package-version docbook-xsl)
+                               "/manpages/docbook.xsl")))
+             #t)))))
     (inputs
-     `(("gtk+" ,gtk+-2)
+     `(("gtk+" ,gtk+)
        ("libxml2" ,libxml2)))
     (native-inputs
      `(("intltool" ,intltool)
-       ("python" ,python)
+       ("itstool" ,itstool)
+       ("libxslt" ,libxslt) ;for xsltproc
+       ("docbook-xml" ,docbook-xml-4.2)
+       ("docbook-xsl" ,docbook-xsl)
+       ("python" ,python-2)
        ("pkg-config" ,pkg-config)))
     (home-page "https://glade.gnome.org")
     (synopsis "GTK+ rapid application development tool")
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 2042327d3d..c1a6d75569 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -31,6 +31,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -218,8 +219,9 @@ compatible to GNU Pth.")
        ("libksba" ,libksba)
        ("npth" ,npth)
        ("openldap" ,openldap)
-       ("zlib" ,zlib)
-       ("readline" ,readline)))
+       ("readline" ,readline)
+       ("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
    (arguments
     `(#:phases
        (alist-cons-before
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 7250cd5002..3ca4ef1868 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -317,6 +318,22 @@ It has been modified to remove all non-free binary blobs.")
     (license license:gpl2)
     (home-page "http://www.gnu.org/software/linux-libre/"))))
 
+;; This older version of linux-libre is being added because it was found
+;; that newer versions (or at least 4.3.3) of linux-libre were not reading
+;; the hardware clock on (at least Libreboot-enabled) Thinkpad x200
+;; machines.  See <http://bugs.gnu.org/22274>.
+
+(define-public linux-libre-4.2.5
+  (package
+    (inherit linux-libre)
+    (version "4.2.5")
+    (source (origin
+             (method url-fetch)
+             (uri (linux-libre-urls version))
+             (sha256
+              (base32
+               "13ar9sghm2g5w2km9x2d07q3lh81rz286d6slklv56qanm24chzx"))))))
+
 
 ;;;
 ;;; Pluggable authentication modules (PAM).
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index fd1751e95b..bfc90c1eeb 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -462,11 +462,7 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
        ("pygtk" ,python2-pygtk)
        ("gettext" ,gnu-gettext)
        ("gtk" ,gtk+)
-       ;; TODO: Lilypond is optional.  Produces errors at build time:
-       ;;   Drawing systems...Error: /undefinedresult in --glyphshow--
-       ;; Fontconfig is needed to fix one of the errors, but other similar
-       ;; errors remain.
-       ;;("lilypond" ,lilypond)
+       ("lilypond" ,lilypond)
        ("librsvg" ,librsvg) ; needed at runtime for icons
        ("libpng" ,libpng) ; needed at runtime for icons
        ;; players needed at runtime
@@ -480,8 +476,6 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
        ("txt2man" ,txt2man)
        ("libxml2" ,libxml2) ; for tests
        ("ghostscript" ,ghostscript)
-       ;;("fontconfig" ,fontconfig) ; only needed with lilypond
-       ;;("freetype" ,freetype) ; only needed with lilypond
        ("texinfo" ,texinfo)))
     (home-page "https://www.gnu.org/software/solfege/")
     (synopsis "Ear training")
@@ -659,6 +653,16 @@ Laurens Hammond and Don Leslie.")
                (base32
                 "1fi2m4gmvxdi260821y09lxsimq82yv4k5bbgk3kyc3x1nyhn7vx"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-sse-flags
+           (lambda* (#:key system #:allow-other-keys)
+             (when (not (or (string-prefix? "x86_64" system)
+                            (string-prefix? "i686" system)))
+               (substitute* "bristol/Makefile.in"
+                 (("-msse -mfpmath=sse") "")))
+             #t)))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("jack" ,jack-1)
@@ -818,14 +822,14 @@ browser.")
 (define-public drumstick
   (package
     (name "drumstick")
-    (version "1.0.1")
+    (version "1.0.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/drumstick/"
                                   version "/drumstick-" version ".tar.bz2"))
               (sha256
                (base32
-                "0mxgix85b2qqs859z91cxik5x0s60dykqiflbj62px9akvf91qdv"))))
+                "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no test target
@@ -864,14 +868,15 @@ backends, including ALSA, OSS, Network and FluidSynth.")
 (define-public vmpk
   (package
     (name "vmpk")
-    (version "0.6.1")
+    (version "0.6.2a")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/vmpk/vmpk/"
-                                  version "/vmpk-" version ".tar.bz2"))
+                                  (string-drop-right version 1)
+                                  "/vmpk-" version ".tar.bz2"))
               (sha256
                (base32
-                "0ranldd033bd31m9d2vkbkn9zp1k46xbaysllai2i95rf1nhirqc"))))
+                "0259iikvxnfdiifrh02g8xgcxikrkca4nhd3an8xzx0bd6bk8ifi"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no test target
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 5531867964..1311b1bc37 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -3,6 +3,7 @@
 ;;; 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 © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
   #:use-module ((guix licenses) #:hide (zlib))
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix svn-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
@@ -36,6 +38,8 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages texlive)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages lynx)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages ncurses)
@@ -282,14 +286,14 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
 (define-public hevea
   (package
     (name "hevea")
-    (version "2.23")
+    (version "2.28")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://hevea.inria.fr/old/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1f9pj48518ixhjxbviv2zx27v4anp92zgg3x704g1s5cki2w33nv"))))
+                "14fns13wlnpiv9i05841kvi3cq4b9v2sw5x3ff6ziws28q701qnd"))))
     (build-system gnu-build-system)
     (inputs
      `(("ocaml" ,ocaml)))
@@ -297,7 +301,12 @@ concrete syntax of the language (Quotations, Syntax Extensions).")
      `(#:tests? #f  ; no test suite
        #:make-flags (list (string-append "PREFIX=" %output))
        #:phases (modify-phases %standard-phases
-                  (delete 'configure))))
+                  (delete 'configure)
+                  (add-before 'build 'patch-/bin/sh
+                    (lambda _
+                      (substitute* "_tags"
+                        (("/bin/sh") (which "sh")))
+                      #t)))))
     (home-page "http://hevea.inria.fr/")
     (synopsis "LaTeX to HTML translator")
     (description
@@ -496,16 +505,65 @@ libpanel, librsvg and quartz.")
     (version "2.48.3")
     (source
       (origin
-        (method url-fetch)
-          (uri (string-append "https://www.seas.upenn.edu/~bcpierce/unison/"
-                              "download/releases/stable/unison-" version
-                              ".tar.gz"))
-          (sha256
-            (base32
-              "10sln52rnnsj213jy3166m0q97qpwnrwl6mm529xfy10x3xkq3gl"))))
+        (method svn-fetch)
+        (uri (svn-reference
+              (url (string-append "https://webdav.seas.upenn.edu/svn/"
+                                  "unison/branches/"
+                                  (version-major+minor version)))
+              (revision 535)))
+        (file-name (string-append name "-" version "-checkout"))
+        (sha256
+         (base32
+          "0486s53wyayicj9f2raj2dvwvk4xyzar219rccc1iczdwixm4x05"))
+        (modules '((guix build utils)
+                   (ice-9 rdelim)
+                   (ice-9 regex)
+                   (srfi srfi-1)))
+        (snippet
+         `(begin
+            ;; The svn revision in the release tarball appears to be
+            ;; artificially manipulated in order to set the desired point
+            ;; version number.  Because the point version is calculated during
+            ;; the build, we can offset pointVersionOrigin by the desired
+            ;; point version and write that into "Rev: %d".  We do this rather
+            ;; than hardcoding the necessary revision number, for
+            ;; maintainability.
+            (with-atomic-file-replacement "src/mkProjectInfo.ml"
+              (lambda (in out)
+                (let ((pt-ver (string->number (third (string-split ,version #\.))))
+                      (pt-rx  (make-regexp "^let pointVersionOrigin = ([0-9]+)"))
+                      (rev-rx (make-regexp "Rev: [0-9]+")))
+                  (let loop ((pt-origin #f))
+                    (let ((line (read-line in 'concat)))
+                      (cond
+                       ((regexp-exec pt-rx line)
+                        => (lambda (m)
+                             (display line out)
+                             (loop (string->number (match:substring m 1)))))
+                       ((regexp-exec rev-rx line)
+                        => (lambda (m)
+                             (format out "~aRev: ~d~a"
+                                     (match:prefix m)
+                                     (+ pt-origin pt-ver)
+                                     (match:suffix m))
+                             (dump-port in out))) ;done
+                       (else
+                        (display line out)
+                        (loop pt-origin))))))))
+            ;; Without the '-fix' argument, the html file produced does not
+            ;; have functioning internal hyperlinks.
+            (substitute* "doc/Makefile"
+              (("hevea unison") "hevea -fix unison"))))))
     (build-system gnu-build-system)
+    (outputs '("out"
+               "doc"))                  ; 1.9 MiB of documentation
     (native-inputs
-     `(("ocaml" ,ocaml)))
+     `(("ocaml" ,ocaml)
+       ;; For documentation
+       ("ghostscript" ,ghostscript)
+       ("texlive" ,texlive)
+       ("hevea" ,hevea)
+       ("lynx" ,lynx)))
     (arguments
      `(#:parallel-build? #f
        #:parallel-tests? #f
@@ -522,7 +580,30 @@ libpanel, librsvg and quartz.")
                       (bin (string-append out "/bin")))
                  (mkdir-p bin)
                  (setenv "HOME" out) ; forces correct INSTALLDIR in Makefile
-                 #t))))))
+                 #t)))
+           (add-after 'install 'install-doc
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((doc (string-append (assoc-ref outputs "doc")
+                                         "/share/doc/unison")))
+                 (mkdir-p doc)
+                 ;; This file needs write-permissions, because it's
+                 ;; overwritten by 'docs' during documentation generation.
+                 (chmod "src/strings.ml" #o600)
+                 (and (zero? (system* "make" "docs"
+                                      "TEXDIRECTIVES=\\\\draftfalse"))
+                      (begin
+                        (for-each (lambda (f)
+                                    (install-file f doc))
+                                  (map (lambda (ext)
+                                         (string-append
+                                          "doc/unison-manual." ext))
+                                       ;; Install only html documentation,
+                                       ;; since the build is currently
+                                       ;; non-reproducible with the ps, pdf,
+                                       ;; and dvi docs.
+                                       '(;;"ps" "pdf" "dvi"
+                                         "html")))
+                        #t))))))))
     (home-page "https://www.cis.upenn.edu/~bcpierce/unison/")
     (synopsis "File synchronizer")
     (description
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 48a5c6b7e6..e258b89e2f 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,12 +19,14 @@
 
 (define-module (gnu packages openstack)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
   #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module ((guix licenses)
                 #:select (asl2.0))
-  #:use-module (guix packages))
+  #:use-module (guix packages)
+  #:use-module (srfi srfi-1))
 
 (define-public python-bandit
   (package
@@ -302,7 +304,12 @@ portions of your testing code.")
     (license asl2.0)))
 
 (define-public python2-requests-mock
-  (package-with-python2 python-requests-mock))
+  (let ((requests-mock (package-with-python2 python-requests-mock)))
+    (package (inherit requests-mock)
+      (propagated-inputs
+       `(("python2-requests" ,python2-requests)
+         ,@(alist-delete "python-requests"
+                         (package-propagated-inputs requests-mock)))))))
 
 (define-public python-stevedore
   (package
@@ -385,7 +392,12 @@ common features used in Tempest.")
     (license asl2.0)))
 
 (define-public python2-tempest-lib
-  (package-with-python2 python-tempest-lib))
+  (let ((tempest-lib (package-with-python2 python-tempest-lib)))
+    (package (inherit tempest-lib)
+      (propagated-inputs
+       `(("python2-jsonschema", python2-jsonschema)
+         ,@(alist-delete "python-jsonschema"
+                         (package-propagated-inputs tempest-lib)))))))
 
 ;; Packages from the Oslo library
 (define-public python-oslo.config
@@ -594,7 +606,9 @@ from the OpenStack project.")
     (license asl2.0)))
 
 (define-public python2-oslosphinx
-  (package-with-python2 python-oslosphinx))
+  (let ((oslosphinx (package-with-python2 python-oslosphinx)))
+    (package (inherit oslosphinx)
+      (propagated-inputs `(("python2-requests" ,python2-requests))))))
 
 (define-public python-oslotest
   (package
@@ -679,3 +693,134 @@ handling.")
 
 (define-public python2-oslo.utils
   (package-with-python2 python-oslo.utils))
+
+(define-public python-keystoneclient
+  (package
+    (name "python-keystoneclient")
+    (version "1.8.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "python-keystoneclient" version))
+        (sha256
+         (base32
+          "1w4csvkah67rfpxylxnvs2s3594i0f9isy8pf4gnsqs5zirvjaa4"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-sphinx" ,python-sphinx)
+       ;; and some packages for the tests
+       ("openssl" ,openssl)
+       ("python-coverage" ,python-coverage)
+       ("python-discover" ,python-discover)
+       ("python-fixtures" ,python-fixtures)
+       ("python-hacking" ,python-hacking)
+       ("python-keyring" ,python-keyring)
+       ("python-lxml" ,python-lxml)
+       ("python-mock" ,python-mock)
+       ("python-mox3" ,python-mox3)
+       ("python-oauthlib" ,python-oauthlib)
+       ("python-oslosphinx" ,python-oslosphinx)
+       ("python-oslotest" ,python-oslotest)
+       ("python-pycrypto" ,python-pycrypto)
+       ("python-requests-mock" ,python-requests-mock)
+       ("python-temptest-lib" ,python-tempest-lib)
+       ("python-testrepository" ,python-testrepository)
+       ("python-testresources" ,python-testresources)
+       ("python-testtools" ,python-testtools)
+       ("python-webob" ,python-webob)))
+    (propagated-inputs
+     `(("python-babel" ,python-babel)
+       ("python-debtcollector" ,python-debtcollector)
+       ("python-iso8601" ,python-iso8601)
+       ("python-netaddr" ,python-netaddr)
+       ("python-oslo.config" ,python-oslo.config)
+       ("python-oslo.i18n" ,python-oslo.i18n)
+       ("python-oslo.serialization" ,python-oslo.serialization)
+       ("python-oslo.utils" ,python-oslo.utils)
+       ("python-pbr" ,python-pbr)
+       ("python-prettytable" ,python-prettytable)
+       ("python-requests" ,python-requests)
+       ("python-six" ,python-six)
+       ("python-stevedore" ,python-stevedore)))
+    (home-page "http://www.openstack.org/")
+    (synopsis "Client Library for OpenStack Identity")
+    (description
+     "Python-keystoneclient is the identity service used by OpenStack for
+authentication (authN) and high-level authorization (authZ).  It currently
+supports token-based authN with user/service authZ, and is scalable to support
+OAuth, SAML, and OpenID in future versions.  Out of the box, Keystone uses
+SQLite for its identity store database, with the option to connect to external
+LDAP.")
+    (license asl2.0)))
+
+(define-public python2-keystoneclient
+  (let ((keystoneclient (package-with-python2 python-keystoneclient)))
+    (package (inherit keystoneclient)
+      (propagated-inputs
+       `(("python2-requests" ,python2-requests)
+         ,@(alist-delete "python-requests"
+                         (package-propagated-inputs keystoneclient))))
+      (native-inputs
+       `(("python2-oauthlib" ,python2-oauthlib)
+         ("python2-oslosphinx" ,python2-oslosphinx)
+         ("python2-requests-mock" ,python2-requests-mock)
+         ("python2-tempest-lib" ,python2-tempest-lib)
+         ,@(fold alist-delete (package-native-inputs keystoneclient)
+            '("python-oauthlib" "python-oslosphinx" "python-requests-mock" "python-tempest-lib")))))))
+
+(define-public python-swiftclient
+  (package
+    (name "python-swiftclient")
+    (version "2.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "python-swiftclient" version))
+        (sha256
+         (base32
+          "1j33l4z9vqh0scfncl4fxg01zr1hgqxhhai6gvcih1gccqm4nd7p"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pbr", python-pbr)
+       ("python-setuptools" ,python-setuptools)
+       ("python-sphinx" ,python-sphinx)
+       ;; The folloing packages are needed for the tests.
+       ("python-coverage" ,python-coverage)
+       ("python-discover" ,python-discover)
+       ("python-hacking" ,python-hacking)
+       ("python-mock" ,python-mock)
+       ("python-oslosphinx" ,python-oslosphinx)
+       ("python-keystoneclient" ,python-keystoneclient)
+       ("python-testrepository" ,python-testrepository)
+       ("python-testtools" ,python-testtools)))
+    (propagated-inputs
+     `(("python-requests" ,python-requests)
+       ("python-six" ,python-six)))
+    (home-page "http://www.openstack.org/")
+    (synopsis "OpenStack Object Storage API Client Library")
+    (description
+     "OpenStack Object Storage (code-named Swift) creates redundant, scalable
+object storage using clusters of standardized servers to store petabytes of
+accessible data.  It is not a file system or real-time data storage system, but
+rather a long-term storage system for a more permanent type of static data that
+can be retrieved, leveraged, and then updated if necessary.  Primary examples of
+data that best fit this type of storage model are virtual machine images, photo
+storage, email storage and backup archiving.  Having no central \"brain\" or
+master point of control provides greater scalability, redundancy and
+permanence.")
+  (license asl2.0)))
+
+(define-public python2-swiftclient
+  (let ((swiftclient (package-with-python2 python-swiftclient)))
+    (package (inherit swiftclient)
+      (propagated-inputs
+       `(("python2-futures" ,python2-futures)
+         ("python2-requests" ,python2-requests)
+         ,@(alist-delete "python-requests"
+                         (package-propagated-inputs swiftclient))))
+      (native-inputs
+       `(("python2-keystoneclient" ,python2-keystoneclient)
+         ("python2-oslosphinx" ,python2-oslosphinx)
+         ,@(fold alist-delete (package-native-inputs swiftclient)
+            '("python-keystoneclient" "python-oslosphinx")))))))
diff --git a/gnu/packages/patches/bowtie-fix-makefile.patch b/gnu/packages/patches/bowtie-fix-makefile.patch
deleted file mode 100644
index 5ac65731cb..0000000000
--- a/gnu/packages/patches/bowtie-fix-makefile.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 4a99b0023bdfbbe486b9649489a32ea184c18c9a Mon Sep 17 00:00:00 2001
-From: Valentin Antonescu <valentin@jhu.edu>
-Date: Tue, 2 Dec 2014 11:19:13 -0500
-Subject: [PATCH] Make sure the Mavericks test happens only under Darwin.
-
----
- Makefile | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/Makefile b/Makefile
-index d74f7c8..a4cdfa7 100644
---- a/Makefile
-+++ b/Makefile
-@@ -54,12 +54,11 @@ endif
- MACOS = 0
- ifneq (,$(findstring Darwin,$(shell uname)))
- 	MACOS = 1
--endif
--
--ifneq (,$(findstring 13,$(shell uname -r)))
--	CPP = clang++
--	CC = clang
--	EXTRA_FLAGS += -stdlib=libstdc++
-+	ifneq (,$(findstring 13,$(shell uname -r)))
-+		CPP = clang++
-+		CC = clang
-+		EXTRA_FLAGS += -stdlib=libstdc++
-+	endif
- endif
- 
- POPCNT_CAPABILITY ?= 1
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index a01c99e1eb..82a9cfc75e 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015 Chris Marusich <cmmarusich@gmail.com>
 ;;;
@@ -1016,31 +1016,16 @@ doing practical, real world data analysis in Python.")
 (define-public python-tzlocal
   (package
     (name "python-tzlocal")
-    (version "1.1.1")
+    (version "1.2")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "https://pypi.python.org/packages/source/t/"
-                          "tzlocal/tzlocal-" version ".zip"))
+      (uri (pypi-uri "tzlocal" version))
       (sha256
        (base32
-        "1m3y918c3chf41fwg2bx4w42bqsjzn3dyvvcmwwy13c8gj6zssv9"))))
+        "12wsw2fl3adrqrwghasld57bhqdrzn0crblqrci1p5acd0ni53s3"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("unzip" ,unzip)
-       ("python-setuptools" ,python-setuptools)))
-    (inputs `(("python-pytz" ,python-pytz)))
-    (arguments
-     `(#:phases
-       (alist-replace
-        'unpack
-        (lambda _
-          (let ((unzip (string-append (assoc-ref %build-inputs "unzip")
-                                      "/bin/unzip"))
-                (source (assoc-ref %build-inputs "source")))
-            (and (zero? (system* unzip source))
-                 (chdir (string-append "tzlocal-" ,version)))))
-        %standard-phases)))
+    (propagated-inputs `(("python-pytz" ,python-pytz)))
     (home-page "https://github.com/regebro/tzlocal")
     (synopsis
      "Local timezone information for Python")
@@ -1627,18 +1612,18 @@ and many external plugins.")
         (sha256
           (base32
            "1lf9jsmhqk5nc4w3kzwglmdzjvmi7ajvrsnwv826j3bn0wzx8c92"))))
-  (build-system python-build-system)
-  (propagated-inputs
-   `(("python-coverage" ,python-coverage)
-     ("python-pytest" ,python-pytest)))
-  (native-inputs
-   `(("python-setuptools" ,python-setuptools)))
-  (home-page "https://github.com/pytest-dev/pytest-cov")
-  (synopsis "Pytest plugin for measuring coverage")
-  (description
-   "Pytest-cov produces coverage reports.  It supports centralised testing and
-distributed testing in both load and each modes.  It also supports coverage
-of subprocesses.")
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/pytest-dev/pytest-cov")
+    (synopsis "Pytest plugin for measuring coverage")
+    (description
+     "Pytest-cov produces coverage reports.  It supports centralised testing and
+distributed testing in both @code{load} and @code{each} modes.  It also
+supports coverage of subprocesses.")
   (license license:expat)))
 
 (define-public python2-pytest-cov
@@ -2136,28 +2121,38 @@ with sensible defaults out of the box.")
   (package
     (name "python-wheel")
     (version "0.26.0")
-      (source
-        (origin
-          (method url-fetch)
-          (uri (pypi-uri "wheel" version))
-          (sha256
-            (base32
-             "032k1ajijbqnv0z0k88bhf75mdimi18fcmm28mss90610lw3bbga"))))
-  (build-system python-build-system)
-  (native-inputs
-   `(("python-setuptools" ,python-setuptools)
-     ("python-jsonschema" ,python-jsonschema)
-     ("python-pytest-cov" ,python-pytest-cov)))
-  (home-page "https://bitbucket.org/pypa/wheel/")
-  (synopsis "Built-package format for Python")
-  (description
-   "A wheel is a ZIP-format archive with a specially formatted filename and the
-.whl extension.  It is designed to contain all the files for a PEP 376
-compatible install in a way that is very close to the on-disk format.")
-  (license license:expat)))
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "wheel" version))
+        (sha256
+         (base32
+          "032k1ajijbqnv0z0k88bhf75mdimi18fcmm28mss90610lw3bbga"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (home-page "https://bitbucket.org/pypa/wheel/")
+    (synopsis "Format for built Python packages")
+    (description
+     "A wheel is a ZIP-format archive with a specially formatted filename and
+the @code{.whl} extension.  It is designed to contain all the files for a PEP
+376 compatible install in a way that is very close to the on-disk format.  Many
+packages will be properly installed with only the @code{Unpack} step and the
+unpacked archive preserves enough information to @code{Spread} (copy data and
+scripts to their final locations) at any later time.  Wheel files can be
+installed with a newer @code{pip} or with wheel's own command line utility.")
+    (license license:expat)))
 
 (define-public python2-wheel
-  (package-with-python2 python-wheel))
+  (let ((wheel (package-with-python2 python-wheel)))
+    (package (inherit wheel)
+      (native-inputs
+       `(("python2-functools32" ,python2-functools32)
+         ("python2-jsonschema" ,python2-jsonschema)
+         ,@(alist-delete "python-jsonschema"
+                         (package-native-inputs wheel)))))))
 
 (define-public python-requests
   (package
@@ -2184,13 +2179,54 @@ compatible install in a way that is very close to the on-disk format.")
 than Python’s urllib2 library.")
     (license asl2.0)))
 
+;; Some software requires an older version of Requests, notably Docker
+;; Compose.
+(define-public python-requests-2.7
+  (package (inherit python-requests)
+    (version "2.7.0")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "requests" version))
+             (sha256
+              (base32
+               "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
+
 (define-public python2-requests
-  (package-with-python2 python-requests))
+  (let ((requests (package-with-python2 python-requests)))
+    (package (inherit requests)
+      (propagated-inputs
+       `(("python2-wheel" ,python2-wheel)
+         ,@(alist-delete "python-wheel"
+                         (package-propagated-inputs requests)))))))
+
+(define-public python-vcversioner
+  (package
+    (name "python-vcversioner")
+    (version "2.14.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "vcversioner" version))
+       (sha256
+        (base32
+         "11ivq1bm7v0yb4nsfbv9m7g7lyjn112gbvpjnjz8nv1fx633dm5c"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (synopsis "Python library for version number discovery")
+    (description "Vcversioner is a Python library that inspects tagging
+information in a variety of version control systems in order to discover
+version numbers.")
+    (home-page "https://github.com/habnabit/vcversioner")
+    (license isc)))
+
+(define-public python2-vcversioner
+  (package-with-python2 python-vcversioner))
 
 (define-public python-jsonschema
   (package
     (name "python-jsonschema")
-    (version "2.4.0")
+    (version "2.5.1")
     (source (origin
              (method url-fetch)
              (uri
@@ -2199,10 +2235,11 @@ than Python’s urllib2 library.")
                version ".tar.gz"))
              (sha256
               (base32
-               "1yik3031ziygvq66rj3mzfqdgxj29sg1bkfc46wsgi7lnbqs560j"))))
+               "0hddbqjm4jq63y8jf44nswina1crjs16l9snb6m3vvgyg31klrrn"))))
     (build-system python-build-system)
     (inputs
-     `(("python-setuptools" ,python-setuptools)))
+     `(("python-setuptools" ,python-setuptools)
+       ("python-vcversioner" ,python-vcversioner)))
     (home-page "http://github.com/Julian/jsonschema")
     (synopsis "Implementation of JSON Schema for Python")
     (description
@@ -2210,7 +2247,11 @@ than Python’s urllib2 library.")
     (license license:expat)))
 
 (define-public python2-jsonschema
-  (package-with-python2 python-jsonschema))
+  (let ((jsonschema (package-with-python2 python-jsonschema)))
+    (package (inherit jsonschema)
+      (inputs
+       `(("python2-functools32" ,python2-functools32)
+         ,@(package-inputs jsonschema))))))
 
 (define-public python-unidecode
   (package
@@ -4266,11 +4307,13 @@ computing.")
          ,@(alist-delete "python-terminado"
                          (package-propagated-inputs ipython))))
       (inputs
-       `(("python2-mock" ,python2-mock)
+       `(("python2-jsonschema" ,python2-jsonschema)
+         ("python2-mock" ,python2-mock)
          ("python2-matplotlib" ,python2-matplotlib)
          ("python2-numpy" ,python2-numpy)
+         ("python2-requests" ,python2-requests)
          ,@(fold alist-delete (package-inputs ipython)
-                 '("python-matplotlib" "python-numpy")))))))
+                 '("python-jsonschema" "python-matplotlib" "python-numpy" "python-requests")))))))
 
 (define-public python-isodate
   (package
@@ -4341,13 +4384,22 @@ and written in Python.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/u/urwid/urwid-"
-             version ".tar.gz"))
+       (uri (pypi-uri "urwid" version))
        (sha256
         (base32
          "18mb0yy94sjc434rd61m2sfnw27sa0nyrszpj5a9r9zh7fnlzw19"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Disable failing test. Bug filed upstream:
+         ;; https://github.com/wardi/urwid/issues/164
+         ;; TODO: check again for python-urwid > 1.3.0 or python > 3.4.3.
+         (add-after 'unpack 'disable-failing-test
+          (lambda _
+            (substitute* "urwid/tests/test_event_loops.py"
+              (("test_remove_watch_file")
+                "disable_remove_watch_file")))))))
     (native-inputs `(("python-setuptools" ,python-setuptools)))
     (home-page "http://urwid.org")
     (synopsis "Console user interface library for Python")
@@ -5613,6 +5665,32 @@ suitable for a wide range of protocols based on the ASN.1 specification.")
 (define-public python2-pyasn1
   (package-with-python2 python-pyasn1))
 
+(define-public python-pyasn1-modules
+  (package
+    (name "python-pyasn1-modules")
+    (version "0.0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pyasn1-modules" version))
+        (sha256
+         (base32
+          "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (propagated-inputs
+     `(("python-pyasn1" ,python-pyasn1)))
+    (home-page "http://sourceforge.net/projects/pyasn1/")
+    (synopsis "ASN.1 codec implementations")
+    (description
+     "Pyasn1-modules is a collection of Python modules providing ASN.1 types and
+implementations of ASN.1-based codecs and protocols.")
+    (license bsd-3)))
+
+(define-public python2-pyasn1-modules
+  (package-with-python2 python-pyasn1-modules))
+
 (define-public python2-ipaddress
   (package
     (name "python2-ipaddress")
@@ -6622,3 +6700,557 @@ the standard library.")
 
 (define-public python2-contextlib2
   (package-with-python2 python-contextlib2))
+
+(define-public python-texttable
+  (package
+    (name "python-texttable")
+    (version "0.8.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "texttable" version))
+       (sha256
+        (base32
+         "0bkhs4dx9s6g7fpb969hygq56hyz4ncfamlynw72s0n6nqfbd1w5"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f)) ; no tests
+    (home-page "https://github.com/foutaise/texttable/")
+    (synopsis "Python module for creating simple ASCII tables")
+    (description "Texttable is a Python module for creating simple ASCII
+tables.")
+    (license lgpl2.1+)))
+
+(define-public python2-texttable
+  (package-with-python2 python-texttable))
+
+(define-public python-websocket-client
+  (package
+    (name "python-websocket-client")
+    (version "0.34.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://pypi.python.org/packages/source/w"
+                           "/websocket-client/websocket_client-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1prdx6d49f1cff17kzj15bnz09palfdgc1m5dkq9jd4mr90n4ak8"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-six" ,python-six))) ; for tests
+    (inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/liris/websocket-client")
+    (synopsis "WebSocket client for Python")
+    (description "The Websocket-client module provides the low level APIs for
+WebSocket usage in Python programs.")
+    (license lgpl2.1+)))
+
+(define-public python2-websocket-client
+  (package-with-python2 python-websocket-client))
+
+(define-public python-atomicwrites
+  (package
+    (name "python-atomicwrites")
+    (version "0.1.8")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "atomicwrites" version))
+             (sha256
+              (base32
+               "13nwk0gw0yb61pnf5vxs3fvhav6q3zrf08x9ggc93bnk5fsssx1j"))))
+    (build-system python-build-system)
+    (synopsis "Atomic file writes in Python")
+    (description "Library for atomic file writes using platform dependent tools
+for atomic filesystem operations.")
+    (home-page "https://github.com/untitaker/python-atomicwrites")
+    (license license:expat)))
+
+(define-public python-requests-toolbelt
+  (package
+    (name "python-requests-toolbelt")
+    (version "0.5.0")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "requests-toolbelt" version))
+             (sha256
+              (base32
+               "1kbms1s52dhb98vbpaprr15b0ijdbqp500lpfsyjccpd8cjkyngk"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-requests" ,python-requests)))
+    (synopsis "Extensions to python-requests")
+    (description "This is a toolbelt of useful classes and functions to be used
+with python-requests.")
+    (home-page "https://github.com/sigmavirus24/requests-toolbelt")
+    (license asl2.0)))
+
+(define-public python-click-threading
+  (package
+    (name "python-click-threading")
+    (version "0.1.2")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "click-threading" version))
+             (sha256
+              (base32
+               "0jmrv4334lfxa2ss53c06dafdwqbk1pb3ihd26izn5igw1bm8145"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-click" ,python-click)))
+    (synopsis "Utilities for multithreading in Click")
+    (description "This package provides utilities for multithreading in Click
+applications.")
+    (home-page "https://github.com/click-contrib/click-threading")
+    (license license:expat)))
+
+(define-public python-click-log
+  (package
+    (name "python-click-log")
+    (version "0.1.1")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "click-log" version))
+             (sha256
+              (base32
+               "1z3jdwjmwax159zrnyx830xa968rfqrpkm04ad5xqyh0269ydiqb"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-click" ,python-click)))
+    (synopsis "Logging for click applications")
+    (description "This package provides a Python library for logging Click
+applications.")
+    (home-page "https://github.com/click-contrib/click-log")
+    (license license:expat)))
+
+(define-public python-apipkg
+  (package
+    (name "python-apipkg")
+    (version "1.4")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "apipkg" version))
+             (sha256
+              (base32
+               "1iks5701qnp3dlr3q1d9qm68y2plp2m029irhpz92a44psfkjf1f"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (propagated-inputs
+     `(("python-pytest" ,python-pytest)))
+    (synopsis "Namespace control and lazy-import mechanism")
+    (description "With apipkg you can control the exported namespace of a Python
+package and greatly reduce the number of imports for your users.  It is a small
+pure Python module that works on virtually all Python versions.")
+    (home-page "https://bitbucket.org/hpk42/apipkg")
+    (license license:expat)))
+
+(define-public python-execnet
+  (package
+    (name "python-execnet")
+    (version "1.4.1")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "execnet" version))
+             (sha256
+              (base32
+               "1rpk1vyclhg911p3hql0m0nrpq7q7mysxnaaw6vs29cpa6kx8vgn"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (propagated-inputs
+     `(("python-apipkg" ,python-apipkg)))
+    (synopsis "Rapid multi-Python deployment")
+    (description "Execnet provides a share-nothing model with
+channel-send/receive communication for distributing execution across many
+Python interpreters across version, platform and network barriers.  It has a
+minimal and fast API targetting the following uses:
+@enumerate
+@item distribute tasks to (many) local or remote CPUs
+@item write and deploy hybrid multi-process applications
+@item write scripts to administer multiple environments
+@end enumerate")
+    (home-page "http://codespeak.net/execnet/")
+    (license license:expat)))
+
+;;; The software provided by this package was integrated into pytest 2.8.
+(define-public python-pytest-cache
+  (package
+    (name "python-pytest-cache")
+    (version "1.0")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "pytest-cache" version))
+             (sha256
+              (base32
+               "1a873fihw4rhshc722j4h6j7g3nj7xpgsna9hhg3zn6ksknnhx5y"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-execnet" ,python-execnet)))
+    (synopsis "Py.test plugin with mechanisms for caching across test runs")
+    (description "The pytest-cache plugin provides tools to rerun failures from
+the last py.test invocation.")
+    (home-page "https://bitbucket.org/hpk42/pytest-cache/")
+    (license license:expat)))
+
+(define-public python-pytest-localserver
+  (package
+    (name "python-pytest-localserver")
+    (version "0.3.4")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "pytest-localserver" version ".zip"))
+             (sha256
+              (base32
+               "050q505a7gnsz7vqidw0w5dvxjb2flzi7z734agpjzmsl85c2bcx"))))
+    (build-system python-build-system)
+    (arguments
+      `(#:phases (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "py.test" "--genscript=runtests.py"))
+             (zero? (system* "py.test")))))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (propagated-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-requests" ,python-requests)
+       ("python-six" ,python-six)
+       ("python-werkzeug" ,python-werkzeug)))
+    (synopsis "Py.test plugin to test server connections locally")
+    (description "Pytest-localserver is a plugin for the pytest testing
+framework which enables you to test server connections locally.")
+    (home-page "https://pypi.python.org/pypi/pytest-localserver")
+    (license license:expat)))
+
+(define-public python-wsgi-intercept
+  (package
+    (name "python-wsgi-intercept")
+    (version "0.10.3")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "wsgi_intercept" version))
+             (sha256
+              (base32
+               "0xyfchacywb1mql84270mcidsqc5ssyspd18yacjk82x2xc68h0r"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (propagated-inputs
+     `(("python-httplib2" ,python-httplib2)
+       ("python-requests" ,python-requests)))
+    (synopsis "Puts a WSGI application in place of a real URI for testing")
+    (description "Wsgi_intercept installs a WSGI application in place of a real
+URI for testing.  Testing a WSGI application normally involves starting a
+server at a local host and port, then pointing your test code to that address.
+Instead, this library lets you intercept calls to any specific host/port
+combination and redirect them into a WSGI application importable by your test
+program.  Thus, you can avoid spawning multiple processes or threads to test
+your Web app.")
+    (home-page "https://github.com/cdent/wsgi-intercept")
+    (license license:expat)))
+
+(define-public python-pytest-xprocess
+  (package
+    (name "python-pytest-xprocess")
+    (version "0.9.1")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "pytest-xprocess" version))
+             (sha256
+              (base32
+               "17zlql1xqw3ywcgwwbqmw633aly99lab12hm02asr8awvg5603pp"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-psutil" ,python-psutil)))
+    (synopsis "Pytest plugin to manage external processes across test runs")
+    (description "Pytest-xprocess is an experimental py.test plugin for managing
+processes across test runs.")
+    (home-page "https://bitbucket.org/pytest-dev/pytest-xprocess")
+    (license license:expat)))
+
+(define-public python-icalendar
+  (package
+    (name "python-icalendar")
+    (version "3.9.1")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "icalendar" version))
+             (sha256
+              (base32
+               "0fhrczdj3jxy5bvswphp3vys7vwv5c9bpwg7asykqwa3z6253q6q"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-dateutil-2" ,python-dateutil-2)
+       ("python-pytz" ,python-pytz)))
+    (synopsis "Python library for parsing iCalendar files")
+    (description "The icalendar package is a parser/generator of iCalendar
+files for use with Python.")
+    (home-page "https://github.com/collective/icalendar")
+    (license bsd-2)))
+
+(define-public python-sphinxcontrib-newsfeed
+  (package
+    (name "python-sphinxcontrib-newsfeed")
+    (version "0.1.4")
+    (source (origin
+             (method url-fetch)
+             (uri (pypi-uri "sphinxcontrib-newsfeed" version))
+             (sha256
+              (base32
+               "1d7gam3mn8v4in4p16yn3v10vps7nnaz6ilw99j4klij39dqd37p"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-docutils" ,python-docutils)
+       ("python-sphinx" ,python-sphinx)))
+    (synopsis "News Feed extension for Sphinx")
+    (description "Sphinxcontrib-newsfeed is an extension for adding a simple
+Blog, News or Announcements section to a Sphinx website.")
+    (home-page "https://bitbucket.org/prometheus/sphinxcontrib-newsfeed")
+    (license bsd-2)))
+
+(define-public python-args
+  (package
+    (name "python-args")
+    (version "0.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "args" version))
+              (sha256
+               (base32
+                "057qzi46h5dmxdqknsbrssn78lmqjlnm624iqdhrnpk26zcbi1d7"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/kennethreitz/args")
+    (synopsis "Command-line argument parser")
+    (description
+     "This library provides a Python module to parse command-line arguments.")
+    (license bsd-3)))
+
+(define-public python2-args
+  (package-with-python2 python-args))
+
+(define-public python-clint
+  (package
+    (name "python-clint")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "clint" version))
+              (sha256
+               (base32
+                "1an5lkkqk1zha47198p42ji3m94xmzx1a03dn7866m87n4r4q8h5"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-args" ,python-args)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/kennethreitz/clint")
+    (synopsis "Command-line interface tools")
+    (description
+     "Clint is a Python module filled with a set of tools for developing
+command-line applications, including tools for colored and indented
+output, progress bar display, and pipes.")
+    (license isc)))
+
+(define-public python2-clint
+  (package-with-python2 python-clint))
+
+(define-public python-astor
+  (package
+    (name "python-astor")
+    (version "0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "astor" version))
+              (sha256
+               (base32
+                "1fdafq5hkis1fxqlmhw0sn44zp2ar46nxhbc22cvwg7hsd8z5gsa"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/berkerpeksag/astor")
+    (synopsis "Read and write Python ASTs")
+    (description
+     "Astor is designed to allow easy manipulation of Python source via the
+Abstract Syntax Tree.")
+    (license bsd-3)))
+
+(define-public python2-astor
+  (package-with-python2 python-astor))
+
+(define-public python-rply
+  (package
+    (name "python-rply")
+    (version "0.7.4")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "rply" version))
+              (sha256
+               (base32
+                "12rp1d9ba7nvd5rhaxi6xzx1rm67r1k1ylsrkzhpwnphqpb06cvj"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-appdirs" ,python-appdirs)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/alex/rply")
+    (synopsis "Parser generator for Python")
+    (description
+     "This package provides a pure Python based parser generator, that also
+works with RPython.  It is a more-or-less direct port of David Bazzley's PLY,
+with a new public API, and RPython support.")
+    (license bsd-3)))
+
+(define-public python2-rply
+  (package-with-python2 python-rply))
+
+(define-public python-hy
+  (package
+    (name "python-hy")
+    (version "0.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "hy" version))
+              (sha256
+               (base32
+                "1msqv747iz12r73mz4qvsmlwkddwjvrahlrk7ysrcz07h7dsscxs"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-astor" ,python-astor)
+       ("python-clint" ,python-clint)
+       ("python-rply" ,python-rply)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "http://hylang.org/")
+    (synopsis "Lisp frontend to Python")
+    (description
+     "Hy is a dialect of Lisp that's embedded in Python.  Since Hy transforms
+its Lisp code into the Python Abstract Syntax Tree, you have the whole world of
+Python at your fingertips, in Lisp form.")
+    (license license:expat)))
+
+(define-public python2-hy
+  (package-with-python2 python-hy))
+
+(define-public python-rauth
+  (package
+    (name "python-rauth")
+    (version "0.7.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "rauth" version))
+        (sha256
+         (base32
+          "00pq7zw429hhza9c0qzxiqp77m653jv09z92nralnmzwdf6pzicf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:test-target "check"))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (propagated-inputs
+     `(("python-requests" ,python-requests)))
+    (home-page "https://github.com/litl/rauth")
+    (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
+    (description
+     "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly.  It also
+provides service wrappers for convenient connection initialization and
+authenticated session objects providing things like keep-alive.")
+    (license license:expat)))
+
+(define-public python2-rauth
+  (let ((rauth (package-with-python2 python-rauth)))
+    (package (inherit rauth)
+      (propagated-inputs `(("python2-requests" ,python2-requests)))
+      (native-inputs
+       `(("python2-unittest2", python2-unittest2)
+         ,@(package-native-inputs rauth))))))
+
+(define-public python2-functools32
+  (package
+    (name "python2-functools32")
+    (version "3.2.3-2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "functools32" version))
+        (sha256
+         (base32
+          "0v8ya0b58x47wp216n1zamimv4iw57cxz3xxhzix52jkw3xks9gn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2
+       #:tests? #f)) ; no test target
+    (native-inputs
+     `(("python2-setuptools" ,python2-setuptools)))
+    (home-page "https://github.com/MiCHiLU/python-functools32")
+    (synopsis
+     "Backport of the functools module from Python 3.2.3")
+    (description
+     "This package is a backport of the @code{functools} module from Python
+3.2.3 for use with older versions of Python and PyPy.")
+    (license license:expat)))
+
+(define-public python-futures
+  (package
+    (name "python-futures")
+    (version "3.0.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "futures" version))
+        (sha256
+         (base32
+          "1vcb34dqhzkhbq1957vdjszhhm5y3j9ba88dgwhqx2zynhmk9qig"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/agronholm/pythonfutures")
+    (synopsis
+     "Backport of the concurrent.futures package from Python 3.2")
+    (description
+     "The concurrent.futures module provides a high-level interface for
+asynchronously executing callables.  This package backports the
+concurrent.futures package from Python 3.2")
+    (license bsd-3)))
+
+(define-public python2-futures
+  (package-with-python2 python-futures))
+
+(define-public python-urllib3
+  (package
+    (name "python-urllib3")
+    (version "1.13.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "urllib3" version))
+        (sha256
+         (base32
+          "10rrbr6c6k7j5dvfsyj4b2gsgxg9gggnn708qixf6ll57xqivfkf"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ;; some packages for tests
+       ("python-nose" ,python-nose)
+       ("python-mock" ,python-mock)
+       ("python-tornado" ,python-tornado)))
+    (propagated-inputs
+     `(;; packages for https security
+       ("python-certifi" ,python-certifi)
+       ("python-ndg-httpsclient" ,python-ndg-httpsclient)
+       ("python-pyasn1" ,python-pyasn1)
+       ("python-pyopenssl" ,python-pyopenssl)))
+    (home-page "http://urllib3.readthedocs.org/")
+    (synopsis "HTTP library with thread-safe connection pooling")
+    (description
+     "Urllib3 supports features left out of urllib and urllib2 libraries.  It
+can reuse the same socket connection for multiple requests, it can POST files,
+supports url redirection and retries, and also gzip and deflate decoding.")
+    (license license:expat)))
+
+(define-public python2-urllib3
+  (package-with-python2 python-urllib3))
diff --git a/gnu/packages/rsync.scm b/gnu/packages/rsync.scm
index 5e98d84835..dba4e89a05 100644
--- a/gnu/packages/rsync.scm
+++ b/gnu/packages/rsync.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,14 +31,14 @@
 (define-public rsync
   (package
    (name "rsync")
-   (version "3.1.0")
+   (version "3.1.2")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://rsync.samba.org/ftp/rsync/src/rsync-"
                                 version ".tar.gz"))
             (sha256
              (base32
-              "0kirw8wglqvwi1v8bwxp373g03xg857h59j5k3mmgff9gzvj7jl1"))))
+              "1hm1q04hz15509f0p9bflw4d6jzfvpm1d36dxjwihk1wzakn5ypc"))))
    (build-system gnu-build-system)
    (inputs `(("perl" ,perl)
              ("acl" ,acl)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index fd36f8d694..6e5553bd30 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -2978,3 +2978,67 @@ methods, a @code{Mixin} module for including color methods, a @code{Logger}, a
 device.")
     (home-page "http://rubyworks.github.io/ansi")
     (license license:bsd-2)))
+
+(define-public ruby-systemu
+  (package
+    (name "ruby-systemu")
+    (version "2.6.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "systemu" version))
+       (sha256
+        (base32
+         "0gmkbakhfci5wnmbfx5i54f25j9zsvbw858yg3jjhfs5n4ad1xq1"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-version
+           (lambda _
+             (setenv "VERSION" ,version)
+             #t)))))
+    (synopsis "Capture of stdout/stderr and handling of child processes")
+    (description
+     "Systemu can be used on any platform to return status, stdout, and stderr
+of any command.  Unlike other methods like @code{open3} and @code{popen4}
+there is no danger of full pipes or threading issues hanging your process or
+subprocess.")
+    (home-page "https://github.com/ahoward/systemu")
+    (license license:ruby)))
+
+(define-public ruby-bio-commandeer
+  (package
+    (name "ruby-bio-commandeer")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bio-commandeer" version))
+       (sha256
+        (base32
+         "061jxa6km92qfwzl058r2gp8gfcsbyr7m643nw1pxvmjdswaf6ly"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; Run test without calling 'rake' so that jeweler is
+           ;; not required as an input.
+           (lambda _
+             (zero? (system* "rspec" "spec/bio-commandeer_spec.rb")))))))
+    (propagated-inputs
+     `(("ruby-bio-logger" ,ruby-bio-logger)
+       ("ruby-systemu" ,ruby-systemu)))
+    (native-inputs
+     `(("bundler" ,bundler)
+       ("ruby-rspec" ,ruby-rspec)))
+    (synopsis "Simplified running of shell commands from within Ruby")
+    (description
+     "Bio-commandeer provides an opinionated method of running shell commands
+from within Ruby.  The advantage of bio-commandeer over other methods of
+running external commands is that when something goes wrong, messages printed
+to the @code{STDOUT} and @code{STDERR} streams are reported, giving extra
+detail to ease debugging.")
+    (home-page "http://github.com/wwood/bioruby-commandeer")
+    (license license:expat)))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 76032f9b62..d4bf29cc20 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -1,6 +1,6 @@
 ;;; 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, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -111,7 +111,7 @@ a server that supports the SSH-2 protocol.")
 (define-public openssh
   (package
    (name "openssh")
-   (version "7.1p1")
+   (version "7.1p2")
    (source (origin
             (method url-fetch)
             (uri (let ((tail (string-append name "-" version ".tar.gz")))
@@ -122,7 +122,7 @@ a server that supports the SSH-2 protocol.")
                          (string-append "http://ftp2.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/"
                                         tail))))
             (sha256 (base32
-                     "0a44mnr8bvw41zg83xh4sb55d8nds29j95gxvxk5qg863lnns2pw"))))
+                     "1gbbvszz74lkc7b2mqr3ccgpm65zj0k5h7a2ssh0c7pjvhjg0xfx"))))
    (build-system gnu-build-system)
    (inputs `(("groff" ,groff)
              ("openssl" ,openssl)
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 8bd87582ef..6466af11c0 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Vicente Vera Parra <vicentemvp@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -1676,6 +1676,8 @@ worker processes and collect and return the results on the master.")
                 "0s9kab5khk7daqf6nfp1wm1qnhkssnnwnymisfwyk3kz4q5maqfz"))))
     (properties
      `((upstream-name . "SparseM")))
+    (inputs
+     `(("gfortran" ,gfortran)))
     (build-system r-build-system)
     (home-page "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html")
     (synopsis "Sparse linear algebra")
diff --git a/gnu/packages/sxiv.scm b/gnu/packages/sxiv.scm
index ee5e822c8d..8a81d48f3e 100644
--- a/gnu/packages/sxiv.scm
+++ b/gnu/packages/sxiv.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +28,7 @@
 (define-public sxiv
   (package
     (name "sxiv")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -37,7 +37,7 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "03hxy5ff7xbs15rhlbpgx8xmvmpjlffp0m4528975hg16sqa2c4s"))))
+                "0lxnd33gaw4drhdwbkk94wzrjyhh64d57jq2ps7ffmqgizg6hlwz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index c24c4683c7..1edf9f8d9c 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -56,6 +56,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages openstack)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -1028,3 +1029,33 @@ fetching updates) over a collection of version control repositories.  It
 supports a large number of version control systems: Git, Subversion,
 Mercurial, Bazaar, Darcs, CVS, Fossil, and Veracity.")
     (license gpl2+)))
+
+(define-public git-annex-remote-hubic
+  (package
+    (name "git-annex-remote-hubic")
+    (version "0.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/Schnouki/" name "/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "196g3jkaybjx11nbr51n0cjps3wjzb145ab76y717diqvvxp5v4r"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ;; for the tests
+       ("python-six" ,python-six)))
+    (propagated-inputs
+     `(("python-dateutil" ,python-dateutil-2)
+       ("python-futures" ,python-futures)
+       ("python-rauth" ,python-rauth)
+       ("python-swiftclient" ,python-swiftclient)))
+    (home-page "https://github.com/Schnouki/git-annex-remote-hubic/")
+    (synopsis "Use hubic as a git-annex remote")
+    (description
+     "This package allows you to use your hubic account as a \"special
+repository\" with git-annex.")
+    (license gpl3+)))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index b3ee98092c..12f10b9915 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Alex Vong <alexvong1995@gmail.com>
@@ -692,7 +692,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.14.0")
+    (version "0.15.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -700,14 +700,14 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
                     ".tar.gz"))
               (sha256
                (base32
-                "0cqjwl0xyg0sv1jflipfkvqjg32y0kqfh4gc3lyhqgv0hgs3fa84"))
+                "1p0b83048g66icpz5n66v3k4ldr1z0rmg5d2rr7kcbspm1xj2cbx"))
               (file-name (string-append name "-" version ".tar.gz"))))
     (build-system waf-build-system)
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("python-docutils" ,python-docutils)))
-    ;; Missing features: libguess, Wayland, VDPAU, V4L2
+    ;; Missing features: libguess, Wayland, V4L2
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("enca" ,enca)
@@ -724,6 +724,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
        ("libdvdnav" ,libdvdnav)
        ("libjpeg" ,libjpeg)
        ("libva" ,libva)
+       ("libvdpau" ,libvdpau)
        ("libx11" ,libx11)
        ("libxext" ,libxext)
        ("libxinerama" ,libxinerama)
@@ -754,6 +755,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
           (lambda* (#:key inputs #:allow-other-keys)
             (copy-file (assoc-ref inputs "waf") "waf")
             (setenv "CC" "gcc"))))
+       #:configure-flags (list "--enable-gpl3" "--enable-zsh-comp")
        ;; No check function defined.
        #:tests? #f))
     (home-page "http://mpv.io/")
@@ -1299,3 +1301,53 @@ from many input sources such as webcams, X11 (for screencasting), PulseAudio,
 and JACK.")
     (home-page "https://obsproject.com")
     (license license:gpl2+)))
+
+(define-public libvdpau
+  (package
+    (name "libvdpau")
+    (version "1.1.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://secure.freedesktop.org/~aplattner/vdpau/"
+                            name "-" version ".tar.bz2"))
+        (sha256
+         (base32
+          "0dnpb0yh7v6rvckx82kxg045rd9rbsw25wjv7ad5n8h94s9h2yl5"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("dri2proto" ,dri2proto)
+       ("libx11" ,libx11 "out")
+       ("libxext" ,libxext)))
+    (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
+    (synopsis "Video Decode and Presentation API")
+    (description "VDPAU is the Video Decode and Presentation API for UNIX.  It
+provides an interface to video decode acceleration and presentation hardware
+present in modern GPUs.")
+    (license (license:x11-style "file://COPYING"))))
+
+(define-public vdpauinfo
+  (package
+    (name "vdpauinfo")
+    (version "1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://secure.freedesktop.org/~aplattner/vdpau/"
+                            name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "1i2b0k9h8r0lnxlrkgqzmrjakgaw3f1ygqqwzx8w6676g85rcm20"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("libx11" ,libx11)))
+    (propagated-inputs
+     `(("libvdpau" ,libvdpau)))
+    (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
+    (synopsis "Tool to query the capabilities of a VDPAU implementation")
+    (description "Vdpauinfo is a tool to query the capabilities of a VDPAU
+implementation.")
+    (license (license:x11-style "file://COPYING"))))
diff --git a/gnu/system.scm b/gnu/system.scm
index 4aedb7ee36..ee0280c069 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -88,6 +88,14 @@
             operating-system-locale-directory
             operating-system-boot-script
 
+            boot-parameters
+            boot-parameters?
+            boot-parameters-label
+            boot-parameters-root-device
+            boot-parameters-kernel
+            boot-parameters-kernel-arguments
+            read-boot-parameters
+
             local-host-aliases
             %setuid-programs
             %base-packages
@@ -709,4 +717,37 @@ this file is the reconstruction of GRUB menu entries for old configurations."
                                     #$(operating-system-kernel-arguments os))
                                    (initrd #$initrd)))))
 
+
+;;;
+;;; Boot parameters
+;;;
+
+(define-record-type* <boot-parameters>
+  boot-parameters make-boot-parameters boot-parameters?
+  (label            boot-parameters-label)
+  (root-device      boot-parameters-root-device)
+  (kernel           boot-parameters-kernel)
+  (kernel-arguments boot-parameters-kernel-arguments))
+
+(define (read-boot-parameters port)
+  "Read boot parameters from PORT and return the corresponding
+<boot-parameters> object or #f if the format is unrecognized."
+  (match (read port)
+    (('boot-parameters ('version 0)
+                       ('label label) ('root-device root)
+                       ('kernel linux)
+                       rest ...)
+     (boot-parameters
+      (label label)
+      (root-device root)
+      (kernel linux)
+      (kernel-arguments
+       (match (assq 'kernel-arguments rest)
+         ((_ args) args)
+         (#f       '())))))                       ;the old format
+    (x                                            ;unsupported format
+     (warning (_ "unrecognized boot parameters for '~a'~%")
+              system)
+     #f)))
+
 ;;; system.scm ends here
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 6130e020c8..b1ea637de9 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -179,7 +179,7 @@ loaded at boot time in the order in which they appear."
     ;; Modules added to the initrd and loaded from the initrd.
     `("ahci"                                  ;for SATA controllers
       "usb-storage" "uas"                     ;for the installation image etc.
-      "usbkbd" "usbhid"                       ;USB keyboards, for debugging
+      "usbhid"                                ;USB keyboards, for debugging
       "dm-crypt" "xts"                        ;for encrypted root partitions
       ,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system))
             '("pata_acpi" "pata_atiixp"    ;for ATA controllers