summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi2
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/dejagnu.scm6
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/emacs.scm4
-rw-r--r--gnu/packages/enlightenment.scm8
-rw-r--r--gnu/packages/geo.scm34
-rw-r--r--gnu/packages/glib.scm21
-rw-r--r--gnu/packages/gnome.scm42
-rw-r--r--gnu/packages/image-viewers.scm6
-rw-r--r--gnu/packages/imagemagick.scm6
-rw-r--r--gnu/packages/java.scm701
-rw-r--r--gnu/packages/maths.scm18
-rw-r--r--gnu/packages/patches/java-powermock-fix-java-files.patch178
-rw-r--r--gnu/packages/perl.scm22
-rw-r--r--gnu/packages/tls.scm28
-rw-r--r--gnu/packages/upnp.scm4
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/packages/video.scm11
-rw-r--r--gnu/system/shadow.scm14
-rw-r--r--gnu/tests/ssh.scm28
21 files changed, 1058 insertions, 86 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index e4ba15cd2e..983d0e52e4 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -6686,7 +6686,7 @@ dependencies.
 @item bag-with-origins
 Similar to @code{bag}, but also showing origins and their dependencies.
 
-@item derivations
+@item derivation
 This is the most detailed representation: It shows the DAG of
 derivations (@pxref{Derivations}) and plain store items.  Compared to
 the above representation, many additional nodes are visible, including
diff --git a/gnu/local.mk b/gnu/local.mk
index 1bd3f55735..01f2f33bea 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -737,6 +737,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
+  %D%/packages/patches/java-powermock-fix-java-files.patch		\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jbig2dec-CVE-2016-9601.patch		\
   %D%/packages/patches/jbig2dec-CVE-2017-7885.patch		\
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
index ba34e36c6a..05825bad8f 100644
--- a/gnu/packages/dejagnu.scm
+++ b/gnu/packages/dejagnu.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flasher.co.il>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flasher.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,7 +27,7 @@
 (define-public dejagnu
   (package
     (name "dejagnu")
-    (version "1.6")
+    (version "1.6.1")
     (source
      (origin
       (method url-fetch)
@@ -35,7 +35,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0qypaakd2065jgpcv84zcsibl8gph3p334gb2qdmhsrbirhlmdh0"))))
+        "14hnq1mh91vqprc43xdy4f15sycw6fbajrh7zi6cw2kyg6xjhnxz"))))
     (build-system gnu-build-system)
     (inputs `(("expect" ,expect)))
     (arguments
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index e6afc04208..b06cde71b4 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -483,14 +483,14 @@ Extensions} (DNSSEC).")
 (define-public knot
   (package
     (name "knot")
-    (version "2.6.0")
+    (version "2.6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://secure.nic.cz/files/knot-dns/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1zc3ybhcxgbysyy68kbmndh6xzy4jnr5iikyrf9s2sxzs1hlkq38"))
+                "1qs1rqfir0nxi0a0dcg60sbbr99hyxk8y1xd7j7jd13l9idx84rh"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index ad96093c3f..52103e2edf 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -3966,7 +3966,7 @@ for search-based navigation of buffers.")
     (license license:gpl3+)))
 
 (define-public emacs-helm-make
-  (let ((commit "786104ac0c3cf4fe5b53f841eb9fe10bda2e4031")
+  (let ((commit "21c1bfa01b16b0d656f2b8a0dbb5bc8d47a7641b")
         (revision "1"))
     (package
       (name "emacs-helm-make")
@@ -3980,7 +3980,7 @@ for search-based navigation of buffers.")
          (file-name (string-append name "-" version "-checkout"))
          (sha256
           (base32
-           "0qdfk0p2j8jah7m0ngy2mm7775cn779m3a84yll86wqc74g331qs"))))
+           "11vzrp63zdc67fg4d0y1alk8z9019sqslh2bd7ispk37s86dlbfw"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-helm" ,emacs-helm)
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index e1265cfcf7..b4ff4c3ddc 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -59,7 +59,7 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.20.4")
+    (version "1.20.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -67,7 +67,7 @@
                     version ".tar.xz"))
               (sha256
                (base32
-                "1jxha61gsil6hs9zb72zsyh3gmdipvfnlc9v3palb2bm0b23aq9i"))))
+                "07624c71l9d1jx1zvdhwkr1bgb1n7i0i5hyg6579zdwl3jw6jpns"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -255,7 +255,7 @@ Libraries with some extra bells and whistles.")
 (define-public enlightenment
   (package
     (name "enlightenment")
-    (version "0.21.9")
+    (version "0.22.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -263,7 +263,7 @@ Libraries with some extra bells and whistles.")
                               name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0w5f3707hyfc20i6xqh4jlr5p2yhy1z794061mjsz2rp4w00qmpb"))))
+                "0xmrvryr35idd7fyqgshfhvy2053bs3vwrxbx681pi6rgpdvjghv"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-mount-eeze")
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index d8d5490f3e..7bf1562ba0 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -75,7 +75,7 @@ topology functions.")
 (define-public gnome-maps
   (package
     (name "gnome-maps")
-    (version "3.24.3")
+    (version "3.26.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -83,30 +83,34 @@ topology functions.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1mnhcrawdp6fyqylh0m8l259xdd7pqwibrjyl54rmsvnm8vfrwsy"))))
+                "0l40l7m9dyphvasiq1jxrn6ivavs1xwzn0bzz2x1z7x73955q783"))))
     (build-system glib-or-gtk-build-system)
     (arguments
-     `(#:configure-flags ; Ensure that geoclue is referred to by output.
+     `(#:configure-flags ;; Ensure that geoclue is referred to by output.
        (list (string-append "LDFLAGS=-L"
                             (assoc-ref %build-inputs "geoclue") "/lib")
              (string-append "CFLAGS=-I"
                             (assoc-ref %build-inputs "geoclue") "/include"))
        #:phases
        (modify-phases %standard-phases
-         (add-after
-          'install 'wrap
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
-                  (goa-path (string-append
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
+                   (goa-path (string-append
                               (assoc-ref inputs "gnome-online-accounts")
-                              "/lib")))
-              (wrap-program (string-append out "/bin/gnome-maps")
-               `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
+                              "/lib"))
+                   (webkitgtk-path (string-append
+                                    (assoc-ref inputs "webkitgtk")
+                                    "/lib")))
+               (wrap-program (string-append out "/bin/gnome-maps")
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
 
-               ;; There seems to be no way to embed the path of libgoa-1.0.so.0.
-               `("LD_LIBRARY_PATH" ":" prefix (,goa-path)))
-              #t))))))
+                 ;; There seems to be no way to embed the path of
+                 ;; libgoa-1.0.so.0, libwebkit2gtk-4.0.so.37 and
+                 ;; libjavascriptcoregtk-4.0.so.18.
+                 `("LD_LIBRARY_PATH" ":" prefix (,goa-path ,webkitgtk-path)))
+               #t))))))
     (native-inputs
      `(("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index ffa008d612..6cf235960c 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -391,29 +391,28 @@ The intltool collection can be used to do these things:
 (define itstool
   (package
     (name "itstool")
-    (version "2.0.2")
+    (version "2.0.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://files.itstool.org/itstool/itstool-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0fh34wi52i0qikgvlmrcpf1vx6gc1xqdad4539l4d9hikfsrz45z"))))
+               "0q7b4qrc758zfx3adsgvz0r93swdbxjr42w37rahngm33nshihlp"))))
     (build-system gnu-build-system)
     (inputs
      `(("libxml2" ,libxml2)
-       ("python2-libxml2" ,python2-libxml2)
-       ("python-2" ,python-2)))
+       ("python-libxml2" ,python-libxml2)
+       ("python" ,python)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after
-          'install 'wrap-program
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let ((prog (string-append (assoc-ref outputs "out")
-                                       "/bin/itstool")))
-              (wrap-program prog
-                `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))))))))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((prog (string-append (assoc-ref outputs "out")
+                                        "/bin/itstool")))
+               (wrap-program prog
+                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))))))))
     (home-page "http://www.itstool.org")
     (synopsis "Tool to translate XML documents with PO files")
     (description
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 2ebbd29565..95ba7af240 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -2051,7 +2051,7 @@ editors, IDEs, etc.")
   (package
     (inherit vte)
     (name "vte-ng")
-    (version "0.50.1.a")
+    (version "0.50.2.a")
     (native-inputs
      `(("gtk-doc" ,gtk-doc)
        ("gperf" ,gperf)
@@ -2066,7 +2066,7 @@ editors, IDEs, etc.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1r70jysdrc7r1vyn3mikpc8hh7rm4lpr0psakj8yssy11p451pja"))))
+                "0sv666ilid916ja6gw2d376nyyy66gvhsds8ans02x4b7gagj5sx"))))
     (arguments
       `(#:configure-flags '("CXXFLAGS=-Wformat=0")
         #:phases (modify-phases %standard-phases
@@ -2578,7 +2578,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public five-or-more
   (package
     (name "five-or-more")
-    (version "3.22.2")
+    (version "3.26.0")
     (source
      (origin
        (method url-fetch)
@@ -2587,7 +2587,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1b26afyjr26wqy5j008gzsi3hpblbmabh0192lx6414lml1qxkxs"))))
+         "0wkp08xsqr9p9cgdfghi424diajs016b2h4bsfcr5y9xc3rgf93w"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -2609,7 +2609,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
 (define-public gnome-mines
   (package
     (name "gnome-mines")
-    (version "3.24.0")
+    (version "3.26.0")
     (source
      (origin
        (method url-fetch)
@@ -2618,7 +2618,7 @@ and other secrets.  It communicates with the \"Secret Service\" using DBus.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1xh2as2xmh7gx45gpnl0fh9xjpvyyn3m84qgv41kyp2s4clsyqz6"))))
+         "1sfxdvns8nppdagnhpd9vd7n77sk5rdji3kdqnc78c2p1npiw11b"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -2934,7 +2934,7 @@ service via the system message bus.")
 (define-public libgweather
   (package
     (name "libgweather")
-    (version "3.24.1")
+    (version "3.26.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -2942,7 +2942,7 @@ service via the system message bus.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0g35xfcw9vh3sfff42blk9ksrlmkrjmj46h3ad0sqgdn6xh329qj"))))
+                "0vkbc8rvmrlfiws844izxfl01r6l9p6agf8vvgszzkry1gfbm12v"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -2957,12 +2957,6 @@ service via the system message bus.")
                (("/usr/share/zoneinfo/zone.tab")
                 (string-append (assoc-ref inputs "tzdata")
                                "/share/zoneinfo/zone.tab")))
-
-             ;; 'Asia/Rangoon' was renamed in tzdata-2016:
-             ;; <https://github.com/eggert/tz/commit/4368251ebf11310a4aadccd1910daeac9080c501>.
-             (substitute* "data/Locations.xml"
-               (("Asia/Rangoon")
-                "Asia/Yangon"))
              #t))
          (replace 'install
            (lambda _
@@ -3089,7 +3083,7 @@ playlists in a variety of formats.")
 (define-public aisleriot
   (package
     (name "aisleriot")
-    (version "3.22.3")
+    (version "3.22.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3097,7 +3091,7 @@ playlists in a variety of formats.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "12bqbyiqn2dwknz7ndgwgqqqz993s1ynh8qb82sshr7fy4zw8qph"))))
+                "1yrldsf73rd5p51dsxgbx1hmrakq0x0jc2kl6y6pgaviswxfx3gy"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:configure-flags
@@ -4427,7 +4421,7 @@ share them with others via social networking and more.")
 (define-public file-roller
   (package
     (name "file-roller")
-    (version "3.26.1")
+    (version "3.26.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4435,7 +4429,7 @@ share them with others via social networking and more.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1bliwib59jrlfpdbpqc4rc3kzv4ns7pfyn8c28ananj3p34y9mgc"))))
+                "19d8pc5z2xzhnicgaysxmwx3ghwzl4cw8kygd6nsw69g3j77nrry"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -5807,7 +5801,7 @@ beautifying border effects.")
 (define-public dconf-editor
   (package
     (name "dconf-editor")
-    (version "3.26.1")
+    (version "3.26.2")
     (source
      (origin
        (method url-fetch)
@@ -5816,7 +5810,7 @@ beautifying border effects.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0agay5zbhjbfznlwk7n3gg5cn0c7ih4vnmah6kb6m969li120cs9"))))
+         "1lcarg8igsqpq4iv5834mf9kz4cmfhfw11bwy3x7v7f497z57d18"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:phases
@@ -6046,7 +6040,7 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
 (define-public gnome-clocks
   (package
     (name "gnome-clocks")
-    (version "3.26.0")
+    (version "3.26.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -6054,7 +6048,7 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "00a5bqi1hbyb9kbl4p393l1g6rddl2y6ljxjby9c5j3k1qka0c0g"))))
+                "1xqirnf7xkiv5vj3ng4slpyh50ihn625vhdgskfzx83a3pgxin1b"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t))
@@ -6118,7 +6112,7 @@ desktop.  It supports multiple calendars, month, week and year view.")
 (define-public gnome-todo
   (package
     (name "gnome-todo")
-    (version "3.26.1")
+    (version "3.26.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -6126,7 +6120,7 @@ desktop.  It supports multiple calendars, month, week and year view.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "13if2lg4r65v3z7h5y57qv4iqz9ihjaml8bzvvihha7dffyr1lz4"))))
+                "106xx1w18pxjmj5k0k2qjzi6b3c3kaz7b5kyrpknykibnr401ff9"))))
     (build-system meson-build-system)
     (arguments
      '(#:glib-or-gtk? #t
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 95fb90fdab..9e93a97a9b 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -44,6 +44,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -66,9 +67,12 @@
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
-       #:tests? #f ;FIXME: Requires 'perl-test-command'.
+       #:test-target "test"
        #:make-flags
        (list "CC=gcc" (string-append "PREFIX=" (assoc-ref %outputs "out")))))
+    (native-inputs
+     `(("perl" ,perl)
+       ("perl-test-command" ,perl-test-command)))
     (inputs `(("imlib2" ,imlib2)
               ("curl" ,curl)
               ("libpng" ,libpng)
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index fabbd707ac..ea17ce9c86 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -46,14 +46,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.9-18")
+    (version "6.9.9-21")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1d70dvrgcasa3cla4c1dag4mw7vq4jk1nzbd604fk20l0l6xa78j"))))
+               "0241g3c207rawn61bz8rc5gz55k5mi2b0n3zlwa0jv9xczlkd6a9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
@@ -105,7 +105,7 @@
     (native-inputs `(("pkg-config" ,pkg-config)))
     (outputs '("out"
                "doc"))                          ; 26 MiB of HTML documentation
-    (home-page "http://www.imagemagick.org/")
+    (home-page "https://www.imagemagick.org/")
     (synopsis "Create, edit, compose, or convert bitmap images")
     (description
      "ImageMagick is a software suite to create, edit, compose, or convert
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 1fcd237d55..f155fdbabb 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2336,6 +2336,32 @@ package within @code{plexus-utils}, but has been separated in order to allow
 these two libraries to vary independently of one another.")
     (license license:asl2.0)))
 
+(define-public java-plexus-classworlds
+  (package
+    (name "java-plexus-classworlds")
+    (version "2.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/"
+                                  "plexus-classworlds/archive/plexus-classworlds-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1qm4p0rl8d82lzhsiwnviw11jnq44s0gflg78zq152xyyr2xmh8g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-classworlds.jar"
+       #:source-dir "src/main"
+       #:tests? #f));; FIXME: we need to generate some resources as in pom.xml
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://codehaus-plexus.github.io/plexus-classworlds/")
+    (synopsis "Java class loader framework")
+    (description "Plexus classworlds replaces the native ClassLoader mechanism
+of Java.  It is especially usefull for dynamic loading of application
+components.")
+    (license license:asl2.0)))
+
 (define-public java-asm
   (package
     (name "java-asm")
@@ -2539,6 +2565,74 @@ The jMock library
 @end itemize\n")
     (license license:bsd-3)))
 
+(define-public java-jmock
+  (package
+    (inherit java-jmock-1)
+    (name "java-jmock")
+    (version "2.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/jmock-developers/"
+                                  "jmock-library/archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "18650a9g8xffcsdb6w91pbswa7f40fp2sh6s3nclkclz5dbzq8f0"))))
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-junit" ,java-junit)))
+    (native-inputs
+     `(("cglib" ,java-cglib)))
+    (arguments
+     `(#:jar-name "java-jmock.jar"
+       #:source-dir "jmock/src/main/java"
+       #:test-dir "jmock/src/test"))))
+
+(define-public java-jmock-junit4
+  (package
+    (inherit java-jmock)
+    (name "java-jmock-junit4")
+    (arguments
+     `(#:jar-name "java-jmock-junit4.jar"
+       #:source-dir "jmock-junit4/src/main/java"
+       #:test-dir "jmock-junit4/src/test"))
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-jmock" ,java-jmock)
+       ("java-jumit" ,java-junit)))))
+
+(define-public java-jmock-legacy
+  (package
+    (inherit java-jmock)
+    (name "java-jmock-legacy")
+    (arguments
+     `(#:jar-name "java-jmock-legacy.jar"
+       #:source-dir "jmock-legacy/src/main/java"
+       #:test-dir "jmock-legacy/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'copy-tests
+           (lambda _
+             ;; This file is a dependancy of some tests
+             (let ((file "org/jmock/test/acceptance/PackageProtectedType.java"))
+               (copy-file (string-append "jmock/src/test/java/" file)
+                          (string-append "jmock-legacy/src/test/java/" file))
+               #t))))))
+    (inputs
+     `(("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-objenesis" ,java-objenesis)
+       ("java-cglib" ,java-cglib)
+       ("java-jmock" ,java-jmock)
+       ("java-asm" ,java-asm)
+       ("java-bsh" ,java-bsh)
+       ("java-junit" ,java-junit)))
+    (native-inputs
+     `(("java-jmock-junit4" ,java-jmock-junit4)))))
+
 (define-public java-hamcrest-all
   (package (inherit java-hamcrest-core)
     (name "java-hamcrest-all")
@@ -6248,3 +6342,610 @@ manipulation simple.  It is a class library for editing bytecodes in Java; it
 enables Java programs to define a new class at runtime and to modify a class
 file when the JVM loads it.")
     (license (list license:gpl2 license:cddl1.0)))); either gpl2 only or cddl.
+
+(define-public java-jcommander
+  (package
+    (name "java-jcommander")
+    (version "1.71")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/cbeust/jcommander/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1f5k2ckay6qjc3d3w3d7bc0p3cx3c7n6p6zxvw1kibqdr0q98wlx"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jcommander.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f; requires testng which depends on jcommander
+       #:source-dir "src/main/java"))
+    (home-page "http://jcommander.org")
+    (synopsis "Command line parameters parser")
+    (description "JCommander is a very small Java framework that makes it
+trivial to parse command line parameters.  Parameters are declared with
+annotations.")
+    (license license:asl2.0)))
+
+(define-public java-bsh
+  (package
+    (name "java-bsh")
+    (version "2.0b6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/beanshell/beanshell/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bawkxk6jyc75hxvzkpz689h73cn3f222m0ar3nvb0dal2b85kfv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "jarall"
+       #:test-target "junit-tests-all"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((share (string-append (assoc-ref outputs "out") "/share/java")))
+               (mkdir-p share)
+               (copy-file "dist/bsh-2.0b6.jar" (string-append share "/bsh-2.0b6.jar"))
+               #t))))))
+    (home-page "http://beanshell.org/")
+    (synopsis "Lightweight Scripting for Java")
+    (description "BeanShell is a small, free, embeddable Java source
+interpreter with object scripting language features, written in Java.
+BeanShell dynamically executes standard Java syntax and extends it with common
+scripting conveniences such as loose types, commands, and method closures like
+those in Perl and JavaScript.")
+    (license license:asl2.0)))
+
+(define-public java-fest-util
+  (package
+    (name "java-fest-util")
+    (version "1.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-util/"
+                                  "archive/fest-util-" version ".tar.gz"))
+              (sha256
+               (base32
+                "05g6hljz5mdaakk8d7g32klbhz9bdwp3qlj6rdaggdidxs3x1sb8"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-util.jar"
+       #:source-dir "src/main/java"))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/alexruiz/fest-util")
+    (synopsis "FEST common utilities")
+    (description "Common utilities used in all FEST module.")
+    (license license:asl2.0)))
+
+(define-public java-fest-test
+  (package
+    (name "java-fest-test")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-test/"
+                                  "archive/fest-test-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1rxfbw6l9vc65iy1x3fb617qc6y4w2k430pgf1mfbxfdlxbm0f7g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-test.jar"
+       #:source-dir "src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("junit" ,java-junit)))
+    (home-page "https://github.com/alexruiz/fest-test")
+    (synopsis "Common FEST testing infrastructure")
+    (description "Fest-test contains the common FEST testing infrastructure.")
+    (license license:asl2.0)))
+
+(define-public java-fest-assert
+  (package
+    (name "java-fest-assert")
+    (version "2.0M10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/alexruiz/fest-assert-2.x/"
+                                  "archive/fest-assert-core-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bi0iqavikzww6rxvz5jyg7y6bflv95s6ibryxx0xfcxrrw6i5lw"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-fest-assert.jar"
+       #:source-dir "src/main/java"
+       #:test-exclude
+       (list
+         "**/Abstract*.java"
+         "**/*BaseTest.java"
+         ;; Unable to set MockitoNamingPolicy on cglib generator which creates FastClasses
+         "**/MessageFormatter_format_Test.java"
+         "**/internal/*/*_assert*_Test.java")))
+    (inputs
+     `(("java-fest-util" ,java-fest-util)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-fest-test" ,java-fest-test)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-mockito" ,java-mockito-1)
+       ("java-cglib" ,java-cglib)
+       ("java-objenesis" ,java-objenesis)
+       ("java-asm" ,java-asm)))
+    (home-page "https://github.com/alexruiz/fest-assert-2.x")
+    (synopsis "FEST fluent assertions")
+    (description "FEST-Assert provides a fluent interface for assertions.")
+    (license license:asl2.0)))
+
+(define-public java-testng
+  (package
+    (name "java-testng")
+    (version "6.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/cbeust/testng/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "01j2x47wkj7n5w6gpcjfbwgc88ai5654b23lb87w7nsrj63m3by6"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8; java.util.function
+       #:jar-name "java-testng.jar"
+       #:source-dir "src/main/java"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "src/test/resources" "build/test-classes")
+             #t))
+         (replace 'check
+           (lambda _
+             (system* "ant" "compile-tests")
+             ;; we don't have groovy
+             (substitute* "src/test/resources/testng.xml"
+               (("<class name=\"test.groovy.GroovyTest\" />") ""))
+             (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                         ":build/classes"
+                                                         ":build/test-classes")
+                             "-Dtest.resources.dir=src/test/resources"
+                             "org.testng.TestNG" "src/test/resources/testng.xml")))))))
+    (propagated-inputs
+     `(("junit" ,java-junit)
+       ("java-jsr305" ,java-jsr305)
+       ("java-bsh" ,java-bsh)
+       ("java-jcommander" ,java-jcommander)
+       ("java-guice" ,java-guice)
+       ("snakeyaml" ,java-snakeyaml)))
+    (native-inputs
+     `(("guava" ,java-guava)
+       ("java-javax-inject" ,java-javax-inject)
+       ("java-hamcrest" ,java-hamcrest-all)
+       ("java-assertj" ,java-assertj)
+       ("cglib" ,java-cglib)
+       ("asm" ,java-asm)
+       ("aopalliance" ,java-aopalliance)))
+    (home-page "http://testng.org")
+    (synopsis "Testing framework")
+    (description "TestNG is a testing framework inspired from JUnit and NUnit
+but introducing some new functionalities that make it more powerful and easier
+to use.")
+    (license license:asl2.0)))
+
+(define-public java-jnacl
+  (package
+    (name "java-jnacl")
+    (version "0.1.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/neilalexander/jnacl")
+                     (commit "40c322e0a42637ab17cdf941138eeaf2494055f8")))
+              (sha256
+               (base32
+                "1pspnmp44q61a2q4bpslpxw86rfn8s5l0xgvyrikqgdvg7ypx597"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-jnacl.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-tests
+           (lambda _
+             (substitute* "src/test/java/com/neilalexander/jnacl/NaClTest.java"
+               (("assertions.Assertions") "assertions.api.Assertions"))
+             (substitute* "src/test/java/com/neilalexander/jnacl/NaclSecretBoxTest.java"
+               (("assertions.Assertions") "assertions.api.Assertions"))
+             #t))
+         (replace 'check
+           (lambda _
+             (system* "ant" "compile-tests")
+             (and
+               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                           ":build/classes"
+                                                           ":build/test-classes")
+                               "org.testng.TestNG" "-testclass"
+                               "build/test-classes/com/neilalexander/jnacl/NaclSecretBoxTest.class"))
+               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                           ":build/classes"
+                                                           ":build/test-classes")
+                               "org.testng.TestNG" "-testclass"
+                               "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))))
+    (native-inputs
+     `(("java-testng" ,java-testng)
+       ("java-fest-util" ,java-fest-util)
+       ("java-fest-assert" ,java-fest-assert)))
+    (home-page "https://github.com/neilalexander/jnacl")
+    (synopsis "Java implementation of NaCl")
+    (description "Pure Java implementation of the NaCl: Networking and
+Cryptography library.")
+    (license license:mpl2.0)))
+
+(define-public java-mvel2
+  (package
+    (name "java-mvel2")
+    (version "2.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/mvel/mvel/archive/mvel2-"
+                                  version ".Final.tar.gz"))
+              (sha256
+               (base32
+                "01ph5s9gm16l2qz58lg21w6fna7xmmrj7f9bzqr1jim7h9557d3z"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "mvel2.jar"
+       #:source-dir "src/main/java"
+       #:test-exclude
+       (list "**/Abstract*.java"
+             ;; Base class with no tests
+             "**/MVELThreadTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-bin
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/mvel2")
+                 (lambda _
+                   (display
+                     (string-append
+                       "#!" (which "bash") "\n"
+                       "if [ \"$#\" -ne \"2\" ]; then\n"
+                       "echo 'Usage: mvel2 <script> <out.dir>'\n"
+                       "exit\n"
+                       "fi\n"
+                       "java -Dout.dir=$2 -cp " (getenv "CLASSPATH")
+                       ":" (assoc-ref outputs "out") "/share/java/mvel2.jar"
+                       " org.mvel2.sh.Main $1"))))
+               (chmod (string-append bin "/mvel2") #o755))
+             #t)))))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/mvel/mvel")
+    (synopsis "MVFLEX Expression Language")
+    (description "MVEL has largely been inspired by Java syntax, but has some
+fundamental differences aimed at making it more efficient as an expression
+language, such as operators that directly support collection, array and string
+matching, as well as regular expressions.  MVEL is used to evaluate expressions
+written using Java syntax.
+
+In addition to the expression language, MVEL serves as a templating language for
+configuration and string construction.")
+    (license license:asl2.0)))
+
+(define-public java-lz4
+  (package
+    (name "java-lz4")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/lz4/lz4-java/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "096dm57p2lzqk28n0j2p52x2j3cvnsd2dfqn43n7vbwrkjsy7y54"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "lz4.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "src/java:src/java-unsafe"
+       #:tests? #f; FIXME: requires more dependencies
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'generate-source
+           (lambda _
+             (with-directory-excursion "src/build/source_templates"
+               (zero? (system* "mvel2" "../gen_sources.mvel" "../../java"))))))))
+    (native-inputs
+     `(("mvel" ,java-mvel2)))
+    (home-page "https://jpountz.github.io/lz4-java")
+    (synopsis "Compression algorithm")
+    (description "LZ4 - Java is a Java port of the popular lz4 compression
+algorithms and xxHash hashing algorithm.")
+    (license license:asl2.0)))
+
+(define-public java-bouncycastle-bcprov
+  (package
+    (name "java-bouncycastle-bcprov")
+    (version "1.58")
+    (source (origin
+              (method url-fetch)
+              (uri "https://bouncycastle.org/download/bcprov-jdk15on-158.tar.gz")
+              (sha256
+               (base32
+                "1hgkg96llbvgs8i0krwz2n0j7wlg6jfnq8w8kg0cc899j0wfmf3n"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "bouncycastle-bcprov.jar"
+       #:tests? #f; no tests
+       #:source-dir "src"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'unzip-src
+           (lambda _
+             (mkdir-p "src")
+             (with-directory-excursion "src"
+               (zero? (system* "unzip" "../src.zip"))))))))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("junit" ,java-junit)))
+    (home-page "https://www.bouncycastle.org")
+    (synopsis "Cryptographic library")
+    (description "Bouncy Castle Provider (bcprov) is a cryptographic library
+for the Java programming language.")
+    (license license:expat)))
+
+(define-public java-bouncycastle-bcpkix
+  (package
+    (name "java-bouncycastle-bcpkix")
+    (version "1.58")
+    (source (origin
+              (method url-fetch)
+              (uri "https://bouncycastle.org/download/bcpkix-jdk15on-158.tar.gz")
+              (sha256
+               (base32
+                "0is7qay02803s9f7lhnfcjlz61ni3hq5d7apg0iil7nbqkbfbcq2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "bouncycastle-bcpkix.jar"
+       #:tests? #f; no tests
+       #:source-dir "src"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'unzip-src
+           (lambda _
+             (mkdir-p "src")
+             (with-directory-excursion "src"
+               (zero? (system* "unzip" "../src.zip"))))))))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("junit" ,java-junit)))
+    (inputs
+     `(("bcprov" ,java-bouncycastle-bcprov)))
+    (home-page "https://www.bouncycastle.org")
+    (synopsis "Cryptographic library")
+    (description "Bouncy Castle Java API for PKIX, CMS, EAC, TSP, PKCS, OCSP,
+CMP, and CRMF.")
+    (license license:expat)))
+
+(define-public java-lmax-disruptor
+  (package
+    (name "java-lmax-disruptor")
+    (version "3.3.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/LMAX-Exchange/disruptor/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "17da2gwj5abnlsfgn2xqjk5lgzbg4vkb0hdv2dvc8r2fx4bi7w3g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-lmax-disruptor.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f)); tests hang
+    (inputs
+     `(("junit" ,java-junit)
+       ("java-hdrhistogram" ,java-hdrhistogram)
+       ("java-jmock" ,java-jmock)
+       ("java-jmock-legacy" ,java-jmock-legacy)
+       ("java-jmock-junit4" ,java-jmock-junit4)
+       ("java-hamcrest-all" ,java-hamcrest-all)))
+    (native-inputs
+     `(("cglib" ,java-cglib)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)))
+    (home-page "https://www.lmax.com/disruptor")
+    (synopsis "High performance inter-thread communication")
+    (description "LMAX Disruptor is a software pattern and software component
+for high performance inter-thread communication that avoids the need for
+message queues or resource locking.")
+    (license license:asl2.0)))
+
+(define-public java-xerial-core
+  (package
+    (name "java-xerial-core")
+    (version "2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/xerial/xerial-java/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0d3g863i41bgalpa4xr3vm1h140l091n8iwgq5qvby5yivns9y8d"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "xerial-core.jar"
+       #:source-dir "xerial-core/src/main/java"
+       #:test-dir "xerial-core/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "xerial-core/src/main/resources"
+                               "build/classes")
+             #t)))))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("hamcrest" ,java-hamcrest-core)))
+    (home-page "https://github.com/xerial/xerial-java")
+    (synopsis "Data managment libraries for Java")
+    (description "Xerial is a set of data management libraries for the Java
+programming language.  The ulitimate goal of the Xerial project is to manage
+everything as database, including class objects, text format data, data
+streams, etc.")
+    (license license:asl2.0)))
+
+(define-public java-powermock-reflect
+  (package
+    (name "java-powermock-reflect")
+    (version "1.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/powermock/powermock/"
+                                  "archive/powermock-" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sbgi5vqq7k72wzcdjb20s370vyd4hsbnx71pzb8ishml3gy7fwy"))
+              (patches
+                (search-patches "java-powermock-fix-java-files.patch"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-reflect.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-reflect/src/main/java"
+       #:test-dir "powermock-reflect/src/test"))
+    (inputs
+     `(("java-objenesis" ,java-objenesis)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("cglib" ,java-cglib)
+       ("asm" ,java-asm)
+       ("hamcrest" ,java-hamcrest-core)
+       ("assertj" ,java-assertj)))
+    (home-page "https://github.com/powermock/powermock")
+    (synopsis "Mock library extension framework")
+    (description "PowerMock is a framework that extends other mock libraries
+such as EasyMock with more powerful capabilities.  PowerMock uses a custom
+classloader and bytecode manipulation to enable mocking of static methods,
+constructors, final classes and methods, private methods, removal of static
+initializers and more.  By using a custom classloader no changes need to be
+done to the IDE or continuous integration servers which simplifies adoption.")
+    (license license:asl2.0)))
+
+(define-public java-powermock-core
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-core")
+    (arguments
+     `(#:jar-name "java-powermock-core.jar"
+       #:source-dir "powermock-core/src/main/java"
+       #:test-dir "powermock-core/src/test"
+       #:tests? #f; requires powermock-api
+       #:jdk ,icedtea-8))
+    (inputs
+     `(("reflect" ,java-powermock-reflect)
+       ("javassist" ,java-jboss-javassist)))
+    (native-inputs
+     `(("junit" ,java-junit)
+       ("assertj" ,java-assertj)
+       ("mockito" ,java-mockito-1)))))
+
+(define-public java-powermock-api-support
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-api-support")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-api-support.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-api/powermock-api-support/src/main/java"
+       #:tests? #f)); no tests
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("reflect" ,java-powermock-reflect)))))
+
+(define-public java-powermock-modules-junit4-common
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-modules-junit4-common")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-modules-junit4-common.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-modules/powermock-module-junit4-common/src/main/java"
+       #:test-dir "powermock-modules/powermock-module-junit4-common/src/test"))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("easymock" ,java-easymock)
+       ("reflect" ,java-powermock-reflect)
+       ("hamcrest" ,java-hamcrest-core)
+       ("cglib" ,java-cglib)))))
+
+(define-public java-powermock-modules-junit4
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-modules-junit4")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-modules-junit4.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-modules/powermock-module-junit4/src/main/java"
+       #:test-dir "powermock-modules/powermock-module-junit4/src/test"))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("reflect" ,java-powermock-reflect)
+       ("common" ,java-powermock-modules-junit4-common)
+       ("cglib" ,java-cglib)))
+    (native-inputs
+     `(("easymock" ,java-easymock)
+       ("hamcrest" ,java-hamcrest-core)
+       ("objenesis" ,java-objenesis)
+       ("asm" ,java-asm)
+       ("junit" ,java-junit)))))
+
+(define-public java-powermock-api-easymock
+  (package
+    (inherit java-powermock-reflect)
+    (name "java-powermock-api-easymock")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "java-powermock-api-easymock.jar"
+       #:jdk ,icedtea-8
+       #:source-dir "powermock-api/powermock-api-easymock/src/main/java"
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-file
+           (lambda _
+             ;; FIXME: This looks wrong, but it fixes a build error.
+             (with-directory-excursion "powermock-api/powermock-api-easymock"
+               (substitute* "src/main/java/org/powermock/api/easymock/PowerMock.java"
+                 (("classLoader instanceof MockClassLoader") "false")
+                 (("\\(\\(MockClassLoader\\) classLoader\\).*;") ";")))
+             #t)))))
+    (inputs
+     `(("core" ,java-powermock-core)
+       ("easymock" ,java-easymock)
+       ("reflect" ,java-powermock-reflect)
+       ("support" ,java-powermock-api-support)
+       ("cglib" ,java-cglib)))))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index c854a5a599..b0da39aee0 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -192,14 +192,28 @@ programming languages.")
 (define-public units
   (package
    (name "units")
-   (version "2.14")
+   (version "2.16")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/units/units-" version
                                 ".tar.gz"))
             (sha256 (base32
-                     "1s421bxm36akjsy3qzg6da1d1g20gh094ac2slqxipgkh8yqjcwx"))))
+                     "11hnp3gcmcc5kci2caxw4hs6m08h2mhqs3xzqq7iafx1ha2ggwyw"))))
    (build-system gnu-build-system)
+   (inputs
+    `(("readline" ,readline)
+      ("python" ,python-wrapper)        ;for 'units_cur' script
+      ("python-requests" ,python-requests)))
+   (arguments
+    `(#:phases (modify-phases %standard-phases
+                 (add-after 'install 'wrap-units_cur
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let* ((out (assoc-ref outputs "out"))
+                            (bin (string-append out "/bin")))
+                       (wrap-program (string-append bin "/units_cur")
+                         `("PYTHONPATH" ":" prefix
+                           ,(search-path-as-string->list (getenv "PYTHONPATH"))))
+                       #t))))))
    (synopsis "Conversion between thousands of scales")
    (description
     "GNU Units converts numeric quantities between units of measure.  It
diff --git a/gnu/packages/patches/java-powermock-fix-java-files.patch b/gnu/packages/patches/java-powermock-fix-java-files.patch
new file mode 100644
index 0000000000..6b95818138
--- /dev/null
+++ b/gnu/packages/patches/java-powermock-fix-java-files.patch
@@ -0,0 +1,178 @@
+This patch fixes build issues caused by the java compiler not finding the
+correct types on some statements.
+
+From 1ac84b58b4383fa118d98c35956d722d11cf449e Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Tue, 22 Aug 2017 20:40:27 +0200
+Subject: [PATCH] Fix java files.
+
+---
+ .../internal/impl/DelegatingPowerMockRunner.java   | 13 +++++++---
+ .../java/org/powermock/reflect/WhiteBoxTest.java   | 30 +++++++++++-----------
+ .../reflect/internal/proxy/ClassFactory.java       |  6 ++---
+ 3 files changed, 27 insertions(+), 22 deletions(-)
+
+diff --git a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
+index 301f854..caecbbd 100644
+--- a/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
++++ b/powermock-modules/powermock-module-junit4/src/main/java/org/powermock/modules/junit4/internal/impl/DelegatingPowerMockRunner.java
+@@ -98,12 +98,17 @@ implements PowerMockJUnitRunnerDelegate, Filterable {
+             @Override
+             public Runner call() throws Exception {
+                 try {
+-                    return Whitebox.invokeConstructor(
+-                            testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)
+-                            ? testClass.getAnnotation(PowerMockRunnerDelegate.class).value()
+-                            : PowerMockRunnerDelegate.DefaultJUnitRunner.class,
++                    if(testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)) {
++                        return Whitebox.invokeConstructor(
++                            testClass.getAnnotation(PowerMockRunnerDelegate.class).value(),
+                             new Class[] {Class.class},
+                             new Object[] {testClass});
++                    } else {
++                        return Whitebox.invokeConstructor(
++                            PowerMockRunnerDelegate.DefaultJUnitRunner.class,
++                            new Class[] {Class.class},
++                            new Object[] {testClass});
++                    }
+                 } catch (ConstructorNotFoundException rootProblem) {
+                     if (testClass.isAnnotationPresent(PowerMockRunnerDelegate.class)
+                             && JUnitVersion.isGreaterThanOrEqualTo("4.5")) {
+diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
+index bf1e2e3..0d60487 100644
+--- a/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
++++ b/powermock-reflect/src/test/java/org/powermock/reflect/WhiteBoxTest.java
+@@ -248,7 +248,7 @@ public class WhiteBoxTest {
+ 
+     @Test
+     public void testMethodWithPrimitiveAndWrappedInt_primtive_wrapped() throws Exception {
+-        assertEquals(17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt",
++        assertEquals((Integer)17, Whitebox.invokeMethod(new ClassWithPrivateMethods(), "methodWithPrimitiveAndWrappedInt",
+                                                new Class[]{int.class, Integer.class}, 9, Integer.valueOf(8)));
+     }
+ 
+@@ -257,7 +257,7 @@ public class WhiteBoxTest {
+         int expected = 123;
+         Whitebox.setInternalState(ClassWithInternalState.class, "staticState", expected);
+         assertEquals(expected, ClassWithInternalState.getStaticState());
+-        assertEquals(expected, Whitebox.getInternalState(ClassWithInternalState.class, "staticState"));
++        assertEquals(expected, (int)Whitebox.getInternalState(ClassWithInternalState.class, "staticState"));
+     }
+ 
+ 	@Test
+@@ -334,25 +334,25 @@ public class WhiteBoxTest {
+     @Test
+     public void testInvokeVarArgsMethod_multipleValues() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(6, Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3));
++        assertEquals(6, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 1, 2, 3));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_noArguments() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(0, Whitebox.invokeMethod(tested, "varArgsMethod"));
++        assertEquals(0, (int)Whitebox.invokeMethod(tested, "varArgsMethod"));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_oneArgument() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod", 2));
++        assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod", 2));
+     }
+ 
+     @Test
+     public void testInvokeVarArgsMethod_invokeVarArgsWithOneArgument() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(1, Whitebox.invokeMethod(tested, "varArgsMethod", new Class<?>[]{int[].class}, 1));
++        assertEquals(1, (int)Whitebox.invokeMethod(tested, "varArgsMethod", new Class<?>[]{int[].class}, 1));
+     }
+ 
+     @Test
+@@ -376,7 +376,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, value);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test
+@@ -387,8 +387,8 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, value);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
+-        assertEquals(-1, Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
++        assertEquals(-1, (int)Whitebox.getInternalState(tested, fieldName, ClassWithInternalState.class));
+     }
+ 
+     @Test(expected = IllegalArgumentException.class)
+@@ -398,7 +398,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, new Object());
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test(expected = IllegalArgumentException.class)
+@@ -408,7 +408,7 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState() {
+         };
+         Whitebox.setInternalState(tested, fieldName, (Object) null);
+-        assertEquals(value, Whitebox.getInternalState(tested, fieldName));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, fieldName));
+     }
+ 
+     @Test
+@@ -417,8 +417,8 @@ public class WhiteBoxTest {
+         ClassWithChildThatHasInternalState tested = new ClassWithChildThatHasInternalState();
+         Whitebox.setInternalState(tested, int.class, value);
+         assertEquals(value, (int) Whitebox.getInternalState(tested, int.class));
+-        assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState"));
+-        assertEquals(value, Whitebox.getInternalState(tested, "anotherInternalState",
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState"));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "anotherInternalState",
+                                                       ClassWithChildThatHasInternalState.class));
+     }
+ 
+@@ -429,7 +429,7 @@ public class WhiteBoxTest {
+         Whitebox.setInternalState(tested, int.class, value, ClassWithInternalState.class);
+         assertEquals(42, (int) Whitebox.getInternalState(tested, int.class));
+         assertEquals(value, (int) Whitebox.getInternalState(tested, int.class, ClassWithInternalState.class));
+-        assertEquals(value, Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class));
++        assertEquals(value, (int)Whitebox.getInternalState(tested, "staticState", ClassWithInternalState.class));
+     }
+ 
+     @Test
+@@ -619,7 +619,7 @@ public class WhiteBoxTest {
+     @Test
+     public void testInvokeMethodWithBothNormalAndVarArgsParameter() throws Exception {
+         ClassWithPrivateMethods tested = new ClassWithPrivateMethods();
+-        assertEquals(4, Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3));
++        assertEquals(4, (int)Whitebox.invokeMethod(tested, "varArgsMethod2", 1, 2, 3));
+     }
+ 
+     @Test
+diff --git a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
+index a5e5fda..14b8bbe 100644
+--- a/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
++++ b/powermock-reflect/src/test/java/org/powermock/reflect/internal/proxy/ClassFactory.java
+@@ -1,8 +1,8 @@
+ package org.powermock.reflect.internal.proxy;
+ 
+-import net.sf.cglib.asm.ClassWriter;
+-import net.sf.cglib.asm.MethodVisitor;
+-import net.sf.cglib.asm.Opcodes;
++import org.objectweb.asm.ClassWriter;
++import org.objectweb.asm.MethodVisitor;
++import org.objectweb.asm.Opcodes;
+ 
+ class ClassFactory implements Opcodes {
+     
+-- 
+2.14.1
+
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 7225336c7c..196541a2e3 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -7622,6 +7622,28 @@ namespace::autoclean or namespace::clean and are therefore available to be
 called as methods, which usually isn't want you want.")
     (license (package-license perl))))
 
+(define-public perl-test-command
+  (package
+    (name "perl-test-command")
+    (version "0.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/D/DA/DANBOO/Test-Command-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0cwm3c4d49mdrbm6vgh78b3x8mk730l0zg8i7xb9z8bkx9pzr8r8"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    (home-page "https://github.com/danboo/perl-test-command")
+    (synopsis "Test routines for external commands")
+    (description
+     "This module provides routines for testing the exit status, standard
+output and standard error of external commands.")
+    (license perl-license)))
+
 (define-public perl-test-cpan-meta
   (package
     (name "perl-test-cpan-meta")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index bb66fabc4c..fcd012d894 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -238,6 +238,7 @@ required structures.")
   (package
    (name "openssl")
    (version "1.0.2l")
+   (replacement openssl-1.0.2m)
    (source (origin
              (method url-fetch)
              (uri (list (string-append "ftp://ftp.openssl.org/source/"
@@ -380,14 +381,35 @@ required structures.")
    (license license:openssl)
    (home-page "http://www.openssl.org/")))
 
+;; Fixes CVE-2017-3735 and CVE-2017-3736.
+;; See <https://www.openssl.org/news/cl102.txt>.
+(define-public openssl-1.0.2m
+  (package
+    (inherit openssl)
+    (version "1.0.2m")
+    (source (origin
+              (inherit (package-source openssl))
+              (uri (list (string-append "https://www.openssl.org/source/openssl-"
+                                        version ".tar.gz")
+                         (string-append "ftp://ftp.openssl.org/source/openssl-"
+                                        version ".tar.gz")
+                         (string-append "ftp://ftp.openssl.org/source/old/"
+                                        (string-trim-right version char-set:letter)
+                                        "/openssl-" version ".tar.gz")))
+              (sha256
+               (base32
+                "03vvlfnxx4lhxc83ikfdl6jqph4h52y7lb7li03va6dkqrgg2vwc"))))))
+
 (define-public openssl-next
   (package
     (inherit openssl)
     (name "openssl")
-    (version "1.1.0f")
+    (version "1.1.0g")
     (source (origin
              (method url-fetch)
-             (uri (list (string-append "ftp://ftp.openssl.org/source/"
+             (uri (list (string-append "https://www.openssl.org/source/openssl-"
+                                       version ".tar.gz")
+                        (string-append "ftp://ftp.openssl.org/source/"
                                        name "-" version ".tar.gz")
                         (string-append "ftp://ftp.openssl.org/source/old/"
                                        (string-trim-right version char-set:letter)
@@ -395,7 +417,7 @@ required structures.")
               (patches (search-patches "openssl-1.1.0-c-rehash-in.patch"))
               (sha256
                (base32
-                "0r97n4n552ns571diz54qsgarihrxvbn7kvyv8wjyfs9ybrldxqj"))))
+                "1bvka2wf33w2vxv7yw578nnjqyhz2b3chvfb0l4k2ffscw950kfy"))))
     (outputs '("out"
                "doc"        ;1.3MiB of man3 pages
                "static"))   ; 5.5MiB of .a files
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index 3c449937da..8fa62c9896 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -28,14 +28,14 @@
 (define-public miniupnpc
   (package
     (name "miniupnpc")
-    (version "2.0.20170509")
+    (version "2.0.20171102")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://miniupnp.tuxfamily.org/files/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32 "0spi75q6nafxp3ndnrhrlqagzmjlp8wwlr5x7rnvdpswgxi6ihyk"))))
+        (base32 "1m1552kkdxkyyb5gyykp0j8falxwf1424cm55y50q9l10l11g18l"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index d03f5b58d3..af880c29ff 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -124,14 +124,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
    ;; to be updated as well.
-   (version "2.14.3")
+   (version "2.15.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "078m0za5gyzcah5iaxdwx663yvdp8byvjc8rpzjzcrr4sl6rcc2k"))))
+              "0siyxg1ppg6szjp8xp37zfq1fj97kbdxpigi3asmidqhkx41cw8h"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -145,7 +145,7 @@ as well as the classic centralized workflow.")
           (sha256
 
            (base32
-            "00dh878pwl94p6syh6zgwn7f0zv2bl5xny3pnr390lzxpa9ks3jv"))))))
+            "0xqwfg9xz5nw3ifaki87ahbz0xk5zmkgqs0ig357pxwh2i20kb92"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 42a15340ea..8310df7097 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
+;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -405,7 +406,7 @@ designed to encode video or images into an H.265 / HEVC encoded bitstream.")
 (define-public libass
   (package
     (name "libass")
-    (version "0.13.7")
+    (version "0.14.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -413,11 +414,11 @@ designed to encode video or images into an H.265 / HEVC encoded bitstream.")
                     version "/libass-" version ".tar.xz"))
               (sha256
                (base32
-                "17byv926w1mxn56n896sxvdq4m0yv1l7qbm688h6zr3nzgsyarbh"))))
+                "18iqznl4mabhj9ywfsz4kwvbsplcv1jjxq50nxssvbj8my1267w8"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+       ("nasm" ,nasm)))
     (propagated-inputs
      `(("freetype" ,freetype)
        ("fribidi" ,fribidi)
@@ -1006,7 +1007,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
      `(("perl" ,perl) ; for zsh completion file
        ("pkg-config" ,pkg-config)
        ("python-docutils" ,python-docutils)))
-    ;; Missing features: libguess, Wayland, V4L2
+    ;; Missing features: libguess, V4L2
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("enca" ,enca)
@@ -1038,6 +1039,8 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
        ("pulseaudio" ,pulseaudio)
        ("rsound" ,rsound)
        ("waf" ,python-waf)
+       ("wayland" ,wayland)
+       ("libxkbcommon", libxkbcommon)
        ("youtube-dl" ,youtube-dl)
        ("zlib" ,zlib)))
     (arguments
diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm
index 236807c70a..b66239787e 100644
--- a/gnu/system/shadow.scm
+++ b/gnu/system/shadow.scm
@@ -157,13 +157,15 @@ if [ -f ~/.bashrc ]; then . ~/.bashrc; fi\n"))
 # honor it and otherwise use /bin/sh.
 export SHELL
 
-if [ -n \"$SSH_CLIENT\" -a -z \"`type -P cat`\" ]
+if [[ $- != *i* ]]
 then
-    # We are being invoked from a non-interactive SSH session
-    # (as in \"ssh host command\") but 'cat' cannot be found
-    # in $PATH.  Source /etc/profile so we get $PATH and other
-    # essential variables.
-    source /etc/profile
+    # We are being invoked from a non-interactive shell.  If this
+    # is an SSH session (as in \"ssh host command\"), source
+    # /etc/profile so we get PATH and other essential variables.
+    [[ -n \"$SSH_CLIENT\" ]] && source /etc/profile
+
+    # Don't do anything else.
+    return
 fi
 
 # Adjust the prompt depending on whether we're in 'guix environment'.
diff --git a/gnu/tests/ssh.scm b/gnu/tests/ssh.scm
index 41be360355..6abc6c2501 100644
--- a/gnu/tests/ssh.scm
+++ b/gnu/tests/ssh.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -169,6 +170,33 @@ root with an empty password."
                  (call-with-remote-input-file sftp-session witness
                                               read)))))
 
+          ;; Connect to the guest over SSH.  Make sure we can run commands
+          ;; from the system profile.
+          (test-equal "run executables from system profile"
+            #t
+            (call-with-connected-session/auth
+             (lambda (session)
+               (let ((channel (make-channel session)))
+                 (channel-open-session channel)
+                 (channel-request-exec
+                  channel
+                  (string-append
+                   "mkdir -p /root/.guix-profile/bin && "
+                   "touch /root/.guix-profile/bin/path-witness && "
+                   "chmod 755 /root/.guix-profile/bin/path-witness"))
+                 (zero? (channel-get-exit-status channel))))))
+
+          ;; Connect to the guest over SSH.  Make sure we can run commands
+          ;; from the user profile.
+          (test-equal "run executable from user profile"
+            #t
+            (call-with-connected-session/auth
+             (lambda (session)
+               (let ((channel (make-channel session)))
+                 (channel-open-session channel)
+                 (channel-request-exec channel "path-witness")
+                 (zero? (channel-get-exit-status channel))))))
+
           (test-end)
           (exit (= (test-runner-fail-count (test-runner-current)) 0)))))